|
oData, REST и создание документа, заполнение табличной части в 1С. | ☑ | ||
---|---|---|---|---|
0
ximik33rus
15.11.18
✎
08:59
|
Доброго времени суток.
Видал на форуме статью на похожую тему (Odata заполнение табличной части), однако нужного ответа в ней не нашел. Потому создаю новую. Рассказываю по порядку. Изучаю технологию Open Data Protocol на примере 1С Предприятия. В общем то ничего сложного, через HTTP-REST клиент, авторизацию и запросы с JSON в теле удалось получать и создавать справочники, парсить документы.. Однако неожиданно сложным оказалось понять, как заполнять табличную часть документов при создании из в 1С через POST - запрос. Все мои попытки приводили к созданию документа с пустой табличной частью. Имею в распоряжении платформу 1С:Предприятие 8.3 (8.3.10.2667). В POST запросе передаю JSON со значениями реквизитов документа и массивом ТЧ Товары. (Структуру JSON беру из результата запроса GET для того же типа документа). Ниже сокращенный пример тела запроса: {"value": [{ "Организация_Key": "59d36f49-3ee9-11e8-a725-000c290bd191", "Контрагент_Key": "befd037b-3eec-11e8-a725-000c290bd191", "Товары": [ { "Ref_Key": "83a6f31f-e809-11e8-8cd3-50465d037106", "Количество": 1, "Цена": 100, "Сумма": 100, "ПроцентСкидки": 0, "СуммаСкидки": 0, "СтавкаНДС": "БезНДС", "СуммаНДС": 0 }, { "Ref_Key": "83a6f320-e809-11e8-8cd3-50465d037106", "Количество": 1, "Цена": 200, "Сумма": 200, "ПроцентСкидки": 0, "СуммаСкидки": 0, "СтавкаНДС": "БезНДС", "СуммаНДС": 0 } ], "Posted": false, "СуммаДокумента": 300 }] } JSON валидный. запрос производится по: http://192.168.0.15/test1_baseAll/odata/standard.odata/Document_СчетНаОплатуПокупателю?$format=json Номенклатура ТЧ на тот момент уже создана в базе и имеет указанные в теле Ref_Key. В результате я получаю нужный документ с пустой ТЧ. Пробовал также после создания документа осуществить к нему повторный запрос PATCH, с фильтром по GUID и также в теле передавать JSON с массивом табличной части. В ответ получаю запрет сервера на подобную операцию. Вероятно я что то делаю не так. Также, предполагаю что в данной версии платформы этот функционал может не работать, но это не точно) Что бы сделать правильные выводы, необходимо выяснить, правильно ли осуществляется запрос? |
|||
1
Garykom
гуру
15.11.18
✎
09:51
|
LineNumber забыл
|
|||
2
ximik33rus
15.11.18
✎
09:52
|
(1) В сокращенном варианте номера строки нет, да. С LineNumber также попытки создания делал.
|
|||
3
Garykom
гуру
15.11.18
✎
09:55
|
Никакие обработчики в конфе не мешают в коде?
|
|||
4
Garykom
гуру
15.11.18
✎
09:56
|
В смысле в своей конфе (не типовой) попробуй тоже самое где создай документ с 0
|
|||
5
ximik33rus
15.11.18
✎
10:01
|
(4) Источники запроса - клиент на С# или Poster(в качестве тест-клиента). Тут никаких обработчиков нет))
Приемник - типовая 1С Бухгалтерия предприятия, редакция 3.0 (3.0.60.34). |
|||
6
НЕА123
15.11.18
✎
10:28
|
||||
7
ximik33rus
15.11.18
✎
10:31
|
(6) Был там. Не мой случай.
При попытки запроса типа PATCH (как указано в сабже) ответ системы следующий: { "odata.error": { "code": "19", "message": { "lang": "ru", "value": "Использованный HTTP метод запрещен в данном контексте" } } } |
|||
8
ximik33rus
15.11.18
✎
10:36
|
Логично было бы создавать документ сразу с номенклатурой, методом POST - запроса. Ведь связей, судя по метаданным у таблицы Document_СчетНаОплатуПокупателю_Товары с самим документом нет, а это значит предварительное создание ссылки на объект не требуется.
Хотя не исключаю вариант повторного запроса типа PATCH. Но и такой вариант как видно в (7) результата не дает. |
|||
9
exwill
15.11.18
✎
10:37
|
(0) Попробуй проделать такое не на типовой базе.
|
|||
10
ximik33rus
15.11.18
✎
10:46
|
(9) На не типовой, в смысле перепиленной БП, ЗУП и т.п?
Или что то вроде 1С CRM, управление IT-отделом? В чем принципиальная разница? В Снятии с поддержки или другой набор метаданных и обработчиков. |
|||
11
Garykom
гуру
15.11.18
✎
10:49
|
(5) Нет в типовой БП обработчики "при записи документа".
Попробуй создать свою пустую конфу и добавив документ через конфигуратор с парой полей, опубликовать и записать так же. |
|||
12
ximik33rus
15.11.18
✎
10:51
|
(11) Понял. Сделаю.
|
|||
13
exwill
15.11.18
✎
10:55
|
(10) Проведи чистый эксперимент. Создай свою базу с одним документом и попробуй его заполнить.
|
|||
14
ximik33rus
15.11.18
✎
11:03
|
(13) Создал, а вот метаданные не открыть. Обработка выгруженная из БП (НастройкаСтандартногоИнтерфейсаOData) не запускается на новой конфе, оно в принципе и понятно, конфа пустая (за исключением документа и пары справочников). Обработка сыпет ошибками на отсутствиеискомых элементов.
|
|||
15
ximik33rus
15.11.18
✎
11:06
|
ДлительныеОперации отсутствуют. Это нужно тогда На основе БСП концу делать.
|
|||
16
Filin
15.11.18
✎
11:08
|
(14) Попробуй чем попроще - https://yadi.sk/d/2uY9_4m89qnQLQ
|
|||
17
ximik33rus
15.11.18
✎
11:15
|
(16) Действительно, ничего лишнего)
Только увидела обработка справочники. Документ не открыла. Вот, подправил немного, может кому пригодится. Документы тоже добавляет теперь)) https://yadi.sk/d/pTwpbhcjKWVGaw |
|||
18
ximik33rus
15.11.18
✎
11:49
|
В общем попробовал на кастомной конфигурации.
Тело: {"value": [{ "СтроковыйРеквизит": "Имя2", "Date": "2018-11-15T10:58:09", "Ref_Key": "866be0bb-011a-4627-af20-b068b2810c86", "Товары": [ { "Ref_Key": "866be0bb-011a-4627-af20-b068b2810c86", "Товар_Key": "2bbbc659-e8ac-11e8-8cd3-50465d037106", "LineNumber": "1", "Количество": "1", "Цена": 100 }, { "Ref_Key": "866be0bb-011a-4627-af20-b068b2810c86", "Товар_Key": "214a9d06-e8ac-11e8-8cd3-50465d037106", "LineNumber": "2", "Количество": "1", "Цена": 1000 } ], "Posted": false, "СуммаДокумента": 100 }] } POST - запрос: http://192.168.0.15/test2_baseAll/odata/standard.odata/Document_ТестовыйДокумент?$format=json Ответ: { "odata.metadata": "http://192.168.0.15/test2_baseAll/odata/standard.odata/$metadata#Document_ТестовыйДокумент/@Element", "Posted": false, "СсылочныйРеквизит_Key": "00000000-0000-0000-0000-000000000000", "Date": "2018-11-15T11:40:54", "Товыры": [], "СтроковыйРеквизит": "", "Ref_Key": "295d59e2-e8b2-11e8-8cd3-50465d037106", "DeletionMark": false, "Number": "000000007", "DataVersion": "AAAAAAABjno=" } Товыры также пусты. В ПБ еще обратил внимание на СчетНаОплатуПокупателю_Товары в теле ответа имеется Ref_Key и Номенклатура_Key (думал что Ref_Key - это гуид номенклатуры - смутило что там разные были. В кастмной конфигурации посмотрел тот же ответ и по гуиду стало видно что Ref_Key (в _Товары) = Ref_Key документа. А Номенклатура_Key - собственно гуид номенклатуры. (Странно что в БП Ref_Key (в _Товары) <> Ref_Key документа, ну да ладно). К чему я, попробовал PUT и PATCH - методы применить к Document_ТестовыйДокумент_Товары с привязкой Ref_Rey. Получил в ответ ошибку "Cоздание строк табличной части напрямую не поддерживается". Ну прям вилы)) Интересно как ЭТО не на прямую? (на кривую). Как поддерживается :) |
|||
19
ximik33rus
15.11.18
✎
16:07
|
Мб, в тело лучше давать XML - atom, как формат данных, а не JSON?
|
|||
20
ximik33rus
03.12.18
✎
10:00
|
В общем, опытным путем выяснил, что Ref_Key самого счета и Ref_Key сроки таблицы товаров с счете нужно исключить из POST - запроса. 1С-ка сама в таком случае назначит эти идентификаторы и свяжет их между собой.
Пример: { "DataVersion": "AAAAAAACiz0=", "Posted": false, "Организация_Key": "59d36f49-3ee9-11e8-a725-000c290bd191", "Склад_Key": "00000000-0000-0000-0000-000000000000", "ПодразделениеОрганизации_Key": "00000000-0000-0000-0000-000000000000", "Контрагент_Key": "befd037b-3eec-11e8-a725-000c290bd191", "ДоговорКонтрагента_Key": "00000000-0000-0000-0000-000000000000", "АдресДоставки": "", "ОрганизацияПолучатель_Key": "59d36f49-3ee9-11e8-a725-000c290bd191", "СтруктурнаяЕдиница_Key": "4e3b4440-3ef3-11e8-a725-000c290bd191", "Ответственный_Key": "eac1da20-3ee8-11e8-a725-000c290bd191", "Комментарий": "", "ВалютаДокумента_Key": "4cf66526-3ee7-11e8-a725-000c290bd191", "КратностьВзаиморасчетов": "1", "СуммаСкидки": 0, "КурсВзаиморасчетов": 1, "СуммаВключаетНДС": true, "СуммаДокумента": 0, "ТипЦен_Key": "00000000-0000-0000-0000-000000000000", "УдалитьУчитыватьНДС": true, "УдалитьСтатусОплаты": "", "Руководитель_Key": "59d36f56-3ee9-11e8-a725-000c290bd191", "ГлавныйБухгалтер_Key": "59d36f56-3ee9-11e8-a725-000c290bd191", "УдалитьЗаРуководителяПоПриказу": "", "УдалитьЗаГлавногоБухгалтераПоПриказу": "", "ДокументБезНДС": true, "ДополнительныеУсловия_Key": "5fc846c3-3ee7-11e8-a725-000c290bd191", "ЗаГлавногоБухгалтераНаОсновании_Key": "00000000-0000-0000-0000-000000000000", "ЗаРуководителяНаОсновании_Key": "00000000-0000-0000-0000-000000000000", "Товары": [ { "LineNumber": "1", "Номенклатура_Key": "6a8c095a-6005-11e8-a2ed-000c290bd191", "Содержание": "Лицензионное вознаграждение за право использования ИС, передаваемое по лицензионному договору от 18.04.2018 г. за 1 декаду июля 2018 г.", "Количество": 1, "Цена": 6724761.32, "Сумма": 6724761.32, "ПроцентСкидки": 0, "СуммаСкидки": 0, "СтавкаНДС": "БезНДС", "СуммаНДС": 0 }], }, |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |