Composing 1C Queries

SkillDev tools

Rules and patterns for writing correct 1C:Enterprise query language (язык запросов 1С). Queries are executed via the executequery tool/endpoint.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Composing 1C Queries skill

About this capability

>

What this skill tells your AI

The instructions your AI receives, as published by desko77/cursor-1c-skills in skills/composing-1c-queries/SKILL.md and read by ahel’s review.

Rules and patterns for writing correct 1C:Enterprise query language (язык запросов 1С). Queries are executed via the execute_query tool/endpoint.

CRITICAL: Verify Metadata Before Querying

NEVER guess or invent metadata object names, attribute names, or tabular section names. 1C configurations vary greatly - object and field names are unique to each database.

Before composing a query, if you are not certain about the exact names, use get_metadata or any other available tool to retrieve 1C configuration metadata to discover:

  • Available metadata objects (catalogs, documents, registers, etc.)
  • Object attributes (реквизиты) and their types
  • Tabular sections (табличные части) and their columns
  • Register dimensions, resources, and attributes

Workflow: retrieve metadata → confirm names → compose query → validate query → execute query

A query with a wrong object or field name will fail with a runtime error. Spending one call on metadata retrieval is always cheaper than debugging a failed query.

Имена таблиц и полей из AI-EDT

Если сервер AI-EDT подключен, имена не угадываются, а берутся у него - insights operation=describe_db_tables (отдельное имя describe_db_tables тоже работает). Инструмент показывает, во что объект превращается в базе данных: основную таблицу, по одной на каждую табличную часть, виртуальные таблицы регистра (остатки, обороты, срезы) с их параметрами, таблицу изменений и перерасчеты регистра расчета. Имена таблиц и полей отдаются сразу на двух языках, с типами полей, готовыми к подстановке после ИЗ.

Это дешевле, чем писать запрос по памяти и ловить ошибки имен по одной через validate_query: за один вызов видно все, что вообще можно выбрать.

Validate Query via AI-EDT

Если сервер AI-EDT подключен (инструменты ai-edt доступны), обязательно проверяй запрос перед выполнением через validate_query:

  • Проверяет синтаксис и семантику в контексте реального проекта
  • Для запросов СКД: dcsMode=true
  • Ловит ошибки имен таблиц, полей, типов до выполнения

Formatting: Always write the entire query text in a single line. Do not use line breaks or multiline formatting.

Query Structure

Canonical order of clauses (required section marked, rest optional):

ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <N>]
 <field list>
ИЗ
 <data sources>
[ГДЕ <condition>]
[СГРУППИРОВАТЬ ПО <fields>]
[ИМЕЮЩИЕ <condition>]

[ОБЪЕДИНИТЬ [ВСЕ]
ВЫБРАТЬ ...]

[УПОРЯДОЧИТЬ ПО <fields> [ВОЗР | УБЫВ]]
[АВТОУПОРЯДОЧИВАНИЕ]

[ИТОГИ <aggregate expressions> ПО [ОБЩИЕ] <control points>]

Keywords:

KeywordMeaning
ВЫБРАТЬSELECT - mandatory, starts the query
РАЗРЕШЕННЫЕRespect row-level security (RLS). Use by default for safety
РАЗЛИЧНЫЕDISTINCT - remove duplicate rows
ПЕРВЫЕ NReturn only first N rows (1C has no LIMIT keyword - this is the only way)
ИЗFROM - data sources
ГДЕWHERE - row filter
СГРУППИРОВАТЬ ПОGROUP BY
ИМЕЮЩИЕHAVING - group filter
ОБЪЕДИНИТЬ [ВСЕ]UNION [ALL]
УПОРЯДОЧИТЬ ПОORDER BY. ВОЗР = ASC, УБЫВ = DESC
АВТОУПОРЯДОЧИВАНИЕAuto-order by presentation (rarely used)
ИТОГИTOTALS - compute aggregate subtotals

Comments: // single-line only.

Minimal example:

ВЫБРАТЬ Ссылка, Наименование
ИЗ Справочник.Контрагенты
ГДЕ НЕ ПометкаУдаления

Table Names and Sources

Every 1C metadata object has a fixed query-name pattern. Use exact names from get_metadata.

Real tables

Object typeQuery name patternExample
CatalogСправочник.<Name>Справочник.Номенклатура
DocumentДокумент.<Name>Документ.РеализацияТоваровУслуг
Document tabular sectionДокумент.<Name>.<Section>Документ.РеализацияТоваровУслуг.Товары
Accumulation registerРегистрНакопления.<Name>РегистрНакопления.ОстаткиТоваров
Information registerРегистрСведений.<Name>РегистрСведений.КурсыВалют
Accounting registerРегистрБухгалтерии.<Name>РегистрБухгалтерии.Хозрасчетный
Chart of accountsПланСчетов.<Name>ПланСчетов.Хозрасчетный
Chart of characteristic typesПланВидовХарактеристик.<Name>ПланВидовХарактеристик.ВидыСубконто
Calculation registerРегистрРасчета.<Name>РегистрРасчета.Начисления
Business processБизнесПроцесс.<Name>БизнесПроцесс.Согласование
TaskЗадача.<Name>Задача.ЗадачаИсполнителя

Enum values and predefined items

// Enum value (used in conditions, not as a table):
ЗНАЧЕНИЕ(Перечисление.ТипыЦен.Оптовая)

// Predefined catalog item:
ЗНАЧЕНИЕ(Справочник.Валюты.USD)

// Empty reference:
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)

Virtual tables

Virtual tables are computed on-the-fly from real register data. Always pass filter conditions as virtual table parameters, NOT in WHERE - this is critical for performance.

Accumulation register (Регистр накопления):

// Current balances (no date = latest):
РегистрНакопления.ОстаткиТоваров.Остатки(, Номенклатура = &Ном)

// Balances at specific date:
РегистрНакопления.ОстаткиТоваров.Остатки(&Дата, Склад = &Склад)

// Turnovers for period:
РегистрНакопления.ОстаткиТоваров.Обороты(&НачДата, &КонДата, , Номенклатура = &Ном)

// Balances and turnovers:
РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&НачДата, &КонДата, , , Номенклатура = &Ном)

Information register (Регистр сведений):

// Latest values (slice of last):
РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта)

// Earliest values (slice of first):
РегистрСведений.КурсыВалют.СрезПервых(&Дата, Валюта = &Валюта)

Accounting register (Регистр бухгалтерии):

5 virtual tables: Остатки, Обороты, ОстаткиИОбороты, ОборотыДтКт, ДвиженияССубконто.

Сигнатуры ниже приведены для регистров с корреспонденцией (КорреспондирующиеСчета = Истина, например типовой Хозрасчетный). Для регистров без корреспонденции .ОборотыДтКт и .ДвиженияССубконто отсутствуют, у .Обороты нет УсловиеКорСчета и КорСубконто.

// Balances at date:
РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , )

// Turnovers for period:
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачДата, &КонДата, Месяц, Счет В (&Счета), , , , )

// Balances and turnovers:
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачДата, &КонДата, Авто, , Счет = &Счет, , )

// Debit-Credit turnovers (detailed correspondence):
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачДата, &КонДата, , , , , , )

// Detailed records with subconto:
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&НачДата, &КонДата, , , )

Virtual table parameters (positional order):

Virtual tableParameters
.ОстаткиПериод, УсловиеСчета, Субконто, Условие
.ОборотыНачалоПериода, КонецПериода, Периодичность, УсловиеСчета, Субконто, Условие, УсловиеКорСчета, КорСубконто
.ОстаткиИОборотыНачалоПериода, КонецПериода, Периодичность, МетодДополненияПериодов, УсловиеСчета, Субконто, Условие
.ОборотыДтКтНачалоПериода, КонецПериода, Периодичность, УсловиеСчетаДт, СубконтоДт, УсловиеСчетаКт, СубконтоКт, Условие
.ДвиженияССубконтоНачалоПериода, КонецПериода, Условие, Порядок, Первые

