Ошибка «Нарушена целостность файла 1sjourn.dbf» в платформе 1С:Предприятие 7.7 делает работу с документами и журналами невозможной. Таблица 1SJOURN.DBF является ключевой в архитектуре файловых баз 1С 7.7: именно в ней хранятся заголовочные данные всех документов — дата, время, номер, вид документа, уникальный идентификатор IDDOC, признак проведения (поле CLOSED) и флаг пометки на удаление (поле ISMARK).
Простое удаление этого файла или стандартное Тестирование и Исправление (ТиИ) без подготовки приведет к полной потере информации о проведенности документов и связей между объектами. Разберем по шагам причины этой ошибки, способы первичной диагностики и алгоритмы полного восстановления поврежденного файла.
Прежде чем приступать к восстановительным работам, проанализируем, в результате чего произошел сбой. Это позволит выбрать правильный инструмент исправления:
1SJOURN.CDX): данные в самой таблице DBF остаются целыми, но индекс рассогласован, из-за чего платформа выдает ошибку целостности.1CV7.MD): если в конфигураторе менялись общие реквизиты или журналы документов, структура 1SJOURN.DBF перестает соответствовать словарю данных 1CV7.DD.Перед выполнением любых манипуляций полностью зафиксируем текущее состояние базы данных. Скопируем каталог с базой целиком в отдельное безопасное место. Нам понадобятся все файлы *.DBF, *.CDX и файл метаданных 1CV7.MD.
Часто ошибка целостности связана не с самим файлом данных, а с его индексом. Для проверки разберем простой способ пересоздания индексов:
1SJOURN.CDX (или все файлы с расширением .CDX)..CDX файлы заново.Если после этого база успешно открывается, проблема заключалась лишь в индексах.
Если переиндексация не помогла, проанализируем содержимое 1SJOURN.DBF с помощью любого DBF-редактора или HEX-редактора. Посмотрим, соответствует ли структура файла словарю данных 1CV7.DD:
1CV7.DD в текстовом редакторе и найдем описание таблицы 1SJOURN. Там указан точный перечень полей, их типы и длина.1SJOURN.DBF в соответствие с 1CV7.DD через специализированные редакторы DBF.0x1A), после чего повторно запустим монопольную переиндексацию.В случаях, когда файл 1SJOURN.DBF разрушен полностью или содержит нечитаемую «кашу», восстановим его содержимое на основе таблиц шапок документов DH*.DBF и регистров. Рассмотрим подробный алгоритм решения задачи:
Информация о каждом документе расщеплена по отдельным таблицам:
DHxxxx.DBF — шапка документа конкретного вида (где xxxx — ID вида документа). В ней хранится реквизит IDDOC, определяющий уникальность документа.1SOPER.DBF — операции и проводки бухгалтерского учета.RA*.DBF и RG*.DBF — таблицы движений и итогов регистров оперативного учета.1SCONST.DBF — таблица периодических реквизитов.SYSLOG\1cv7.mlg — текстовый журнал регистрации операций.Проанализируем пошаговый алгоритм для создания обработки-восстановителя:
1CV7.DD или из заведомо исправной пустой базы той же конфигурации.DH*.DBF по всем видам документов, считывая поле IDDOC.Чтобы понять, был ли проведен документ, проверим наличие движений по его IDDOC в таблицах проводок 1SOPER.DBF или таблицах движений регистров RA*.DBF. Если документ делал записи в регистры или проводки, устанавливаем значение CLOSED = 1, иначе — 0.
Для документов, не делающих движений по регистрам, признак проведения можно вытянуть из таблицы периодических реквизитов 1SCONST.DBF (проверив, устанавливал ли документ значение периодических реквизитов) или из журнала регистрации SYSLOG\1cv7.mlg.
DATE_TIME_IDDOC, DATE, TIME) извлекаем из дат проведенных операций в 1SOPER, дат движений в RA* или из лога 1cv7.mlg.DH*.DBF в новую таблицу 1SJOURN.DBF.Пример логики поиска проведенности документа в таблице проводок 1С 7.7 на языке 1С:
// Пример логики проверки наличия движений документа по таблице операций (1SOPER)
БазаОпер = СоздатьОбъект("XBase");
БазаОпер.ОткрытьФайл(КаталогИБ() + "1SOPER.DBF");
БазаОпер.ТекущийИндекс("IDDOC");
Если БазаОпер.Найти(ИскомыйIDDOC) = 1 Тогда
// Документ имеет проводки, следовательно был проведен
ДокументПроведен = 1;
Иначе
ДокументПроведен = 0;
КонецЕсли;
БазаОпер.Закрыть();
Рассмотрим дополнительные варианты решения, если ручное восстановление затруднено:
1SJOURN.DBF из него. В этом случае придется вручную перепровести или заново ввести только те документы, которые создавались за последний день.1SJOURN.DBF на момент до возникновения сбоя.Соблюдение предложенного алгоритма позволяет полностью восстановить работу базы данных 1С 7.7 даже при серьезных повреждениях таблицы журналов документов.