Как исправить ошибку Codebase Error - 70 в файловых базах 1С:Предприятие 7.7

Программист 1С v7.7
← На главную

Рассмотрим ситуацию, когда при работе с файловой базой 1С:Предприятие 7.7 возникает критический сбой с кодом Codebase Error - 70. Эта ошибка относится к категории низкоуровневых проблем движка CodeBase, который 1С использует для управления таблицами в формате DBF и индексными файлами CDX. Чаще всего проблема проявляется при получении обновлений из центральной базы, выполнении тяжелых отчетов или в моменты массовой записи движений регистров.

В этой статье мы подробно разберем природу данной ошибки, проанализируем структуру поврежденных файлов и изучим несколько методик восстановления работоспособности системы — от простых манипуляций с индексами до низкоуровневого исправления заголовков DBF.

Выясним причину: что означает ошибка - 70?

Для начала проанализируем техническую суть сообщения. Ошибка - 70 в библиотеке CodeBase интерпретируется как Reading File. Она возникает в тот момент, когда движок пытается прочитать определенную запись, но сталкивается с физическим препятствием. Проанализируем возможные варианты:

  1. Неожиданный конец файла (EOF): Индексный файл .CDX содержит ссылку на запись номер 100, но в самом .DBF файле физически присутствует только 90 записей.
  2. Повреждение заголовка (Header): В служебной области DBF указано неверное количество записей или неправильная длина одной записи.
  3. "Фантомные" или пустые записи: В конце файла из-за сбоя транзакции появились записи, заполненные нулями или пробелами, которые нарушают логику чтения d4go (внутренней функции движка).

Разберем описание функции d4go, на которую опирается 1С при работе с данными:


int d4go( DATA4 *data, long recordNumber )
// Функция d4go считывает указанную запись в буфер.
// Чтобы операция прошла успешно, recordNumber должен быть
// > 0 и <= d4recCount (количеству записей в заголовке).

Если это условие нарушается или данные в позиции recordNumber не соответствуют формату, система выдает ошибку - 70.

Шаг 1: Первичная диагностика и работа с индексами

Первое, что мы должны сделать — исключить проблему повреждения самих индексов. Посмотрим на примере файла RG9495.CDX, который упоминался в обсуждении. Файлы с префиксом RG — это таблицы остатков регистров. Они являются производными от таблиц движений (RA).

Попробуем стандартный метод восстановления:

  1. Полностью закроем все сессии 1С.
  2. Сделаем резервную копию всей папки с базой данных (обязательно!).
  3. Удалим файл RG9495.CDX (только индекс!).
  4. Запустим 1С в монопольном режиме. Программа предложит переиндексировать базу.

Если после этого ошибка сменилась с RG9495.CDX на RG9495.DBF, значит, проблема гораздо глубже и поврежден сам файл данных.

Шаг 2: Анализ и исправление структуры DBF

Когда простая переиндексация не помогает, нам необходимо изучить заголовок DBF файла. Рассмотрим структуру заголовка, на которую ориентируется движок CodeBase:

Проанализируем ситуацию: если в результате сбоя питания или сетевого лага 1С успела инкрементировать счетчик записей в байтах 04-07, но физически не дописала данные в конец файла, возникнет ошибка - 70.

Как исправить заголовок:

  1. Воспользуемся любым DBF-вьювером или HEX-редактором.
  2. Проверим соответствие: (Размер_файла - Положение_первой_записи) / Длина_одной_записи. Это число должно в точности совпадать с тем, что записано в байтах 04-07.
  3. Если число записей в заголовке больше, чем физически влезает в файл, нужно уменьшить значение в заголовке до реального.

Шаг 3: Восстановление итогов регистров (RG)

Если поврежденный файл начинается на RG (например, RG9495.DBF), у нас есть преимущество. В архитектуре 1С 7.7 таблицы RG хранят только итоги на начало месяца. Сами данные о движениях лежат в файлах RA.

Рассмотрим алгоритм безопасного пересчета:

  1. Удаляем поврежденные RGxxxx.DBF и RGxxxx.CDX.
  2. Запускаем Конфигуратор.
  3. Выбираем меню "Администрирование" — "Тестирование и исправление".
  4. Устанавливаем галочку только на пункт "Пересчет итогов".

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

  1. Создаем пустую папку и копируем туда только 1Cv7.MD и 1Cv7.DD.
  2. Запускаем 1С, она создаст пустые DBF файлы.
  3. Берем чистый RGxxxx.DBF из этой новой базы и подменяем им битый файл в рабочей базе.
  4. После этого запускаем 1С и делаем пересчет итогов только за последний период. Это восстановит актуальные остатки.

Шаг 4: Удаление пустых записей вручную

Как отметил автор темы, иногда проблема кроется в "пустых" записях в конце таблицы. В DBF-вьювере они могут отображаться как строки, заполненные символами NULL или пробелами, при этом программа может помечать их "зеленой галочкой" (корректные, но пустые).

Проанализируем, почему это мешает: 1С ожидает увидеть в поле PERIOD валидную дату начала месяца, а в полях SPxxxx — числовые значения. Наличие пустых строк в середине или конце файла сбивает механизмы агрегации.

Решение: Используйте утилиты для работы с DBF (например, DBF Commander или Clipper-утилиты), чтобы физически удалить записи, в которых ключевые поля (период, измерения) не заполнены. После удаления обязательно выполните упаковку (Pack) таблицы, чтобы физически перестроить файл.

Профилактика появления ошибки - 70

Чтобы в будущем не сталкиваться с разрушением файлов CodeBase, рекомендуем выполнить следующие настройки на сервере и рабочих станциях:

Используя предложенные методики, мы сможем восстановить базу данных даже при серьезных повреждениях структуры таблиц, минимизировав время простоя бизнеса.

← На главную