Вывод QR-кода типовыми средствами.

Публикация № 1142804

Разработка - Печать - Универсальные печатные формы

QR-код QR QRКод

Вывод QR-кода типовыми средствами. На данный момент очень часто нужно вывести в печатную форму QR-код. Показываю как на примере типового кода из УТ11 это сделать. Можно использовать в любых конфигурациях с обычными формами.

На данный момент очень часто нужно вывести в печатную форму QR-код.
Показываю как на примере типового кода из УТ11 это сделать.

 

Шаг 1
Для этого нужно скопировать из УТ11 ОбщийМакет.КомпонентаПечатиQRКода.

Я брал из УТ 11.4

Если по каким то причинам не можете скопировать макет из УТ, то данный макет прилагаю ниже в обработке "КомпонентаПечатиQRКода.epf".

Так же в обработке ""КомпонентаПечатиQRКода.epf" есть кнопка "Пример печати".

Шаг 2

Скопировать себе в модуль 5 процедур:

/////////////////////////////////////////////////////////////////////////////
// Вывод QR-кода

    
    Функция КомпонентаФормированияQRКода()
        
        ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода. Подробности в журнале регистрации.'");
        
        QRCodeGenerator = ПодключитьКомпонентуИзМакета("QRCodeExtension", "ОбщийМакет.КомпонентаПечатиQRКода");
        Если QRCodeGenerator = Неопределено Тогда
            #Если Клиент Тогда
                Сообщить(ТекстОшибки);
            #КонецЕсли
        КонецЕсли;
        
        Возврат QRCodeGenerator;
        
    КонецФункции
    
    Функция ПодключитьКомпонентуИзМакета(Идентификатор, ПолноеИмяМакета) Экспорт
        
        ПодключаемыйМодуль = Неопределено;
        
        Местоположение = ПолноеИмяМакета;
        СимволическоеИмя = Идентификатор + "SymbolicName";
        
        Если ПодключитьВнешнююКомпоненту(Местоположение, СимволическоеИмя) Тогда
            
            Попытка
                ПодключаемыйМодуль = Новый("AddIn." + СимволическоеИмя + "." + Идентификатор);
                Если ПодключаемыйМодуль = Неопределено Тогда
                    ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'");
                КонецЕсли;
            Исключение
                ПодключаемыйМодуль = Неопределено;
                ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
            КонецПопытки;
            
            Если ПодключаемыйМодуль = Неопределено Тогда
                
                ТекстОшибки = НСтр("ru = 'Не удалось создать объект внешней компоненты ""%1"", подключенной на сервере
                |из макета ""%2"",
                |по причине:
                |%3'");
                
                ЗаписьЖурналаРегистрации(
                НСтр("ru = 'Подключение внешней компоненты на сервере'",
                КодОсновногоЯзыка()),
                УровеньЖурналаРегистрации.Ошибка,,,
                ТекстОшибки);
                
            КонецЕсли;
            
        Иначе
            
            ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере
            |из макета ""%2""
            |по причине:
            |Метод ПодключитьВнешнююКомпоненту вернул Ложь.'");
            
            ЗаписьЖурналаРегистрации(
            НСтр("ru = 'Подключение внешней компоненты на сервере'",
            КодОсновногоЯзыка()),
            УровеньЖурналаРегистрации.Ошибка,,,
            ТекстОшибки);
            
        КонецЕсли;
        
        Возврат ПодключаемыйМодуль;
        
    КонецФункции
    
    Функция КодОсновногоЯзыка() Экспорт
        
        Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
        
    КонецФункции
    
    // Возвращает двоичные данные для формирования QR-кода.
    //
    // Параметры:
    //  QRСтрока         - Строка - данные, которые необходимо разместить в QR-коде.
    //
    //  УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100 %
    //                             распознать.
    //                     Параметр должен иметь тип целого и принимать одно из 4 допустимых значений:
    //                     0 (7 % погрешности), 1 (15 % погрешности), 2(25 % погрешности), 3(35 % погрешности).
    //
    //  Размер           - Число - определяет длину стороны выходного изображения в пикселях.
    //                     Если минимально возможный размер изображения больше этого параметра - код сформирован не будет.
    //
    // Возвращаемое значение:
    //  ДвоичныеДанные  - буфер, содержащий байты PNG-изображения QR-кода.
    //
    // Пример:
    //  
    //  // Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС.
    //
    //  QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа);
    //  ТекстОшибки = "";
    //  ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки);
    //  Если Не ПустаяСтрока(ТекстОшибки)
    //      ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
    //  КонецЕсли;
    //
    //  КартинкаQRКода = Новый Картинка(ДанныеQRКода);
    //  ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;
    //
    Функция ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) Экспорт
        
        //УстановитьОтключениеБезопасногоРежима(Истина);
        ГенераторQRКода = КомпонентаФормированияQRКода();
        Если ГенераторQRКода = Неопределено Тогда
            Возврат Неопределено;
        КонецЕсли;
        
        Попытка
            ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер);
        Исключение
            ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", КодОсновногоЯзыка()),
            УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        КонецПопытки;
        
        Возврат ДвоичныеДанныеКартинки;
        
    КонецФункции
    
    Процедура ВывестиQRКод(ДанныеПечати, ОбластьМакета)
        
        QRСтрока = ДанныеПечати;
        
        Если Не ПустаяСтрока(QRСтрока) Тогда
            
            ДанныеQRКода = ДанныеQRКода(QRСтрока, 0, 190);
            
            Если ТипЗнч(ДанныеQRКода) = Тип("ДвоичныеДанные") Тогда
                КартинкаQRКода = Новый Картинка(ДанныеQRКода);
                ОбластьМакета.Рисунки["QRКод"].Картинка = КартинкаQRКода;
            Иначе
                ТекстСообщения = "Не удалось сформировать QR-код для документа";
                #Если Клиент Тогда
                    Сообщить(ТекстСообщения);
                #КонецЕсли
            КонецЕсли;
            
        КонецЕсли;
        
    КонецПроцедуры
    

// Вывод QR-кода
/////////////////////////////////////////////////////////////////////////////

 

Шаг 3

В макет, в котором вам нужен QR-код вставляете пустую картинку и называете ее QRКод (название может быть любым, но в примере кода используется это название).

 

Шаг 4

Печатаете QR-код

Процедура КнопкаПечатьНажатие(Кнопка)
    
    ТабДок = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("ВыводQR");
    


    ОблQRКод = Макет.ПолучитьОбласть("ОбластьQRКод");
    
    ТекстСсылки = "dobromir.kz"; //Ваша ссылка, можно передавать все что хотите
    ВывестиQRКод(ТекстСсылки ,ОблQRКод);
    ТабДок.Вывести(ОблQRКод);
    
    ТабДок.Показать();
    
КонецПроцедуры

Пример области макета:

Пример результата работы:

Итог

Обработка "КомпонентаПечатиQRКода.epf" идет в качестве примера, так же в ней есть макет "КомпонентаПечатиQRКода".

Все что написано, можно реализовать самостоятельно, описания выше достаточно.

 

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

Тестировалась на:

Конфигурации для Казахстана

Зарплата и Управление Персоналом для Казахстана, редакция 2.0, разработка для Казахстана: «1С-Рейтинг» (2.0.17.7)

"Управление торговлей для Казахстана", редакция 2.2,  локализация для Казахстана: "1С-Рейтинг",  "1С-Сапа" (2.2.17.4)

Бухгалтерия для Казахстана, редакция 2.0, разработка для Казахстана: «1С-Рейтинг» (2.0.29.3)

Управление торговым предприятием для Казахстана, редакция 2.0, разработка для Казахстана: «1С-Рейтинг» (2.0.18.1)

Для РФ

"Управление торговлей", редакция 10.3 (10.3.48.2) 

Управление производственным предприятием, редакция 1.3 (1.3.113.4)

 

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

Наименование Файл Версия Размер
КомпонентаПечатиQRКода.epf

.epf 425,73Kb
49
.epf 1 425,73Kb 49 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. rusmm93 19 21.10.19 14:39 Сейчас в теме
Какое максимальное количество символов можно зашифровать в QR-коде таким образом?
3. Емельянов Алексей 145 21.10.19 14:54 Сейчас в теме
(1) Не нашел такой информации, мне для работы сейчас хватает 100-200 символов, судя по QR-коду еще много войдет.
46. pvl_mksv 20 22.07.20 11:42 Сейчас в теме
(3)712 символов - штрих код не распознался
18. Xershi 1139 11.01.20 15:40 Сейчас в теме
(1) в полнофункциональной версии есть описание. Ответ в (14).
21. viplelik 23 26.01.20 14:43 Сейчас в теме
(1) Хочу заметить, при применении данного кода, компонента печати будет браться из Общего модуля текущий конфигурации, а не из внешней обработки.
QRCodeGenerator = ПодключитьКомпонентуИзМакета("QRCodeExtension", "ОбщийМакет.КомпонентаПечатиQRКода");

