Проблема раздувания файла 1SBKTTL.DBF является одной из самых критических для баз данных на платформе 1С:Предприятие 7.7. Этот файл отвечает за хранение итогов бухгалтерского учета (остатков и оборотов). Поскольку формат DBF имеет жесткое ограничение на размер одного файла в 2 Гигабайта, достижение этого порога приводит к полной остановке работы системы, ошибкам записи и повреждению данных. Разберем подробно, почему это происходит и как эффективно очистить базу, не прибегая к радикальным мерам без необходимости.
Для начала проанализируем, как 1С 7.7 работает с итогами. Таблица 1SBKTTL хранит данные в разрезе периодов (месяцев), счетов и субконто. Главная проблема заключается в «протаскивании» остатков. Если по какому-либо счету или конкретной комбинации субконто висит хотя бы минимальный остаток (даже копейка), 1С будет создавать новую запись в этой таблице для каждого последующего месяца, даже если движения по счету давно прекратились.
Ситуация усугубляется, если на счете используется несколько видов субконто с типом Справочник, имеющим тысячи элементов (например, «Контрагенты», «Договоры» или «Партии»). Комбинаторика этих аналитик создает огромное количество уникальных записей, которые дублируются из месяца в месяц.
Прежде чем переходить к техническим утилитам, проанализируем ситуацию глазами бухгалтера. Рассмотрим отчет Оборотно-сальдовая ведомость (ОСВ). Нам нужно найти счета, по которым «висит» сальдо, которое не должно там находиться.
1SBKTTL будет расти бесконечно.Если визуальный анализ ОСВ не дал быстрых результатов, перейдем к анализу самого файла. Для этого можно воспользоваться любой утилитой для просмотра DBF-файлов или, если база переведена на SQL, выполнить прямой запрос.
В таблице 1SBKTTL нас интересуют следующие поля:
ACCID — идентификатор счета.CURRID — идентификатор валюты.KIND — тип итога (остаток или оборот).SUBK1, SUBK2, SUBK3 — идентификаторы значений субконто.Проанализируем ситуацию: если мы видим тысячи записей с одним и тем же ACCID, но разными значениями субконто, которые тянутся из периода в период — мы нашли причину. Как правило, это счета с аналитикой по документам (например, «Заказы» или «Партии»), где расчеты не закрыты в ноль, и система вынуждена хранить историю по каждой сделке годами.
Одним из самых эффективных методов уменьшения размера 1SBKTTL является перевод некоторых субконто в режим «Только обороты». Посмотрим, как это работает.
Когда субконто помечено как оборотное, 1С перестает хранить остатки в разрезе этого субконто в таблице итогов. Хранятся только обороты за конкретный месяц. Это означает, что записи по этому субконто не будут копироваться в следующий месяц («протаскиваться»), если в нем не было движений.
Важные нюансы:
Выяснив причину раздувания, проанализируем план действий по исправлению:
Если найдены забалансовые счета с односторонним движением, необходимо ввести документы, закрывающие эти остатки. Как только сальдо по конкретной комбинации субконто станет нулевым, после очередного пересчета итогов 1С перестанет тиражировать эти записи в будущие периоды.
Просто удалить документы или закрыть счета недостаточно для физического уменьшения файла DBF. Выполним следующие действия:
1SBKTTL от ставших ненужными нулевых остатков.Если все вышеперечисленные методы не помогают уложиться в лимит 2 Гб, единственным выходом (оставаясь на DBF) остается свертка базы. Рассмотрим этот процесс:
После свертки файл 1SBKTTL очищается от всей многолетней истории и уменьшается в разы, так как исчезают записи итогов за все прошлые месяцы.
Рассмотрим ситуацию, когда архитектура базы требует хранения огромного объема аналитики. В этом случае ограничение формата DBF будет возникать постоянно. Переход на MS SQL Server снимает ограничение в 2 Гб на размер таблицы. Хотя это не отменяет необходимости следить за гигиеной данных (так как огромные таблицы итогов замедляют отчеты), это избавляет от фатальных ошибок и внезапных остановок системы. Как отметил автор исходной темы, переход на SQL позволил базе продолжить работу даже при размере файла выше критического, что дало время на спокойный анализ и последующую оптимизацию.
Подведем итог: для борьбы с раздуванием 1SBKTTL проанализируем забалансовые счета, проверим полноту закрытия аналитических счетов, рассмотрим возможность использования оборотных субконто и не забудем про регулярное обслуживание базы через «Тестирование и исправление».