Компонента есть, а 1С её не видит: разбор по шагам

· 9 мин

Содержание

Ошибка Не найден файл внешней компоненты в 1С почти никогда не означает, что файла нет вообще. Обычно он есть, но не там, где его ищет платформа: на другом компьютере (клиент вместо сервера), не под ту разрядность или не в том виде (путь к файлу вместо адреса макета). Начните с вопроса «на какой машине и в каком процессе выполняется подключение» — это сразу сужает поиск до одной-двух причин.

Частое заблуждение — переустанавливать платформу. Это помогает редко: компонента живёт отдельно от платформы, в макете конфигурации, в архиве драйвера или в реестре Windows.

Почему 1С не находит файл внешней компоненты

Внешняя компонента — это библиотека (.dll в Windows, .so в Linux), которую 1С загружает в свой процесс. Через неё работают сканеры, фискальные регистраторы, криптография, печать этикеток, обмен с внешними программами.

Подключение выполняет метод ПодключитьВнешнююКомпоненту (или его асинхронный вариант). Ему передают «местоположение»: путь к файлу, имя макета или адрес во временном хранилище. Если по этому местоположению платформа ничего не нашла, она и выдаёт ошибку.

Технологий компонент две, и ошибки у них разные:

ТехнологияКак хранитсяКак 1С её находит
Native APIФайл или ZIP-архив с манифестом, часто в макете конфигурацииПо пути, имени макета или адресу во временном хранилище
COMDLL, зарегистрированная в реестре WindowsПо ProgID или CLSID из реестра

Основные причины ошибки:

  • 📁 путь указан к файлу на клиенте, а код выполняется на сервере (или наоборот);
  • 📦 макет с компонентой пуст или заменён при обновлении конфигурации;
  • 🧩 в архиве нет сборки под нужную ОС или разрядность;
  • 🗝️ COM-библиотека не зарегистрирована или зарегистрирована не той версией regsvr32;
  • 🛡️ антивирус удалил или заблокировал DLL;
  • 📄 внешняя обработка передаёт имя макета, которое работает только для макетов конфигурации.

Где 1С ищет файл: проверяем путь и наличие компоненты

Первое, что нужно выяснить, — где выполняется строка с подключением. Для этого откройте модуль в конфигураторе и посмотрите директиву над процедурой.

  • &НаКлиенте — файл ищется на компьютере пользователя (или на терминальном сервере, если работают через RDP).
  • &НаСервере — файл ищется на машине, где работает рабочий процесс сервера 1С. В файловом варианте это опять компьютер пользователя.

Типичная ловушка: разработчик проверил обработку в файловой базе на своём ноутбуке, путь C:\Drivers\scanner.dll существовал. После переноса в клиент-серверную базу тот же код ищет C:\Drivers\ уже на сервере 1С, где такой папки нет.

Как проверить быстро:

  1. Найдите в коде вызов ПодключитьВнешнююКомпоненту и выпишите первый параметр.
  2. Если это путь к файлу — зайдите на нужную машину и убедитесь, что файл там есть и открывается под учётной записью, от которой работает 1С.
  3. Для сервера проверьте права пользователя службы сервера 1С на папку с компонентой: служба часто работает не от администратора.
  4. Если путь сетевой (\\server\share\...), учтите, что у службы сервера может не быть доступа к сетевым ресурсам.

Проверить наличие файла можно и кодом, в том же контексте, где идёт подключение:

&НаСервере
Процедура ПроверитьФайлКомпоненты(ПутьКФайлу)
    Файл = Новый Файл(ПутьКФайлу);
    Если Не Файл.Существует() Тогда
        ВызватьИсключение "Файл не найден на этой машине: " + ПутьКФайлу;
    КонецЕсли;
КонецПроцедуры

Если компонента нужна на клиенте, а лежит на сервере, её не копируют вручную на каждый компьютер. Правильный путь — хранить её в макете и подключать по имени макета или через временное хранилище.

Компонента в макете конфигурации и манифест архива

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

&НаСервере
Процедура ПодключитьНаСервере()
    Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.МояКомпонента", "МояКомп", ТипВнешнейКомпоненты.Native);
    Если Не Подключено Тогда
        ВызватьИсключение "Внешняя компонента не подключена";
    КонецЕсли;
    Объект = Новый("AddIn.МояКомп.ИмяОбъекта");