Выкладываю QR генератор без БСП. (код выдернут из 1С. Розница 2.3.2.28)
Прикрепленные файлы:
ГенераторQRбезБСП.epf
22. viplelik 23 26.01.20 14:51 Сейчас в теме
2. Senator_I 13 21.10.19 14:44 Сейчас в теме
А компонента эта в платформу вшита? Не так как с штрихкодами?
4. Емельянов Алексей 145 21.10.19 14:54 Сейчас в теме
(2) Да вшита в УТ11, можете оттуда взять.
user761278; Senator_I; +2 Ответить
5. Емельянов Алексей 145 21.10.19 14:57 Сейчас в теме
(2) Мне тем этот метод и понравился. Что нужно всего 5 процедур и компонента, все в платформе, никуда обращаться не нужно.
А то нужно было в фискальный чек QR-код вывести, что только не предлагают и dll и java-скрипты и онлайн сервисы.
Хорошо люди подсказали взять из типовой, я вот оттуда все и собрал в свою конфигурацию.
Senator_I; +1 Ответить
6. dandykry 6 22.10.19 07:38 Сейчас в теме
	
ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(Штрихкод, 2, 100);
		
Если ТипЗнч(ДанныеQRКода) = Тип("ДвоичныеДанные") Тогда
	КартинкаQRКода = Новый Картинка(ДанныеQRКода);
	ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка= КартинкаQRКода;
КонецЕсли;
7. dandykry 6 22.10.19 07:41 Сейчас в теме
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
	
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Высота",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе));
ПараметрыШтрихкода.Вставить("Штрихкод",        Штрихкод);
ПараметрыШтрихкода.Вставить("ТипКода",         16); // QR
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
ПараметрыШтрихкода.Вставить("РазмерШрифта",    6);
	
ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
	
Показать
8. Емельянов Алексей 145 22.10.19 11:21 Сейчас в теме
(7) Это доя какой конфигурации код?
9. dandykry 6 22.10.19 12:32 Сейчас в теме
(8) ДанныеQRКода из БСП
МенеджерОборудованияВызовСервера - скорее всего из БПО. Вообще скопировал из ЕРП, но думаю в большинстве конфигураций с БСП + БПО или по отдельности хотя бы 1 из них. (Типовых не знаю таких, только старые)

UP:
http://prntscr.com/pmmxbe
https://its.1c.ru/db/bsp311doc#content:1358:hdoc

http://prntscr.com/pmmxwd
https://its.1c.ru/db/metod8dev#content:5963:hdoc
10. dandykry 6 22.10.19 12:59 Сейчас в теме
(8) Если грубенько, то вы просто скопировали типовой код. Это наверное полезно для старых и самописных конфигураций. Для свежих типовых столько кода копировать бессмысленно.
Когда я пытался в прошлый раз выложить на инфостарт разработку с использованием материалов типовых конфигураций и материалов с ИТС, меня послали. (сказали нельзя выкладывать консоль запросов с диска ИТС, хоть она у вас и дописана)
Вас почему-то нет) А у вас и код, и компонента. Я не против, но удивляет политика ресурса.
11. Емельянов Алексей 145 22.10.19 14:57 Сейчас в теме
(10) Понятно, что те у кого новые УТ11 или ЕРП им не нужно.
Но полно людей которые работают на УТ10 и других старых конфигурациях, там этого нет.

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

А тут я обработку приложил как пример, в описание указал как реализовать самостоятельно. Подобных тем тут я не нашел.
12. dandykry 6 22.10.19 15:22 Сейчас в теме
(11) Я не осуждаю. Хороший полноценный код. Я просто привел примеры, как это сделать в БСП в 2х вариантах. 1 из них у вас в разобранном виде в публикации.
По поводу правила - я удивлен, что некоторые публикации заворачивают по причине того, что нарушаются правила, а некоторые нет. Лично мне без разницы. Логика модерации непонятна.

2.1.1. Вы должны иметь право на публикацию материала, то есть, являться автором, обладателем исключительных прав на произведение или иметь разрешение на публикацию.


