Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с QR Code при помощи типовой КомпонентаПечатиQRКода
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Доброго времени суток!
Подскажите какие методы есть у типовой КомпонентаПечатиQRКода ? В интернете нигде не могу найти примера. Везде с использованием сторонних библиотек.
Задача у меня следующая, сгенерировать QR-Code и сохранить его в картинку.
В самой конфигурации нет примера работы с этой компонентой.
Petre
В БПУ есть пример.
Кроме того, в БПО есть компонента печати штрихкода.
sava1
ИЗ модуля

    ДвоичныеДанныеКартинки = Генератор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
Petre @ Сегодня, 14:29 необходимо зарегистрироваться для просмотра ссылки ,

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



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

Значения и типы параметров "УровеньКоррекции" и "Размер" где нибудь можно посмотреть?
sava1
выше в коде - вызов -
ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190, ТекстОшибки);


в ут31 смотрите в УправлениеПечатью
kosalex
sava1 @ Сегодня, 16:54 необходимо зарегистрироваться для просмотра ссылки ,
Странно, но у меня в этом модуле, да во всей конфигурации УТ 3.1.6.1 нет упоминания о "ДанныеQRКода".
Vladal
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
А вот и обработка с компонентой формирования qr-кода и вызовом функций генерирования картинки
необходимо зарегистрироваться для просмотра ссылки
av.mironov@mail.ru
Vladal @ 26.07.19, 17:58 необходимо зарегистрироваться для просмотра ссылки ,
Vladal @ 26.07.19, 17:58 необходимо зарегистрироваться для просмотра ссылки ,


А пароль на архив?
Макс1С
av.mironov@mail.ru @ Сегодня, 10:00 необходимо зарегистрироваться для просмотра ссылки ,
Пароль выдается только прочитавшим правила
tis
Добрый день! Помогите разобраться с выводом QR кода в документ счет.Конфигурация УТП. Нужна ли еще компонента кроме самой обработки qr-code? Или достаточно макета из вашей обработки qr-code? Создаю внешнюю печатную форму счета, добавила в нее макет из обработки и свой макет счета.В макете счета добавляю пустую картинку называю ее QRКод.В Модуль объекта добавляю эти 5 процедур из обработки . Но код не выводиться.Подскажите в чем ошибка?
Vladal
tis @ 14.04.20, 15:40 необходимо зарегистрироваться для просмотра ссылки ,

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

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

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

Вот пример:
    СтрокаКартинки = ДанныеQRКода(СтрокаСообщения, 2, 400);
    
    ОбластьШапка.Рисунки.QRКод.Картинка = Новый Картинка(СтрокаКартинки);
    ОбластьШапка.Рисунки.QRКод.ВыводитьНаПечать = Истина;
    
    ТабличныйДокумент.Вывести(ОбластьШапка);
Almadeya
Vladal @ 26.07.19, 13:58 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Vladal @ 26.07.19, 13:58) необходимо зарегистрироваться для просмотра ссылки
А вот и обработка с компонентой формирования qr-кода и вызовом функций генерирования картинки
qr-code.zip

Добрый день! Можно и мне пожалуйста пароль. Уже все мозги сломала в изобретении велосипеда
AlexHummer
Цитата(Almadeya @ 28.12.20, 10:56) необходимо зарегистрироваться для просмотра ссылки
Vladal @ 26.07.19, 13:58 необходимо зарегистрироваться для просмотра ссылки ,

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


Пароль описан в правилах форума.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.