При разработке фоновых и регламентных заданий для интеграции или загрузки данных разработчики нередко сталкиваются с ситуацией, когда код, выполняющийся на сервере 1С, не видит файлы и каталоги, расположенные на сетевых ресурсах. При этом локальные файлы на самом сервере читаются без ошибок. Разберем по шагам, почему возникает эта проблема, как работает штатный метод платформы НайтиФайлы() на стороне сервера и как правильно настроить права службы 1С в операционной системе Windows.
Проанализируем основные причины, из-за которых серверный контекст или COM-объекты вроде Scripting.FileSystemObject не могут получить доступ к сетевым папкам:
ragent / «Агент сервера 1С:Предприятия») для запуска под локальным системным пользователем (например, USR1CV8). Локальный пользователь одного сервера не имеет никаких прав на доступ к общим ресурсам других компьютеров в локальной сети.Z:\ или Y:\), подключенным в сессиях конкретных интерактивных пользователей.Нередко возникает заблуждение, что метод НайтиФайлы() работает исключительно на клиенте. Однако платформа 1С:Предприятие полностью поддерживает вызов этого метода на сервере, в том числе в модулях регламентных заданий.
Синтаксис метода:
НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)
Метод доступен в следующих контекстах: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент) и мобильное приложение (сервер).
Посмотрим на пример кода, предназначенного для поиска и обработки файлов на сетевом ресурсе из регламентного задания. Обратите внимание, что путь к каталогу обязательно должен быть указан в формате UNC (сетевой путь вида \\Сервер\Ресурс\), а не в виде подключенного сетевого диска:
// Пример поиска файлов на сетевом ресурсе
СетевойКаталог = "\\FileServer\Exchange\Incoming\";
МаскаПоиска = "*.xml";
МассивФайлов = НайтиФайлы(СетевойКаталог, МаскаПоиска, Ложь);
Для Каждого НайденныйФайл Из МассивФайлов Цикл
Если НайденныйФайл.ЭтоФайл() Тогда
// Чтение и обработка содержимого файла
ИмяФайла = НайденныйФайл.ПолноеИмя;
РазмерФайла = НайденныйФайл.Размер();
// Логика обработки...
КонецЕсли;
КонецЦикла;
Рассмотрим варианты корректной настройки прав операционной системы для предоставления службе 1С доступа к общим сетевым папкам.
Если сервер 1С и файловое хранилище находятся в домене Active Directory, наилучшей практикой является использование специального доменного сервисного пользователя (например, DOMAIN\svc_1c):
srvinfo).services.msc) открываем свойства службы «Агент сервера 1С:Предприятия», переходим на вкладку «Вход в систему» и указываем учетную запись DOMAIN\svc_1c с паролем, после чего перезапускаем службу.В некоторых случаях службу сервера 1С запускают под встроенной системной учетной записью (LocalSystem / Система). В доменной среде при таком запуске обращение к удаленным ресурсам сети происходит от имени учетной записи самого компьютера (например, DOMAIN\SERVER1C$).
services.msc в свойствах службы 1С выбираем «Вход в систему» с учетной записью «С системной учетной записью» (Local System account).Если домен отсутствует, и серверы работают в рабочей группе, доступ настраивается путем создания одинаковых локальных пользователей:
1c_user).Если регламентное задание выполняется в безопасном режиме или в кластере серверов 1С активированы профили безопасности, платформа может блокировать прямой доступ к файловой системе и сети. В этом случае в свойствах профиля безопасности информационной базы в консоли администрирования кластера необходимо явно добавить разрешение на доступ к требуемому каталогу файловой системы по маске пути.
Если настроить прямой доступ к общей папке через SMB/RPC по соображениям сетевой безопасности невозможно, рассмотрим альтернативные механизмы взаимодействия:
FTPСоединение, что полностью избавляет от зависимости от прав служб Windows.HTTPСоединение по протоколу HTTP/HTTPS.