2.2.5. Запрещается размещать материалы с диска ИТС фирмы “1С”.
23. angeliccare 95 28.01.20 20:16 Сейчас в теме
(10) Компонента не работает на 8.2.
Емельянов Алексей; +1 Ответить
24. Емельянов Алексей 145 29.01.20 04:47 Сейчас в теме
(23) Спасибо. Поправлю описание.
25. dandykry 6 29.01.20 09:11 Сейчас в теме
(23) Я тут причем?)) Автор статьи использовал компоненты из типовых конфигураций.
Обращайтесь в 1с или к автору и описывайте ситуацию.

И возможно она работает в 8.2, просто вы что-то не так делаете. Просто написать "не работает" и не указать даже приблизительного текста ошибки, не говоря уже о коде, всякий может.
50. user1147041 16.02.21 11:30 Сейчас в теме
(23) Я взял обработку ГенераторQRбезБСП.epf из (21) и "КомпонентаПечатиQRКода" действительно не работает. Выгрузил из конфы "Бухгалтерия предприятия, редакция 3.0 (3.0.83.25)" - КомпонентаПечатиQRКода
Загрузил в конфу "Бухгалтерия предприятия, редакция 1.6 (1.6.8.3)" (1С:Предприятие 8.2 (8.2.19.130))
Весь код разместил на форме... Работает.
13. AlxNel 3 22.10.19 21:29 Сейчас в теме
Спасибо!
Емельянов Алексей; +1 Ответить
14. Xershi 1139 10.01.20 10:05 Сейчас в теме
15. Емельянов Алексей 145 10.01.20 14:11 Сейчас в теме
(14) У меня решение бесплатное и используется в БСП, а у вас требует 1 стартмани.
В чём плюс я не увидел?
Но спасибо за пример рекламы, у вас в коментах тоже отпишусь ))
16. Xershi 1139 10.01.20 18:05 Сейчас в теме
(15) ваша обработка точно также требует 1 стартмани!
Плюс вы даже публикацию не прочитали, что вообще нонсенс!
Поэтому напишу для вас повторно, компоненту при наличии типовой конфигурации можно взять бесплатно.
А вот использовать БСП совершенно не нужно!
Чем вы к сожалению похвастаться не можете, а в решении из (14) такой проблемы нет!
17. Емельянов Алексей 145 11.01.20 08:44 Сейчас в теме
(16) Еще раз повторю. У меня бесплатная обработка.
Я написал что используется в БСП, то есть я взял готовые процедуры и макет из БСП, а сама БСП не требуется для работы.
Далее за 1 стартмани можно скачать готовую обработку.
Но я выложил по шагам как её сделать за 5 минут самостоятельно, выложив 5 этих процедур.
Создать обработку, вставить туда 5 процедур и макет из БСП и вот вам бесплатная обработка готова.
Использовать можно в любой конфигурации.
Terabaytus; mark_oilbass; +2 1 Ответить
19. user754217 16.01.20 12:11 Сейчас в теме
Спасибо! Очень помогло. Использовал в управляемых формах с минимальными доработками.
Емельянов Алексей; +1 Ответить
20. viplelik 23 26.01.20 02:05 Сейчас в теме
Написал обработку из 2 процедур. Требуется БСП. На Розница 2.3.2.28 работает.
Файл во вложении.
Прикрепленные файлы:
ГенераторQR.epf
alo2012; Zenum; py3uk; +3 Ответить
26. Nysha1210 28.02.20 16:48 Сейчас в теме
У меня 1С 8.3.15, самописная конфа. Всё сделала, как здесь описано. Не работает:

Не удалось подключить внешнюю компоненту для генерации QR-кода. Подробности в журнале регистрации.
Не удалось сформировать QR-код для документа

