Версия для печати темы (https://pro1c.org.ua/index.php?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