При выполнении процедуры свертки информационной базы в 1С:Предприятие 7.7 (конфигурация «Торговля и Склад 7.7») администраторы и разработчики часто сталкиваются с ситуацией, когда физический размер файлов базы данных практически не уменьшается. Особенно остро эта проблема проявляется на таблицах итогов регистров (файлы вида RG*.DBF), например, по регистру «Продажи» или «ПартииНаличие».
Разберем внутренние механизмы хранения данных регистров в 1С 7.7, выясним, почему таблицы не уменьшаются автоматически, и рассмотрим безопасные способы уменьшения объема файлов.
Для каждого регистра накопления платформа 1С 7.7 создает в каталоге базы данных два основных файла таблиц:
RAxxxx.DBF) — содержит детальные записи каждого документа-регистратора с датой, номером позиции документа и числовыми значениями прихода/расхода.RGxxxx.DBF) — содержит рассчитанные остатки и обороты на первое число каждого месяца (поле PERIOD) в разрезе измерений регистра.Даже если регистр по своей логике является оборотным (как «Продажи»), платформа формирует записи итогов на каждый расчетный месяц. Если документы за прошлые годы удаляются или распроводятся при свертке, записи в файле RG могут оставаться в базе, так как они представляют собой агрегаты за исторические периоды.
Важное ограничение: предельный размер любого отдельного файла .DBF или .CDX в платформе 1С 7.7 составляет 2 ГБ. Превышение этого лимита приводит к аварийному завершению работы программы, поэтому оптимизация таблиц после обрезки критически важна.
Попытка вручную вырезать записи через сторонний DBF-редактор несет серьезные риски:
RGxxxx.CDX, что приведет к ошибкам при запуске и неверным отчетам.Рассмотрим штатные и безопасные технические способы очистки и пересчета таблиц итогов.
Самый надежный и правильный метод физического сжатия базы данных после удаления старых документов:
1Cv7.MD (или пустой словарь данных).В процессе загрузки платформа физически пересоздает структуру всех DBF-таблиц, исключая удаленные записи, и заново рассчитывает итоги регистров без накопленного «мусора».
Если требуется очистить конкретный разросшийся регистр без полной перезаливки базы, применим следующий алгоритм:
1Cv7.DD находим, какой таблице соответствует регистр RG2351).RG2351.DBF и RG2351.CDX (таблицу движений RA2351.DBF оставляем).Платформа автоматически создаст новый пустой файл RG и заполнит остатки только по тем движениям, которые физически присутствуют в RA за оставшиеся после свертки периоды.
При удалении исторических документов в процессе свертки (например, реализаций до даты обрезки) возникает проблема с документами нового периода, которые ссылаются на удаленные данные. Типичный пример — документ «Возврат от покупателя», введенный на основании старой «Реализации».
Если не разорвать связь, документ возврата не сможет перепровестись или не сможет определить себестоимость. Для очистки ссылок на удаленные документы-основания используем программный перебор:
ВыборкаДок = СоздатьОбъект("Документ");
ВыборкаДок.ВыбратьДокументы(ДатаСвертки, ПолучитьДатуТА());
Пока ВыборкаДок.ПолучитьДокумент() = 1 Цикл
Если ПустоеЗначение(ВыборкаДок.ДокОснование) = 0 Тогда
// Проверяем, помечен ли документ-основание на удаление или дата меньше даты свертки
Если (ВыборкаДок.ДокОснование.ПометкаУдаления() = 1) Или (ВыборкаДок.ДокОснование.ДатаДок <= ДатаСвертки) Тогда
ДокОбъект = СоздатьОбъект("Документ");
ДокОбъект.НайтиДокумент(ВыборкаДок.ТекущийДокумент());
Попытка
ДокОбъект.ДокОснование = "";
ДокОбъект.Записать();
Исключение
Сообщить("Ошибка очистки основания в документе: " + ДокОбъект.ТекущийДокумент());
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
После очистки ссылок необходимо выполнить процедуру «Тестирование и исправление ИБ» в Конфигураторе с проверкой ссылочной целостности и перепровести документы актуального периода для корректного формирования партий и движений регистров.