При работе в программе 1С:Розница 2.3 (а также в других конфигурациях на базе БСП и БПО) пользователи часто сталкиваются с ошибкой: «Для идентификатора Barcode (версия не указана) не удалось получить внешнюю компоненту. Состояние: НеНайдена». Эта ситуация становится критической, когда при печати ценников или этикеток серверный процесс rphost.exe начинает стремительно поглощать оперативную память, что может привести к полной остановке работы сервера. В этой статье мы подробно разберем причины возникновения данной ошибки и пошагово пройдем по методам ее устранения.
Проанализируем ситуацию: когда система пытается сформировать печатную форму со штрихкодом, она обращается к внешней компоненте 1C:Barcode. Если компонента не зарегистрирована, повреждена или имеет несовместимую разрядность, механизм Библиотеки подключаемого оборудования (БПО) выдает ошибку.
Почему же «съедается» память? Выясним причину: печать ценников обычно происходит в цикле (по количеству товаров). Если внешняя компонента не найдена, 1С при каждой итерации цикла пытается инициализировать объект заново. Из-за особенностей работы платформы 8.3 (особенно в версиях 8.3.18–8.3.20) неудачная попытка создания COM-объекта или Native-компоненты может не приводить к освобождению выделенной памяти, что вызывает лавинообразный рост потребления ресурсов процессом rphost.exe.
Рассмотрим самый быстрый способ, который помогает в большинстве случаев — принудительная очистка временных файлов, где хранятся распакованные библиотеки. Важно понимать, что очистка нужна как на стороне клиента, так и на стороне сервера, если печать выполняется в серверном контексте.
%AppData%\Roaming\1C\1cv8\ExtCompT\ на локальном компьютере.1C:Enterprise Server. Обычно это USR1CV8. Путь будет выглядеть примерно так: C:\Users\USR1CV8\AppData\Roaming\1C\1cv8\ExtCompT\.После очистки при первом обращении к печати штрихкодов система попытается заново извлечь компоненту из макета конфигурации и установить ее.
Проанализируем технические требования. Старые версии компоненты 1CBarCode (версии 8.x) работали по технологии ActiveX и были строго 32-битными. Современный сервер 1С часто является 64-битным. Если ваша конфигурация после обновления пытается вызвать старый идентификатор, 64-битный процесс rphost.exe просто не сможет его загрузить.
Посмотрим на способы исправления через интерфейс 1С:
Современные версии БПО используют компоненту 1C:BarCode версии 10 и выше, которая поставляется как Native API и поддерживает обе разрядности (x86 и x64).
Выясним еще одну скрытую причину: процесс rphost должен иметь возможность записать файл компоненты из базы данных на диск во временную папку сервера для последующего подключения.
Проверим следующие настройки:
USR1CV8 должны быть полные права на папку C:\Windows\Temp.TEMP и TMP для пользователя сервера. Если они указывают на несуществующие пути, компонента не сможет быть инициализирована.Иногда проблема кроется не в самой платформе, а в старых макетах. Если макет ценника был создан в очень старой версии Розницы, в нем может быть жестко прописан объект «Рисунок», ссылающийся на устаревший ActiveX-элемент.
Попробуем следующий алгоритм:
Это заставит систему использовать актуальные механизмы БПО для генерации изображения штрихкода, которые в новых версиях конфигураций могут работать вообще без использования внешних компонент через встроенные средства платформы.
Для программистов будет полезно проверить, как именно вызывается компонента в коде. Разберем пример типового обращения через БПО. Если в коде используется старый метод подключения, его стоит заменить на актуальный:
// Пример правильного подключения компоненты через БПО
Результат = МенеджерОборудованияКлиент.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
Если Не Результат Тогда
ТекстОшибки = "Не удалось подключить компоненту печати штрихкодов.";
// Обработка ошибки
КонецЕсли;
Если же вы видите, что ошибка возникает внутри типового кода после обновления, убедитесь, что в конфигурации не включен Безопасный режим для расширений, которые могут отвечать за печать. В безопасном режиме работа с внешними компонентами может блокироваться политиками безопасности кластера 1С.
Подведем итоги. Ошибка «Не удалось получить внешнюю компоненту Barcode» чаще всего связана с конфликтом разрядности платформы или повреждением кеша библиотек. Если при этом растет потребление памяти, необходимо немедленно прекратить попытки печати и очистить серверный кеш ExtCompT. Помните, что переход на современные шаблоны ценников, использующие Native API, навсегда избавит вас от проблем с регистрацией старых COM-объектов в системе.