Имя: Пароль:
1C
1С v8
REST и процедуры
,
0 Randex
 
10.02.15
17:08
Есть ли возможность с помощью REST-запроса вызвать какую-то процедуру в 1С (сервер) и получить ответ от неё?
1 PR
 
10.02.15
17:10
(0) Вроде как нет
2 ShoGUN
 
10.02.15
17:14
(0) HTTP-сервисы поковыряй(в самых последних версиях 8.3 появилось).
3 ДенисЧ
 
10.02.15
17:42
Что вы к этому ресту все прицепились...
Подними нормальный веб-сервис и работай с ним, как белый человек....
4 SUA
 
10.02.15
17:54
в 8.3 да
5 PR
 
10.02.15
18:02
(4) Да, в смысле можно написанное в (0)?
6 PR
 
10.02.15
18:02
(3) POST запрос проще отправить, чем к веб-сервису стучаться
7 ShoGUN
 
10.02.15
18:07
(5) В смысле - можно, и REST в т.ч., без всякого мыла.
8 ShoGUN
 
10.02.15
18:07
+(7) см (2).
9 PR
 
10.02.15
18:09
(8) Эээ... а HTTP-сервисы — это REST? Я просто не в курсе.
10 ShoGUN
 
10.02.15
18:12
(9) HTTP-сервисы - это просто конструктор, которым можно реализовать, что нужно, в том числе и REST.
11 PR
 
10.02.15
18:17
(10) Ничего не понял, если честно :))
Так можно RESTом выполнить функцию или нет?
И если да, то как?
12 Господин ПЖ
 
10.02.15
18:18
(3) а если конфа типовая без доработок? откуда там нужный сервис возьмется?
13 PR
 
10.02.15
18:19
+(11) Куда здесь и что написать, например?
Это пример создания контрагента через REST посылкой POST запроса.

&НаСервере
Процедура СоздатьНовогоКонтрагентаЧерезPOSTЗапросНаСервере()
    
    Сервер = "77.37.142.90";
    ИмяБазы = "post";
    ИмяМетаданных = "Catalog";
    ИмяСправочника = "Контрагенты";
    АдресРесурса = "/" + ИмяБазы + "/odata/standard.odata/" + ИмяМетаданных + "_" + ИмяСправочника;
    
    ТекстЗапроса =
    "<?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=""EnterpriseV8." + ИмяМетаданных + ИмяСправочника + """  scheme=""http://schemas.microsoft.com/ado/2007/08/dataservices/scheme""; />
    |   <id />
    |   <title />
    |   <content type=""application/xml"">
    |      <m:properties>
    |         <d:DeletionMark>false</d:DeletionMark>
    |         <d:IsFolder>false</d:IsFolder>
    |         <d:Parent_Key m:null=""true"" />
    |         <d:Ref_Key m:type=""Edm.Guid"">00000000-0000-0000-0000-000000000000</d:Ref_Key>";
    
    Если ЗначениеЗаполнено(КодНового) Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |         <d:Code>" + КодНового + "</d:Code>";
    КонецЕсли;
    
    Если ЗначениеЗаполнено(НаименованиеНового) Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |         <d:Description>" + НаименованиеНового + "</d:Description>";
    КонецЕсли;
    
    Если ЗначениеЗаполнено(КомментарийНового) Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |         <d:Комментарий>" + КомментарийНового + "</d:Комментарий>";
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ГУИДГородаНового) Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |         <d:Город_Key>" + ГУИДГородаНового + "</d:Город_Key>";
    КонецЕсли;
    
    ТекстЗапроса = ТекстЗапроса + "
    |      </m:properties>
    |   </content>
    |</entry>";
    
    Соединение = Новый HTTPСоединение(Сервер, , "Пользователь", "password");
    
    ЗаголовокHTTP = Новый Соответствие();
    //ЗаголовокHTTP.Вставить("POST  /" + ИмяБазы + "/odata/standard.odata/" + ИмяМетаданных + "_" + ИмяСправочника + " HTTP/1.1");
    //ЗаголовокHTTP.Вставить("Content-Type", "application/atom+xml");
    //ЗаголовокHTTP.Вставить("DataServiceVersion", "3.0;NetFx");
    //ЗаголовокHTTP.Вставить("MaxDataServiceVersion", "3.0;NetFx");
    //ЗаголовокHTTP.Вставить("Accept", "application/atom+xml,application/xml");
    //ЗаголовокHTTP.Вставить("Accept-Charset", "UTF-8");
    //ЗаголовокHTTP.Вставить("User-Agent", "1C-Enterprise");
    //ЗаголовокHTTP.Вставить("Host", Сервер);
    Запрос = Новый HTTPЗапрос(АдресРесурса, ЗаголовокHTTP);
    Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
    ОтветОтСоединения = Соединение.ОтправитьДляОбработки(Запрос);
    Ответ = ОтветОтСоединения.ПолучитьТелоКакСтроку("UTF-8");
    
    Соединение = Неопределено;
    
КонецПроцедуры
14 ShoGUN
 
10.02.15
18:23
(13) http://v8.1c.ru/o7/201312http/index.htm - это то, о чём я говорил, конструктор произвольного сервиса.
Но есть ещё и такое, не обращал внимания до этого:
http://v8.1c.ru/o7/201312rest/index.htm
15 PR
 
10.02.15
18:29
(14) Таки да, я про второе и говорю.
После этой статейки я http://77.37.142.90/post/ и сварганил, чисто с целью изучить сей механизм.
Но, как я понял, REST, описанный во второй статье, не позволяет выполнять произвольные функции?
16 PR
 
10.02.15
18:32
+(15) Хотя...
Чувствую, надо бы поизучать механизм, а то ощущение, что плаваю в методике :))
17 ShoGUN
 
10.02.15
18:32
(15) Зато в первой - позволяет.
18 ShoGUN
 
10.02.15
18:34
+(17) Через прослойку, конечно, но в принципе - всё реально.
19 PR
 
10.02.15
18:38
(17) Ну так в первой-то да, но вопрос-то в (0) "...с помощью REST-запроса...".
20 ShoGUN
 
10.02.15
18:42
(19) Ну описать REST-интерфейс к конкретной процедуре. Ему ж не любую произвольную процедуру вызвать надо, а вполне конкретную.
21 Randex
 
10.02.15
18:53
(20) И как же это сделать? Описать REST-интерфейс к конкретной процедуре.
22 PR
 
10.02.15
18:55
(20) Упс. А так можно?
23 ShoGUN
 
10.02.15
19:00
(21)(22) HTTP-сервис, шаблоны задаёте, какие надо, добавляете 4 метода - GET, POST, PUT, DELETE. Внутри обработчиков методов пишете обёртку для любых других методов 1С.
24 ShoGUN
 
10.02.15
19:01
+(23) Низкоуровнево, но кому сейчас легко...
25 ShoGUN
 
10.02.15
19:04
Ещё раз рекомендую прочитать статью из http://v8.1c.ru/o7/201312http/index.htm
И обратить внимание, что URL там не жёсткий, а шаблон, и куски этого шаблона доступны через Запрос.ПараметрыURL
26 Randex
 
10.02.15
19:28
(25) Выглядит похоже на то, что нам нужно. Спасибо большое.