Работа с платформой 1С:Предприятие 7.7 в формате DBF часто сопровождается техническими вызовами, когда объем данных приближается к критическим отметкам. Одной из самых пугающих ситуаций является "пропадание" документов из журналов при физическом наличии проводок в базе. Разберем детально, почему это происходит, как восстановить работоспособность системы и какими способами можно отодвинуть предел переполнения таблиц 1SENTRY.DBF, 1SJOURN.DBF и других.
Рассмотрим ситуацию, когда при открытии журнала документов пользователь видит пустой список, хотя проводки в базе существуют, но выглядят "отвязанными" от своих документов. Часто штатная переиндексация через Конфигуратор не приносит результата. Выясним причину этого поведения. Дело в том, что штатный механизм переиндексации может некорректно обрабатывать уже поврежденные файлы индексов .cdx, просто обновляя их структуру, но не исправляя логические разрывы.
Решение проблемы через ручное удаление индексов:
Проанализируем ограничения, с которыми сталкивается 1С 7.7. Основной проблемой является файл 1SENTRY.DBF, где хранятся проводки. Существует несколько порогов:
CodeBase Error #: -310 возникает, если количество строк в таблице превышает 16 777 215, даже если размер файла меньше 2 Гб.Если ваша база приближается к этим значениям, стоит рассмотреть применение патча Kernel3x или заплатки от hogik (Fix2GB). Эти решения перехватывают обращения к файловой системе и позволяют программе корректно работать с файлами размером до 4 Гб, используя беззнаковые смещения.
Когда свертка базы невозможна или не дает нужного эффекта, мы можем прибегнуть к изменению структуры таблиц для экономии места. Посмотрим, как это сделать без риска потери данных. Часто ресурсы в регистрах имеют избыточную точность, например, Число.15.2. Если такие огромные суммы не используются, разрядность можно уменьшить.
Алгоритм безопасного изменения разрядности:
1cv7.md и 1cv7.dd в пустой папке..dd.RG*, RA*) в основной базе, подгоняя их под новые размеры.1cv7.md и 1cv7.dd в основной базе на подготовленные в "пустышке"..cdx и выполним монопольный вход.Важное замечание: При уменьшении разрядности строковых полей (например, "Содержание операции") экономия места будет мгновенной, так как DBF резервирует фиксированное количество байт под каждую строку независимо от ее заполнения.
Проанализируем еще один источник "раздувания" базы — накопление записей с нулевыми значениями ресурсов в таблицах итогов (файлы RG*). Со временем таких записей становится тысячи, они не несут полезной информации, но занимают место и замедляют расчеты. Мы можем очистить их с помощью прямого запроса к базе через OLEDB.
Рассмотрим пример кода для удаления таких записей:
Процедура ОчиститьНулевыеИтоги()
Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Exclusive=Yes;Mode=ReadWrite;Collating Sequence=MACHINE";
ДБ = СоздатьОбъект("OLEDBData");
Если ДБ.Соединение(Соединение) = 0 Тогда
Возврат;
КонецЕсли;
Запрос = ДБ.СоздатьКоманду();
// Пример для регистра "ОстаткиТМЦ"
ТекстЗапроса ="
|DELETE FROM $РегистрИтоги.ОстаткиТМЦ
|WHERE $РегистрИтоги.ОстаткиТМЦ.Количество = 0
| AND $РегистрИтоги.ОстаткиТМЦ.Сумма = 0";
Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
Предупреждение("Очистка завершена!");
КонецПроцедуры
После выполнения такой очистки обязательно нужно выполнить "Упаковку таблиц" в режиме Тестирования и исправления ИБ, чтобы физически высвободить место, помеченное как удаленное.
Иногда при просмотре 1SENTRY.DBF через сторонние утилиты можно заметить, что записи за текущий год находятся в середине или начале файла, а не в конце. Не стоит пугаться — это особенность движка 1С 7.7 и формата DBF. Программа повторно использует место, которое занимали ранее удаленные записи (помеченные "звездочкой"). Это механизм самоочистки, который предотвращает бесконечный рост файла при частом перепроведении документов. Это "зеленая технология" платформы, позволяющая экономить дисковое пространство.
Подводя итог, можно сказать, что работа с большими объемами в 1С 7.7 требует внимательного отношения к индексам и физическому размеру файлов. Если штатные средства не помогают:
RG и RA.Помните, что перед любыми манипуляциями с файлами DBF или структурой MD-файла создание резервной копии является обязательным этапом работы.