При организации печати этикеток и документов со штрихкодами в управляемом и веб-клиенте разработчики 1С часто сталкиваются с плавающей ошибкой: «Не найден файл внешней компоненты» при попытке инициализации объекта Новый("AddIn.КартинкаШтрихкода.Barcode"). Ошибка может появляться периодически, с интервалом от нескольких минут до нескольких часов, а временно устраняется перезапуском агента сервера 1С или повторной загрузкой библиотеки в общий макет.
Рассмотрим подробно причины возникновения этой проблемы, способы её технического решения и альтернативные варианты формирования штрихкодов без использования внешних библиотек.
Проанализируем ситуации, из-за которых платформа теряет доступ к динамической библиотеке DLL или SO:
AppData\Local\Temp службы usr1cv8). Если на сервере работают фоновые утилиты очистки диска, антивирусное ПО или скрипты обслуживания, временные DLL-файлы удаляются с диска. При этом кэш платформы продолжает считать компоненту подключенной, что и приводит к ошибке.rphost) работает в 64-разрядном режиме, а в макет загружена только 32-битная компонента (или наоборот), платформа не может загрузить библиотеку в адресное пространство процесса.MANIFEST.XML в верхнем регистре. Если имя указано в нижнем регистре (manifest.xml), платформа не сможет сопоставить библиотеку с операционной системой.ТипПодключенияВнешнейКомпоненты.Изолированно). При нехватке оперативной памяти на сервере или ограничениях прав дочерний процесс компоненты завершается аварийно.Разберем по шагам наиболее надежный способ интеграции компоненты печати штрихкодов, принятый в типовых конфигурациях. Вместо прямого вызова Новый("AddIn...") целесообразно использовать стандартные серверные функции БПО, которые самостоятельно контролируют наличие, версию и подключение компоненты.
Посмотрим на пример кода формирования картинки штрихкода с помощью БПО:
ПараметрыШтрихкода = ПолучитьОсновныеПараметрыШтрихкода(ВыборкаПоДокументу.Номер);
ПараметрыШтрихкода.Вставить("Ширина", Окр(МакетПечати.Рисунки.ШтрихКод.Ширина / МИС_ПечатьДокументовПовтИсп.КоличествоМиллиметровВПикселе()));
ПараметрыШтрихкода.Вставить("Высота", Окр(МакетПечати.Рисунки.ШтрихКод.Высота / МИС_ПечатьДокументовПовтИсп.КоличествоМиллиметровВПикселе()));
МакетПечати.Рисунки.ШтрихКод.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
Метод МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода() берет на себя все низкоуровневые операции: проверяет статус компоненты, при необходимости переподключает её из макета информационной базы и возвращает готовое изображение формата Картинка.
Если в вашей конфигурации не используется БПО, разработаем алгоритм с безопасным подключением компоненты перед каждым её созданием. Не следует рассчитывать на то, что компонента останется в памяти сервера навсегда.
Перед инициализацией вызовем метод ПодключитьВнешнююКомпоненту() с последующей обработкой исключений:
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
Если Не РезультатПодключения Тогда
УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows32");
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
КонецЕсли;
ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
Также важно убедиться, что каталог временных файлов учетной записи, под которой запущен агент сервера 1С (например, usr1cv8), добавлен в исключения антивируса и задач очистки диска.
Рассмотрим альтернативный метод, полностью исключающий использование внешних DLL и серверных компонент. Для одномерных штрихкодов (EAN-13, EAN-8, Code128) можно применить специализированные шрифты.
Разберем порядок действий при использовании этого метода:
Данный подход гарантирует стабильную печать, так как не зависит от серверных процессов 1С и разрядности платформы, однако требует предварительной установки шрифта на устройства пользователей.
Выясним, как формировать штрихкоды и QR-коды на чистом языке 1С без установленных шрифтов и сторонних библиотек:
Картинка.Эти методы абсолютно кроссплатформенны, корректно работают на серверах под управлением Linux, а также в тонком и веб-клиентах без риска возникновения ошибок отсутствия файлов.