Что делать, если для идентификатора Barcode не удалось получить внешнюю компоненту и растет потребление памяти rphost.exe?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При работе в программе 1С:Розница 2.3 (а также в других конфигурациях на базе БСП и БПО) пользователи часто сталкиваются с ошибкой: «Для идентификатора Barcode (версия не указана) не удалось получить внешнюю компоненту. Состояние: НеНайдена». Эта ситуация становится критической, когда при печати ценников или этикеток серверный процесс rphost.exe начинает стремительно поглощать оперативную память, что может привести к полной остановке работы сервера. В этой статье мы подробно разберем причины возникновения данной ошибки и пошагово пройдем по методам ее устранения.

Разберем природу ошибки и влияние на сервер

Проанализируем ситуацию: когда система пытается сформировать печатную форму со штрихкодом, она обращается к внешней компоненте 1C:Barcode. Если компонента не зарегистрирована, повреждена или имеет несовместимую разрядность, механизм Библиотеки подключаемого оборудования (БПО) выдает ошибку.

Почему же «съедается» память? Выясним причину: печать ценников обычно происходит в цикле (по количеству товаров). Если внешняя компонента не найдена, 1С при каждой итерации цикла пытается инициализировать объект заново. Из-за особенностей работы платформы 8.3 (особенно в версиях 8.3.18–8.3.20) неудачная попытка создания COM-объекта или Native-компоненты может не приводить к освобождению выделенной памяти, что вызывает лавинообразный рост потребления ресурсов процессом rphost.exe.

Решение 1. Очистка кеша внешних компонент

Рассмотрим самый быстрый способ, который помогает в большинстве случаев — принудительная очистка временных файлов, где хранятся распакованные библиотеки. Важно понимать, что очистка нужна как на стороне клиента, так и на стороне сервера, если печать выполняется в серверном контексте.

  1. Закроем все сеансы 1С.
  2. Перейдем в каталог %AppData%\Roaming\1C\1cv8\ExtCompT\ на локальном компьютере.
  3. Удалим все содержимое этой папки.
  4. Важный шаг для сервера: если ошибка повторяется на сервере, проделаем ту же операцию для пользователя, от имени которого запущена служба 1C:Enterprise Server. Обычно это USR1CV8. Путь будет выглядеть примерно так: C:\Users\USR1CV8\AppData\Roaming\1C\1cv8\ExtCompT\.

После очистки при первом обращении к печати штрихкодов система попытается заново извлечь компоненту из макета конфигурации и установить ее.

Решение 2. Проверка разрядности платформы и версии компоненты

Проанализируем технические требования. Старые версии компоненты 1CBarCode (версии 8.x) работали по технологии ActiveX и были строго 32-битными. Современный сервер 1С часто является 64-битным. Если ваша конфигурация после обновления пытается вызвать старый идентификатор, 64-битный процесс rphost.exe просто не сможет его загрузить.

Посмотрим на способы исправления через интерфейс 1С:

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Найдем пункт Внешние компоненты.
  3. В списке найдем «1С:Печать штрихкодов».
  4. Если статус компоненты «Не установлена» или версия ниже 9.0, выделим ее и нажмем «Обновить из файла» (если у вас есть свежий дистрибутив) или «Восстановить по умолчанию».

Современные версии БПО используют компоненту 1C:BarCode версии 10 и выше, которая поставляется как Native API и поддерживает обе разрядности (x86 и x64).

Решение 3. Настройка прав доступа к временным папкам

Выясним еще одну скрытую причину: процесс rphost должен иметь возможность записать файл компоненты из базы данных на диск во временную папку сервера для последующего подключения.

Проверим следующие настройки:

Решение 4. Обновление шаблонов ценников и этикеток

Иногда проблема кроется не в самой платформе, а в старых макетах. Если макет ценника был создан в очень старой версии Розницы, в нем может быть жестко прописан объект «Рисунок», ссылающийся на устаревший ActiveX-элемент.

Попробуем следующий алгоритм:

  1. Откроем справочник «Шаблоны этикеток и ценников».
  2. Выберем проблемный шаблон и откроем его редактор.
  3. Удалим старый объект штрихкода.
  4. Добавим новый объект «Штрихкод» из стандартной панели инструментов конструктора.
  5. Сохраним шаблон и проверим печать.

Это заставит систему использовать актуальные механизмы БПО для генерации изображения штрихкода, которые в новых версиях конфигураций могут работать вообще без использования внешних компонент через встроенные средства платформы.

Программная диагностика проблемы

Для программистов будет полезно проверить, как именно вызывается компонента в коде. Разберем пример типового обращения через БПО. Если в коде используется старый метод подключения, его стоит заменить на актуальный:


// Пример правильного подключения компоненты через БПО
Результат = МенеджерОборудованияКлиент.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
Если Не Результат Тогда
    ТекстОшибки = "Не удалось подключить компоненту печати штрихкодов.";
    // Обработка ошибки
КонецЕсли;

Если же вы видите, что ошибка возникает внутри типового кода после обновления, убедитесь, что в конфигурации не включен Безопасный режим для расширений, которые могут отвечать за печать. В безопасном режиме работа с внешними компонентами может блокироваться политиками безопасности кластера 1С.

Заключение

Подведем итоги. Ошибка «Не удалось получить внешнюю компоненту Barcode» чаще всего связана с конфликтом разрядности платформы или повреждением кеша библиотек. Если при этом растет потребление памяти, необходимо немедленно прекратить попытки печати и очистить серверный кеш ExtCompT. Помните, что переход на современные шаблоны ценников, использующие Native API, навсегда избавит вас от проблем с регистрацией старых COM-объектов в системе.

← На главную