( UvazekId : Byte;
SMonth : Integer;
SYear : Integer;
WSrc : Wage;
dim WNew : Wage; [dim hMapNew : Longint]
PolRNStr : String[10];
PolIdxSP : Integer;
PolIdxZP : Integer;
PolName : String[10];
RelDataId : Longint;
... ) : Byte
Vyrobí mzdovou větu WNew podle položek třídicích kritérií PolName a případně identů použitých relací RelDataId. Počet párů třídicích kritérií není omezen, ale musí logicky odpovídat počtu použitých třídění např ve funkci _SortGenerate.
| UvazekId | Ident úvazku. |
| SMonth | Měsíc pro nalezení rozdělení mzdy. |
| SYear | Rok pro nalezení rozdělení mzdy. |
| WSrc | Zdrojová mzdová věta. Jestliže nebude rozdělení mzdových nákladů pro dané období a úvazek nalezeno, kopíruje se její obsah do WNew. Musí být typ Wage, nelze používat M! |
| WNew | Jestliže na místě tohoto parametru bude použit parametr typu Wage, pak platí, že: - Výsledek bude uložen do mzdové věty WNew vytvořené podle rozdělení mzdových nákladů a požadovaných třídicích kritérií. Jestliže nebude rozdělení mzdových nákladů pro dané období a úvazek nalezeno, kopíruje se do ní obsah z WSrc. Musí být typ Wage, nelze používat M! |
| hMapNew | Jestliže na místě tohoto parametru bude použit parametr typu celé číslo, pak platí, že: - Výsledek bude uložen do mapy typu MAP_LONG vytvořené podle rozdělení mzdových nákladů a požadovaných třídicích kritérií. Jestliže nebude rozdělení mzdových nákladů pro dané období a úvazek nalezeno, kopíruje se do ní obsah z WSrc. Mapa bude ve funkci otevřena (použije _MapOpen) a musíte jí zavřít procedurou MapClose! Ukládání do mapy je zde kvůli tomu, že rozpočítávání mzdových nákladů může u některých položek vést k necelým číslům, ale mzdová věta může tyto položky mít jako celočíselné!!sU |
| PolRNStr | Název položky, ve které je uloženo režijní středisko pro rozpočítání nákladů (Př.: 'O0400'). |
| PolIdxSP | Index mzdové položky 'ixmSocPojFirm' - 'Pojistné sociální - organizace' |
| PolIdxZP | Index mzdové položky 'ixmZdrPojFirm' - 'Pojistné zdravotní - organizace' |
| Opakované sady třídicích kritérií: | |
| PolName | Jméno položky třídicího kritéria. |
| RelDataId | Jestliže je položka třídicího kritéria relací, je zde ident relace pro danou sadu členění. Dodává stream funkce _SortGenerate. |
Podívejte se na: Rozdělení nákladů
Příklad:
procedure Test_CABuildWage
dim WSrc, WDst : Wage;
_LoadWage(_SysMonth, _SysYear);
WSrc := M;
printup(_CABuildWage(O[dbIdent], _SysMonth, _SysYear, WSrc, WDst, "O0401", ixmSocPojFirm, ixmZdrPojFirm,
"O0400", 107, "O0407", 7));
trace(WDst[100]," ",WDst[101]," ");
endproc
Příklad - rekapitulace do CSV:
dim Mes : Word;
dim Rok : Word;
Mes := _ActMonth;
Rok := _SysYear;
call Test_Rekap;
exit
procedure Test_Rekap
dim sError : String;
dim dtRef : Date;
dim dtSep : Date;
dim UvazekId : Longint;
dim Perioda : Longint;
dim FDta : File;
dim FRel : File;
dim TKPol1 : String[10];
dim TKPol2 : String[10];
dim TKPol3 : String[10];
TKPol1 := "O0400";
TKPol2 := "O0407";
TKPol3 := "";
SRewrite(FDta,"",true);
SRewrite(FRel,"",true);
dtRef := _LastDate(Mes,Rok);
dtSep := _LastDate(Mes,Rok);
call Trideni;
call ProjdiStream;
SClose(FDta);
SClose(FRel);
return;
procedure Trideni
if(_SortGenerate( 1, dtRef, dtSep, _Str(Mes) + "|" + _Str(Rok), 0 { Rights }, "O0401",
TKPol1, "", false,
TKPol2, "", false,
TKPol3, "", false,
"#",
FDta, FRel, sError) = true)
then
else
_MsgBox(0, "Chyba třídění: " + sError, 0);
Exit;
endif
endproc
procedure ProjdiStream
dim Idx : Longint;
dim sRec : String;
dim RelId1 : Longint;
dim RelId2 : Longint;
dim RelId3 : Longint;
dim Data1 : String;
dim Data2 : String;
dim Data3 : String;
dim WSrc : Wage;
dim WNew : Wage;
dim T : Text;
TRewrite(T, "TestRN.CSV");
TWriteLn(T, "Jmeno;TK1;TK2;TK3;M0101;M0102;M0273;M0274");
if(_SFirst(FDta, Idx))then
repeat
UvazekId := _SGet(FDta, Idx + 000000);
Perioda := _SGet(FDta, Idx + 100000);
if(_SGetTyp(FDta,Idx + 200000) <> 0)then Data1 := _SGet(FDta, Idx + 200000); endif
if(_SGetTyp(FDta,Idx + 300000) <> 0)then Data2 := _SGet(FDta, Idx + 300000); endif
if(_SGetTyp(FDta,Idx + 400000) <> 0)then Data3 := _SGet(FDta, Idx + 400000); endif
if(_SGetTyp(FRel,Idx + 000000) <> 0)then RelId1 := _SGet(FRel, Idx + 000000); endif
if(_SGetTyp(FRel,Idx + 100000) <> 0)then RelId2 := _SGet(FRel, Idx + 100000); endif
if(_SGetTyp(FRel,Idx + 200000) <> 0)then RelId3 := _SGet(FRel, Idx + 200000); endif
if(_FindRecId(dbtO, UvazekId))then
WSrc := M;
if(_CABuildWage(UvazekId, Mes, Rok, WSrc, WNew, "O0401", ixmSocPojFirm, ixmZdrPojFirm,
TKPol1, RelId1,
TKPol2, RelId2,
TKPol3, RelId3))
then
TWriteLn(T, O[oJmeno],";",Data1,";",Data2,";",Data3,";",WNew[101],";",WNew[102],";",WNew[ixmSocPojFirm],";",WNew[ixmZdrPojFirm]);
Trace(O[oJmeno]," ",UvazekId," ",RelId1," ",RelId2," ",RelId3," M0101=",WNew[101]);
endif
endif
until _SNext(FDta, Idx) = false or Idx > 100000;
endif
TClose(T);
endproc
endproc