Как создать актуальную копию базы 1С с определенной даты с помощью РИБ для свертки данных?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

В этой статье мы подробно разберем, как подготовить и реализовать план перехода на новую базу с использованием РИБ, на что обратить внимание при работе с 1С:УПП 1.3 и как минимизировать время простоя системы.

Зачем использовать РИБ для свертки базы?

Традиционная свертка через удаление старых документов часто приводит к проблемам с транзакционными логами SQL, блокировкам и долгому ожиданию. Метод через РИБ позволяет нам создать «клон» системы, в который попадут только нужные данные начиная с определенной даты. Главное преимущество этого метода — сохранение уникальных идентификаторов (GUID) всех объектов, что критически важно для корректной работы внешних интеграций и исторических ссылок внутри системы.

Шаг 1. Подготовка конфигурации и состава плана обмена

Прежде всего, нам необходимо проанализировать состав используемого плана обмена (обычно это план обмена «Полный»). Разберем по шагам, что нужно проверить:

  1. Состав метаданных: Проверим, все ли доработанные объекты (новые справочники, документы, регистры) включены в состав плана обмена. Если объект не включен в план, данные по нему не мигрируют в новую базу.
  2. Авторегистрация: В крупных базах, таких как УПП, авторегистрацию для тяжелых объектов лучше отключать. Мы будем управлять регистрацией программно, чтобы не перегружать таблицы изменений.
  3. Подписки на события: Проанализируем подписки, отвечающие за регистрацию изменений. Нам потребуется внедрить в них логику фильтрации по дате.

Шаг 2. Создание периферийной базы без «начального образа»

Стандартный механизм Создать начальный образ в 1С при больших объемах данных часто зависает или завершается ошибкой. Рассмотрим альтернативный, более быстрый путь:

1. Сделаем полную копию рабочей базы средствами SQL Server.

2. В этой копии программно «разорвем» связь, чтобы превратить её в обычную базу. Для этого выполним код:

ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

3. В центральной базе создадим новый узел РИБ. Запомним его код.

4. В созданной копии (которая станет нашей новой рабочей базой) назначим этот узел главным. Это делается программно путем установки ссылки на соответствующий узел плана обмена.

Шаг 3. Ограничение выгрузки данных по дате

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

Для этого в подписках на события, которые регистрируют изменения документов, добавим условие. Пример логики:


Если ТипЗнч(Источник) = Тип("ДокументОбъект.ЗаказПокупателя") Тогда
    Если Источник.Дата < '20210101000000' Тогда
        Возврат; // Не регистрируем старые документы
    КонецЕсли;
КонецЕсли;

Рассмотрим подробнее: этот код предотвращает попадание старых данных в таблицу регистрации _DataChngRec. Если документ был изменен в старой базе, но его дата меньше пороговой, он просто не пойдет в обмен.

Шаг 4. Очистка старых данных в новой базе

Так как мы создали новую базу как полную копию (через SQL), в ней изначально есть все данные. Теперь их нужно удалить. Но делать это нужно крайне аккуратно:

ПланыОбмена.УдалитьРегистрациюИзменений(ЭтотУзел);

Шаг 5. Нюансы учета: РАУЗ и последовательности

Проанализируем специфику УПП 1.3. Если в вашей базе используется РАУЗ (Расширенная аналитика учета затрат), помните: расчет себестоимости опирается на ключи аналитики и движения в регистрах «Учет затрат». При обрезке базы через РИБ крайне важно:

  1. Ввести корректные входящие остатки на 00:00:00 даты начала (01.01.2021).
  2. Убедиться, что справочники «Ключи аналитики» перенеслись полностью.
  3. Проверить, что границы последовательностей в новой базе установлены корректно. Скорее всего, после удаления старых данных последовательности придется восстановить или программно перенести их границу на дату начала работы.

Шаг 6. Переход в боевой режим

Когда данные в новой базе синхронизированы и старье удалено, наступает момент подмены. Выясним последовательность действий:

  1. Останавливаем работу пользователей в центральной базе.
  2. Проводим финальный обмен, чтобы все последние изменения долетели в периферийную базу.
  3. В периферийной базе окончательно отключаем связь с центром: ПланыОбмена.УстановитьГлавныйУзел(Неопределено).
  4. Теперь эта база становится автономной и «чистой». Мы можем переименовать её в рабочую и пустить пользователей.

Альтернативный вариант: Использование XML и инструментов разработчика

Если структура базы сильно повреждена («посыпалась»), использование РИБ может перенести ошибки на уровне SQL таблиц. В таком случае рассмотрим вариант с Универсальным обменом в формате XML. Процесс выглядит так:

Этот способ дольше, но он гарантирует пересоздание таблиц базы данных «с нуля», что лечит многие логические ошибки структуры.

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

← На главную