Autor Téma: Delphi + EET  (Přečteno 57358 krát)

Offline karel.kral

  • Nováček
  • *
  • Příspěvků: 14
  • Karma: 0
Re:Delphi + EET
« Odpověď #30 kdy: 02-07-2016, 17:40:18 »
Pánové, kdo trochu rozumíte C#, ze je hotove reseni na podepisovani podle WS-Security (ktere vyzaduje GFR). Funguje, odzkouseno. Staci si zformatovat telo pro odeslani (element Trzba), samozrejme vcetne vypoctu Pkp a Bkp. O zbytek se postara tato knihovna, podepise presne tak jak Eet pozaduje.

https://github.com/zinkpad/SignSoapMessage

Offline karel.kral

  • Nováček
  • *
  • Příspěvků: 14
  • Karma: 0
Re:Delphi + EET
« Odpověď #31 kdy: 07-07-2016, 13:18:20 »
Už jste někdo řešili tento zjevný nesmysl? Zde se uvádí, že se na offline účtence má tisknout celý PKP, nikoliv jeho Hash BKP. Tudíž musíte vytisknout celých 344 znaků. Ptal jsem se na podpoře ale zatím bez odpovědi.

http://www.etrzby.cz/cs/zpusoby-evidence-a-uctenka
Pokud se pokladnímu zařízení, v důsledku technické závady, dočasného výpadku nebo prostého zhoršení úrovně přenosu, nepodaří navázat spojení v nastavené mezní době odezvy (ze zákona nejméně na 2 sekundy), nemusí pokladní zařízení už dál čekat na odezvu ze systému Finanční správy a podnikatel vystaví účtenku, která nebude obsahovat fiskální identifikační kód (FIK), ale musí obsahovat podpisový kód poplatníka (PKP).

Offline Lukas

  • Nováček
  • *
  • Příspěvků: 4
  • Karma: 0
    • Verze Delphi: Seattle 10 , Berlin 10.1 update 2
Re:Delphi + EET
« Odpověď #32 kdy: 14-07-2016, 15:04:09 »
Dobrý den všem,
   už se někomu podařilo rozchodit EET v prostředí DELPHI ? Pokud ano, jaké komponenty jste použili a popř. nebylo by možné zaslat krátký příklad?

Děkuji moc
Lukáš

Offline mirus

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 8
    • Verze Delphi: Delphi 10.2
Re:Delphi + EET
« Odpověď #33 kdy: 14-07-2016, 21:13:27 »
Zdravím,

povedlo se mi zrovna včera dokončit funkční komponentu pro odeslání tržby do playground.

1. WDSLImport dle specifikace.
2. Drobná úprava položek s TXMLData a doplnění vygenerováné unity.
3. Inspirace delphi kódem, který využívá libxml, libxmlsec knihovnu pro vytvoření vlastní komponenty pro EET.
4. Přidání upravené unity SOAP.Soapenv.pas do projektu (změna namespace pro vytváření namespace prefixu pro obálku a tělo SOAP zprávy)

Chybí mi ještě uchodit ověření el. podpisu u odpovědi.

OpenSSL knihovna viz. libxmlsec funguje i s INDY10 SSL pokud se zkompiluje s direktivou USE_INDY a přidáním zdrojů $(BDS)\source\soap do projektu.

Delphi 10 Seatle.

zdroje:
 wraper pro libxml a libmlsec :  https://sourceforge.net/projects/libxml2-pas/ nutno upravit pro unicode PChar -> PAnsiChar a další
 inspirace delphi kód :  https://sourceforge.net/p/f4d/wiki/Home/
 libxml2 a libxmlsec :ftp://ftp.zlatkovic.com/libxml/64bit/ (je tam i 32bit verze ke stažení - testováno pouze v 32 bit verzi)
 StrToHex a SHA1 : synacode.pas ze synapse
 encodebase16 : SZCodeBaseX.pas viz http://cc.embarcadero.com/Item/21951

Offline mirus

  • Nováček
  • *
  • Příspěvků: 31
  • Karma: 8
    • Verze Delphi: Delphi 10.2
Re:Delphi + EET
« Odpověď #34 kdy: 18-07-2016, 00:46:04 »
Tak ukázka delphi + libxmlsec1 implementace zde. https://github.com/mirus77/DelphiEET
Ověření XML odpovědi dovede ověřit správnost el. podpisu zprávy. Ověřit platný certifikát odpovědi se mi nedařilo. Nevím jak je to potřeba hodně řešit, když to jede po HTTPS?

Testováno s playground EET.

Roman Krejčí

  • Host
Re:Delphi + EET
« Odpověď #35 kdy: 19-07-2016, 09:26:22 »
Před týdnem jsem dodělal ActiveX komponentu pro EET v Delphi 7, základem bylo použít (správně) Eldosácký secureblackbox.
Narazil jsem jen na problém, že rutina Trzba obsahuje dva parametry se stejným názvem (Hlavicka) - jeden jako In a druhý jako Out.
Když to nijak neošetříte, tak vám standardní Delphi deserializace SOAP odpovědi tu Out Hlavicku nevrátí. Kontroloval jsem SOAP kód XE5
knihovny a tam je problém stejný. Má někdo verzi Delphi která si s duplikovaným názvem parametru poradí bez přejmenovávání nodů v odpovědi?
Prozraďte ...

Takže - mám kód, který dostane zpátky fik, což je fajn, ale pár otázek - spíš metodického charakteru - stále zbývá:

1) V dokumentaci píšou, že datumočasy musí povinně obsahovat zónu +2:00 nebo +1:00 podle toho, jestli je příslušný datumočas
letní nebo zimní :-) Normálně XML standard, ale legrace je, že Delphi knihovny vymyslí zónu podle toho, kdy XML generujete, a ne
podle toho, jaký datumočas je v XML uveden. Samozřejmě že GFŘ do téhle léčky samo spadlo a jejich příklady validních XML obsahují datumočas 2016-09-19T19:06:37+01:00 . No nezasmějte se :-) Zajímavé je, že Chorvati si tohle asi uvědomili a na zóny si v jejich implementaci nehrajou. I když... napsat rutinu která do XML datumočasu zapíše zónu správně podle hodnoty údaje není zas tak těžké. Nesmí se ale měnit pravidla pro dny přechodu
mezi letním a zimním časem zapsaná v TimeZoneInformation.

2) Ve specifikaci je uvedeno, že certifikát použitý k výpočtu PKP a BKP a certifikát použitý k podpisu XML musí být ten samý, s vyjímkou případu, kdy
certifikátu kterým jste počítali BKP propadl čas platnosti. Pak můžete XML podepsat jiným - platným - certifikátem. Nevím jestli si někdo uvědomuje (GFŘ asi ne), že tenhle požadavek dost komplikuje správu certifikátů v celém EET procesu. Pokud se totiž nepodaří zprávu odeslat, nebo fungujete ve zjednodušeném režimu, tak spolu s BKP (který vytisknete na účtenku) musíte u tržby uložit i certifikát, který byl k výpočtu BKP použit. Těch certifikátů může mít podnikatel více. Když pak po 2-5ti dnech posíláte tržbu k zaevidování (kde je řečeno že to bude na stejném zařízení?), musíte se podívat na uložený certifikát, ověřit jestli náhodou ještě neplatí, a pokud ano, použít ho k podepsání XML. Teprve kdyby už neplatil, můžete použít nový. Oproti situaci, kdy prostě týden před koncem platnosti starého certifikátu nasadím nový, a jedu s ním jak generování nových, tak odesílání starých tržeb, je tahle podmínka dost velká komplikace. Co si o tom myslíte vy ostatní?

Tak tohle byly moje dva centy :-)

Offline karel.kral

  • Nováček
  • *
  • Příspěvků: 14
  • Karma: 0
Re:Delphi + EET
« Odpověď #36 kdy: 24-07-2016, 13:54:13 »
Ano, na přesně stejné problémy jako vy jsem narazil taky. Rozhodl jsem se problém s letním časem ignorovat :-)

A ten probléms  certifikáty - eviduji seznam certifikátů v úložišti, ke každému si pamatuji klíč a podpisování se děje vždy tím správným certifikátem. Není mi  ale jasné co ale chtějí ministři dělat se zprávou, která přijde po době platnosti certifikátu, kterým bylo vygenerováno BKP. Podepsaná sice bude novým certifikátem, ale jak si sakra ověří, že BKP je správně? Vždyť ve zprávě mají přiložen pouze nový platný certifikát a kde vezmou ten certifikát, kterým bylo vytvořeno BKP?

Roman Krejčí

  • Host
Re:Delphi + EET
« Odpověď #37 kdy: 25-07-2016, 10:33:45 »
Fakt je, že problém s XML datumočasem už v nových Delphi není (alespoň XE5 a dále, možná i dřív, nevím, v Delphi 7 problém ještě je).
Někdo asi opravil knihovny aby zóna odpovídala :-)
Pokud jde o ty certifikáty, tam je problém v tom, že si certifikát  použitý pro BKP musíte zapsat u každé tržby,
která nebyla zaevidovaná ihned po vygenerování BKP. Protože až ji budete evidovat později, musíte BKP nechat (zákazník
už ho má na účtence), ale podepsat ji musíte platným certifikátem - ten použitý pro BKP už může být v době evidování neplatný.
Takže nestačí si hlídat certifikáty, ale musíte mít i vazbu [zatím neevidovaná tržba -> BKP certfikát].

Offline Sender

  • Plnoletý
  • ***
  • Příspěvků: 184
  • Karma: 5
    • Verze Delphi: Delphi 7 Prof.
Re:Delphi + EET
« Odpověď #38 kdy: 26-07-2016, 20:29:11 »
Roman Krejčí > V čem je problém v D7 ?

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 120
  • Karma: 8
Re:Delphi + EET
« Odpověď #39 kdy: 27-07-2016, 09:48:34 »
Fakt je, že problém s XML datumočasem už v nových Delphi není (alespoň XE5 a dále, možná i dřív, nevím, v Delphi 7 problém ještě je).
Někdo asi opravil knihovny aby zóna odpovídala :-)
Pokud jde o ty certifikáty, tam je problém v tom, že si certifikát  použitý pro BKP musíte zapsat u každé tržby,
která nebyla zaevidovaná ihned po vygenerování BKP. Protože až ji budete evidovat později, musíte BKP nechat (zákazník
už ho má na účtence), ale podepsat ji musíte platným certifikátem - ten použitý pro BKP už může být v době evidování neplatný.
Takže nestačí si hlídat certifikáty, ale musíte mít i vazbu [zatím neevidovaná tržba -> BKP certfikát].


A nestačilo by dát na účtenku pouze UUID. A BKP, PKP vygenerovat až při vlastním odeslání?

Roman Krejčí

  • Host
Re:Delphi + EET
« Odpověď #40 kdy: 27-07-2016, 10:27:28 »
To Sender -  v Delphi 7 je problém s generováním XML datumočasu ve funkci DateTimeToXMLTime, která
  jako hodnotu offsetu do stringu přidá právě platný offset (+02:00 nebo +01:00), a nikoli offset platný
  v datu/času který na XML string převádíte. To se pak dále manifestuje jako vadná XML reprezentace
  datumočasu při použití třídy TXSDateTime z unity XSBuiltIns. V XE5 už se v té funkci zjišťuje offset
  platný v čase který na XML převádíte.

To zdenek -  To by asi nestačilo :-) BKP je hash údajů na účtence, takže potom, co BKP dáte z ruky,
 už nemůžete údaje na účtence měnit. uuid tuhle vlastnost nemá. 

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 120
  • Karma: 8
Re:Delphi + EET
« Odpověď #41 kdy: 27-07-2016, 10:59:43 »
Nojo, ale jak poznají kterým certifikátem jsem to podepsal. Musím si projí dokumentaci znovu, ale matně si pamatuju, že tam bylo, že BKP, PKP musí být podpsaná stejným certifikátem jako SOAP zpráva. nebo jsem to blbě četl?

Roman Krejčí

  • Host
Re:Delphi + EET
« Odpověď #42 kdy: 27-07-2016, 11:54:35 »
K DIČ by měly být u GFŘ zaegistrované certifikáty, takže asi vyzkoušejí
jeden po druhém , a když žádný nepasuje, tak je někde chyba.

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 120
  • Karma: 8
Re:Delphi + EET
« Odpověď #43 kdy: 27-07-2016, 17:51:54 »
  To by asi nestačilo :-) BKP je hash údajů na účtence, takže potom, co BKP dáte z ruky,
 už nemůžete údaje na účtence měnit. uuid tuhle vlastnost nemá. 

Takže na mobilním zařízení budu muset mít ten certifikát stejně uložený, kvůli tisku účtenky a BKP i když nebudu online odesílat :-(

Offline chorec

  • Nováček
  • *
  • Příspěvků: 1
  • Karma: 0
    • Verze Delphi: 7
Re:Delphi + EET
« Odpověď #44 kdy: 02-08-2016, 11:16:37 »
Jsem zaseklý na stejném místě. Mám Delphi 7. V novějších Delphi je TXMLData definován v XSBuiltins.pas. Stejně se mi ale ani s přístupem ke zdrojovým kódům novějších verzí Delphi nedaří tohle vyřešit. Už jste přišel na to, co s tím?

Mám Delphi XE6. Použil jsem WSDL importer pro vytvoření wrapperu pro vytváření XML souboru. Výsledná unita ale neobsahuje pořádnou definici pro několik typů, konkrétně:
Kód: Delphi [Vybrat]
  1.   OdpovedChybaType = TXMLData;      { "http://fs.mfcr.cz/eet/schema/v2"[GblCplxMxd] }
  2.   BkpElementType  = TXMLData;       { "http://fs.mfcr.cz/eet/schema/v2"[GblCplxMxd] }
  3.   PkpElementType  = TXMLData;       { "http://fs.mfcr.cz/eet/schema/v2"[GblCplxMxd] }
Mám někde něco špatně nastaveno nebo musím unitu ručně upravit?
Nebo je na to potřeba jít z úplně jiné strany?
Díky za vaše názory a zkušenosti, myslím, že toto téma se dotýká hodně programátorů.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: