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

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

При попытке развернуть архив базы данных 1С 7.7 на сервере MS SQL или при запуске информационно-управляющей системы в режиме «Предприятие» пользователи могут столкнуться с критической ошибкой: «Нарушение структуры таблицы 1sconst». При этом в режим «Конфигуратор» вход может выполняться без ошибок, однако штатная процедура «Тестирование и исправление» или попытка выгрузки данных прерываются невосстановимым сбоем.

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

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

В платформе 1С 7.7 архитектура работы с MS SQL Server имеет принципиальное отличие от более современных версий (1С 8.x). Структура физических таблиц базы данных не хранится внутри самой СУБД. Описание всех таблиц, колонок и связей содержится во внешних файлах конфигурации:

  1. 1cv7.md — файл метаданных конфигурации.
  2. 1cv7.dd (или 1cv7.dds для SQL) — словарь данных, сгенерированный платформами 1С на основе файла 1cv7.md.

Таблица _1SCONST (в словаре данных обозначается как 1sconst) является одной из ключевых в 1С 7.7. В ней хранится вся история периодических констант и периодических реквизитов справочников. Ошибка «Нарушение структуры таблицы 1sconst» возникает в следующих случаях:

  1. Рассинхронизация файлов конфигурации и базы SQL: База данных была восстановлена из бэкапа средствами MS SQL Server Management Studio (файлы .bak или .mdf), но каталог базы содержит файл 1cv7.md от другой (новой или неполной) конфигурации. Схема данных в SQL перестает совпадать со словарем 1cv7.dds.
  2. Появление значений NULL: В служебных полях таблицы _1SCONST (таких как OBJID, ID, DATE, DOCID) появились значения NULL в результате аварийного завершения работы сервера или сбоя транзакций. Платформа 1С 7.7 требует строгих значений по умолчанию (нули или пустые строки).
  3. Повреждение индексов или первичных ключей: Нарушена целостность индексов таблицы в СУБД MS SQL.
  4. Блокировка или повреждение файла 1cv7.dds: Файл словаря данных поврежден или установлен в режим «Только для чтения».

Шаг 1. Восстановление корректных файлов метаданных (MD и DD)

Проанализируем наиболее частую ситуацию: разворачивание дампа базы данных на новом сервере. Если развернуть бэкап SQL без использования «родного» файла 1cv7.md, который был создан на момент снимка базы, платформа 1С 7.7 при запуске сравнит структуру таблиц в SQL с файлом 1cv7.dds и выведет сообщение о нарушении структуры.

Рассмотрим порядок действий для исправления расхождения:

  1. Найдите архив каталога базы 1С 7.7, созданный одновременно с резервной копией базы MS SQL.
  2. Поместите оригинальные файлы 1cv7.md и 1cv7.dd (1cv7.dds) в рабочий каталог информационный базы.
  3. Запустите 1С 7.7 в режиме «Конфигуратор» монопольно. Попробуйте внести незначительное изменение (например, добавить комментарий к любой константе) и сохраните конфигурацию. Платформа переформирует файл словаря 1cv7.dds и синхронизирует его с SQL.
  4. Запустите режим «Предприятие».

Важно: Если оригинальный 1cv7.md утерян, а база является типовой, можно попробовать взять 1cv7.md от аналогичной релизной версии конфигурации. Если же база дорабатывалась, восстановление структуры без метаданных потребует ручной сборки реквизитов в Конфигураторе или T-SQL скриптов для сверки колонок.

Шаг 2. Проверка целостности базы на стороне MS SQL Server

Выясним, не связана ли ошибка с физическим повреждением самой таблицы на стороне СУБД MS SQL. Для этого выполним проверку таблицы и целостности всей базы данных.

В MS SQL Server Management Studio выполним команду проверки целостности базы:

DBCC CHECKDB ('Имя_Вашей_Базы') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Если команда DBCC CHECKDB завершилась без ошибок, убедимся, что данные в таблице читаются корректно:

SELECT TOP 100 * FROM _1SCONST;

Если выборка данных проходит успешно, сама таблица физически жива, а проблема заключается исключительно в несовпадении типов колонок или наличии невалидных значений NULL.

Шаг 3. Очистка таблицы от значений NULL

Платформа 1С 7.7 не умеет работать с полями, содержащими NULL. Проанализируем таблицу _1SCONST на наличие невалидных записей с помощью T-SQL запроса:


SELECT * FROM _1SCONST 
WHERE OBJID IS NULL OR ID IS NULL OR DATE IS NULL OR DOCID IS NULL;

Если запрос возвращает строки, их необходимо исправить, заменив NULL на значения по умолчанию (пустые строки нужной длины или 0):


UPDATE _1SCONST SET OBJID = '' WHERE OBJID IS NULL;
UPDATE _1SCONST SET ID = '' WHERE ID IS NULL;
UPDATE _1SCONST SET DOCID = '' WHERE DOCID IS NULL;

Шаг 4. Сравнение структуры таблицы в SQL и файле 1cv7.dds

Если ошибка сохраняется, разберем способ прямого сравнения структуры колонок.

  1. Откроем текстовый файл 1cv7.dds из каталога базы с помощью любого текстового редактора и найдем секцию Table _1SCONST.
  2. В MS SQL Server Management Studio выполним системную процедуру для получения структуры таблицы: EXEC sp_help '_1SCONST';
  3. Сравним состав колонок, типы данных (char, varchar, numeric) и их длину в SQL со словарем 1cv7.dds.
  4. При выявлении расхождений (например, в файле 1cv7.dds реквизит имеет длину 10 символов, а в SQL — 9) приведем колонку в SQL к нужному типу с помощью команды ALTER TABLE: ALTER TABLE _1SCONST ALTER COLUMN OBJID CHAR(10) NOT NULL;

Альтернативный вариант: Перенос данных в новую чистую базу

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

  1. Создадим новую пустую базу данных в MS SQL Server.
  2. Поместим имеющийся файл 1cv7.md в пустую папку и укажем к ней путь в 1С.
  3. Запустим Конфигуратор и сохраним конфигурацию. Платформа 1С создаст в новой базе SQL идеальную структуру всех таблиц, включая _1SCONST.
  4. С помощью T-SQL запроса перенесем данные из поврежденной базы в новую:
    
    INSERT INTO НоваяБаза.dbo._1SCONST
    SELECT * FROM СтараяБаза.dbo._1SCONST;
    
  5. Повторим аналогичный перенос для остальных таблиц базы при необходимости.

Соблюдение соответствия между метаданными 1cv7.md и физическими таблицами СУБД позволяет полностью устранить ошибку структуры таблицы 1sconst и вернуть базу данных в рабочее состояние.

← На главную