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

Offline Roman K.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 2
    • Verze Delphi: D4,D5,D7,XE5,Tokyo
Re:Delphi + EET
« Odpověď #300 kdy: 05-12-2016, 13:39:49 »
tak jak jsem zjistil, možná jsem pořádně nepřečetl a nepochopil
http://www.etrzby.cz/assets/cs/prilohy/Popis_polozek_datove_zpravy_v3.1.pdf

kde se píše cituji:

Citace
10. DATUM A ČAS PŘIJETÍ TRŽBY
Jedná se o datum a čas přijetí tržby nebo vystavení účtenky, pokud je vystavena dříve (viz §19 odst. 1 písm. e) ZoET). ......

kde se vyskytuje zajímavá definice polokruhem... :-)

Offline anec

  • Mladík
  • **
  • Příspěvků: 99
  • Karma: 3
Re:Delphi + EET
« Odpověď #301 kdy: 06-12-2016, 17:11:03 »
někdo tady dříve řešil jestli u plátců dph součet jednotlivých částek
zakl_nepodl_dph +  zakl_dan1 + dan1 .... se musí rovnat elementu  celk_trzba

mám zaklad daně 101,-
daň 21,21
zaokrouhlední -0,21
celkem tržba 122,-

do celk_trzba jde logickz 122,- 
do zakl_dan1 dám 101
do dan1 dám 21.21
ale dávat někam to zaokrouhlení? nikde v popisech EET jsem nic nenašel,
řešíte to nějak?
díky

Offline rames.iii

  • Nováček
  • *
  • Příspěvků: 15
  • Karma: 1
    • Verze Delphi: RAD Studio 10.1 Berlin
Re:Delphi + EET
« Odpověď #302 kdy: 06-12-2016, 19:31:15 »
Ono to podle mnohých vyplývá ze zákona o DPH. Zaokrouhlení je předmětem DPH, tudíž tento problém není. Ale co jsem viděl všemožné účtenky, tak jen málo SW to do DPH dává, převažuje účtování jako finanční rozdíl. Jeden auditovaný zákazník přesně na tohle také narazil a rád by měl zaokrouhlení v DPH. Ale upřímně to asi dělat nebudeme, moc práce;)

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1539
  • Karma: 37
    • Pepak.net
Re:Delphi + EET
« Odpověď #303 kdy: 06-12-2016, 21:45:57 »
někdo tady dříve řešil jestli u plátců dph součet jednotlivých částek
zakl_nepodl_dph +  zakl_dan1 + dan1 .... se musí rovnat elementu  celk_trzba
Podle vyjádření GFŘ nemusí. Jejich zdůvodnění jsem nepochopil, protože podle mě není k EET relevantní, ale říkají, že nemusí.

Offline karel.kral

  • Nováček
  • *
  • Příspěvků: 14
  • Karma: 0
Re:Delphi + EET
« Odpověď #304 kdy: 07-12-2016, 20:46:18 »
Díky za reakce. Asi to nechám, jak to je. OnBeforePost se v mých Delphi XE6 ve funkci THTTPReqResp.Send opravdu volá až po tom, co se timeouty již nastaví pomocí InternetSetOption, v podstatě bych znovu nastavil to samé podruhé. Navíc se dlouhé timeouty projeví jen u jednoho zákazníka, pokud má výpadek napojení na internet, ještě používá proxy, u sebe to nemůžu nasimulovat nebo nějak ladit.
V běžném provozu to jede, jako když bičem mrská ...
Mám podobné zkušenosti v .NET. Timeout 2 sec, platí, když jede internet. Když ale např. vypadne modem a nejede ani DNS, dotazy trvají i přesto třeba 15 sec. Hledal jsem a prý je to normální. Řešením je spustit request asynchronně a po 2 sec ho utnout. Zatím jsem nezkoušel.

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 368
  • Karma: 9
    • Verze Delphi: XE2
Re:Delphi + EET
« Odpověď #305 kdy: 12-12-2016, 20:28:13 »
Mám podobné zkušenosti v .NET. Timeout 2 sec, platí, když jede internet. Když ale např. vypadne modem a nejede ani DNS, dotazy trvají i přesto třeba 15 sec. Hledal jsem a prý je to normální. Řešením je spustit request asynchronně a po 2 sec ho utnout. Zatím jsem nezkoušel.

Z těchto důvodů (trvalejší závady na trase) mám v profilu EET k dispozici "OffLine" režim  který mi ihned automaticky vrátí PKP +BKP  bez volání služby  .

