С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
1

Веб сервис для 1С

29.06.2017, 20:08. Просмотров 679. Ответов 14
Метки нет (Все метки)

Добрый день

Сделал веб сервис на битриксе.

Суть такая : 1C обращается к веб сервису и происходит изменение количества товара на складе...

Вот частично код веб сервиса

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 function GetWebServiceDesc() 
   {
      $wsdesc = new CWebServiceDesc();
      $wsdesc->wsname = "bitrix.webservice.addproduct"; // название сервиса
      $wsdesc->wsclassname = "CAddproductWS"; // название класса
      $wsdesc->wsdlauto = true;
      $wsdesc->wsendpoint = CWebService::GetDefaultEndpoint();
      $wsdesc->wstargetns = CWebService::GetDefaultTargetNS();
 
      $wsdesc->classTypes = array();
      $wsdesc->structTypes = Array();
      $wsdesc->classes = array();
$wsdesc->classes = array(
   "CAddproductWS"=> array(
      "Addproduct" => array(
         "type"      => "public",
         "input"      => array(
         
        
 
         
          "ID" => array("varType" => "string"),
        "ID_SKLADA" => array("varType" => "string"),
        "KOL_VO" => array("varType" => "integer"),
   
            ),
         "output"   => array(
            "AMOUNT" => array("varType" => "integer")
         ),
         "httpauth" => "Y"
      ),
   )
);
      return $wsdesc;
   }
   
   
                function Addproduct($ID,$ID_SKLADA,$KOL_VO)
{
 
      
      $arFields = Array(
        "PRODUCT_ID" => $arFields["ID"],
     "STORE_ID" => $arRes['ID'],
        "AMOUNT" => $KOL_VO
    );
    
    
      
      
      
      
  
   $result = CCatalogStoreProduct::UpdateFromForm($arFields);
 
   
 if($result>0)
      return Array("AMOUNT"=>"1");
 
return new CSOAPFault( 'Server Error', 'Error: '.$ib_element->LAST_ERROR );
   
 
 
 
        
   
   
   
}




Веб сервис работает отлично.Но нужно его переделать так чтобы он мог принимать несколько значений за 1 запрос и обрабатывал их..

Сначала сделал 1 строку с разделителями. Т.е. вот так:

ID Товара,ID склада, количество; ID Товара,ID склада, количество;

И сделал в веб сервисе цикл для обработки этих данных..Это работает.Но проблема в том что 1С программисты говорят что так им неудобно и они хотят отправлять информацию примерно в таком формате

"

<СписокЭлементовОбмена>
<ЭлментОбмена>
<>IDНоменклатуры</>
<>IDСклада</>
<>Количество</>
</ЭлментОбмена>

<ЭлментОбмена>
<>IDНоменклатуры</>
<>IDСклада</>
<>Количество</>
</ЭлментОбмена>

<ЭлментОбмена>
<>IDНоменклатуры</>
<>IDСклада</>
<>Количество</>
</ЭлментОбмена>

</СписокЭлементовОбмена>

"

Т.е. за 1 запрос хотят передать несколько значений и чтобы веб сервис их обработал.Я если честно не представляю как это сделать..Может кто то наведет на правильную мысль?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2017, 20:08
Ответы с готовыми решениями:

Веб-сервис
Добрый день, простите если вдруг пишу не туда Хочу реализовать один...

Сервис для хранения визуальных закладок
доброе времени суток, ребята. мне нужен скрипт, как типа маинпаге.инфо ,...

PHP. Сервис для рассылки СМС
Добрый вечер. Подскажите недорогие, на первое время сайты, или названия...

Посоветуйте украинский сервис для отправки смс PHP скриптом
Посоветуйте украинский сервис для отправки смс PHP скриптом. Интересует именно...

сетевой сервис, типа форума, для редактирования кода и эффективного обмена знаниями
Здравствуйте. Началось всё с того, что я решил создать себе редактор, близкий к...

14
Валентин^_^
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 174
29.06.2017, 20:44 2
Цитата Сообщение от Gunner91 Посмотреть сообщение
Т.е. за 1 запрос хотят передать несколько значений и чтобы веб сервис их обработал.Я если честно не представляю как это сделать..Может кто то наведет на правильную мысль?
Передавать данные в формате json
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
29.06.2017, 20:45  [ТС] 3
Разве в 1С так можно ? и что изменить мне тогда при приеме ?

Мне кажется есть решение и без json
0
Валентин^_^
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 174
29.06.2017, 20:52 4
Не знаком с 1С, нужно разобраться как можно из 1с-ки передавать.

В 1с ке создаете объект/массив данных, передаете его на бекенд веб-сервиса, парсите данные и в цикле обрабатываете.

Добавлено через 4 минуты
Цитата Сообщение от Gunner91 Посмотреть сообщение
<СписокЭлементовОбмена>
<ЭлментОбмена>
<>IDНоменклатуры</>
<>IDСклада</>
<>Количество</>
</ЭлментОбмена>
<ЭлментОбмена>
<>IDНоменклатуры</>
<>IDСклада</>
<>Количество</>
</ЭлментОбмена>
<ЭлментОбмена>
<>IDНоменклатуры</>
<>IDСклада</>
<>Количество</>
</ЭлментОбмена>

</СписокЭлементовОбмена>
А, ну так вот же, похоже на xml. Надо сделать что бы веб сервис принимал xml.
http://www.php.su/functions/?cat=domxml
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
29.06.2017, 21:58  [ТС] 5
Это просто структура для примера. В 1С врядле можно передавать json.
Кто разбирается пожалуйста проконсультируйте по этому вопросу.
0
nikisha
39 / 35 / 23
Регистрация: 10.11.2013
Сообщений: 89
30.06.2017, 07:36 6
можно работать с JSON начиная с версии 8.3.6.1977
а передать можно через
1C
1
COMОбъект("WinHttp.WinHttpRequest.5.1")
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
30.06.2017, 11:28  [ТС] 7
Поясните.. Т.е. на стороне самого веб сервиса ничего менять не надо ? За 1 запрос передать несколько значений можно средствами 1C ?
0
Валентин^_^
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 174
30.06.2017, 11:47 8
Цитата Сообщение от Gunner91 Посмотреть сообщение
Поясните.. Т.е. на стороне самого веб сервиса ничего менять не надо ?
Надо сделать что бы веб сервис принимал один параметр - строку, в которой будет json, затем воспользоваться http://www.php.net/json_Decode и в цикле обработать записи

Цитата Сообщение от Gunner91 Посмотреть сообщение
За 1 запрос передать несколько значений можно средствами 1C ?
Да
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
30.06.2017, 13:21  [ТС] 9
1С программисты скинули пример.. Только вот я не представляю что с ним делать..


---------------------

Вот пример wsdl вэб сервиса для обмена номенклатурой и контрагентами

Метод SetNonenclature принимает список объектов номенклатуры.
Обратите внимание на типы WSNomenclatureList и ArrayOfWSNomenclature.
This XML file does not appear to have any style information associated with it. The document tree is shown below.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"xmlns:tns="http://sturm.xchange.ws.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:s1="http://microsoft.com/wsdl/types/" xmlns:s="http://www.w3.org/2001/XMLSchema"xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://sturm.xchange.ws.com/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://sturm.xchange.ws.com/">
<s:import namespace="http://microsoft.com/wsdl/types/"/>
<s:element name="SetNonenclature">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="nmk" type="tns:WSNomenclatureList"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="WSNomenclatureList">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="nmklist" type="tns:ArrayOfWSNomenclature"/>
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfWSNomenclature">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="WSNomenclature" nillable="true" type="tns:WSNomenclature"/>
</s:sequence>
</s:complexType>
<s:complexType name="WSNomenclature">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="IDRRef" type="s1:guid"/>
<s:element minOccurs="1" maxOccurs="1" name="Marked" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="ParentRRef" type="s1:guid"/>
<s:element minOccurs="1" maxOccurs="1" name="isFolder" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="Description" nillable="true" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="Code" nillable="true" type="s:string"/>
</s:sequence>
</s:complexType>
<s:element name="SetNonenclatureResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="SetNonenclatureResult" type="s:boolean"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SetKontragent">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="rntrg" type="tns:WSKontragentList"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="WSKontragentList">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="mlist" type="tns:ArrayOfWSKontragent"/>
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfWSKontragent">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="WSKontragent" nillable="true" type="tns:WSKontragent"/>
</s:sequence>
</s:complexType>
<s:complexType name="WSKontragent">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="IDRRef" type="s1:guid"/>
<s:element minOccurs="1" maxOccurs="1" name="Marked" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="Description" nillable="true" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="Code" nillable="true" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="EMail" type="s:string"/>
</s:sequence>
</s:complexType>
<s:element name="SetKontragentResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="SetKontragentResult" type="s:boolean"/>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
<s:schema elementFormDefault="qualified" targetNamespace="http://microsoft.com/wsdl/types/">
<s:simpleType name="guid">
<s:restriction base="s:string">
<s:pattern value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"/>
</s:restriction>
</s:simpleType>
</s:schema>
</wsdl:types>
<wsdl:message name="SetNonenclatureSoapIn">
<wsdl:part name="parameters" element="tns:SetNonenclature"/>
</wsdl:message>
<wsdl:message name="SetNonenclatureSoapOut">
<wsdl:part name="parameters" element="tns:SetNonenclatureResponse"/>
</wsdl:message>
<wsdl:message name="SetKontragentSoapIn">
<wsdl:part name="parameters" element="tns:SetKontragent"/>
</wsdl:message>
<wsdl:message name="SetKontragentSoapOut">
<wsdl:part name="parameters" element="tns:SetKontragentResponse"/>
</wsdl:message>
<wsdl:portType name="ExchangeFromSoap">
<wsdl:operation name="SetNonenclature">
<wsdl:input message="tns:SetNonenclatureSoapIn"/>
<wsdl:output message="tns:SetNonenclatureSoapOut"/>
</wsdl:operation>
<wsdl:operation name="SetKontragent">
<wsdl:input message="tns:SetKontragentSoapIn"/>
<wsdl:output message="tns:SetKontragentSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ExchangeFromSoap" type="tns:ExchangeFromSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SetNonenclature">
<soap:operation soapAction="http://sturm.xchange.ws.com/SetNonenclature" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetKontragent">
<soap:operation soapAction="http://sturm.xchange.ws.com/SetKontragent" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="ExchangeFromSoap12" type="tns:ExchangeFromSoap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SetNonenclature">
<soap12:operation soapAction="http://sturm.xchange.ws.com/SetNonenclature" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetKontragent">
<soap12:operation soapAction="http://sturm.xchange.ws.com/SetKontragent" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ExchangeFrom">
<wsdl:port name="ExchangeFromSoap" binding="tns:ExchangeFromSoap">
<soap:address location="http://localhost:52838/exchangewb/ExchangeFromMainBase.asmx"/>
</wsdl:port>
<wsdl:port name="ExchangeFromSoap12" binding="tns:ExchangeFromSoap12">
<soap12:address location="http://localhost:52838/exchangewb/ExchangeFromMainBase.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

--------------------------------

Как это все обрабатывать если я принимаю только 3 поля в веб сервисе ?


Нужно принимать xml файл теперь ?
0
Валентин^_^
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 174
30.06.2017, 14:06 10
Для начала почитай что такое SOAP и с чем его едят...

После того как придет понимание архитектуры веб сервисов и соап, можно приступать к работе. Для пхп http://php.net/manual/ru/book.soap.php
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
30.06.2017, 19:06  [ТС] 11
Все это я читал много раз и не нашел то что мне нужно...Если не затруднит покажите где конкретно почитать о моей задаче.. Как принять список и обработать его за 1 запрос ?
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
02.07.2017, 17:11  [ТС] 12
Больше никто не наведет на мысль ?

Добавлено через 20 часов 13 минут
АП !
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
06.07.2017, 17:30  [ТС] 13
Никто больше не подскажет ?
0
Валентин^_^
25 / 25 / 11
Регистрация: 15.10.2009
Сообщений: 174
06.07.2017, 17:33 14
Чувак, за тебя никто не напишет
0
Gunner91
0 / 0 / 0
Регистрация: 10.03.2015
Сообщений: 12
06.07.2017, 17:38  [ТС] 15
За меня не надо писать) Мне только нужно идею понять, реализую я сам.
0
06.07.2017, 17:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2017, 17:38

Веб интерфейс для Cron
Добрый день друзья программисты! Хочу сделать веб интерфейс для крона, не...

Среда для веб-разработки
Добрый день, подскажите пожалуйста программку\IDE для веб-разработки. Пользуюсь...

Создать UPDATE для веб сайта
Идея такова каким то образом сделать UPDATE для файлов *.php Тоесть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru