На данный момент очень часто нужно вывести в печатную форму 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-коде таким образом?
А компонента эта в платформу вшита? Не так как с штрихкодами?
(1) Не нашел такой информации, мне для работы сейчас хватает 100-200 символов, судя по QR-коду еще много войдет.
(2) Да вшита в УТ11, можете оттуда взять.
(2) Мне тем этот метод и понравился. Что нужно всего 5 процедур и компонента, все в платформе, никуда обращаться не нужно.
А то нужно было в фискальный чек QR-код вывести, что только не предлагают и dll и java-скрипты и онлайн сервисы.
Хорошо люди подсказали взять из типовой, я вот оттуда все и собрал в свою конфигурацию.
Показать
(7) Это доя какой конфигурации код?
(8) ДанныеQRКода из БСП
МенеджерОборудованияВызовСервера — скорее всего из БПО. Вообще скопировал из ЕРП, но думаю в большинстве конфигураций с БСП + БПО или по отдельности хотя бы 1 из них. (Типовых не знаю таких, только старые)
UP:
http://prntscr.com/pmmxbe
https://its.1c.ru/db/bsp311doc#content:1358:hdoc
(8) Если грубенько, то вы просто скопировали типовой код. Это наверное полезно для старых и самописных конфигураций. Для свежих типовых столько кода копировать бессмысленно.
Когда я пытался в прошлый раз выложить на инфостарт разработку с использованием материалов типовых конфигураций и материалов с ИТС, меня послали. (сказали нельзя выкладывать консоль запросов с диска ИТС, хоть она у вас и дописана)
Вас почему-то нет) А у вас и код, и компонента. Я не против, но удивляет политика ресурса.
(10) Понятно, что те у кого новые УТ11 или ЕРП им не нужно.
Но полно людей которые работают на УТ10 и других старых конфигурациях, там этого нет.
Когда я выкладывал данную работу, я помнил правило о котором вы упомянули.
Я понимаю почему так, если бы каждый выложил свою консоль запросов, тут бы все было в этих конослях. Я тоже свою консоль запросов под себя написал.
А тут я обработку приложил как пример, в описание указал как реализовать самостоятельно. Подобных тем тут я не нашел.
(11) Я не осуждаю. Хороший полноценный код. Я просто привел примеры, как это сделать в БСП в 2х вариантах. 1 из них у вас в разобранном виде в публикации.
По поводу правила — я удивлен, что некоторые публикации заворачивают по причине того, что нарушаются правила, а некоторые нет. Лично мне без разницы. Логика модерации непонятна.
Спасибо!