Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 5
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Работа с QR Code при помощи типовой КомпонентаПечатиQRКода          
kosalex Подменю пользователя
сообщение 09.07.19, 13:01
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 798
Спасибо сказали: 10 раз
Рейтинг: 10.9

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

Petre Подменю пользователя
сообщение 09.07.19, 13:29
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2616
Из: Київ, Україна
Спасибо сказали: 715 раз
Рейтинг: 690.6

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


Signature
Допрацьовую:
- "Бухгалтерія для України 2.0";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

sava1 Подменю пользователя
сообщение 09.07.19, 13:32
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2143
Из: Проскуров
Спасибо сказали: 508 раз
Рейтинг: 497.3

ИЗ модуля

    ДвоичныеДанныеКартинки = Генератор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Кода;


Сообщение отредактировал sava1 - 09.07.19, 13:37

kosalex Подменю пользователя
сообщение 09.07.19, 15:24
Сообщение #4

Ветеран
*******
Группа: Пользователи
Сообщений: 798
Спасибо сказали: 10 раз
Рейтинг: 10.9

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

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



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

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

sava1 Подменю пользователя
сообщение 09.07.19, 15:54
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2143
Из: Проскуров
Спасибо сказали: 508 раз
Рейтинг: 497.3

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


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

kosalex Подменю пользователя
сообщение 09.07.19, 21:08
Сообщение #6

Ветеран
*******
Группа: Пользователи
Сообщений: 798
Спасибо сказали: 10 раз
Рейтинг: 10.9

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

Vladal Подменю пользователя
сообщение 23.07.19, 15:38
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 337
Из: Украина
Спасибо сказали: 56 раз
Рейтинг: 42.2

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
Сообщение #8

Оратор
*****
Группа: Пользователи
Сообщений: 337
Из: Украина
Спасибо сказали: 56 раз
Рейтинг: 42.2

А вот и обработка с компонентой формирования qr-кода и вызовом функций генерирования картинки
qr-code.zip

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 21.10.19, 12:38
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!