Как уменьшить размер таблиц итогов регистров RG после свертки базы в 1С 7.7

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При выполнении процедуры свертки информационной базы в 1С:Предприятие 7.7 (конфигурация «Торговля и Склад 7.7») администраторы и разработчики часто сталкиваются с ситуацией, когда физический размер файлов базы данных практически не уменьшается. Особенно остро эта проблема проявляется на таблицах итогов регистров (файлы вида RG*.DBF), например, по регистру «Продажи» или «ПартииНаличие».

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

Структура хранения регистров: разница между RA и RG

Для каждого регистра накопления платформа 1С 7.7 создает в каталоге базы данных два основных файла таблиц:

  1. Таблица движений (RAxxxx.DBF) — содержит детальные записи каждого документа-регистратора с датой, номером позиции документа и числовыми значениями прихода/расхода.
  2. Таблица итогов (RGxxxx.DBF) — содержит рассчитанные остатки и обороты на первое число каждого месяца (поле PERIOD) в разрезе измерений регистра.

Даже если регистр по своей логике является оборотным (как «Продажи»), платформа формирует записи итогов на каждый расчетный месяц. Если документы за прошлые годы удаляются или распроводятся при свертке, записи в файле RG могут оставаться в базе, так как они представляют собой агрегаты за исторические периоды.

Важное ограничение: предельный размер любого отдельного файла .DBF или .CDX в платформе 1С 7.7 составляет 2 ГБ. Превышение этого лимита приводит к аварийному завершению работы программы, поэтому оптимизация таблиц после обрезки критически важна.

Почему не рекомендуется прямое редактирование DBF-файла

Попытка вручную вырезать записи через сторонний DBF-редактор несет серьезные риски:

  1. Нарушение целостности заголовка DBF (счетчика записей).
  2. Мгновенная рассинхронизация с индексным файлом RGxxxx.CDX, что приведет к ошибкам при запуске и неверным отчетам.
  3. Появление битых ссылок при последующих транзакциях.

Рассмотрим штатные и безопасные технические способы очистки и пересчета таблиц итогов.

Способ 1. Полное пересоздание таблиц через выгрузку и загрузку данных

Самый надежный и правильный метод физического сжатия базы данных после удаления старых документов:

  1. Запустим 1С в режиме Конфигуратор монопольно.
  2. Выполним пункт меню «Администрирование» — «Выгрузка данных» и сохраним zip-архив.
  3. Создадим пустую папку для новой базы, поместим туда файл конфигурации 1Cv7.MD (или пустой словарь данных).
  4. Откроем Конфигуратор в новой папке и выберем «Администрирование» — «Загрузка данных», указав созданный архив.

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

Способ 2. Удаление файла RG с последующим пересчетом итогов

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

  1. Обязательно создадим резервную копию информационной базы.
  2. Определим идентификатор регистра (например, по файлу 1Cv7.DD находим, какой таблице соответствует регистр RG2351).
  3. При закрытой базе данных удалим файлы RG2351.DBF и RG2351.CDX (таблицу движений RA2351.DBF оставляем).
  4. Запустим 1С:Предприятие монопольно.
  5. Перейдем в пункт меню «Операции» — «Управление итогами» и выполним «Полный пересчет итогов».

Платформа автоматически создаст новый пустой файл RG и заполнит остатки только по тем движениям, которые физически присутствуют в RA за оставшиеся после свертки периоды.

Обработка разорванных ссылок и документов-оснований

При удалении исторических документов в процессе свертки (например, реализаций до даты обрезки) возникает проблема с документами нового периода, которые ссылаются на удаленные данные. Типичный пример — документ «Возврат от покупателя», введенный на основании старой «Реализации».

Если не разорвать связь, документ возврата не сможет перепровестись или не сможет определить себестоимость. Для очистки ссылок на удаленные документы-основания используем программный перебор:


ВыборкаДок = СоздатьОбъект("Документ");
ВыборкаДок.ВыбратьДокументы(ДатаСвертки, ПолучитьДатуТА());

Пока ВыборкаДок.ПолучитьДокумент() = 1 Цикл
    Если ПустоеЗначение(ВыборкаДок.ДокОснование) = 0 Тогда
        // Проверяем, помечен ли документ-основание на удаление или дата меньше даты свертки
        Если (ВыборкаДок.ДокОснование.ПометкаУдаления() = 1) Или (ВыборкаДок.ДокОснование.ДатаДок <= ДатаСвертки) Тогда
            ДокОбъект = СоздатьОбъект("Документ");
            ДокОбъект.НайтиДокумент(ВыборкаДок.ТекущийДокумент());
            
            Попытка
                ДокОбъект.ДокОснование = "";
                ДокОбъект.Записать();
            Исключение
                Сообщить("Ошибка очистки основания в документе: " + ДокОбъект.ТекущийДокумент());
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

После очистки ссылок необходимо выполнить процедуру «Тестирование и исправление ИБ» в Конфигураторе с проверкой ссылочной целостности и перепровести документы актуального периода для корректного формирования партий и движений регистров.

← На главную