QR-коды в 1С 8.3 (Linux) без COM-Объектов (Формирование через интернет)
Код для генерации QR без использования COM-Объектов.
- Описание
- Подробнее
Описание
Задача: Получать QR-Код на платформе 1С:Предприятие 8.3
Стенд: Kubuntu 12.04 amd64, 1С:Предприятие 8.3
Решение: Здесь на инфостарте опубликована статья для генерации QR кода, но ознакомительная платформа 8.3 на Linux не поддерживает COM-Объекты. При просмотре кода понятно что необходимый функционал можно реализовать средствами платформы.
1. 1С умеет устанавливать HTTP — Соединение еще со времен 8.0;
2. Полученный файл можно поместить во временное хранилище и воспользоваться полученным адресом для вывода.
Часть кода из выше указанной публикации пользователя DanilaDru:
&НаСервере
Функция СохранитьДвоичныйБуферВФайл(Буфер, ИмяФайла) Экспорт
Поток = Новый COMОбъект(«ADODB.Stream»);
Поток.Type = 1; //Бинарный
Поток.Mode = 3;
Поток.Open();
Поток.Write(Буфер);
Поток.SaveToFile(ИмяФайла);
Поток.Close();
КонецФункции
&НаСервере
Функция НапечататьКодСервер(ЗаказСсылка)
ТабДок = Новый ТабличныйДокумент;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(«png»);
АдресНачало = «http://chart.apis.google.com/chart?cht=qr&chs=230×230&chl=»;
АдресКонец = ЗаказСсылка.Номер + Символы.ПС + Заказссылка.Контрагент.Наименование;
АдресКонец = СтрЗаменить(АдресКонец, » «, «+»);
АдресКонец = EncodeURL(АдресКонец);
Соединение = ПолучитьCOMОбъект(«»,«Microsoft.XMLHTTP»);
Соединение.open(«GET», АдресНачало + АдресКонец,0,,);
Соединение.send(null);
СохранитьДвоичныйБуферВФайл(Соединение.responseBody, ИмяВременногоФайла);
//Печать
Макет = Документы.ЗаказПокупателя.ПолучитьМакет(«МакетПечатиКода»);
Область = Макет.ПолучитьОбласть(«Код»);
Область.Рисунки.КодРисунок.Картинка = Новый Картинка(ИмяВременногоФайла);
ТабДок.Вывести(Область);
Возврат ТабДок;
КонецФункции
После реализации средствами платформы:
&НаСервере
Функция НапечататьКодСервер(ЗаказСсылка) Экспорт
АдресНачало = «chart.apis.google.com/chart?cht=qr&chs=230×230&chl=»;
АдресКонец = ЗаказСсылка.Номер + Символы.ПС + Заказссылка.Контрагент.Наименование;
АдресКонец = СтрЗаменить(АдресКонец, » «, «+»);
АдресКонец = EncodeURL(АдресКонец);
Соединение = Новый HTTPСоединение(АдресНачало + АдресКонец,,,,,);
АдресвременногоХранилища = ПолучитьИмяВременногоФайла();
Соединение.Получить(Адрес, АдресвременногоХранилища);
АдресвременногоХранилища = ПоместитьВоВременноеХранилище(Новый Картинка(АдресвременногоХранилища), УникальныйИдентификатор);
Возврат АдресвременногоХранилища;
КонецФункции
И уже теперь мы можем передать АдресвременногоХранилища в качестве пути к данным поля картинки.
P.S. Обратите внимание на адрес, при установке HTTPСоединения необходимо использовать адрес без «http://«, иначе получите сообщение что сервер не доступен.

