1. Через Google API (требует наличия интернета)
2. Через собственный веб-сервер (у меня стоит Denwer, но должен подойти любой)
Поддержка русских букв. Проверено на планшетнике с Андроидом //что было в наличии, тем и проверял
Клиент попросил сделать QR код на отгрузочных документов для удобства внесения в свою базу.
На основе //infostart.ru/public/137613/ написал свою функцию, избавившись от COMОбъектов Microsoft.XMLHTTP и ADODB.Stream.
C Get запроса перешел на Post, т.к. у Get ограничение в 2кб, а у Post ограничение только самого QR кода (а именно 4296 знаков при использовании кириллицы)
Картинка с кодом выводится в независимости от макета, т.е. макеты документов, справочников и т.д. редактировать не требуется (что для меня огромный плюс).
Итого имеем:
— генерируем QR-Code без ВК и внешних сервисов.
— не нужно править макеты, только добавить неск. строк кода в формирование макета
— если все же нужно, то можно в макет добавить картинку под код и передать её область в качестве параметра в функцию
— в код можно запихивать строки, таблицы значений, массивы строк и таблиц значений
— работает в управляемых формах (на веб-клиенте пока не проверял, но думаю проблем не будет)
— самый огромный плюс — возможность быстрой загрузки документа у контрагента (приемка продукции по сопроводительным листам, ввод ТТН, СФ и т.д.) с бумажного носителя.
В данном коде используются разработки/ПО:
//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 Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТЗВМассиве = Новый Массив;
ТЗВМассиве.Добавить(ТЗСериализацияНоменклатуры);
ТЗВМассиве.Добавить(ТЗДляКода);
ОбластьСКодом = ИнтересныеФишки.НапечататьКодСервер(ТЗШапка,ТЗВМассиве,,ТабДок,,,,"|");
КонецЕсли;
Самый главный плюс этой обработки — возможность передачи любых документов в «электронном» виде на бумаге.
У меня в компании на каждой ТТН, СФ, сопроводительном документе выводится такой код.
Очень упрощает ввод документа в базу у контрагента.
Видно что огромная работа проделана, однозначно плюс. Пойду тестировать…
mkostya 🙂 Спасибо
Вообще эта разработка была написана еще в апреле в зачаточном состоянии и запущена в работу в компании.
Постепенно дорабатывалась и на Инфостарте выложил в июне в черновиках. 2 месяца накапливались изменения, решил опубликовать. Вроде мыслей по доработкам больше нет, может у вас появятся 🙂 Пишите, сделаем 🙂
Вопрос очередной опять же к модератаром.
Вот это «нафига»:
Внешний отчет, обработка для 1С: Предприятие 8.2
(4) Dimasik2007, извиняюсь. Моя первая публикация. Исправлю.
Генерируемый QR код не читается сканером. Сравнивал его с кодом полученным другой обработкой — они разные. Кодировалось одно и тоже слово. Куда копать?
Разобрался. Оказывается сам виноват, в кодируемой строке был символ «№». Спасибо за публикацию
Новая возможность программ 1С — формирование платежных документов с QR-кодом
Фирма «1С» реализовала поддержку нового стандарта на уровне «Библиотеки стандартных подсистем» 1С:Предприятия 8. Функция печати QR-кода предоставляется в рамках договора информационно-технологического сопровождения 1С:ИТС и может быть легко встроена в любое прикладное решение системы.
(8) lcd, Спасибо за информацию
нужно проверить, как решение от 1С поведет себя на упаковке массивов данных и какой максимальный объем можно запихнуть в один QR код у 1С.
(9)
QR-Code
цифры — 7089;
цифры и буквы (латиница) — 4296;
двоичный код — 2953 байт (следовательно, около 2953 букв кириллицы в кодировке windows-1251 или около 1450 букв кириллицы в utf-8);
По факту уже при 1кб данных — адекватно считывать не получается
один гуид = 128 бит = 16 байт — максимум 184 гуида; для платежки хватит — для упаковки массива идея бредовая
(10) minimajack, почему же бредовая?
мое решение успешно работает с момента публикации (даже на пару месяцев больше).
Мой предыдущий комментарий был к вопросу о технических ограничениях решения от 1С, а не стандарта. Про лимиты стандарта я в самой публикации указал в части кириллицы.
(11)
— это при использовании латиницы
Прочитать про стандарт
1С реализует стандарт оплаты по QR -коду, это совершенно не относится к упаковке массивов.
(12) minimajack, но в том числе 1С в БСП предоставляет механизмы по формированию и выводу QR кодов.
В моем случае можно заменить используемые мной костыли с php на решение от 1С.
Все остальное смысла менять нет.
UPD: Посмотрел БСП 2.2.5 Да, компоненты и механизмы уже реализованы и встроены в БСП (не платформу).
В демо примерах (да и в реальной жизни будет так же) QR код формируется конечно на основании кириллических данных.
Да, кстати, в стандарте сказано (стр. 5)
вот только какой именно алфавит используется в данном стандарте….
(13) я не знаю какой стандарт вы читаете, но тут спецификация ->QR code specification
на 26 странице как раз и показан алфавит при alfanumeric сжатии, грубо говоря используется 6 бит вместо 8. Поэтому объем увеличивается.
Для простого расчета лучше использовать raw данные двоичный код — 2953 байт. Ну и в зависимости от сжатия( кодировки) данных этот параметр плавает для самих данных (числа, числабуквы, утф8, канджи).
(14) minimajack, Я читал именно тот стандарт, который Вы привели в 12-ом сообщении.
У меня ощущение, что мы с Вами говорим о разном.
Еще раз:
1. Я не скажу сейчас(!), сколько символов кириллицы влезает в QR код, который генерируется данным решением и затем считывается оборудованием клиента, поскольку я 2 года как покинул компанию, где это решение было реализовано. Знаю только, что оно работает.
2. Откуда была взята информация о количестве символов (а именно 4296 знаков при использовании кириллицы) уточнить не смогу, просто не помню. Информацию в стандарте априори считаем правильной, если решение выполнено по стандарту. Поэтому если в стандарте сказано про 2953 символов кириллицы, принимаем это.
3. Решение от 1С, о котором сказал lcd для меня в первую очередь интересно возможностью отказаться от php, а не печатью документов в УФЭБС
(15) возможно вам будет интересно альтернативное решение созданное на основе ком объекта JScript.
Решение делалось как проверка возможностей jscript движка и является портом двух js библиотек QRCode и PNG.
(16) minimajack, большое спасибо за обработку!
Павел, помогите понять: а мона вводить «первичку»: Торг-12, Счфак, сами счета, и приёмные акты из другой программы в 1С посредством QR -кода.
При условии, конечно, что они уже несут на себе изображение QR ?
Сергей
Реализовано? у меня как раз сейчас стоит задача максимально вписать QR в этикетку, чтобы увеличить расстояние, на котором ТСД смогут «увидеть» и прочитать данные.