При настройке распределенных информационных баз (РИБ) в 1С:Предприятии специалисты часто сталкиваются со следующей проблемой: при ручном (интерактивном) запуске выгрузка и загрузка данных проходят успешно, но как только наступает время автоматического обмена по расписанию, регламентное задание завершается со статусом «Не производилась». При этом в консоли регламентных заданий может не быть явных сообщений об ошибках, что сильно затрудняет диагностику.
В этой статье мы подробно разберем, почему автоматический обмен в РИБ может молча завершаться неудачей, проанализируем основные причины — от ограничений операционной системы до нюансов программного кода — и пошагово решим эту проблему.
Когда вы запускаете обмен вручную, процесс выполняется в контексте вашего текущего пользователя операционной системы. Если у вас есть права на запись в сетевой каталог или локальную папку обмена, все проходит успешно. Однако автоматический обмен по расписанию выполняется на стороне сервера 1С:Предприятие в фоновом режиме. В этом случае все файловые операции выполняются от имени того пользователя ОС, под которым запущена служба сервера 1С.
Выясним, под каким пользователем работает сервер 1С в операционной системе Windows. Для этого выполним следующие шаги:
services.msc и нажмите Enter).1C:Enterprise 8.3 Server Agent).USR1CV8 (или USR1CV82 / USR1CV83 в зависимости от версии платформы), либо системная учетная запись Local System, либо конкретный доменный администратор.Разберем, как правильно настроить права на папку обмена:
USR1CV83). Если сервер работает под учетной записью SYSTEM, права нужно давать именно ей.Важное примечание: Если в вашей системе на папку обмена выданы полные права для группы «Все» (Everyone), но обмен все равно не идет, убедитесь, что это ограничение не наложено на уровне общего сетевого доступа (вкладка «Доступ» -> «Расширенная настройка общего доступа» -> «Разрешения»). Сервер 1С должен иметь беспрепятственный доступ к ресурсу на обоих уровнях прав.
Часто в настройках узлов обмена администраторы указывают пути к файлам вида Z:\Exchange\. Сетевой диск Z: монтируется в сессии конкретного пользователя Windows при входе в систему.
Поскольку служба сервера 1С запускается в изолированной системной сессии (сессия 0), она абсолютно ничего не знает о сетевых дисках, подключенных у пользователей. Для службы сервера диска Z:\ просто не существует, поэтому регламентное задание сразу завершается со статусом «Не производилась».
Чтобы решить эту проблему, всегда используйте полные сетевые пути в формате UNC:
\\ИмяКомпьютера\ИмяСетевойПапки\
При этом на удаленном сервере, где физически расположена папка, также необходимо дать полные права на сетевой доступ и безопасность для учетной записи, от которой работает служба 1С (если базы находятся в одном домене Active Directory, это должна быть доменная учетная запись службы).
Если ваш сервер 1С:Предприятие развернут на ОС Linux (например, под управлением эмулятора Wine для некоторых старых конфигураций), возникает проблема трансляции путей. Клиентская часть 1С, запущенная на компьютере администратора под Windows, видит одни пути (например, смонтированные диски Wine), а серверная часть Linux пытается обращаться к путям напрямую.
Проанализируем ситуацию через Журнал регистрации 1С:
/exchange/ и папка /Exchange/ — это два совершенно разных каталога. Настройте пути единообразно.В некоторых типовых конфигурациях 1С (особенно на обычных формах, таких как Управление торговлей 10.3, УПП 1.3 или Розница 1.0) присутствует программная недоработка, связанная с разграничением прав при фоновом выполнении обмена.
Когда регламентное задание запускается автоматически на сервере, процедура выполняется с параметром РучнойЗапускОбменов = Ложь. В общем модуле ПроцедурыОбменаДаннымиПолныеПрава или аналогичном вызывается метод:
Процедура ВыполнитьОбменДаннымиПоНастройкеАвтоматическогоОбменаПодПолнымиПравамиНаСервере(
НастройкаОбменаДанными,
РучнойЗапускОбменов = Истина,
ОбработкаАвтообменаНаКлиенте = Неопределено,
Знач СоответствиеТекстовЭлектронныхПисем = Неопределено,
Знач ОбменПриВходеВПрограмму = Ложь
) Экспорт
Если параметр РучнойЗапускОбменов принимает значение Ложь, алгоритмы конфигурации могут блокировать некоторые действия (например, загрузку писем из почтового ящика, если обмен настроен через e-mail), считая их небезопасными для фонового выполнения без участия пользователя, либо из-за некорректных проверок на «интерактивность» процесса.
Разберем, как исправить эту ошибку программно в конфигураторе:
АвтоОбменДанными или общий модуль, отвечающий за выполнение регламентных обменов.
ПроцедурыОбменаДанными.ВыполнитьОбменПоНастройкеАвтоматическогоОбмена(
НастройкаДляОбмена,
Ложь,
ЭтотОбъект,
,
ОбменПриПервомВходеВПрограмму
);
ПроцедурыОбменаДанными.ВыполнитьОбменПоНастройкеАвтоматическогоВыполненияОбменаДанными(
НастройкаДляОбмена,
Ложь,
ЭтотОбъект,
,
ОбменПриПервомВходеВПрограмму
);
Такой подход позволит обойти ограничения прав и успешно инициировать как выгрузку, так и загрузку пакетов данных в фоновом режиме регламентного задания.
В процессе подготовки пакета обмена 1С сначала формирует временные файлы в системной директории Temp операционной системы, архивирует их и только потом перемещает готовый файл в конечный каталог обмена.
Если служба сервера 1С запущена под ограниченным пользователем ОС, у которого нет полных прав на запись и чтение в папках:
C:\Windows\Temp\C:\Users\ИмяПользователяСлужбы\AppData\Local\Temp\то фоновое задание прервется еще на этапе подготовки данных. Рекомендуется проверить права на данные папки и предоставить пользователю службы сервера 1С полный доступ к ним.
Проверим еще один очевидный, но важный параметр административной панели сервера 1С:
Настроив права доступа операционной системы к каталогам обмена, скорректировав пути к файлам на UNC-формат и, при необходимости, пропатчив вызов процедур обмена в коде конфигурации, вы обеспечите стабильную и полностью автоматическую работу обменов РИБ по расписанию без необходимости постоянного ручного вмешательства.