Перевод базы данных 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С транслирует пользователю как «Ошибка в имени файла» или «Синтаксическая ошибка в имени файла, имени папки или метке тома».
Давайте рассмотрим подробнее, как решить эту проблему с помощью различных административных и архитектурных подходов.
Если в вашей корпоративной сети развернут домен Active Directory, самым правильным и безопасным решением будет запуск службы сервера 1С под специально созданным доменным пользователем, имеющим доступ к сетевой шаре.
Выполним настройку по шагам:
domain_1c_service. Задайте для нее сложный пароль и установите флаг «Срок действия пароля не ограничен».domain_1c_service и предоставьте ему права «Изменение» и «Запись».services.msc). Найдите службу «Агент сервера 1С:Предприятия 8.3», откройте ее свойства и перейдите на вкладку «Вход в систему».DOMAIN\domain_1c_service, а также введите его пароль.domain_1c_service предоставлены полные права на следующие локальные каталоги сервера 1С:
C:\Program Files\1cv8\srvinfo).TEMP).services.msc.
После выполнения этих шагов сервер 1С получит возможность авторизоваться в сети под доменной учетной записью и без проблем запишет файлы обмена по любому UNC-пути, к которому ему открыт доступ.
Если сервер 1С и файловое хранилище находятся в обычной рабочей группе (Workgroup) без контроллера домена Active Directory, использовать доменную запись не получится. В таком случае мы можем прибегнуть к механизму сквозной авторизации Windows (Pass-through authentication).
Рассмотрим этот алгоритм по шагам:
USR1CV8), и узнайте его пароль.USR1CV8) и установите для него точно такой же пароль, как и на сервере 1С.При попытке сервера 1С обратиться к сетевому ресурсу Windows передаст хэш пароля пользователя USR1CV8. Целевой компьютер обнаружит у себя локального пользователя с идентичным именем и паролем, успешно авторизует сессию и разрешит запись файла.
В некоторых крупных компаниях политики информационной безопасности категорически запрещают запускать системные службы 1С от имени доменных пользователей или открывать сетевые доступы для локальных учетных записей. В этой ситуации мы можем использовать обходной путь через локальный каталог сервера приложений и планировщик задач Windows.
Давайте разберем эту схему:
C:\ExchangeOut\. Локальный пользователь USR1CV8 гарантированно имеет права на запись в эту папку.Посмотрим на пример такого 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\.
Использование классических сетевых папок Windows (протокол SMB) часто вызывает сложности с правами доступа и маршрутизацией в крупных сетях. Более прогрессивным и надежным архитектурным решением для клиент-серверных баз 1С является отказ от UNC-путей в пользу прикладных протоколов передачи данных, таких как FTP или SFTP.
Давайте проанализируем преимущества этого подхода:
Для реализации этого метода разверните FTP/SFTP-сервер на целевом компьютере (для Windows можно использовать стандартный компонент IIS или стороннее бесплатное решение вроде FileZilla Server). В 1С:ЗУП перейдите в настройки синхронизации данных, выберите транспорт «FTP-ресурс» вместо «Локальный или сетевой каталог» и укажите параметры подключения.
Если в процессе миграции на SQL-версию сервер приложений 1С был перенесен на операционную систему Linux (например, Ubuntu, CentOS или Ред ОС), сетевые пути формата Windows \\server\share\file.xml не будут распознаваться системой на уровне платформы.
В Linux-среде необходимо предварительно смонтировать удаленную Windows-шару в локальную файловую систему сервера приложений. Разберем, как это сделать:
/mnt/exchange.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, чтобы он получил полные права на чтение и запись в смонтированную папку.
/mnt/exchange/file.xml.Возникновение ошибок доступа при выгрузке файлов после перевода 1С:ЗУП на клиент-серверный вариант работы — это штатная ситуация, обусловленная переходом выполнения кода в серверный контекст под управлением локального пользователя USR1CV8.
Для решения этой проблемы мы рекомендуем перевести службу сервера 1С на доменную учетную запись (Решение 1) как наиболее надежный и масштабируемый способ. Если доменная инфраструктура отсутствует или ограничена политиками безопасности, отличными альтернативами станут использование сквозной авторизации, организация обмена через FTP/SFTP или использование промежуточных скриптов автоматизации.