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

 

9 Comments

  1. DanilaDru

    Спасибо за продолжение публикации. С использованием HTTPСоединение столкнулся во время использования функционала на разных операционных системах. Поддерживаю правильность его применения. Спасибо.

    Reply
  2. kilokilo

    Плюс — за то, что не стали прятать код в отдельный файл..

    Reply
  3. Angeros

    Порадовал заголовок. Без использования ВК. А что не пишете с использованием интернета.:?

    Reply
  4. Aleanza

    Спасибо, работающий вариант. Если интернет на Linux — это не проблема, то COM под Linux это уже проблема.

    Reply
  5. ArtfulCrom

    Спасибо за полезную информацию. С КьюАром разобрались, но перерыли всю платформу на гугле, не нашшли какой нужно запихнуть параметр — что бы получить ЕАН 13, например. Обычный. На линухе нужно и более приземленными вещами пользоваться. может подскажете?

    Reply
  6. sa1m0nn

    Бескостыльный вариант есть ТруЪ!

    Reply
  7. Unit_abs

    (1) DanilaDru, Вам спасибо за идею и реализацию, я только перенес на стандартные средства 1С.

    Reply
  8. Unit_abs

    (3) Angeros, спасибо за замечание, исправлю.

    Reply
  9. =melena=

    Спасибо за обработку! Все работает, но для текста кодирования длиной около 200 символов, если количество символов около 400, то код на сайте не формируется(( Если непосредственно на сайт зайти и вбить в текстовое поле, то все ОК, а из 1С не получается. Как можно решить проблему?

    Reply

Leave a Comment

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