КонецПроцедуры

Здесь ошибка возникает в трёх случаях:

  1. Макета с таким именем нет: его переименовали, удалили при доработке или он не попал в расширение.
  2. Макет есть, но пустой: при сравнении-объединении конфигураций его не отметили для загрузки.
  3. Макет — ZIP-архив, но внутри нет сборки под текущую платформу.

Третий пункт — главный приём, о котором часто не знают. Native-компонента обычно поставляется архивом с файлом MANIFEST.XML. В манифесте перечислены сборки: для Windows x86, Windows x86-64, Linux. Платформа читает манифест и берёт файл для своей ОС и разрядности.

Если в манифесте указана только 32-битная сборка для Windows, то 64-битный клиент или сервер 1С не найдёт подходящий файл. Пользователь увидит ту же ошибку, хотя архив на месте.

Как проверить архив:

  1. В конфигураторе откройте общий макет и выберите команду сохранения макета в файл.
  2. Переименуйте файл в .zip (если расширения нет) и откройте любым архиватором.
  3. Откройте MANIFEST.XML и посмотрите, какие пары «ОС — архитектура» там перечислены и есть ли указанные файлы в архиве.

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

Регистрация COM-объектов в реестре Windows

COM-компоненту 1С ищет не по пути, а по записи в реестре. Если библиотека лежит на диске, но не зарегистрирована, платформа её не найдёт.

Регистрация выполняется от имени администратора:

:: 64-битная DLL — системный regsvr32
C:\Windows\System32\regsvr32.exe "C:\Drivers\MyComponent.dll"

:: 32-битная DLL в 64-битной Windows — regsvr32 из SysWOW64
C:\Windows\SysWOW64\regsvr32.exe "C:\Drivers\MyComponent.dll"

Путаница с папками здесь закономерна: в 64-битной Windows System32 содержит 64-битные программы, а SysWOW64 — 32-битные. Если зарегистрировать 32-битную библиотеку не тем regsvr32, запись попадёт не в ту ветку реестра.

Что ещё проверить:

  • 🔐 командная строка запущена «от имени администратора», иначе регистрация молча не пройдёт или выдаст ошибку доступа;
  • 📚 у DLL есть все зависимые библиотеки (часто нужен определённый пакет Visual C++ Redistributable — уточните у поставщика драйвера);
  • 🖥️ на терминальном сервере регистрация выполняется один раз на сервере, а не в профиле пользователя.

Отдельный случай — COM-соединение с базой 1С из внешней программы (Excel, скрипт, другая база). Там используется компонента comcntr.dll из папки bin установленной платформы, ProgID V83.COMConnector. После обновления платформы её нужно перерегистрировать из папки новой версии:

C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"

Вместо 8.3.XX.XXXX подставьте номер установленной версии. Сообщение при этом обычно другое, но причина та же — платформа не находит зарегистрированную библиотеку.

Разрядность платформы и операционной системы

Процесс 1С может загрузить только библиотеку своей разрядности. 64-битный клиент не загрузит 32-битную DLL, и наоборот.

Что запущеноКакая сборка компоненты нужна
32-битный клиент 1С в любой Windows32-битная
64-битный клиент 1С64-битная
64-битный сервер 1С (Windows)64-битная для Windows
Сервер 1С на LinuxСборка .so для Linux нужной разрядности
Веб-клиентКомпонента для браузера и установленное расширение работы с 1С

Как узнать разрядность клиента: откройте Справка → О программе — в строке версии платформы указано, 32- или 64-битное приложение. Можно также посмотреть, из какой папки запущен 1cv8.exe: Program Files или Program Files (x86).

Решения, от простого к сложному:

  1. Взять у поставщика компоненты 64-битную сборку или архив с полным манифестом.
  2. Для рабочего места, где нужен старый 32-битный драйвер, установить 32-битный клиент той же версии платформы и запускать базу им.
  3. Если компонента работает на сервере, а сборки под 64 бита или Linux нет — перенести подключение на клиент (это делается в коде, нужен программист).

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

Внешние отчёты и обработки (.epf, .erf) с компонентой

Внешняя обработка не входит в конфигурацию, поэтому имя вида ОбщийМакет.Компонента для её собственных макетов не работает . Это самая частая причина ошибки в самописных обработках.

