Autor Téma: Registr plátců DPH přes SOAP  (Přečteno 12887 krát)

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Registr plátců DPH přes SOAP
« kdy: 05-04-2013, 08:58:49 »
Nedělali jste někdo komunikaci s registrem plátců DPH ?
O komunikaci SOAP se pokouším prvně.
http://epodpora.mfcr.cz/33-1218.html
Naimportoval jsem WSDL soubor a hází mi to chybu viz příloha
už u tohohle kódu:
var S:StatusNespolehlivyPlatceResponse;
    Par:StatusNespolehlivyPlatceRequest;
    U:Ucet;
begin
 SetLength(Par, 20);
 Par[0]:='CZ126333';
S:=(HTTPRIO1 as rozhraniCRPDPH).getStatusNespolehlivyPlatce(Par);
http://adisrws.mfcr.cz/adistc/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP?wsdl
Jestli to tak nepůjde, jak poslat podobný dotaz pomocí synapse ?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     <soapenv:Body>
          <StatusNespolehlivyPlatceRequest
               xmlns="http://adis.mfcr.cz/rozhraniCRPDPH/">
               <dic>445522999</dic>
               <dic>8855229999</dic>
               <dic>7755229999</dic>
               <dic>010101010</dic>
          </StatusNespolehlivyPlatceRequest>
     </soapenv:Body>
</soapenv:Envelope>
« Poslední změna: 05-04-2013, 09:02:41 od Petr P. »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #1 kdy: 05-04-2013, 11:01:27 »
Nedělali jste někdo komunikaci s registrem plátců DPH ?
O komunikaci SOAP se pokouším prvně.
...
Jestli to tak nepůjde, jak poslat podobný dotaz pomocí synapse ?
Konkretne tohle pripojeni jsem nedelal a ani nevim, jestli uz maji posledni verze Delphi opravny binding.
Nepodelil ses s nama o verzi Delphi, coz muze mit dost rozhodujici. Pro starsi verze bylo pravidlem, ze clovek musel zacit tady http://cc.embarcadero.com/Item/24535.

Jinak samozrejme SOAP zpravu muzes vytvaret 'rucne', ja to treba delaval pres DOM a pak ji posles jako beznou HTTP(s) request na server a prectes si odpoved. Z HTTP odpovedi si vyndas SOAP zpravu a tu rozparsujes. A delal bych to az v pripade, ze vsechny pokusy se standardni podporou selzou.

Podivej se packet snifferem, co to Delphi posila a jak se to lisi od vzoru
« Poslední změna: 05-04-2013, 11:03:01 od pf1957 »

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #2 kdy: 05-04-2013, 11:35:23 »
Mám Turbo Delphi 2006 a tuhle aktualizaci jsem dělal.
http://cc.embarcadero.com/Item/24535.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #3 kdy: 05-04-2013, 11:47:02 »
Mám Turbo Delphi 2006 a tuhle aktualizaci jsem dělal.
http://cc.embarcadero.com/Item/24535.
No a vystup co ti z Delphi leze mas, abys ho srovnal se vzorem a zjistil, co je jinak? Nejsnazsi bude lapit komunikaci treba WireSharkem.

Offline anec

  • Mladík
  • **
  • Příspěvků: 99
  • Karma: 3
Re:Registr plátců DPH přes SOAP
« Odpověď #4 kdy: 05-04-2013, 13:41:00 »
řešil jsem to taky a nevyřešil, nakonec jsem šel cestou nejmenšího odporu = synapse

hsend.Document.LoadFromStream(finstream);
presult:=hsend.HTTPMethod('POST', furltext);
fdownstream.CopyFrom(hsend.Document, 0);

a výsledek rozparsovat ručně

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #5 kdy: 05-04-2013, 14:36:59 »
Mám Turbo Delphi 2006 a tuhle aktualizaci jsem dělal.
http://cc.embarcadero.com/Item/24535.
No a vystup co ti z Delphi leze mas, abys ho srovnal se vzorem a zjistil, co je jinak? Nejsnazsi bude lapit komunikaci treba WireSharkem.
WireShark jsem stáhnul, ale jak se  zjistí výstup, jsem zatím nenašel. Vypadá to, že bude lepší to udělat přes synapsi, jak píše anec.
« Poslední změna: 05-04-2013, 15:09:18 od Petr P. »

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #6 kdy: 05-04-2013, 15:24:03 »
V XE2 to přes standardní SOAPHTTPClient jede. Stačí imporotvat wsdl - pak myslim upravit

  InvRegistry.RegisterParamInfo(TypeInfo(rozhraniCRPDPH), 'getStatusNespolehlivyPlatce', 'parameters', '',
                                '[ArrayItemName="dic"]');

a

  RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');

Pozor na velká a málá písmena. Pak už vy to mělo pře interface jít zavolat. Bez výše uvedené úpravy to hlásí prázdný seznam dič.

Příklad volání:

Kód: Delphi [Vybrat]
  1. var A:rozhraniCRPDPH;
  2.     I:StatusNespolehlivyPlatceRequest;
  3.     R:StatusNespolehlivyPlatceResponse;
  4. begin
  5.  Setlength(I,1);
  6.  I[0]:='46345680';
  7.  A:=GetrozhraniCRPDPH(false,'',HTTPRIO1);
  8.  R:=A.getStatusNespolehlivyPlatce(I);
  9.  Memo1.Clear;
  10.  Memo1.Lines.Add(R.status.statusText);
  11.  Memo1.Lines.Add(R.statusPlatceDPH[0].DIC);
  12.  R.Free;
  13.  Setlength(I,0);
  14.  A:=nil;
  15. end;
« Poslední změna: 05-04-2013, 15:55:24 od zdenek »

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #7 kdy: 05-04-2013, 16:45:08 »
V XE2 to přes standardní SOAPHTTPClient jede. Stačí imporotvat wsdl - pak myslim upravit

  InvRegistry.RegisterParamInfo(TypeInfo(rozhraniCRPDPH), 'getStatusNespolehlivyPlatce', 'parameters', '',
                                '[ArrayItemName="dic"]');

a

  RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');


Tyhle dvě funkce v Turbo Delphi 2006 bohužel nejsou.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #8 kdy: 05-04-2013, 16:56:38 »
Nevím úplně co je turbo delphi 2006, ale v delphi 2006 to je. Tohle je import wsdl v d2006:

