Как настроить распределенную информационную базу (РИБ) с ограничением данных по дате в 1С:УПП?

Программист 1С v8.3 (Обычные формы)
← На главную

При работе с крупными информационными системами, такими как 1С:Управление производственным предприятием (УПП) 1.3, часто возникает необходимость создать распределенную информационную базу (РИБ), которая содержала бы не весь объем накопленных данных за десятилетие, а только актуальную информацию за последние несколько лет. Это позволяет значительно сократить размер базы-приемника, ускорить процесс обмена и снизить нагрузку на оборудование.

В этой статье мы подробно рассмотрим, как реализовать механизм «отсечки» данных по дате при настройке РИБ, проанализируем стандартные возможности платформы и разберем программные методы фильтрации данных.

Метод 1. Использование штатных настроек плана обмена

Начнем с анализа стандартного функционала. В некоторых планах обмена конфигурации УПП 1.3 (например, в плане обмена «По организациям») предусмотрены встроенные фильтры. Разберем, как ими воспользоваться:

  1. Перейдем в меню «Операции» — «Планы обмена».
  2. Выберем интересующий нас план обмена (например, ОбменУПП или ПоОрганизациям).
  3. При создании нового узла и настройке параметров обмена обратим внимание на поле «Дата начала выгрузки документов».

Если это поле заполнено, система при автоматической регистрации изменений будет игнорировать документы, дата которых меньше указанной. Однако важно помнить: эта настройка в УПП часто влияет только на последующую регистрацию изменений, а не на процесс создания начального образа базы.

Метод 2. Управление регистрацией изменений перед созданием начального образа

Проанализируем ситуацию: когда мы нажимаем кнопку «Создать начальный образ», платформа 1С пытается выгрузить абсолютно все объекты, которые зарегистрированы для данного узла в таблице регистрации изменений. Чтобы ограничить этот объем, выполним следующие действия по шагам:

  1. Создание узла: Создадим новый узел в плане обмена в главной базе, но не торопимся создавать начальный образ.
  2. Очистка регистрации: Воспользуемся стандартной обработкой Регистрация изменений для обмена (она обычно входит в состав инструментов разработчика или доступна в составе БСП). В этой обработке мы увидим, что для нового узла зарегистрированы все документы с 2010 года.
  3. Фильтрация: Нам необходимо программно или с помощью обработки отменить регистрацию для всех документов, дата которых меньше 31.12.2017.
  4. Создание образа: Только после того, как в таблице регистрации останутся только нужные нам данные (с 2018 года), запустим процедура Создать начальный образ.

Рассмотрим пример простого кода, который поможет нам очистить регистрацию изменений по дате программно:


УзелОбъекта = ПланыОбмена.Полный.НайтиПоКоду("Б");
Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбъекта, НомерСообщения);

Пока Выборка.Следующий() Цикл
    Данные = Выборка.Получить();
    Если Метаданные.Документы.Содержит(Данные.Метаданные()) Тогда
        Если Данные.Дата < '20180101000000' Тогда
            ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбъекта, Данные);
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Метод 3. Программная фильтрация в модуле плана обмена

Выясним причину, по которой даже после создания «чистого» образа старые документы могут попасть в базу Б. Если пользователь в основной базе А случайно перепроведет документ за 2015 год, он автоматически зарегистрируется к обмену и при следующей синхронизации «улетит» в подчиненную базу. Чтобы этого избежать, необходимо внести изменения в код модуля плана обмена.

Разберем использование обработчика события ПриОтправкеДанныхПодчиненному. Этот метод позволяет контролировать каждый объект непосредственно в момент его помещения в сообщение обмена.

Пропишем в модуле плана обмена следующую логику:


Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
    
    // Проверяем, является ли объект документом
    Если Метаданные.Документы.Содержит(ЭлементДанных.Метаданные()) Тогда
        
        // Если дата документа меньше критической — игнорируем его
        Если ЭлементДанных.Дата < '20180101000000' Тогда
            ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

Использование параметра ОтправкаЭлементаДанных.Игнорировать гарантирует, что данные не попадут в файл обмена, даже если они были ошибочно зарегистрированы.

Метод 4. Создание РИБ через «пустую» базу (альтернативный путь)

Существует еще один продвинутый метод, который позволяет избежать длительного процесса создания начального образа средствами платформы, который часто «зависает» на больших базах. Рассмотрим этот алгоритм:

  1. В основной базе А создаем узел обмена.
  2. Создаем новую пустую базу Б с идентичной конфигурацией (путем загрузки .cf файла).
  3. В базе Б вручную создаем узлы обмена с теми же кодами, что и в базе А.
  4. Устанавливаем в базе Б признак того, что она является подчиненной (через ПланыОбмена.УстановитьГлавныйУзел()).
  5. В базе А регистрируем к обмену только те объекты, которые нам нужны (справочники полностью, а документы — с 2018 года).
  6. Запускаем обычный обмен данными.

Этот способ позволяет более гибко подойти к наполнению базы-приемника, однако требует четкого понимания механизмов работы ID объектов и ссылочной целостности.

Важные нюансы и проблема «битых ссылок»

Проанализируем ситуацию, которая неизбежно возникнет при ограничении данных по дате. Документы за 2018 год могут ссылаться на документы-основания или договоры, созданные в 2015 году. Если мы просто «отрежем» старые данные, в базе Б на месте этих ссылок мы увидим надпись «Объект не найден».

Чтобы минимизировать количество таких ссылок, придерживаемся следующих правил:

Таким образом, настройка РИБ от определенной даты в УПП 1.3 — задача вполне решаемая. Наиболее надежным методом является сочетание предварительной очистки таблицы регистрации изменений и программного фильтра в модуле плана обмена ПриОтправкеДанныхПодчиненному.

← На главную