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

14.01.13

Разработка - Универсальные функции

Код для генерации 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С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5372    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46243    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6829    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57279    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8590    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22736    YA_418728146    8    

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