Kód: Delphi [Vybrat]
  1.   InvRegistry.RegisterInterface(TypeInfo(rozhraniCRPDPH), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'UTF-8');
  2.   InvRegistry.RegisterDefaultSOAPAction(TypeInfo(rozhraniCRPDPH), 'http://adis.mfcr.cz/rozhraniCRPDPH/getStatusNespolehlivyPlatce');
  3.   InvRegistry.RegisterInvokeOptions(TypeInfo(rozhraniCRPDPH), ioDocument);
  4.   InvRegistry.RegisterInvokeOptions(TypeInfo(rozhraniCRPDPH), ioLiteral);
  5.   RemClassRegistry.RegisterXSInfo(TypeInfo(NespolehlivyPlatceType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'NespolehlivyPlatceType');
  6.   RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'DICType');
  7.   RemClassRegistry.RegisterXSInfo(TypeInfo(SeznamZverejnenychUctuType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'SeznamZverejnenychUctuType');
  8.   RemClassRegistry.RegisterXSClass(InformaceOPlatciType, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'InformaceOPlatciType');
  9.   RemClassRegistry.RegisterXSClass(ZverejnenyUcetType, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'ZverejnenyUcetType');
  10.   RemClassRegistry.RegisterXSClass(StatusType, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'StatusType');
  11.   RemClassRegistry.RegisterXSClass(ucet, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'ucet');
  12.   RemClassRegistry.RegisterXSInfo(TypeInfo(dic), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');
  13.   RemClassRegistry.RegisterXSInfo(TypeInfo(StatusNespolehlivyPlatceRequest), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'StatusNespolehlivyPlatceRequest');
  14.   RemClassRegistry.RegisterXSInfo(TypeInfo(Array_Of_InformaceOPlatciType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'Array_Of_InformaceOPlatciType');
  15.   RemClassRegistry.RegisterXSClass(StatusNespolehlivyPlatceResponse, 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'StatusNespolehlivyPlatceResponse');
  16.   RemClassRegistry.RegisterSerializeOptions(StatusNespolehlivyPlatceResponse, [xoLiteralParam]);

Offline Petr P.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 1
    • Verze Delphi: Turbo Delphi 2006
Re:Registr plátců DPH přes SOAP
« Odpověď #9 kdy: 05-04-2013, 17:22:45 »
RemClassRegistry.RegisterXSInfo(..)  tam skutečně je, ale  InvRegistry.RegisterParamInfo(..) tam není.
Zkoušel jsem doplnit tu první funkci, ale nefunguje to taky.
« Poslední změna: 05-04-2013, 17:26:33 od Petr P. »

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #10 kdy: 05-04-2013, 17:26:11 »
Máte pravdu. Teď jsem to zkoušel na d2006 a ten soap má nějaký bug, jednak už generuje blbě request ale ani po ruční nápravě se to nesrovnalo.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #11 kdy: 05-04-2013, 17:30:01 »
RemClassRegistry.RegisterXSInfo(..)  tam skutečně je, ale  InvRegistry.RegisterParamInfo(..) tam není.
Zkoušel jsem doplnit tu první funkci, ale nefunguje to taky.
Rozsireni tech metode se objevilo teprve nedavno: v D2010 to jeste neni a v XE2 uz ano.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #12 kdy: 05-04-2013, 17:31:39 »
Máte pravdu. Teď jsem to zkoušel na d2006 a ten soap má nějaký bug, jednak už generuje blbě request ale ani po ruční nápravě se to nesrovnalo.
To by mohla byt dobra zprava, ze to trochu opravili - v tech starsich verzich se to dalo pouzit jen na jednoduche veci.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #13 kdy: 05-04-2013, 17:59:05 »
To by mohla byt dobra zprava, ze to trochu opravili - v tech starsich verzich se to dalo pouzit jen na jednoduche veci.

Já jsem přecháze D2007 - XE2 a tam je rozdíl v použitelnosti obrovský. Není ani tak problém, když si člověk dělá svého klienta i svůj server, ale jak je nutné se propojit na třetí stranu, tak je konec. Třeba ares jsme nakonec dělali tak, že jsme udělali http.get a pak parsovali xml. SOAP jsme vůbec nerozchodili.

Těch implementací soap pro delphi asi bude víc (možná i indy mají něco svého). Tak jedině zkusit něco jiného než to standardní rozhraní HTTPSOAPClient.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #14 kdy: 05-04-2013, 18:08:17 »
Já jsem přecháze D2007 - XE2 a tam je rozdíl v použitelnosti obrovský.
Ja s tim delal naposled taky v D2007 a Delphi nebyl schopen napr. sezrat schema, ktere bylo prilohou ETSI normy ve vice nez 70 souborech, i kdyz jsem se to snazili ruzne mergovat a upravovat... Nakonec jsme to generovali a parsovali pomoci DOMu, abychom se nezbavili uplnen moznosti bindingu na objekty a posilali to taky pres HTTP.

Offline perverez

  • Nováček
  • *
  • Příspěvků: 21
  • Karma: 3
Re:Registr plátců DPH přes SOAP
« Odpověď #15 kdy: 06-04-2013, 20:17:38 »
Ahoj, stejný problém jsem měl také pod RAD 2007. Celý den jsem to hledal a nakonec jsem zjistil následující chybu, kterou vyprodukoval SOAP, který je součástí RAD 2007:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Body>
    <SOAP-ENV:StatusNespolehlivyPlatceRequest>
      <dic>12345678</dic>
    </SOAP-ENV:StatusNespolehlivyPlatceRequest>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Chyba je v tom, že StatusNespolehlivyPlatceRequest je uveden včetně NameSpace. Přišel jsem na to až když jsem porovnával požadovaný XML s vygerovaným XML v události OnBeforeExecute. Řešením je použití novější verze SOAP, kde je uvedený problém vyřešen (např. https://forums.embarcadero.com/message.jspa?messageID=290788).
« Poslední změna: 06-04-2013, 20:19:16 od perverez »

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 8
Re:Registr plátců DPH přes SOAP
« Odpověď #16 kdy: 06-04-2013, 22:40:09 »
Ano to je jedna z chyb. U D2006 to dokonce udělá i u elementu "dic". Ale ani odstraneni v before execute nepomohlo:

Kód: Delphi [Vybrat]
  1. procedure TForm55.HTTPRIO1BeforeExecute(const MethodName: string; var SOAPRequest: WideString);
  2. begin
  3.   SOAPRequest:=StringReplace(SOAPRequest,'SOAP-ENV:dic','dic',[rfReplaceAll]);
  4.   SOAPRequest:=StringReplace(SOAPRequest,'/SOAP-ENV:StatusNespolehlivyPlatceRequest','/StatusNespolehlivyPlatceRequest',[rfReplaceAll]);
  5.   SOAPRequest:=StringReplace(SOAPRequest,'SOAP-ENV:StatusNespolehlivyPlatceRequest','StatusNespolehlivyPlatceRequest xmlns="http://adis.mfcr.cz/rozhraniCRPDPH/"',[rfReplaceAll]);
  6. end;
  7.  

XE2 už jsou ok. Ale v D2006 asi bude ještě moucha někde dále.

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Registr plátců DPH přes SOAP
« Odpověď #17 kdy: 08-05-2013, 10:51:16 »
Tak teď jsem to zkoušel v Delphi XE2 i XE4 podle tohoto návodu http://www.drbob42.com/examines/examinE2.htm a ani mi to nevytvořilo unitu.

Chyba: Unable to load WSDL File/Location: http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl.  Error [Der angeforderte Header wurde nicht gefunden. - URL:http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl - SOAPAction:""].

Ale autor to očividně bez problémů rozběhal, nezkoušeli jste to taky někdo?
Embarcadero Technology Partner

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Registr plátců DPH přes SOAP
« Odpověď #18 kdy: 08-05-2013, 11:11:49 »
Nebudu si zbytečně ztěžovat život a SOAP řešit manuálně, našel jsem toto rozhraní (neoficiální), ale zdá se, že funguje: http://isvat.appspot.com/.
Embarcadero Technology Partner

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #19 kdy: 08-05-2013, 11:28:40 »
Chyba: Unable to load WSDL File/Location: http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl.  Error [Der angeforderte Header wurde nicht gefunden. - URL:http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl - SOAPAction:""].
Pricina mi neni jasna - vypada to, ze importer nezere URL, ale kdyz si target ulozis na disk a naimportujes ho ze souboru, tak to funguje. Nejsi sam, komu to neslo: http://stackoverflow.com/questions/14177991/unable-to-load-wsdl-file-location-in-delphi-for-vies-soap-service

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Registr plátců DPH přes SOAP
« Odpověď #20 kdy: 08-05-2013, 11:40:33 »
Díky, funguje, nějak mně tuto odpověď Google nenabídl...
Embarcadero Technology Partner

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3172
  • Karma: 137
    • Verze Delphi: D2007, XE3, DX10
Re:Registr plátců DPH přes SOAP
« Odpověď #21 kdy: 08-05-2013, 11:47:32 »
Díky, funguje, nějak mně tuto odpověď Google nenabídl...
Zrejme proto, ze jsem hledal text anglickeho chyboveho hlaseni...

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Registr plátců DPH přes SOAP
« Odpověď #22 kdy: 08-05-2013, 12:35:18 »
Však já to taky tak nějak anglicky hledal, ale občas má člověk temno před očima...
« Poslední změna: 08-05-2013, 12:50:37 od oxo »
Embarcadero Technology Partner

Offline JanSustr

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: XE10
Re:Registr plátců DPH přes SOAP
« Odpověď #23 kdy: 24-03-2021, 19:28:41 »
Dobrý den,

vygeneroval jsem objekt rozhraniCRPDPH pomocí "automatu"
a po nějaké době jsem opravil:

  //RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'DICType');

  RemClassRegistry.RegisterXSInfo(TypeInfo(DICType), 'http://adis.mfcr.cz/rozhraniCRPDPH/', 'dic');

(jde o to dic)

a pak to začlo běhat.
Delphi 10.1 Berlín

Takže mají chybu v to wsdl-ku.

Ahoj.

Offline JanSustr

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: XE10
Re:Registr plátců DPH přes SOAP
« Odpověď #24 kdy: 24-03-2021, 19:30:31 »
ještě....
použil jsem wireshark, abych víděl co se posílá

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 179
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:Registr plátců DPH přes SOAP
« Odpověď #25 kdy: 25-03-2021, 19:25:52 »
S rejstrikem platcu pres SOAP fungujeme, delal jsem to kdysi. V priloze je funkcni naimportovane WSDL pro Delphi 7. Takze v novejsich by to melo fungovat taky.
Pouzivame to hromadne - necham si vratit seznam nespolehlivych platcu, ten pak rozparsuju pomoci JanXMLTree a hromadne projdu podle DIC s adresarem. Tam poznamenam datum registrace, kdy byl registrovany jako nespolehlivy platce, pripadne ty, kteri ze seznamu zmizi v adresari uvolnim. je to samostatny EXE, ktery se spousti pres planovac uloh.
Uzivateli staci informace o tom, ze je platce nespolehlivy, dal uz je to na nem - platba pouze na povoleny ucet atd.
V ramci aplikace pak dostane informace o konkretnim platci - status, ucty atd pomoci StatusNespolehlivyPlatceRequest

Kód: Delphi [Vybrat]
  1. type
  2.   TADISSeznamPolozka = record
  3.     DIC: string[15];
  4.     DatRegistrace: TDateTime;
  5.   end;
  6.  
  7.   TADISSeznamPlatcu = array of TADISSeznamPolozka;
  8.  
  9.   { zastresuje objekt pro nacteni seznamu nespolehlivych platcu i pro informace pro platci }
  10.   TADIS = class(TObject)
  11.     procedure HTTPRIOAfterExecute(const MethodName: String; SOAPResponse: TStream);
  12.   private
  13.     Interf: rozhraniCRPDPH;
  14.     RIOAccess: IRIOAccess;
  15.     X: THTTPRIO;
  16.     FPocetPlatcu: integer;
  17.     FAdisSeznamPlatcu: TADISSeznamPlatcu;
  18.     janXML: TjanXMLTree;
  19.     FStatusCode: integer;
  20.     FStatusString: string;
  21.     FNespolehlivyPlatceTyp: NespolehlivyPlatceType;
  22.     FDatumZverejneni: TDateTime;
  23.     FSeznamUctu: TStringList;
  24.     FDic: string;
  25.    ...
  26.  
  27.  
  28. {-----------------------------------------------------------------
  29.   Inicializace ADIS
  30. ------------------------------------------------------------------}
  31. constructor TADIS.Create;
  32. begin
  33.   janXML := TJanXMLTree.Create('', '', nil);
  34.   { inicializace interface }
  35.   Interf := GetrozhraniCRPDPH(False, '');
  36.   RIOAccess := Interf as IRIOAccess;
  37.   X := RIOAccess.RIO as THTTPRIO;
  38.   FPocetPlatcu := -1;
  39.   FSeznamUctu := TStringList.Create;
  40. end;
  41.  
  42. {-----------------------------------------------------------------
  43.   Udalost po spusteni requestu - ziskam kompletni odpoved webove
  44.   sluzby, ten nactu do janXML a necham rozparsovat
  45. ------------------------------------------------------------------}
  46. procedure TADIS.HTTPRIOAfterExecute(const MethodName: String;
  47.   SOAPResponse: TStream);
  48. begin
  49.   SOAPResponse.Position := 0;
  50.   janXML.LoadFromStream(SOAPResponse);
  51. end;
  52.  
  53. {-----------------------------------------------------------------
  54.   Nacte seznam platcu do pole  FAdisSeznamPlatcu
  55. ------------------------------------------------------------------}
  56. procedure TADIS.NactiSeznamPlatcu;
  57. var
  58.   np: SeznamNespolehlivyPlatceRequest;
  59.   odp: SeznamNespolehlivyPlatceResponse;
  60.   janNode : TJanXMLNode;
  61.   i: Integer;
  62. begin
  63.   FPocetPlatcu := 0;
  64.   { potrebuju ziskat obsah XML, protoze sluzba nevraci seznam }
  65.   x.OnAfterExecute := HTTPRIOAfterExecute;
  66.   np := SeznamNespolehlivyPlatceRequest.Create;
  67.   { necham si vratit seznam nespolehlivych platcu }
  68.   odp := interf.getSeznamNespolehlivyPlatce(np);
  69.   { zkontrolujeme, zda sluzba odpovedela }
  70.   FStatusCode := odp.status.statusCode;
  71.   FStatusString := odp.status.statusText;
  72.  
  73.   if FStatusString = 'OK' then
  74.   begin
  75.     i := 0;
  76.     SetLength(FAdisSeznamPlatcu, 4500);
  77.     janNode := janXML.firstChild.findNamedNode('statusPlatceDPH');
  78.     while janNode <> nil do
  79.     begin
  80.       { uz dosla kapacita, tak pridame }
  81.       if High(FAdisSeznamPlatcu) > i then
  82.         SetLength(FAdisSeznamPlatcu, High(FAdisSeznamPlatcu)   100);
  83.       FAdisSeznamPlatcu[i].DIC := 'CZ'   janNode.getNamedAttribute('dic').Value;
  84.       FAdisSeznamPlatcu[i].DatRegistrace := XMLDatumToDate(janNode.getNamedAttribute('datumZverejneniNespolehlivosti').Value);
  85.  
  86.       inc(i);
  87.       janNode := janNode.nextSibling;
  88.     end;
  89.     { upravim vyslednou delku pole }
  90.     SetLength(FAdisSeznamPlatcu, i);
  91.     FPocetPlatcu := i;
  92.   end;
  93.   { uklid }
  94.   x.OnAfterExecute := nil;
  95.   np.Free;
  96. end;
  97.  
« Poslední změna: 25-03-2021, 19:29:44 od Jan Fiala »