Как выгрузить минимально необходимые данные из большой базы 1С для разработки и тестирования

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с крупными информационными системами на платформе 1С программисты часто сталкиваются с проблемой огромного объема данных. Развертывание копии базы весом в несколько терабайт для выполнения локальной задачи или тестирования одной функции — процесс крайне неэффективный. Нам требуется инструмент или алгоритм, который позволит получить «легкий» файл .dt, содержащий только необходимую нормативно-справочную информацию (НСИ) и ограниченный набор документов, сохраняя при этом ссылочную целостность.

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

Метод 1: Использование «Конвертации данных 2.0» (КД 2)

Этот способ считается одним из самых надежных для получения согласованного набора данных. Основная идея заключается в создании правил обмена между идентичными конфигурациями. Рассмотрим этот процесс по шагам:

  1. Подготовка правил: Выгружаем структуру метаданных источника и приемника (поскольку они идентичны, это один и тот же файл xml). Загружаем их в базу «Конвертация данных 2.0» и создаем новую конвертацию. Используем инструмент автоматической генерации правил (ПКО и ПКС).
  2. Настройка выгрузки по ссылкам: В правилах конвертации объектов для справочников и документов важно правильно настроить флаги выгрузки. Мы устанавливаем режим, при котором справочники выгружаются только при необходимости (по ссылкам), а основные документы — по заданному фильтру.
  3. Выгрузка данных: Используем обработку УниверсальныйОбменДаннымиXML. В ней мы можем указать, например, один конкретный документ ЗаказКлиента или РеализацияТоваровУслуг. При включенной опции «Выгружать объекты по ссылкам» система рекурсивно соберем все связанные данные: контрагента, договор, номенклатуру, единицы измерения, склады и даже записи некоторых регистров сведений, если они связаны через измерения.

Преимущество метода: Мы получаем максимально чистую базу, где нет ничего лишнего, кроме того, что реально используется в выбранных документах. Это идеальный вариант для отладки конкретных алгоритмов проведения или формирования отчетов.

Метод 2: Выгрузка и загрузка данных XML с фильтром по периоду

Если нам нужно сохранить структуру данных за определенный промежуток времени (например, за последний месяц), разберем использование стандартной обработки ВыгрузкаЗагрузкаДанныхXML.epf. Этот инструмент работает на уровне объектов платформы и сохраняет внутренние идентификаторы (GUID), что критически важно для идентичности баз.

Рассмотрим алгоритм действий:

  1. В исходной базе запускаем обработку и выбираем виды метаданных, которые нам нужны.
  2. Для документов и периодических регистров устанавливаем период (например, текущий месяц).
  3. Для справочников, планов видов характеристик и констант фильтр по периоду не применяется, поэтому здесь кроется главная сложность: если выгрузить все справочники, база может остаться тяжелой.
  4. Решением будет предварительная очистка справочников в приемнике или использование доработанной версии этой обработки, которая умеет анализировать использование ссылок.

Метод 3: Свертка базы как подготовительный этап

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

  1. Создание полной копии: Создаем дубликат рабочей базы на тестовом сервере.
  2. Запуск свертки: Используем типовую обработку СверткаИнформационнойБазы. Устанавливаем дату свертки на начало текущего года или месяца. Система сформирует документы ВводОстатков и пометит все старые документы на удаление.
  3. Удаление объектов: Выполняем физическое удаление помеченных объектов. Важно понимать, что это может занять длительное время, но в результате мы получим базу, где остатки актуальны, а исторический «хвост» отсечен.
  4. Очистка кэша и итогов: После удаления необходимо пересчитать итоги и сжать базу средствами СУБД (Shrink), чтобы файл .dt действительно стал маленьким.

Метод 4: Удаление «тяжелых» служебных данных

Зачастую размер базы обусловлен не бизнес-данными, а техническим «мусором». Перед выгрузкой в .dt крайне полезно программно очистить следующие регистры и таблицы:

Пример кода для быстрой очистки тяжелого регистра сведений:


НаборЗаписей = РегистрыСведений.ОбъектыПоверхностногоВерсионирования.СоздатьНаборЗаписей();
// Не устанавливая отборы, записываем пустой набор
НаборЗаписей.Записать(Истина);

Метод 5: Автоматизация через создание узла РИБ

Выясним, как можно использовать механизм распределенных информационных баз (РИБ) для нашей задачи. Мы можем создать новый узел РИБ с фильтрами по организации или подразделению.

Разберем логику:

При создании начального образа подчиненного узла платформа автоматически применяет правила миграции данных. Если в настройках обмена указать фильтры (например, только одна организация и только документы за 2023 год), то в сформированный файл .dt (начальный образ) попадут только эти данные. После создания узла связь с главной базой можно разорвать, превратив узел в обычную автономную базу.

Проблема пустых ссылок и целостности

Любая частичная выгрузка несет риск появления объектов с текстом "Объект не найден". Чтобы этого избежать, при программной выгрузке или использовании КД 2 необходимо использовать рекурсивный поиск ссылок.

Посмотрим на логику алгоритма «Умной выгрузки»:

  1. Определяем массив «Корневых объектов» (например, документы за неделю).
  2. Для каждого объекта вызываем функцию НайтиСсылки().
  3. Все найденные объекты-ссылки добавляем в очередь на выгрузку.
  4. Повторяем процесс для вновь добавленных объектов (справочников), пока не дойдем до «листьев» дерева зависимостей (перечисления, пустые справочники).

Рекомендации для CI/CD и пайплайнов

Если задача стоит в автоматизации подготовки баз для Jenkins или GitLab CI, рекомендуется использовать OneScript. С его помощью можно написать скрипт, который будет:

  1. Разворачивать базу из чистого конфигурационного файла .cf.
  2. Запускать 1С в режиме предприятия с параметром /Execute для выполнения обработки загрузки данных.
  3. Загружать заранее подготовленный пакет данных в формате xml или json.
  4. Выполнять инициализацию параметров работы системы.

Таким образом, мы получаем воспроизводимую и актуальную среду для тестирования, размер которой не превышает нескольких сотен мегабайт, что позволяет мгновенно передавать её между разработчиками.

← На главную