_HstExtValid

(    Mode     : Byte;
     DBT      : Byte;
     Index    : Word;
     FromDate : Date;
     SepDate  : Date;
     ...             ) : Byte

Umožňuje rychlé zjišťování dat historické položky z oddělení Osobní a Pam pro jednoho nebo více zaměstnanců. Přitom není nutno nahrávat potřebné zaměstnance do paměti.

Obecně platí:

Mode Parametry Popis
HEV_ZAM_JEDEN
(    ManIdent : Longint; 
 dim Value             ;
 dim RefDate  : Date;
 dim CreDate  : Date) : Byte

V parametru Value vrací hodnotu historické položky pro zaměstnance s identem ManIdent.

V parametrech RefDate a CreDate vrací datum platnosti a založení nalezené historické položky.

Jestliže je nějaká položka nalezena, vrací funkce true.

HEV_ZAM_VYCET
(dim F : File) : Byte

Ve streamu F vrací hodnoty historické položky pro zaměstnance, jejichž identy jsou uloženy ve streamu F. Počet identů ve streamu není omezen.

Uložit identy lze třeba takto:

dim F : File;
SRewrite(F, "", true);
if(_StartDB(dbtO))then
    repeat
        SPut(F,_SCount(F), O[dbIdent]);
    until _StepRec(dbtO, 1)=false;
endif

Identy vracených zaměstnanců nebudou ve stejném pořadí, v jakém byly do streamu vloženy! Strukturu vraceného streamu naleznete pod touto tabulkou.

HEV_ZAM_MASKA
(    ManRights : Longint; 
 dim F         : File) : Byte

Ve streamu F vrací hodnoty historické položky pro zaměstnance, jejichž práva vyhoví masce ManRights. Jestliže bude ManRights = -1, bude použita maska práv aktuálně přihlášeného uživatele.

Strukturu vraceného streamu naleznete pod touto tabulkou.

Struktura vraceného streamu:

Index Popis Příklad pro získání jedné věty
0..99999 Identy vracených zaměstnanců. Idx
100000..199999 Hodnota historické položky. Nebude-li historická hodnota pro zvolené období  nalezena, nebude zde záznam! Idx+100000
200000..299999 Datum platnosti historické položky. Nebude-li historická hodnota pro zvolené období  nalezena, nebude zde záznam! Idx+200000
300000..399999 Datum založení historické položky. Nebude-li historická hodnota pro zvolené období  nalezena, nebude zde záznam! Idx+300000

Podívejte se na: Historie

Příklady:

Zjištění položky P0098 pro období 1/2008 pro jednoho zaměstnance:

procedure TestHstExt
    dim Result	: Byte;
    dim Value	: Real
    dim FDate	: Date;
    dim RDate	: Date;
    dim CDate	: Date;
    dim SDate	: Date;

    FDate := _LastDate(1,2008);
    SDate := FDate;
    Result := _HstExtValid(HEV_ZAM_JEDEN, dbtP, 98, FDate, SDate, 12, Value, RDate, CDate);
    Trace("Result=",Result," RDate=",FDate," RDate=",CDate," Value=",Value:10:5);
endproc

Sčítání položky P0098 pro období 1/2008 pomocí výčtu zaměstnanců:

procedure Test
    dim F    : File;
    dim Suma : Real;

    Suma := 0;
    
    StepIdx(dbtO,oJmeno);
    SetActEnv(1,1,2008);
    SRewrite(F, "", true);
    if(_StartDB(dbtO))then
        repeat
            SPut(F,_SCount(F), O[dbIdent]);
        until _StepRec(dbtO, 1)=false;
    endif

    dim FDate : Date;
    dim RDate : Date;
    dim CDate : Date;
    dim SDate : Date;
    dim Key   : Longint;

    FDate := _LastDate(1,2008);
    SDate := _Date(0,0,0);
    if(_HstExtValid(HEV_ZAM_VYCET, dbtP, 98, FDate, SDate, F))then
        if(_SFirst(F, Key))then
            repeat
                if(_SGetTyp(F,Key+100000)<>0)then
                    Suma := Suma + _SGet(F,Key+100000);
                endif
            until _SNext(F, Key)=false or Key>=100000;
        endif
    endif
    SClose(F);
endproc

Sčítání položky P0098 pro období 1/2008 pomocí přístupových práv k zaměstnancům:

procedure Test
    dim F    : File;
    dim Suma : Real;

    Suma := 0;

    dim FDate : Date;
    dim RDate : Date;
    dim CDate : Date;
    dim SDate : Date;
    dim Key   : Longint;

    SRewrite(F, "", true);
    FDate := _LastDate(1,2008);
    SDate := _Date(0,0,0);
    if(_HstExtValid(HEV_ZAM_MASKA, dbtP, 98, FDate, SDate, -1, F))then
        if(_SFirst(F, Key))then
            repeat
                if(_SGetTyp(F,Key+100000)<>0)then
                    Suma := Suma + _SGet(F,Key+100000);
                endif
            until _SNext(F, Key)=false or Key>=100000;
        endif
    endif
    SClose(F);
endproc