gifts2017

Упаковка строк/массивов строк/таблиц/массивов таблиц в QR Code без ВК с поддержкой русских букв через Google API/локальный сервер

Опубликовал Wanderer.nk в раздел Оборудование - Сканер штрих-кода

Функция позволяет генерировать QRCode из строк/масс.строк/ТЗ/масс.тз  2-мя способами:
1. Через Google API (требует наличия интернета)
2. Через собственный веб-сервер (у меня стоит Denwer, но должен подойти любой)

Поддержка русских букв. Проверено на планшетнике с Андроидом //что было в наличии, тем и проверял

Клиент попросил сделать QR код на отгрузочных документов для удобства внесения в свою базу. 

На основе http://infostart.ru/public/137613/ написал свою функцию, избавившись от COMОбъектов Microsoft.XMLHTTP и ADODB.Stream.

C Get запроса перешел на Post, т.к. у Get ограничение в 2кб, а у Post ограничение только самого QR кода (а именно 4296 знаков при использовании кириллицы)

Картинка с кодом выводится в независимости от макета, т.е. макеты документов, справочников и т.д. редактировать не требуется (что для меня огромный плюс). 


Итого имеем:

- генерируем QR-Code без ВК и внешних сервисов.

- не нужно править макеты, только добавить неск. строк кода в формирование макета

- если все же нужно, то можно в макет добавить картинку под код и передать её область в качестве параметра в функцию

- в код можно запихивать строки, таблицы значений, массивы строк и таблиц значений

- работает в управляемых формах (на веб-клиенте пока не проверял, но думаю проблем не будет)

- самый огромный плюс - возможность быстрой загрузки документа у контрагента (приемка продукции по сопроводительным листам, ввод ТТН, СФ и т.д.) с бумажного носителя.

 

В данном коде используются разработки/ПО:

http://infostart.ru/public/137613/ - идея, функции конвертации в UTF+hex

http://tcpdf.org - QR Code generator,  PHP QR Code

http://www.denwer.ru/ - Apache/PHP Web Server

 

Комментарии:

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

- Для раскраски кода использовал http://www.oscomp.ru/1Color.php , т.к. я новичок и скачать разукрашку не могу

- Код функции лежит в файлах. Файлы для денвера там же. Сам денвер можно скачать по ссылке выше

- С помощью файлов PHP QRCode можете сделать сервер генерации QRCode на своем сайте ;) Например, быстрые ссылки для страничек.

 

В планах:

- Масштабирование области под размер кода, т.к. не всегда код влезает в область, а иногда размер области избыточен.

 

Будут вопросы - спрашивайте, отвечу :)

 

*****

Инсталляция:

В 1С:

1. Добавьте функции в любой имеющийся модуль с возможностями вызова сервера клиентом, либо создайте новый

2. В общих макетах создайте макет с именем МакетПечатиКода. В нем добавьте картинку с именем КодРисунок и укажите область в макете с именем Код 

3. В нужных участках кода добавьте соответствующий код

 

Для использования локального веб-сервера:

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

2. Адрес сервера вписать в код функции. У меня вебсервер стоит на локальной машине, папка с файлами QRCode. Соответственно, в функции Новый HTTPСоединение("localhost/QRCode");

*****

 

Например, код формирования картинки в анонс этой публикации:

&НаКлиенте
Процедура ВывестиКод()
ТабДок = Новый ТабличныйДокумент;
Область = ИнтересныеФишки.НапечататьКодСервер("QR Code генератор с кириллицы выводом в любой макет/Табдок",,,ТабДок);
Если Область=Неопределено Тогда
Сообщить("Ошибка формирования кода");
Иначе
ТабДок.Показать();
КонецЕсли;
КонецПроцедуры

 

Использование у меня в конфигурации

// формируем шапку для QR кода
ТЗШапка = Новый ТаблицаЗначений;
ТЗШапка.Колонки.Добавить("Клиент");
ТЗШапка.Колонки.Добавить("NДок");
ТЗШапка.Колонки.Добавить("ДатаДок");

ТЗСериализацияНоменклатуры = Новый ТаблицаЗначений;
ТЗСериализацияНоменклатуры.КОлонки.Добавить("Номенклатура");
ТЗСериализацияНоменклатуры.КОлонки.Добавить("Код");

ТЗДляКода = Новый ТаблицаЗначений;
ТЗДляКода.Колонки.Добавить("Номенклатура");
 ТЗДляКода.Колонки.Добавить("Характеристика1");
 ТЗДляКода.Колонки.Добавить("Характеристика2");
 //-- формируем шапку для QR кода

//...............
Если ВыводитьQR Тогда
ТЗШапка.Очистить();
ТЗДляКода.Очистить();
ТЗСериализацияНоменклатуры.Очистить();

