_SumWage

(    Mode   : Byte;
     ... ) : Real

Umožňuje rychlé sčítání určených mzdových položek bez nutnosti nahrání mzdových vět. Najednou lze sčítat položky z více mzdových vět, od více zaměstnanců. Používá rychlé SQL funkce SUM. V případě šifrovaných položek a SWG_VETA_SUM_ZAKL je algoritmus méně efektivní, protože SQL funkci SUM nelze použít. Výsledek se vrací jako Real .

Z hlediska rychlosti, je vhodné funkci používat i pro zjištění jedné položky z jedné mzdové věty, namísto nahrání celé mzdové věty pomocí _LoadWage.

Funkce _SumWage spolupracuje se mzdovou cache:

Způsob činnosti a složení parametrů určuje bitová maska Mode.

Mode Parametry Popis Priorita
SWG_ROZSAH_OD_DO (0)
(default)
(    Mode  : Byte; 
     From  : Date;
     To    : Date;
     ...
Rozsah mzdových vět je dán datumem From a To. V těchto parametrech je významný pouze rok a měsíc. 0
SWG_ROZSAH_VYCET
(    Mode  : Byte; 
 dim FO    : File;
     ...
Mzdové věty jsou dány datumy nalezenými ve streamu FO. 1
SWG_ROZSAH_JEDNA
(    Mode     : Byte; 
     SysMonth : Word;
     Year     : Word;
     ...
Pracuje s jednou mzdovou větou, která je dána obdobím SysMonth a Year. 2
SWG_POL_JEDNA (0)
(default)
(    Mode  : Byte;
     <ROZSAH>
     INum  : Word;
     ...
Pracuje pouze s jednou mzdovou položkou, jejíž index je INum. 0
SWG_POL_VYCET
(    Mode  : Byte;
     <ROZSAH>
     FINum : File;
     ...
Pracuje s výčtem mzdových položek, jejichž indexy jsou uloženy ve streamu FINum. 1
SWG_MASKA_NE (0)
(default)
(    Mode  : Byte;
     <ROZSAH>
     <POL>
     ...
Výsledné věty se netestují na atribut mzdové věty. 0
SWG_MASKA_AND
(    Mode  : Byte;
     <ROZSAH>
     <POL>
     Maska : Longint;
     ...
Aby byla položka zahrnuta do sumy, musí mzdová věta vyhovět algoritmu:

(mzd_attr lor maska) = maska

Výsledek se získá kurzorem, nelze použít SQL funkci SUM.
1
SWG_MASKA_OR
(    Mode  : Byte;
     <ROZSAH>
     <POL>
     Maska : Longint;
     ...
Aby byla položka zahrnuta do sumy, musí mzdová věta vyhovět algoritmu:

(mzd_attr lor maska) <> 0

Výsledek se získá kurzorem, nelze použít SQL funkci SUM.
2
SWG_ZAM_JEDEN (0)
(default)
(    Mode  : Byte;
     <ROZSAH>
     <POL>
     <MASKA>
     ZamId : Longint)
Pracuje pouze s jedním zaměstnancem, jehož Ident je ZamId. Jestliže bude ZamId=0, budou do součtu zahrnuti všichni zaměstnanci. 0
SWG_ZAM_VYCET
(    Mode   : Byte;
     <ROZSAH>
     <POL>
     <MASKA>
     FZamId : File)
Pracuje s výčtem zaměstnanců, jejichž Identy jsou uloženy ve streamu FZamId. 1
SWG_VETA_ZAKL (0)
(default)
(    Mode  : Byte;
     ...
Pracuje pouze se základními mzdovými větami.
0
SWG_VETA_SUM
(    Mode  : Byte;
     ...
Pracuje pouze se sumárními mzdovými větami
(Perioda = | Rok | Mes*100 |  )
1
SWG_VETA_STD
(    Mode  : Byte;
     ...
Pracuje s obdobím vět tak, jak bylo zadáno, neupravuje ho. Používá se ve spojení s SWG_ROZSAH_JEDNA.
2
SWG_VETA_SUM_ZAKL
(    Mode  : Byte;
     ...
Pracuje se sumárními mzdovými větami. Jestliže nebude nalezena sumární mzdová věta, použije větu základní.

Zpracování je z počátku komplikováno individuálním vyhledáváním mzdových vět. Jestliže pro jednoho zaměstnance zjišťujete více položek pro stejné období, použijte: Mode=SWG_VETA_SUM_ZAKL_S.
3
SWG_VETA_SUM_ZAKL_S   Způsob zpracování je stejný jako u typu SWG_VETA_SUM_ZAKL. Rozdíl spočívá v tom, že v případě opakovaného zpracování pro jednoho zaměstnance pro stejné období bude použito již jednou nalezené rozložení mzdových vět, čímž se šetří SQL příkazy a tedy i čas zpracování. 3
SWG_VETA_OPR_ZAKL
(    Mode  : Byte;
     ...

Pracuje s opravnými mzdovými větami. Jestliže nebude nalezena opravná mzdová věta, použije větu základní.

Zvláštností u tohoto modu zpracování je práce s uzamčenými nebo neuzamčenými větami. Předpokládá se, že opravné věty nejsou zamykány. Základní věty ano. Proto vlastnost SWG_UZAM_ANO (případně i SWG_UZAM_NE) může být aplikována pouze na základní věty. U opravných vět na ní nebude brán zřetel!

Zpracování je z počátku komplikováno individuálním vyhledáváním mzdových vět. Jestliže pro jednoho zaměstnance zjišťujete více položek pro stejné období, použijte: Mode=SWG_VETA_OPR_ZAKL_S.

4
SWG_VETA_OPR_ZAKL_S   Způsob zpracování je stejný jako u typu SWG_VETA_OPR_ZAKL. Rozdíl spočívá v tom, že v případě opakovaného zpracování pro jednoho zaměstnance pro stejné období bude použito již jednou nalezené rozložení mzdových vět, čímž se šetří SQL příkazy a tedy i čas zpracování.
SWG_UZAM_ANO (0)
(default)
(    Mode  : Byte;
     ...
Pracuje pouze s uzamčenými mzdovými větami. V tuto chvíli je SQL dotaz komplikován případným spojením s tabulkou MZDY, kde je položka M0002 (atribut) nesoucí informaci o zamčení věty. 0
SWG_UZAM_NE
(    Mode  : Byte;
     ...
Pracuje pouze s neuzamčenými mzdovými větami. V tuto chvíli je SQL dotaz komplikován případným spojením s tabulkou MZDY, kde je položka M0002 (atribut) nesoucí informaci o zamčení věty. 1
SWG_UZAM_OBE
(    Mode  : Byte;
     ...
Pracuje s uzamčenými i neuzamčenými mzdovými větami. Optimální SQL dotaz. 2

Podívejte se na: Mzdy

Příklady:

Jedna položka z jedné mzdové věty bez ohledu na uzamčení
(Měsíc=9, Rok=2007, Pol=M0160, ZamId=12):

Trace(_SumWage(SWG_ROZSAH_JEDNA+SWG_UZAM_OBE, 9, 2007, 160, 12):9:3);

Jedna položka z uzamčených, základních vět v rozsahu
(Od=1/2007, Do=12/2007, Pol=M0100, ZamId=12):

R := _SumWage(SWG_VETA_ZAKL+SWG_UZAM_OBE, _Date(1,1,2007), _Date(1,12,2007), 100, 12);
 
{ Stejné jako: }

_FindRecId(dbtO,12)
dim Mes : Word;
for Mes := 1 to 12 do
  if _LoadWage(Mes,2007) then
    R := R + M[100];
  endif
end

Jedna položka z uzamčených, základních vět ve výčtu období
(Od=9/2007, Do=11/2007, Pol=M0160, ZamId=12):

SRewrite(FO,"",true);
SPut(FO,1,_Date(1,9,2007));
SPut(FO,2,_Date(1,10,2007));
SPut(FO,3,_Date(1,11,2007));

Trace(_SumWage(SWG_ROZSAH_VYCET, FO, 160, 12):9:3);

Dvě položky z uzamčených, základních vět ve výčtu období
(Od=9/2007, Do=11/2007, Pol=M0100,M0160, ZamId=12):

SRewrite(FO,"",true);
SPut(FO,1,_Date(1,9,2007));
SPut(FO,2,_Date(1,10,2007));
SPut(FO,3,_Date(1,11,2007));

SRewrite(FP,"",true);
SPut(FP,1,100);
SPut(FP,2,160);

Trace(_SumWage(SWG_ROZSAH_VYCET+SWG_POL_VYCET, FO, FP, 12):9:3);

Dvě položky z uzamčených, základních vět ve výčtu období dvou zaměstnanců
(Od=9/2007, Do=11/2007, Pol=M0100,M0160, ZamId=12,14):

SRewrite(FO,"",true);
SPut(FO,1,_Date(1,9,2007));
SPut(FO,2,_Date(1,10,2007));
SPut(FO,3,_Date(1,11,2007));

SRewrite(FP,"",true);
SPut(FP,1,100);
SPut(FP,2,160);

SRewrite(FZ,"",true);
SPut(FZ,1,12);
SPut(FZ,2,14);

Trace(_SumWage(SWG_ROZSAH_VYCET+SWG_POL_VYCET+SWG_ZAM_VYCET, FO, FP, FZ):9:3);

Dvě položky z uzamčených, základních vět ve výčtu období dvou zaměstnanců
(ZamId=12,14, Od=9/2007, Do=11/2007, Pol=M0100,M0160):

SRewrite(FO,"",true);
SPut(FO,1,_Date(1,9,2007));
SPut(FO,2,_Date(1,10,2007));
SPut(FO,3,_Date(1,11,2007));

SRewrite(FP,"",true);
SPut(FP,1,100);
SPut(FP,2,160);

SRewrite(FZ,"",true);
SPut(FZ,1,12);
SPut(FZ,2,14);

Trace(_SumWage(SWG_ROZSAH_VYCET+SWG_POL_VYCET+SWG_ZAM_VYCET, FO, FP, FZ):9:3);

Jedna položka z vět sumárních nebo základních, které vyhoví masce matSumOK nebo matProtect, ve výčtu období jednoho zaměstnance
(ZamId=12, Od=10/2007, Do=12/2007, Pol=M0100):

Trace(_SumWage(SWG_VETA_SUM_ZAKL+SWG_MASKA_OR+SWG_UZAM_OBE, 
        _Date(1,10,2007), _Date(1,12,2007), 100, matSumOK+matProtect, 12):9:3);