Сценарий
Внешнему инструменту (IDE, CI, AI-агенту) нужно проверить сгенерированный текст запроса 1С до помещения его в модуль и до выполнения в информационной базе.
Сейчас MCP позволяет вызвать analyze_file, но не принять сырой текст SDBL-запроса. Диагностика QueryParseError работает только внутри анализируемого BSL-модуля и проверяет наличие ошибок в дереве разбора, поэтому сама по себе не является API семантической проверки запроса.
Предложение
Дать стабильный вызываемый контракт для валидации сырого текста запроса в контексте метаданных зарегистрированного workspace.
Транспорт не принципиален: MCP tool, отдельная LSP-команда/request, CLI со stdin или Java API. Важно, чтобы потребителю не приходилось создавать временный BSL-модуль и разбирать человекочитаемый лог.
Минимальный вход:
- текст SDBL-запроса;
- идентификатор workspace/configuration root, если сервер обслуживает несколько корней.
Минимальный структурированный результат:
valid;
- полнота проверки (
syntax_only, metadata_semantics, при наличии иной backend — его явное имя);
- список диагностик: стабильный код, сообщение, severity и диапазон в исходном тексте запроса;
- причина деградации, если метаданные не загружены или проверена только грамматика.
Проверка не должна выполнять запрос и изменять информационную базу.
Воспроизводящий пример
Для конфигурации, где есть Документ.ЗаказКлиента и его табличная часть Товары:
ВЫБРАТЬ
Заказ.Ссылка
ИЗ
Документ.ЗаказКлиента КАК Заказ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК Товары
ПО Заказ.Ссылка = Товары.Ссылка
Платформа 8.3.27 отклоняет запрос с ошибкой Неоднозначное поле "Товары.Ссылка": имя алиаса совпало с именем табличной части. Обычный разбор SDBL эту проблему не выявляет.
Контроль: если заменить алиас источника на СтрокиТоваров и использовать СтрокиТоваров.Ссылка, запрос проходит проверку платформы.
Критерии приёмки
- Сырой запрос можно проверить одним вызовом без временного
.bsl-файла и без запуска запроса.
- При доступных метаданных проверяются как минимум имена объектов/полей, области видимости алиасов и неоднозначные ссылки.
- Пример выше возвращает структурированную ошибку с диапазоном
Товары.Ссылка, контрольный вариант — без неё.
- Если сервер способен проверить только синтаксис, результат прямо помечен как неполный и не выдаётся за полную валидность запроса.
- Контракт и пример вызова документированы.
Сценарий
Внешнему инструменту (IDE, CI, AI-агенту) нужно проверить сгенерированный текст запроса 1С до помещения его в модуль и до выполнения в информационной базе.
Сейчас MCP позволяет вызвать
analyze_file, но не принять сырой текст SDBL-запроса. ДиагностикаQueryParseErrorработает только внутри анализируемого BSL-модуля и проверяет наличие ошибок в дереве разбора, поэтому сама по себе не является API семантической проверки запроса.Предложение
Дать стабильный вызываемый контракт для валидации сырого текста запроса в контексте метаданных зарегистрированного workspace.
Транспорт не принципиален: MCP tool, отдельная LSP-команда/request, CLI со stdin или Java API. Важно, чтобы потребителю не приходилось создавать временный BSL-модуль и разбирать человекочитаемый лог.
Минимальный вход:
Минимальный структурированный результат:
valid;syntax_only,metadata_semantics, при наличии иной backend — его явное имя);Проверка не должна выполнять запрос и изменять информационную базу.
Воспроизводящий пример
Для конфигурации, где есть
Документ.ЗаказКлиентаи его табличная частьТовары:ВЫБРАТЬ Заказ.Ссылка ИЗ Документ.ЗаказКлиента КАК Заказ ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК Товары ПО Заказ.Ссылка = Товары.СсылкаПлатформа 8.3.27 отклоняет запрос с ошибкой
Неоднозначное поле "Товары.Ссылка": имя алиаса совпало с именем табличной части. Обычный разбор SDBL эту проблему не выявляет.Контроль: если заменить алиас источника на
СтрокиТоварови использоватьСтрокиТоваров.Ссылка, запрос проходит проверку платформы.Критерии приёмки
.bsl-файла и без запуска запроса.Товары.Ссылка, контрольный вариант — без неё.