INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Ткаченко Денис | Конструктор | ОАО "РЖД"

«Корпоративные IT отделы на Дальнем Востоке обречены. Обречены на изменения»

Трансформируйся или умри, это Неизбежность корпоративного АйТи отдела. Модные слова про цифровизацию и клиентоориентированность спасут ненадолго, на срок провального проекта. Изменениям должна быть подвергнута система управления IT. Потому что IT изменилось и мы изменились. Эта отрасль уже не хобби энтузиастов и калька с учебников по управлению прошлого века не работает. Поднимаем голову от интриг и смотрим что случилось с кадровым рынком, если еще не посмотрели. Ну и где мы будем брать сотрудников в штат? А через пять лет? Из институтов? Готовим сами?, окей. Создали систему подготовки, мотивации и развития своих кадров? Эта система убъёт Ваш IT отдел. Отдали разработку и поддержку на аутсорс. Вы же понимаете, что это временно, их убьют те же проблемы. В общем нужно учиться управлять по другому, управлять не управляя. Нужно ли быть специалистом, чтобы управлять специалистами? Несомненно! это и есть ключевой момент. Заманчиво выглядит растворить систему менеджмента, в операционных процессах не увеличивая затраты? Очень. Формулируем Проблему. Рисуем Решение. Намечаем Шаги. Строим Систему.

Внешняя компонента (Native) для печати QR-кода

Программирование - Внешние компоненты

9
Native-компонента и тестовая обработка для печати QR-кода в различных кодировках.

У коллеги возникла необходимость - печатать QR-код с кириллицей в Win1251. Он пытался решить данную задачу использованием штатной ВК из БСП и какими-то манипуляциями с передаваемой строкой. Так ничего и не получилось - кириллица кодируется в Юникоде, прочитываются управляющие символы. Поэтому решили написать свою ВК.

Задача решена с помошью публикации ИС (все про тот же v8napi) и freeware-компоненты формирования картинки QR-кода для Delphi/Lazarus. 

Интерфейс компоненты

Свойства

  1. Кодировка - целое число. Принимает значения:
  •   ENCODING_AUTO = 0;
  •   ENCODING_NUMERIC = 1;
  •   ENCODING_ALPHANUMERIC = 2;
  •   ENCODING_8BIT = 3;
  •   ENCODING_UTF8_NOBOM = 4;
  •   ENCODING_UTF8_BOM = 5;
  •   ENCODING_URL = 6;
  •   ENCODING_WIN1251 = 7 (предустанавлено сразу при создании ВК)

Методы

  1. ПолучитьКартинку(Текст, УровеньКоррекции, Масштаб). Параметры:
  • Текст (Строка) - штрихкодируемый текст
  • Уровень коррекции (Число) - целое от 0 до 3. Задает уровень коррекции ошибок штрихкодируемой информации. Чем больше уровень, тем больше избыточности данных в ШК из-за включения служебной информации. 
  • Масштаб (Число) - целочисленный множитель масштабирования при отрисовке компоненты.

Подключение

К примеру, так:

Функция ПолучитьВКQR()
	
	СисИнфо = Новый СистемнаяИнформация;
	Если СисИнфо.ТипПлатформы=ТипПлатформы.Windows_x86 Тогда 
		Макет = ПолучитьМакет("МакетQR");
	Иначе 
		ВызватьИсключение("Неподдерживаемая платформа для ВК: " + СисИнфо.ТипПлатформы);
	КонецЕсли;
	
	Адрес = ПоместитьВоВременноеХранилище(Макет);
	Подключено = ПодключитьВнешнююКомпоненту(Адрес, "КартинкаQRКода", ТипВнешнейКомпоненты.Native);
	Если Не Подключено Тогда 
		ВызватьИсключение("Почему-то не подключили ВК");
	КонецЕсли;
	
	Возврат Новый("AddIn.КартинкаQRКода.QRImager");
	
КонецФункции

Использование

К примеру, так:

Процедура СформироватьТабДок() Экспорт
	
	ВК = ПолучитьВКQR();
	
	ТабДок.Очистить();
	Макет = ПолучитьМакет("МакетШК");
	Рисунок = Макет.Области.РисунокШК;
	УстановитьКартинкуДляРисункаQR(ВК, Рисунок, Истина);
	ТабДок.Вывести(Макет);
	
КонецПроцедуры

