При выполнении процедуры «Тестирование и исправление информационной базы» (ТиИ) в среде 1С:Предприятие 7.7 администраторы и программисты нередко сталкиваются с диагностическим сообщением: «Проверка таблицы журнала документов. Запись [Номер]. Нет ответной заголовочной части». Разберем детально, почему возникает данная коллизия, как устроено хранение документов в таблицах базы данных и как корректно восстановить целостность информационной базы.
Чтобы понять суть ошибки, проанализируем структуру таблиц реляционной модели данных 1С 7.7. Информация по каждому документу физически распределена между несколькими связанными файлами:
1SJOURN.DBF — общий журнал документов. Содержит системную информацию: дату и время документа, флаг проведения, признак удаления, внутренний идентификатор документа IDDOC и идентификатор вида документа IDDOCDEF.DH<IDDOCDEF>.DBF — заголовочная часть (шапка конкретного вида документа). В ней хранятся общие реквизиты документа (контрагент, склад, организация, сумма и т. д.), а связь с журналом осуществляется по уникальному шестнадцатеричному полю IDDOC.DT<IDDOCDEF>.DBF — табличная часть (строки документа)._1SOPER, _1SENTRY, RA*, RG*).Сообщение ТиИ сигнализирует о нарушении ссылочной целостности: в таблице журнала 1SJOURN присутствует строка документа, но в соответствующей таблице шапки DH* запись с таким же значением IDDOC отсутствует. При этом проводки и движения документа могут оставаться в базе и попадать в отчеты, порождая фантомные данные.
Главная ошибка при первичном анализе — поиск значения Запись 1931 в поле IDDOC. Важно понимать: число в сообщении об ошибке означает физический порядковый номер строки (RecNo) внутри файла 1SJOURN.DBF, а не внутренний код документа.
Посмотрим, как правильно локализовать сбойную запись:
1SJOURN.DBF специализированным редактором DBF-таблиц.IDDOC (внутренний идентификатор документа) и IDDOCDEF (тип документа).1cv7.dd в текстовом редакторе, находим блок с нужным видом документа и выясняем имя соответствующей таблицы шапки (например, DH1234).IDDOC в таблице DH1234.DBF.Для прямого поиска расхождений между журналом и таблицами документов можно выполнить SQL-запрос следующего вида:
SELECT IDDOC, IDDOCDEF
FROM 1SJOURN
WHERE IDDOC NOT IN (SELECT IDDOC FROM DH1234)
AND IDDOCDEF = 1234;
Если документ является неактуальным, лишним или его данные невозможно восстановить, проще всего очистить журнал средствами платформы:
1SJOURN и очистит связанные движения.Если сбойный документ необходим для учета, его шапку можно восстановить вручную или из резервной копии:
DH* строку с нужным IDDOC и переносим её в рабочую таблицу с помощью DBF-редактора, соблюдая оригинальную кодировку Windows-1251 (или DOS-866).DH* добавляем новую пустую запись и заполняем в ней только поле IDDOC (значением из журнала 1SJOURN). После этого запускаем 1С в режиме «Предприятие», находим документ в общем журнале, открываем его форму, заново заполняем недостающие реквизиты шапки и перепроводим документ.В ряде случаев ошибка вызвана не физическим отсутствием данных, а повреждением индексных файлов таблицы:
.CDX.