> ## Documentation Index
> Fetch the complete documentation index at: https://docs.1unic.com/odatav4/llms.txt
> Use this file to discover all available pages before exploring further.

# Наборы движений

> Ручные движения регистров, подчинённых регистратору

Через OData4 можно записывать движения регистров, подчинённых регистратору: накопления, бухгалтерии, расчёта и сведений в режиме «Подчинение регистратору». Набор пишется **только целиком**, через сущность регистратора, как у `standard.odata`.

Всё берётся из метаданных конфигурации: виды регистров, допустимые регистраторы (движения документов), поля строк, счета и субконто.

## Адрес набора

```
AccumulationRegister_ТоварыНаСкладах(Recorder=guid'…',Recorder_Type='StandardODATA.Document_РеализацияТоваровУслуг')
```

Если у регистра один вид регистратора, ключ — `Recorder_Key`:

```
AccumulationRegister_ТоварыНаСкладах(Recorder_Key=guid'…')
```

## Операции

| Запрос | Результат |
| - | - |
| `POST <Вид>_<Регистр>` с телом из `Recorder`, `Recorder_Type`, `RecordSet` | `201`, набор создан. Если набор уже есть — `409` |
| `PATCH`/`MERGE` по ключу с телом `{"RecordSet": [...]}` | `200`, набор **заменён целиком**. Пустой `RecordSet` очищает набор (`204`). Без `RecordSet` ничего не меняется |
| `PUT` по ключу | Как `PATCH`, но без `RecordSet` набор становится пустым |
| `DELETE` по ключу | `204`, набор очищен |
| Строки `…_RecordType` | `405`, `Allow: GET, OPTIONS` |

```http theme={null}
PATCH /base/hs/odata/v4/AccumulationRegister_ТоварыНаСкладах(Recorder=guid'…',Recorder_Type='StandardODATA.Document_РеализацияТоваровУслуг')
Content-Type: application/json

{
  "RecordSet": [
    { "LineNumber": 1, "Period": "2026-10-01T12:00:00", "RecordType": "Expense",
      "Склад_Key": "…", "Номенклатура_Key": "…", "Количество": 2 },
    { "LineNumber": 2, "Period": "2026-10-01T12:00:00", "RecordType": "Expense",
      "Склад_Key": "…", "Номенклатура_Key": "…", "Количество": 1 }
  ]
}
```

## Строки

* Свойства строки — как у `…_RowType` в `$metadata`.
* `LineNumber` задаёт порядок строк в теле и в базу не пишется.
* Регистратор строки берётся из ключа набора.
* Аннотация `RecordSet@odata.type`, которую требует `standard.odata`, не нужна.

Регистратор должен быть документом, в движения которого входит регистр (иначе `400`). Документ должен существовать и быть виден профилю с учётом его отборов строк (иначе `404`).

**Права.** Операция профиля по регистру: `POST` — «Добавление», `PATCH`/`PUT` — «Изменение», `DELETE` — «Удаление». Кроме того, нужно право 1С «Изменение» на регистр.

**Запись.** Срабатывает бизнес-логика регистра. Проверка заполнения включается флажком «Проверять заполнение перед записью». У наборов нет ETag: `If-Match` принимается только `*`, а «Требовать If-Match» действует.

Ссылки в строках проверяются так же, как в табличных частях (см. [Надёжная запись](/odatav4/write/reliability)). При чтении поля `ИмяDr`/`ИмяCr`, которые счёт строки не ведёт, выдаются пустым значением типа, а не `null`, как у `standard.odata`.

## Субконто в строках регистров бухгалтерии

По умолчанию строки регистра бухгалтерии такие же, как у `standard.odata`: без субконто. Проводку с субконто так не записать.

Флажок «Субконто в строках регистров бухгалтерии» на вкладке «Запись» добавляет в строки поля:

* `ExtDimensionDr1…N` и `ExtDimensionCr1…N` с парами `_Type`;
* для регистра без корреспонденции — `ExtDimension1…N`.

N — наибольшее число субконто в плане счетов. K-е значение относится к K-му виду субконто счёта строки. Значение сверх видов счёта — `400`. Строки такого регистра читаются из виртуальной таблицы движений с субконто.

```json theme={null}
{
  "LineNumber": 1, "Period": "2026-10-01T00:00:00",
  "AccountDr_Key": "…", "AccountCr_Key": "…", "Сумма": 1000,
  "ExtDimensionDr1": "…", "ExtDimensionDr1_Type": "StandardODATA.Catalog_Контрагенты",
  "ExtDimensionCr1": "…", "ExtDimensionCr1_Type": "StandardODATA.Catalog_Номенклатура"
}
```

<Note>Субконто в строках — сознательное расширение интерфейса `standard.odata`.</Note>

## Сохранение субконто при изменении набора

Пока субконто в строках выключены, `PATCH`/`PUT` набора стирает субконто, как `standard.odata`. Флажок «Сохранять субконто при изменении наборов движений» (по умолчанию выключен) переносит их из прежних строк по `LineNumber`. Правила — как у колонок, скрытых профилем (следующий раздел). Строка получает только те виды субконто, которые ведёт её счёт.

## Колонки, скрытые профилем

Если профиль скрывает колонки регистра, при `PATCH`/`PUT` их значения сохраняются:

* строка тела с `LineNumber` N получает скрытые значения прежней строки N;
* строка без номера или с новым номером получает пустые значения;
* повтор номера — `400`;
* если набор не пуст, а ни у одной строки тела номера нет, — `400` «…передайте LineNumber строк», набор не меняется.

## Отличия от standard.odata

* Повторный `POST` существующего набора — `409`, у `standard.odata` — `400`.
* `PUT` поддерживается, у `standard.odata` — `405`.
* Аннотация `RecordSet@odata.type` не нужна.
* Субконто в строках — по настройке.

Подробнее — на странице [Отличия от standard.odata](/odatav4/reference/differences).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.