![]() |
![]() |
![]() |
|
Odata заполнение табличной части | ☑ | ||
---|---|---|---|---|
0
rubetek
10.02.17
✎
17:50
|
1С 8.3 редакция 3.0
Делаю интеграцию сайта с 1С через Odata в формате json. Контрагентов создал успешно. При создании акта возникла проблема: акт создал, далее пытаюсь заполнить табличную часть. Отправляю запрос на добавление одной строки, а мне в ответ: { "odata.error": { "code": "13", "message": { "lang": "ru", "value": "Cоздание строк табличной части напрямую не поддерживается" } } } Через odata в json нельзя добавить строки? |
|||
1
PR
10.02.17
✎
18:12
|
(0) Какое из написанных слов тебе непонятно?
|
|||
2
rubetek
13.02.17
✎
09:09
|
Непонятно как тогда добавить строки
|
|||
3
Cyberhawk
13.02.17
✎
09:27
|
Покажи формирование запроса
|
|||
4
rubetek
13.02.17
✎
09:47
|
Создаю акт
/odata/standard.odata/Document_ПоступлениеТоваровУслуг()?$format=application/jsonArray ( [Организация_Key] => 69f89d71-e7c1-11e6-a39c-50e549a0019a [Контрагент_Key] => cc2f1829-e7c3-11e6-a39c-50e549a0019a ) Создаю строку /odata/standard.odata/Document_ПоступлениеТоваровУслуг_Услуги()?$format=application/jsonArray ( [Количество] => 4000 [Цена] => 3.4 [СтавкаНДС] => НДС18 [Ref_Key] => ea192958-f1b7-11e6-8da2-50e549a0019a ) Видимо так нельзя потому что 1с-у надо что то пересчитать при добавлении строк... (( |
|||
5
Cyberhawk
13.02.17
✎
10:08
|
Используй ПАТЧ-запрос, передавая всю ТЧ целиком
|
|||
6
rubetek
13.02.17
✎
13:10
|
1. Делаю POST запрос на создание акта.
2. Методом PATCH по guid редактирую его с такими данными /odata/standard.odata/Document_ПоступлениеТоваровУслуг(guid'01d22eff-f1d2-11e6-8da2-50e549a0019a')?$format=application/json Array ( [Услуги] => Array ( [0] => Array ( [Количество] => 4000 [Цена] => 3.4 [СтавкаНДС] => НДС18 ) [1] => Array ( [Количество] => 4000 [Цена] => 3.4 [СтавкаНДС] => НДС18 ) ) [Ref_Key] => 01d22eff-f1d2-11e6-8da2-50e549a0019a ) Получаю ошибку: resulted in a `500 Internal server error` response Я правильно обновляю акт? |
|||
7
rubetek
13.02.17
✎
14:10
|
Сервер отвечает
{ "odata.error": { "code": "-1", "message": { "lang": "ru", "value": "Произошла внутренняя ошибка OData сервиса. Дополнительные сведения можно найти в технологическом журнале." } } } К сожалению, нет возможности этот журнал посмотреть, мне кажется, что я неправильно json запрос формирую. |
|||
8
rubetek
13.02.17
✎
14:35
|
Есть где нибудь документация? какие поля обязательные, какие нет, думаю что дело в полях
|
|||
9
Cyberhawk
13.02.17
✎
14:37
|
(7) "кажется, что я неправильно json запрос формирую"
(8) "Есть где нибудь документация?" ИТС тебе в помощь: https://its.1c.ru/db/v839doc#bookmark:dev:TI000001374 |
|||
10
rubetek
13.02.17
✎
16:13
|
Cyberhawk, спасибо за ссылку, доступа нет у меня туда, распечатали всю 17 главу мне ).
А проблема была вот в чем. В каждой услуге надо было поставить поле LineNumber. Как его поставил, 500 ошибка пропала. Потом появилась следующая ошибка: данные шапки менялись, а услуги не добавлялись. Проблема решилась так: Добавил поле в шапку ВидОперации = "Услуги". Спасибо ) |
|||
11
Cyberhawk
13.02.17
✎
16:28
|
(10) "доступа нет у меня туда" // Там есть демо-доступ
|
|||
12
rubetek
13.02.17
✎
16:31
|
Кстати, если правильно сформировать json сразу, то POST-ом все прекрасно записывается =)
|
|||
13
Cyberhawk
13.02.17
✎
16:54
|
(12) Код-то выкладывай потомкам не память
|
|||
14
Cyberhawk
13.02.17
✎
16:54
|
*на память
|
|||
15
rubetek
13.02.17
✎
17:17
|
Код на php, написан свой клиент небольшой, ну все элементарно: генерация url, да отправка на него json-а.
В качестве http клиента используется Guzzle. Основные методы: /** * @param string $method1C Метод в 1С, например "Document_ПоступлениеТоваровУслуг" * @param array $data Массив данных который надо отправить в 1C * @param string $method HTTP метод * @param null $guid ID сущности в 1C * @param array $params Фильтры * @throws RequestException * @return array */ public function sendData($method1C, $data, $method = 'GET', $guid = null, array $params = []) { $client = new Client(); if (!empty($guid)) { $guid = "guid'$guid'"; } $url = $this->getUrl($method1C."($guid)", $params); try { $res = $client->request($method, $url, [ 'json' => $data, ]); } catch (ClientException $ex) { throw new RequestException($ex->getResponse()->getBody()->getContents()); } catch (RequestExceptionGuzzle $ex) { throw new RequestException($ex->getResponse()->getBody()->getContents()); } $content = $res->getBody()->getContents(); return json_decode($content, true); } /** * @param string $method * @param array $params * @return string */ private function getUrl($method, array $params = []) { $url = $this->server.'/'.$method.'?$format=application/json'; foreach ($params as $name => $value) { $url .= '&'.$name.'='.$value; } return $url; } Минимальные данные для создания акта с услугами в табличной части /odata/standard.odata/Document_ПоступлениеТоваровУслуг()?$format=application/json Array [ [Услуги] => Array [ [0] => Array [ [LineNumber] => 1 ] [1] => Array [ [LineNumber] => 2 ] ] [ВидОперации] => Услуги ] |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |