Как настроить автоматическое удаление регистрации изменений при обмене данными между ЗУП 3.1 и УПП 1.3

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При организации обмена данными между конфигурациями 1С:Зарплата и управление персоналом 3.1 и 1С:Управление производственным предприятием 1.3 специалисты часто сталкиваются с проблемой: после успешной выгрузки данных из УПП регистрация изменений на узле плана обмена не сбрасывается. Это приводит к тому, что при следующей итерации обмена программа снова пытается выгрузить те же самые объекты, неоправданно увеличивая объем XML-файла и время обработки данных.

Причина такого поведения кроется в различиях архитектуры. ЗУП 3.1 построена на базе Библиотеки стандартных подсистем (БСП) и использует универсальную обработку КонвертацияОбъектовИнформационныхБаз для загрузки. Эта обработка ожидает увидеть в заголовке XML-файла специфический атрибут УдалитьРегистрациюИзменений="true". Если его нет, регистрация на стороне отправителя не будет подтверждена. Проанализируем, как решить эту задачу различными способами: от штатных настроек до внесения изменений в программный код.

Способ 1. Программная модификация обработки выгрузки в УПП 1.3

Этот метод является наиболее надежным, если штатные средства по какой-то причине не срабатывают или если обмен настроен по нетиповой схеме. Нам необходимо внести изменения в модуль объекта обработки ОбменДаннымиXML, которая отвечает за формирование структуры файла выгрузки.

Рассмотрим пошагово процесс внесения изменений:

  1. Откройте конфигуратор УПП 1.3.
  2. Найдите обработку ОбменДаннымиXML.
  3. Перейдите в Модуль объекта и найдите процедуру ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена().
  4. В этой процедуре выполняется установка атрибутов корневого узла XML-файла. Нам нужно принудительно добавить установку атрибута УдалитьРегистрациюИзменений.

Пример кода, который необходимо добавить:


Процедура ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена()
    // ... существующий код ...
    
    // Устанавливаем номер входящего сообщения для подтверждения получения
    УстановитьАтрибут(Приемник, "НомерВходящегоСообщения", УзелДляОбмена.НомерПринятого);
    
    // Добавляем принудительную установку атрибута для ЗУП 3.1
    // Это позволит приемнику на базе БСП корректно обработать очистку регистрации
    УстановитьАтрибут(Приемник, "УдалитьРегистрациюИзменений", Истина);
    
    // ... продолжение существующего кода ...
КонецПроцедуры

Данная правка гарантирует, что в заголовке файла всегда будет присутствовать нужный флаг. Это особенно важно при переходе с ЗУП 2.5 на ЗУП 3.1, так как в старой версии регистрация изменений зачастую снималась безусловно, а в новой версии логика стала более строгой и требует явного указания в файле.

Способ 2. Использование механизма квитирования (подтверждения)

Разберем ситуацию, когда мы не хотим вносить изменения в код. Атрибут УдалитьРегистрациюИзменений напрямую связан с так называемым "квитированием". В типовых обменах 1С регистрация на стороне отправителя должна удаляться только после того, как от приемника придет подтверждение — номер последнего успешно принятого сообщения.

Проанализируем необходимые действия:

  1. Убедитесь, что обмен настроен как двусторонний. Даже если данные передаются только в одну сторону (из УПП в ЗУП), из ЗУП должен возвращаться небольшой файл-ответ с номером принятого сообщения.
  2. Проверьте состояние узла плана обмена. Значение НомерПринятого в узле на стороне УПП должно быть больше нуля и соответствовать номеру сообщения, которое реально загрузилось в ЗУП.
  3. Если в настройках обмена указано, что это "односторонний обмен" без обратной связи, система может автоматически не выставлять флаг удаления, чтобы защитить пользователя от потери данных в случае сбоя при загрузке.

Способ 3. Настройка в обработке Универсальный обмен данными XML

Если вы запускаете обмен вручную, используя встроенную обработку, обратите внимание на настройки интерфейса. На вкладке "Выгрузка данных" в блоке дополнительных параметров часто присутствует флажок "Удалять регистрацию изменений для узла обмена после выгрузки".

Важно понимать последствия: если этот флаг установлен, программа добавит атрибут в файл, но очистит регистрацию в базе УПП сразу после генерации XML-файла. Это довольно рискованно: если файл повредится при пересылке или база-приемник выдаст ошибку при загрузке, данные в базе-источнике уже будут помечены как "переданные" и в следующий раз автоматически не выгрузятся. Вам придется перерегистрировать объекты вручную.

Способ 4. Редактирование правил в Конвертации данных 2.1

Если вы используете собственные правила обмена, созданные в конфигурации "Конвертация данных 2.1", логику управления регистрацией можно прописать непосредственно в правилах.

Посмотрим, на что стоит обратить внимание в КД 2.1:

  1. В настройках самого Плана обмена в конфигурации "Конвертация данных" проверьте свойство "Использовать номер сообщения как отметку о регистрации".
  2. Вы можете использовать обработчик событий "Перед выгрузкой данных". В этом обработчике доступен параметр ОтказДляУдаленияРегистрации. Установив его в значение Ложь, вы разрешите системе генерировать атрибут удаления регистрации.

Почему атрибут может игнорироваться приемником (ЗУП 3.1)?

Иногда возникают ситуации, когда атрибут в файле присутствует (УдалитьРегистрациюИзменений="true"), но регистрация в УПП всё равно не сбрасывается. Выясним возможные причины:

Во-первых, проверьте значение НомерСообщения в заголовке файла. Если выгрузка идет с номером "0" (например, при создании начального образа или при сброшенной нумерации), обработка загрузки в ЗУП может проигнорировать команду удаления регистрации, считая это состояние обмена некорректным.

Во-вторых, в ЗУП 3.1 логика загрузки зашита в модуле ОбменДаннымиСервер. Она анализирует не только флаг, но и синхронность номеров сообщений в базе и в файле. Если номера "разошлись", автоматического квитирования не произойдет.

Резюме

Для стабильного решения проблемы рекомендуем следующий алгоритм действий:

← На главную