Offline KarelHorky

  • Plnoletý
  • ***
  • Příspěvků: 228
  • Karma: 9
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Delphi + EET
« Odpověď #306 kdy: 13-12-2016, 09:09:12 »
Teď jde právě o tu detekci, jestli jsem/nejsem připojen přes internet až na servery EET. A když nejsem, potřebuji se to dozvědět v nějaké rozumné době (jednotky sekund). Timeouty nastavené pomocí HTTPWebNode moc nepomáhají, možná pomůžou čas prodloužit (do řádu minut), ale zkrátit timeout na určitou zaručenou dobu (třeba 10 sekund) s nimi nejde.
Nebo to máš nějak nastaveno?
Win10 Prof 64b, Firebird 2.5

Offline Roman K.

  • Nováček
  • *
  • Příspěvků: 28
  • Karma: 2
    • Verze Delphi: D4,D5,D7,XE5,Tokyo
Re:Delphi + EET
« Odpověď #307 kdy: 13-12-2016, 12:42:25 »
Už jsem to tady zmiňoval - nastavování timoutů u Wininetu nemá smysl - nefunguje to.
Já používám přístup, kdy nastartuju vlákno které v Execute prování volání webové služby.
Níže uvedená funkce končí nejpozději po zadaném počtu milisekund (pseudokód) :

Kód: Delphi [Vybrat]
  1. function  TrzbaWithTimeout (.....; aTimeout: Integer; ....): HResult;
  2. var
  3.   ....
  4.   ttt: teet_TrzbaThread; // tThread descendant který v Execute volá webovou službu
  5.   h: tHandle;
  6.   WaitResult: DWORD;
  7. begin
  8.   ......
  9.   if aTimeout <> 0 then begin
  10.     ......
  11.     { Spustíme thread, ten zavolá webovou službu}
  12.     ttt := teet_TrzbaThread.Create(true);
  13.  
  14.      // nastavit parametry ttt ...
  15.      ...
  16.      ...
  17.      ...
  18.  
  19.     h := ttt.Handle;
  20.     ttt.Start;
  21.     if aTimeOut < 0 then
  22.       WaitResult := WaitForSingleObject(h, Windows.INFINITE)
  23.     else
  24.       WaitResult := WaitForSingleObject(h, aTimeOut);
  25.     case WaitResult of
  26.     WAIT_OBJECT_0: begin
  27.            // Thread doběhl včas, výsledky jsou validní, zpracovat je
  28.            .....  
  29.           end;
  30.     else begin
  31.            // Thread ještě nedoběhl
  32.             if GetHandleInformation(h, Tmp) then
  33.               ttt.Terminate; // signalizujeme, že s ním končíme, ale je ttt stale validni?
  34.             if WaitResult = WAIT_TIMEOUT then
  35.               Result := E_ABORT
  36.             else begin
  37.               // volání ve vlákně selhalo, ošetřit..
  38.               ....
  39.               ....  
  40.             end;
  41.          end;
  42.      end; // Case
  43.   end else // aTimeout  = 0
  44.     Result := E_ABORT; // automaticky ihned jakoby vysumi na timeout bez toho abych thread vubec startoval
  45. end;
  46.  
  47.  

Offline peta.dol

  • Nováček
  • *
  • Příspěvků: 13
  • Karma: 0
    • Verze Delphi: XE3
Re:Delphi + EET
« Odpověď #308 kdy: 02-01-2017, 14:26:48 »
Ahoj,
používáte někdo XmlSec? Mám s ním problém v případě diakritiky v heslu k certifikátu. Konkrétně volaná funkce:
xmlSecCryptoAppKeyLoad       
https://www.aleksey.com/xmlsec/api/xmlsec-app.html#XMLSECCRYPTOAPPKEYLOAD
vrací nil v případě, že je v heslu diakritika :-\

Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 257
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re: Delphi + EET
« Odpověď #309 kdy: 02-01-2017, 14:39:23 »
Ahoj,
používáte někdo XmlSec? Mám s ním problém v případě diakritiky v heslu k certifikátu. Konkrétně volaná funkce:
xmlSecCryptoAppKeyLoad       
https://www.aleksey.com/xmlsec/api/xmlsec-app.html#XMLSECCRYPTOAPPKEYLOAD
vrací nil v případě, že je v heslu diakritika :-\

Používám a o problému nevím. Heslo je parametr typu PChar, jakým způsobem ho do funkce předáváš ? Není problém při přetypování, jak jsme tady už řešili ? Jakou verzi těch knihoven XmlSec používáš ?

Offline peta.dol

  • Nováček
  • *
  • Příspěvků: 13
  • Karma: 0
    • Verze Delphi: XE3
Re:Delphi + EET
« Odpověď #310 kdy: 02-01-2017, 15:25:38 »
volám to takto:
dsigCtx.signKey := xmlSecCryptoAppKeyLoad(PChar(AnsiString(FParams.CertificateFile)),
          xmlSecKeyDataFormatPkcs12,  PChar(AnsiString(FParams.CertificatePass)), nil, nil);

definice:
 TxmlSecCryptoAppKeyLoad = function(const filename: PChar; format: xmlSecKeyDataFormat; const pwd: PChar;
        pwdCallback: Pointer; pwdCallbackCtx: Pointer): xmlSecKeyPtr; cdecl;

FParams.CertificatePass : string;

Co se týká verze nejsem schopný to nikde vyčíst (knihovny již používáme i v jiných projektech a jsou historické), žádné resource s informacemi v libxmlsec nejsou, jediné co jsem vyčetl je šas kompilace 19.6.2011 20:14:36
V commentu libsec.pas mám:
{This file generated (mostly) automatically from libxmlsec-api.xml}
{For libxmlsec version: 1.2.10}



« Poslední změna: 02-01-2017, 15:27:19 od peta.dol »

Offline Marek Weyda

  • Hrdina
  • ****
  • Příspěvků: 257
  • Karma: 8
    • Verze Delphi: Delphi 2007, 10.1 Berlin
Re:Delphi + EET - problém přetypování
« Odpověď #311 kdy: 02-01-2017, 16:15:37 »
volám to takto:
dsigCtx.signKey := xmlSecCryptoAppKeyLoad(PChar(AnsiString(FParams.CertificateFile)),
          xmlSecKeyDataFormatPkcs12,  PChar(AnsiString(FParams.CertificatePass)), nil, nil);

definice:
 TxmlSecCryptoAppKeyLoad = function(const filename: PChar; format: xmlSecKeyDataFormat; const pwd: PChar;
        pwdCallback: Pointer; pwdCallbackCtx: Pointer): xmlSecKeyPtr; cdecl;

FParams.CertificatePass : string;

Tak to je podle mě ono. To je právě to, co jsme řešili. Psal jsem o tom dost obsáhle - o problémech s přetypováním. Zkus si najít to příslušné diskuzní vlákno, případně Daniel Andrascik má odkazy na všechno ve své obsáhlé databázi a pošle Ti odkaz, viď Danieli ?  ;)

Pokud používáš Delphi XE3, jak uvádíš v profilu, tak string není AnsiString jako dříve, proto to zřejmě přetypováváš při volání té funkce - AnsiString(FParams.CertificatePass) a pak ještě na PChar - ale problém je u toho přetypování na AnsiString. POZOR totiž ! Pokud používáš diakritiku, může dojít ke ztrátě informace a to je podle mě Tvůj příklad.

Takže to vymysli jinak. Nemám teď čas to znovu vysvětlovat, ale zkus googlit nebo najít tu diskuzi. Podle mého názoru je zakopaný pes právě u toho přetypování na AnsiString.

XmlSec jsou jinak super knihovny.

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 481
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Re:Delphi + EET
« Odpověď #312 kdy: 02-01-2017, 18:27:34 »
 :P

Offline peta.dol

  • Nováček
  • *
  • Příspěvků: 13
  • Karma: 0
    • Verze Delphi: XE3
Re:Delphi + EET
« Odpověď #313 kdy: 02-01-2017, 22:45:33 »
udělal jsem si tedy
s: array of char;
 a do něj nasypal jednotlive znaky a predal jako pchar(s).
Kdyz se podivam do pameti pres CRTL+ALT+C vidim tam:
56 00 79 00 61 01 32 00 00 00 (heslo Vyš2)
ale takto mi to neprojde
kdyz  mam
s: array of ansichar;
tak v pameti mam:
56 79 9A 32 00 (Vyš2)

Opravdu nevím jak jinak to posílat, vámi uváděný thread o přetypování jsem hledal fakt dlouho, ale dost blbě se to hledá, když vlastně nevím co v něm pořádně je...
zdá se, že mám tyto knihovny:ftp://ftp.zlatkovic.com/libxml/libxmlsec-1.2.18.win32.zip
« Poslední změna: 02-01-2017, 22:58:08 od peta.dol »

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1539
  • Karma: 37
    • Pepak.net
Re:Delphi + EET
« Odpověď #314 kdy: 03-01-2017, 07:31:21 »
Nechci na to teď přísahat, ale co si pamatuju, tak některé deklarace Delphovské konverze libxml2 a spol. jsou špatně a uvádějí typ PChar tam, kde knihovna ve skutečnosti očekává UTF8 (takže spíš PAnsiChar). Takže Delphi přesně podle instrukcí provedou konverzi a výsledek nefunguje, protože konverze není ve správném kódování...

Rychlý regexp nad zdrojáky mi vrací, že jediné místo, kde v libxml unitách používám PChar, je v libxmlsec_openssl.InitXMLSecOpenSSL, kde to má svou logiku. Všude jinde jedu přes PAnsiChar.
« Poslední změna: 03-01-2017, 07:33:53 od pepak »