Имя: Пароль:
1C
1С v8
Post запрос к 1C REST
0 goshulina
 
22.06.18
09:35
Добрый день!

Прошу помощи сформировать правильный ПОСТ запрос и понять как они вообще делаются. Пример кода на python

1С:Предприятие 8.3 (8.3.11.3034) Тонкий клиент (SCloud решение)
Бухгалтерия предприятия, редакция 3.0 (3.0.57.17)

Не могу сделать запись POST методом к опубликованному REST интерфейсу в 1С. В частности не понимаю как правильно сформировать POST запрос на добавление записи в сущность Document_ (пробовал отправлять в формате json).
При полной выгрузке метадаты там много полей. Есть поля с 16ти битными ключами (guid). Я думал их надо просто генерировать. Но непонятно как сформированы записи в самой 1С. При полной выгрузке метадаты записи  сформированы в теге entry и в отличии от уникальности каждой entry (отличается например параметр суммы), guid ключи повторяются от записи к записи. То есть есть несколько разных записей под entry о прошедших операциях, а ключи guid (для них тут разные параметры: Ref_Key, ДокументОснование и т д.) встречаются одни и те же у разных entry. Возможно есть какая то более подробная документация как формировать post запрос? Доустпная 7ми дневная документация не помогает в этом
https://its.1c.ru/db/v8312doc#bookmark:dev:TI000001373
Какие то обязательные поля при создании записи через REST в теле запроса?
Пример запроса:

address = 'https://login:password@db_adress/odata/standard.odata/Document_СчетФактураПолученный/'
Ref_Key = uuid.uuid1() # 16ти битный ключ случайно сгенерирован
data = {
    "Ref_Key": str(Ref_Key),
    "DeletionMark": False,
    "IsFolder": False,
    "Организация_Key": "cbb38rr1-01c0-11r1-80c4-0dd47ab21cf7",
    "ВидСчетаФактуры": "НаПоступление",
    "Контрагент_Key": str(uuid.uuid1()),
    "ДоговорКонтрагента_Key": str(uuid.uuid1()),
    "НомерВходящегоДокумента": 12345678900000,
    "ДатаВходящегоДокумента": "2018-06-11T00:00:00",
    "Исправление": False,
    "СуммаДокумента": 5204.98,
    "СуммаНДСДокумента": 793.98,
    "Комментарий": "тестирование"
}
headers = {
    "Accept": "application/json",
    "Accept-Charset": "UTF-8",
    "User-Agent": "Fiddler",
    "Content-Type": "application/json",
    "Content-Length": "1234"
}
r = requests.post(address, data=data, headers=headers)
r.content.decode('utf-8')

Примеры ошибок
'{\r\n"odata.error": {\r\n"code": "-1",\r\n"message": {\r\n"lang": "ru",\r\n"value": "Непредвиденный символ при чтении JSON"\r\n}\r\n}\r\n}'
иногда приходила такая ошибка:
Ошибка разбора XML: - [1,1]

Помогите :(
1 1Снег
 
22.06.18
09:39
2 Cyberhawk
 
22.06.18
09:45
//обновление документа через ПАТЧ-запрос
    ТипМетаданных = "Document";
    ОбъектМетаданных = "РегистрацияШтрафа";
    АдресРесурса = "/" + ИмяОпубликованнойБазы + "/odata/standard.odata/" + ТипМетаданных + "_" + ОбъектМетаданных + "(guid'" + ГУИД + "')"
        + "?$format=json"
        + ";odata=nometadata"
    ;
    ЗапросПАТЧ = Новый HTTPЗапрос;
    ЗапросПАТЧ.АдресРесурса = АдресРесурса;
    ЗапросПАТЧ.Заголовки.Вставить("1C_OData-DataLoadMode", "true");
    //ЗапросПАТЧ.Заголовки.Вставить("Accept", "application/json");
    ТелоЗапросаПАТЧ = "{
    //|    ""odata.metadata"": ""http://"; + СерверИПорт + "/" + ИмяОпубликованнойБазы + "/odata/standard.odata/$metadata#" + ТипМетаданных + "_" + ОбъектМетаданных + "/@Element"",
    |    ""НомерВходящегоДокумента"": ""%НомерВходящегоДокумента""
    |    ,
    |    ""ДатаВходящегоДокумента"": ""%ДатаВходящегоДокумента""
    |}";
    ТелоЗапросаПАТЧ = СтрЗаменить(ТелоЗапросаПАТЧ, "%НомерВходящегоДокумента", НомерВходящегоДокумента);
    ТелоЗапросаПАТЧ = СтрЗаменить(ТелоЗапросаПАТЧ, "%ДатаВходящегоДокумента", Формат(ДатаВходящегоДокумента, "ДФ=yyyy-MM-dd"));
    ЗапросПАТЧ.УстановитьТелоИзСтроки(ТелоЗапросаПАТЧ);//, , ИспользованиеByteOrderMark.НеИспользовать);
    Ответ = Соединение.Изменить(ЗапросПАТЧ);
3 goshulina
 
27.06.18
10:01
(1) Спасибо
(2) Спасибо чуваки) Заработало) Кеш только пришлось почистить.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.