Почему НайтиФайлы возвращает пустой массив при работе с сетевой папкой и как это исправить

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

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

Анализ исходной ситуации

Типичный сценарий проблемы выглядит так: программный код на стороне сервера выполняет стандартную команду для поиска файлов по маске:


ИмяКаталога = "\\ServerName\ShareFolder\";
ФайлыКаталога = НайтиФайлы(ИмяКаталога, "*.dcm");

Внезапно переменная ФайлыКаталога становится пустым массивом. Проверка через проводник или запуск текстового редактора от имени пользователя, под которым работает служба 1С, показывает, что доступ есть. Однако программный доступ через rphost (рабочий процесс 1С) блокируется или выдает некорректный результат. Разберем пошагово, где искать причину.

Шаг 1: Проверка контекста выполнения и прав доступа

Первым делом проанализируем, где именно выполняется код. Если вы используете директиву &НаСервере, то поиск файлов осуществляет не ваш текущий пользователь Windows, а учетная запись, под которой запущена служба 1C:Enterprise 8.3 Server Agent.

Часто это локальная системная запись (LocalSystem), которая по умолчанию не имеет прав доступа к сетевым ресурсам. Если доступ внезапно пропал, проверим следующее:

  1. Убедимся, что служба 1С работает под доменной учетной записью, которой разрешено чтение/запись в целевую папку.
  2. Проверим, не изменился ли пароль этой учетной записи или не была ли она заблокирована в Active Directory.
  3. Попробуем обратиться к файлу напрямую через объект Новый Файл(ПолныйПуть) и проверить метод Существует().

Шаг 2: Устранение проблем с сетевым именованием (DNS vs IP)

Иногда проблема кроется в механизмах разрешения имен Windows. Если сервер 1С не может корректно сопоставить имя \\arm2c с IP-адресом в контексте службы, НайтиФайлы вернет пустой результат. Проанализируем возможность использования абсолютного пути.

Попробуем заменить имя компьютера на его статический IP-адрес:


// Вместо этого:
ИмяКаталога = "\\arm2c\Exchange\";
// Используем это:
ИмяКаталога = "\\192.168.6.137\Exchange\";

Это исключит влияние сбоев DNS-сервера или службы Master Browser в локальной сети на работу вашего кода.

Шаг 3: Настройка кэширования метаданных SMB

Одной из наиболее коварных причин является агрессивное кэширование сетевых папок в протоколе SMB 2.0 и выше. Windows "запоминает" состояние папки и, если в какой-то момент она была пуста или недоступна, клиентская ОС может отдавать закэшированный пустой список, даже если файлы уже появились.

Выясним, как это отключить. На сервере, где установлен 1С (клиент SMB), необходимо внести изменения в реестр в ветку HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters. Рассмотрим ключевые параметры:

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

Шаг 4: Лимиты сетевых подключений и сессий

Если удаленный компьютер, на котором расшарена папка, не является серверной ОС (например, это Windows 10 или 11), он имеет жесткое ограничение на количество одновременных подключений (обычно не более 20). Каждый рабочий процесс rphost может инициировать свои сессии.

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

  1. Перенести общую папку на серверную ОС (Windows Server).
  2. Использовать специализированные хранилища (NAS).
  3. Настроить регламентное задание на очистку зависших сессий на стороне файлового сервера.

Шаг 5: Проблема "Двойного прыжка" (Double Hop) и Kerberos

Если 1С работает в доменной среде, доступ к сетевому ресурсу часто завязан на аутентификацию Kerberos. Если между сервером 1С и файловым сервером происходит рассинхронизация времени (даже на несколько минут), Kerberos перестает работать и система откатывается к NTLM. NTLM часто не позволяет передавать учетные данные далее первого узла (проблема делегирования).

В этом случае НайтиФайлы не увидит содержимое папки, так как попытка доступа будет выполнена "анонимно" с точки зрения удаленного сервера. Проверим синхронизацию времени на всех участниках обмена и убедимся, что служба 1С имеет корректно настроенный SPN (Service Principal Name).

Шаг 6: Влияние антивирусного ПО

Не забудем проверить настройки безопасности. Антивирусы часто отслеживают активность процессов, которые массово сканируют сетевые директории. Поскольку rphost.exe выполняет поиск файлов программно и часто, это может быть интерпретировано как подозрительная активность (поиск целей для шифрования). Добавьте процессы 1С (ragent.exe, rmngr.exe, rphost.exe) и целевые сетевые пути в исключения антивирусного сканера на сервере 1С.

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

Подведем итог. Если вы столкнулись с тем, что НайтиФайлы выдает пустой массив, действуйте по следующему алгоритму:

  1. Проверьте, под какой учетной записью запущена служба 1C:Enterprise.
  2. Попробуйте использовать IP-адрес вместо имени сервера в пути к папке.
  3. Выполните перезапуск службы сервера 1С — если это помогло, значит проблема в кэшировании или лимите сессий.
  4. Настройте параметры реестра DirectoryCacheLifetime и сопутствующие на сервере 1С.
  5. Проверьте синхронизацию времени в домене.

Применение этих шагов позволит стабилизировать работу с сетевыми файлами и избежать внезапных "исчезновений" данных из поля зрения программы.

← На главную