framework_eng/skills/tool-usage/platform-data/platform-data-core/SKILL.md
Platform data: metadata, nav links, safe queries
npx skillsauth add steelmorgan/1c-agent-based-dev-framework platform-data-coreInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Three operations that are usually used together in one workflow:
Principle: Before working with business logic, explore the metadata. Do not create objects "by guess" if the user did not explicitly ask for it.
| Tool | Parameters | Purpose |
|------|-----------|------------|
| list_metadata_objects | metaType, nameMask, maxItems | Search for objects by type and name mask |
| get_metadata_structure | metaType, name | Structure: attributes, tabular sections, dimensions, resources |
| navigate_symbol | — | Navigate to modules and procedures of found objects |
| get_call_graph | — | Analyze call chains in modules |
list_metadata_objects(metaType, nameMask) — check existence and type. For fuzzy search: nameMask: "*Номенклатура*".get_metadata_structure(metaType, name) — attributes, tabular sections, dimensions, resources. Required before building a query.navigate_symbol → get_call_graph.get_metadata_structure for verification.| Error | Solution |
|--------|---------|
| Searching by a generic word returns many results | Narrow nameMask; specify metaType; reduce maxItems |
| The agent tries to create the object itself | Protocol: the agent describes it, the user creates it in Configurator/EDT |
Syntax reference: references/query-syntax-cheatsheet.md
list_metadata_objects → get_metadata_structurevalidate_queryexecute_queryNever guess names — 1C configurations differ. One metadata lookup call is cheaper than debugging a failed query.
When executing queries through execute_query (HTTP/MCP without parameters), values are specified explicitly in the query text. Parameters &Name may not be supported.
For queries that return data rows, always limit the number of records:
ВЫБРАТЬ ПЕРВЫЕ 100
Документы.Номер,
Документы.Дата
ИЗ
Документ.РеализацияТоваровУслуг КАК Документы
Exceptions - ПЕРВЫЕ N is not needed and is harmful:
| Case | Why not needed |
|--------|-----------------|
| Aggregate queries (КОЛИЧЕСТВО, СУММА, МАКСИМУМ) | They return one row; ПЕРВЫЕ 1 is redundant and can produce an incorrect result when grouping |
| Existence check (ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ ... ГДЕ ...) | ПЕРВЫЕ 1 is appropriate here and already limits the result |
| ОБЪЕДИНИТЬ ВСЕ in subqueries | The limit is set at the outer level |
❌ INCORRECT (if &Параметр is unavailable):
ГДЕ Товар = &Товар
✅ CORRECT (comparison through primitive attributes):
ГДЕ Товар.Наименование = "iPhone 17 Pro Max"
ГДЕ Контрагент.ИНН = "7707083893"
execute_query over HTTP/MCP does not support &Ссылка parameters, so comparing reference fields directly is impossible - use the object's primitive attributes.
❌ INCORRECT (direct reference comparison):
ГДЕ Документ.Контрагент = Справочник.Контрагенты.Ссылка
✅ CORRECT (comparison through primitive attributes):
ГДЕ Документ.Контрагент.Наименование = "ООО Ромашка"
ГДЕ Документ.Контрагент.Код = "000001"
ГДЕ Документ.Контрагент.ИНН = "7707083893"
⚠️ Important - ambiguity risk.
НаименованиеandКодdo not guarantee uniqueness:
Наименование- can repeat in different folders or when duplicates existКод- unique within a catalog, preferableИНН,Артикулand other business identifiers - use them if they are unique in this configurationWhen acceptable: diagnostics, data analysis, one-off queries where duplicates are unlikely. When unacceptable: a critical lookup where a false match by name would give the wrong result - in that case, ask the user for the exact identifier or use
ПОДОБНОwith a warning about possible duplicates.
Since &Имя parameters are unavailable, values are specified as literals: dates - via ДАТАВРЕМЯ(Год, Месяц, День[, Час, Минута, Секунда]), strings - in double quotes. Syntax and examples: references/query-syntax-cheatsheet.md §§ "Working with dates", "String values".
| Error | Solution |
|--------|---------|
| NULL in calculations | ЕСТЬNULL(Поле, ЗначениеПоУмолчанию) with LEFT JOIN |
| Slow query with OR | Replace with IN (...) or UNION ALL |
| Slow query against Registrar | ВЫРАЗИТЬ(Регистратор КАК Документ.Имя) + ССЫЛКА in ГДЕ |
| Trigger | Action |
|---------|----------|
| User provides an e1cib/data/... link | parse_nav_link → type + link → queries/analysis |
| Need to generate a link from query data | get_nav_link(type, link) → link for the response |
parse_nav_link → extract type and ref → build query → execute_query.execute_query returned a link → get_nav_link(type, link) → return to the user.| Capability | Purpose |
|------------|------------|
| parse_nav_link | Parsing e1cib/data/... — extracting the object type and link |
| get_nav_link | Forming a navigation link by type + link |
development
1C server maintenance webhooks: container restart and external component cache cleanup
development
Interactive DAP debugging of a single BSL procedure
tools
Rules for using RLM tools for project search and navigation in 1C/BSL
development
Creates web applications and routes on Winow (a web server on OneScript and Autumn). Use when working with a web server on OneScript, routing, or Winow controllers.