Почему после перевода 1С:ЗУП на SQL перестала работать выгрузка файлов по сетевым путям?

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

Перевод базы данных 1С:Зарплата и Управление Персоналом (ЗУП) с файлового режима на клиент-серверный (под управлением Microsoft SQL Server или PostgreSQL) — это стандартный шаг при росте компании и увеличении объема данных. Однако сразу после миграции администраторы часто сталкиваются со странным поведением системы: привычные механизмы обмена данными, которые годами выгружали файлы в сетевые папки, внезапно перестают работать. При этом система выдает неспецифическую ошибку доступа или сообщает об ошибке в имени файла.

Давайте проанализируем ситуацию, выясним глубинную причину этой проблемы и подробно рассмотрим все возможные способы её решения.

В чем суть проблемы: разница контекстов выполнения

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

В файловом режиме абсолютно все операции выполняются в контексте клиента — непосредственно на компьютере пользователя в рамках процесса 1cv8.exe. Когда пользователь запускает выгрузку данных, программа обращается к операционной системе от имени текущей учетной записи Windows (например, Иван-Администратор или Юзер1). Если у этого пользователя есть права на сетевую папку (шару) вида \\ServerName\ShareFolder\, то файл успешно записывается.

В клиент-серверном режиме (SQL) архитектура кардинально меняется. Большинство регламентных заданий, фоновых процессов и серверных модулей обмена выполняются на стороне сервера приложений 1С в контексте процесса rphost.exe. Инициатором записи файла на диск в данном случае выступает не текущий пользователь за компьютером, а системная служба «Агент сервера 1С:Предприятия».

По умолчанию при установке платформы 1С эта служба настраивается на запуск от имени специально созданного локального пользователя — USR1CV8 (в зависимости от версии платформы имя может быть USR1CV82 или USR1CV83). Данный пользователь является локальным для сервера приложений 1С и не имеет никаких прав в доменной сети Active Directory. Когда сервер 1С пытается записать файл по сетевому UNC-пути, удаленный компьютер отклоняет запрос авторизации, так как локальный пользователь USR1CV8 ему неизвестен. Операционная система возвращает ошибку доступа, которую 1С транслирует пользователю как «Ошибка в имени файла» или «Синтаксическая ошибка в имени файла, имени папки или метке тома».

Давайте рассмотрим подробнее, как решить эту проблему с помощью различных административных и архитектурных подходов.

Решение 1: Запуск службы 1С от имени доменной учетной записи (Рекомендуемый способ)

Если в вашей корпоративной сети развернут домен Active Directory, самым правильным и безопасным решением будет запуск службы сервера 1С под специально созданным доменным пользователем, имеющим доступ к сетевой шаре.

Выполним настройку по шагам:

  1. Создание доменного пользователя: Откройте консоль «Active Directory — пользователи и компьютеры» на контроллере домена и создайте новую сервисную учетную запись. Назовем ее, например, domain_1c_service. Задайте для нее сложный пароль и установите флаг «Срок действия пароля не ограничен».
  2. Настройка прав на сетевую папку: Перейдите к серверу, на котором расположена целевая сетевая папка. В свойствах папки на вкладке «Доступ» (Sharing) и «Безопасность» (Security/NTFS) добавьте созданного доменного пользователя domain_1c_service и предоставьте ему права «Изменение» и «Запись».
  3. Изменение параметров службы 1С: На сервере приложений 1С откройте диспетчер служб (services.msc). Найдите службу «Агент сервера 1С:Предприятия 8.3», откройте ее свойства и перейдите на вкладку «Вход в систему».
  4. Переключите переключатель в положение «С учетной записью» и укажите имя созданного доменного пользователя в формате DOMAIN\domain_1c_service, а также введите его пароль.
  5. Назначение локальных прав на сервере 1С: Это критически важный шаг. Новый доменный пользователь должен обладать всеми необходимыми правами на самом сервере приложений. Убедитесь, что пользователю domain_1c_service предоставлены полные права на следующие локальные каталоги сервера 1С:
    • Каталог служебных файлов реестра кластера (по умолчанию это C:\Program Files\1cv8\srvinfo).
    • Каталог временных файлов операционной системы (папка TEMP).
    • Локальные ветки реестра Windows, связанные с 1С.
    В операционной системе Windows Server права на запуск служб и необходимые локальные привилегии («Вход в качестве службы») обычно назначаются автоматически при смене пользователя в оснастке services.msc.
  6. Перезапуск службы: Перезапустите службу Агента сервера 1С для применения настроек.

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

Решение 2: Настройка сквозной авторизации в одноранговой сети (без домена)

Если сервер 1С и файловое хранилище находятся в обычной рабочей группе (Workgroup) без контроллера домена Active Directory, использовать доменную запись не получится. В таком случае мы можем прибегнуть к механизму сквозной авторизации Windows (Pass-through authentication).

