Всем привет!
Решил добавить в свою конфигурацию QR коды на макетах печатных форм.
Раньше никогда подобного не делал и начал искать примеры. Как оказалось, примеров много, но все как-то не так. И задумался я об упрощении этого процесса. Т.к. я очень люблю работать с веб ресурсами, а особенно с api, было принято решение поискать сервис для генерации QR кодов да еще и с api. Долго искать не пришлось. Буквально первые несколько результатов запроса выдали нужный сервис. Подобных сервисов немало и выбор мой был ни на чем не основан, он просто был первый. (Ни в коем случае не реклама сервиса). Предложенный мной способ работает с любым сервисом.
В общем суть такова. HTTP запросом получаем двоичные данные картинки которую генерирует веб сервис и вставляем её куда вздумается. Для примера вывожу на форму и в макет печатной формы. Что может быть проще. Для тех кто подумал о том, что сервис может временно не работать или перестать работать совсем, можно добавить несколько сервисов и посылать запросы на них. Ну а для полной автономности можно развернуть свой веб сервер(если его еще нет) буквально за 5 минут и закинуть туда html-ку от Google . Думаю в ближайшее время именно этот способ опробую и поделюсь опытом.
Код модуля формы:
&НаКлиенте
Процедура Генерировать(Команда)
Строка = Текст;
Соединение = Новый HTTPСоединение("api.qrserver.com");
Запрос = Новый HTTPЗапрос("/v1/create-qr-code/?data=" + СтрокуВURL(Строка) + "&size=[" + Размер + "]x[" + Размер + "]");
Результат = Соединение.Получить(Запрос);
Тело = Результат.ПолучитьТелоКакДвоичныеДанные();
QRCode = ПоместитьВоВременноеХранилище(Тело,УникальныйИдентификатор);
ОбъектНаСервере(Тело,Текст,Размер).Показать();
КонецПроцедуры
&НаСервере
Функция ОбъектНаСервере(Тело,Строка,Размер)
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ТабДок = ОбработкаОбъект.ПечатьНаСервере(Тело,Строка,Размер);
Возврат ТабДок;
КонецФункции
&НаСервере
Функция СтрокуВURL(Строка)
Строка = КодироватьСтроку(Строка,СпособКодированияСтроки.URLВКодировкеURL);
Возврат Строка;
КонецФункции
Код модуля объекта:
Функция ПечатьНаСервере(Тело,Текст,Размер) Экспорт
ТабДок = Новый ТабличныйДокумент;
МакетОбработки = ПолучитьМакет("Макет");
ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Текст = Текст;
ОбластьШапка.Параметры.Размер = Строка(Размер) + "х" + Строка(Размер);
ТабДок.Вывести(ОбластьШапка);
ОбластьQR = МакетОбработки.ПолучитьОбласть("Код");
Рис = ОбластьQR.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рис.Лево = 20;
Рис.Ширина = 35;
Рис.Высота = 35;
Рис.ГраницаСверху = Ложь;
Рис.ГраницаСлева = Ложь;
Рис.ГраницаСнизу = Ложь;
Рис.ГраницаСправа = Ложь;
Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
Рис.Картинка = Новый Картинка(Тело);
ТабДок.Вывести(ОбластьQR);
Возврат ТабДок;
КонецФункции
Тест на
1С:Предприятие 8.3 (8.3.18.1128)