Как исправить ошибку «Нарушена структура таблицы DH...» в 1С 7.7 на MS SQL Server?

Системный администратор 1С v7.7 IT и автоматизация бизнеса
← На главную

При восстановлении информационной базы 1С:Предприятия 7.7 из резервной копии или после инцидентов информационной безопасности (например, повреждения файлов вирусом-шифровальщиком) системные администраторы часто сталкиваются с критической ошибкой: «Нарушена структура таблицы DH...» (например, DH1395, DH2915). Разберем причины возникновения этой неполадки и подробно рассмотрим практические пути ее устранения.

Причины возникновения ошибки

Проанализируем архитектуру хранения метаданных в 1С 7.7. Платформа сверяет описание структуры из файла конфигурации 1Cv7.MD (а также словаря базы данных 1Cv7.DDS) с реальным составом колонок и их типами в таблицах на сервере MS SQL Server.

Префикс таблицы указывает на ее тип: DH означает Document Header (шапка документа), а числовое значение после префикса (например, 1395) — это внутренний идентификатор метаданных соответствующего вида документа в конфигурации. Аналогично таблица табличной части документа имеет префикс DT.

Ошибка нарушения структуры возникает по следующим причинам:

  1. Несоответствие версии файла конфигурации и базы SQL: подставлен файл 1Cv7.MD от другой или устаревшей версии конфигурации, в которой состав реквизитов документа отличается от структуры таблиц в развернутой базе данных.
  2. Повреждение файлов словаря: файл 1Cv7.DDS поврежден или отсутствует, из-за чего платформа не может корректно выполнить сопоставление.
  3. Несовпадение параметров полей: 1С 7.7 строго проверяет длину строковых полей (используется строго CHAR, а не VARCHAR), точность чисел (NUMERIC), а также признак обязательности NOT NULL.

Способ 1. Восстановление метаданных через создание эталонной структуры

Рассмотрим основной вариант решения, когда файл конфигурации 1Cv7.MD поврежден или отличается от таблиц в рабочей базе SQL Server.

  1. Создадим новую пустую базу данных на сервере MS SQL Server с требуемыми параметрами сортировки (Collation).
  2. Подключим к этой пустой базе имеющийся у нас наиболее свежий файл конфигурации 1Cv7.MD.
  3. Запустим базу в режиме Конфигуратор и сохраним структуру метаданных. При первом сохранении в пустой базе 1С сгенерирует актуальный файл словаря данных 1Cv7.DDS, отражающий структуру именно этого 1Cv7.MD.
  4. Скопируем сформированный файл 1Cv7.DDS в рабочий каталог проблемной базы.
  5. Если версии метаданных совпадут полностью, ошибка исчезнет при штатном запуске базы.

Способ 2. Поиск резервных копий метаданных в NEW_STRU или VSS

Проанализируем ситуацию, если файлы конфигурации в рабочем каталоге были повреждены или зашифрованы:

  1. Проверим наличие каталога NEW_STRU в папке проблемной информационной базы. При штатном сохранении изменений конфигурации платформа создает эту папку для промежуточных данных. Нередко в ней сохраняются неповрежденные копии 1Cv7.MD и 1Cv7.DDS, полностью соответствующие структуре базы в SQL.
  2. Проверим теневые копии тома (Volume Shadow Copy Service, VSS) на сервере. Если служба была активна, восстановим оригинальные файлы 1Cv7.MD и 1Cv7.DDS на дату последнего успешного бэкапа базы данных.

Способ 3. Выравнивание структуры таблиц вручную через SQL Server Management Studio

Если точной копии файла 1Cv7.MD нет в наличии, а данные в SQL Server необходимо спасти, разберем по шагам выравнивание полей на уровне СУБД под имеющийся файл конфигурации.

  1. Откроем текстовым редактором файл 1Cv7.DDS и найдем блок описания проблемной таблицы, например DH1395. Выясним наименование документа и список всех его реквизитов (поля с префиксом SP...).
  2. Выполним запрос к системным представлениям в SQL Server Management Studio для анализа фактической структуры таблицы:
    
    SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'DH1395';
    
  3. Сопоставим поля из файла 1Cv7.DDS со структурой таблицы в базе данных. Выясним, каких полей не хватает в таблице SQL или какие поля имеют неверный тип данных.
  4. Добавим недостающие поля через команду 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;
    

Способ 4. Принудительная реструктуризация через Конфигуратор

Если доступ в Конфигуратор рабочей базы открывается без сбоев, но в режиме «1С:Предприятие» возникает ошибка структуры таблицы, применим механизм штатного пересчета метаданных:

  1. Откроем конфигурацию в режиме Конфигуратор.
  2. Найдем в дереве метаданных документ, соответствующий идентификатору проблемной таблицы (например, DH1395).
  3. Добавим в шапку этого документа любой временный реквизит произвольного типа (например, числовой).
  4. Сохраним изменения конфигурации. Платформа 1С 7.7 при сохранении выполнит принудительную реструктуризацию и приведет физическую таблицу документа на SQL Server к стандарту платформы.
  5. Удалим добавленный временный реквизит и сохраним конфигурацию повторно.

Важно: перед выполнением любых ручных изменений в таблицах на стороне MS SQL Server обязательно создадим полную резервную копию базы данных.

← На главную