gifts2017

QR-коды в 1С 8.3 (Linux) без COM-Объектов (Формирование через интернет)

Опубликовал Игорь Ильиных (Unit_abs) в раздел Программирование - Практика программирования

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


 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Данилюк (DanilaDru) 24.07.12 10:29
Спасибо за продолжение публикации. С использованием HTTPСоединение столкнулся во время использования функционала на разных операционных системах. Поддерживаю правильность его применения. Спасибо.
2. kiril lipatov (kilokilo) 24.07.12 21:53
Плюс - за то, что не стали прятать код в отдельный файл..
3. Доржи Балбаров (Angeros) 30.07.12 07:31
Порадовал заголовок. Без использования ВК. А что не пишете с использованием интернета.:?
4. ac86 (Aleanza) 01.08.12 16:59
Спасибо, работающий вариант. Если интернет на Linux - это не проблема, то COM под Linux это уже проблема.
5. Александр Кирилюк (ArtfulCrom) 02.08.12 01:01
Спасибо за полезную информацию. С КьюАром разобрались, но перерыли всю платформу на гугле, не нашшли какой нужно запихнуть параметр - что бы получить ЕАН 13, например. Обычный. На линухе нужно и более приземленными вещами пользоваться. может подскажете?
6. Семен Слепаков (sa1m0nn) 11.01.13 11:33
Бескостыльный вариант есть ТруЪ!
Unit_abs; +1 Ответить
7. Игорь Ильиных (Unit_abs) 14.01.13 16:02
(1) DanilaDru, Вам спасибо за идею и реализацию, я только перенес на стандартные средства 1С.
8. Игорь Ильиных (Unit_abs) 14.01.13 17:06
(3) Angeros, спасибо за замечание, исправлю.
9. Елена (=melena=) 26.03.16 23:22
Спасибо за обработку! Все работает, но для текста кодирования длиной около 200 символов, если количество символов около 400, то код на сайте не формируется(( Если непосредственно на сайт зайти и вбить в текстовое поле, то все ОК, а из 1С не получается. Как можно решить проблему?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа