Версия для печати темы (https://pro1c.org.ua/index.php?s=07eb1055066d98b5b2a9707cd4a8786c&showtopic=52928)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Работа с QR Code при помощи типовой КомпонентаПечатиQRКода

Автор: kosalex 09.07.19, 13:01

Доброго времени суток!
Подскажите какие методы есть у типовой КомпонентаПечатиQRКода ? В интернете нигде не могу найти примера. Везде с использованием сторонних библиотек.
Задача у меня следующая, сгенерировать QR-Code и сохранить его в картинку.
В самой конфигурации нет примера работы с этой компонентой.

Автор: Petre 09.07.19, 13:29

В БПУ есть пример.
Кроме того, в БПО есть компонента печати штрихкода.

Автор: sava1 09.07.19, 13:32

ИЗ модуля

    ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер);


получить объект

Функция КомпонентаФормированияQRКода(Отказ)
    
    СистемнаяИнформация = Новый СистемнаяИнформация;
    Платформа = СистемнаяИнформация.ТипПлатформы;
    
    ТекстОшибки = НСтр("ru='Не удалось подключить внешнюю компоненту для генерации QR-кода';uk='Не вдалося підключити зовнішній компонент для генерації QR-коду'");
    
    Попытка
        Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиQRКода", "QR") Тогда
            QRCodeGenerator = Новый("AddIn.QR.QRCodeExtension");
        Иначе
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , , Отказ);
        КонецЕсли
    Исключение
        ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки, , , , Отказ);
    КонецПопытки;
    
    Возврат QRCodeGenerator;
    
КонецФункции


и собственно - вызов

//  //Выводим на печать QR-код, содержащий в себе информацию зашифрованную по УФЭБС
//
//  QRСтрока = УправлениеПечатью.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа);
//  ТекстОшибки = "";
//  ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки);
//  Если Не ПустаяСтрока(ТекстОшибки)
//      ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
//  КонецЕсли;
//
//  КартинкаQRКода = Новый Картинка(ДанныеQRКода);
//  ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;

Автор: kosalex 09.07.19, 15:24

Petre @ Сегодня, 14:29 * ,

Нет под рукой БПУ и БПО, есть только УТ 3.1



sava1, ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер);

Значения и типы параметров "УровеньКоррекции" и "Размер" где нибудь можно посмотреть?

Автор: sava1 09.07.19, 15:54

выше в коде - вызов -

ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки);


в ут31 смотрите в УправлениеПечатью

Автор: kosalex 09.07.19, 21:08

sava1 @ Сегодня, 16:54 * ,
Странно, но у меня в этом модуле, да во всей конфигурации УТ 3.1.6.1 нет упоминания о "ДанныеQRКода".

Автор: Vladal 23.07.19, 15:38

kosalex @ 09.07.19, 14:01 * ,
Вопрос решился?

В БСП есть процедура генерации QR-кодов. Хотя когда-то давно вставлял код на JavaScript, встроенном в поле HTML-документа и его дергал для получения .bmp-картинки. Её-то и подставлял в печатную форму.

Вот пример, отвязанный от БСП. А сама компонента находится в общем макете КомпонентаПечатиQRКода
Код

// Возвращает двоичные данные для формирования 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Кода()
    
    ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода. Подробности в журнале регистрации.'");
    
    //--QRCodeGenerator = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("QRCodeExtension", "ОбщийМакет.КомпонентаПечатиQRКода");
    QRCodeGenerator = ПодключитьКомпонентуИзМакета("QRCodeExtension", "КомпонентаПечатиQRКода");
    Если QRCodeGenerator = Неопределено Тогда
        ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
    КонецЕсли;
    
    Возврат QRCodeGenerator;
    
КонецФункции