Note: справка платформы (синтакс-помощник) для регистра бухгалтерии часто опускает УсловиеСчета/УсловиеКорСчета/УсловиеСчетаДт/УсловиеСчетаКт. Эти параметры реально существуют и работают (см. ИТС pubqlang) - без них смещается весь позиционный список и Счет = ... попадает в позицию Субконто (тип не совпадет, отбор не сработает).

Key differences from accumulation register:

  • Субконто parameter accepts виды субконто (plan of characteristic types references), NOT values. Filter by subconto values in Условие: Субконто1 = &Контрагент
  • Счет/КорСчет filtering - отдельные параметры УсловиеСчета/УсловиеКорСчета (не в Условие): Счет = &Счет, Счет В ИЕРАРХИИ(&Счет). Для ОборотыДтКт - УсловиеСчетаДт/УсловиеСчетаКт
  • Периодичность values: Авто, Период, Год, Полугодие, Квартал, Месяц, Декада, Неделя, День, Регистратор, Запись
  • МетодДополненияПериодов (ОстаткиИОбороты only): Движения or ДвиженияИГраницыПериода (default)
  • Resources have Дт/Кт (Debit/Credit) suffixes - see table below

Parameter syntax inside virtual tables: Dimension = Value joined by commas. Keep it simple - no subqueries or joins inside parameters.

Accumulation register resource suffixes:

When using virtual tables, resource fields get automatic suffixes:

Virtual tableSuffix formatExample
.Остатки<Resource>ОстатокКоличествоОстаток
.Обороты<Resource>ОборотКоличествоОборот
.ОстаткиИОбороты<Resource>НачальныйОстатокКоличествоНачальныйОстаток
.ОстаткиИОбороты<Resource>ПриходКоличествоПриход
.ОстаткиИОбороты<Resource>РасходКоличествоРасход
.ОстаткиИОбороты<Resource>ОборотКоличествоОборот
.ОстаткиИОбороты<Resource>КонечныйОстатокКоличествоКонечныйОстаток
// Example - turnovers with all suffixes:
ВЫБРАТЬ
 Об.Номенклатура,
 Об.КоличествоПриход,
 Об.КоличествоРасход,
 Об.КоличествоОборот,
 Об.КоличествоНачальныйОстаток,
 Об.КоличествоКонечныйОстаток
ИЗ
 РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Нач, &Кон, , , ) КАК Об

Accounting register resource suffixes:

Unlike accumulation register, accounting resources have Дт/Кт (Debit/Credit) variants:

Virtual tableSuffix formatExample
.Остатки<Resource>ОстатокСуммаОстаток
.Остатки<Resource>ОстатокДт/КтСуммаОстатокДт
.Остатки<Resource>РазвернутыйОстатокДт/КтСуммаРазвернутыйОстатокДт
.Обороты<Resource>ОборотСуммаОборот
.Обороты<Resource>ОборотДт/КтСуммаОборотДт
.Обороты<Resource>КорОборотДт/КтСуммаКорОборотДт
.ОстаткиИОбороты<Resource>НачальныйОстатокДт/КтСуммаНачальныйОстатокДт
.ОстаткиИОбороты<Resource>ОборотДт/КтСуммаОборотДт
.ОстаткиИОбороты<Resource>КонечныйОстатокДт/КтСуммаКонечныйОстатокДт
.ОстаткиИОбороты<Resource>НачальныйРазвернутыйОстатокДт/КтСуммаНачальныйРазвернутыйОстатокДт
.ОстаткиИОбороты<Resource>КонечныйРазвернутыйОстатокДт/КтСуммаКонечныйРазвернутыйОстатокДт

