Ошибка SDBL: Таблица или поле LastUpdate не содержится в поле FROM - причина и решение

20.10.25

База данных - Администрирование СУБД

Публикация размещена исключительно в образовательных целях и подходит только для платформы версии 8.3.24.
Использует недокументированные средства доступа к базе данных 1С. Прямое обращение к СУБД нарушает лицензионное соглашение,
может изменить поведение платформы, привести к разрушению базы данных, скомпрометировать данные,
а также привести к отказу в официальной поддержке Фирмы 1С.
Разбираю причину ошибки "SDBL: Таблица или поле LastUpdate не содержится в поле FROM" и её решение.

Предыстория

Как-то обратились ко мне с этой ошибкой в одной базе УНФ. Не проходило обновление на версию 3.0.9 - при выполнении обработчиков обновления база останавливалась. Тестирование и исправление падало на реструктуризации с этой же ошибкой.

Конфигурация типовая, но с обширными доработками, вынесенными в расширение.

Выяснилось, что ошибка возникла уже в версии 3.0.8, только там обработчики выполнились нормально, но в работе ошибка возникала, и Тестирование тоже не проходило. Возврат к копии до обновления на 3.0.8 можно было рассматривать только в крайнем случае - в базе уже успели поработать.

Удачно, что база была серверная, в PostgreSQL, так удобнее работать непосредственно с базой

ВНИМАНИЕ! 1С не одобряет работу с базами 1С напрямую без использования платформы. Не следует обращаться к данным базы напрямую в рабочем режиме.

 

Расследование

Беглый поиск по интернету показал что ошибка не уникальная, связана с расширениями, в которых определен свой план обмена. Но в качестве решений предлагается удалять расширение и заново подключать, а данные попробовать выгрузить в файл и потом загрузить обратно. С тем что данные расширения надо было сохранить, решение я запомнил, но оценил как экстремальное, не гарантирующее результат как по времени так и по собственно результату.

Выяснилось, что произошла накладка со структурой базы данных. Ошибки SDBL - ошибки структуры базы. Планы обмена хранятся в таблицах _Node*, и начиная с уровня совместимости платформы 8.3.22 в эти таблицы добавляется служебное поле LastUpdate.

УНФ версии 3.0.7 использует уровень совместимости платформы 8.3.21, а 3.0.8 - уже 8.3.24.

Проблема была в том что в базе было большое расширение со своим планом обмена, и в его таблицу это поле не было добавлено. Не могу сказать что привело к такой проблеме - на тестовой пустой базе мне не удалось проблему воспроизвести.

Изменение уровня совместимости расширения ничего не давало. Удалить только план обмена из расширения не получилось, не прошла реструктуризация, были ссылки на настроенный план обмена. Скорее всего получилось бы сначала из режима предприятия удалить настройку синхронизации и только после этого удалять сам план, но это тоже было бы экстремальным решением, которого хотелось избежать.

 

Немного о внутренностях баз 1С

ВНИМАНИЕ! 1С не одобряет работу с базами 1С напрямую без использования платформы. Не следует обращаться к данным базы напрямую в рабочем режиме.

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

В базе информация о настройках синхронизации хранится в таблицах планов обмена с именами _Node*

Используются служебные поля

_IDRREF - Уникальный идентификатор узла обмена
_Version - служебное поле
_Marked - пометка удаления
_Code - код узла
_Description - наименование узла
_SentNo - номер отправленного сообщения
_receivedno - номер принятого сообщения
_predefinedid - идентификатор предопределенного узла
_LastUpdate - видимо дата последнего изменения узла, добавлено в платформе 8.3.22

_fld* - пользовательские поля плана обмена

Таблицы планов обмена, объявленные или измененные в расширениях, именуются с суффиксом X1, например _Node55X1. Соответствие конкретных номеров таблиц и полей метаданным дерева конфигуратора описывается в таблице Params в записях с именами вида DBNames*. Для конфигурации это "DBNames", для расширений - "DBNames-Ext-*"

Также в базе хранится описание физической структуры базы, т.е. имена таблиц, полей с типами и ограничениями, индексов.  В таблице DBSchema хранится описание структуры основной конфигурации, в SCHEMASTORAGE с SchemaID=0 хранится описание структуры основной конфигурации (повторяет данные из DBSchema), c другими SchemaID - структура объектов, добавленных расширениями.

Посмотреть эти данные можно для файловых баз с помощью Tool_1CD, для серверных - с помощью средств администрирования СУБД, например PGAdmin для PostgreSQL

Описание структуры базы хранится в сериализованном виде, в виде списков вида

