Зачастую при разработке в 1С мы сталкиваемся с ситуацией, когда код прекрасно отрабатывает на компьютере разработчика, но у заказчика или на рабочем сервере отказывается функционировать. Разберем типичную проблему: код поиска файлов в сетевой директории не находит ни одного документа. Проанализируем ситуацию на следующем примере:
МассивНайденныхФайлов = НайтиФайлы("\\192.168.21.23\sf$\","*.xls",Ложь);
На первый взгляд, все написано корректно. Однако, заказчик, подключающийся через браузер или RDP, не видит файлов. Давайте вместе выясним причину и по шагам рассмотрим, почему функция НайтиФайлы может возвращать пустой массив, а также как грамотно решить эту задачу.
Первое, что мы должны проанализируем — где именно выполняется данный код. Если поиск файлов вызывается на стороне сервера (например, в серверном модуле или регламентном задании), 1С обращается к сетевому ресурсу не от имени текущего пользователя, который сидит за компьютером, а от имени системной учетной записи, под которой запущена служба сервера 1С. Чаще всего это локальный пользователь USR1CV8.
Решение: Учетная запись USR1CV8 по умолчанию не имеет прав на доступ к внешним сетевым ресурсам и другим компьютерам в сети. Чтобы решить эту проблему, системному администратору необходимо перенастроить службу "Агент сервера 1С:Предприятие" на работу под доменной учетной записью, которой явно разрешен доступ к папке \\192.168.21.23\sf$.
Если пользователь заходит в 1С через браузер, мы сталкиваемся с жесткими ограничениями безопасности. По умолчанию веб-браузеры блокируют любой прямой доступ к локальной или сетевой файловой системе компьютера.
Решение:
НайтиФайлы рассмотрите использование асинхронных аналогов, например НачатьПоискФайлов.Посмотрим на указанный в коде путь: \\192.168.21.23\sf$. Наличие символа доллара $ в конце имени сетевой папки означает, что это скрытый административный ресурс (Hidden Share).
К таким папкам операционная система Windows по умолчанию пускает только пользователей с правами администратора на целевом узле (в данном случае на машине 192.168.21.23). Даже если у обычного пользователя или службы сервера есть доступ к обычной шаре на этом IP, к скрытой шаре доступ будет отклонен из-за политик безопасности.
Решение: Следует запросить у системного администратора предоставление явных прав для учетной записи, под которой выполняется код 1С, либо использовать обычную (не скрытую) общую папку для обмена файлами.
Если заказчик работает через RDP-подключение, возникает классическая проблема "второго прыжка". Когда пользователь авторизуется на терминальном сервере, его учетные данные могут не передаваться (не пробрасываться) дальше по сети к файловому хранилищу. Целевой сервер с файлами видит этот запрос как "анонимный" и блокирует доступ.
Важно понимать разницу между интерактивной сессией пользователя и фоновой работой сервера. Если в RDP-сессии у пользователя подключен сетевой диск (например, Z:, ссылающийся на указанный IP), серверная часть 1С его не увидит никогда. Сервер работает вне пользовательской сессии. Поэтому использование полных UNC-путей (как \\192.168.21.23\...) — это абсолютно правильный подход, но он требует правильной настройки прав доступа (NTLS / Share permissions).
Давайте по шагам разберем, как локализовать ошибку непосредственно у заказчика:
НайтиФайлы.ИмяКомпьютера(). Так вы точно поймете, на каком физическом или виртуальном сервере в данный момент выполняется код.\\192.168.21.23\sf$ через обычный Проводник Windows.Таким образом, мы видим, что функция НайтиФайлы работает предельно корректно, а корень проблемы всегда лежит в архитектуре сети, правах пользователя USR1CV8 или ограничениях клиентского приложения (браузера).