Генератор QR кодов для 1С без компонент через HTTP API

11.01.21

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

Самый простой, на мой взгляд, способ получить QR код для 1СV8. Без внешних компонент, как говорится, бесплатно, без смс и регистрации))

Всем привет!

Решил добавить в свою конфигурацию  QR коды на макетах печатных форм.

Раньше никогда подобного не делал и начал искать примеры. Как оказалось, примеров много, но все как-то не так. И задумался я об упрощении этого процесса. Т.к. я очень люблю работать с веб ресурсами, а особенно с api, было принято решение поискать сервис для генерации QR кодов да еще и с api. Долго искать не пришлось. Буквально первые несколько результатов запроса выдали нужный сервис. Подобных сервисов немало и выбор мой был ни на чем не основан, он просто был первый. (Ни в коем случае не реклама сервиса). Предложенный мной способ работает с любым сервисом.

В общем суть такова. HTTP запросом получаем двоичные данные картинки которую генерирует веб сервис и вставляем её куда вздумается. Для примера вывожу на форму и в макет печатной формы. Что может быть проще. Для тех кто подумал о том, что сервис может временно не работать или перестать работать совсем, можно добавить несколько сервисов и посылать запросы на них. Ну а для полной автономности можно развернуть свой веб сервер(если его еще нет) буквально за 5 минут и закинуть туда html-ку от Google . Думаю в ближайшее время именно этот способ опробую и поделюсь опытом. 

Код модуля формы:

&НаКлиенте
Процедура Генерировать(Команда)
	
	Строка = Текст;
	Соединение = Новый HTTPСоединение("api.qrserver.com");
	Запрос = Новый HTTPЗапрос("/v1/create-qr-code/?data=" + СтрокуВURL(Строка) + "&size=[" + Размер + "]x[" + Размер + "]");    
	Результат =  Соединение.Получить(Запрос);
	Тело = Результат.ПолучитьТелоКакДвоичныеДанные();

	QRCode = ПоместитьВоВременноеХранилище(Тело,УникальныйИдентификатор);	
	
	
	ОбъектНаСервере(Тело,Текст,Размер).Показать();

КонецПроцедуры

&НаСервере
Функция ОбъектНаСервере(Тело,Строка,Размер)
	
	ОбработкаОбъект =  РеквизитФормыВЗначение("Объект");
	ТабДок = ОбработкаОбъект.ПечатьНаСервере(Тело,Строка,Размер);
	
	Возврат ТабДок;
КонецФункции


&НаСервере
Функция СтрокуВURL(Строка)
	
	Строка = КодироватьСтроку(Строка,СпособКодированияСтроки.URLВКодировкеURL);
	
	Возврат Строка;
	
КонецФункции

 

Код модуля объекта:

Функция ПечатьНаСервере(Тело,Текст,Размер) Экспорт 
	ТабДок = Новый ТабличныйДокумент;
	МакетОбработки = ПолучитьМакет("Макет");
	
	ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
	ОбластьШапка.Параметры.Текст = Текст;
	ОбластьШапка.Параметры.Размер = Строка(Размер) + "х" + Строка(Размер);
	ТабДок.Вывести(ОбластьШапка);
	
	
	ОбластьQR = МакетОбработки.ПолучитьОбласть("Код");
	Рис = ОбластьQR.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	Рис.Лево = 20;
	Рис.Ширина = 35;
	Рис.Высота = 35;
	Рис.ГраницаСверху = Ложь;
	Рис.ГраницаСлева = Ложь;
	Рис.ГраницаСнизу = Ложь;
	Рис.ГраницаСправа = Ложь;
	Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
	Рис.Картинка = Новый  Картинка(Тело);
	ТабДок.Вывести(ОбластьQR);
	
	Возврат ТабДок;
КонецФункции

Тест на 

1С:Предприятие 8.3 (8.3.18.1128)

Вступайте в нашу телеграмм-группу Инфостарт

обработка QR макет картинка API HTTP

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

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

14.05.2025    3412    DeerCven    8    

45

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

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

21.05.2024    40884    dimanich70    83    

157

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

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

1 стартмани

18.03.2024    6018    6    John_d    11    

58

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

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

12.02.2024    48988    atdonya    30    

65

Универсальные функции Программист 1С v8.3 Бесплатно (free)

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

30.11.2023    7782    ke.92@mail.ru    17    

66

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

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

28.08.2023    20971    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. orfos 218 17.12.20 12:03 Сейчас в теме
классная идея!
shell_maxim; kaliuzhnyi; +2 Ответить
2. SerVer1C 984 17.12.20 12:21 Сейчас в теме
тут надо уточнить, что генератор не в 1с, а на внешнем сервисе
aibasoft; Ali_q; smit1c; DrAku1a; cleaner_it; kaliuzhnyi; Yimaida; +7 Ответить
3. shell_maxim 44 17.12.20 12:30 Сейчас в теме
16. hollyfood 20.12.20 14:34 Сейчас в теме
(3)Подобных сервисов не мало и выбор мой был ни на чем не основан, он просто был первый. - "немало" - слитно, поправите?
4. davdykin 25 17.12.20 13:19 Сейчас в теме
Это конечно сугубо мое мнение, но:
1. Использование интернет сервисов для локальных конфигураций не всегда оправдано, особенно когда это может стать критично, клиенту надо отдать документа, а у нас сервис не отвечает.
2. Мне в этом вопросе гораздо больше понравилась компонента от 1С, которая возвращает qr код в виде картинки, что очень удобно, т.к. без лишних заморочек позволяет вставлять в различные места (например у меня работает в шаблоне word договора).
criptid; kvika; bmugem; Bassgood; German; AnryMc; Drivingblind; zqzq; Lapitskiy; cleaner_it; Dream_kz; Robbi; tka4enk0; Yimaida; +14 Ответить
5. shell_maxim 44 17.12.20 17:50 Сейчас в теме
(4) По поводу доступности сервисов согласен и написал что можно и локально развернуть за 5 минут. Это просто еще один из способов.
Кстати, находил статью где описывались методы генерации кода средствами 1с, прям на форме тысячи строк кода и не одного комментария...
У меня как-то не очень с внешними компонентами.
6. tka4enk0 146 18.12.20 08:04 Сейчас в теме
хм. в 2010 году работал в больнице. Так 10 лет назад у них был рентген аппарат с программным обеспечением который и снимки хранил, и описания делал
(5)
не одного комментари

