Внешний сервис генерации штрихкодов для 1С

24.09.25

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

В работе с 1С иногда зависают сеансы при генерации штрихкодов? Сделал небольшой внешний сервис для генерации QR, DataMatrix и EAN-кодов, который легко использовать и интегрировать, и который работает быстрее стандартной компоненты.

Файлы

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

Наименование Скачано Купить файл
GoBarcodeService.exe
.exe 6,03Mb
0 1 850 руб. Купить
Обработка для тестирования скорости генерации ШК
.epf 7,79Kb
0 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Введение

В нашей работе периодически возникала проблема: сеансы пользователей намертво зависали при работе с 1С. После анализа выяснилось, что зависание происходило при генерации штрихкодов через КомпонентуПечатиШтрихкодов.

Проблема оказалась известной — другие пользователи также сталкивались с зависаниями. Чтобы разобраться, я сделал обработку стресс-тестирования компоненты. При определённых условиях действительно сеансы зависали, а новые штрихкоды переставали генерироваться.

После перехода на более новую версию компоненты ситуация улучшилась, но чувство опасности оставалось. Именно тогда возникла идея: создать внешний сервис генерации штрихкодов, который можно было бы запускать отдельно, вне ПК с 1С.

Первый опыт: сервис за Nginx

Первый вариант был реализован как HTTP-сервис за веб-сервером Nginx. Стабильно, круто, современно, сеансы перестали зависать.

Можно было обращаться к сервису через обычный HTTP-запрос с GET или POST.

Однако со временем стало очевидно, что лишний веб-сервер усложняет архитектуру. Было решено перейти к более простому варианту.

Самостоятельная служба Windows, без Nginx или Apache.

Это позволило избавиться от лишней прокладки и потенциальных проблем с конфигурацией веб-сервера. В качестве языка программирования был выбран Go.

Функциональность сервиса


Сервис поддерживает генерацию следующих форматов:

  • QR-код
  • DataMatrix
  • EAN-13
  • EAN-128 / Code128

Параметры генерации:

  • text — содержимое кода (обязательный)
  • level — уровень коррекции ошибок QR (1–4, по умолчанию 2)
  • width — ширина изображения в пикселях (по умолчанию 256)
  • height — высота изображения (по умолчанию 128, используется только для линейных штрих-кодов)

Сервис можно вызывать через GET или POST запросы, а также интегрировать с 1С.

Я не реализовывал другие типы кодов, но никто не мешает дописать новые при необходимости.

Установка/удаление

Два варианта:

  1. Запустил и работает, не запустил - не работает. 
  2. Установка как служба windows:
./GoBarcodeService install   # установить сервис
./GoBarcodeService start     # запустить
./GoBarcodeService stop      # остановить
./GoBarcodeService uninstall # удалить

За всё время работы службы падений не наблюдалось, но на всякий случай стоит настроить её автоматический перезапуск при сбое.

После запуска поднимается web сервис на порту 8080 и можно начинать работу.

Производительность


Без лишних слов:

Внешний сервис: 30–40 мс на один штрихкод

Компонента 1С: 140–170 мс на один штрихкод

Таким образом, внешний сервис не только устраняет проблему зависаний, но и значительно ускоряет процесс.

 

Примеры использования


GET-запрос из браузера

  • http://localhost:8080/qr?text=Hello
  • http://localhost:8080/datamatrix?text=Hello
  • http://localhost:8080/ean13?text=123456789012
  • http://localhost:8080/ean128?text=Hello

В 1С

Процедура СоздатьШтрихкод()
	Парам = новый Структура();
	Парам.Вставить("text", "Hello world");
	Парам.Вставить("width", 200);
	Ответ = ВыполнитьЗапрос("127.0.0.1", "qr", Парам); 
	Если (Ответ.КодСостояния = 200) Тогда
		Картинка = новый Картинка(Ответ.ДД);
		ШК = ПоместитьВоВременноеХранилище(Картинка, ЭтаФорма.УникальныйИдентификатор);
	Иначе
		ТекстОтвета = Ответ.ТекстОтвета;
	КонецЕсли;
КонецПроцедуры

Функция ВыполнитьЗапрос(Адрес, ТекстДляЗапроса, Параметры)
	
    Тело = "";
    Для Каждого парам Из Параметры Цикл
        Если Тело <> "" Тогда
            Тело = Тело + "&";
        КонецЕсли;
        Тело = Тело + парам.Ключ + "=" + КодироватьСтроку(парам.Значение, СпособКодированияСтроки.КодировкаURL);
    КонецЦикла;
	
    Соединение = Новый HTTPСоединение(Адрес, 8080);
    Запрос = Новый HTTPЗапрос(ТекстДляЗапроса+"?"+Тело);		
    Ответ = Соединение.Получить(Запрос);    	
	
    ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();	
    Рез = новый Структура("ДД, ТекстОтвета, Заголовки, КодСостояния", ДД, "", Ответ.Заголовки, Ответ.КодСостояния);
    Если (Ответ.КодСостояния <> 200) Тогда
        Рез.ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(); 
    КонецЕсли;
		
    Возврат Рез;
	
КонецФункции

Что можно улучшить?

 

Если не хотите, чтобы сервис был доступен из сети в коде: 

if err := http.ListenAndServe("0.0.0.0:8080", nil); err != nil {
	log.Fatal(err)
}

меняем на:

if err := http.ListenAndServe("127.0.0.1:8080", nil); err != nil {
	log.Fatal(err)
}

Там же можете поменять и порт.

 

Заключение

 

Надеюсь, мой велосипед кому-то окажется полезным. Спасибо, что дочитали. 

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.183.24

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

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

3600 руб.

12.05.2020    31046    142    100    

98

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

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

5160 руб.

04.05.2018    49034    126    68    

70

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

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

3000 руб.

17.09.2018    38637    116    128    

119

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

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

14.01.2025    4195    bayselonarrend    14    

52

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

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

04.12.2024    8005    kovalevdmv    27    

82

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

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    8334    starik-2005    38    

60

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

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    9449    starik-2005    40    

48

Инструментарий разработчика Разработка внешних компонент Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

22.11.2023    6571    131    ivan1703    26    

43
Для отправки сообщения требуется регистрация/авторизация