При обновлении конфигураций 1С (в частности, 1С:Зарплата и Управление Персоналом 3.0) в пользовательском режиме может возникнуть критический сбой. Платформа выдает невосстановимую ошибку при выполнении POST-запроса к ресурсу /e1cib/logForm со следующим текстом:
Ошибка SDBL: Таблица или поле ID не содержится в разделе FROM
В журнале регистрации при этом фиксируется несовместимость типов полей, например:
Тип поля CAST(1:00000000000000000000000000000000 AS REF(ODataSettings)) несовместим с типом поля Fld...
Рассмотрим подробно причины возникновения этой проблемы и разберем по шагам действенные способы её устранения.
Служба SDBL (Simple Data Base Language) — это внутренний транслятор запросов платформы 1С на язык СУБД (MS SQL Server, PostgreSQL и др.). Ошибка возникает по следующим причинам:
Params или dbnames) перестают соответствовать структуре конфигурации.ODataSettings), который несовместим с реструктурируемым полем конкретного объекта метаданных.Период регистра сведений СтажиФизическихЛиц).Записать() для объектов плана видов расчета (ПланыВидовРасчета.Начисления).Проанализируем стековый след (стек вызовов) ошибки. Обычно падение происходит при попытке программы программно создать или перезаписать вид расчета во время обработки обновления информационной базы:
ПланыВидовРасчета.Начисления.СоздатьНачислениеКомпенсацияМоральногоВреда()
ПланВидовРасчета.Начисления.МодульМенеджера : ЗаписатьВидыРасчетаКоллектора(...);
ОбщийМодуль.РасчетЗарплатыРасширенный.Модуль : ВидРасчета.Записать();
Если сбой происходит при любом обращении или запросе к объекту ПланыВидовРасчета.Начисления, стандартные процедуры выгрузки базы в .dt или штатное Тестирование и исправление (ТиИ) могут не принести результата, так как SDBL-генератор блокирует выполнение запросов к таблице еще до обработки данных.
Когда база данных при запуске в режиме «1С:Предприятие» сразу переходит к обработке обновления и завершается ошибкой, стандартный интерфейс становится недоступен. Однако платформа предоставляет возможность обхода:
Для восстановления корректной схемы SDBL необходимо заставить платформу полностью переформировать структуру таблиц СУБД для проблематичного объекта (например, с полем Fld... из лога):
F7). Данное действие заставит платформу выполнить полную реструктуризацию всех полей и таблиц SDBL.Если в процессе тестирования выявляются записи с невалидными значениями (например, пустая дата в поле Период), выполним их коррекцию:
РегистрыСведений.СтажиФизическихЛиц). Имя физической таблицы можно узнать с помощью функции ПолучитьСтруктуруХраненияБазыДанных().01.01.1900 0:00:00 или 0001-01-01).1C:Enterprise 8.3 Server Agent.