При работе с крупными информационными системами на платформе 1С программисты часто сталкиваются с проблемой огромного объема данных. Развертывание копии базы весом в несколько терабайт для выполнения локальной задачи или тестирования одной функции — процесс крайне неэффективный. Нам требуется инструмент или алгоритм, который позволит получить «легкий» файл .dt, содержащий только необходимую нормативно-справочную информацию (НСИ) и ограниченный набор документов, сохраняя при этом ссылочную целостность.
В этой статье мы подробно разберем несколько стратегий «сабсеттинга» (создания подмножества данных), проанализируем инструменты автоматизации этого процесса и выясним, как избежать появления «битых» ссылок в целевой базе.
Этот способ считается одним из самых надежных для получения согласованного набора данных. Основная идея заключается в создании правил обмена между идентичными конфигурациями. Рассмотрим этот процесс по шагам:
xml). Загружаем их в базу «Конвертация данных 2.0» и создаем новую конвертацию. Используем инструмент автоматической генерации правил (ПКО и ПКС).УниверсальныйОбменДаннымиXML. В ней мы можем указать, например, один конкретный документ ЗаказКлиента или РеализацияТоваровУслуг. При включенной опции «Выгружать объекты по ссылкам» система рекурсивно соберем все связанные данные: контрагента, договор, номенклатуру, единицы измерения, склады и даже записи некоторых регистров сведений, если они связаны через измерения.Преимущество метода: Мы получаем максимально чистую базу, где нет ничего лишнего, кроме того, что реально используется в выбранных документах. Это идеальный вариант для отладки конкретных алгоритмов проведения или формирования отчетов.
Если нам нужно сохранить структуру данных за определенный промежуток времени (например, за последний месяц), разберем использование стандартной обработки ВыгрузкаЗагрузкаДанныхXML.epf. Этот инструмент работает на уровне объектов платформы и сохраняет внутренние идентификаторы (GUID), что критически важно для идентичности баз.
Рассмотрим алгоритм действий:
Проанализируем ситуацию, когда база настолько велика, что прямая выгрузка объектов занимает слишком много времени. В этом случае эффективнее пойти по пути «отсечения лишнего»:
СверткаИнформационнойБазы. Устанавливаем дату свертки на начало текущего года или месяца. Система сформирует документы ВводОстатков и пометит все старые документы на удаление..dt действительно стал маленьким.Зачастую размер базы обусловлен не бизнес-данными, а техническим «мусором». Перед выгрузкой в .dt крайне полезно программно очистить следующие регистры и таблицы:
РегистрСведений.ВерсииОбъектов (или аналогичных в зависимости от БСП) могут занимать до половины объема всей базы. Для тестовой базы история изменений обычно не требуется.ИмяОбъектаПрисоединенныеФайлы. Их можно очистить или заменить файлы «заглушками» минимального размера..dt напрямую, его наличие в базе данных влияет на общую производительность операций.Пример кода для быстрой очистки тяжелого регистра сведений:
НаборЗаписей = РегистрыСведений.ОбъектыПоверхностногоВерсионирования.СоздатьНаборЗаписей();
// Не устанавливая отборы, записываем пустой набор
НаборЗаписей.Записать(Истина);
Выясним, как можно использовать механизм распределенных информационных баз (РИБ) для нашей задачи. Мы можем создать новый узел РИБ с фильтрами по организации или подразделению.
Разберем логику:
При создании начального образа подчиненного узла платформа автоматически применяет правила миграции данных. Если в настройках обмена указать фильтры (например, только одна организация и только документы за 2023 год), то в сформированный файл .dt (начальный образ) попадут только эти данные. После создания узла связь с главной базой можно разорвать, превратив узел в обычную автономную базу.
Любая частичная выгрузка несет риск появления объектов с текстом "Объект не найден". Чтобы этого избежать, при программной выгрузке или использовании КД 2 необходимо использовать рекурсивный поиск ссылок.
Посмотрим на логику алгоритма «Умной выгрузки»:
НайтиСсылки().Если задача стоит в автоматизации подготовки баз для Jenkins или GitLab CI, рекомендуется использовать OneScript. С его помощью можно написать скрипт, который будет:
.cf./Execute для выполнения обработки загрузки данных.xml или json.Таким образом, мы получаем воспроизводимую и актуальную среду для тестирования, размер которой не превышает нескольких сотен мегабайт, что позволяет мгновенно передавать её между разработчиками.