Правильная схема — передать в подключение адрес во временном хранилище:

&НаСервере
Функция АдресКомпоненты()
    ОбъектОбработки = РеквизитФормыВЗначение("Объект");
    ДвоичныеДанные = ОбъектОбработки.ПолучитьМакет("Компонента");
    Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецФункции

Полученный адрес передают первым параметром в ПодключитьВнешнююКомпоненту на клиенте. Макет внутри обработки должен иметь тип «Двоичные данные» (или «Внешняя компонента», если он доступен в вашей версии конфигуратора).

Что ещё ломается во внешних обработках:

  • 📎 обработку пересохранили, а макет с компонентой не перенесли — проверьте, что он есть в дереве макетов;
  • 🔒 обработка подключается в безопасном режиме, и подключение из файла запрещено профилем безопасности;
  • 🧾 в коде остался жёсткий путь к файлу с машины разработчика.

Для торгового оборудования в типовых конфигурациях драйверы ставятся не вручную, а через Администрирование → Подключаемое оборудование. Там же устанавливается драйвер на конкретный компьютер. Если после обновления конфигурации появилась ошибка, откройте карточку экземпляра оборудования и повторите установку драйвера на этом рабочем месте.

Диагностика: выберите симптом

Алгоритм восстановления и как не допустить повторения

Если причина не очевидна, идите по порядку — от безопасных проверок к изменениям.

  1. Зафиксируйте, у кого ошибка: у всех пользователей, на одном компьютере, только на сервере. Если на одном компьютере — дело в нём, конфигурацию не трогайте.
  2. Найдите в коде место подключения и контекст (&НаКлиенте или &НаСервере).
  3. Определите технологию: Native (макет, архив) или COM (ProgID в коде).
  4. Для Native проверьте макет и манифест архива. Для COM — регистрацию.
  5. Сверьте разрядность процесса 1С и сборки компоненты.
  6. Проверьте журнал антивируса: DLL могли отправить в карантин. Добавьте папку компоненты в исключения по согласованию с администратором безопасности.
  7. Очистите каталог установленных компонент в профиле пользователя и подключите компоненту заново.

По последнему пункту: тонкий клиент распаковывает установленные компоненты в профиль пользователя, обычно в %APPDATA%\1C\1cv8\ExtCompT. Повреждённая копия там даёт ошибку, хотя в макете всё в порядке.

Перед очисткой каталога закройте все сеансы 1С этого пользователя. Удалённые файлы платформа переустановит при следующем подключении, но открытые библиотеки удалить не получится, и каталог останется в смешанном состоянии.

Чтобы ошибка не возвращалась:

  • 📦 храните компоненты в макетах конфигурации или расширения, а не в папках на дисках;
  • 🧩 берите у поставщика архивы со сборками под все нужные ОС и разрядности;
  • 🔄 после обновления конфигурации проверяйте макеты компонент, если в базе есть доработки;
  • 📝 записывайте, какие COM-библиотеки регистрировались на сервере и рабочих местах, — после переустановки системы список пригодится;
  • 🛡️ согласуйте исключения антивируса для папок с драйверами.

Частые вопросы

Нужно ли переустанавливать платформу 1С при этой ошибке?
Обычно нет. Компонента хранится в макете, архиве драйвера или реестре Windows, а не в файлах платформы. Переустановка помогает только при повреждённой comcntr.dll после обновления.
Почему у одного пользователя работает, а у другого нет?
Чаще всего у них разная разрядность клиента, разные права на папку или у одного повреждена копия компоненты в профиле. Сравните версию в «О программе» на обоих компьютерах.
Можно ли подключить 32-битную компоненту к 64-битному серверу 1С?
Нет, процесс загружает только библиотеку своей разрядности. Нужна 64-битная сборка, либо подключение переносят на клиент с 32-битной платформой.
Работают ли внешние компоненты в веб-клиенте?
Работают, если есть сборка для браузера и установлено расширение для работы с 1С:Предприятием. Обычные Windows-DLL, рассчитанные на тонкий клиент, браузер не загрузит.
Где взять файл компоненты, если его нет у нас?
Только у разработчика: поставщика оборудования, сервиса или автора доработки. Скачивать DLL со сторонних сайтов небезопасно — в таких файлах встречается вредоносный код.