При работе с крупными информационными системами, такими как 1С:Управление производственным предприятием (УПП) 1.3, часто возникает необходимость создать распределенную информационную базу (РИБ), которая содержала бы не весь объем накопленных данных за десятилетие, а только актуальную информацию за последние несколько лет. Это позволяет значительно сократить размер базы-приемника, ускорить процесс обмена и снизить нагрузку на оборудование.
В этой статье мы подробно рассмотрим, как реализовать механизм «отсечки» данных по дате при настройке РИБ, проанализируем стандартные возможности платформы и разберем программные методы фильтрации данных.
Начнем с анализа стандартного функционала. В некоторых планах обмена конфигурации УПП 1.3 (например, в плане обмена «По организациям») предусмотрены встроенные фильтры. Разберем, как ими воспользоваться:
ОбменУПП или ПоОрганизациям).Если это поле заполнено, система при автоматической регистрации изменений будет игнорировать документы, дата которых меньше указанной. Однако важно помнить: эта настройка в УПП часто влияет только на последующую регистрацию изменений, а не на процесс создания начального образа базы.
Проанализируем ситуацию: когда мы нажимаем кнопку «Создать начальный образ», платформа 1С пытается выгрузить абсолютно все объекты, которые зарегистрированы для данного узла в таблице регистрации изменений. Чтобы ограничить этот объем, выполним следующие действия по шагам:
Регистрация изменений для обмена (она обычно входит в состав инструментов разработчика или доступна в составе БСП). В этой обработке мы увидим, что для нового узла зарегистрированы все документы с 2010 года.Создать начальный образ.Рассмотрим пример простого кода, который поможет нам очистить регистрацию изменений по дате программно:
УзелОбъекта = ПланыОбмена.Полный.НайтиПоКоду("Б");
Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбъекта, НомерСообщения);
Пока Выборка.Следующий() Цикл
Данные = Выборка.Получить();
Если Метаданные.Документы.Содержит(Данные.Метаданные()) Тогда
Если Данные.Дата < '20180101000000' Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбъекта, Данные);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Выясним причину, по которой даже после создания «чистого» образа старые документы могут попасть в базу Б. Если пользователь в основной базе А случайно перепроведет документ за 2015 год, он автоматически зарегистрируется к обмену и при следующей синхронизации «улетит» в подчиненную базу. Чтобы этого избежать, необходимо внести изменения в код модуля плана обмена.
Разберем использование обработчика события ПриОтправкеДанныхПодчиненному. Этот метод позволяет контролировать каждый объект непосредственно в момент его помещения в сообщение обмена.
Пропишем в модуле плана обмена следующую логику:
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
// Проверяем, является ли объект документом
Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) Тогда
// Если дата документа меньше критической — игнорируем его
Если ЭлементДанных.Дата < '20180101000000' Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Использование параметра ОтправкаЭлементаДанных.Игнорировать гарантирует, что данные не попадут в файл обмена, даже если они были ошибочно зарегистрированы.
Существует еще один продвинутый метод, который позволяет избежать длительного процесса создания начального образа средствами платформы, который часто «зависает» на больших базах. Рассмотрим этот алгоритм:
.cf файла).ПланыОбмена.УстановитьГлавныйУзел()).Этот способ позволяет более гибко подойти к наполнению базы-приемника, однако требует четкого понимания механизмов работы ID объектов и ссылочной целостности.
Проанализируем ситуацию, которая неизбежно возникнет при ограничении данных по дате. Документы за 2018 год могут ссылаться на документы-основания или договоры, созданные в 2015 году. Если мы просто «отрежем» старые данные, в базе Б на месте этих ссылок мы увидим надпись «Объект не найден».
Чтобы минимизировать количество таких ссылок, придерживаемся следующих правил:
Ввод остатков. Это позволит вести учет корректно, не опираясь на историю движений за предыдущие периоды.Таким образом, настройка РИБ от определенной даты в УПП 1.3 — задача вполне решаемая. Наиболее надежным методом является сочетание предварительной очистки таблицы регистрации изменений и программного фильтра в модуле плана обмена ПриОтправкеДанныхПодчиненному.