При попытке развернуть архив базы данных 1С 7.7 на сервере MS SQL или при запуске информационно-управляющей системы в режиме «Предприятие» пользователи могут столкнуться с критической ошибкой: «Нарушение структуры таблицы 1sconst». При этом в режим «Конфигуратор» вход может выполняться без ошибок, однако штатная процедура «Тестирование и исправление» или попытка выгрузки данных прерываются невосстановимым сбоем.
Разберем подробнее причины возникновения этой неполадки и проанализируем варианты восстановления работоспособности базы данных.
В платформе 1С 7.7 архитектура работы с MS SQL Server имеет принципиальное отличие от более современных версий (1С 8.x). Структура физических таблиц базы данных не хранится внутри самой СУБД. Описание всех таблиц, колонок и связей содержится во внешних файлах конфигурации:
1cv7.md — файл метаданных конфигурации.1cv7.dd (или 1cv7.dds для SQL) — словарь данных, сгенерированный платформами 1С на основе файла 1cv7.md.Таблица _1SCONST (в словаре данных обозначается как 1sconst) является одной из ключевых в 1С 7.7. В ней хранится вся история периодических констант и периодических реквизитов справочников. Ошибка «Нарушение структуры таблицы 1sconst» возникает в следующих случаях:
.bak или .mdf), но каталог базы содержит файл 1cv7.md от другой (новой или неполной) конфигурации. Схема данных в SQL перестает совпадать со словарем 1cv7.dds.NULL: В служебных полях таблицы _1SCONST (таких как OBJID, ID, DATE, DOCID) появились значения NULL в результате аварийного завершения работы сервера или сбоя транзакций. Платформа 1С 7.7 требует строгих значений по умолчанию (нули или пустые строки).1cv7.dds: Файл словаря данных поврежден или установлен в режим «Только для чтения».Проанализируем наиболее частую ситуацию: разворачивание дампа базы данных на новом сервере. Если развернуть бэкап SQL без использования «родного» файла 1cv7.md, который был создан на момент снимка базы, платформа 1С 7.7 при запуске сравнит структуру таблиц в SQL с файлом 1cv7.dds и выведет сообщение о нарушении структуры.
Рассмотрим порядок действий для исправления расхождения:
1cv7.md и 1cv7.dd (1cv7.dds) в рабочий каталог информационный базы.1cv7.dds и синхронизирует его с SQL.Важно: Если оригинальный 1cv7.md утерян, а база является типовой, можно попробовать взять 1cv7.md от аналогичной релизной версии конфигурации. Если же база дорабатывалась, восстановление структуры без метаданных потребует ручной сборки реквизитов в Конфигураторе или T-SQL скриптов для сверки колонок.
Выясним, не связана ли ошибка с физическим повреждением самой таблицы на стороне СУБД MS SQL. Для этого выполним проверку таблицы и целостности всей базы данных.
В MS SQL Server Management Studio выполним команду проверки целостности базы:
DBCC CHECKDB ('Имя_Вашей_Базы') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Если команда DBCC CHECKDB завершилась без ошибок, убедимся, что данные в таблице читаются корректно:
SELECT TOP 100 * FROM _1SCONST;
Если выборка данных проходит успешно, сама таблица физически жива, а проблема заключается исключительно в несовпадении типов колонок или наличии невалидных значений 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;
Если ошибка сохраняется, разберем способ прямого сравнения структуры колонок.
1cv7.dds из каталога базы с помощью любого текстового редактора и найдем секцию Table _1SCONST.
EXEC sp_help '_1SCONST';
char, varchar, numeric) и их длину в SQL со словарем 1cv7.dds.1cv7.dds реквизит имеет длину 10 символов, а в SQL — 9) приведем колонку в SQL к нужному типу с помощью команды ALTER TABLE:
ALTER TABLE _1SCONST ALTER COLUMN OBJID CHAR(10) NOT NULL;
Если структура таблицы повреждена слишком сильно, заменим старую структуру новой, перенеся только физические данные:
1cv7.md в пустую папку и укажем к ней путь в 1С._1SCONST.
INSERT INTO НоваяБаза.dbo._1SCONST
SELECT * FROM СтараяБаза.dbo._1SCONST;
Соблюдение соответствия между метаданными 1cv7.md и физическими таблицами СУБД позволяет полностью устранить ошибку структуры таблицы 1sconst и вернуть базу данных в рабочее состояние.