Рецепты
Реквизит и вывод на форму
Цель — добавить в справочник Контрагенты реквизит «Дата первого контакта» и вывести его на форму элемента рядом с нужным полем, с точкой отката до начала.
Предпосылки
- EDT открыт, проект конфигурации загружен; агент подключён —
project_readотвечает списком проектов. - Действует ключ или бесплатный доступ: инструменты записи и снапшоты — по подписке.
- Справочник не закрыт поставщиком:
metadata_readпо адресуCatalog.Контрагентыне показывает в заголовке🔒 на поддержке. Если показывает — сделайте то же в расширении (Расширение с перехватом метода).
Шаги
1. Снапшот перед серией правок
{ "operation": "create", "label": "до реквизита ДатаПервогоКонтакта" }Ожидаемый ответ: 🟢 committed и идентификатор снапшота. Запомните его — он нужен для diff и отката.
2. Контракт записи реквизита
{ "project": "УТ2020", "fqn": "Catalog.Контрагенты.Attribute#help" }Ответ перечисляет ключи definition для реквизита и допустимые записи типов: Строка(N), Число(p,s), Дата(Date|Time|DateTime), ссылочные СправочникСсылка.X. Если объект закрыт поставщиком, первая строка справки об этом предупредит.
3. Создать реквизит
{
"project": "УТ2020",
"operation": "create",
"fqn": "Catalog.Контрагенты.Attribute.ДатаПервогоКонтакта",
"definition": { "type": "Дата(Date)", "synonym": "Дата первого контакта" }
}Ожидаемый ответ: заголовок ### 🟢 create — Catalog.Контрагенты.Attribute.ДатаПервогоКонтакта, статус 🟢 committed, в секции Changes — созданный реквизит с типом в квадратных скобках. Опечатка в типе даёт 🟠 rolled_back с причиной и ссылкой на контракт — справочник при этом не меняется.
4. Найти место на форме
{ "project": "УТ2020", "fqn": "Catalog.Контрагенты.Form.ФормаЭлемента" }Ответ — дерево элементов формы с путями к данным. Выберите группу, в которой должно стоять поле, и поле, после которого его поставить. Путь группы записывается от корня через точку, например ГруппаВерх.ГруппаЛево.
5. Вывести поле на форму
{
"project": "УТ2020",
"operation": "create",
"fqn": "Catalog.Контрагенты.Form.ФормаЭлемента.Item.ДатаПервогоКонтакта",
"definition": {
"kind": "field",
"data_path": "Объект.ДатаПервогоКонтакта",
"parent": "<путь группы из шага 4>",
"position": "after:<имя поля из шага 4>"
}
}Ожидаемый ответ: 🟢 committed, в Changes — новый элемент формы. Без parent поле встанет в корень формы, без position — последним в группе. Поле создаётся так же, как командой «Добавить элемент» в редакторе формы EDT: с привязкой к данным и всеми обязательными свойствами.
6. Посмотреть форму глазами человека
{ "project": "УТ2020", "fqn": "Catalog.Контрагенты.Form.ФормаЭлемента#screenshot" }Ответ — картинка формы, как её рисует редактор EDT. Агент видит, куда встало поле.
7. Что изменилось
{ "operation": "diff_semantic", "snapshot_id": "<идентификатор из шага 1>" }Ответ описывает изменения по объектам: новый реквизит справочника с типом и новый элемент формы — без построчного XML.
Проверка
{ "operation": "check", "project": "УТ2020", "fqn": "Справочник.Контрагенты" }Точечная проверка объекта без полной пересборки проекта: ошибок быть не должно. Откройте форму элемента справочника в EDT — поле «Дата первого контакта» стоит в выбранной группе.
Откат
Всё сразу — к снапшоту из шага 1:
{ "operation": "restore", "snapshot_id": "<идентификатор из шага 1>" }Только форму — вернуть один файл, оставив реквизит:
{
"operation": "revert_file",
"snapshot_id": "<идентификатор из шага 1>",
"path": "УТ2020/src/Catalogs/Контрагенты/Forms/ФормаЭлемента/Form.form"
}Удалить только поле — form_write с операцией delete и тем же адресом элемента. Подробнее об откате — Откат работы агента.