Как исправить ошибку и зависание при пересчете итогов и смене периода в 1С 7.7 из-за превышения лимита файла DBF в 2 ГБ?

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

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

Причины возникновения ошибки и лимиты формата DBF

Проанализируем архитектуру хранения данных в файловом варианте 1С 7.7. Платформа использует движок CodeBase, оперирующий 32-битными адресами смещений. Из-за этого действует строгое ограничение:

  1. Максимальный размер любого файла таблицы (.dbf) и индексного файла (.cdx) не может превышать 2 ГБ (2 147 483 647 байт). При приближении к этому порогу любая операция записи или переиндексации вызывает сбой.
  2. Таблицы итогов регистров накопления (файлы с префиксом RG*.dbf) хранят срезы остатков по месяцам. Если в учете накапливаются «незакрывающиеся» остатки (например, несовпадение измерений прихода и расхода по партиям, номенклатуре или ценам), платформа каждый месяц переносит все образовавшиеся хвосты вперед, раздувая таблицу итогов в геометрической прогрессии.
  3. Переполнение может происходить не только в теле файла .dbf, но и в индексе .cdx во время реиндексации.

Шаг 1. Определение проблемной таблицы базы данных

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

  1. Откроем каталог информационной базы в проводнике и отсортируем файлы по размеру.
  2. Найдем файлы с расширением .dbf, размер которых приблизился к 2 ГБ (от 1.5 до 2 ГБ). Обратим внимание на файлы вида RG*.dbf (итоги регистров) или RA*.dbf (движения регистров).
  3. Откроем файл словаря данных 1Cv7.DD любым текстовым редактором и выполним поиск по имени файла (например, RG328). В описании найдем наименование регистра (например, регистр ПартииНаличные или ПартииТоваров).

Решение 1. Очистка и упаковка DBF через специализированные редакторы

Если база перестала открываться в штатном режиме, а встроенная свертка зависает, применим прямое сжатие таблицы с помощью стороннего редактора (например, WinDBFview):

  1. Запустим редактор DBF и откроем проблемную таблицу RG*.dbf.
  2. Найдем зеркальные незакрытые записи (положительные и отрицательные остатки по схожим аналитикам) или записи с устаревшим периодом.
  3. Пометим ненужные строки на удаление. В формате DBF при удалении строка физически остается в файле, но получает специальный флаг удаления.
  4. Выполним команду Упаковать (Pack). Только после выполнения операции упаковки помеченные записи будут физически удалены из файла, а его размер существенно уменьшится.
  5. Если учет велся некорректно и остатки прошлых лет не представляют ценности, можно полностью очистить таблицу итогов RG*.dbf (или удалить записи ранее определенной даты), после чего выполнить команду упаковки таблицы.

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

Решение 2. Удаление и перестроение индексных файлов

Нередко сбой происходит из-за того, что при пересчете итогов размер генерируемого индексного файла .cdx превышает 2 ГБ, либо сам индекс оказывается поврежден. Выполним переиндексацию «с нуля»:

  1. Полностью закроем 1С 7.7 на всех рабочих станциях.
  2. В каталоге информационной базы найдем и удалим абсолютно все файлы с расширением *.cdx.
  3. Запустим 1С в монопольном режиме. Программа автоматически выдаст сообщение о необходимости переиндексации и выполнит построение новых компактных индексов.

Решение 3. Временный перенос базы в Microsoft SQL Server

В реляционных СУБД отсутствует ограничение на размер одной таблицы в 2 ГБ. Это позволяет снять лимит для проведения регламентных процедур:

  1. В Конфигураторе файловой базы выберем пункт меню «Администрирование -> Выгрузка данных» и сформируем архив .dat.
  2. Развернем пустую базу 1С 7.7 для работы с MS SQL Server.
  3. Через меню «Администрирование -> Загрузка данных» загрузим архив в SQL-версию.
  4. В среде SQL без ошибок переведем расчетный период, выполним полный пересчет итогов и запустим типовую обработку свертки базы данных для обрезки старых периодов.
  5. После уменьшения количества данных выгрузим базу обратно через «Выгрузка данных» и загрузим в чистую файловую DBF-базу.

Решение 4. Пошаговый пересчет итогов по месяцам

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

  1. Откроем программу в режиме «1С:Предприятие» и перейдем в пункт меню «Операции -> Управление итогами».
  2. Вместо перевода периода на несколько месяцев или лет вперед укажем расчет итогов ровно на один месяц вперед от текущего установленного.
  3. Нажмем кнопку «Установить расчет». После успешного завершения повторим операцию для следующего месяца.
  4. Такой подход позволяет локализовать месяц, на котором происходит переполнение объема таблицы, и значительно снижает пиковую нагрузку на временные файлы.
← На главную