В процессе работы с клиент-серверной базой данных «1С:Предприятия» иногда возникает критическая ситуация: при открытии общего модуля, модуля объекта или формы исходный текст превращается в набор нечитаемых символов («кракозябр») или обрывается на середине строки. Простое комментирование поврежденного фрагмента и ручная вставка оригинального кода, как правило, не помогают и приводят к возникновению новых внутренних ошибок на уровне СУБД при попытке сохранения или выполнения операций.
Разберем природу возникновения этой неполадки и подробно рассмотрим последовательность действий по полному восстановлению работоспособности конфигурации.
Платформа «1С:Предприятие» хранит исходные тексты программных модулей и описание структуры метаданных в системных таблицах СУБД (в частности, dbo.Config и dbo.ConfigSave для Microsoft SQL Server). Данные хранятся в виде сжатых бинарных потоков (с использованием алгоритмов zlib/Deflate) в кодировке UTF-8.
Проанализируем ключевые причины возникновения сбоя:
dbo.Config. Если в момент фиксации новой версии произошел сбой, ссылки на объекты метаданных могут оказаться частично перезаписанными или поврежденными.Обычное ручное редактирование поврежденного текста модуля через конфигуратор не устраняет физическое повреждение служебных блоков в таблицах метаданных. Надежным методом является полная перезапись структуры через эталонный файл конфигурации.
Разберем процесс восстановления по шагам:
.dt в поврежденном состоянии не рекомендуется, так как процесс может прерваться с ошибкой формата потока..cf). Его можно выгрузить из резервной копии рабочей базы до сбоя или из чистой базы той же версии конфигурации через меню Конфигурация → Сохранить конфигурацию в файл..cf и подтвердим обновление конфигурации базы данных клавишей F7.Часто поврежденные бинарные блоки метаданных кэшируются на стороне сервера приложений, что мешает корректной работе даже после манипуляций в конфигураторе. Проведем очистку серверного кэша:
C:\Program Files\1cv8\srvinfo\ или C:\ProgramData\1C\1cv8\).reg_1541) подкаталоги кэша сеансов и служебных контекстов (папки, имена которых начинаются с snccntx) и удалим их содержимое. Системные конфигурационные файлы кластера (1cv8wsrv.lst, 1cv8reg.lst) удалять не нужно.Если конфигуратор не дает применить изменения или завершается аварийно при попытке сохранения, проанализируем состояние таблиц метаданных на сервере SQL.
Разберем скрипт очистки незавершенных транзакционных записей и временных таблиц сохранения:
-- Удаляем зависшие маркеры фиксации динамических обновлений
DELETE FROM dbo.Config WHERE FileName IN ('commit', 'dynamicCommit');
-- Очищаем таблицу несохраненных изменений конфигуратора
TRUNCATE TABLE dbo.ConfigSave;
После выполнения запроса в среде SQL Server Management Studio откроем Конфигуратор и выполним пункт меню Конфигурация → Конфигурация базы данных → Вернуться к конфигурации БД, после чего заново применим структуру.
Если ошибки продолжают возникать при обращении к базе, необходимо исключить наличие поврежденных страниц данных на дисковой подсистеме. Для этого выполним диагностику целостности средствами SQL Server:
-- Проверка логической и физической целостности страниц базы данных
DBCC CHECKDB ('ИмяБазыДанных', NOREINDEX) WITH NO_INFOMSGS;
Если команда DBCC CHECKDB выявит ошибки распределения страниц (I/O errors, torn pages), повреждение затрагивает саму базу данных на диске, и самым надежным решением является полное восстановление базы из регулярного бэкапа СУБД.
.cf перед каждым обновлением.