Почему при выполнении кода на сервере 1С пропадает доступ к сетевой папке?

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

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

Выясним причину проблемы

Основная причина кроется в контексте выполнения вашего кода. Когда вы запускаете обработку вручную в 1С:Предприятии, код выполняется от имени того пользователя Windows, под которым открыт клиент. Этот пользователь авторизован в сети, имеет права на сетевые папки, и Windows «передает» эти права при обращении к ресурсу.

Когда же процедура выполняется в общем модуле на сервере (с галками Сервер, Вызов сервера), код исполняется процессом rphost.exe. Этот процесс запускается службой 1C:Enterprise Server Agent. По умолчанию данная служба работает под учетной записью LocalSystem (Локальная система). Это системная запись, которая не имеет прав доступа к сетевым ресурсам других компьютеров в локальной сети, так как у нее нет пароля для авторизации в домене или рабочей группе.

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

Способ №1: Смена учетной записи службы сервера 1С (Рекомендуемый)

Чтобы предоставить серверу 1С доступ к сетевым ресурсам, необходимо изменить учетную запись, от имени которой запущена служба 1C:Enterprise Server Agent. Рассмотрим этот процесс по шагам:

  1. Создайте в домене или на компьютерах (сервере 1С и компьютере с общей папкой) одинакового пользователя с одинаковым паролем.
  2. На компьютере с общей папкой предоставьте этому пользователю полные права доступа к папке (как в правах доступа NTFS, так и в параметрах общего доступа/Sharing).
  3. На сервере 1С откройте оснастку Службы (services.msc).
  4. Найдите службу 1C:Enterprise Server Agent, нажмите правой кнопкой мыши — Свойства.
  5. Перейдите на вкладку Вход в систему.
  6. Выберите пункт С учетной записью и введите данные созданного вами пользователя.
  7. Нажмите ОК и обязательно перезапустите службу.

Важное примечание: выбранный пользователь должен обладать правом Log on as a service (Вход в качестве службы) на сервере 1С. Также убедитесь, что у него есть права на локальные папки сервера, где хранятся базы, srvinfo (журнал регистрации) и временные файлы, иначе сервер может не запуститься.

Способ №2: Монтирование сетевого ресурса через net use

Если смена пользователя службы невозможна, можно попробовать примонтировать сетевой ресурс как локальный диск от имени той же учетной записи, под которой работает служба 1С. Это делается с помощью команды net use.

Рассмотрим, как можно автоматизировать подключение:


// Пример команды для командной строки:
net use Z: \\192.168.0.1\Папка /user:ИмяПользователя Пароль /persistent:yes

После выполнения этой команды система «запомнит» подключение. Однако помните, что сетевые диски, подключенные в сеансе одного пользователя, обычно не видны другому. Поэтому выполнение этой команды должно производиться в контексте той же SYSTEM или той учетной записи, которая запускает службу 1С. Для этого иногда используют планировщик заданий, настроенный на запуск при старте системы от имени нужной учетной записи.

Чего делать не стоит

Многие пытаются решить проблему, предоставив права пользователю СИСТЕМА (SYSTEM) на компьютере с общей папкой. Это не сработает. Пользователь SYSTEM является локальным для конкретной машины и не может авторизоваться на другом компьютере. Кроме того, попытка открытия сетевого доступа для учетной записи SYSTEM является грубым нарушением правил безопасности вашей IT-инфраструктуры.

Итоги и рекомендации

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

← На главную