При организации обмена данными между конфигурациями 1С:Зарплата и управление персоналом 3.1 и 1С:Управление производственным предприятием 1.3 специалисты часто сталкиваются с проблемой: после успешной выгрузки данных из УПП регистрация изменений на узле плана обмена не сбрасывается. Это приводит к тому, что при следующей итерации обмена программа снова пытается выгрузить те же самые объекты, неоправданно увеличивая объем XML-файла и время обработки данных.
Причина такого поведения кроется в различиях архитектуры. ЗУП 3.1 построена на базе Библиотеки стандартных подсистем (БСП) и использует универсальную обработку КонвертацияОбъектовИнформационныхБаз для загрузки. Эта обработка ожидает увидеть в заголовке XML-файла специфический атрибут УдалитьРегистрациюИзменений="true". Если его нет, регистрация на стороне отправителя не будет подтверждена. Проанализируем, как решить эту задачу различными способами: от штатных настроек до внесения изменений в программный код.
Этот метод является наиболее надежным, если штатные средства по какой-то причине не срабатывают или если обмен настроен по нетиповой схеме. Нам необходимо внести изменения в модуль объекта обработки ОбменДаннымиXML, которая отвечает за формирование структуры файла выгрузки.
Рассмотрим пошагово процесс внесения изменений:
ОбменДаннымиXML.ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена().УдалитьРегистрациюИзменений.Пример кода, который необходимо добавить:
Процедура ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена()
// ... существующий код ...
// Устанавливаем номер входящего сообщения для подтверждения получения
УстановитьАтрибут(Приемник, "НомерВходящегоСообщения", УзелДляОбмена.НомерПринятого);
// Добавляем принудительную установку атрибута для ЗУП 3.1
// Это позволит приемнику на базе БСП корректно обработать очистку регистрации
УстановитьАтрибут(Приемник, "УдалитьРегистрациюИзменений", Истина);
// ... продолжение существующего кода ...
КонецПроцедуры
Данная правка гарантирует, что в заголовке файла всегда будет присутствовать нужный флаг. Это особенно важно при переходе с ЗУП 2.5 на ЗУП 3.1, так как в старой версии регистрация изменений зачастую снималась безусловно, а в новой версии логика стала более строгой и требует явного указания в файле.
Разберем ситуацию, когда мы не хотим вносить изменения в код. Атрибут УдалитьРегистрациюИзменений напрямую связан с так называемым "квитированием". В типовых обменах 1С регистрация на стороне отправителя должна удаляться только после того, как от приемника придет подтверждение — номер последнего успешно принятого сообщения.
Проанализируем необходимые действия:
НомерПринятого в узле на стороне УПП должно быть больше нуля и соответствовать номеру сообщения, которое реально загрузилось в ЗУП.Если вы запускаете обмен вручную, используя встроенную обработку, обратите внимание на настройки интерфейса. На вкладке "Выгрузка данных" в блоке дополнительных параметров часто присутствует флажок "Удалять регистрацию изменений для узла обмена после выгрузки".
Важно понимать последствия: если этот флаг установлен, программа добавит атрибут в файл, но очистит регистрацию в базе УПП сразу после генерации XML-файла. Это довольно рискованно: если файл повредится при пересылке или база-приемник выдаст ошибку при загрузке, данные в базе-источнике уже будут помечены как "переданные" и в следующий раз автоматически не выгрузятся. Вам придется перерегистрировать объекты вручную.
Если вы используете собственные правила обмена, созданные в конфигурации "Конвертация данных 2.1", логику управления регистрацией можно прописать непосредственно в правилах.
Посмотрим, на что стоит обратить внимание в КД 2.1:
Плана обмена в конфигурации "Конвертация данных" проверьте свойство "Использовать номер сообщения как отметку о регистрации".ОтказДляУдаленияРегистрации. Установив его в значение Ложь, вы разрешите системе генерировать атрибут удаления регистрации.Иногда возникают ситуации, когда атрибут в файле присутствует (УдалитьРегистрациюИзменений="true"), но регистрация в УПП всё равно не сбрасывается. Выясним возможные причины:
Во-первых, проверьте значение НомерСообщения в заголовке файла. Если выгрузка идет с номером "0" (например, при создании начального образа или при сброшенной нумерации), обработка загрузки в ЗУП может проигнорировать команду удаления регистрации, считая это состояние обмена некорректным.
Во-вторых, в ЗУП 3.1 логика загрузки зашита в модуле ОбменДаннымиСервер. Она анализирует не только флаг, но и синхронность номеров сообщений в базе и в файле. Если номера "разошлись", автоматического квитирования не произойдет.
Для стабильного решения проблемы рекомендуем следующий алгоритм действий:
ЗаписатьИнформациюОбОбменеДаннымиЧерезПланыОбмена() обработки ОбменДаннымиXML, как показано в первом способе. Это гарантирует появление атрибута в XML и позволит ЗУП 3.1 корректно управлять регистрацией изменений.