Suffixes without Дт/Кт (e.g. СуммаОстаток, СуммаОборот) are for balanced resources.

// Example - accounting register balances and turnovers:
ВЫБРАТЬ
 Об.Счет,
 Об.Субконто1,
 Об.СуммаНачальныйОстатокДт КАК НачОстДт,
 Об.СуммаОборотДт,
 Об.СуммаОборотКт,
 Об.СуммаКонечныйОстатокДт КАК КонОстДт
ИЗ
 РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
 &НачДата, &КонДата, Авто, , Счет = &Счет, , ) КАК Об

Table aliases

Справочник.Номенклатура КАК Товары

Always assign informative aliases - they must be understandable without context:

  • No single-letter (Р, Т, С) or cryptic abbreviations (ВТДок, ДокГР)
  • For long table names, shorten meaningfully: РасчетыНДФЛ, РезидентствоФЛ, ВедомостиЗП
  • For temp tables as sources, reuse the temp table name or shorten it meaningfully
// Bad:
РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК Р

// Good:
РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК РасчетыНДФЛ

// Bad:
ВТДокументОснованияДляУвольнений КАК ВТУвольнения

// Good:
ВТДокументОснованияДляУвольнений КАК ДокументыУвольнений

Aliases are required when self-joining or using the same table twice.

Hierarchical catalogs

Catalogs with hierarchy support nested groups:

// Direct children (one level) - preferred:
ВЫБРАТЬ Наименование
ИЗ Справочник.Номенклатура
ГДЕ Родитель = &Родитель
// params: {"Родитель": {"_objectRef": true, "УникальныйИдентификатор": "...",
// "ТипОбъекта": "СправочникСсылка.Номенклатура", "Представление": "..."}}

// Or by name:
ГДЕ Родитель.Наименование = "Бытовая техника"

// All items in group and subgroups - preferred:
ВЫБРАТЬ Наименование
ИЗ Справочник.Номенклатура
ГДЕ Ссылка В ИЕРАРХИИ (&Группа)
// params: {"Группа": {"_objectRef": true, "УникальныйИдентификатор": "...",
// "ТипОбъекта": "СправочникСсылка.Номенклатура", "Представление": "..."}}

// Or by name:
ГДЕ Ссылка В ИЕРАРХИИ (
 ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура
 ГДЕ Наименование = "Бытовая техника"
)

// Only leaf items (not groups):
ГДЕ ЭтоГруппа = ЛОЖЬ

// Only groups:
ГДЕ ЭтоГруппа = ИСТИНА

Rules:

  • Родитель = &Родитель - direct children only (one level)
  • Ссылка В ИЕРАРХИИ (&Группа) - all nested levels
  • ЭтоГруппа - ИСТИНА = groups only, ЛОЖЬ = leaf items only
  • AVOID: В ИЕРАРХИИ (ПустаяСсылка) - very slow

Field Selection

  • * selects all real fields (virtual fields are NOT included)
  • Aliases: <expression> КАК <Alias> - aliases must be unique within the query
  • Access nested fields with dot notation: Товары.Номенклатура.Наименование

CRITICAL: Compound-type field dereferencing

When a field can reference multiple table types (compound/composite type), accessing it through dots creates implicit JOINs to ALL possible target tables. This severely degrades performance.

Always narrow the type with ВЫРАЗИТЬ:

// BAD - joins to every possible Регистратор table:
ВЫБРАТЬ Регистратор.Номер ИЗ РегистрНакопления.ОстаткиТоваров

// GOOD - single join:
ВЫБРАТЬ ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваровУслуг).Номер
ИЗ РегистрНакопления.ОстаткиТоваров
ГДЕ Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг

NULL handling

  • Use ЕСТЬNULL(field, default) for fields that may be NULL (e.g., from LEFT JOIN)
  • Check NULL with ЕСТЬ NULL / НЕ ЕСТЬ NULL (not = NULL)

