Работа с устаревшими, но критически важными системами на платформе 1С:Предприятие 7.7 часто преподносит сюрпризы, связанные с техническими ограничениями формата DBF. Одной из самых острых проблем является достижение файлом базы данных размера 2 ГБ. В этой статье мы подробно разберем, как правильно подойти к свертке сильно измененной конфигурации, как исправить последствия некорректного вмешательства в файлы базы и устранить ошибку «Деление на 0» в глобальном модуле.
Рассмотрим ситуацию: база данных формата DBF (например, «Торговля и Склад 7.7») перестает работать, так как файл индексов или регистров (RG*, RA*) превысил физический предел в 2 гигабайта. Часто системные администраторы или неопытные фрилансеры пытаются «оживить» систему, просто удаляя часть записей из .DBF файлов или очищая их физически.
Проанализируем последствия такого подхода. После подобной «обрезки» программа может запуститься, но при попытке поиска товара или формирования отчета возникают критические ошибки. Это происходит из-за нарушения ссылочной целостности и повреждения итогов. Выясним причину конкретной ошибки Деление на 0, возникающей в строке:
НайденныйОстаток = ТаблОстатков.Количество / Коэфф;
// {Глобальный модуль(1519)}: Деление на 0
Ошибка указывает на то, что переменная Коэфф (коэффициент единицы измерения) равна нулю или не определена. Это прямое следствие того, что при «ручной» чистке базы были повреждены записи в справочнике Единицы или нарушены связи между номенклатурой и её базовыми единицами измерения.
Чтобы программа перестала аварийно завершаться при поиске товара, мы можем применить «быструю заплатку» в коде глобального модуля. Разберем, как изменить алгоритм пересчета остатков, используя тернарный оператор для проверки коэффициента.
Найдем проблемный участок кода и заменим его на безопасный вариант:
// Было:
// НайденныйОстаток = ТаблОстатков.Количество / Коэфф;
// Стало (вариант с проверкой):
КоэффДляДеления = ?(Коэфф = 0, 1, Коэфф);
НайденныйОстаток = ТаблОстатков.Количество / КоэффДляДеления;
Важный момент: использование коэффициента «1» по умолчанию позволит программе работать, но может исказить реальные остатки в отчетах. Поэтому данное решение является временным и требует последующего исправления данных в справочниках.
Вместо того чтобы просто обходить ошибку в коде, нам необходимо найти «битые» записи в базе данных. Выполним следующие шаги для восстановления корректных значений коэффициентов:
Единицы.Коэффициент для каждого элемента.Коэффициент равен 0, установим его равным 1 (или другому корректному значению согласно логике учета).Номенклатура на наличие незаполненных ссылок на базовые и основные единицы измерения.После исправления данных обязательно запустим Тестирование и исправление ИБ в конфигураторе с выбранными пунктами «Проверка ссылочной целостности» и «Пересчет итогов». Это критически важно после любой механической «обрезки» файлов DBF.
Теперь разберем, как выполнить полноценную свертку, если типовая обработка Wrap.ert не справляется из-за большого количества кастомных (самописных) регистров и документов. Посмотрим на два основных подхода:
Метод А: Индивидуальная свертка через «Ввод остатков»
Для «переписанной» семерки лучше всего написать собственную процедуру свертки. Она должна работать по следующему алгоритму:
Метод Б: Свертка через «Конвертацию данных» (КД)
Рассмотрим более надежный, хотя и трудоемкий способ — перенос данных в чистую базу. Это позволяет полностью избавиться от «мусора», накопленного годами, и битых ссылок.
.DBF файлах.Если ваша база часто вылетает с ошибками чтения или при поиске по коду, проанализируем состояние индексных файлов. В 1С 7.7 индексы хранятся в файлах с расширением .CDX. Рассмотрим процедуру их «лечения»:
.CDX.Это часто помогает устранить странные вылеты программы, которые не лечатся обычным исправлением кода. Также помните, что для баз объемом более 2 ГБ единственным стабильным решением в долгосрочной перспективе является переход на версию 1С 7.7 для SQL, где ограничения файловой системы не действуют.
Подведем итог: никогда не доверяйте «быстрой обрезке» файлов без пересчета итогов. Всегда начинайте с восстановления справочников и пересчета итогов, а для серьезной оптимизации объема используйте методику переноса остатков в чистую информационную базу.