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

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Сфера услуг, туризм и социальный сектор
← На главную

Разделение централизованной базы данных (БД) — задача, с которой часто сталкиваются технические специалисты при децентрализации учета или выделении филиала в отдельное юридическое лицо. Основная сложность заключается в огромных объемах данных, накопленных за годы работы, из-за чего стандартные механизмы 1С могут работать крайне медленно или приводить к программным ошибкам. В данной статье мы разберем несколько эффективных методов разделения базы, проанализируем их преимущества и недостатки, а также изучим специфику работы с бюджетными учреждениями.

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

Рассмотрим классический подход, который предлагает сама платформа 1С. Если база не критично перегружена данными, стоит начать с наиболее безопасных методов.

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


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

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

Свертка базы обычно применяется для обрезания периода, но ее можно адаптировать под удаление лишних организаций. Проанализируем этот процесс: мы формируем остатки только по нужной организации на начало текущего или прошлого года, а все документы прошлых периодов по остальным учреждениям помечаем на удаление. В бюджетных учреждениях (БГУ) важно учитывать специфику счета 304.06 (расчеты при передаче активов), так как при удалении «соседних» организаций могут возникнуть разрывы в цепочках передач.

Метод 2. Выгрузка данных в чистую базу (XML и «Конвертация данных»)

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

Обработка «Выгрузка и загрузка данных XML» позволяет выгрузить объекты с отбором по реквизиту Организация. Это штатный и достаточно надежный инструмент. Главный плюс — в новую базу попадают только те справочники и документы, которые действительно относятся к выбранному учреждению. Это помогает избежать переноса «мусора» и битых ссылок, накопленных годами.

Если структура данных сложная или требуется трансформация данных в процессе переноса, используем «1С:Конвертация данных» (КД 2.0 или 3.0). Создав правила обмена «сама в себя», мы можем гибко настроить выгрузку только актуальных договоров, номенклатуры и основных средств.

Метод 3. Радикальное удаление через SQL-запросы

Когда объем данных измеряется сотнями гигабайт, а типовые обработки не справляются, программисты прибегают к прямому манипулированию данными на уровне СУБД. Проанализируем ситуацию: стандартное удаление с проверкой ссылочной целостности в 1С выполняет множество мелких запросов к базе, что при миллионах записей растягивается на недели.

Для ускорения процесса можно написать T-SQL скрипт, который будет удалять данные рекурсивно по всем взаимосвязям. Разберем основные этапы этого подхода:

  1. Сопоставление таблиц: В 1С имена таблиц в SQL (например, _Document125) генерируются платформой. Чтобы найти нужные таблицы, воспользуемся функцией:

СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
// Далее выгружаем структуру в таблицу или файл для анализа имен в SQL
  1. Отключение контроля целостности: Удаление производится без проверки ссылок. Как показывает практика, очистка базы объемом 90 Гб таким методом может занять всего 15–20 минут вместо нескольких суток.
  2. Очистка регистров: Важно помнить, что нужно удалять не только записи из таблиц документов (_Document), но и движения по регистрам накопления (_AccumReg) и сведений (_InfoReg), иначе отчеты в оставшейся базе будут показывать неверные данные.

Важный нюанс: Прямое удаление через SQL — это нарушение лицензионного соглашения 1С и крайне рискованная операция. Всегда делайте полную резервную копию перед началом работ!

Метод 4. Написание кастомной обработки для удаления без проверки ссылок

Если работа напрямую с SQL кажется слишком опасной, можно реализовать промежуточный вариант — написать обработку на языке 1С, которая удаляет объекты методом Удалить() вместо УстановитьПометкуУдаления(). Посмотрим на пример логики:


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

Использование свойства ОбменДанными.Загрузка = Истина позволяет существенно ускорить процесс, так как платформа перестает выполнять прикладные проверки при записи и удалении. Это быстрее, чем стандартное удаление через корзину, но медленнее, чем прямой SQL.

Работа с последствиями: битые ссылки и тестирование

После любого «жесткого» разделения базы (особенно методами 3 и 4) мы неизбежно столкнемся с проблемой «Объект не обнаружен». Это происходит, если в документах оставшейся организации остались ссылки на аналитику (контрагентов, сотрудников), которые были удалены вместе с другими учреждениями.

Разберем шаги по приведению базы в порядок:

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

Особенности децентрализации в бюджетных учреждениях (БГУ)

В бюджетном учете учреждения тесно связаны между собой общими справочниками ОС и контрагентов. При разделении баз ЦБ (централизованной бухгалтерии) нужно быть особенно внимательными к межведомственным расчетам. Если учреждения осуществляли безвозмездные передачи имущества друг другу, в базе остаются встречные документы. Мы рекомендуем перед удалением «лишних» организаций убедиться, что все внутренние обороты закрыты, а входящее сальдо по счету 304.06 выверено.

В современных версиях платформы 8.3 также можно использовать режим фонового удаления объектов. Он позволяет помечать на удаление тысячи записей и запускать процесс очистки в фоновом режиме, не блокируя работу бухгалтеров. Это самый безопасный, хоть и самый длительный способ для тех, кто не готов к рискованным операциям с SQL.

← На главную