Empty table for UNION

When unioning queries with different nested table structures:

ПУСТАЯТАБЛИЦА.(Номенклатура, Количество, Цена)

WHERE and HAVING

Operators

Operator1C syntaxNotes
Equals=
Not equals<>
Comparison<, >, <=, >=
ANDИ
ORИЛИAvoid in WHERE - see caveats
NOTНЕ
RangeМЕЖДУ X И YInclusive both ends
In listВ (val1, val2, ...)
In subqueryВ (ВЫБРАТЬ ...)
NULL checkЕСТЬ NULL / НЕ ЕСТЬ NULLNever use = NULL
Type checkССЫЛКА Документ.Реализация...Checks reference type
PatternПОДОБНО "шаблон"% any string, _ one char
CASEВЫБОР КОГДА ... ТОГДА ... ИНАЧЕ ... КОНЕЦOnly in non-indexed conditions

Operator precedence: НЕ > И > ИЛИ. Use parentheses `` for explicit priority.

Key rules

  • ИЛИ (OR) degrades index usage. Replace with В (...) where possible, or split into ОБЪЕДИНИТЬ ВСЕ
  • ВЫБОР (CASE) in WHERE: Only in additional (non-indexed) conditions
  • String comparison: Case-insensitive, ignores trailing spaces
  • Arithmetic in WHERE: Only in additional conditions (prevents index use)
  • Pattern ПОДОБНО: Must not start with % or _ if in indexed condition

For index-aware optimization strategy, see optimization-and-pitfalls.md.

Joins

ИЗ Документ.РеализацияТоваровУслуг КАК Док
 ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Конт
 ПО Док.Контрагент = Конт.Ссылка
Type1C syntax
InnerВНУТРЕННЕЕ СОЕДИНЕНИЕ ... ПО
Left outerЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ ... ПО
Right outerПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ ... ПО
Full outerПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ ... ПО

Rules:

  • NEVER use nested joins (join of a subquery that itself contains joins). Replace with temporary tables or sequential joins
  • For LEFT JOIN: index the right table's join fields
  • For INNER JOIN: index the larger table's join fields

Grouping and Totals

GROUP BY

ВЫБРАТЬ
 Контрагент,
 СУММА(СуммаДокумента) КАК Итого,
 КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка) КАК КолДок
ИЗ Документ.РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО Контрагент
ИМЕЮЩИЕ СУММА(СуммаДокумента) > 1000

Aggregate functions: СУММА (SUM), СРЕДНЕЕ (AVG), МИНИМУМ (MIN), МАКСИМУМ (MAX), КОЛИЧЕСТВО (COUNT), КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ...) (COUNT DISTINCT).

Every non-aggregated field in SELECT must appear in GROUP BY.

TOTALS (brief)

ИТОГИ СУММА(СуммаДокумента) ПО ОБЩИЕ, Контрагент

Computes subtotal rows interleaved with detail rows. For full syntax (ПЕРИОДАМИ, hierarchical control points, grouping sets), see query-syntax-reference.md.

Temporary Tables

Use temporary tables to break complex queries into steps, avoid nested subqueries, and improve performance.

// Step 1: collect items into temp table
ВЫБРАТЬ Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТ_Товары
ИЗ Справочник.Номенклатура
ГДЕ Наименование ПОДОБНО &Маска
ИНДЕКСИРОВАТЬ ПО Номенклатура
;
// Step 2: get balances for those items
ВЫБРАТЬ
 Ост.Номенклатура КАК Номенклатура,
 Ост.КоличествоОстаток КАК Остаток
ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(
 ,
 Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВТ_Товары)
 ) КАК Ост

