_FenixII_GetInfo

(    nCommand     : Integer;
     sFenixII     : String;
 dim F            : File;
     nMonth       : Integer;
     nYear        : Integer;
     nTimeOutExe  : Integer;
     nTimeOutData : Integer) : Integer

Tato funkce komunikuje se systémem FenixII. Co od FenixII potřebuje, určuje parametr nCommand. Komunikace probíhá pomocí streamu F. Požadované období definují parametr nMonth a nYear .

Jak dlouho má funkce čekat na spuštění "PVT.Fenix.Zpracovani.exe" definuje parametr nTimeOutExe . Obvyklá hodnota je 20 vteřin.

Jak dlouho má funkce čekat na následné vrácení dat definuje parametr nTimeOutData . Obvyklá hodnota je 120 vteřin.

Parametr sFenixII definuje umístění programu "PVT.Fenix.Zpracovani.exe ".

Komunikace probíhá takto:

  1. FluxPam5 vytvoří sdílenou paměť.
  2. FluxPam5 spustí program "PVT.Fenix.Zpracovani.exe" a čeká nTimeOutExe vteřin na semafor potvrzující spojení. Jestliže se do nTimeOutExe vteřin FenixII pomocí semaforu neohlásí, končí funkce _FenixII_GetInfo s kódem 11.
  3. FluxPam5 odešle požadavek (opět pomocí sdílené paměti) a čeká nTimeOutData vteřin na odpověď. Jestliže do nTimeOutData vteřin FenixII nedodá data, končí funkce _FenixII_GetInfo s kódem 15 .
  4. FenixII do sdílené paměti vloží data a oznámí to pomocí semaforu FluxPam5.
  5. FluxPam5 zpracuje data do podoby streamu a funkce končí nulou.

Kódy chyb:

Chyby spojené se spouštěním "PVT.Fenix.Zpracovani.exe" mají bázi 1000. To znamená, že správný kód dostanete odečtením tisíce. Pak to budou tyto chyby.

nCommand = 1

Zjišťuje informace o příplatcích. Do streamu F vložte požadovaná osobní čísla od indexu 0 s krokem 1. Zadejte období a zavolejte funkci _FenixII_GetInfo . Výsledek se vrací opět ve streamu ve formátu:

Index ve streamu

Popis

Typ

Rozlišení

0

Osobní číslo

String

---

1

Status

Integer

---

2

Rok

Integer

---

3

Měsíc

Integer

---

4

Příplatek přesčas nižší

Real

Období

5

Příplatek přesčas vyšší

Real

Období

6

Příplatek za soboty a neděle

Real

Suma

7

Příplatek za svátky

Real

Období

8

Příplatek za pohotovost na pracovišti nižší

Real

Suma

9

Příplatek za pohotovost na pracovišti vyšší

Real

Suma

10

Příplatek za pohotovost mimo pracoviště nižší

Real

Suma

11

Příplatek za pohotovost mimo pracoviště vyšší

Real

Suma

12

Příplatek za práci v noci

Real

Suma

Věty se opakují v kroku 100. První osobní číslo je tedy s indexem 0, druhé 100, třetí 200 atd.

Pořadí vstupních osobních čísel nemusí souhlasit s pořadím, v jakém se věty vrací.

V Parametru Status jsou hodnoty:

V parametrech Rok a Měsíc přichází období podle toho, z jakého období je částka proplácena. Proto se může věta s jedním osobním číslem opakovat. Za předchozí měsíce se mohou vyskytovat pouze položky s rozlišením za Období. Položky s rozlišením Suma se vyskytnou pouze za období, které požadujeme.

Příklad:

dim F : File;
dim nIdx : Integer;

SRewrite(F, "", true);
SPut(F, 0, "002701");
SPut(F, 1, "002801");
SPut(F, 2, "002672");

_FenixII_GetInfo (1, "C:\FenixII\PVT.Fenix.Zpracovani.Exe", F, 5, 2005, 20, 120)

if _SFirst(F, nIdx) then
  repeat
    Trace(nIdx, "  ", _SGet(F, nIdx));
  until _SNext(F, nIdx)=false;
endif

nCommand = 2

Zjišťuje informace o směnách. Do streamu F vložte požadovaná osobní čísla od indexu 0 s krokem 1. Zadejte období a zavolejte funkci _FenixII_GetInfo . Výsledek se vrací opět ve streamu. Každá věta ve streamu je řetězec obsahující:

Pořadí v řetězci

Popis

Typ

Popis

K0

K1

K2

K3

0

Osobní číslo

String[15]

Osobní číslo

X

X

X

X

1

Status

Integer

0

OK. Zaměstnanec byl nalezen a docházka je pro dané období uzavřena.

1

Zaměstnanec s osobním číslem nebyl nalezen.

2

Zaměstnanec byl nalezen, ale nemá pro dané období uzavřenou docházku.

X

X

X

X

2

Kód věty

Integer

0

Hlavička

1

Plánovaná směna (Př.: Prac: 7:00-18:00)

2

Skutečná směna (Př.: Prac: 6:58-18:23, L:7:00-18:00)

3

Odchylky od skutečné směny (Př.: L: 10:32-13:16)
Jsou ignorovány směny, které mají kód směny "Prac" a "".

X

X

X

X

3

Hodin na týden

Real

Plánovaný počet hodin na týden

X

-

-

-

4

Procento úvazku

Real

Plánované procento úvazku

X

-

-

-

5

Období od

Datum

Období od. U hlavičky je to rozsah, u ostatních vět je to den směny a je tedy "Období od = Obdobá do".

X

X

X

X

6

Období do

Datum

Období do

X

-

-

-

7

Kód směny

String[5]

Prac

Pracoval

L

Nemoc neplacená

S

OČR neplaceno

P

Peněžitá pomoc v mateřství

D

Dovolená řádná

V

Volno placené

X

Volno neplacené

A

Absence

*

Prostoj placený 60-ti procenty

/

Prostoj placený 80-ti procenty

I

Prostoj placený 100 procenty

V1

Volno - studium

V2

Volno – přednášková činnost

V3

Volno – lékař

V4

Volno – doprovod ZTP

V5

Volno – pohřeb, úmrtí

V6

Volno – svatba, porod

V7

Volno – hledání nového zaměstnání

Y

Překážky na straně zaměstnavatele - placeno průměrem

Z

Veřejný zájem

X1

Volno nepl. – Svatba rodičů

X2

Volno nepl. - Stěhování

X3

Volno nepl. – Přerušení provozu

X4

Volno nepl. – Hledání zaměstnání

M

Rodičovský příspěvek

-

X

X

X

8

Začátek

Longint

Začátek směny ve vteřinách.

-

X

X

X

9

Konec

Longint

Konec směny ve vteřinách.

-

X

X

X

10

Délka s přestávkami

Longint

Délka směny ve vteřinách bez ohledu na přestávky.

-

X

-

X

11

Délka bez přestávek

Longint

Délka směny ve vteřinách s ohledem na přestávky.

-

X

-

-

Poslední tři sloupce v předchozí tabulce informují o tom, které parametry jsou pro který kód věty platné. Délka bez přestávek je tedy platná pouze pro Kód věty = 1 - plánovaná směna.

Pořadí vstupních osobních čísel nemusí souhlasit s pořadím, v jakém se věty vrací.

Jak jdou věty za sebou podle svých typů v rámci jednoho osobního čísla

  1. Hlavička s kódem 0
  2. Všechny plánované směny s kódem 1
  3. Všechny skutečné směny s kódem 2. V rámci těchto směn přichází odchylky s kódem 3. Věta s kódem 2 půjde jako první.

Lze se spolehnout na to, že všechny směny budou seřazeny podle data a času začátku.

Jak se věty opakují ve streamu

Věty se opakují v kroku 1 a vyčíst je lze makroprocedurou StrGet takto:

dim sOC         : String[15];
dim iSt         : Integer;
dim iKodVety    : Integer;
dim rFondHodTyd : Real;
dim rProcUv     : Real;
dim dObdobiOd   : Date;
dim dObdobiDo   : Date;
dim sKodSmeny   : String[5];
dim lZacatek    : Longint;
dim lKonec      : Longint;
dim lDelka      : Longint;
dim lOdprCas    : Longint;

StrGet(_SGet(F, nIdx), sOC, iSt, iKodVety, rFondHodTyd, rProcUv, 
                       dObdobiOd, dObdobiDo, sKodSmeny, lZacatek,
                       lKonec, lDelka, lOdprCas); 

Příklad:

dim F    : File;
dim FT   : Text;
dim nIdx : Integer;

SRewrite(F, "", true);
SPut(F, 0, "002701");
SPut(F, 1, "002801");
SPut(F, 2, "002672");

_FenixII_GetInfo (2, "C:\FenixII\PVT.Fenix.Zpracovani.Exe", F, 5, 2005, 20, 120)

dim sOC         : String[15];
dim iSt         : Integer;
dim iKodVety    : Integer;
dim rFondHodTyd : Real;
dim rProcUv     : Real;
dim dObdobiOd   : Date;
dim dObdobiDo   : Date;
dim sKodSmeny   : String[5];
dim lZacatek    : Longint;
dim lKonec      : Longint;
dim lDelka      : Longint;
dim lOdprCas    : Longint;

TRewrite(FT, "FenixII_Info.Txt");
if _SFirst(F, nIdx) then
  repeat
    StrGet(_SGet(F, nIdx), sOC, iSt, iKodVety, rFondHodTyd, rProcUv,
                           dObdobiOd, dObdobiDo, sKodSmeny, lZacatek,
                           lKonec, lDelka, lOdprCas); 
    TWriteln(FT, "sOC         = ", sOC); 
    TWriteln(FT, "iSt         = ", iSt); 
    TWriteln(FT, "iKodVety    = ", iKodVety); 
    TWriteln(FT, "rFondHodTyd = ", rFondHodTyd); 
    TWriteln(FT, "rProcUv     = ", rProcUv); 
    TWriteln(FT, "dObdobiOd   = ", dObdobiOd); 
    TWriteln(FT, "dObdobiDo   = ", dObdobiDo); 
    TWriteln(FT, "sKodSmeny   = ", sKodSmeny); 
    TWriteln(FT, "lZacatek    = ", lZacatek); 
    TWriteln(FT, "lKonec      = ", lKonec); 
    TWriteln(FT, "lDelka      = ", lDelka); 
    TWriteln(FT, "lOdprCas    = ", lOdprCas); 
    TWriteln(FT, ""); 
  until _SNext(F, nIdx)=false;
endif
TClose(FT);

 

Podívejte se na: Ostatní procedury a funkce