Рассмотрим этот алгоритм по шагам:

  1. Выясните точное имя локального пользователя, под которым запущена служба 1С на сервере приложений (по умолчанию это USR1CV8), и узнайте его пароль.
  2. Перейдите на компьютер или сервер, где расположена общая сетевая папка.
  3. Создайте на этом целевом компьютере локального пользователя с абсолютно таким же именем (USR1CV8) и установите для него точно такой же пароль, как и на сервере 1С.
  4. В свойствах сетевой папки (вкладки «Доступ» и «Безопасность») предоставьте созданному локальному пользователю права на чтение и запись.

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

Решение 3: Использование локального каталога и последующий перенос файлов скриптом

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

Давайте разберем эту схему:

  1. В настройках обмена данными 1С укажите локальный путь на сервере приложений 1С, например: C:\ExchangeOut\. Локальный пользователь USR1CV8 гарантированно имеет права на запись в эту папку.
  2. Создайте на сервере приложений скрипт PowerShell, который будет отслеживать появление новых файлов в этой папке и перемещать их в сетевую шару.

Посмотрим на пример такого PowerShell-скрипта:


$LocalFolder = "C:\ExchangeOut\"
$NetworkFolder = "\\RemoteServer\ShareFolder\"
$LogFile = "C:\ExchangeOut\transfer_log.txt"

# Проверяем наличие файлов в локальной папке
$Files = Get-ChildItem -Path $LocalFolder -Filter *.xml

foreach ($File in $Files) {
    try {
        $SourcePath = $File.FullName
        $DestinationPath = Join-Path $NetworkFolder $File.Name
        
        # Копируем файл на сетевой ресурс с перезаписью
        Copy-Item -Path $SourcePath -Destination $DestinationPath -Force
        
        # Удаляем локальный файл после успешного копирования
        Remove-Item -Path $SourcePath -Force
        
        # Фиксируем успешное перемещение в логе
        Get-Date | Out-File -FilePath $LogFile -Append
        "Успешно перемещен файл: $($File.Name)" | Out-File -FilePath $LogFile -Append
    }
    catch {
        # Записываем ошибку в лог-файл в случае сбоя доступа
        Get-Date | Out-File -FilePath $LogFile -Append
        "Ошибка перемещения файла $($File.Name): $_" | Out-File -FilePath $LogFile -Append
    }
}

Затем настройте стандартный Планировщик задач Windows (Task Scheduler) на сервере приложений 1С. Создайте задачу, которая будет запускать этот скрипт каждые 5-10 минут. В параметрах запуска задачи укажите учетную запись администратора или любого доменного пользователя, у которого есть права как на чтение локальной папки C:\ExchangeOut\, так и на запись в сетевой каталог \\RemoteServer\ShareFolder\.

Решение 4: Переход на современные протоколы обмена (FTP / SFTP)

Использование классических сетевых папок Windows (протокол SMB) часто вызывает сложности с правами доступа и маршрутизацией в крупных сетях. Более прогрессивным и надежным архитектурным решением для клиент-серверных баз 1С является отказ от UNC-путей в пользу прикладных протоколов передачи данных, таких как FTP или SFTP.

Давайте проанализируем преимущества этого подхода:

Для реализации этого метода разверните FTP/SFTP-сервер на целевом компьютере (для Windows можно использовать стандартный компонент IIS или стороннее бесплатное решение вроде FileZilla Server). В 1С:ЗУП перейдите в настройки синхронизации данных, выберите транспорт «FTP-ресурс» вместо «Локальный или сетевой каталог» и укажите параметры подключения.

Решение 5: Особенности работы, если сервер 1С запущен под ОС Linux

Если в процессе миграции на SQL-версию сервер приложений 1С был перенесен на операционную систему Linux (например, Ubuntu, CentOS или Ред ОС), сетевые пути формата Windows \\server\share\file.xml не будут распознаваться системой на уровне платформы.

В Linux-среде необходимо предварительно смонтировать удаленную Windows-шару в локальную файловую систему сервера приложений. Разберем, как это сделать:

  1. Создайте локальную директорию на сервере Linux, например: /mnt/exchange.
  2. Выполните монтирование сетевой папки с помощью утилиты mount.cifs. Пример команды монтирования:
    
    sudo mount -t cifs -o username=DomainUser,password=UserPassword,uid=usr1cv8,gid=grp1cv8 //192.168.1.100/ShareFolder /mnt/exchange
    
    Обратите внимание, что параметры uid и gid должны указывать на системного пользователя usr1cv8 под которым запущен демон сервера 1С в Linux, чтобы он получил полные права на чтение и запись в смонтированную папку.
  3. В настройках обмена 1С пропишите путь в формате Linux: /mnt/exchange/file.xml.

Резюме

Возникновение ошибок доступа при выгрузке файлов после перевода 1С:ЗУП на клиент-серверный вариант работы — это штатная ситуация, обусловленная переходом выполнения кода в серверный контекст под управлением локального пользователя USR1CV8.

Для решения этой проблемы мы рекомендуем перевести службу сервера 1С на доменную учетную запись (Решение 1) как наиболее надежный и масштабируемый способ. Если доменная инфраструктура отсутствует или ограничена политиками безопасности, отличными альтернативами станут использование сквозной авторизации, организация обмена через FTP/SFTP или использование промежуточных скриптов автоматизации.

← На главную