gifts2017

Формирование QR-Code и вывод изображения на управляемую форму

Опубликовал Олег Родионов (Ovrfox) в раздел Программирование - Практика программирования

Обработка позволяет напечатать произвольный QR-Code и/или вывести сформированный QR-Code средствами 1С. Работает на управляемых формах. Использует встроенный в 1С механизм формирования двумерного кода. Тестировалась на УНФ для Украины.

Здравствуйте все.

Возможно, это известный факт, но я долго пытался вывести QR-Code на одну из форм УНФ, но столкнулся с тем, что ActiveX компоненты, которые все рекомендуют, не могут нормально работать на управляемых формах.

А потом, когда я уже потратил 2 дня на поиски, я случайно узнал, что, оказывается, фирма 1С уже поставляет компоненту для формирования QR-Code  в своих продуктах.

Поэтому я решил выложить эту обработку для того, чтобы показать, что для формирования QR-Code не нужно внешних компонент. 1С уже позволяет это сделать. И для того, чтобы остальные, кто вдруг ищет подобное простое решение, не тратили время на сторонние компоненты. Все уже есть в стандартной поставке. 

Я не могу сказать, когда именно 1С включила эту возможность в поставку, но весь 2015 год эта возможность уже была.

И ведь все решалось достаточно просто с помощью процедуры "ДанныеQRКода" общего модуля УправлениеПечатью.

Смотрите, пользуйтесь, можете благодарить - буду очень рад.

С уважением, Олег.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ДемоШтрихкод
.epf 7,77Kb
20.07.16
17
.epf 8.2 8.3 7,77Kb 17 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. TMV 20.11.15 09:10
оказывается, фирма 1С уже поставляет компоненту для формирования QR-Code в своих продуктах... чтобы показать, что для формирования QR-Code не нужно внешних компонент.
Так нужна или нет?
2. Дмитрий Тарасов (tarassov) 20.11.15 10:58
(1) TMV,
у меня, в стандартной базовой БП (как в 2.0 так и в 3.0), есть стандатная функция Данные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Кода.GenerateQRCode(QRСтрока, УровеньКоррекции, Размер);
	Исключение
		ЗаписьЖурналаРегистрации(НСтр("ru = 'Формирование QR-кода'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
	Возврат ДвоичныеДанныеКартинки;
	
КонецФункции
...Показать Скрыть


и видно, что в качестве генератора штрих-кода используется AddIn.QR.QRCodeExtension
Функция КомпонентаФормированияQRКода(Отказ)
	
	СистемнаяИнформация = Новый СистемнаяИнформация;
	Платформа = СистемнаяИнформация.ТипПлатформы;
	
	ТекстОшибки = НСтр("ru = 'Не удалось подключить внешнюю компоненту для генерации QR-кода'");
	
	Попытка
		Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиQRКода", "QR") Тогда
			QRCodeGenerator = Новый("AddIn.QR.QRCodeExtension");
		Иначе
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , , , Отказ);
		КонецЕсли
	Исключение
		ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки, , , , Отказ);
	КонецПопытки;
	
	Возврат QRCodeGenerator;
	
КонецФункции
...Показать Скрыть
3. TMV 20.11.15 14:03
(1) TMV, дык в том-то и вопрос. Компонента используется и не важно, что она от 1С. Автор же пытается убедить, что нет.
4. Олег Родионов (Ovrfox) 20.11.15 15:04
(1) TMV, Конечно компонента используется. Но добавлять в систему самостоятельно какаю-либо дополнительную компонету не требуется.
Самое главное, что я хотел заметить, это то, что компоненту не придется искать
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа