form-element-mapping
$
npx mdskill add SteelMorgan/1c-agent-based-dev-framework/form-element-mappingMaps visible form text to programmatic element names for Vanessa scripts and form analysis.
- Helps locate form elements by user-visible synonyms when only programmatic names are available.
- Integrates with Form.xml files and metadata object requisites for element mapping.
- Searches XML for Title attributes and extracts corresponding Name values from the same block.
- Delivers results by identifying the programmatic name associated with the visible text.
SKILL.md
.github/skills/form-element-mappingView on GitHub ↗
---
name: form-element-mapping
description: Поиск программного имени элемента формы по видимому тексту (синониму). Алгоритм маппинга Title → Name для элементов, созданных в конфигураторе и программно.
---
# Маппинг элементов формы: видимый текст → программное имя
## Когда применять
- Написание Vanessa-сценариев: шаги используют программные имена (`Name`), а на экране видны синонимы (`Title`)
- Программная модификация формы: нужно найти элемент по тому, что видит пользователь
- Анализ формы: понять какой элемент отвечает за конкретное поле на экране
## Алгоритм поиска
### Шаг 1: XML формы (элементы конфигуратора)
Элементы, добавленные через конфигуратор, хранятся в `Form.xml`. Каждый элемент имеет `Name` (программное имя) и `Title` (видимый текст, может быть мультиязычным).
```
Form.xml:
<AutoCommandBar> → Name="FormCommandBar"
<InputField> → Name="Counterparty", Title="Customer" (en) / "Контрагент" (ru)
```
**Поиск:** grep по `Title` в `Form.xml`, взять `Name` из того же блока.
```bash
# Поиск элемента по видимому тексту
grep -B5 "Customer" path/to/Form.xml | grep "<Name>"
```
Если `Title` мультиязычный — искать по нужному языку:
```xml
<Title>
<v8:item>
<v8:lang>en</v8:lang>
<v8:content>Customer</v8:content>
</v8:item>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Контрагент</v8:content>
</v8:item>
</Title>
```
### Шаг 2: Синонимы реквизитов объекта метаданных
Если элемент формы привязан к реквизиту объекта (документа, справочника), его `Title` может наследоваться из синонима реквизита в XML объекта метаданных.
```bash
# Поиск синонима реквизита в метаданных документа
grep -A10 "<Name>Counterparty" path/to/Documents/Quote.xml
# → <Synonym> ... <v8:content>Customer</v8:content>
```
### Шаг 3: Модуль формы (программно созданные элементы)
Если в `Form.xml` элемент не найден — он создан программно. Искать в модуле формы (`Module.bsl`):
```bsl
// Типичный паттерн создания элемента:
Item = Items.Add("DSSL_MyField", Type("FormField"), ...);
Item.Title = NStr("en='My Field';ru='Моё поле'");
```
**Поиск:** grep по тексту синонима в `Module.bsl` формы.
```bash
grep -n "Customer\|Контрагент" path/to/Form/Module.bsl
```
### Шаг 4: Дерево вызовов события создания формы
Если в модуле формы напрямую не найдено — элемент создаётся во вложенных процедурах, вызываемых из обработчика `ПриСозданииНаСервере` / `OnCreateAtServer`.
> Имя события обычно на русском (`ПриСозданииНаСервере`), но в англоязычных конфигурациях может быть на английском (`OnCreateAtServer`).
Алгоритм:
1. Найти обработчик `ПриСозданииНаСервере` (или `OnCreateAtServer`) в модуле формы
2. Проследить все вызовы вглубь (вложенные процедуры, вызовы общих модулей)
3. Искать `Items.Add(...)` и установку `.Title` в каждой вызываемой процедуре
Частые места программного создания элементов:
- `DSSL_DFI` — библиотека программной модификации форм проекта
- Процедуры вида `DSSL_OnCreateAtServer`, `DSSL_ДополнитьФорму`
- Общие модули с суффиксом `Переопределяемый` / `Overridable`
### Шаг 5: LSP (если доступен)
Если подключён LSP-сервер, использовать `definition` / `references` для отслеживания вызовов из `ПриСозданииНаСервере`.
## Частые ловушки
| Ловушка | Решение |
|---|---|
| Синоним поля на экране ≠ имя элемента формы | Всегда проверять `Name`, не использовать `Title` как имя |
| Колонка таблицы наследует синоним из реквизита ТЧ | Искать в XML объекта метаданных, не только в Form.xml |
| Элемент добавлен через `DSSL_DFI` | Искать вызов `DSSL_DFI.AddField(...)` в стеке `ПриСозданииНаСервере` |
| Формат значений в таблице: `10,00` вместо `10` | Числовые поля отображаются с форматированием — в Vanessa-проверках использовать форматированное значение |
| Кнопки платформы на русском, метаданные на английском | Кнопки `Записать`, `Провести`, `Создать`, `Добавить` — всегда на языке интерфейса сеанса |
## Формат значений в таблицах 1С
При проверке значений в Vanessa через `таблица содержит строки:` учитывать формат:
| Тип | На экране | В Vanessa-проверке |
|---|---|---|
| Число | `15,00` | `'15,00'` (с запятой и десятичными) |
| Булево | галочка ☑/☐ | `'Да'`/`'Нет'` (ru) или `'Yes'`/`'No'` (en) |
| Дата | `19.03.2026` | `'19.03.2026'` |
| Пустая ссылка | пусто | `''` |
---
depends_on:
- framework/skills/tool-usage/forms/form-info/SKILL.md
---