При автоматизации формирования отчетов или выгрузок в формате Excel часто возникает задача сохранения файла на сетевой ресурс. В процессе работы пользователи нередко сталкиваются с ошибкой доступа к файлу. Давайте разберем, почему это происходит и как правильно организовать сохранение файлов в различных архитектурах 1С.
Прежде чем переходить к коду, важно проанализировать, где именно исполняется ваш код. Если вы работаете в файловой базе, вы исполняете код под своим текущим пользователем Windows, который уже имеет доступ к сетевым дискам. Однако, при использовании клиент-серверного варианта 1С, регламентные задания или процедуры &НаСервере выполняются от имени технической учетной записи, под которой запущен сервер 1С (обычно это USR1CV8). У этой записи по умолчанию нет интерактивного рабочего стола и доступа к подключенным в вашей сессии сетевым дискам.
Если вам необходимо быстро организовать доступ, можно воспользоваться командой net use. Этот подход заключается в том, чтобы программно «подмонтировать» сетевой ресурс как локальный диск.
Рассмотрим пример реализации через WScript.Shell:
WshShell = Новый COMObject("WScript.Shell");
// Подключаем сетевой ресурс к букве Z
// Обязательно соблюдайте синтаксис: путь, затем пробел, затем параметры пользователя
Команда = "net use Z: \\server\folder /user:domain\login password";
WshShell.Run(Команда, 0, Истина);
// Теперь можно записывать файл на диск Z:
Попытка
ТабДок.Записать("Z:\Отчет.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Важные замечания к этому методу:
Самым надежным способом работы с сетью в 1С является использование UNC-путей. Вместо того чтобы привязывать букву диска (Z:), мы обращаемся к ресурсу напрямую по сетевому имени.
Вместо Z:\folder\file.xlsx используйте формат \\server\share\folder\file.xlsx. Это исключает необходимость «подключения» диска.
Чтобы это работало в клиент-серверном варианте, необходимо выполнить следующие шаги:
services.msc), найдите «Агент сервера 1С:Предприятия». В свойствах на вкладке «Вход в систему» измените пользователя с USR1CV8 на доменную учетную запись, которая имеет права доступа к целевой сетевой папке.Часто программисты пытаются использовать Excel.Application для сложного форматирования. Помните: Microsoft не рекомендует использовать Office на сервере. Если при выполнении ТабДок.Записать возникают ошибки доступа, это может быть связано с отсутствием временных папок профиля у пользователя USR1CV8.
Для исправления можно вручную создать папки Desktop в системных директориях сервера (например, C:\Windows\System32\config\systemprofile\Desktop и аналогичную в SysWOW64) и выдать на них полные права учетной записи службы сервера 1С. Это часто решает проблему зависания или ошибки «Доступ запрещен» при попытке записи файла через COMObject.
Мы настоятельно рекомендуем в будущем переходить на сохранение табличных документов средствами самой платформы 1С без использования COM-соединения, чтобы повысить стабильность работы вашего сервера.