При написании кода, который должен работать с файловой системой, часто возникает ситуация, когда при локальном запуске всё работает корректно, а при выполнении на сервере 1С возвращается ошибка доступа или функция Существует() возвращает Ложь. Давайте разберемся, почему это происходит и как исправить эту проблему раз и навсегда.
Первое, что необходимо усвоить: когда ваш код выполняется на стороне сервера, он не использует права пользователя, под которым вы залогинены в Windows или под которым открыт конфигуратор. Все серверные операции выполняет системная служба 1С:Предприятие.
По умолчанию эта служба работает от имени специальной технической учетной записи — USR1CV8. Именно эта учетная запись пытается «достучаться» до сетевого ресурса по пути вида \\Server\test. Если у пользователя USR1CV8 нет прав на чтение и запись в этой папке, операционная система заблокирует доступ, даже если вы, как администратор, видите эту папку в проводнике.
Разберем по шагам, что нужно сделать для предоставления доступа:
USR1CV8 (или та учетная запись, от которой запущена служба сервера 1С) добавлен в список с соответствующими правами (Чтение/Изменение).Иногда обычного добавления прав в свойствах папки недостаточно из-за настроек безопасности Windows. Рассмотрим подробнее возможные причины:
Если сервер 1С и целевой сервер находятся в домене, доступ может блокироваться локальными политиками безопасности. Проверьте параметр Доступ к этому компьютеру из сети в локальных политиках безопасности (secpol.msc). Учетная запись USR1CV8 должна иметь право на сетевое соединение с этим сервером.
Чтобы убедиться, что причина именно в учетной записи, можно провести диагностику. Посмотрим на пример кода, который обычно используют для проверки доступа в 1С:
КаталогНаДиске = Новый Файл("\\Server\test");
Если КаталогНаДиске.Существует() Тогда
Сообщить("Успешно: доступ к каталогу получен");
Иначе
Сообщить("Ошибка: нет доступа или путь неверный");
КонецЕсли;
Если код выдает ошибку, попробуйте выполнить команду dir \\Server\test через командную строку, запущенную от имени USR1CV8. Если команда выдает «Отказано в доступе», значит, проблема точно в правах пользователя службы или сетевых политиках.
При настройке доступа будьте осторожны:
USR1CV8 в группу «Администраторы» на целевом сервере только ради доступа к одной папке. Это серьезная уязвимость.Подводя итог, можно сказать, что решение проблемы всегда сводится к связке: учетная запись службы + права NTFS на папку + права на общий доступ (Share). Проанализируйте, под каким именно пользователем работает ваша служба, и обеспечьте ему корректный допуск к ресурсу, и обмен данными заработает стабильно.