// Подключает компоненту, выполненную по технологии Native API и COM.
// Компонента должна храниться в макете конфигурации в виде ZIP-архива.
//
// Параметры:
//  Идентификатор   - Строка - идентификатор объекта внешней компоненты.
//  ПолноеИмяМакета - Строка - полное имя макета конфигурации, хранящего ZIP-архив.
//
// Возвращаемое значение:
//  AddIn, Неопределено - экземпляр объекта внешней компоненты или Неопределено, если не удалось создать.
//
// Пример:
//
//  ПодключаемыйМодуль = ОбщегоНазначения.ПодключитьКомпонентуИзМакета(
//      "CNameDecl",
//      "ОбщийМакет.КомпонентаСклоненияФИО");
//
//  Если ПодключаемыйМодуль <> Неопределено Тогда
//      // ПодключаемыйМодуль содержит созданный экземпляр подключенной компоненты.
//  КонецЕсли;
//
//  ПодключаемыйМодуль = Неопределено;
//
Функция ПодключитьКомпонентуИзМакета(Идентификатор, ПолноеИмяМакета) Экспорт

    ПодключаемыйМодуль = Неопределено;
    
    Если Не МакетСуществует(ПолноеИмяМакета) Тогда
        ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере
                       |из %2
                       |по причине:
                       |Подключение на сервере не из макета запрещено'"),
            Идентификатор,
            ПолноеИмяМакета);
    КонецЕсли;
    
    Местоположение = ПолноеИмяМакета;
    СимволическоеИмя = Идентификатор + "SymbolicName";
    
    Если ПодключитьВнешнююКомпоненту(Местоположение, СимволическоеИмя) Тогда
        
        Попытка
            ПодключаемыйМодуль = Новый("AddIn." + СимволическоеИмя + "." + Идентификатор);
            Если ПодключаемыйМодуль = Неопределено Тогда
                ВызватьИсключение НСтр("ru = 'Оператор Новый вернул Неопределено'");
            КонецЕсли;
        Исключение
            ПодключаемыйМодуль = Неопределено;
            ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
        КонецПопытки;
        
        Если ПодключаемыйМодуль = Неопределено Тогда
            
            ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                НСтр("ru = 'Не удалось создать объект внешней компоненты ""%1"", подключенной на сервере
                           |из макета ""%2"",
                           |по причине:
                           |%3'"),
                Идентификатор,
                Местоположение,
                ТекстОшибки);
            
            ЗаписьЖурналаРегистрации(
                НСтр("ru = 'Подключение внешней компоненты на сервере'",
                    КодОсновногоЯзыка()),
                УровеньЖурналаРегистрации.Ошибка,,,
                ТекстОшибки);
            
        КонецЕсли;
        
    Иначе
        
        ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru = 'Не удалось подключить внешнюю компоненту ""%1"" на сервере
                       |из макета ""%2""
                       |по причине:
                       |Метод ПодключитьВнешнююКомпоненту вернул Ложь.'"),
            Идентификатор,
            Местоположение);
        
        ЗаписьЖурналаРегистрации(
            НСтр("ru = 'Подключение внешней компоненты на сервере'",
                КодОсновногоЯзыка()),
            УровеньЖурналаРегистрации.Ошибка,,,
            ТекстОшибки);
        
    КонецЕсли;
    
    Возврат ПодключаемыйМодуль;
    
КонецФункции

// Проверка существования макета по метаданным конфигурации и расширений.
//
// Параметры:
//  ПолноеИмяМакета - Строка - полное имя макета.
//
// Возвращаемое значение:
//  Булево - признак существования макета.
//
Функция МакетСуществует(ПолноеИмяМакета)
    
    Макет = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМакета);
    Если ТипЗнч(Макет) = Тип("ОбъектМетаданных") Тогда
        
        Шаблон = Новый Структура("ТипМакета");
        ЗаполнитьЗначенияСвойств(Шаблон, Макет);
        ТипМакета = Неопределено;
        Если Шаблон.Свойство("ТипМакета", ТипМакета) Тогда
            Возврат ТипМакета <> Неопределено;
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции

// Возвращает код основного языка конфигурации, например "ru".
//
// Возвращаемое значение:
//  Строка - код языка.
//
Функция КодОсновногоЯзыка() Экспорт
    
    Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
    
КонецФункции

Автор: Vladal 26.07.19, 13:58

А вот и обработка с компонентой формирования qr-кода и вызовом функций генерирования картинки
http://pro1c.org.ua/index.php?act=attach&type=post&id=1148

Автор: av.mironov@mail.ru 06.12.19, 10:00

Vladal @ 26.07.19, 17:58 * ,
Vladal @ 26.07.19, 17:58 * ,


А пароль на архив?

Автор: Макс1С 06.12.19, 11:14

av.mironov@mail.ru @ Сегодня, 10:00 * ,
Пароль выдается только прочитавшим правила

Автор: tis 14.04.20, 15:40

Добрый день! Помогите разобраться с выводом QR кода в документ счет.Конфигурация УТП. Нужна ли еще компонента кроме самой обработки qr-code? Или достаточно макета из вашей обработки qr-code? Создаю внешнюю печатную форму счета, добавила в нее макет из обработки и свой макет счета.В макете счета добавляю пустую картинку называю ее QRКод.В Модуль объекта добавляю эти 5 процедур из обработки . Но код не выводиться.Подскажите в чем ошибка?

Автор: Vladal 16.04.20, 23:43

tis @ 14.04.20, 15:40 * ,

Давайте попробуем разобраться.

В моей УТП этих процедур нет, добавил в ОбщийМодуль, а также макет с компонентой в ОбщиеМакеты.
Соответственно вызов сделал таким:

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

Вот пример:
    СтрокаКартинки = ДанныеQRКода(СтрокаСообщения, 2, 400);
    
    ОбластьШапка.Рисунки.QRКод.Картинка = Новый Картинка(СтрокаКартинки);
    ОбластьШапка.Рисунки.QRКод.ВыводитьНаПечать = Истина;
    
    ТабличныйДокумент.Вывести(ОбластьШапка);

Автор: Almadeya 28.12.20, 9:56

Vladal @ 26.07.19, 13:58 * ,

Цитата(Vladal @ 26.07.19, 13:58) *
А вот и обработка с компонентой формирования qr-кода и вызовом функций генерирования картинки
qr-code.zip

Добрый день! Можно и мне пожалуйста пароль. Уже все мозги сломала в изобретении велосипеда

Автор: AlexHummer 20.02.21, 0:08

Цитата(Almadeya @ 28.12.20, 10:56) *
Vladal @ 26.07.19, 13:58 * ,

Добрый день! Можно и мне пожалуйста пароль. Уже все мозги сломала в изобретении велосипеда


Пароль описан в правилах форума.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua