Под каким пользователем работает COM-соединение в 1С и как настроить права доступа?

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

При работе с интеграциями между различными базами 1С через механизм COM-соединения программисты часто сталкиваются с неочевидной проблемой: программный код, который успешно отрабатывает в обычном сеансе или регламентном задании, внезапно выдает ошибку «Отказ в доступе» при выполнении через COM. Чаще всего это происходит при попытке записи файлов на диск или обращении к сетевым ресурсам. В рамках данной статьи мы разберем, как определить «личность» процесса, создающего соединение, и как правильно настроить права в операционной системе Windows. Для ознакомления с базовыми принципами настройки подключения можно использовать руководство по работе с COM-объектами в 1С.

Выясняем контекст выполнения: кто запускает соединение?

Для начала проанализируем базовые правила, по которым определяется учетная запись процесса в клиент-серверном варианте работы 1С. Рассмотрим два основных сценария:

  1. Вызов на стороне клиента: Если создание объекта COMConnector происходит в коде, исполняемом на клиенте (например, в форме обработки), то соединение работает от имени того пользователя Windows, под которым запущена текущая сессия 1С.
  2. Вызов на стороне сервера: Если создание соединения инициируется в серверном коде (в фоновом задании, регламентном задании или серверном модуле), то по умолчанию оно выполняется от имени системной учетной записи, под которой запущена служба 1C:Enterprise 8 Server Agent (обычно это USR1CV82 или USR1CV83).

Однако на практике ситуация часто усложняется из-за использования суррогатных процессов Windows, особенно когда возникает конфликт разрядности (например, 64-битный сервер 1С пытается вызвать 32-битную компоненту COM).

Как точно узнать имя пользователя: практический метод

Если вы столкнулись с ошибкой доступа, первым делом нужно выяснить, под каким именно пользователем «представляется» ваше соединение операционной системе. Разберем эффективный способ диагностики, предложенный в обсуждении:

В коде, который выполняется внутри COM-соединения, можно вызвать системную команду для вывода переменных окружения в текстовый файл. Это позволит нам увидеть реальное имя пользователя (переменная USERNAME). Посмотрим на пример кода:


// Выполняем команду внутри контекста COM-соединения
КомандаСистемы("set > C:\Temp\debug_user.txt");

После выполнения этого кода откройте созданный файл. В нем вы найдете список всех переменных окружения. Особое внимание обратите на параметр USERDOMAIN и USERNAME. Как показывает практика, в проблемных случаях там часто фигурирует LOCAL SERVICE или NETWORK SERVICE, а не ожидаемый пользователь сервера 1С.

Альтернативный метод — создать любой файл на диске из-под COM-соединения и посмотреть в свойствах файла на вкладке «Безопасность» (кнопка «Дополнительно»), кто является его владельцем (Owner). Если владельцем значится LOCAL SERVICE, значит, ваше соединение работает с минимальными правами в изолированной среде.

Почему появляется LOCAL SERVICE и как это исправить?

Проанализируем причину, по которой операционная система подменяет пользователя. Если вы используете 64-битный сервер 1С, то для работы с 32-битной компонентой V83.COMConnector вам необходимо настроить приложение в консоли Службы компонентов (Component Services). В этом случае Windows запускает отдельный процесс dllhost.exe, который служит оболочкой для COM-объекта.

Для исправления ситуации выполним следующие шаги в настройке comexp.msc:

  1. Запустите консоль управления: Пуск — Выполнить — comexp.msc.
  2. Перейдите в раздел Компьютеры — Мой компьютер — Приложения COM+.
  3. Найдите ваше созданное приложение (например, с именем «1C_COM_Connector»).
  4. Нажмите правой кнопкой мыши, выберите «Свойства» и перейдите на вкладку «Удостоверение» (Identity).
  5. Выясним причину ошибки: скорее всего, там выбрано «Текущий пользователь» или «Системная учетная запись». Чтобы COM-соединение имело стабильный доступ к ресурсам, необходимо выбрать пункт «Указанный пользователь».
  6. Введите данные учетной записи (например, того же пользователя USR1CV83), у которого точно есть права на нужные папки и сетевые пути.

Важный нюанс: После изменения настроек на вкладке «Удостоверение» обязательно нужно принудительно остановить приложение в консоли (через контекстное меню «Завершить»), чтобы при следующем вызове оно запустилось с новыми правами.

Проблема доступа к сетевым ресурсам (Double Hop)

Разберем ситуацию, когда COM-соединение должно сохранить файл на сетевой шаре. Даже если вы настроили запуск от имени доменного пользователя, вы можете столкнуться с проблемой «второго прыжка». Когда сервер 1С (первый узел) запускает COM-процесс и тот пытается обратиться к серверу файлов (второй узел), Windows может заблокировать передачу учетных данных (делегирование).

Проанализируем ключевые моменты для работы с сетью:

Настройка через DCOM (dcomcnfg)

Посмотрим на ситуацию, когда используется V83.Application вместо V83.COMConnector. В этом случае объект запускается как полноценное приложение (EXE-файл). Его права регулируются через настройки DCOM:

  1. В консоли dcomcnfg найдите объект 1C83 Application.
  2. На вкладке «Безопасность» (Security) проверьте разделы «Разрешения на запуск и активацию». Там должен быть явно добавлен пользователь, от которого работает сервер 1С (rphost).
  3. На вкладке «Удостоверение» (Identity) также рекомендуется жестко задать пользователя, чтобы избежать запуска в «Сессии 0» под непредсказуемой учетной записью.

Подводя итог, можно сказать, что стабильность работы COM-соединения напрямую зависит от прозрачности прав доступа. Лучшим решением будет создание выделенного сервисного пользователя в домене, от имени которого будут работать и служба сервера 1С, и настроенное приложение в COM+. Для решения сопутствующих системных вопросов пригодится справочник по типовым задачам администрирования Windows и 1С.

← На главную