Внешняя компонента (Native) для печати двумерного штрих-кода PDF417

18.02.17

Разработка - Разработка внешних компонент

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
pdf417_32.zip
.zip 426,91Kb ver:1.1
19
19 Скачать (1 SM) Купить за 1 850 руб.
ТестШК_расш.epf
.epf 1,45Mb ver:1.1
21
21 Скачать (2 SM) Купить за 2 150 руб.
pdf417_64.zip
.zip 556,59Kb ver:1.1
34
34 Скачать (1 SM) Купить за 1 850 руб.

Общая информация

По долгу службы занимаюсь поддержкой и развитием корпоративной ИС - самописная конфигурация на 8.2.

Достаточно давно возникла потребность печатать двумерные штрих-коды на некоторых документах. Какое-то время использовали для этого шрифтовую отрисовку ШК. Минусы этого решения - необходимость иметь установленный специальный шрифт, неустойчивость чтения платежными терминалами.

Поэтому было принято решение - попробовать написать свою ВК. Дело было в начале 2012 г.

Спустя пару недель был готов вариант, который используем и по сей день. Велосипедов при этом изобретено не было. Используется небезызвестный модуль для Дельфи n8api.pas  и модуль из состава генератора отчетов FastReport (BarcodeBase). По причине того, что используется модуль из FR, выложить в виде исходников не могу. Но в виде dll - авторы/владельцы FR любезно разрешили опубликовать.

Порядок использования, интерфейс компоненты

Хранить ВК в конфигурации можно различными способами. Мы храним в виде отдельных общих макетов.

Пример подключения:

Функция ПодключитьКомпонентуPDF417() Экспорт
    
    СистемнаяИнформация = Новый СистемнаяИнформация;
    Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту( "ОбщийМакет.PDF417_32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту( "ОбщийМакет.PDF417_64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    Иначе
        ПодключениеВыполнено = Ложь;
    КонецЕсли;
    Если Не ПодключениеВыполнено Тогда 
        ВызватьИсключение("Не подключились по макету!");
    КонецЕсли;
    
    Возврат Новый("AddIn.КартинкаШтрихкода.Pdf417Imager");

КонецФункции;

Свойства компоненты (чтение/запись):

  • Ширина (Число) - ширина в пикселях
  • Высота (Число) - высота в пикселях
  • КодоваяСтраница (Число)  Опубликовал это свойство из Delphi-компоненты, но не экспериментировал с ним. По умолчанию =0.
  • КоличествоСтрок (Число)  Вроде как должно регулировать высоту компоненты. Но, похоже, не работает.
  • КоличествоКолонок (Число)  Изменяет количество столбцов.
  • АвтоРазмер (Булево)  Компонента сама определит размеры ШК.
  • УровеньКоррекцииОшибок (Число)  0 - авто (по умолчанию), 1-9 заданный
  • РежимУпаковки (Число) 0 - авто (по умолчанию), 1 - текстовые данные, 2 - цифровые, 3 - бинарные
  • КоэффициентМасштабирования (вещественное число) - масштабирование при отрисовке ШК. Похоже, что не работает при формировании картинки.

Как правило, вывод картинки со штрих-кодом требуется в рисунок табличного документа. Экспериментально подобран оптимальный множитель для перевода размеров рисунка в пиксели для компоненты (=3.725).

Сама картинка возвращается выполнением функции ПолучитьКартинку(Ширина, Высота, Текст).

  • Ширина - ширина картинки в пикселях
  • Высота - высота картинки в пикселях
  • Текст - штрихкодируемый текст
  • Результат функции - объект ДвоичныеДанные 

Итого, примерно так:

Функция ПолучитьКартинку( пВнешКомпонента, пШиринаПикс, пВысотаПикс, пТекст, пВызыватьИсключениеПриОшибке ) Экспорт 
	
	Если пВнешКомпонента <> Неопределено Тогда 
		Если пВызыватьИсключениеПриОшибке Тогда
			ПолучитьКартинкуВнутр( пВнешКомпонента, пШиринаПикс, пВысотаПикс, пТекст );
		Иначе 
			Попытка
				ПолучитьКартинкуВнутр( пВнешКомпонента, пШиринаПикс, пВысотаПикс, пТекст );
			Исключение
				ОбщегоНазначения.СообщитьОбОшибке( "Ошибка при формировании изображения штрих-кода: " + ОписаниеОшибки() );
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;
	
КонецФункции

Процедура УстановитьКартинкуДляРисунка( пВнешКомпонента, пРисунок, пТекст, пВызыватьИсключениеПриОшибке ) Экспорт 
	
	лМножПикс = 3.725;
	
	Если пВнешКомпонента <> Неопределено Тогда 
		Если пВызыватьИсключениеПриОшибке Тогда
			пРисунок.Картинка = ПолучитьКартинкуВнутр( пВнешКомпонента, пРисунок.Ширина * лМножПикс, пРисунок.Высота * лМножПикс, пТекст );
		Иначе 
			Попытка
				пРисунок.Картинка = ПолучитьКартинкуВнутр( пВнешКомпонента, пРисунок.Ширина * лМножПикс, пРисунок.Высота * лМножПикс, пТекст );
			Исключение
				ОбщегоНазначения.СообщитьОбОшибке( "Ошибка при формировании изображения штрих-кода: " + ОписаниеОшибки() );
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

 Причины появления этой публикации

Недавно решили попробовать перенести конфигурацию на платформу 8.3 (64-бит). До этой попытки, на 64-бит я и не испытывал работоспособность компоненты. А тут она сбойнула с ошибкой "некорректная работа компоненты с памятью". Что ж делать?... Попробовал использовать ВК из типовой торговли (общий макет КомпонентаПечатиШтрихкодов). Результат - неудовлетворителен. Похоже, "внутри" эта ВК отрисовывает шрифтом - потенциально плохо будет читаться. И кириллицу отрисовывает в юникоде - это приводит к прочитыванию управляющих символов.

Тогда решил таки обновить свою ВК. Нашел, что в n8api уже достаточно давно ошибка "некорректная работа компоненты с памятью" исправлена. После скачивания новой версии модуля и перекомпилляции все нормально заработало.

На текущий момент компонента успешно работает в продуктиве на платформе 8.2.17.157 (32-бит) и в тестовом режиме 8.3.7.2008 (64-бит).

Учитывая свой отрицательный опыт использования компоненты от 1С и положительный опыт продолжения эксплуатации своей компоненты, думаю, что компонента может быть полезна и кому-то еще. И, кстати, 1С никак не заинтересовались моей разработкой. Для FR компонента тоже неинтересна.

Что далее...

Особых планов по развитию компоненты - нет. Что мы от нее требуем - она успешно выполняет.

Но замечания/пожелания - вполне себе рассматриваются.

UPD (13.10.2018) По пожеланиям товарища shatalov_ms опубликованы дополнительные свойства компоненты (ранее были только Высота и Ширина).

Внешняя компонента Native PDF417 двумерный штрих-код

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18000 руб.

30.05.2017    54040    9    69    

46

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1126    3    4    

3

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    47298    124    66    

67

Разработка внешних компонент Программист Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3598    3    0    

5

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77515    72    257    

191

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    28655    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    1828    bayselonarrend    10    

44

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4720    kovalevdmv    26    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3096 11.02.17 22:41 Сейчас в теме
Нативная компонента из БСП умеет генерить PDF417 уже давненько.
2. ImHunter 330 13.02.17 08:07 Сейчас в теме
(1) Если почитать публикацию, то можно и про это тоже там увидеть.
3. oops! 21.03.18 14:26 Сейчас в теме
Во всей этой истории забавно другое - ГНИВЦ x64-версию своего модуля печати двумерных штрихкодов PDF417 выпускать даже не планируют.
В конце 2016 года я им задавал вопрос о том, планируется хоть как-то решать данный вопрос, и они мне написали (цитата):
"Здравствуйте! Выпуск "Модуля печати PDF417" в 64-разрядном варианте не планируется.
В ближайшее время (через 2-3 недели) планируется выпуск вспомогательной программы, позволяющей выполнять печать из 64-х разрядных программ с использованием 32-разрядного пакета "Модуля печати PDF417".
Если Вам требуются дополнительные разъяснения, просим Вас ответить на данное письмо, полностью сохранив тему письма.
Ответ просим направлять именно с того адреса (e-mail), который Вы указали в заявке.

Служба технической поддержки сервисов ФНС России
(АО "ГНИВЦ")"
Ответ был дан 05 декабря 2016 года, "вот только воз и ныне там" - ничего они с тех пор так и не выпустили, да я так думаю, что и не выпустят до тех пор, пока в самой ИФНС не появятся x64-версии их продуктов (Декларация 3НДФЛ, Налогоплательщик ЮЛ и т.д.), а с этим они явно не спешат, т.к. даже и планов таких нет.
Так что если вашу компоненту есть возможность использовать как альтернативу компоненте от ГНИВЦ для печати двумерных штрихкодов на регламентированных отчетах без доработки конфигурации, и при этом будет получен аналогичный ГНИВЦ двумерный штрихкод, то, по сути, ваша компонента будет тем самым краеугольным камнем. который позволит большинству бухгалтеров перейти на использование x64-версии 1С:Предприятия, т.к. зачастую, кроме данного модуля при работе с бухгалтерией иные ВК не используются.
ЗЫ: Странно, что в 1С этим не заинтересовались - видимо при обращении к ним не было акцентировано внимание на факте работы компоненты из под x64-версии платформы, хотя, возможно, у них в приоритете всё же использование компоненты именно от ГНИВЦ, тогда всё становится на свои места...
4. annagolinskaya 14 13.06.18 17:19 Сейчас в теме
Вот засада! Ка всегда!
5. zavedeev 17.07.18 13:58 Сейчас в теме
Автор а исходники можно?
6. ImHunter 330 17.07.18 15:16 Сейчас в теме
(5) Писал в статье - нельзя.
7. Гость 06.09.18 15:24
При установке на win 10 x64 вылезает такая ошибка. Людям необходима эта штука для заполнения деклараций 3-НДФЛ в программе от ФНС и дальнейшей печати, но сносить x64 и ставить x32? Повторюсь, к 1С не имею абсолютно никакого отношения, мне тупо надо вернуть 13% с обучения, для этого надо заполнить декларацию, а без программы и двухмерника никак (см.скрин), вручную заполнить не представляется возможным, т.к. ленивые тетки ФНС берут за услугу 500 рублей за одну декларацию, а тут вы еще ставите ограничение на скачивание x64 и ставите цены 1500-1700. Что за абсурд?
Прикрепленные файлы:
8. ImHunter 330 07.09.18 06:00 Сейчас в теме
Кто-то чего-то не понимает:)

1. Моей ВК никакие доп.шрифты не требуются. А исходя из скрина, ошибка именно в отсутствии шрифта
2. Что за суммы "1500-1700. Что за абсурд?" - мне тоже неясно. Ибо суммы именно здесь - 1-2 sm.

Возможно, вам нужно внимательнее почитать документацию к "3-НДФЛ в программе от ФНС" - там, скорее всего, написано, какой шрифт нужно установить.
9. linuxmaster 13.03.19 14:32 Сейчас в теме
А есть такое же, и чтобы работало в Linux?
10. ImHunter 330 13.03.19 15:04 Сейчас в теме
(9) Собиралось на Delphi XE6. Она под Linux не компилляет. Соответственно, собрать под Linux - нет возможности.
Оставьте свое сообщение