СтрокаТЗШапка = ТЗШапка.Добавить();
СтрокаТЗШапка.Клиент = ВыборкаЗаявка.Клиент.НаименованиеПолное;
СтрокаТЗШапка.NДок = ВыборкаЗаявка.Ссылка.Номер;
СтрокаТЗШапка.ДатаДок = Формат(ВыборкаЗаявка.Ссылка.Дата,"ДЛФ=D");
КонецЕсли;

// В цикле обхода табличной части документа
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Проверяем наличие номенклатуры в таблице сериализации. При отсутствии добавляем
Если ВыводитьQR Тогда
Если ТЗСериализацияНоменклатуры.Найти(Формат(Число(ВыборкаДетальныеЗаписи.Код),"ЧГ=0"),"Код")=Неопределено Тогда
НоваяСтрокаСериализации = ТЗСериализацияНоменклатуры.Добавить();
НоваяСтрокаСериализации.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура.Наименование;
НоваяСтрокаСериализации.Код = Формат(Число(ВыборкаДетальныеЗаписи.Код),"ЧГ=0");
КонецЕсли;

НоваяСтрока = ТЗДляКода.Добавить();
НоваяСтрока.Номенклатура = Формат(Число(ВыборкаДетальныеЗаписи.Код),"ЧГ=0");
НоваяСтрока.Характеристика1 = ВыборкаДетальныеЗаписи.Характеристика1; 
 НоваяСтрока.Характеристика2 = ВыборкаДетальныеЗаписи.Характеристика2; 
 КонецЕсли;

КонецЦикла;
// В конце табличного документа выводим QR Code
Если ВыводитьQR Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТЗВМассиве = Новый Массив;
ТЗВМассиве.Добавить(ТЗСериализацияНоменклатуры);
ТЗВМассиве.Добавить(ТЗДляКода);
ОбластьСКодом = ИнтересныеФишки.НапечататьКодСервер(ТЗШапка,ТЗВМассиве,,ТабДок,,,,"|");

КонецЕсли;

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Текст функции для 1С
.txt 8,76Kb
22.08.12
38
.txt 8,76Kb 38 Скачать
PHP QRCode для вебсервера
.rar 35,76Kb
22.08.12
19
.rar 35,76Kb 19 Скачать

См. также

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

Комментарии

1. Wanderer.nk 22.08.12 10:38
Самый главный плюс этой обработки - возможность передачи любых документов в "электронном" виде на бумаге.
У меня в компании на каждой ТТН, СФ, сопроводительном документе выводится такой код.
Очень упрощает ввод документа в базу у контрагента.
2. Максим Костиков (mkostya) 22.08.12 12:15
Видно что огромная работа проделана, однозначно плюс. Пойду тестировать...
3. Wanderer.nk 22.08.12 12:19
mkostya :) Спасибо

Вообще эта разработка была написана еще в апреле в зачаточном состоянии и запущена в работу в компании.
Постепенно дорабатывалась и на Инфостарте выложил в июне в черновиках. 2 месяца накапливались изменения, решил опубликовать. Вроде мыслей по доработкам больше нет, может у вас появятся :) Пишите, сделаем :)
4. Dmitry Dmitry (Dimasik2007) 22.08.12 12:50
Вопрос очередной опять же к модератаром.
Вот это "нафига":
Конфигурации: 1C: Предприятие 8, 1С:Комплексная автоматизация 8, 1С:Бухгалтерия 8, 1С:Зарплата и Управление Персоналом 8, 1С:Налогоплательщик 8, 1С:Платежные документы 8, 1С:Предприниматель 8, 1С:Управление торговлей 8, 1С:Зарплата и кадры бюджетного учреждения 8 , 1С:Свод отчетов 8, 1С:Консолидация 8 , 1С:Розница 8, 1С:Управление производственным предприятием 8, 1C:Управление небольшой фирмой, 1С:Бухгалтерия бюджетного учреждения 8, 1С:Бухгалтерия государственного учреждения 8
Внешний отчет, обработка для 1С: Предприятие 8.2
5. Wanderer.nk 22.08.12 12:58
(4) Dimasik2007, извиняюсь. Моя первая публикация. Исправлю.
6. Вавилов Николай Vavilov (1cNike) 11.12.13 13:16
Генерируемый QR код не читается сканером. Сравнивал его с кодом полученным другой обработкой - они разные. Кодировалось одно и тоже слово. Куда копать?
7. Вавилов Николай Vavilov (1cNike) 11.12.13 13:36
Разобрался. Оказывается сам виноват, в кодируемой строке был символ "№". Спасибо за публикацию
8. Сергей Довгополов (lcd) 02.02.15 11:53
http://v8.1c.ru/news/newsAbout.jsp?id=11184
Новая возможность программ 1С - формирование платежных документов с QR-кодом
Фирма "1С" реализовала поддержку нового стандарта на уровне "Библиотеки стандартных подсистем" 1С:Предприятия 8. Функция печати QR-кода предоставляется в рамках договора информационно-технологического сопровождения 1С:ИТС и может быть легко встроена в любое прикладное решение системы.
9. Wanderer.nk 11.02.15 10:44
(8) lcd, Спасибо за информацию
нужно проверить, как решение от 1С поведет себя на упаковке массивов данных и какой максимальный объем можно запихнуть в один QR код у 1С.
10. Евгений Ванжула (minimajack) 11.02.15 10:59
(9) Wanderer.nk,
QR-Code
Максимальное количество символов, которые помещаются в один QR-код:
цифры — 7089;
цифры и буквы (латиница) — 4296;
двоичный код — 2953 байт (следовательно, около 2953 букв кириллицы в кодировке windows-1251 или около 1450 букв кириллицы в utf-8);

