Как это устроено
Коллекционные адреса и пачки
Адрес, который заканчивается маркером без имени, — коллекционный. Чтение по нему возвращает список, а запись принимает массив definition и создаёт до 100 узлов одним атомарным вызовом — либо все, либо ни одного.
Правила
- Коллекционный адрес — маркер без имени в конце:
Catalog.Номенклатура.Attribute,<форма>.Item,…DataSet.<Набор>.Field,<макет>.Cell,Role.<Роль>.Rights. - Массив в
definitionвместо объекта включает пакетный режим. Каждый элемент несёт своё имя:nameу метаданных, форм и СКД,cellу ячеек макета,objectу прав ролей. - До 100 элементов за вызов. У ячеек макета ещё ограничение 1000 ячеек: диапазон
R2C1:R2C9— это 9 ячеек. - Атомарно. Если хоть один элемент не проходит, откатывается вся пачка, и ответ называет виновника:
definition[i] «Имя»: причина. - Порядок сохраняется. Поздние элементы видят ранние: в одной пачке можно создать группу формы и поля внутри неё.
- Контракт пачки — грань
#helpна коллекционном адресе read-инструмента, напримерmetadata_readс адресомCatalog.Номенклатура.Attribute#help.
| Инструмент | Коллекционный адрес | Операция | Ключ элемента |
|---|---|---|---|
metadata_write |
Catalog.X.Attribute, Document.X.TabularSection.Y.Attribute |
create |
name |
form_write |
<форма>.Item, .Attribute, .Command, .Parameter, .Attribute.X.Column |
create |
name |
dcs_write |
…DataSet.X.Field, …TotalField и другие коллекции схемы |
create |
name |
spreadsheet_write |
<макет>.Cell |
update |
cell |
rights_write |
Role.X.Rights, Role.X.RestrictionTemplate |
update, create |
object, name |
code_write |
модуль | create_method |
массив текстов в content |
Пример: три реквизита одним вызовом
{
"project": "УТ2020",
"operation": "create",
"fqn": "Catalog.Тест.Attribute",
"definition": [
{ "name": "ИНН", "type": "Строка(12)" },
{ "name": "Скидка", "type": "Число(5,2)" },
{ "name": "Партнёр", "type": "СправочникСсылка.Партнеры" }
]
}Ответ — один заголовок с отметкой ×3 и по строке на каждый созданный узел:
### 🟢 create — Catalog.Тест.Attribute ×3
- **status:** 🟢 committed
- **fqn:** `Catalog.Тест.Attribute`
- **operation:** `create`
- **count:** 3
#### Changes
- создан Attribute Catalog.Тест.Attribute.ИНН [Строка(12)]
- создан Attribute Catalog.Тест.Attribute.Скидка [Число(5,2)]
- создан Attribute Catalog.Тест.Attribute.Партнёр [СправочникСсылка.Партнеры]Та же пачка с опечаткой в типе второго элемента не создаёт ничего и называет виновника:
### 🟠 create — Catalog.Тест.Attribute ×3
- **status:** 🟠 rolled_back
- **fqn:** `Catalog.Тест.Attribute`
- **operation:** `create`
- **count:** 3
- **rollback_reason:** definition[1] «Скидка»: тип не разрешён: «Чизло(5,2)»; контракт: metadata_read Catalog.Тест.Attribute#helpКогда пачка, а когда отдельные вызовы
Пачка выгодна, когда узлов три и больше: один вызов, одна проверка, одна запись и одна точка отката. Отдельные вызовы нужны, когда следующий шаг зависит от результата предыдущего — например, сначала узнать имя группы в дереве формы, потом создавать поля.
Типичные ошибки
- Массив на именованном адресе (
Catalog.X.Attribute.ИНН+ массив) или объект на коллекционном — отказ с подсказкой, какой режим ожидался. - Элемент без
name— отказ всей пачки с номером элемента. - Больше 100 элементов — разбейте на несколько вызовов.
Нашли ошибку — предложите правку.обновлено 30.09.2026