Задача: Получать 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=230x230&chl=";
АдресКонец = ЗаказСсылка.Номер + Символы.ПС + Заказссылка.Контрагент.Наименование;
АдресКонец = СтрЗаменить(АдресКонец, " ", "+");
АдресКонец = EncodeURL(АдресКонец);
Соединение = ПолучитьCOMОбъект("","Microsoft.XMLHTTP");
Соединение.open("GET", АдресНачало + АдресКонец,0,,);
Соединение.send(null);
СохранитьДвоичныйБуферВФайл(Соединение.responseBody, ИмяВременногоФайла);
//Печать
Макет = Документы.ЗаказПокупателя.ПолучитьМакет("МакетПечатиКода");
Область = Макет.ПолучитьОбласть("Код");
Область.Рисунки.КодРисунок.Картинка = Новый Картинка(ИмяВременногоФайла);
ТабДок.Вывести(Область);
Возврат ТабДок;
КонецФункции
После реализации средствами платформы:
&НаСервере
Функция НапечататьКодСервер(ЗаказСсылка) Экспорт
АдресНачало = "chart.apis.google.com/chart?cht=qr&chs=230x230&chl=";
АдресКонец = ЗаказСсылка.Номер + Символы.ПС + Заказссылка.Контрагент.Наименование;
АдресКонец = СтрЗаменить(АдресКонец, " ", "+");
АдресКонец = EncodeURL(АдресКонец);
Соединение = Новый HTTPСоединение(АдресНачало + АдресКонец,,,,,);
АдресвременногоХранилища = ПолучитьИмяВременногоФайла();
Соединение.Получить(Адрес, АдресвременногоХранилища);
АдресвременногоХранилища = ПоместитьВоВременноеХранилище(Новый Картинка(АдресвременногоХранилища), УникальныйИдентификатор);
Возврат АдресвременногоХранилища;
КонецФункции
И уже теперь мы можем передать АдресвременногоХранилища в качестве пути к данным поля картинки.
P.S. Обратите внимание на адрес, при установке HTTPСоединения необходимо использовать адрес без "http://", иначе получите сообщение что сервер не доступен.