Процедура УстановитьКартинкуДляРисункаQR( пВнешКомпонента, пРисунок, пВызыватьИсключениеПриОшибке )  
	
	Если пВнешКомпонента <> Неопределено Тогда 
		Попытка
			пВнешКомпонента.Кодировка = Кодировка;
			пРисунок.Картинка = ПолучитьКартинкуВнутрQR(пВнешКомпонента, СтрокаДанных, УровеньКоррекции, Масштаб);
		Исключение
			Если пВызыватьИсключениеПриОшибке=Истина Тогда 
				ВызватьИсключение;
			КонецЕсли;
		КонецПопытки;
	КонецЕсли;
	
КонецПроцедуры

Функция ПолучитьКартинкуВнутрQR(пВнешКомпонента, Текст, УровеньКоррекции = 1, Масштаб = 1 )
	Возврат Новый Картинка( пВнешКомпонента.ПолучитьКартинку(Текст, УровеньКоррекции, Масштаб));	
КонецФункции

Целевые ОС, итоги

На текущий момент компонента скомпиллирована с помощью Lazarus 1.6.4 под платформу Win32. Сходу разобраться и скомпиллировать под Win64 не получилось. Да и это пока нам не требуется.

Поэтому остановились на достигнутом.

9

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

Наименование Файл Версия Размер
Исходники + dll (32bit)
.zip 1,21Mb
21.08.17
7
.zip 1,21Mb 7 Скачать
Тестовая внешняя обработка (УФ), ВК внутри макетом
.epf 1,73Mb
21.08.17
6
.epf 1,73Mb 6 Скачать

См. также

Комментарии
Сортировка: Древо
1. Tahallus 421 22.08.17 06:43 Сейчас в теме
Может стоило разобраться с компонентой из БСП, чем создавать костыль ?
2. ImHunter 21 22.08.17 06:51 Сейчас в теме
Штатная кириллицу кодирует в Юникоде. При попытке считать сканером, настроенным на Win1251, прочитываются упр символы.
А вообще, я не любитель создавать костыли и изобретать велосипеды.
3. a0212 04.05.18 12:49 Сейчас в теме
Если бы не было людей изобретающих велосипеды они до сих пор были бы вот такими.
Прикрепленные файлы:
4. a0212 26.06.18 17:35 Сейчас в теме
На Win7 sp1 x64, правда платформа 1с:Предприятие 32-х битная вроде бы нормально работает, ошибок никаких не замечено..
А что именно не работало на 64-х битной винде?
5. ImHunter 21 27.06.18 06:14 Сейчас в теме
(4) Так компонента не скомпилирована под х64 вообще - не получилось сходу Lazarus настроить.
6. a0212 27.06.18 09:12 Сейчас в теме
(5) винда 7 х64, платформа 1С 8.3.10.2375 х32 - QR создаёт показывает без проблем.
Правда используются обычные формы, не управляемые.

Получается сама винда нормально работает с этой компонентой независимо от своей "битности" :)

после беглого теста выявлено следующее -
QR код генерируется с данными где вперемешку располагаются русские, латинские символы, дефис, пробел, знаки препинания

если сканер в режиме эмуляции клавиатуры то в любом режиме кодировки русские буквы просто пропускаются.

если сканер в режиме эмуляции сом-порта то при кодировке ENCODING_WIN1251 считывается строка полностью аналогичная закодированным данным
в других кодировках так же русские буквы теряются или кракозябры.

QR код один и тот же, сканер 1450g, почему он так по разному считывает чёрть его знает..
7. ImHunter 21 27.06.18 09:22 Сейчас в теме
(6)
Правда используются обычные формы, не управляемые.

Получается сама винда нормально работает с этой компонентой независимо от своей "битности" :)

Вероятно, клиент - x32. На нем и подключается ВК. И, соответственно, нормально работает.

после беглого теста выявлено следующее -

Ну хз, ничего такого не сообщали. Приведи пример строки. Как получу сканер в распоряжение - попробуем.
8. a0212 27.06.18 09:36 Сейчас в теме
(7)
да зачем - кодировка 1251 при формировании QR кода и сканер настроенный на эмуляцию com-порта - отлично всё работает.
Какие данные закодировал, такие и получил при сканировании, больше ничего и не надо

строку набирал наугад, вперемешку латинские, кириллицу, знаки всякие - всё проходит, всё считывается отлично.

СисИнфо.ТипПлатформы возвращает битность операционной системы, а не платформы 1с.
Большинство народу как раз даже под виндой 64-х битной используют платформу 32-х битную, т.е. неправильное ограничение в коде примера :)
Оставьте свое сообщение