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