В практике разработчика 1С нередко возникает ситуация: код, который вчера исправно собирал список файлов в сетевом каталоге, внезапно начинает возвращать пустой массив. При этом визуально папка доступна, файлы в ней есть, а пинг до сервера проходит без потерь. Рассмотрим детально, почему функция НайтиФайлы может вести себя подобным образом и как решить эту проблему, переходя от простых действий к глубокой настройке операционной системы.
Типичный сценарий проблемы выглядит так: программный код на стороне сервера выполняет стандартную команду для поиска файлов по маске:
ИмяКаталога = "\\ServerName\ShareFolder\";
ФайлыКаталога = НайтиФайлы(ИмяКаталога, "*.dcm");
Внезапно переменная ФайлыКаталога становится пустым массивом. Проверка через проводник или запуск текстового редактора от имени пользователя, под которым работает служба 1С, показывает, что доступ есть. Однако программный доступ через rphost (рабочий процесс 1С) блокируется или выдает некорректный результат. Разберем пошагово, где искать причину.
Первым делом проанализируем, где именно выполняется код. Если вы используете директиву &НаСервере, то поиск файлов осуществляет не ваш текущий пользователь Windows, а учетная запись, под которой запущена служба 1C:Enterprise 8.3 Server Agent.
Часто это локальная системная запись (LocalSystem), которая по умолчанию не имеет прав доступа к сетевым ресурсам. Если доступ внезапно пропал, проверим следующее:
Новый Файл(ПолныйПуть) и проверить метод Существует().Иногда проблема кроется в механизмах разрешения имен Windows. Если сервер 1С не может корректно сопоставить имя \\arm2c с IP-адресом в контексте службы, НайтиФайлы вернет пустой результат. Проанализируем возможность использования абсолютного пути.
Попробуем заменить имя компьютера на его статический IP-адрес:
// Вместо этого:
ИмяКаталога = "\\arm2c\Exchange\";
// Используем это:
ИмяКаталога = "\\192.168.6.137\Exchange\";
Это исключит влияние сбоев DNS-сервера или службы Master Browser в локальной сети на работу вашего кода.
Одной из наиболее коварных причин является агрессивное кэширование сетевых папок в протоколе SMB 2.0 и выше. Windows "запоминает" состояние папки и, если в какой-то момент она была пуста или недоступна, клиентская ОС может отдавать закэшированный пустой список, даже если файлы уже появились.
Выясним, как это отключить. На сервере, где установлен 1С (клиент SMB), необходимо внести изменения в реестр в ветку HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters. Рассмотрим ключевые параметры:
После внесения изменений в реестр потребуется перезагрузка сервера. Это заставит операционную систему каждый раз запрашивать актуальный список файлов у удаленного сервера, игнорируя локальный кэш.
Если удаленный компьютер, на котором расшарена папка, не является серверной ОС (например, это Windows 10 или 11), он имеет жесткое ограничение на количество одновременных подключений (обычно не более 20). Каждый рабочий процесс rphost может инициировать свои сессии.
Проанализируем ситуацию: когда лимит исчерпан, новые попытки подключения от 1С отклоняются. Перезапуск службы 1С (как упоминалось в обсуждении на форуме) принудительно разрывает все соединения, и доступ временно восстанавливается. Для решения этой проблемы рекомендуется:
Если 1С работает в доменной среде, доступ к сетевому ресурсу часто завязан на аутентификацию Kerberos. Если между сервером 1С и файловым сервером происходит рассинхронизация времени (даже на несколько минут), Kerberos перестает работать и система откатывается к NTLM. NTLM часто не позволяет передавать учетные данные далее первого узла (проблема делегирования).
В этом случае НайтиФайлы не увидит содержимое папки, так как попытка доступа будет выполнена "анонимно" с точки зрения удаленного сервера. Проверим синхронизацию времени на всех участниках обмена и убедимся, что служба 1С имеет корректно настроенный SPN (Service Principal Name).
Не забудем проверить настройки безопасности. Антивирусы часто отслеживают активность процессов, которые массово сканируют сетевые директории. Поскольку rphost.exe выполняет поиск файлов программно и часто, это может быть интерпретировано как подозрительная активность (поиск целей для шифрования). Добавьте процессы 1С (ragent.exe, rmngr.exe, rphost.exe) и целевые сетевые пути в исключения антивирусного сканера на сервере 1С.
Подведем итог. Если вы столкнулись с тем, что НайтиФайлы выдает пустой массив, действуйте по следующему алгоритму:
Применение этих шагов позволит стабилизировать работу с сетевыми файлами и избежать внезапных "исчезновений" данных из поля зрения программы.