При работе с внешним оборудованием (например, весами или сканерами) или при организации обмена данными между базами 1С через COMConnector, системные администраторы и разработчики часто сталкиваются с ошибкой 2147024891 0x80070005: отказано в доступе — для этой задачи пригодится готовый инструмент обмена данными между базами 1С через COM-соединение или веб-сервис. Эта проблема особенно актуальна для систем, работающих под управлением 64-битных версий Windows и использующих веб-сервер IIS. Разберем детально, почему возникает эта ошибка и как её устранить несколькими способами.
Код ошибки 0x80070005 является стандартным ответом операционной системы Windows, указывающим на проблемы с правами доступа в подсистеме DCOM (Distributed Component Object Model). В контексте 1С это чаще всего происходит в следующих сценариях:
USR1CV8) или веб-сервер (IUSR), не имеет прав на запуск и активацию конкретного COM-объекта.Этот метод является наиболее эффективным, так как он позволяет создать «обертку» (суррогатный процесс dllhost.exe) для вашей библиотеки. Это решает проблему разрядности и позволяет явно указать права доступа. Рассмотрим по шагам процесс настройки на примере библиотеки comcntr.dll или драйвера весов (для обхода проблем с DCOM удобно использовать драйвер интеграции электронных весов без COM и DLL).
1C_COM_Connector) и выберем способ установки Серверное приложение.C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll.Важный этап настройки безопасности:
После регистрации компонента необходимо настроить политику ограничений, чтобы избежать блокировок со стороны Windows:
1C_COM_Connector) — Свойства.Проанализируем ситуацию: эти действия позволяют системе запускать COM-объект с максимальными правами, игнорируя контекст безопасности вызывающего процесса (например, анонимного пользователя IIS).
Иногда ошибка вызвана некорректной регистрацией DLL в реестре Windows после обновления платформы 1С. В таком случае попробуем выполнить ручную регистрацию через командную строку от имени администратора.
Для 64-битной платформы команда будет выглядеть так:
regsvr32 "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"
Если вы используете 32-битную версию платформы на 64-битном сервере, убедитесь, что вы регистрируете библиотеку из соответствующей папки (Program Files (x86)).
Разберем интересный нюанс, связанный с тем, как 1С обрабатывает конструктор Новый COMОбъект. Исследования показывают, что при работе в сетевой среде или через IIS, второй параметр конструктора (имя компьютера) играет ключевую роль — это критично, если вы используете перенос данных между УТ и БП через OLE/COM-подключение.
Если мы используем следующий код:
// Ошибочный вариант или вариант, вызывающий проблемы доступа
Весы = Новый COMОбъект("ComServ.Ves_", "localhost");
// Или
Весы = Новый COMОбъект("ComServ.Ves_", "");
Система может выдать ошибку 0x80070005. Выясним причину: при указании localhost или пустой строки механизмы DCOM могут накладывать более жесткие требования к авторизации. Попробуем изменить код, указав IP-адрес сервера или не указывая второй параметр вовсе, если объект создается локально:
// Рекомендуемый вариант
Весы = Новый COMОбъект("ComServ.Ves_");
// Или с использованием IP
Соединитель = Новый COMОбъект("V83.COMConnector", "192.168.1.10");
Если создание приложения COM+ по каким-то причинам нежелательно, мы можем настроить права напрямую в системной конфигурации DCOM.
dcomcnfg.V83.COMConnector или ComServ.Ves_) — правильная настройка его прав обязательна, чтобы стабильно работал обмен данными между Розницей и БП через OLE/COM.IUSR, Network Service и USR1CV8, предоставив им полный доступ.Если ваша база опубликована на IIS и ошибка возникает при работе веб-клиента, проанализируем настройки пула приложений — это часто помогает, когда не запускается выгрузка документов и справочников через COM/OLE-соединение. Часто системе не удается создать COM-объект, потому что для анонимного пользователя не загружен профиль.
Рассмотрим порядок действий в консоли IIS:
Это действие создаст необходимые временные папки в профиле пользователя, к которым часто обращаются COM-библиотеки в процессе инициализации.
Мы рассмотрели комплексный подход к решению проблемы 0x80070005. В большинстве случаев самым надежным решением является Способ 1 (создание серверного приложения COM+), так как он полностью изолирует работу библиотеки и позволяет выполнять её от имени пользователя с административными правами, что критически важно для доступа к COM-портам и другим аппаратным ресурсам сервера.