Что-то видимо недопоняла. Поможете? Спасибо.
27. Емельянов Алексей 145 02.03.20 09:24 Сейчас в теме
(26) Добрый день.
Скопируйте себе макет "КомпонентаПечатиQRКода" из обработки в общие макеты, думаю из-за этого не работает.
28. Емельянов Алексей 145 03.03.20 12:11 Сейчас в теме
(26) Здравствуйте. Получилось?
29. Nysha1210 03.03.20 17:46 Сейчас в теме
(28){Обработка.КомпонентаПечатиQRКода1.Форма.Форма.Форма(152)}: Поле об`єкту недоступне для запису (Картинка)
ОбластьМакета.Рисунки["QRКод"].Картинка = КартинкаQRКода;
30. Емельянов Алексей 145 04.03.20 06:12 Сейчас в теме
(29) Что-то видимо изменили в моей обработке.
Скачал её сейчас, в строке 152 нет кода.
Попробуйте запустить оригинал обработки.
31. Nysha1210 04.03.20 18:49 Сейчас в теме
(30) Ничего не меняла. Взяла так как у вас. У меня в Картинку макета не передаются данные сформированного Двоичного кода. Уже всё просмотрела. На картине защиты и запрета нет. Данные формируются, но вот в картинку не передаются и всё тут((((
33. Емельянов Алексей 145 05.03.20 07:14 Сейчас в теме
(31) Скачал обработку которую прикрепили.
Вы зачем-то вместо обычной картинки вставили элемент ActivX.
Удалите и вставьте обычное изображение в макет и будет работать.
Прикрепленные файлы:
34. Nysha1210 05.03.20 10:12 Сейчас в теме
(33) Спасибо. Всё щас сделаю.
35. Nysha1210 05.03.20 10:22 Сейчас в теме
(34) Уря - всё получилось. Спасибо!!!
36. Емельянов Алексей 145 05.03.20 12:04 Сейчас в теме
32. Nysha1210 04.03.20 18:52 Сейчас в теме
37. SanchoD 221 23.03.20 11:46 Сейчас в теме
В тонком клиенте работает нормально, а в web-клиенте не отображает QR-код, показывает вместо него крест.
В чем может быть проблема?
(БП 3.0.76.67)
Прикрепленные файлы:
38. tistt 15.04.20 12:52 Сейчас в теме
Спасибище Вам огромное!!!!! Пробовала другие обработки , кучу времени потратила зря...А с вашей обработкой получилось!!!! Ура! Спасибо 100 раз!!
39. Емельянов Алексей 145 15.04.20 17:49 Сейчас в теме
40. zav-777 27 09.06.20 16:35 Сейчас в теме
Спасибо. Сильно помогло.
Осталось, чтобы сбер одобрил)))
Емельянов Алексей; +1 Ответить
41. amazonka 25 15.06.20 20:23 Сейчас в теме
у меня тоже взлетело.... большое человеческое спасибо..... особенно когда счас делаеш для обычных форм.... ничего не найти... а тут.... супер!!!
42. LineykaSBK 1 21.06.20 05:49 Сейчас в теме
Вопрос околотемный.
Есть ли готовые решения по считыванию QR кода в 1С, с целью занесения в базу 1С?.
Логически, это был бы очень и очень востребованный инструмент.
Подрубаем сканер штрих кода к компу, или же через вэб сервисы мобильный с установленными QR сканером, настраиваем подключение к базе, и вперед например счета или чеки шлепать и создавать первичку путем считывания штрихкода, а там уже на основании них делать остальные - вытекающие из логики документы.
На данный момент времени я видел в сети решения только для сканера, простого компьютерного сканера, но не для штрих кодов.
43. SanchoD 221 22.06.20 09:39 Сейчас в теме
(42) Так кто мешает сейчас отсканированный QR-код - фактически строку, пропарсить и создать документ/элемент справочника?
Другое дело, что эта строка может быть составлена как угодно и в каждом отдельном случае надо настраивать соответствия между инфой в коде и метаданными базы.
44. LineykaSBK 1 22.06.20 13:21 Сейчас в теме
Я задал уточняющий вопрос "не про кто мешает" а "про кто нибудь уже разрабатывал такой механизм для 1С"
Если такого механизма нет, то и вопросов больше не имеется.
45. user785225 16 02.07.20 18:38 Сейчас в теме
47. 21stas 99 08.09.20 15:01 Сейчас в теме
Много лет использовал эту компоненту.
И недавно QR-код стал генерироваться так, что вместо русских букв считываются вопросики.
Что может быть причиной?
48. AnryMc 791 10.01.21 19:02 Сейчас в теме
(47)
что вместо русских букв считываются вопросики

Есть предположение (вовсе не утверждение) если windows 10 то возможно влияет: "язык по умолчанию"

Попробуйте запустить при раскладке "русская" и "английская" - есть разница?

З.ы. Я кстати тоже писал свой QR генератор, но снабдил его шаблонами: Визитка, Контакт, Wi-Fi подключение... что бы не искать каждый раз https://infostart.ru/public/1352267/
49. 21stas 99 11.01.21 19:08 Сейчас в теме
Мы разобрались - оказывается, приложение на некоторых телефонах неправильно считывало русские буквы из QR-кода.
Оставьте свое сообщение

См. также

Публикаций не найдено

Попробуйте расширить область поиска, проверьте поисковый запрос и повторите попытку.

Или закажите индивидуальную разработку вашего решения.

Создать заказ на разработку