{"Node47566","N",47566,"",
{13,
{"ID",0,
{1,
{"R",0,0,"Node47566",2}
},"",0},
{"Version",0,
{1,
{"V",0,0,"",0}
},"",0},

 

Исправление ошибки

Внимание! Все манипуляции в базе с изменениями стоит делать при остановленном сервере 1С. В крайнем случае - заблокировать начало сеансов и регламентные, удалить все сеансы. После изменений если сервер 1С не останавливали желательно базу передобавить или изменить параметры базы или сервера на левые и потом вернуть обратно. Делается это чтобы в сервере 1С не осталось закешированных неактуальных данных.

Первое и очевидное - добавить недостающее поле. В PostgreSQL это можно сделать запросом:

ALTER TABLE public._node47566x1 ADD COLUMN _lastupdate timestamp without time zone NOT NULL DEFAULT now()

Тут _node47566x1 - это имя той самой проблемной таблицы. Выяснить его можно или просматривая все таблицы базы вида _nodeNNNx1, или по имени предварительно получив структуру базы в 1С функцией ПолучитьСтруктуруХраненияБазыДанных() или любой из многочисленных обработок.

Для MSSQL запрос будет в целом похож, немного доработать напильником, для файловых баз по возможности я бы посоветовал перенести временно базу в PostgreSQL, либо можно поработать Tool_1CD плюс доработать данные напильником.

Как оказалось, просто добавить столбец в базу было недостаточно. Платформа сначала смотрит в описание структуры, а в описании этого поля нет.

Выгружаю данные в файл. Мне было удобно это сделать небольшим PHP-скриптом вида:

<?php
$db=pg_connect('host=127.0.0.1 user=postgres dbname=onec_tmp_p password=****');
pg_query('set bytea_output to hex');
$pgr=pg_query('SELECT CURRENTSCHEMA FROM SCHEMASTORAGE WHERE SCHEMAID=1');
$r=pg_fetch_array($pgr);
file_put_contents('schemastorage.hex',hex2bin(substr($r[0],2)));
?>

Как альтернатива - выгрузить таблицу через pg_dump в файл и нужное значение преобразовать из HEX.

pg_dump.exe -h 127.0.0.1 -U postgres -t schemastorage onec_tmp_p >schemastorage.txt

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

{"Node47566","N",47566,"",
{13,
{"ID",0,
{1,
{"R",0,0,"Node47566",2}
},"",0},
{"Version",0,
{1,
{"V",0,0,"",0}

Во второй строке число 13 - количество полей в описании. Проверяю что поля LastUpdate нет и его надо добавить. Редактирую: изменяю 13 на 14 (в вашем случае число может быть другим, просто увеличиваю на единицу), и вставляю описание нового поля, в конец списка или перед описанием любого другого поля (для серверных баз):

{"LastUpdate",0,
{1,
{"T",0,0,"",0}
},"",0},

Получившийся файл надо загрузить обратно в базу, я это делал опять же с помощью PHP:

<?php
$db=pg_connect('host=127.0.0.1 user=postgres dbname=onec_tmp_p password=****');
pg_query('set bytea_output to hex');
$st='\\x'.bin2hex(file_get_contents('schemastorage.txt'));
pg_query_params('UPDATE schemastorage SET currentschema=$1 WHERE schemaid=1',[$st]);
?>

Запускаю базу - УРА! Тестирование и исправление с реструктуризацией проходит (реструктуризацию надо сделать обязательно, чтобы 1С подчистила за нами все неаккуратности), база работает, последующее обновление проходит успешно.

Остаётся только пожелать не сталкиваться с такими ошибками и всегда иметь актуальные бекапы.

Вступайте в нашу телеграмм-группу Инфостарт

SDBL LastUpdate починка исправление

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Администрирование СУБД Системный администратор Программист Бесплатно (free)

5,5 тысячи пользователей в единой базе 1С, розница в режиме 24/7 и SLA 99,98% – в таких условиях любая авария быстро превращается в очереди на кассах, потерю денег и давление со стороны бизнеса. Показываем, как выстроить процесс аварийно-восстановительных работ: от первых алертов и базового скрининга системы до подключения команды, проверки гипотез и дебрифа после инцидента. Разбираем, как метрики, дашборды, техжурнал, Zabbix, Prometheus, Grafana, Telegram-боты и скрипты помогают не гадать, а быстро находить причину проблемы. На реальных авариях объясняем, почему «быстро» не должно означать «рискованно», как работа над ошибками снижает панику и почему каждая авария может сделать систему надежнее.

11.08.2026    1820    jul.dolganova    8    

22

Рефакторинг и качество кода Обновление 1С Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

На проекте сложного обновления 1С:ERP 2.4.14.181 до версии 2.5.22.106 нам было нужно уложить обновление в технологическое окно 48 часов (выходные). Исходный замер, с учетом промежуточных релизов 2.5.8.443, 2.5.12.270, 2.5.17.234, 2.5.22.106, показал требуемое время в 659 часов…

07.07.2026    5429    1c-izh    21    

21

Обновление 1С Программист 1С 8.3 Россия Бесплатно (free)

Внешняя обработка для проверки методов расширений с директивами &Вместо, &Перед, &После и &ИзменениеИКонтроль после обновления типовой конфигурации. Обработка анализирует файловые выгрузки старой и новой конфигурации, автоматически определяет изменившиеся типовые методы и формирует список методов расширения, требующих проверки.

25.06.2026    1716    150    akeeela    8    

18

Нейросети Обновление 1С Бесплатно (free)

Когда доработанную 1С не обновляли годами, начинать приходится не с переноса кода, а с разбора того, что вообще накопилось в базе. Там могут быть десятки обработок, расширения, правки типовых объектов, а документации либо нет, либо она давно не актуальна. На примере реального обновления разбираем, как кодовые агенты, MCP-серверы и языковые модели помогают навести порядок в доработках, собрать план миграции, понять, где при переносе будут проблемы, и автоматизировать часть исправлений.

05.06.2026    7929    wonderboy    6    

29

Администрирование СУБД Системный администратор Программист Бесплатно (free)

Статья рассказывает об опыте перевода больших баз с MSSQL на Postgres и годовой эксплуатации после перехода. Показано, с какими ограничениями утилиты ibcmd можно столкнуться при миграции больших баз и какие подходы помогают безопасно обходить эти проблемы. Приведены наиболее интересные кейсы, выявленные в эксплуатации: особенности настроек Postgres, поведение оптимизатора, тонкости работы логики и статистики, а также редкие, но критичные ситуации с производительностью. Материал будет полезен тем, кто планирует переход на Postgres и хочет заранее понимать реальные риски, подводные камни и проверенные практики их преодоления.

20.04.2026    9159    berserg    12    

27

Обновление 1С Программист 1С 8.3 Россия Бесплатно (free)

При разработке тиражного прикладного решения или при использовании автоматизации сборки вам потребуется механизм создания файлов поставки. В статье приведена шпаргалка по работе с ним.

11.02.2026    4286    AntonovaElena    9    

19

EDT Обновление 1С Программист Бесплатно (free)

На примере рассмотрим одну из стратегий обновления проекта на новый релиз поставщика через 1С:EDT.

19.01.2026    8002    eakomarov    12    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1111 21.10.25 15:54 Сейчас в теме
Может, достаточно было выгрузить базу в DT и загрузить её, но уже на платформе 8.3.24 (даже если и выгружалась бы она на 24-й) ?
2. Pasha1st 867 21.10.25 22:03 Сейчас в теме
(1) Перепроверил, ожидаемо не помогло. Выгрузка прошла, загрузка прошла, проблема осталась. Выгрузка сделана достаточно тупо, доверяет созданной схеме. Загружает аналогично. То что схема неполная - выясняется только в процессе работы
3. VictorKa 16 18.05.26 16:39 Сейчас в теме
Спасибо большое, помогло!
Сделал через pgAdmin.
Получаем запросом
SELECT   encode(currentschema, 'escape') AS schema_text
FROM   schemastorage
WHERE   schemaid = 1;

Правим схему и записываем:
UPDATE   schemastorage 
SET   currentschema = decode('ВАШ_ИСПРАВЛЕННЫЙ_ТЕКСТ', 'escape')
WHERE   schemaid = 1;

P.S.: ошибка зарегистрирована 11.03.2026 https://bugboard.1c.ru/?state=prj-plt8gen-er-60030127
4. eradin 12.08.26 23:13 Сейчас в теме
Получилось следующим образом:
1. Создал копию базы
2. Обновил основную конфигурацию копии
3. В расширении копии поднял релиз (в мойм случае с 8.3.14 на 8.3.25)
4. Обновил расширение.
5. В расширении копии удалил план обмена
6. Добавил заново точно такой же план обмена с теми же реквизитами, именем и т.д.
7. Сохранил cf расширения с новым планом обмена.
8. Открыл рабочую базу.
9. Обновил основную конфигурацию на новый релиз
10. Отключил расширение в конфигураторе
11. Запустил основную конфигурацию, запустились обработчики обновления
12. Включил расширение в конфигураторе
13. Сделал сравнение, объединение расширения с сохранённым в п.7 cf из копии
14. Для объединения выбрал только Свойства самой конфигурации расширения, "Режим совместимости" и "Режим совместимости расширения конфигурации", а также в плане обмена выбрал только "Стандартные реквизиты"
15. Обновил БД.
16. Запустил базу, всё работает
17. На всякий случай запустил Тестирование и исправление

В плане обмена добавился стандартный реквизит Дата актуальности.

P.S. Возможно некоторые пункты лишние и их можно исключить.
Для отправки сообщения требуется регистрация/авторизация