Генератор 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

См. также

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

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3767    Abysswalker    9    

45

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

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

14.05.2025    7078    DeerCven    15    

60

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

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

21.05.2024    50839    dimanich70    83    

170

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

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

1 стартмани

18.03.2024    7484    7    John_d    13    

59

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

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

12.02.2024    64232    atdonya    31    

70

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

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

30.11.2023    9362    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. orfos 219 17.12.20 12:03 Сейчас в теме
классная идея!
shell_maxim; kaliuzhnyi; +2 Ответить
2. SerVer1C 1007 17.12.20 12:21 Сейчас в теме
тут надо уточнить, что генератор не в 1с, а на внешнем сервисе
aibasoft; Ali_q; smit1c; DrAku1a; cleaner_it; kaliuzhnyi; Yimaida; +7 Ответить
3. shell_maxim 45 17.12.20 12:30 Сейчас в теме
(2) изменил заголовок)
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 45 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 45 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 178 20.12.20 02:50 Сейчас в теме
Поставил минус потому что название не соответствует содержимому.
13. DrAku1a 1789 20.12.20 04:28 Сейчас в теме
Ожидалось - супер фича по программной генерации QR-кодов в 1С, под катом - тупо запрос с интернет-сервиса...
С тем-же успехом можно использовать qrcoder.ru или какой-нибудь другой онлайн-сервис.
nekit_rdx; smit1c; Drivingblind; drmaxart; kamisov; +5 Ответить
14. drmaxart 154 20.12.20 12:31 Сейчас в теме
Мы так делали по причине невозможности применения ВК со штрих-кодом, но возникают периодически ошибки, если сервис тот недоступен. Пришлось развернуть локально, но в идеале его бы на 1С написать чистом без всяких внешних источников.
15. starik-2005 3211 20.12.20 12:54 Сейчас в теме
(14)
по причине невозможности применения ВК со штрих-кодом
А что за причина?
RocKeR_13; +1 Ответить
21. sashs1980 89 21.12.20 15:15 Сейчас в теме
(14) Так есть же подобные решения.
17. RocKeR_13 1464 20.12.20 23:24 Сейчас в теме
Тьфу ты, подумал будет что-то а-ля программное создание bmp или на худой конец раскрашивание ячеек табличного документа)))
18. user1503726 21.12.20 04:05 Сейчас в теме
Можно еще текст с символами 0А, 0В или какие там подходят для единичной матрицы... и драйвер шрифта, который преобразует их в qr код.
19. victuan 4395 21.12.20 04:42 Сейчас в теме
(2) Надо еще уточнить, что это генератор для 1С8, а не для 1С, т.к. в частности не работает в 1С 7.7.
20. ellavs 1073 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 92 22.12.20 14:46 Сейчас в теме
меня иногда ругают за излишний код ревью, но две строки

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


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

Как вариант
25. malikov_pro 1355 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-а. Кирилллицу он не "любит".
Для отправки сообщения требуется регистрация/авторизация