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