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