Проверка текста запроса 1С по выгрузке конфигурации - существуют ли таблицы, табличные части, виртуальные таблицы регистров и поля. Работает без платформы, по индексу от 1c-config-index
Scanned 9/2/2026
Install to Claude Code
npx -y skills add Desko77/claude-code-skills-1c --skill 1c-query-validate --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of 1c Query Validate?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/desko77-1c-query-validate)More formats (shields.io, HTML) on the badges page.
---
name: 1c-query-validate
description: Проверка текста запроса 1С по выгрузке конфигурации - существуют ли таблицы, табличные части, виртуальные таблицы регистров и поля. Работает без платформы, по индексу от 1c-config-index
argument-hint: <-QueryPath файл | -Query текст> -IndexPath index.json [-Detailed]
allowed-tools:
- Bash
- Read
- Glob
---
# /query-validate - проверка запроса по выгрузке
Берет текст запроса и индекс конфигурации, отвечает на один вопрос: все ли имена в запросе
существуют. Опечатка в имени таблицы или поля ловится до того, как запрос попадет в базу.
Работает без EDT, без платформы и без базы.
## Параметры
| Параметр | Обяз. | Умолч. | Описание |
|------------|:-----:|--------|--------------------------------------------------------------|
| QueryPath | * | - | Файл с текстом запроса |
| Query | * | - | Текст запроса прямо в аргументе |
| IndexPath | да | - | Индекс от `1c-config-index` |
| Detailed | нет | - | Показать счетчики проверенного даже когда есть замечания |
| MaxErrors | нет | 30 | Не выводить больше N замечаний |
\* Нужен ровно один из `QueryPath` и `Query`.
## Команда
```bash
python skills/1c-config-index/scripts/config-index.py -ConfigPath src -OutFile .cache/index.json
python skills/1c-query-validate/scripts/query-validate.py -QueryPath запрос.txt -IndexPath .cache/index.json
```
```powershell
powershell.exe -NoProfile -File "skills/1c-query-validate/scripts/query-validate.ps1" -QueryPath "запрос.txt" -IndexPath ".cache/index.json"
```
## Что проверяется
**Имена метаданных где угодно в тексте.** Двухчастное имя вида `Справочник.Контрагенты` проверяется
на существование объекта - в `ИЗ`, в `ВЫРАЗИТЬ ... КАК`, в `ССЫЛКА`, в `ЗНАЧЕНИЕ`, в условиях. Оба
языка запроса: `Catalog.Контрагенты` разбирается так же.
**Третья часть - только в позиции таблицы** (после `ИЗ`, `FROM`, `СОЕДИНЕНИЕ`, `JOIN`):
- у объектов - табличная часть: `Документ.Накладная.Товары`;
- у регистров - виртуальная таблица: `РегистрНакопления.Остатки.ОстаткиИОбороты`. Список закрытый,
незнакомое имя дает замечание.
Вне позиции таблицы третья часть не трогается: там она может быть значением перечисления
(`ЗНАЧЕНИЕ(Перечисление.Статусы.Новый)`), пустой ссылкой или предопределенным элементом.
**Поля по псевдонимам.** Из `ИЗ <таблица> КАК <псевдоним>` строится привязка, дальше каждое
`Псевдоним.Поле` сверяется с составом таблицы: реквизиты, измерения, ресурсы, признаки учета,
табличные части, стандартные поля.
Поля виртуальных таблиц выводятся из ресурсов по суффиксам: у `Остатки` это `<Ресурс>Остаток`, у
`Обороты` - `<Ресурс>Оборот`, `<Ресурс>Приход`, `<Ресурс>Расход`, у `ОстаткиИОбороты` - еще
`НачальныйОстаток` и `КонечныйОстаток`.
## Чего НЕ проверяется
Это не платформенная валидация запроса и заменой ей не служит. Без платформы недоступны типы
выражений, совместимость соединений, корректность агрегатов и план выполнения. Здесь только имена.
Намеренно пропускается:
- **псевдоним, привязанный не к таблице метаданных** - временная таблица (`ПОМЕСТИТЬ ВТ_Имя`),
вложенный запрос, внешний источник данных. Состав их полей задается самим запросом;
- **псевдоним таблицы, которой нет в конфигурации** - иначе одна опечатка в имени таблицы
породила бы замечание на каждое ее поле;
- **вторая и далее часть поля** (`Т.Ссылка.Контрагент`) - навигация по ссылке требует разрешать
типы цепочкой;
- **параметры виртуальных таблиц** в скобках;
- **строковые литералы и комментарии** вырезаются до разбора: внутри них `Справочник.Что-Нибудь` -
просто текст.
Стандартные поля принимаются ОБЩИМ списком, а не по видам объектов: у справочника пройдет и
`Проведен`. Так сделано намеренно - неверная привязка поля к виду дала бы ложное срабатывание, а
лишнее имя в списке дает всего лишь пропуск.
Индекс должен быть построен по ПОЛНОЙ выгрузке. На частичной (выгружена часть объектов) проверка
будет сообщать об объектах, оставшихся снаружи, - отличить такую выгрузку от конфигурации с битой
ссылкой по файлам нельзя. У расширения признак есть (`ConfigurationExtensionPurpose`), и там
формулировка мягче.
Все замечания - предупреждения, код возврата всегда 0. Проверка кросс-объектная и молодая, а
валидатор, однажды выдавший ложную ошибку, выключается целиком.
## Связанные навыки
- `1c-config-index` - строит индекс, без него проверка не работает
- `composing-1c-queries` - как писать запросы: синтаксис, функции, подводные камни
- `1c-query-optimization` - разбор производительности запроса
- `1c-skd-validate` - проверка схемы компоновки, включая запросы ее наборов данных
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!