Ситуация, когда при входе в базу или попытке обновления 1С «вылетает» с критической ошибкой в дамп, является одной из самых сложных для администратора или программиста. Особенно критично это выглядит, когда стандартная утилита chdbfl.exe рапортует об отсутствии ошибок, а встроенное «Тестирование и исправление» (ТиИ) прерывается на полуслове. В данной статье мы разберем конкретный случай восстановления файловой базы 1С:Бухгалтерия 3.0, столкнувшейся с ошибкой sdbl fld25750 не является именем поля.
Для начала проанализируем природу сообщения. SDBL (Simple Data Base Language) — это внутренний язык запросов платформы 1С к базе данных. Ошибка «поле не найдено» или «не является именем поля» в контексте SDBL обычно означает рассинхронизацию между метаданными конфигурации и физической структурой таблиц в файле .1CD.
Рассмотрим, почему стандартные средства могут не справляться:
chdbfl.exe ошибок не обнаружит.В нашем случае виновником часто выступает регистр РегистрСведений.ИсторияРегистрацииВНалоговомОргане. Этот объект активно используется при обновлении конфигурации и подготовке отчетности, и именно на нем 1С спотыкается при попытке реструктуризации.
Прежде чем приступать к «тяжелой артиллерии», исключим влияние временных файлов. Выясним, не является ли проблема локальной для конкретного рабочего места. Рассмотрим алгоритм полной очистки:
/ClearCache в дополнительных параметрах информационной базы.%AppData%\Local\1C\1cv8
%AppData%\Roaming\1C\1cv8
Если после этих действий ошибка sdbl fld... сохраняется при запуске ТиИ на этапе проверки логической целостности, значит, проблема зафиксирована непосредственно внутри файла данных.
Имя поля вида fld25750 является внутренним. Чтобы понять, какой именно реквизит пострадал, можно попытаться программно получить структуру хранения. Если конфигуратор открывается, создадим внешнюю обработку и проанализируем ситуацию с помощью следующего кода:
ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из ТаблицаСтруктуры Цикл
Если Найти(Строка.ИмяТаблицыХранения, "ИсторияРегистрацииВНалоговомОргане") > 0 Тогда
Сообщить("Таблица: " + Строка.ИмяТаблицыХранения);
Для Каждого Поле Из Строка.Поля Цикл
Сообщить("Поле: " + Поле.ИмяПоляХранения + " -> " + Поле.ИмяРеквизита);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Это поможет нам локализовать конкретный реквизит. Однако, если база «падает» даже при попытке выполнить этот код, перейдем к радикальному методу решения.
Как показывает практика, движок файловой базы 1С очень чувствителен к несоответствию схем данных. Клиент-серверный вариант (MS SQL Server или PostgreSQL) работает иначе. При загрузке файла выгрузки (.dt) в SQL-базу, платформа 1С заново создает всю структуру таблиц, основываясь на метаданных конфигурации, а затем просто наполняет их данными из файла. Это позволяет «проскочить» ошибки структуры, которые блокировали работу файлового движка.
Разберем по шагам процесс восстановления через SQL:
.dt (Администрирование — Выгрузить информационную базу). Даже если база битая, конфигуратор часто позволяет сделать эту операцию..dt файл.fld..., которые вызывали сбой.Проанализируем результат: если в SQL-варианте база открылась и ТиИ прошло успешно, проблема решена. Теперь можно выгрузить базу обратно в .dt и загрузить в новый пустой файловый .1CD, если клиент-серверный режим не планируется использовать постоянно.
Посмотрим на ситуацию, когда мы пытаемся использовать сторонние утилиты типа Tool_1CD для низкоуровневого исправления. Ошибка количества полей в таблице Config обычно означает одно из двух:
Tool_1CD, поддерживающую формат 8.3.10 и выше.В такой ситуации лучше не тратить время на HEX-редакторы, если вы не являетесь экспертом, а сосредоточиться на методе с SQL-сервером, описанном выше.
Подведем итоги нашего исследования. Ошибка SDBL в файловой базе 1С — это чаще всего «кривая» реструктуризация таблиц. Самый эффективный способ лечения — заставить платформу пересоздать эти таблицы с нуля. Это достигается путем цикла «Выгрузка в .dt -> Загрузка в SQL -> Тестирование -> Выгрузка в .dt -> Загрузка в файл».
Чтобы избежать подобных ситуаций в будущем, рекомендуем:
.dt или средствами бэкапа SQL) перед любым обновлением конфигурации.