Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_18054 1С:Предприятие и СУБД

MSSQL Error 18054: Error was raised, but no message found in sys.messages — Решение

Обновлено: 25.08.2026 · Официальная документация ↗
  • В Errorlog регистрируется: Error 18054, Severity 16, State 1: Error X, severity Y, state Z was raised, but no message with that error number was found in sys.messages.
  • Пользовательские транзакции в 1С аварийно прерываются при выполнении внешних обработок или обменов.
  • Сбои возникают при вызове кастомных хранимых процедур, триггеров или интеграций через Direct SQL / Linked Servers.

1. Поиск и регистрация отсутствующего сообщения в `sys.messages`

-- Проверка наличия номера ошибки в системном представлении
SELECT * FROM sys.messages WHERE message_id = 50001 AND language_id = 1049;

-- Добавление пользовательского сообщения об ошибке на русском (1049) и английском (1033) языках
EXEC sp_addmessage 
    @msgnum = 50001, 
    @severity = 16, 
    @msgtext = N'Ошибка бизнес-логики интеграции 1С: Некорректные параметры документа.', 
    @lang = 'Russian',
    @replace = 'replace';

EXEC sp_addmessage 
    @msgnum = 50001, 
    @severity = 16, 
    @msgtext = N'1C integration business logic error: Invalid document parameters.', 
    @lang = 'us_english',
    @replace = 'replace';

2. Поиск источника вызова RAISERROR / THROW через Extended Events

CREATE EVENT SESSION [Capture_Custom_Raiserror] ON SERVER 
ADD EVENT sqlserver.error_reported(
    ACTION(sqlserver.client_app_name, sqlserver.sql_text, sqlserver.session_id, sqlserver.tsql_stack)
    WHERE ([error_number]=(18054))
)
ADD TARGET package0.ring_buffer;
GO
ALTER EVENT SESSION [Capture_Custom_Raiserror] ON SERVER STATE = START;

3. Исправление синтаксиса в T-SQL коде процедур и триггеров

Если в коде используется конструкция RAISERROR(50001, 16, 1) без предварительного добавления сообщения через sp_addmessage, замените ее на явную передачу строки или оператор THROW:

-- Корректный современный синтаксис (не требует sp_addmessage)
THROW 50001, N'Текст ошибки сформирован динамически', 1;
💡 Практика специалистов: При написании внешних расширений и интеграций для 1С откажитесь от устаревшего RAISERROR в пользу конструкции THROW 50000+, которая не требует регистрации сообщений в sys.messages и строго соблюдает транзакционный контекст.

Частые вопросы (FAQ)

Почему возникает ошибка 18054?

Она возникает, когда T-SQL код вызывает команду RAISERROR с числовым кодом ошибки (msg_id >= 50000), но это сообщение не было предварительно зарегистрировано в системной таблице sys.messages с помощью процедуры sp_addmessage.

Использует ли типовая конфигурация 1С:Предприятие команду RAISERROR с кастомными кодами?

Платформа 1С напрямую не регистрирует кастомные сообщения через sp_addmessage. Ошибка почти всегда вызвана сторонними триггерами, процедурами интеграции или самописными сервисами очередей.

Как удалить ошибочно зарегистрированное сообщение?

Используйте системную хранимую процедуру: EXEC sp_dropmessage @msgnum = 50001, @lang = 'all';

Является ли ошибка 18054 признаком повреждения метаданных базы данных?

Нет, это ошибка выполнения логики прикладного уровня (T-SQL script logic error), целостность системных таблиц СУБД при этом не нарушена.

Полезные материалы
Рекомендуем