U přepočítávače je absolutně nejdůležitější první přihlášení k databázi. To je hlavní proces PrepocetFinanci. Když se hlavnímu procesu nepodaří připojit, pak přepočet neproběhne vůbec.
Hlavní proces najde absolutní počet neukončených exekučních spisů k přepočtu pomocí dotazu:
<nowiki>SELECT ID, Číslo_smlouvy FROM SmlouvyProdukt WHERE Produkt = N'EXEKUCNI_SPIS' AND exUkonceno is null Order by right(Číslo_smlouvy,2), Číslo_smlouvy</nowiki>
Od verze 7.5.16 lze výše zmíněný SQL dotaz změnit na libovolný SQL dotaz, jehož výsledkem budou záznamy z tabulky SmlouvyProdukt, a to tak, že dotaz umístíte do textového souboru (můžete přímo z Management studio pro SQL server) a pak pomocí argumentu předáte Přepočítávači financí cestu k tomuto souboru. Argument s cestou k souboru musí být umístěn před argument "Logovat". Pokud není přítomen argument "Logovat", pak Argument s cestou k souboru dejte na konec.
Argument se píše ve tvaru SQL=CESTA_K_SOUBORU (např SQL=dotaz.sql).
Hlavní proces pak rozdělí množinu spisů do skupin po 50-ti spisech. V cyklu prochází pak prochází skupiny. V 1 kroku vezme vždycky 4 skupiny.
Každou skupinu serialzuje na disk do C:\Users\WINDOWS_USER_NAME\Documents\PrepocetFinanciTemp do temp souboru (např. PripadyPrepocet_2010-11-15_10-17-15.5376450_tmpCF08.tmp). Soubor se skládá z prefixu PripadyPrepocet_ a vygenerovaného času na 10mil-tiny sekundy pomocí
<nowiki>DateTime.Now.ToString("yyyy-MM-ss_HH-mm-ss.fffffff")</nowiki>
a náhodně vynegerovaného názvu temp souboru. Název temp souboru vzniká pomocí
<nowiki>System.IO.Path.GetTempFileName()</nowiki>
To vytvoří fyzicky temp soubor v C:\Users\WINDOWS_USER_NAME\AppData\Local\Temp, ten hlavní proces hned vymaže a použije název temp souboru.
Pro každý takto vzniklý soubor s dávkou 50-ti spisů spustí podproces PrepocetPripadu. V každém 1 kroku cyklu tedy spustí paralelně 4 podprocesy PrepocetPripadu. A každý z těchto podprocesů má svojí jedinečnou dávku 50-ti spisů k prepočtu.
Aby podproces dokázal dávku přepočítat musí se taktéž přihlásit do databáze. Když se mu to nepodaří přepočet této dávky v tom okamžiku neproběhne. Pokud se podprocesu podaří přihlásit a bezchybně se dostat k souboru s dávkou. Dávku deserializuje do paměti. Soubor s dávkou vymaže a přepočte spisy, které byly v této dávce.
Hlavní proces vždy čeká až všechny 4 podprocesy skončí, aby mohl provést další 1 krok a spustit tak nové 4 podprocesy s novými 4 dávkami.
Až hlavní proces projde v cyklu všechny skupiny spisů, pak na konci zkontroluje obsah temp adresáře C:\Users\WINDOWS_USER_NAME\Documents\PrepocetFinanciTemp, jestli se tam nachází nějaké soubory s dávkou. Pokud se tam nějaké soubory s dávkami nachází, znamená to, že podprocesy pro něž byly dávky určeny, se ukončily dříve, než stihli zpracovat pro ně určenou dávku. Pak tedy hlavní proces prochází jeden po druhém všechny soubory z C:\Users\WINDOWS_USER_NAME\Documents\PrepocetFinanciTemp a spouští ke každému nový podproces. Zde je tedy vždy spuštěn právě jeden podproces s právě jednou dávkou. Na konci průchodu těmito soubory s dávkami, smaže hlavní proces celý temp adresář C:\Users\WINDOWS_USER_NAME\Documents\PrepocetFinanciTemp i s jeho případným obsahem. Přečte obsah všech chybových logů a umístí ho do C:\Users\WINDOWS_USER_NAME\Documents\Evolio.Log\CHYBOVY_LOG_PrepocitavacFinanci_AKTUALNI_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY.err.
Poté hlavní proces přečtě hodnoty ze všech logů typu *.pns, *.pzs, *.pps a postupně je sečte do třech různých proměnných, které pak použije do celkového Sumáře. Po ukončení této činnosti přejde hlavní proces ke generování Sumáře. Tedy souboru SUMAR_LOG_PrepocitavacFinanci_AKTUALNI_DATUM_A_CAS_VYTVORENI.SumLog uloženého v C:\Users\WINDOWS_USER_NAME\Documents\Evolio.Log.
Poté provede archivaci logů (*.txt, *.err) vygenerovaných podprocesy a uloží ho do C:\Users\WINDOWS_USER_NAME\Documents\Evolio.Log do ZIP souboru nazvaného Archiv_Log_PrepocitavacFinanci_AKTUALNI_DATUM_A_CAS_VYTVORENI.zip.
Každý podproces PrepocetPripadu generuje 5 typů logovacich souboru:
- Log_PrepocitavacFinanci_ID_PROCESU_AKTUALNI_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY.txt - seznam přepočtených spisů
- Log_PrepocitavacFinanci_ID_PROCESU_AKTUALNI_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY.err - výpis chyby konkrétního přepočítávaného spisu. Tudíž během 1 přepočtu dávky, může v extrémním případě vzniknout 50 takovýchto souborů.
- ID_PROCESUAKTUALNI_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY.pns - obsahuje jedno 1 číslo reprezentující počet nezměněných spisů
- ID_PROCESUAKTUALNI_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY.pzs - obsahuje jedno 1 číslo reprezentující počet změněných spisů
- ID_PROCESUAKTUALNI_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY.pps - obsahuje jedno 1 číslo reprezentující počet přepočtených spisůHlavní proces PrepocetFinanci a jeho podporcesy se při neúspěšném prvním přihlášení pokus opakovat 5x. Poprvé čekají 30s, pak 60s, pak 90s, pak 120s a při posledním pokusu 180s.Je jasné, že vždy přibude 30s k původní čekací době a že se celková čekací doba sčítá. Takže při druhém opakovaném příhlášení trvalo připojení k databázi 90s, u třetího 180s a u posledního 480s (8 minut).==Doporučení==Nespouštějte na SQL serveru žádnou jinou úlohu, pokud stále běží nebo má začít běžet přepočet spisů.==Struktura sumáře==<nowiki>Přepočet financí ze dne DATUMPřepočet začal DATUM_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDYPřepočet skončil DATUM_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDYPočet spuštěných procesů: CISLOPočet spisů k přepočtu: CISLOPočet přepočtených spisů: CISLOPočet změněných spisů: CISLOPočet nezměněných spisů: CISLOPočet chyb: CISLOPočet doplňujích procesů mělo být spuštěno: CISLOPočet doplňujích procesů skutečně spuštěno: CISLOZačátek spuštění doplňujících procesů: DATUM_CAS_VYTVORENI_NA_10MIL-TINY_SEKUNDY (v případě nespuštění se zobrazí 0001.01.01 00-00-00.0000000)</nowiki>
7.5.17
Totální změna logování. Nejsou generovány soubory log, pns, pzs, pps. Ani sumáře čehokoliv. Vše bylo přesunuto do databáze do tabulky LogUlohy.
Přepočítávač a všechny jeho podprocesy do sloupce NazevUlohy vkládají hodnotu Přepočet Financí. Přepočítávač na začátku každého hromadného přepočtu smaže soubor guid.guid v adresáři uživatele Windows pro dočasné soubory. Vygeneruje nový GUID, který uloží do nového souboru guid.guid v adresáři uživatele Windows pro dočasné soubory. Tento Guid si pak načítají všechny další podprocesy hromadného přepočtu. Tento Guid, pak používá hlavní proces i podprocesy pro logování a jeho hodnotu ukládají vždy do sloupce Klic1. To proto, aby se dalo jednoduše říci, které záznamy jednoznačně souvisí s právě 1 hromadným přepočtem.
Logování hlavního procesu
Start hromadného přepočtu
TypZaznamuUlohy obsahuje START a Klic2 obsahuje GLOBAL
V ObsahZaznamuUlohy je Start přepočtu
Konec hromadného přepočtu
TypZaznamuUlohy obsahuje HOTOVO a Klic2 obsahuje GLOBAL
Počet spisů k přepočtu
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje SPISY_K_PREPOCTU_CELKEM{BR}
Počet spisů je uveden v ObsahZaznamuUlohy
Vyjímka v hlavním procesu
TypZaznamuUlohy obsahuje CHYBA případně v Klic2 obsahuje GLOBALNI_CHYBA{BR}
Text vyjímky je v ObsahZaznamuUlohy
Sumář hlavního procesu
Počet spuštěných procesů
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje POCET_SPUSTENYCH_PROCESU a Klic3 obsahuje SUMA{BR}
Počet spuštěných procesů je uveden v ObsahZaznamuUlohy
Počet spisů k přepočtu
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje POCET_SPISU_K_PREPOCTU a Klic3 obsahuje SUMA{BR}
Počet spisů k přepočtu je uveden v ObsahZaznamuUlohy
Počet začátek přepočtu
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje ZACATEK_PREPOCTU a Klic3 obsahuje SUMA{BR}
Začátek přepočtu je uveden v ObsahZaznamuUlohy ve formátu data (dd.MM.yyyy).
Počet začátek doplňujícího přepočtu
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje ZACATEK_DOPLNUJICIHO_PREPOCTU a Klic3 obsahuje SUMA
začátek doplňujícího přepočtu je uveden v ObsahZaznamuUlohy ve formátu data (dd.MM.yyyy).
Počet doplňujících procesů
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje POCET_DOPLNUJICICH_PROCESU a Klic3 obsahuje SUMA
Počet doplňujících procesů je uveden v ObsahZaznamuUlohy
Počet spuštěných doplňujících procesů
TypZaznamuUlohy obsahuje POCET a Klic2 obsahuje POCET_SKUTECNE_SPUSTENYCH_DOPLNUJICICH_PROCESU a Klic3 obsahuje SUMA
Počet spuštěných doplňujících procesů je uveden v ObsahZaznamuUlohy
Chyba/vyjímka v podprocesu
TypZaznamuUlohy obsahuje CHYBA a v Klic2 je číslo procesu přidělené v dané chvíli OS.
Text chyby/vyjímky je v ObsahZaznamuUlohy
Podproces přešel dalšímu spisu
TypZaznamuUlohy obsahuje DALSI_ZAZNAM a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je číslo zpracovávaného spisu.
V ObsahZaznamuUlohy je Zpracovávám spis CISLO_SPISU. AKTUALNI_CAS_DATUM
Podproces změnil data ve spisu
TypZaznamuUlohy obsahuje INFORMACE a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je číslo zpracovávaného spisu.
V ObsahZaznamuUlohy je ZMENEN
Podproces nezměnil data ve spisu
TypZaznamuUlohy obsahuje INFORMACE a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je číslo zpracovávaného spisu.
V ObsahZaznamuUlohy je NEZMENEN
Podproces uložil úspěšně data ve spisu
TypZaznamuUlohy obsahuje INFORMACE a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je číslo zpracovávaného spisu.
V ObsahZaznamuUlohy je Uložení se zdařilo
Podproces neuložil úspěšně data ve spisu
TypZaznamuUlohy obsahuje VAROVANI a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je číslo zpracovávaného spisu.
V ObsahZaznamuUlohy je Uložení se NEzdařilo CISLO_SPISU. AKTUALNI_CAS_DATUM
Chyba spisu vyvolaná při přepočtu v podprocesu
TypZaznamuUlohy obsahuje CHYBA a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je číslo zpracovávaného spisu.
Text chyby/vyjímky je v ObsahZaznamuUlohy
Sumář podprocesu
Počet nezměněných spisů
TypZaznamuUlohy obsahuje POCET a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je NEZMENENE.
Počet nezměněných spisů je uveden v ObsahZaznamuUlohy
Počet změněných spisů
TypZaznamuUlohy obsahuje POCET a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je ZMENENE.
Počet změněných spisů je uveden v ObsahZaznamuUlohy
Počet přepočtených spisů
TypZaznamuUlohy obsahuje POCET a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je PREPOCTENE.
Počet přepočtených spisů je uveden v ObsahZaznamuUlohy.
Konec přepočtu dávky spisů v podprocesu
TypZaznamuUlohy obsahuje HOTOVO a v Klic2 je číslo procesu přidělené v dané chvíli OS a v Klic3 je KONEC_PREPOCTU_DAVKY.
Počet přepočtených spisů je uveden v ObsahZaznamuUlohy.
Verze 7.10.1
V této verzi došlo k totální změně způsobu přepočtu financí. Žádné podporocesy, žádný zápis na disk nebo čtení z disku. Nic takového.
Máme tu hlavní proces, kterému lze nově říci kolik vláken má spustit najednou a kolik spisů bude v jednom vlákně. Hlavní proces podle příkazové řádky spustí tolik vláken, kolik si uživatel přeje. Po spuštění každého vlákna se čeká 1s. Každé vlákno provádí vlastní přepočet financí na vlastní podmnožině spisů. Množina spisů, které mají jít do přepočtu se provádí tímto SQL {BR}
SELECT ID, Číslo_smlouvy FROM SmlouvyProdukt as sp left outer join FinancePrehled as fp on sp.ID = fp.fsID WHERE Produkt = N'EXEKUCNI_SPIS' AND exUkonceno is null Order by fp.fsFinanceKDatu asc
Logování zůstalo beze změny. Pouze je nově odchytávávana výjimka přímo při samotném přepočtu financí, která je následně uložena jako CHYBA a v textu chyby je prefix CHYBA FINANCE: a za ní potom POPIS_VYJIMKY;VYJIMKA_STACK_TRACE. A v tomto případě není spis uložen.