Как сохранить файл Excel в запароленную папку на сетевом диске из 1С?

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

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

Понимание проблемы доступа

Прежде чем переходить к коду, важно проанализировать, где именно исполняется ваш код. Если вы работаете в файловой базе, вы исполняете код под своим текущим пользователем Windows, который уже имеет доступ к сетевым дискам. Однако, при использовании клиент-серверного варианта 1С, регламентные задания или процедуры &НаСервере выполняются от имени технической учетной записи, под которой запущен сервер 1С (обычно это USR1CV8). У этой записи по умолчанию нет интерактивного рабочего стола и доступа к подключенным в вашей сессии сетевым дискам.

Решение 1: Подключение сетевого диска через командную строку (для простых случаев)

Если вам необходимо быстро организовать доступ, можно воспользоваться командой 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. Команда должна содержать корректные пробелы между аргументами.
  2. Буква диска может быть любой свободной в системе.
  3. Данное решение является временным «костылем», так как при перезагрузке сервера диск может отключаться, а сессия службы не всегда сохраняет состояние подключений.

Решение 2: Профессиональный подход через UNC-пути (рекомендуемый)

Самым надежным способом работы с сетью в 1С является использование UNC-путей. Вместо того чтобы привязывать букву диска (Z:), мы обращаемся к ресурсу напрямую по сетевому имени.

Вместо Z:\folder\file.xlsx используйте формат \\server\share\folder\file.xlsx. Это исключает необходимость «подключения» диска.

Чтобы это работало в клиент-серверном варианте, необходимо выполнить следующие шаги:

  1. Настройка учетной записи службы: Зайдите в оснастку «Службы» Windows (services.msc), найдите «Агент сервера 1С:Предприятия». В свойствах на вкладке «Вход в систему» измените пользователя с USR1CV8 на доменную учетную запись, которая имеет права доступа к целевой сетевой папке.
  2. Права доступа: На целевом компьютере или сервере, где находится папка, добавьте эту доменную учетную запись в список разрешенных пользователей с правами на «Чтение» и «Запись».
  3. Проверка: После смены пользователя службы обязательно перезапустите службу 1С. Теперь сервер 1С будет «видеть» сетевые папки как свои собственные локальные ресурсы.

Особенности работы с Excel через COM

Часто программисты пытаются использовать Excel.Application для сложного форматирования. Помните: Microsoft не рекомендует использовать Office на сервере. Если при выполнении ТабДок.Записать возникают ошибки доступа, это может быть связано с отсутствием временных папок профиля у пользователя USR1CV8.

Для исправления можно вручную создать папки Desktop в системных директориях сервера (например, C:\Windows\System32\config\systemprofile\Desktop и аналогичную в SysWOW64) и выдать на них полные права учетной записи службы сервера 1С. Это часто решает проблему зависания или ошибки «Доступ запрещен» при попытке записи файла через COMObject.

Мы настоятельно рекомендуем в будущем переходить на сохранение табличных документов средствами самой платформы 1С без использования COM-соединения, чтобы повысить стабильность работы вашего сервера.

← На главную