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