Rules:

  • Separate queries in a batch with ;
  • ПОМЕСТИТЬ <Name> creates the temp table (place right after SELECT fields, before ИЗ)
  • ИНДЕКСИРОВАТЬ ПО <field> - add after the query for temp tables with >1000 rows used in joins or В subqueries
  • Minimize data volume and field count in temp tables
  • NEVER create/drop temp tables in a loop
  • Prefer temp tables over nested subqueries in JOIN conditions

Parameters

Parameters are external values passed into the query. Syntax: &ParameterName.

ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ Наименование ПОДОБНО &Маска

Passed via execute_query params: {"Маска": "%Рога%"}.

Rules:

  • Always use parameters for external values - never concatenate strings into query text
  • Enum values: use ЗНАЧЕНИЕ in query text, not as parameter: ГДЕ Тип = ЗНАЧЕНИЕ(Перечисление.ТипыЦен.Оптовая)
  • Date format in params: ISO 8601 ("2024-01-15" or "2024-01-15T10:30:00")
  • Boolean: ИСТИНА / ЛОЖЬ in query text, or pass true/false as parameter

Comparing Reference Fields

When comparing reference fields (link-type attributes), pass the reference as a parameter:

// GOOD - reference passed as parameter from previous query result:
ВЫБРАТЬ * ИЗ Документ.ПродажаТоваров
ГДЕ Контрагент = &Контрагент
// params: {"Контрагент": {"_objectRef": true, "УникальныйИдентификатор": "...",
// "ТипОбъекта": "СправочникСсылка.Контрагенты", "Представление": "..."}}

// ALSO GOOD - compare via primitive attribute:
ГДЕ Контрагент.Наименование = "ООО Ромашка"
ГДЕ Контрагент.Код = "000001"

// AVOID - direct comparison with another table's reference:
ГДЕ Документ.Контрагент = Справочник.Контрагенты.Ссылка

Rules:

  • First choice: pass reference object from previous query result as &Parameter
  • Fallback: compare via primitive fields (Наименование, Код, etc.)
  • Never compare reference fields directly from different sources

Common Patterns

1. Find by name (fuzzy):

ВЫБРАТЬ Ссылка, Наименование ИЗ Справочник.Контрагенты ГДЕ Наименование ПОДОБНО &Маска
// params: {"Маска": "%рога%"}

2. Latest N documents:

ВЫБРАТЬ ПЕРВЫЕ 10 Ссылка, Дата, Номер, СуммаДокумента
ИЗ Документ.РеализацияТоваровУслуг
УПОРЯДОЧИТЬ ПО Дата УБЫВ

3. Current balances (virtual table, no date = now):

ВЫБРАТЬ Номенклатура, КоличествоОстаток
ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(, Номенклатура = &Ном) КАК Ост

4. Latest register slice:

ВЫБРАТЬ Валюта, Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&Дата,) КАК Курсы

5. Count by group:

ВЫБРАТЬ Контрагент, КОЛИЧЕСТВО(*) КАК Кол
ИЗ Документ.РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО Контрагент
УПОРЯДОЧИТЬ ПО Кол УБЫВ

6. Check existence:

ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ Справочник.Контрагенты ГДЕ ИНН = &ИНН

7. Exclude items marked for deletion:

ГДЕ НЕ ПометкаУдаления

8. Explore table structure (zero-row query with schema):

ВЫБРАТЬ ПЕРВЫЕ 0 * ИЗ Справочник.Контрагенты
// use with include_schema: true in execute_query

References

  • Query syntax reference - ВЫБОР (CASE), ОБЪЕДИНИТЬ, УПОРЯДОЧИТЬ ПО, ИТОГИ, ПОДОБНО patterns, ССЫЛКА, subqueries
  • Optimization and caveats - index strategy, ИЛИ alternatives, compound types, virtual table rules, RLS impact
  • Functions and expressions - aggregate, date, string, type, math functions and type casting with ВЫРАЗИТЬ

Signals

GitHub stars
57
Forks
13
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
composing-1c-queries-desko77
Source
github.com/desko77/cursor-1c-skills