( 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í.
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);