Обсуждение:Пользовательский интерфейс для работы с ГИС ГМП

0 (0)
  • Развернуть Обсуждение:Пользовательский интерфейс для работы с ГИС ГМП ( Обсуждение примера  20.08.2013 09:54 )
    1(1)
    Приветствую, коллеги.

    Решил поделиться наработками по поводу возможностями реализации обмена с ГИС ГМП в пользовательском интерфейсе.
    На рынке ПО сейчас много предложений от сторонних разработчиков по поводу реализации обмена с ГИС ГМП. У R-style есть разработки этого функционала.
    Попробовал оценить возможности RSL на предмет реализации этой задачи небольшими пользовательскими доработками и получился у меня описанный в данном примере вариант дополнительного интерфейса, по отправке запросов в ГИС.
    В приложенном файле разместил и описал скриншоты пользовательских менюшек. И общее видение алгоритма работы. Этот "пример" возможно будет интересен тем, кто активно дорабатывает RSBANK своими макросами.
    "Кирпичики кода" приведены в виде примеров макросов в файле. Надеюсь, что я не один такой энтузиаст, и будет с кем обсудить технологию работы в форуме.


    Посмотреть пример
    >> Ответить
    • Развернуть А исходники где? не жмоться поделись с общественностью. ( deusex  28.08.2013 09:07 )
      2(1)
      Мы пока еще не подключились, по этому работы по разработке пока не ведуться.
      >> Ответить
      • Развернуть Они тут ( sergksa  29.08.2013 09:00 )
        0(0)
        Кому интересно "пощупать", то здесь есть примеры XML-файлов, макроов и "инструмент подписи".http://yadi.sk/d/fORZ52fj8RySJ
        >> Ответить
        • Развернуть Вот скоро будем подключаться, хотел пощупать а исходников чтото не вижу. ( LeonL  16.10.2013 11:32 )
          2(1)
          Not specified
          >> Ответить
          • Развернуть Точнее не вижу исходников интерфейсов из техзадания. ( LeonL  16.10.2013 11:37 )
            0(0)
            Not specified
            >> Ответить
            • Развернуть Используйте кирпичики. ( sergksa  16.10.2013 14:10 )
              0(0)


              Не знаю как скомпоновать исходники, поскольку макросы используют много пользовательских библиотек, которые сами по себе это целый механизм со своими внутренними реализациями, минусами и плюсами.


              Что бы не быть голословным, привожу пример только начала нашего файла GIS_GMP_LIB.mac


              import Globals,BankInter,ClnInter;  //это стандартное RS
              import txmlelem;                              //это стандартное RS
              
              import get2dat,s_lib;   //запрос в одном окне 2-х дат (запрос периода), доступ к сведениям о клиенте…
              import find_acc;          //функция показать счет с апострафами 20202'810'7'00000000000000001
              import scikli;              // библиотек циклов по докуменам за любой период…
              import tmenu;             // построение пользовательских интерфейсных окошек на основе функции MENU()
              import storage_files;  //cоздание собственного хранилища файлов в dbt-таблицах, чтобы быстро найти и визуализировать данные обмена.
              import xml1lib;         // упрощенное универсальное чтение XML-файлов
              
              var sign_exe="smev_sign1.exe"; 
              
              //var URL_SMEV="http://188.254.16.92:7777/gateway/services/SID0003218"; //тестовый сервис смэв
              var URL_SMEV="http://10.235.50.220:7777/gateway/services/SID0003572";//боевой сервис смэв через наш туннель
              
              …
              

              Предполагаю в каждом банке существуют свои реализации перечисленных в макросе import-ов
              некоторые будут наверняка конфликтовать. некоторые реализованы более успешно.

              думаю, если хотите механизм "под ключ" - то это лучше обратиться к RS специалистам с их решение.

              Я часто сам пользуюсь примерами других через «кирпичики кода». Дальше их компануешь под себя.
              Если какая конкретно функциональность интересует, то пишите.

              Например макрофункция по подготовке XML – файла на вход record документа.


              
              macro start_send_smev(arh)
              var fn=gettxtfilename("GIS");
              //var fn_otv=strsubst(fn,"GIS.","GIS_otv_")+".xml";
              //var fn_SGN=strsubst(fn,"GIS.","GIS_SGN_")+".xml";
              fn=strsubst(fn,"GIS.","GIS_")+".xml";
              var dom=activeX("MSXML2.DOMDocument");
              var m_root,m_header,m_mes,m_proot,m_sroot,m_s1root,strout;
              
                macro CreateAttr( name:string, value )
                    var node = dom.createAttribute(name);
                    node.value = value;
                    m_root.setAttributeNode(node);
                end; //macro
              
              dom.appendchild(dom.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""));
              m_root=dom.appendChild(dom.createElement("SOAP-ENV:Envelope"));
              m_header = m_root;
                     CreateAttr( "xmlns:SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");
                    CreateAttr( "xmlns:xsi"     , "http://www.w3.org/2001/XMLSchema-instance");
                    CreateAttr( "xmlns:xsd"     , "http://www.w3.org/2001/XMLSchema");
                    CreateAttr( "xmlns:m0"      , "http://smev.gosuslugi.ru/rev111111");
                    CreateAttr( "xmlns:wsse"    , "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
                    CreateAttr( "xmlns:wsu"     , "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
                    CreateAttr( "xmlns:ds"      , "http://www.w3.org/2000/09/xmldsig#");
                    CreateAttr( "xmlns:unifo"   , "http://rosrazna.ru/xsd/SmevUnifoService");
                    CreateAttr( "xmlns:pirq"    , "http://roskazna.ru/xsd/PGU_ImportRequest");
              
                    m_sroot=m_root.appendChild(dom.createElement("SOAP-ENV:Header"));
              
              //теги для эцп
                     m_root=m_sroot.appendChild(dom.createElement("wsse:Security"));
                      CreateAttr( "SOAP-ENV:actor", "http://smev.gosuslugi.ru/actors/smev");
                     m_sroot=m_root;
              
                     m_root=m_root.appendChild(dom.createElement("ds:Signature"));
                      CreateAttr( "xmlns:ds", "http://www.w3.org/2000/09/xmldsig#");
                     m_root=m_root.appendChild(dom.createElement("ds:KeyInfo"));
                     m_root=m_root.appendChild(dom.createElement("wsse:SecurityTokenReference"));
                     m_root=m_root.appendChild(dom.createElement("wsse:Reference"));
                      CreateAttr( "URI", "#SenderCertificate");
              
                     m_root=m_sroot.appendChild(dom.createElement("wsse:BinarySecurityToken"));
                      CreateAttr( "EncodingType","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
                      CreateAttr( "ValueType",   "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
                      CreateAttr( "wsu:Id",      "SenderCertificate");
              
              
               
              
              
                    m_root = m_header.appendChild(dom.createElement("SOAP-ENV:Body"));
              
                    CreateAttr( "wsu:Id"   , "body" );
                    m_root = m_root.appendChild(dom.createElement("ns9:UnifoTransferMsg"));
                    m_mes=m_root;
                    CreateAttr( "xmlns:ns9", "http://roskazna.ru/SmevUnifoService/");
              
                    m_proot = m_mes.appendChild(dom.createElement("m0:Message"));
                    m_sroot = m_proot.appendChild(dom.createElement("m0:Sender"));
                    m_root  = m_sroot.appendChild(dom.createElement("m0:Code"));
              
                    ToUTF8( StrUpr(GetSender), StrOut );
                    m_root.text = StrOut;
                    m_root  = m_sroot.appendChild(dom.createElement("m0:Name"));
                    ToUTF8( StrUpr({Name_Bank}), StrOut );
                    m_root.text = StrOut;
              
                    m_sroot = m_proot.appendChild(dom.createElement("m0:Recipient"));
                    m_root  = m_sroot.appendChild(dom.createElement("m0:Code"));
                    m_root.text = "RKZN35001";
              
                    m_root  = m_sroot.appendChild(dom.createElement("m0:Name"));
                    ToUTF8( StrUpr("Казначейство России"), StrOut );
                    m_root.text = StrOut;
              
                    m_root = m_proot.appendChild(dom.createElement("m0:TypeCode"));
                    m_root.text = "GSRV";
                    m_root = m_proot.appendChild(dom.createElement("m0:Status"));
                    m_root.text = "REQUEST";
                    m_root = m_proot.appendChild(dom.createElement("m0:Date"));
                    m_root.text = timestamp();
                    m_root = m_proot.appendChild(dom.createElement("m0:ExchangeType"));
                    m_root.text = "5";
              
              
              
                   m_proot = m_mes.appendChild(dom.createElement("m0:MessageData"));
                   m_sroot = m_proot.appendChild(dom.createElement("m0:AppData"));
                   m_proot = m_sroot.appendChild(dom.createElement("unifo:ImportData"));
                   m_proot = m_proot.appendChild(dom.createElement("pirq:ImportRequest"));
                   m_sroot = m_proot.appendChild(dom.createElement("PostBlock"));
              
                   m_root = m_sroot.appendChild(dom.createElement("ID"));
                   m_root.text = KrnCreateGUID();
                   m_root = m_sroot.appendChild(dom.createElement("TimeStamp"));
                   m_root.text = timestamp();
              
                   m_root = m_sroot.appendChild(dom.createElement("SenderIdentifier"));
              //      ToUTF8( StrUpr("НУБП"), StrOut );
                    m_root.text = GetUchastnik();
              
              
                   m_sroot = m_proot.appendChild(dom.createElement("FinalPayment"));
                   m_root = m_sroot.appendChild(dom.createElement("SupplierBillID"));
                   m_root.text = UIN_gis_gmp(ofkIdentifier(arh));//"0";
              
              
              
                   m_root = m_sroot.appendChild(dom.createElement("Narrative"));
                    ToUTF8( strsubst(StrUpr(arh.ground),"№","N"), StrOut );
                    m_root.text = StrOut;
                   m_root = m_sroot.appendChild(dom.createElement("Amount"));
                   m_root.text = trim(string(arh.sum*100:20:0));
              
                   m_root = m_sroot.appendChild(dom.createElement("PaymentDate"));
                   m_root.text = valtoxml(arh.date_document);
              
                   m_proot = m_sroot;
                   m_sroot = m_proot.appendChild(dom.createElement("BudgetIndex"));
              
                   m_root = m_sroot.appendChild(dom.createElement("Status"));
                    ToUTF8( StrUpr(arh.ComposerStatus), StrOut );
                    m_root.text = StrOut;
                   m_root = m_sroot.appendChild(dom.createElement("PaymentType"));
                    ToUTF8( StrUpr(arh.TaxPaymentType), StrOut );
                    m_root.text = StrOut;
                   m_root = m_sroot.appendChild(dom.createElement("Purpose"));
                    ToUTF8( StrUpr(arh.TaxGround), StrOut );
                    m_root.text = StrOut;
                   m_root = m_sroot.appendChild(dom.createElement("TaxPeriod"));
                    ToUTF8( StrUpr(arh.TaxPeriod), StrOut );
                    m_root.text = StrOut;
                   m_root = m_sroot.appendChild(dom.createElement("TaxDocNumber"));
                    ToUTF8( StrUpr(arh.TaxNumber), StrOut );
                    m_root.text = StrOut;
                   m_root = m_sroot.appendChild(dom.createElement("TaxDocDate"));
                    ToUTF8( StrUpr(arh.TaxDate), StrOut );
                    m_root.text = StrOut;
              
              
                   m_sroot = m_proot.appendChild(dom.createElement("PaymentIdentificationData"));
                   m_s1root = m_sroot.appendChild(dom.createElement("Bank"));
                   m_root = m_s1root.appendChild(dom.createElement("Name"));
                    ToUTF8( StrUpr(arh.Bank_payer), StrOut );
                    m_root.text = StrOut;
              
                   m_root = m_s1root.appendChild(dom.createElement("BIK"));
                    m_root.text = {MFO_BANK};
              
                   m_root = m_sroot.appendChild(dom.createElement("SystemIdentifier"));
                    ToUTF8( StrUpr(MakeDocumentId(arh.iApplicationKind, arh.ApplicationKey)), StrOut );
                    m_root.text = StrOut;
              
                    m_root = m_proot.appendChild(dom.createElement("PayerIdentifier"));
                    m_root.text = eip_gis_gmp(ofkIdentifier(arh));//EIP(s_getclientAccount(arh.real_payer,"client"));
                    if (strlen(m_root.text)<12) m_root.text = Aip_gis_gmp(ofkIdentifier(arh)); end;
              
                   m_root = m_proot.appendChild(dom.createElement("PayerPA"));
                    m_root.text = arh.account_Payer;
              
                   m_root = m_proot.appendChild(dom.createElement("PayeeBankAcc"));
                   m_sroot=m_root;
                   //необязательно CreateAttr( "Kind"    , "1"); 
              
                   m_root = m_root.appendChild(dom.createElement("Account"));
                    m_root.text = arh.account_receiver;
              
                   m_root = m_sroot.appendChild(dom.createElement("Bank"));
                   m_root = m_root.appendChild(dom.createElement("BIK"));
                    m_root.text = arh.MFO_receiver;
              
                   m_root = m_proot.appendChild(dom.createElement("ChangeStatus"));
                    m_root.text = ST_GIS_GMP(ofkIdentifier(GIS_arh));//"1";
              
                   m_root = m_proot.appendChild(dom.createElement("payeeINN"));
                    m_root.text = arh.okpo_receiver;
                   m_root = m_proot.appendChild(dom.createElement("payeeKPP"));
                    m_root.text = arh.KPP_receiver;
                   m_root = m_proot.appendChild(dom.createElement("KBK"));
                    m_root.text = arh.BudjClassifCode;
                   m_root = m_proot.appendChild(dom.createElement("OKATO"));
                    m_root.text = arh.OKATO;
              
                 dom.save(fn);
               end;//macro
              
              





              >> Ответить