Задача: Получать 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://«, иначе получите сообщение что сервер не доступен.




Спасибо за продолжение публикации. С использованием HTTPСоединение столкнулся во время использования функционала на разных операционных системах. Поддерживаю правильность его применения. Спасибо.
Плюс — за то, что не стали прятать код в отдельный файл..
Порадовал заголовок. Без использования ВК. А что не пишете с использованием интернета.:?
Спасибо, работающий вариант. Если интернет на Linux — это не проблема, то COM под Linux это уже проблема.
Спасибо за полезную информацию. С КьюАром разобрались, но перерыли всю платформу на гугле, не нашшли какой нужно запихнуть параметр — что бы получить ЕАН 13, например. Обычный. На линухе нужно и более приземленными вещами пользоваться. может подскажете?
Бескостыльный вариант есть ТруЪ!
(1) DanilaDru, Вам спасибо за идею и реализацию, я только перенес на стандартные средства 1С.
(3) Angeros, спасибо за замечание, исправлю.
Спасибо за обработку! Все работает, но для текста кодирования длиной около 200 символов, если количество символов около 400, то код на сайте не формируется(( Если непосредственно на сайт зайти и вбить в текстовое поле, то все ОК, а из 1С не получается. Как можно решить проблему?