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