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