Имя: Пароль:
1C
1С v8
ODATA запись в независимый непериодический регистр сведений с помощью REST
0 ProDeveloper
 
20.07.15
14:40
1С:Предприятие 8.3 (8.3.6.1977)

Коллеги, кто-нибудь пробовал осуществлять запись в регистр сведений REST запросом через интерфейс odata. Запись в документы работает прекрасно, но в регистр сведений не удается записать ни под каким соусом.


        Соединение = Новый HTTPСоединение ("td-1c01",80,"odata.user","password",,Ложь);
        ЗаголовокHTTP = Новый Соответствие();
        
        ТекстЗапроса =
        "<?xml  version=""1.0"" encoding=""utf-8""?>
        |<entry  xmlns=""http://www.w3.org/2005/Atom"";  
        |       xmlns:d=""http://schemas.microsoft.com/ado/2007/08/dataservices"";  
        |        xmlns:m=""http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"";
        |        xmlns:georss=""http://www.georss.org/georss"";  
        |        xmlns:gml=""http://www.opengis.net/gml"">;
        |
        |   <category term=""StandardODATA.InformationRegister_astd_ЕстьБизнесПроцессПоЗаявкамНаРасходДС""  scheme=""http://schemas.microsoft.com/ado/2007/08/dataservices/scheme""; />
        |   <content type=""application/xml"">
        |      <m:properties>
        |         <d:ЗаявкаНаРасходДС_key>da8ae0fa-2648-11e5-b885-40a8f02fab07</d:ЗаявкаНаРасходДС_key>
        |         <d:ЕстьБизнесПроцесс>false</d:ЕстьБизнесПроцесс>
        |      </m:properties>
        |   </content>
        |</entry>";

        Запрос = Новый HTTPЗапрос("tdtest/odata/standard.odata/InformationRegister_astd_ЕстьБизнесПроцессПоЗаявкамНаРасходДС(guid'da8ae0fa-2648-11e5-b885-40a8f02fab07')", ЗаголовокHTTP);
        Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
        Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
        ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");
        Сообщить(ОтветВВидеСтроки);



Есть у кого рабочий пример?
1 NeoVision
 
20.07.15
14:49
и не должно, согласно документации
2 ProDeveloper
 
20.07.15
14:53
(1) Пернул в лужу? Кури мэнуал https://its.1c.ru/db/v83doc#bookmark:dev:TI000001418
там сказано:

"Особенности поведения:

Измерения регистра сведений образуют ключ записи. При попытке изменить ключ записи будет генерироваться исключение с HTTP-статусом 404. Рекомендуется в таком случае вначале удалять существующую запись, а затем добавлять новую."

Значит добавлять все таки можно. Но в том же мэнуале нет ни одной подсказки как это сделать.
3 ProDeveloper
 
20.07.15
15:21
Методом проб и ошибок взлетело!
Может кому пригодиться:
Имеется РС.astd_ЕстьБизнесПроцессПоЗаявкамНаРасходДС (независимый и непериодический), в нем 1 измерение = ЗаявкаНаРасходДС - ДокументСсылка.ЗаявкаНаРасходованиеДенежныхСредств и 1 ресурс = ЕстьБизнесПроцесс - булево

Рабочий REST запрос который делает запись в РС через интерфейс ODATA


        Соединение = Новый HTTPСоединение ("td-1c01",80,"odata.user","password",,Ложь);
        ЗаголовокHTTP = Новый Соответствие();
        
        ТекстЗапроса =
        "<?xml  version=""1.0"" encoding=""utf-8""?>
        |<entry  xmlns=""http://www.w3.org/2005/Atom"";  
        |       xmlns:d=""http://schemas.microsoft.com/ado/2007/08/dataservices"";  
        |        xmlns:m=""http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"";
        |        xmlns:georss=""http://www.georss.org/georss"";  
        |        xmlns:gml=""http://www.opengis.net/gml"">;
        |
        |   <category term=""StandardODATA.InformationRegister_astd_ЕстьБизнесПроцессПоЗаявкамНаРасходДС""  scheme=""http://schemas.microsoft.com/ado/2007/08/dataservices/scheme""; />
        |   <content type=""application/xml"">
        |      <m:properties>
        |         <d:ЗаявкаНаРасходДС_Key>da8ae0fa-2648-11e5-b885-40a8f02fab07</d:ЗаявкаНаРасходДС_Key>
        |         <d:ЕстьБизнесПроцесс>true</d:ЕстьБизнесПроцесс>
        |      </m:properties>
        |   </content>
        |</entry>";


        Запрос = Новый HTTPЗапрос("tdtest/odata/standard.odata/InformationRegister_astd_ЕстьБизнесПроцессПоЗаявкамНаРасходДС", ЗаголовокHTTP);
        Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
        Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
        ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");
        Сообщить(ОтветВВидеСтроки);

4 APXi
 
20.07.15
15:23
Вот рабочий пример.
    
Соединение = Новый HTTPСоединение("ХХХ.ХХХ.ХХХ.ХХХ", 123, "ХХ","123",,Ложь);
    ЗаголовокHTTP = Новый Соответствие();
    ТекстЗапроса =
    
        "<?xml version=""1.0"" encoding=""UTF-8""?>
                        |<entry xmlns=""http://www.w3.org/2005/Atom"";
                        |       xmlns:d=""http://schemas.microsoft.com/ado/2007/08/dataservices"";
                        |        xmlns:m=""http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"";
                        |        xmlns:georss=""http://www.georss.org/georss"";
                        |        xmlns:gml=""http://www.opengis.net/gml"">;
                            |<category term=""StandardODATA.InformationRegister_Штрихкоды"" scheme=""http://schemas.microsoft.com/ado/2007/08/dataservices/scheme""/>;
                            |<title type=""text""/>
                    |<content type=""application/xml"">
                    |<m:properties xmlns:d=""http://schemas.microsoft.com/ado/2007/08/dataservices""; xmlns:m=""http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"">;
                    |    <d:Владелец>"+Владелец+"</d:Владелец>
                    |    <d:Владелец_Type>StandardODATA.Catalog_ИнформационныеКарты</d:Владелец_Type>
                    |    <d:Штрихкод>"+ШтрихКод+"</d:Штрихкод>
                    |    <d:Характеристика_Key>00000000-0000-0000-0000-000000000000</d:Характеристика_Key>
                    |    <d:ТипШтрихкода_Key>0ac9369c-5948-11e4-8653-f4ce46aca314</d:ТипШтрихкода_Key>
                    |    <d:Упаковка_Key>00000000-0000-0000-0000-000000000000</d:Упаковка_Key>
                    |</m:properties>
                    |</content>
                    |</entry>";

    Запрос = Новый HTTPЗапрос("test/odata/standard.odata/InformationRegister_Штрихкоды", ЗаголовокHTTP);
    Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
    Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
    ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");
    Сообщить(ОтветВВидеСтроки);
5 ProDeveloper
 
20.07.15
15:57
(4) Спасибо что откликнулся, методом научного тыка в (3) я таки подобрал рабочий вариант) Но все равно выражаю благодарность.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший