Как обеспечить доступ фонового задания 1С к сетевой папке?

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

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

Проанализируем причину возникновения проблемы

Основная причина кроется в контексте безопасности, в котором выполняется код. Когда вы открываете папку вручную, вы используете свою доменную или локальную учетную запись. Фоновое же задание выполняется сервером 1С:Предприятие, который по умолчанию часто устанавливается под системной учетной записью LocalSystem (или NT AUTHORITY\SYSTEM).

Рассмотрим ключевые технические нюансы:

Способ 1: Программное подключение сетевого ресурса (COM-объект)

Если у вас нет возможности перенастроить службу сервера 1С на доменного пользователя (например, из-за политик безопасности), можно временно подключать сетевой ресурс прямо из кода 1С, передавая логин и пароль явно. Для этого мы будем использовать COM-объекты WScript.Network.

Рассмотрим пример кода, который позволяет подключить сетевой диск, выполнить необходимые действия и корректно отключить его:


// Создаем объекты для работы с сетью и файловой системой
Network = Новый COMОбъект("WScript.Network");
FileSys = Новый COMОбъект("Scripting.FileSystemObject");

ИмяДиска = "Z:";
СетевойПуть = "\\ServerName\SharedFolder";
Логин = "Domain\techman";
Пароль = "YourPassword";

Попытка
    // Проверяем, не занята ли буква диска, и если да — удаляем старое подключение
    Если FileSys.DriveExists(ИмяДиска) Тогда
        Network.RemoveNetworkDrive(ИмяДиска, Истина, Истина);
    КонецЕсли;
    
    // Подключаем диск с передачей явных учетных данных
    // Параметры: ИмяДиска, Путь, СохранятьПодключение(Ложь), Логин, Пароль
    Network.MapNetworkDrive(ИмяДиска, СетевойПуть, Ложь, Логин, Пароль);
    
    // Теперь можем работать с файлами через стандартный объект "Файл"
    КаталогНаДиске = Новый Файл(ИмяДиска + "\");
    Если КаталогНаДиске.Существует() Тогда
        // Выполняем действия с файлами
        // ...
    КонецЕсли;

    // Важно: отключаем диск после завершения работы
    Network.RemoveNetworkDrive(ИмяДиска, Истина, Истина);
Исключение
    ЗаписьЖурналаРегистрации("Ошибка доступа к сети", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;

Обратите внимание: При использовании метода RemoveNetworkDrive рекомендуется передавать второй и третий параметры как Истина. Это гарантирует принудительное отключение, даже если файлы открыты, и удаление информации из профиля пользователя.

Способ 2: Настройка службы сервера 1С под доменной учетной записью

Это самый правильный и надежный способ с точки зрения администрирования. Вместо того чтобы прописывать пароли в коде (что небезопасно), мы заставим саму службу 1С "представляться" в сети конкретным пользователем.

Разберем этот процесс по шагам:

  1. Создайте в домене специальную учетную запись (например, usr1cv8_service).
  2. Установите для этой записи пароль с неограниченным сроком действия.
  3. На сервере 1С добавьте эту запись в локальную группу Performance Log Users и дайте ей права Log on as a service (Вход в качестве службы) в локальных политиках безопасности.
  4. Дайте этой учетной записи полные права на папку с установленной платформой 1С и на папку кластера серверов (обычно C:\Program Files\1cv8\srvinfo).
  5. В оснастке "Службы" (services.msc) найдите службу "Агент сервера 1С:Предприятия", перейдите на вкладку "Вход в систему", выберите "С учетной записью" и укажите созданного пользователя.
  6. Перезапустите службу.
  7. На целевом сервере, где находится сетевая папка, дайте права этой доменной учетной записи (и на уровне Share, и на уровне NTFS).

После этого код КаталогНаДиске.Существует() для пути вида \\Server\Folder будет возвращать Истина без каких-либо дополнительных манипуляций с дисками.

Способ 3: Синхронизация локальных учетных записей

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

На Сервере А (где 1С) и на Сервере Б (где папка) создаются локальные пользователи с абсолютно одинаковыми именами и паролями. Если служба 1С на Сервере А работает под этим пользователем, то при обращении к Серверу Б система Windows попробует авторизоваться под теми же данными. Если они совпадут, доступ будет предоставлен. Это часто выручает в простых сетевых окружениях.

Дополнительные рекомендации по работе с сетью в 1С

Проанализируем еще несколько важных моментов, которые помогут избежать ошибок:

Использование UNC-путей: Старайтесь всегда использовать пути вида \\Server\Share\File.txt вместо обращений к буквам дисков (Z:\File.txt). Буквы дисков — это виртуальные сущности пользовательского интерфейса, и в контексте серверных процессов они крайне нестабильны. Даже если вы подключили диск через WScript.Network, работа по прямому пути считается более надежной.

Права доступа к Share vs NTFS: Проверьте, что права даны в двух местах. Часто разработчики забывают про вкладку "Доступ" (Share Permissions), ограничиваясь только вкладкой "Безопасность" (NTFS). Для работы фонового задания доступ должен быть разрешен в обоих окнах свойств папки.

Кэширование прав: Помните, что Windows кэширует данные об авторизации. Если вы изменили права доступа или сменили пароль учетной записи, под которой работает служба, может потребоваться перезагрузка сервера 1С или принудительная очистка сессий на файловом сервере через команду net sessions /delete.

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

← На главную