odata и odatat) принимают POST, PUT, PATCH, MERGE (то же, что PATCH) и DELETE. Запись идёт объектной моделью 1С с бизнес-логикой конфигурации, так же как при записи из формы.
Методы
Проведение документов описано на странице Проведение, наборы движений регистров — на странице Наборы движений.
Только для чтения (
405 с заголовком Allow):
- строки регистров, подчинённых регистратору (
…_RecordType): наборы движений пишутся целиком через регистратор; - журналы документов;
- наборы табличных частей: строки пишутся через объект-владелец;
- результаты виртуальных таблиц.
Пример
Тело запроса
JSON-объект, имена свойств — как в$metadata.
- Ссылки —
Имя_Keyс GUID илиИмя@odata.bind:"[email protected]": "Catalog_Склады(guid'…')". Форма OData v4Catalog_Склады(…)и полный адрес тоже принимаются. - Составные поля — пара
ИмяиИмя_Type. Тип:StandardODATA.Catalog_X,Edm.String,Edm.Decimal,Edm.Boolean,Edm.DateTimeOffset,StandardODATA.Undefinedили перечисление. - Перечисления — имя значения.
- Даты с часовым поясом переводятся в местное время базы, без пояса — пишутся как есть.
- Табличные части — массивы объектов.
LineNumberв строке необязателен.
standard.odata. Это DataVersion, Predefined, PredefinedDataName, Posted, LineNumber, а при изменении ещё Ref_Key и IsFolder. Чтобы неизвестное свойство давало ошибку 400 с его именем (строгий OData v4), включите флажок «Отвергать неизвестные свойства» на вкладке «Запись» настроек.
Ответ
Ответ на создание и изменение содержит записанный объект. К нему применяются$select, $expand и $format, другие параметры запроса дают 400.
Заголовок Prefer: return=minimal даёт 204 без тела и с Preference-Applied. У создания в таком ответе есть ещё Location и OData-EntityId.
Действия (Post, Unpost) выполняются только методом POST. Метод, не применимый к ресурсу, получает 405 с заголовком Allow.
Бизнес-логика
Запись идёт сОбменДанными.Загрузка = Ложь, поэтому срабатывают ПередЗаписью, ОбработкаПроведения и подписки на события конфигурации.
- Один запрос — одна транзакция с управляемой блокировкой объекта. Любая ошибка откатывает всё.
- Перед записью вызывается
ПроверитьЗаполнение(). Проверку выключает флажок «Проверять заполнение перед записью» на вкладке «Запись». По умолчанию он включён, это строже, чем уstandard.odata. - Проведённый документ после
PATCH/PUTперепроводится, как кнопка «Записать» в форме 1С. - Пометка удаления проведённого документа снимает проведение.
400. Отдельные коды: 403 при нарушении прав, 412, если объект изменён другим сеансом, 409 при конфликте блокировок. Сообщения пользователю (Сообщить, ошибки проверки заполнения) приходят в error.details, а target указывает поле:
"code": "Exception" несёт постоянный текст. Сам текст исключения, стек и модуль пишутся в журнал регистрации, событие OData4.Запись. Флажок «Подробные ошибки записи клиенту» отдаёт текст причины в ответе. Включайте его только на время отладки.
Удаление
По умолчаниюDELETE ставит пометку удаления (у standard.odata объект удаляется). Режим выбирается на вкладке «Удаление» в поле «Режим DELETE».
- Пометка удаления — по умолчанию.
- Физическое удаление по праву профиля. Без профиля объект удаляется при праве 1С «Удаление». С профилем нужны ещё права профиля «Физическое удаление» и «Удаление». В остальных случаях ставится пометка.
409, а объект остаётся. Субъект без профиля видит число и виды ссылающихся объектов (те, что пользователь может читать). Субъект с профилем видит только виды, которые профиль разрешает читать, без числа.
На вкладке «Удаление» есть чек-лист. Он показывает включённый режим, профили с правом физического удаления и учётки с правом 1С «Удаление» на объекты состава.
Права
- Профиль, если он есть у субъекта, проверяет операцию:
Добавление,Изменение,Удаление,ФизическоеУдаление,Проведение,ОтменаПроведения. Отказ —403«Операция «Изменение» над набором Catalog_X запрещена профилем». - Права 1С пользователя или служебной учётки проверяются до бизнес-логики. Нарушение —
403, обработчики не запускаются.
- запись требует права «Чтение»: закрытый набор отвечает
404; - изменение
DeletionMarkтребует права «Удаление»; - изменение проведённого документа требует права «Проведение».
404. Объект, который после записи выходит за отборы, — 403 и откат. Поля, исключённые профилем, не записываются.
Профиль может исключать колонки табличной части. Тогда скрытые значения сопоставляются по LineNumber из тела:
- строка с прежним номером получает свои скрытые значения;
- строка без номера или с новым номером получает пустые;
- повтор номера —
400; - если в объекте строки есть, а ни у одной строки тела номера нет, —
400«…передайте LineNumber строк», данные не меняются.
PUT без такой табличной части её не очищает.
Роли расширения OData4 прав на объекты конфигурации не дают. Права на запись выдают роли конфигурации пользователю или служебной учётке. Подробнее — в разделе Модель доступа.
Сознательные отличия от standard.odata
DELETE ставит пометку, ETag и If-Match работают, Prefer: return=minimal учитывается. Испорченный JSON, дубль ключа и ошибки проведения возвращаются кодами 4xx, а не 200 или 500. Полный список — на странице Отличия от standard.odata.