При аварийном завершении работы, отключении питания или сбоях локальной сети архивная база данных 1С:Предприятия 7.7 (формат DBF) может перестать открываться. При попытке запуска, смены кодовой страницы или проведения тестирования и исправления (ТиИ) платформа выдает системную ошибку: «Таблица - [ИМЯ_ТАБЛИЦЫ]. Длина файла не соотвествует количеству и длине записей». Чаще всего сбою подвержены таблицы бухгалтерских операций (1SOPER), проводок (1SENTRY), итогов (1SBKTTL) и отборов (1SACCSEL, 1SSBSEL).
Разберем по шагам, почему возникает эта ошибка, как классифицировать поврежденные таблицы и какими способами можно восстановить работоспособность информационной базы.
Выясним причину сбоя на физическом уровне. Каждый корректный DBF-файл строится по строгой формуле расчета размера:
Размер файла = Длина заголовка + (Количество записей * Длина одной записи) + 1 байт (символ конца файла 0x1A)
В заголовке DBF хранятся служебные байты: число записей, длина самого заголовка и длина одной строки данных. Если процесс 1С был прерван в момент записи или диск выдал ошибку, заголовок файла не обновляется вовремя либо файл обрезается. В результате платформа 1С 7.7 при проверке целостности видит расхождение между фактическим размером файла на диске и математическим расчетом из заголовка, после чего блокирует доступ.
Прежде чем приступать к восстановлению, проанализируем, какие таблицы повреждены. В структуре 1С 7.7 таблицы делятся на две принципиальные категории:
К ним относятся 1SBKTTL, 1SBKTTLC (бухгалтерские итоги), 1SACCSEL, 1SSBSEL (таблицы отбора счетов и субконто), а также таблицы остатков регистров оперативного учета (RG*, RA*). В этих файлах не содержится уникальных первичных документов. Если они повреждены, их можно очистить до нулевого состояния (оставив пустую структуру), после чего платформа восстановит данные автоматически с помощью пересчета итогов.
К ним относятся 1SOPER (операции), 1SENTRY (бухгалтерские проводки), 1SJOURN (журнал документов), SC* (справочники), DH* и DT* (шапки и табличные части документов). Удалять или обнулять эти таблицы нельзя, так как в них хранятся введенные пользователями данные. Их структуру необходимо восстанавливать с сохранением записей.
Перед выполнением любых низкоуровневых операций обязательно выполним подготовительные действия:
*.CDX из рабочей директории базы. Индексы часто разрушаются вместе с таблицами и мешают диагностике. При монопольном запуске конфигуратора или базы 1С автоматически перестроит индексы заново.Рассмотрим самый быстрый способ восстановления таблиц без потери данных. Большинство специализированных редакторов таблиц xBase (например, DBF Commander, DBF Viewer Plus, CDBF) при открытии и последующей упаковке/сохранении автоматически пересчитывают заголовок файла:
1SOPER.DBF или 1SENTRY.DBF) в DBF-редакторе.0x1A.Если автоматические утилиты не справляются, разберем ручной алгоритм вычисления и правки структуры в шестнадцатеричном редакторе (HEX-editor):
0x04–0x07 (4 байта, порядок Little-Endian) — текущее записанное количество записей.0x08–0x09 (2 байта) — длина заголовка (Header Length).0x0A–0x0B (2 байта) — длина одной записи (Record Length).Количество = (Размер файла - Длина заголовка - 1) / Длина одной записи
0x04.1A.Если заголовок сильно поврежден или повреждена схема полей, применим метод выгрузки в эталонную структуру:
1Cv7.MD и словарем данных 1Cv7.DDS.APPEND FROM. При этом поврежденные битые байты будут пропущены, а валидные записи скопированы.Для таблиц бухгалтерских итогов (1SBKTTL, 1SBKTTLC) и отборов (1SACCSEL, 1SSBSEL) оптимальным решением является их сброс:
1SBKTTL.DBF, 1SACCSEL.DBF, 1SSBSEL.DBF на пустые файлы аналогичной структуры из чистой базы (или очистим все записи, сохранив только заголовок).1SENTRY и полностью заново сформирует все записи в таблицах остатков и отборов.Если при открытии архивной базы 1С 7.7 на современной операционной системе возникает сопутствующая ошибка «Порядок сортировки, установленный для базы данных, отличается от системного», для разового входа и просмотра данных создадим в каталоге базы пустой текстовый файл с именем OrdNoChk.prm. Это отключит проверку соответствия кодовых страниц и позволит беспрепятственно открыть базу для просмотра.