Генерация QR кода для любых конфигураций 1С (обычные и управляемые формы)



Для генерации используется компонента типовой конфигурации УТ11, встроенная в общий макет «КомпонентаПечатиQRКода».
Ниже приведены процедуры, чтобы сделать обработку самостоятельно (только для УФ).

Создайте внешнюю обработку и из конфирурации УТ 11.4 перетащите в нее общий макет "КомпонентаПечатиQRКода".

В модуле объекта: 

1 Создаем функцию получить генератор QR кода из макета:

функция ПолучитьГенераторQRкода()
лМакетКомпоненты=ПолучитьМакет("КомпонентаПечатиQRКода");
лАдрес=ПоместитьВоВременноеХранилище(лМакетКомпоненты);
ГенераторQRкода=неопределено;
попытка
Если ПодключитьВнешнююКомпоненту(лАдрес,"QR") тогда
ГенераторQRкода=новый("AddIn.QR.QRCodeExtension");
иначе
сообщить("Не удалось подключить компоненту генерации QR кода");
конецЕсли;
исключение
сообщить(ОписаниеОшибки());
КонецПопытки;
возврат ГенераторQRкода;
конецФункции

2 Создаем функцию получить двоичные данные QR-кода:

// Возвращает двоичные данные для формирования QR кода.
//
// Параметры:
//  QRСтрока         - Строка - данные, которые необходимо разместить в QR-коде.
//
//  УровеньКоррекции - Число - уровень погрешности изображения при котором данный QR-код все еще возможно 100%
//                             распознать.
//                     Параметр должен иметь тип целого и принимать одно из 4 допустимых значений:
//                     0(7% погрешности), 1(15% погрешности), 2(25% погрешности), 3(35% погрешности).
//
//  Размер           - Число - определяет длину стороны выходного изображения в пикселях.
//                     Если минимально возможный размер изображения больше этого параметра - код сформирован не будет.
//
// Возвращаемое значение:
//  ДвоичныеДанные  - буфер, содержащий байты PNG-изображения QR-кода.
//
// Пример:
//
//  // Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС.
//
//  QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа);
//  ТекстОшибки = "";
//  ДанныеQRКода = получитьQRкод(QRСтрока, 0, 190);
//  Если ДанныеQRКода=неопределено тогда
//  возврат;
//  КонецЕсли;
//
//  КартинкаQRКода = Новый Картинка(ДанныеQRКода);
//  ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;
//
Функция получитьQRкод(QRСтрока, УровеньКоррекции, Размер) экспорт
УстановитьОтключениеБезопасногоРежима(Истина);
ГенераторQRКода = ПолучитьГенераторQRкода();
Если ГенераторQRКода = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;

Попытка
ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер);
Исключение
сообщить(ОписаниеОшибки());
КонецПопытки;

Возврат ДвоичныеДанныеКартинки;

КонецФункции

В модуле формы:

&НаСервере
Процедура получитьQRкодНаСервере()
QRкод="";
об=РеквизитФормыВЗначение("Объект");
если СтрДлина(сокрлп(объект.Текст))=0 тогда сообщить("Нет данных для генерации QR-кода"); возврат; конецЕсли;
ДанныеQRКода = об.получитьQRкод(Объект.Текст, 0, 190);
QRкод =ПоместитьВоВременноеХранилище(Новый Картинка(ДанныеQRКода));

КонецПроцедуры

&НаКлиенте
Процедура получитьQRкод(Команда)
получитьQRкодНаСервере();
КонецПроцедуры

Тестировалось на платформе 1С:Предприятие 8.3 (8.3.14.1565), конфигурации: БП (3.0.70.25), БП(2.0.66.77), УНФ (1.6.13.58), УТ(11.4.6.200), УТ (10.3.38.1).

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *