All skills

Этот скилл MUST быть вызван для оптимизации запросов 1С: временные таблицы, JOIN vs подзапросы, параметры виртуальных таблиц, СКД, индексы. SHOULD также вызывать при медленных запросах и диагностике производительности. Do NOT использовать для базового синтаксиса запросов — используй 1c-help-mcp.

Use this Skill: https://skilld.dev/gh/arman-kudaibergenov/1c-ai-development-kit/1c-query-opt

This session only. Nothing lands on disk.

SKILL.md

≈132 tokens always: the name and description. ≈1.2k when used: this file.

/1c-query-opt — Оптимизация запросов 1С

Продвинутые паттерны оптимизации запросов за пределами базовых правил.

Когда использовать

  • Сложная многошаговая обработка данных
  • Оптимизация JOIN и подзапросов
  • Работа с отчётами СКД
  • Обработка больших объёмов данных

Временные таблицы

JOIN vs Подзапрос

// ПРАВИЛЬНО: JOIN (обычно быстрее)
"ВЫБРАТЬ
|	Заказы.Ссылка, Контрагенты.ИНН
|ИЗ Документ.ЗаказКлиента КАК Заказы
|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
|	ПО Заказы.Контрагент = Контрагенты.Ссылка"

// ПЛОХО: Подзапрос в SELECT (N+1)
"ВЫБРАТЬ
|	Заказы.Ссылка,
|	(ВЫБРАТЬ К.ИНН ИЗ Справочник.Контрагенты КАК К
|	 ГДЕ К.Ссылка = Заказы.Контрагент) КАК ИНН
|ИЗ Документ.ЗаказКлиента КАК Заказы"

Никогда не JOIN с подзапросами — используй временные таблицы

// ПЛОХО: JOIN с подзапросом
"... ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ... СГРУППИРОВАТЬ ПО ...) КАК Итоги ..."

// ПРАВИЛЬНО: Временная таблица + JOIN
"ВЫБРАТЬ ... ПОМЕСТИТЬ ВТИтоги ... ИНДЕКСИРОВАТЬ ПО ...;
ВЫБРАТЬ ... ИЗ ... ЛЕВОЕ СОЕДИНЕНИЕ ВТИтоги ..."

Параметры виртуальных таблиц

// ПРАВИЛЬНО: Фильтр В ПАРАМЕТРАХ виртуальной таблицы
"ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(
|	&Дата, Номенклатура В (&Список)) КАК Остатки"

// ПЛОХО: Виртуальная таблица + ГДЕ
"ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата) КАК Остатки
|ГДЕ Остатки.Номенклатура В (&Список)"

Составные типы — ВЫРАЗИТЬ

// ПЛОХО: Разыменование составного типа (запрос по ВСЕМ типам)
"ВЫБРАТЬ ТоварыНаСкладах.Регистратор.Дата"

// ПРАВИЛЬНО: ВЫРАЗИТЬ к конкретному типу
"ВЫБРАТЬ ВЫРАЗИТЬ(ТоварыНаСкладах.Регистратор
|	КАК Документ.ПоступлениеТоваровУслуг).Дата"

ПРЕДСТАВЛЕНИЕ для отображения

// ПЛОХО: Доп. JOIN через точку
"ВЫБРАТЬ ТоварыНаСкладах.Склад.Наименование"

// ПРАВИЛЬНО: Без доп. JOIN
"ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладах.Склад) КАК Склад"

ИЛИ в ГДЕ → ОБЪЕДИНИТЬ ВСЕ

// ПЛОХО: ИЛИ блокирует индексы
"ГДЕ Товары.Артикул = &Артикул ИЛИ Товары.Код = &Код"

// ПРАВИЛЬНО: Два запроса с ОБЪЕДИНИТЬ ВСЕ
"ВЫБРАТЬ ... ГДЕ Товары.Артикул = &Артикул
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ ... ГДЕ Товары.Код = &Код"

ОБЪЕДИНИТЬ vs ОБЪЕДИНИТЬ ВСЕ

Всегда ОБЪЕДИНИТЬ ВСЕ если не нужно удалять дубликаты (быстрее — нет группировки).

Виртуальные таблицы — сначала во временную

// ПРАВИЛЬНО: Сначала извлечь, потом JOIN
"ВЫБРАТЬ ... ПОМЕСТИТЬ ВТОстатки
|ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата,) ИНДЕКСИРОВАТЬ ПО Номенклатура;
|ВЫБРАТЬ ... ИЗ Справочник.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ ВТОстатки ..."

Индексы

  1. Индекс должен содержать все поля условия
  2. Поля должны быть в начале индекса
  3. Поля должны быть последовательными (без пропусков)
  4. ИНДЕКСИРОВАТЬ ПО для временных таблиц при JOIN

Справка: Стандарты ITS по оптимизации запросов

Source: SKILL.md on GitHub

No alerts9d4 checks · Risk SAFE
  • Gen Agent Trust Hub9d

    The skill provides architectural and performance optimization guidelines for 1C:Enterprise queries. It contains no malicious code, data exfiltration patterns, or unauthorized access attempts.

  • Socket9d

    No alerts

  • Snyk9d

    Risk: LOW · No issues

  • Runlayer7mo

    1 file scanned · No issues

Signed by skilld at 94ad6ec. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 months ago.

Steadyupdated 7 months ago
What it can do
Reads files
All 3 allowed tools
ReadGrepGlob

README badge

README badge for arman-kudaibergenov/1c-ai-development-kit/1c-query-opt