Ну не все там так сложно. из той же УТ функционал можно за полчаса дернуть.
9. bugagashenka 205 19.12.20 17:53 Сейчас в теме
(5) В БСП сейчас есть в Управлении печатью типовой механизм. Вызывается одной строчкой
criptid; laurely@mail.ru; nekit_rdx; Bassgood; ellavs; cleaner_it; +6 Ответить
7. zhenyat 8 19.12.20 10:22 Сейчас в теме
Погодите, но БСП же сама умеет в QR????
8. shell_maxim 44 19.12.20 10:48 Сейчас в теме
(7) насколько мне известно в последних версиях нет. В любом случае через компоненту
11. Labotamy 19.12.20 18:48 Сейчас в теме
(8)между компанентой бсп и внешним сервисом, я выберу бсп
Bassgood; Lapitskiy; zeegin; Brawler; +4 Ответить
32. zebr 32 08.09.24 10:01 Сейчас в теме
(11) Выбирать нужно, руководствуясь условиями выполнения задачи, а не своими предпочтениями
10. Labotamy 19.12.20 18:47 Сейчас в теме
12. zeegin 175 20.12.20 02:50 Сейчас в теме
Поставил минус потому что название не соответствует содержимому.
13. DrAku1a 1770 20.12.20 04:28 Сейчас в теме
Ожидалось - супер фича по программной генерации QR-кодов в 1С, под катом - тупо запрос с интернет-сервиса...
С тем-же успехом можно использовать qrcoder.ru или какой-нибудь другой онлайн-сервис.
nekit_rdx; smit1c; Drivingblind; drmaxart; kamisov; +5 Ответить
14. drmaxart 152 20.12.20 12:31 Сейчас в теме
Мы так делали по причине невозможности применения ВК со штрих-кодом, но возникают периодически ошибки, если сервис тот недоступен. Пришлось развернуть локально, но в идеале его бы на 1С написать чистом без всяких внешних источников.
15. starik-2005 3188 20.12.20 12:54 Сейчас в теме
(14)
по причине невозможности применения ВК со штрих-кодом
А что за причина?
RocKeR_13; +1 Ответить
21. sashs1980 89 21.12.20 15:15 Сейчас в теме
(14) Так есть же подобные решения.
17. RocKeR_13 1445 20.12.20 23:24 Сейчас в теме
Тьфу ты, подумал будет что-то а-ля программное создание bmp или на худой конец раскрашивание ячеек табличного документа)))
18. user1503726 21.12.20 04:05 Сейчас в теме
Можно еще текст с символами 0А, 0В или какие там подходят для единичной матрицы... и драйвер шрифта, который преобразует их в qr код.
19. victuan 4345 21.12.20 04:42 Сейчас в теме
(2) Надо еще уточнить, что это генератор для 1С8, а не для 1С, т.к. в частности не работает в 1С 7.7.
20. ellavs 1064 21.12.20 09:43 Сейчас в теме
Если как альтернатива БСП, то почему бы и нет :)
В БСП же всё делается одной строкой (при чем даже не в самой свежей версии).
Вот тут приводила пример, как часть примера при формировании макета
Цитирую:
// Получаем данные для QR-кода
QRCode = Новый Картинка(УправлениеПечатью.ДанныеQRКода("Строка для кодирования в QR", 0, 100));
// Добавление картинки кода в макет
ОбластьНижнегоКолонтитула.Параметры.QRCode = QRCode;
criptid; mart-sha; idiked; timka05; Dach; AndreevYA; vaakulin; AnryMc; shell_maxim; +9 Ответить
22. kolya_tlt 91 22.12.20 14:46 Сейчас в теме
меня иногда ругают за излишний код ревью, но две строки

Результат =  Соединение.Получить(Запрос);
Тело = Результат.ПолучитьТелоКакДвоичныеДанные();


должны быть в попытке
за интеграцию спасибо, будем иметь в виду где компоненты может и не быть
26. Cyberhawk 136 08.01.21 17:12 Сейчас в теме
(22) Вторую-то зачем в попытке?
23. malikov_pro 1346 22.12.20 19:28 Сейчас в теме
(5) В статье не увидел описания локальной инсталяции, подобную задачу решал через node.js, для нее нужно сервис на win зарегистрировать.
24. shell_maxim 44 22.12.20 20:41 Сейчас в теме
(23)
Ну а для полной автономности можно развернуть свой веб сервер(если его еще нет) буквально за 5 минут и закинуть туда html-ку от Google .

Как вариант
25. malikov_pro 1346 22.12.20 23:40 Сейчас в теме
(24) Пример только для QR
const QRCode = require('qrcode')
const { PassThrough } = require('stream')

const express = require('express')
const app = express();

app.get('/qr/:content', async (req, res) => {
	
	try {
		const content = req.params.content;
		const qrStream = new PassThrough();
		const result = await QRCode.toFileStream(qrStream, content,
			{
				type: 'png',
				width: 200,
				errorCorrectionLevel: 'H'
			}
		);

		qrStream.pipe(res);

	} catch (err) {
		console.error('Failed to return content', err);
	}
});

app.listen(3000, () => console.log('Server ready'));
Показать


Для DataMatrix и остального вариант использовать
https://github.com/metafloor/bwip-js
shell_maxim; +1 Ответить
27. roman199 11.06.21 19:02 Сейчас в теме
shell_maxim, здравствуйте, возможно с вами связаться не через данный сайт нужна помощь в данной обработке?
30. пользователь 01.07.24 09:59
Сообщение было скрыто модератором.
...
29. Azamwox 01.07.24 07:38 Сейчас в теме
shell_maxim, здравствуйте, возможно с вами связаться нужна помощь в данной обработке?
31. пользователь 01.07.24 09:59
Сообщение было скрыто модератором.
...
33. Borey 27.01.25 16:20 Сейчас в теме
Попробовал html-ку от Googl-а. Кирилллицу он не "любит".
Для отправки сообщения требуется регистрация/авторизация