Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > Бэк-офисы платформы 1С

Взаимодействие Oracle и 1С через SOAP сервис : Бэк-офисы платформы 1С

21.11.2024 13:21


16.11.2021 12:43
Можно перенести в подраздел 1С. Но здесь вроде как поживее общение. Хозяину форума решать.

Пишем интеграцию Oracle - 1C.

Со стороны 1С поднят web-сервис.

Вопрос стоит в документации на протокол этого web-сервиса. Программист франча сказал, что поднять этот сервис он может, и написать к нему алгоритм на языке 1С - тоже. А вот по SOAP-протоколу ничего не знает. Конечно, я ему порекомендовал обратиться в Москву. Кто-то же этот сервис разрабатывал.

Поскоку сроки по договору поджимают, с радостью приму помощь коллективного разума. Может, прям в тех. поддержку 1С обратиться - ни разу не писал.

Примеры в инете по "1c soap запрос" увидел. Написал свой. Теперь собсно вопрос - какие и как расставить тэги.

+:
SQL код:
create or replace procedure SOAP_TEST as


-- SOAP REQUESTS/RESPONSE
   soap_req_msg    VARCHAR2 (2000);

   -- HTTP REQUEST/RESPONSE
   http_req        UTL_HTTP.req;
   http_resp       UTL_HTTP.resp;
   
  l_text           varchar2(32767);
  v_http_response  CLOB;   

  l_userid         varchar2(100) := 'WebService';
  l_passwd         varchar2(100) := '';
  l_url            varchar2(1000) := 'http://'||l_userid||':'||l_passwd||'@192.168.0.68/ka_centr/ru_RU/ws/SuperMag.1cws?wsdl';

BEGIN
   --
   -- Create SOAP request via HTTP
   --
   soap_req_msg :=
      '<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
         <soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
           <wsa:MessageID>urn:uuid:1d66c9a8-b5e2-4c7a-9649-0bd63a590372</wsa:MessageID>
           <wsa:Action>http://tempuri.org/IDataInterfaceService/Connect</wsa:Action>
           <wsa:To>http://192.168.0.68:80/</wsa:To>
          </soapenv:Header>
          <soapenv:Body>
            <noxt:GET>
              <noxt:Parameters>
                  <operation name="GET">
                    <soapbind:operation style="document"
                        soapAction="GET"/>
                    <input>
                      <soapbind:body use="Doc123"/>
                    </input>
                    <output>
                      <soapbind:body use="literal"/>
                    </output>
                  </operation>
              
              </noxt:Parameters>
            </noxt:GET>

          </soapenv:Body>
       </soapenv:Envelope>';

   UTL_HTTP.set_proxy('localhost:8080');
   http_req :=UTL_HTTP.begin_request(l_url, 'POST', 'HTTP/1.1');
   UTL_HTTP.set_header (http_req, 'Accept-Encoding', 'gzip,deflate');
   UTL_HTTP.set_header (http_req, 'Content-Type', 'application/soap+xml;charset=UTF-8;action="http://tempuri.org/IDataInterfaceService/Connect"');
   UTL_HTTP.set_header (http_req, 'Content-Length', length(soap_req_msg));

   UTL_HTTP.set_header (http_req, 'User-Agent', 'Oracle');
   UTL_HTTP.write_text (http_req, soap_req_msg);

  dbms_output.put_line(' ');
  --
   -- Invoke Request and get Response.
   --
   http_resp := UTL_HTTP.get_response(http_req);
  -- Copy the response into the BLOB.
  DBMS_LOB.createtemporary(v_http_response, FALSE); 
  BEGIN
    LOOP
        UTL_HTTP.read_text(http_resp, l_text, 32767);
        DBMS_LOB.writeappend (v_http_response, length(l_text), l_text);
    END LOOP;
  EXCEPTION
    WHEN UTL_HTTP.end_of_body THEN
      UTL_HTTP.end_response(http_resp);
  END;     
  
  --v_http_response := HTTPURITYPE(l_url).getclob;
   
  insert into soap_log(text) values(v_http_response);
  commit;
END SOAP_TEST; 
16.11.2021 12:44
Пример запроса/ответа.
Вложения
Тип файла: zip 1.zip (1.5 Кб, 27 просмотров)
16.11.2021 12:57
Категорически не советую все пихать в базу. Глюки становятся все более насыщенными, а ошибки все менее вразумительными.
Сделайте шлюзом на любом удобном языке. Микросервисы сейчас в моде, да и Unix way опять же...
SOAP - это просто способ скормить XML удаленному ресурсу. Без документации на XML вы не выплывете, однако, я совершенно не понимаю проблемы. Если программер будет писать этот SOAP, то почему бы вам с ним и не договориться о том, какие именно XML будут ходить? Для примера просто перешлите пакет с одним полем, увидите весь мусор, который сверху навертели... Но еще раз и еще отговариваю делать это из базы. Оно виснет, тяжело оформить в пул и журналирование все с нуля, проблемы с соединениями... Не надо, я сейчас пожинаю плоды таких вот костылей. Тем более, что вас за HTTP натянут безопасники, а если еще и персданные какие-то, то натянут и контролирующие органы. А с HTTPS ваш головняк с соединениями из базы увеличивается кратно.
Второй довод против web-сервиса. Зачем? Из 1С можно вполне себе нормально подключиться напрямую в базу Oracle и брать нужные данные.
16.11.2021 14:12
Цитата:
Из 1С можно вполне себе нормально подключиться напрямую в базу Oracle и брать нужные данные.
Они уже подключились, и тянут то, что им нужно - заказы. Для этого я сделал REST data service, тоже новое и интересное для меня. Тут вопрос в асинхронном обмене - кому чего нужно, тот то и запрашивает. Т.е. со стороны 1С тоже нужен обслуживатель запросов.

Цитата:
не советую все пихать в базу
Пока идет разработка, пока еще ничего не напихано, как раз читаю и выбираю инструменты. Если будет сторонняя аппликуха - мне совершенно фиолетово. С помощью SoapUI пробую - пока тоже неудача.

Цитата:
Если программер будет писать этот SOAP, то почему бы вам с ним и не договориться о том, какие именно XML будут ходить?
В том и дело, что программер пишет на языке 1С, и не знает, как оно взаимодействует с SOAP.
Миниатюры
Нажмите на изображение для увеличения
Название: 111.png
Просмотров: 59
Размер:	55.4 Кб
ID:	11621  
16.11.2021 14:58
Цитата:
DMaslov и не знает, как оно взаимодействует с SOAP
Тогда, если мыслить логически, никакого преимущества в том, что появится этот сервис, нет... более того, полагаю, что он работает где-то под виндой и тоже никто не понимает, как...
Сопровождать потом этот черный ящик будет крайне трудно... Накидайте простейший интерфейс обмена для веба, не обязательно XML, и положите его на какой-нибудь nginx+php-fpm, потом сможете его дальше растить и дописывать. То есть, суть того, что я предлагаю - выделение веб-сервиса из 1С в нормальный веб-сервер, который будет понятен всем участникам обмена, который под желания участников обмена можно будет доработать любой из сторон, который потом еще и можно будет масштабировать, который будет стабильнее и быстрее работать. Поддерживать легче будет, чем какую-то непонятную никому черную коробку.
16.11.2021 15:48
>>> Накидайте простейший интерфейс обмена для веба

К сожалению, если разработчик знает web-сервисы (я могу выступить в качестве такого разработчика), но не умеет подключить к ним потроха 1С на внутреннем языке 1С (а это без залазинься в 1С каким-либо интерфейсом невозможно), ситуация такая же симметрично хреновая.

Так что нужен специалист и документация по любому интерфейсу.
16.11.2021 17:20
Цитата:
DMaslov симметрично хреновая
Так 1C (я точно знаю), умеет HTTPS. Примеры даже были по разным концам инета.
Соответственно, просто договоритесь с 1Сником, что и как транслировать в вебсервис и обратно... Можно тупо файлики кидать, а на стороне микросервиса анализировать реестр файликов и их подбирать, например.
17.11.2021 10:50
Если HTTPS, можно так, например:
1. В 1С создаёте новый HTTP-сервис (можно в расширении).
2. В нём добавляете шаблон (для простоты /* - типа кушаем всё).
3. В шаблоне добавляете метод (конкретный или любой - кушаем всё).
4. Обработчик метода будет выглядеть примерно так:
Код:
Функция QueryAny(Запрос)
 //Запрос типа HTTPСервисЗапрос, в справке 1С есть

 //а здесь мы обрабатываем входящие данные


 Ответ = Новый HTTPСервисОтвет(200); //типа всё хорошо
 Ответ.УстановитьТелоИзСтроки("что то там");
 Возврат Ответ;
КонецФункции
17.11.2021 15:43
Цитата:
Так 1C (я точно знаю), умеет HTTPS.
Чтобы не копаться с сертификатами, мне вполне достаточно обычного HTTP. Обмен происходит в рамках одной сети.

Цитата:
В 1С создаёте новый HTTP-сервис
Сделано.

Цитата:
2,3,4
Пока не знаю, что там сделано - настраивал 1С-ник. Спасибо, передам.
24.11.2021 12:16
Протокол согласовали.
Миниатюры
Нажмите на изображение для увеличения
Название: 111.png
Просмотров: 72
Размер:	77.5 Кб
ID:	11629  
Часовой пояс GMT +3, время: 13:21.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.