Выводит на QR дисплей сформированный QR код. Судя по API производителей должна работать и с другими производителями QR дисплеев. Подключается как обработка обслуживания торгового оборудования.
Кодировку устанавливаем UTF8. В комплекте (макеты) MSComm32.ocx и файл лицензии.
MSComm32.ocx и Файл лицензий необходимо сохранить из макета.
MSComm32.ocx необходимо зарегистрировать в системе "regsvr32 MSComm32.ocx"
Файл лицензий внести в реестр windows (без этого работать не будет)
Тестировалось на платформе 8.3.20.1710. Подойдет к конфигурациям, где есть Подключаемое оборудование (неуправляемые формы).
Подключается как обработка обслуживания торгового оборудования. Меню "Сервис" - "Служебные" - "Подключение и настройка торгового оборудования"
В форме где будем вызывать вывод на QR дисплей в процедуре "ПриОткрытии" вставить следующий код:
Результат = ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
Разместить процедуры
// Процедура осуществляет вывод информации на дисплей покупателя.
//
// Параметры:
// Нет.
//
&НаКлиенте
Процедура ВывестиИнформациюНаДисплейПокупателя(Данные) Экспорт
ВидТО = Перечисления.ВидыТорговогоОборудования.ДисплейПокупателя;
Дисплеи = ПолучитьСерверТО().ПолучитьСписокУстройств(ВидТО);
Дисплей = Неопределено;
Для Каждого Дисплей Из Дисплеи Цикл
Если ПустаяСтрока(Данные) Тогда
ПолучитьСерверТО().ОчиститьДисплейПокупателя(Дисплей);
Иначе
ПолучитьСерверТО().ВывестиСтрокуНаДисплейПокупателя(Дисплей, Данные);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ВывестиИнформациюНаДисплейПокупателя()
// Функция возвращает признак того, что клиент поддерживает работу с видом ТО,
// переданным в качестве параметра.
//
// Параметры:
// Вид - <ПеречислениеСсылка.ВидыТорговогоОборудования>
// - Вид торгового оборудования, информация о поддержке
// которого запрашивается.
//
// Возвращаемое значение:
// <Булево> - Признак поддержки указанного класса торгового оборудования.
//
Функция ПоддерживаетсяВидТО(Вид) Экспорт
Результат = Ложь;
Если Вид = Перечисления.ВидыТорговогоОборудования.ДисплейПокупателя Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции // ПоддерживаетсяВидТО()
Вызывается с помощью
ВывестиИнформациюНаДисплейПокупателя(
"[T1]" + "Верхняя строка"+ Символы.ВК + Символы.ПС +
"[QL]" + "QR КОД" + Символы.ВК + Символы.ПС +
"[T2]" + "Нижняя строка" + Символы.ВК + Символы.ПС);
Для более корректного отображения русских букв Верхнюю строку и Нижнюю строку перекодировать в UTF8 с помощью функций
Функция Dec_to_Hex(Знач пDec, Знач Разрядность = 2)
пHex = "0123456789ABCDEF";
Результат = "";
Для СимвЧисло = 1 По Разрядность Цикл
ТекЧисло = пDec % 16;
пDec = Цел(пDec / 16);
Результат = Сред(пHex, ТекЧисло + 1, 1) + Результат;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПереводТекстаUnicodeToUTF8(СтрокаДляКодировки)
СимволыДляИсключения = "-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~№";
Результат = "";
Для а = 1 По СтрДлина(СтрокаДляКодировки) Цикл
ТекСимв = Сред(СтрокаДляКодировки, а, 1);
Если ТекСимв = " " Тогда
Результат = Результат + "20";
Продолжить;
КонецЕсли;
Если Найти(СимволыДляИсключения, ТекСимв) > 0 Тогда
Результат = Результат + ТекСимв;
Продолжить;
КонецЕсли;
ЮниКод = КодСимвола(ТекСимв);
Если ЮниКод < 128 Тогда
Результат = Результат + "%" + Dec_to_Hex(ЮниКод);
Иначе
ИндексЮникод = 32;
Байт = 8;
ХексКод = "";
Пока ИндексЮникод > 4 Цикл
// установка следующих за первым байтов
ТекБайт = ЮниКод % 64;
ХексКод = "%" + Dec_to_Hex(128 + ТекБайт) + ХексКод;
ЮниКод = Цел(ЮниКод / 64);
// проверка на закрывающий байт
Если ЮниКод < ИндексЮникод Тогда
ХексКод = "%" + Dec_to_Hex((Байт-2) * ИндексЮникод + ЮниКод) + ХексКод;
Прервать;
КонецЕсли;
// переход к следующему уровню закрытия
ИндексЮникод = ИндексЮникод / 2;
Байт = Байт * 2;
КонецЦикла;
Результат = Результат + ХексКод;
КонецЕсли;
КонецЦикла;
Буфер = ПолучитьБуферДвоичныхДанныхИзHexСтроки(Результат);
Поток = Новый ПотокВПамяти(Буфер);
ЧтениеТекста = Новый ЧтениеТекста(Поток, КодировкаТекста.ANSI, "", "");
Данные = ЧтениеТекста.Прочитать();
Возврат Данные;
КонецФункции