При настройке автоматического обмена данными между конфигурациями 1С часто возникает ситуация, когда при ручном запуске (по кнопке) выгрузка проходит успешно, но при выполнении через регламентное задание система выдает ошибку. Одной из наиболее распространенных причин является невозможность прочитать файл с правилами конвертации методом ЗагрузитьПравилаОбмена. Разберем подробно, почему так происходит, и как правильно настроить окружение сервера для стабильной работы обмена.
Рассмотрим ситуацию: программист использует стандартную обработку УниверсальныйОбменДаннымиXML. В коде прописан путь к файлу правил, и при интерактивном запуске проверка Файл.Существует() возвращает «Истина». Однако при запуске того же кода в составе регламентного задания на сервере, файл внезапно «исчезает».
Проанализируем типовой фрагмент кода, где происходит сбой:
Источник = "\\192.168.1.16\Repository\Rules\RulesBUH.xml"; // Пример UNC-пути
Файл = Новый Файл(Источник);
Если Не Файл.Существует() Тогда
// В серверном контексте управление заходит сюда
ЗаписатьВПротоколВыполнения("Файл правил не найден по адресу: " + Источник);
Возврат;
КонецЕсли;
Основная причина такого поведения кроется в различии окружений, в которых исполняется код. Когда вы нажимаете кнопку, код выполняется от имени вашего пользователя Windows. Когда работает регламентное задание, оно выполняется службой 1С:Предприятие (обычно это учетная запись usr1cv8).
Первое, на что стоит обратить внимание — это формат пути к файлу. Рассмотрим распространенную ошибку: обращение к файлу через логический диск, например, Z:\Exchange\Rules.xml.
Выясним причину, почему это не работает на сервере. Диск Z: — это сетевой ресурс, подключенный в сессии конкретного пользователя Windows. Сервер 1С работает в так называемой «Сессии 0». В этой изолированной среде никакие сетевые диски пользователей не видны.
Правильный подход: всегда используйте полные сетевые пути в формате UNC.
Вместо Z:\Rules.xml необходимо указывать \\ServerName\ShareName\Rules.xml. Это позволяет службе сервера обращаться к ресурсу напрямую, минуя сопоставление букв дисков.
Даже если путь указан верно, служба может получить отказ в доступе от операционной системы. Разберем по шагам, как проверить и настроить права:
usr1cv8 или .\USR1CV8.SERVER\usr1cv8).Важный нюанс: Если файл правил находится на другом сервере, учетная запись USR1CV8 (которая является локальной) не сможет «выйти» в сеть. В этом случае службу 1С необходимо запускать от имени специально созданной доменной учетной записи, которой даны права на сетевой ресурс.
Проанализируем ситуацию, когда обмен идет «непосредственно в базу» (COM-соединение). В этом случае возникает проблема «второго перехода». Если сервер 1С обращается к сетевой папке на третьем сервере, передача учетных данных может быть заблокирована политиками безопасности Windows (Kerberos). В таких сценариях лучше хранить файл правил локально на диске сервера 1С или использовать загрузку из макета.
Если вы хотите полностью исключить зависимость от прав доступа Windows и настроек сети, рассмотрим вариант хранения правил внутри самой базы 1С. Это наиболее надежный метод для регламентных заданий.
Посмотрим на алгоритм реализации:
Пример кода для загрузки из макета:
ИмяФайлаПравил = ПолучитьИмяВременногоФайла("xml");
МакетПравил = ЭтотОбъект.ПолучитьМакет("ПравилаОбмена");
МакетПравил.Записать(ИмяФайлаПравил);
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравилОбмена = ИмяФайлаПравил;
ОбработкаОбмена.ЗагрузитьПравилаОбмена();
// После выполнения обмена не забудьте удалить временный файл
УдалитьФайлы(ИмяФайлаПравил);
Хотя этот метод требует обновления конфигурации при каждом изменении правил, он гарантирует, что регламентное задание не завершится ошибкой из-за сетевых проблем или смены пароля администратора.
Если проблема сохраняется, проанализируем ситуацию с помощью журнала регистрации. Добавьте в код запись имени текущего пользователя ОС, под которым работает поток:
ИмяПользователяОС = ИмяПользователя();
ЗаписьЖурналаРегистрации("Обмен.ПроверкаПрав", УровеньЖурналаРегистрации.Информация, , ,
"Запуск от имени: " + ИмяПользователяОС);
Это позволит вам точно убедиться, какому именно пользователю нужно давать права на папку с правилами в сетевом окружении. Также убедитесь, что в настройках обработки УниверсальныйОбменДаннымиXML отключен «Режим отладки обработчиков», так как на сервере он может пытаться записывать временные файлы в защищенные системные директории.