В практике сопровождения систем на базе 1С:Управление производственным предприятием (УПП) и 1С:Зарплата и управление персоналом (ЗУП 2.5) часто встречается парадоксальная ситуация: при ручном запуске обмена данные успешно выгружаются, но регламентное задание формирует «пустой» файл. Под «пустым» файлом понимается XML-документ размером около 9 Кб, который содержит заголовок и техническую информацию о номерах сообщений, но не включает сами объекты (документы, справочники). При этом система рапортует об успешном завершении операции.
Рассмотрим детально причины такого поведения и разберем по шагам методы диагностики и устранения этой проблемы. Проанализируем ситуацию, исходя из того, что объекты в узле плана обмена зарегистрированы и видны в обработке Регистрация изменений для обмена.
Выясним главную причину различий: контекст выполнения кода. Ручной обмен запускается текущим пользователем (обычно с правами «Полные права»), а автоматический обмен выполняется фоновым заданием на стороне сервера 1С:Предприятие.
Если в базе настроены ограничения прав на уровне записей (RLS), система ведет себя следующим образом:
Что нужно сделать: Проанализируем настройки регламентного задания в консоли заданий. Убедимся, что для выполнения обмена назначен пользователь с достаточными правами. В идеале для тестов назначим пользователю роль Полные права и проверим, появится ли содержимое в файле.
В структуре XML-файла, приведенной в проблеме, мы видим специфическую строку:
<ДанныеПоФоновомуОбмену ПланОбмена="" Кому="0" ОтКого="0" ... КоличествоОбъектовДляФоновогоОбмена="500" />
Этот механизм в старых редакциях конфигураций (УПП 1.3) позволяет разбивать выгрузку на части. Разберем подробнее, как это может мешать:
Если в настройках узла плана обмена или в справочнике Настройки обмена данными включен режим «Использовать фоновую выгрузку», система может ожидать предварительной подготовки данных в специальных таблицах очереди. Если регламентное задание настроено на «прямую» выгрузку, а параметры узла требуют «фоновую», может возникнуть конфликт логики, при котором выборка объектов просто не инициируется.
Рекомендация: Проверим в настройках обмена (форма элемента справочника Настройки обмена данными), не установлены ли флаги, разделяющие выгрузку на этапы, и попробуем установить значение Количество объектов в транзакции в стандартное значение (например, 1000), отключив специфические режимы фоновой подготовки.
Важно понимать разницу между регистрацией изменений на узле и фильтрами в самой настройке обмена. Обработка Регистрация изменений показывает всё, что привязано к узлу ПланОбменаСсылка. Однако автоматический обмен запускается через конкретный элемент справочника Настройки обмена данными.
Разберем ситуацию по шагам:
Настройки обмена данными.Если дата документов, зарегистрированных к обмену, не попадает в период, указанный в настройке, файл будет пустым.
Иногда причиной становится «залипание» серверных вызовов или использование устаревшего кэша метаданных. Посмотрим на это с технической стороны: фоновое задание выполняется в контексте сервера, где могут быть недоступны некоторые экспортные процедуры, если они помечены префиксом &НаКлиенте или находятся в модулях с отключенным флагом «Сервер».
Порядок действий для диагностики:
snccntx в каталоге сервера).Универсальный обмен данными в формате XML) не используются функции, требующие интерактивного взаимодействия с пользователем (диалоги, вопросы), так как в фоновом режиме они вызывают исключение, которое может молча подавляться обработчиком обмена.Проанализируем атрибуты НомерИсходящегоСообщения и НомерВходящегоСообщения. Если номер исходящего сообщения растет (в примере — 11279), значит, система считает, что она что-то передала. Если при этом в файле только техническая часть, значит, выборка ВыбратьИзменения() вернула пустой результат.
Интересный нюанс: если в коде обмена используется параметр УдалитьРегистрациюИзменений = true, то при первой же неудачной попытке (из-за ошибки прав или фильтра) регистрация может быть очищена, хотя данные фактически не ушли. Но в нашем случае автор указывает, что ручной запуск после автоматического находит данные. Это подтверждает, что автоматический запуск вообще не видит эти данные, а не просто очищает их.
Чтобы поставить точку в вопросе, необходимо увидеть процесс глазами сервера. Рассмотрим, как это сделать:
-debug в строке запуска службы).ОбменДаннымиXML или специализированный модуль плана обмена, метод ВыполнитьВыгрузкуДанных).Отладка -> Подключение -> Автоматическое подключение -> Фоновые задания.ПланыОбмена.ВыбратьИзменения(Узел, НомерСообщения). Если выборка пуста именно здесь — проблема на 100% в правах доступа (RLS) или в параметрах самого узла.Резюме: В 90% случаев такая проблема в связке УПП-ЗУП решается проверкой прав пользователя, под которым работает серверный процесс, и проверкой дат/фильтров в справочнике Настройки обмена данными. Особое внимание уделите тому, чтобы пользователь фонового задания имел права на чтение всех объектов, участвующих в обмене, включая регистры сведений и константы настроек.