При восстановлении информационной базы 1С:Предприятия 7.7 из резервной копии или после инцидентов информационной безопасности (например, повреждения файлов вирусом-шифровальщиком) системные администраторы часто сталкиваются с критической ошибкой: «Нарушена структура таблицы DH...» (например, DH1395, DH2915). Разберем причины возникновения этой неполадки и подробно рассмотрим практические пути ее устранения.
Проанализируем архитектуру хранения метаданных в 1С 7.7. Платформа сверяет описание структуры из файла конфигурации 1Cv7.MD (а также словаря базы данных 1Cv7.DDS) с реальным составом колонок и их типами в таблицах на сервере MS SQL Server.
Префикс таблицы указывает на ее тип: DH означает Document Header (шапка документа), а числовое значение после префикса (например, 1395) — это внутренний идентификатор метаданных соответствующего вида документа в конфигурации. Аналогично таблица табличной части документа имеет префикс DT.
Ошибка нарушения структуры возникает по следующим причинам:
1Cv7.MD от другой или устаревшей версии конфигурации, в которой состав реквизитов документа отличается от структуры таблиц в развернутой базе данных.1Cv7.DDS поврежден или отсутствует, из-за чего платформа не может корректно выполнить сопоставление.CHAR, а не VARCHAR), точность чисел (NUMERIC), а также признак обязательности NOT NULL.Рассмотрим основной вариант решения, когда файл конфигурации 1Cv7.MD поврежден или отличается от таблиц в рабочей базе SQL Server.
1Cv7.MD.Конфигуратор и сохраним структуру метаданных. При первом сохранении в пустой базе 1С сгенерирует актуальный файл словаря данных 1Cv7.DDS, отражающий структуру именно этого 1Cv7.MD.1Cv7.DDS в рабочий каталог проблемной базы.Проанализируем ситуацию, если файлы конфигурации в рабочем каталоге были повреждены или зашифрованы:
NEW_STRU в папке проблемной информационной базы. При штатном сохранении изменений конфигурации платформа создает эту папку для промежуточных данных. Нередко в ней сохраняются неповрежденные копии 1Cv7.MD и 1Cv7.DDS, полностью соответствующие структуре базы в SQL.1Cv7.MD и 1Cv7.DDS на дату последнего успешного бэкапа базы данных.Если точной копии файла 1Cv7.MD нет в наличии, а данные в SQL Server необходимо спасти, разберем по шагам выравнивание полей на уровне СУБД под имеющийся файл конфигурации.
1Cv7.DDS и найдем блок описания проблемной таблицы, например DH1395. Выясним наименование документа и список всех его реквизитов (поля с префиксом SP...).
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DH1395';
1Cv7.DDS со структурой таблицы в базе данных. Выясним, каких полей не хватает в таблице SQL или какие поля имеют неверный тип данных.ALTER TABLE. Помним, что платформа 1С 7.7 требует строгого соблюдения ограничения NOT NULL и значений по умолчанию:
-- Добавление строкового реквизита фиксированной длины (значение по умолчанию - пробелы)
ALTER TABLE DH1395 ADD SP1396 CHAR(10) NOT NULL DEFAULT ' ';
-- Добавление числового реквизита (значение по умолчанию - ноль)
ALTER TABLE DH1395 ADD SP1397 NUMERIC(10, 2) NOT NULL DEFAULT 0;
Если доступ в Конфигуратор рабочей базы открывается без сбоев, но в режиме «1С:Предприятие» возникает ошибка структуры таблицы, применим механизм штатного пересчета метаданных:
Конфигуратор.DH1395).Важно: перед выполнением любых ручных изменений в таблицах на стороне MS SQL Server обязательно создадим полную резервную копию базы данных.