По факту уже при 1кб данных - адекватно считывать не получается
один гуид = 128 бит = 16 байт - максимум 184 гуида; для платежки хватит - для упаковки массива идея бредовая
11. Wanderer.nk 11.02.15 11:16
(10) minimajack, почему же бредовая?
мое решение успешно работает с момента публикации (даже на пару месяцев больше).

Мой предыдущий комментарий был к вопросу о технических ограничениях решения от 1С, а не стандарта. Про лимиты стандарта я в самой публикации указал в части кириллицы.
12. Евгений Ванжула (minimajack) 11.02.15 11:41
(11) Wanderer.nk,
а именно 4296 знаков при использовании кириллицы
- это при использовании латиницы
1С реализует стандарт оплаты по QR -коду, это совершенно не относится к упаковке массивов.
Прочитать про стандарт
13. Wanderer.nk 11.02.15 16:10
(12) minimajack, но в том числе 1С в БСП предоставляет механизмы по формированию и выводу QR кодов.
В моем случае можно заменить используемые мной костыли с php на решение от 1С.
Все остальное смысла менять нет.

UPD: Посмотрел БСП 2.2.5 Да, компоненты и механизмы уже реализованы и встроены в БСП (не платформу).
В демо примерах (да и в реальной жизни будет так же) QR код формируется конечно на основании кириллических данных.

Да, кстати, в стандарте сказано (стр. 5)
- алфавитно-цифровые данные: 4296 знаков;

вот только какой именно алфавит используется в данном стандарте....
14. Евгений Ванжула (minimajack) 11.02.15 16:54
(13) Wanderer.nk, я не знаю какой стандарт вы читаете, но тут спецификация -> QR code specification
на 26 странице как раз и показан алфавит при alfanumeric сжатии, грубо говоря используется 6 бит вместо 8. Поэтому объем увеличивается.
Для простого расчета лучше использовать raw данные двоичный код — 2953 байт. Ну и в зависимости от сжатия( кодировки) данных этот параметр плавает для самих данных (числа, числабуквы, утф8, канджи).
15. Wanderer.nk 12.02.15 09:51
(14) minimajack, Я читал именно тот стандарт, который Вы привели в 12-ом сообщении.
У меня ощущение, что мы с Вами говорим о разном.

Еще раз:
1. Я не скажу сейчас(!), сколько символов кириллицы влезает в QR код, который генерируется данным решением и затем считывается оборудованием клиента, поскольку я 2 года как покинул компанию, где это решение было реализовано. Знаю только, что оно работает.
2. Откуда была взята информация о количестве символов (а именно 4296 знаков при использовании кириллицы) уточнить не смогу, просто не помню. Информацию в стандарте априори считаем правильной, если решение выполнено по стандарту. Поэтому если в стандарте сказано про 2953 символов кириллицы, принимаем это.
3. Решение от 1С, о котором сказал lcd для меня в первую очередь интересно возможностью отказаться от php, а не печатью документов в УФЭБС
16. Евгений Ванжула (minimajack) 12.02.15 13:34
(15) Wanderer.nk, возможно вам будет интересно альтернативное решение созданное на основе ком объекта JScript.
Решение делалось как проверка возможностей jscript движка и является портом двух js библиотек QRCode и PNG.
Прикрепленные файлы:
QRCode.epf
EliasShy; Irwin; ZyZer; Amel2010; lunjio; Wanderer.nk; Alien_job; +7 Ответить 1
17. Игорь Пашутин (Alien_job) 26.08.15 14:26
(16) minimajack, большое спасибо за обработку!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа