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;