Обсуждение:Пользовательский интерфейс для работы с ГИС ГМП
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
>> ОтветитьА ты выложи и мы сами разберемся, лишнее отрежем новое подклеим, чего не хватит спросим. ( LeonL 16.10.2013 14:23 )
0(0)Интерфейсные модули подойдут, обработка кнопок доработаем.
От рстайла ждать нечего у них баксы в головах крутятся, причем пофиг за что, сидим уже второй месяц
без поддержки из за их неуемной жажды денег.
>> Ответитьна 002 сидите? ( p2p 23.10.2013 11:58 )
0(0)мы тож.
а чтоб имена не конфликтовали давно ж придумано.
перед именем функции писать свое фио.
когда в рсл не было mod - у меня была своя функция с таким именем, потом когда появилась - стало конфликтовать и я назвал evd_mod.
>> ОтветитьПока 003 это откровенный тупик, и переходить в него желания нет. ( LeonL 23.10.2013 12:21 )
0(0)Сейчас вот корсчета пишем, чтобы успешно перейти на новый кбр, и не зависеть от стула.
>> ОтветитьВот по этому вопросу можно поподробнее в теме ( Волшебник 11.11.2013 15:31 )
0(0)http://support.softlab.ru/Forum/ZoneForum/topic.asp?Id=55244&CurM=55245
>> Ответить