Overview
Knihovna plně podporuje Delphi (přes COM/OleVariant, kompatibilní od Delphi 7 výše). Názvy vlastností jsou odvozeny od oficiálních názvů používaných Finanční správou ČR dostupných zde na straně 21. Bližší popis chybových kódů vracených serverem je dostupý zde na straně 30.
Pozn. k chybám: na rozdíl od VFP dokáže Delphi zachytit plnohodnotnou COM chybu včetně popisné zprávy přes try/except a EOleException. Doporučený způsob ošetření chyb je tedy try/except + EOleException.Message, nikoliv volání GetLastErrorCode() (to zůstává k dispozici pro zpětnou kompatibilitu / alternativní použití).
EET2.Client
Reprezentace EET klienta = pokladny.
Vlastnosti
| Vlastnost | Typ | Popis |
|---|---|---|
| EicPoplatnika | String | EIČ Poplatníka, formát CZ + 8-10 číslic |
| IdJednotky | Integer | ID Provozovny (1–999999999) |
| IdPokl | String | ID Pokladny, max 20 znaků |
| Endpoint | String | Nastavená URL adresu serveru (playground/ostré prostředí) |
| CertPath | String | Lokální cesta k aktuálně používanému .p12 certifikátu |
Metody
Init(eicPopl: WideString; idJednotky: Integer; idPokl: WideString; isPlayground: WordBool)
Inicializace klienta před použitím
| Parametr | Typ | Popis |
|---|---|---|
| eicPopl | WideString | EIČ poplatníka, formát CZ + 8-10 číslic |
| idJednotky | Integer | ID provozovny (1–999999999) |
| idPokl | WideString | ID pokladny, max 20 znaků |
| isPlayground | WordBool | True = testovací prostředí, False = ostré prostředí |
Vyhodí chybu při nevalidních hodnotách nebo pokud již byl klient inicializován.
Příklad:
var
Client: OleVariant;
begin
Client := CreateOleObject('EET2.Client');
Client.Init('CZ12345678', 3, 'KASA-001', False);
end;
LoadCert(pkcs12Path: WideString; password: WideString)
Načte podpisový certifikát (.p12). Musí být zavoláno před odesíláním dat.
| Parametr | Typ | Popis |
|---|---|---|
| pkcs12Path | WideString | Cesta k .p12 souboru |
| password | WideString | Heslo od .p12 certifikátu |
Vyhodí chybu pokud je certifikát neplatný nebo heslo není správné.
Příklad:
var
Client: OleVariant;
begin
Client := CreateOleObject('EET2.Client');
Client.Init('CZ12345678', 3, 'KASA-001', False);
Client.LoadCert('CZ12345678.p12', 'tajne_heslo');
end;
Submit(transakce: IDispatch; prvniZaslani: WordBool): WideString
Odešle transakci na server a vrátí potvrzovací kód POK
| Parametr | Typ | Popis |
|---|---|---|
| transakce | IDispatch | Objekt typu EET2.Transaction reprezentující odesílanou transakci |
| prvniZaslani | WordBool | True pokud se jedná o první pokus o zaslání, jinak False |
Vrací server vrácený POK nebo případnou chybu.
Příklad:
var
Client, Tx: OleVariant;
Pok: string;
begin
Client := CreateOleObject('EET2.Client');
Client.Init(...);
Tx := CreateOleObject('EET2.Transaction');
Tx.Init(...);
Pok := Client.Submit(Tx, True);
end;
Ošetření chyb (doporučeno): try/except + EOleException
Metody knihovny vyhazují standardní COM chybu, kterou Delphi zachytí jako EOleException včetně popisné zprávy.
Příklad:
var
Client: OleVariant;
begin
try
Client := CreateOleObject('EET2.Client');
// Zavolani Submit() pred Init()
Client.Submit(Tx, True);
except
on E: EOleException do
ShowMessage('Chyba: ' + E.Message); // napr. "Objekt neni inicializovan"
end;
end;
GetLastErrorCode(): Integer
Alternativní/starší způsob zjištění posledního chybového kódu — vrátí kód posledního erroru nebo 0, pokud poslední zavolaná funkce proběhla bez chyby. V běžném Delphi kódu preferujte try/except + EOleException.Message výše.
Příklad:
var
Client: OleVariant;
begin
Client := CreateOleObject('EET2.Client');
// Zavolani Submit() pred Init()
Client.Submit(Tx, True);
ShowMessage(IntToStr(Client.GetLastErrorCode)); // Vrati 200, tedy error NOT_INITIALIZED
end;
EET2.Transaction
Reprezentuje transakci k odeslání na server.
Pozn.: při práci přes OleVariant je vhodné předávat číselné hodnoty jako String explicitně, kvůli odlišnostem ve formátování podle regionálního nastavení.
Vlastnosti
| Vlastnost | Typ | Popis |
|---|---|---|
| CelkTrzba | String | Celková částka tržby |
| PoradCis | String | Pořadové číslo tržby |
| DatTrzby | TDateTime | Datum a čas uskutečnění tržby |
| EicPoverujiciho | String | EIČ pověřujícího poplatníka |
| PovereniVicePopl | Boolean | Pověření více poplatníků |
| UrcenoCerpZuct | String | Celková částka určená k následnému čerpání |
| CerpZuct | String | Celková částka plateb, které jsou následným čerpáním |
Metody
Init(poradCis: WideString; datTrzby: TDateTime; celkTrzba: WideString)
Inicializace transakce
| Parametr | Typ | Popis |
|---|---|---|
| poradCis | WideString | Pořadové číslo tržby, max 25 znaků |
| datTrzby | TDateTime | Datum tržby |
| celkTrzba | WideString | Celková částka tržby |
Vyhodí chybu při nevalidních hodnotách nebo pokud již byla transakce inicializována.
Příklad:
var
Tx: OleVariant;
begin
Tx := CreateOleObject('EET2.Transaction');
// Inicializace platby ID 0001, ktera probehla "prave ted" o castce 150.00,-
Tx.Init('0001', Now, '150.00');
end;
Ošetření chyb: stejně jako u EET2.Client doporučujeme try/except + EOleException.Message. GetLastErrorCode() zůstává jako alternativa.
Příklad:
var
Tx: OleVariant;
begin
try
Tx := CreateOleObject('EET2.Transaction');
Tx.Init(...);
Tx.EicPoverujiciho := 'neplatne EIC';
except
on E: EOleException do
ShowMessage('Chyba: ' + E.Message); // Vrati kod 3, tedy error INVALID_EIC_POVERUJICIHO
end;
end;
EET2_E Errory
| Kód | Označení chyby | Popis | Poznámka |
|---|---|---|---|
| 1 | INVALID_EIC_POPL | eic_popl neplňuje formát CZ + 8-10 číslic | |
| 2 | INVALID_ID_POKL | id_pokl není validní: musí být 1-20 znaků | |
| 3 | INVALID_EIC_POVERUJICIHO | eic_poverujiciho nesplňuje formát CZ + 8-10 číslic | |
| 4 | INVALID_ID_JEDNOTKY | id_jednotky je mimo rozsah (musí být 1-999999999) | |
| 5 | INVALID_PORAD_CIS | porad_cis není validní: musí být 1-25 znaků (0-9a-zA-Z) | |
| 6 | CERT_NOT_LOADED | certifikat není načten | |
| 10 | INVALID_PKCS12 | nelze načíst .p12 soubor | |
| 11 | WRONG_CERT_PASSWORD | špatné .p12 heslo | |
| 12 | NO_PRIVATE_KEY | nenalezen soukromý klíč v .p12 souboru | .p12 soubor je pravděpodobně nevalidní |
| 13 | NO_CERTIFICATE | nenalezen certifikát v .p12 souboru | .p12 soubor je pravděpodobně nevalidní |
| 14 | INVALID_PRIVATE_KEY | nelze načíst soukromý klíč | .p12 soubor je pravděpodobně nevalidní |
| 30 | TRANSPORT_FAILED | nepodařilo se odeslat zprávu | |
| 31 | CERT_FILE_READ_FAILED | chyba při čtení souboru | |
| 50 | SERVER_TEMPORARY | dočasná technická chyba zpracovaní, odešlete prosím datovou zprávu později (kód -1) | Chyba je na straně vzdáleného serveru |
| 52 | SERVER_INVALID_XML | kódování XML není platné (kód 2) | |
| 53 | SERVER_SCHEMA_INVALID | XML zpráva nevyhověla kontrole XML schématu (kód 3) | |
| 54 | SERVER_INVALID_SIGNATURE | neplatný podpis SOAP zprávy (kód 4) | |
| 56 | SERVER_INVALID_EIC | EIČ poplatníka má chybnou strukturu (kód 6) | tento error nastane také pokud se EIČ poplatníka neshoduje s EIČ v certifikátu |
| 57 | SERVER_MESSAGE_TOO_LARGE | datová zpráva je příliš velká (kód 7) | |
| 58 | SERVER_PROCESSING_FAILED | datová zprýva nebyla zpracována kvůli technické chybě nebo chybě dat (kód 8) | |
| 59 | SERVER_UNKNOWN | neznámý nebo rezervovaný chybový kód | |
| 60 | RESPONSE_PARSE_FAILED | nelze zparsovat Odpoved | |
| 61 | RESPONSE_UNEXPECTED | odpověď neobsahuje pole Potvrzeni nebo Chyba | |
| 90 | INVALID_ARGUMENT | neplatný nebo prázdný vstupní parametr | |
| 91 | INVALID_DECIMAL | hodnota není platné desetinné číslo | |
| 92 | INVALID_DATETIME | hodnota není platné datum/čas (očekáván formát RFC3339) | |
| 93 | NULL_HANDLE | neplatný nebo null handle objektu (objekt není platný nebo je null) | |
| 94 | NO_POK | server nevrátil potvrzovací kód POK | |
| 200 | NOT_INITIALIZED | Objekt není inicializován | |
| 201 | TRANSACTION_IS_NULL | Objekt transakce je nevalidní nebo je null | |
| 202 | ALREADY_INITIALIZED | Objekt byl již inicializován | |
| 203 | INTERNAL_INVALID_DATETIME_CODE | nelze zprasovat interní dat_trzby | interní error ke kterému by nemělo dojít |
| 204 | NOT_VARIANT_DATETIME_CODE | nelze zparsovat interní dat_trzby do VARIANT DATE | interní error ke kterému by nemělo dojít |
Ukázky
Odeslání jednoduché platby
Celý proces odeslání jednoduché platby o částce 323.56,- včetně ošetření případné chyby.
var
Client, Tx: OleVariant;
Pok: string;
begin
try
// Vytvoreni & inicializace klienta vcetne nacteni certifikatu
Client := CreateOleObject('EET2.Client');
Client.Init('CZ12345678', 3, 'KASA-001', False);
Client.LoadCert('CZ12345678.p12', 'tajne_heslo');
// Vytvoreni jednoduche transakce
Tx := CreateOleObject('EET2.Transaction');
Tx.Init('0556', Now, '323.56');
// Prvni odeslani platby
Pok := Client.Submit(Tx, True);
ShowMessage('POK: ' + Pok);
except
on E: EOleException do
ShowMessage('Chyba: ' + E.Message);
end;
end;
Evidence platby v pověření jiného poplatníka
Ukázka odeslání tržby, která plyne jinému poplatníkovi než evidujícímu. V ukázce má evidující poplatník EIČ CZ12345678 a poplatník, kterému tržba plyne CZ00000019.
var
Client, Tx: OleVariant;
Pok: string;
begin
// Vytvoreni & inicializace klienta vcetne nacteni certifikatu
Client := CreateOleObject('EET2.Client');
Client.Init('CZ12345678', 3, 'KASA-001', False);
Client.LoadCert('CZ12345678.p12', 'tajne_heslo');
// Vytvoreni jednoduche transakce
Tx := CreateOleObject('EET2.Transaction');
Tx.Init('0556', Now, '323.56');
Tx.EicPoverujiciho := 'CZ00000019';
// Prvni odeslani platby
Pok := Client.Submit(Tx, True);
end;
Odeslání tržby na testovací server
Jednoduchá ukázka odeslání tržby na testovací server.
var
Client, Tx: OleVariant;
Pok: string;
begin
// Vytvoreni & inicializace klienta vcetne nacteni certifikatu
Client := CreateOleObject('EET2.Client');
Client.Init('CZ12345678', 3, 'KASA-001', True);
Client.LoadCert('CZ12345678.p12', 'tajne_heslo');
// Vytvoreni jednoduche transakce
Tx := CreateOleObject('EET2.Transaction');
Tx.Init('0556', Now, '323.56');
// Prvni odeslani platby
Pok := Client.Submit(Tx, True);
// i testovaci server vraci potvrzovaci kod POK
ShowMessage(Pok);
end;