В процессе работы с современными конфигурациями 1С, такими как УНФ, ERP или Бухгалтерия, пользователи часто сталкиваются с необходимостью печати QR-кодов на чеках, счетах или этикетках. Технически это реализуется через подключение внешней компоненты (ВК), которая обычно хранится внутри метаданных конфигурации в виде общего макета. Однако случается ситуация, когда система внезапно перестает «видеть» файл компоненты, выдавая ошибку: {ОбщийМодуль.УправлениеПечатью.Модуль(2233)}: Результат = ОбщегоНазначения.ПодключитьКомпонентуИзМакета("QRCodeExtension", "ОбщийМакет.КомпонентаПечатиQRКода");.
Особенность этой проблемы в её «плавающем» характере: после перезапуска сервера 1С печать может работать исправно в течение 20–60 минут, а затем снова аварийно завершаться. Проанализируем причины этого поведения и разберем по шагам методы решения.
Для начала разберем, как именно 1С работает с файлами .dll или .so, зашитыми в макеты. Когда программный код вызывает метод ПодключитьВнешнююКомпоненту(), платформа выполняет следующие действия:
AppData\Local\1C\1cv8\AddIn).%TEMP% того пользователя, под которым запущен процесс rphost (на сервере это обычно учетная запись USR1CV8).Выясним причину сбоя: ошибка «Не найден файл внешней компоненты» означает, что запись в памяти 1С о том, что компонента «зарегистрирована», существует, но физический файл в папке %TEMP%, к которому обращается библиотека для работы, исчез или заблокирован.
Как показывает практика и обсуждение специалистов, наиболее частой причиной является работа скриптов очистки диска или настройки политик безопасности Windows. Рассмотрим ситуацию: системные администраторы часто настраивают регламентные задачи, которые раз в час или чаще очищают содержимое папок C:\Windows\Temp или C:\Users\ИмяПользователя\AppData\Local\Temp для экономии места.
Если файл компоненты удаляется из %TEMP% во время работы сервера 1С, процесс rphost не может выполнить повторную инициализацию объекта, так как считает компоненту уже подключенной. Чтобы решить эту проблему, выполним следующие действия:
USR1CV8).%TEMP% пользователя сервера 1С или отключим автоматическую очистку для этой директории..dll файлы из временных папок, считая их подозрительными.Проанализируем программный аспект. Иногда ошибка провоцируется использованием модулей с установленным свойством «Повторное использование возвращаемых значений». Рассмотрим пример кода, который может вызывать проблему:
Функция ПодключитьКомпонентуГенерацииИзображенияШтрихкода() Экспорт
Идентификатор = "QRCodeExtension";
Местоположение = "ОбщийМакет.КомпонентаПечатиQRКода";
Если ПодключитьВнешнююКомпоненту(Местоположение, Идентификатор, ТипВнешнейКомпоненты.Native) Тогда
Возврат Новый("AddIn." + Идентификатор + ".QRCodeExtension");
КонецЕсли;
Возврат Неопределено;
КонецФункции
Если эта функция находится в модуле с повторным использованием значений («на время сеанса»), то при первом вызове объект компоненты создается и кэшируется. Если в дальнейшем файл библиотеки в операционной системе будет удален или сеанс «зависнет» при смене рабочего процесса, ссылка в кэше станет невалидной.
Рекомендация: попробуем отключить повторное использование в модуле ГенерацияШтрихкодаСерверПовтИсп (или аналогичном в вашей конфигурации). Это заставит систему каждый раз проверять наличие компоненты и заново её инициализировать при необходимости. Хотя это может незначительно замедлить печать, стабильность работы повысится.
В версиях платформы 8.3.19.1229 и смежных релизах наблюдались специфические баги в работе менеджера кластера с внешними компонентами. В частности, при работе нескольких рабочих процессов (rphost) компонента могла быть распакована одним процессом, а другой процесс пытался её использовать, не имея доступа к темпам соседа.
Разберем способы обхода этой ситуации:
.dll из макета и зарегистрировать его в системе с помощью команды regsvr32 или разместить в папке bin сервера 1С.srvinfo\reg_1541 (за исключением файлов баз данных и логов регистрации). Это заставит платформу заново пересоздать все временные структуры при следующем запуске.AddIn были доработаны.Проанализируем права доступа. Учетная запись USR1CV8 должна обладать полными правами (Full Control) на свою временную папку. Иногда после обновлений Windows права могут «слетать», и система позволяет создать файл, но блокирует его чтение библиотекой загрузки 1С.
Посмотрим на путь к временным файлам в Windows Server:
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp или C:\Users\USR1CV8\AppData\Local\Temp.
Важно: убедимся, что на диске, где расположены эти папки, достаточно свободного места. При дефиците пространства Windows начинает агрессивно удалять временные объекты даже во время их использования приложениями.
Подведем итог: если вы столкнулись с ошибкой «Не найден файл внешней компоненты» через интервалы времени, первым делом запретите администраторам или автоматическим скриптам чистить папку Temp. В 90% случаев это полностью решает проблему без внесения изменений в код конфигурации 1С.