_CAGetPartItemAt

(    HndlBatch	    : Longint;
     ItemIdx        : Integer;
     Idx            : Integer;
 dim AlgType        : Integer;
 dim AlgValue       : Integer;
 dim DoSocPoj       : Byte;
 dim DoZdrPoj       : Byte;
 dim Castka         : Real;
 dim Castka_SP      : Real;
 dim Castka_ZP      : Real;
 dim RProc          : Real;
 dim PlatiOd        : Date;
 dim PlatiDo        : Date;
 dim TKStrId        : Longint;
 dim TKPrjId        : Longint;
 dim TKZdrId        : Longint;
 dim TKZakId        : Longint;
 dim Rezie          : Byte;
 dim RezieSP        : Byte;
 dim RezieZP        : Byte;
 dim Historie       : Byte;
 dim RucnePrid      : Byte) : Byte

Vrací informace o jedné části mzdové položky, potřebné pro rozdělení mzdových nákladů v rámci zpracování dávky HndlBatch.

HndlBatch Číslo (handle) zpracovávané dávky.
Zpracování dávky startuje funkcí _CABatchBegin.
ItemIdx Index zpracovávané mzdové položky. Získal se v cyklu pomocí funkce _CAGetItemAt.
Idx Index části mzdové položky ItemIdx v dávce HndlBatch. Rozsah je: 0..počet zpracovávaných částí - 1.
Počet zpracovávaných položek vrací funkce _CABatchBegin.
AlgType

Typ požadovaného algoritmu, podle kterého má proběhnou výpočet části položky.

  • caAlgTyp_Proc
    Procento. Počet procent je v parametru AlgValue.
  • caAlgTyp_Hod
    Hodiny. Počet hodin je v parametru AlgValue.
  • caAlgTyp_Dny
    Dny. Počet dnů je v parametru AlgValue.
  • caAlgTyp_Castka
    Pevná částka. Částa je uvedena je v parametru AlgValue.
AlgValue Hodnota upřesňující typ algoritmu.
DoSocPoj Počítej sociální pojištění.
DoZdrPoj Počítej zdravotní pojištění.
Castka Vypočítaná částka z předchozího výpočtu, jestliže při startu dávky nebylo zvoleno 'Clear=true'.
Castka_SP Vypočítaná částka sociálního pojištění z předchozího výpočtu, jestliže při startu dávky nebylo zvoleno 'Clear=true'.
Castka_ZP Vypočítaná částka zdravotního pojištění z předchozího výpočtu, jestliže při startu dávky nebylo zvoleno 'Clear=true'.
RProc Procento použité pro vypočtení parametru Castka z výchozí 100% hodnoty položky. Je to pouze informativní hodnota.
PlatiOd, PlatiDo Datumy, které stanovují interval kdy daná část mzdy platí. Má význam pouze pro typ algoritmu caAlgTyp_Proc.
Jestliže PlatiOd=_Date(0,0,0), platí od nekonečna, jestliže PlatiDo=_Date(0,0,0), platí do nekonečna.
TKStrId Ident třídicího kritéria režie - středisko. Může být nula.
TKPrjId Ident třídicího kritéria režie - projekt. Může být nula.
TKZdrId Ident třídicího kritéria režie - zdroj. Může být nula.
TKZakId Ident třídicího kritéria režie - zakázka. Může být nula.
Rezie Část mzdy patřící do režie.
Tyto věty vznikají přidáním funkcí _CAAddPartItem a zanikají automaticky, jestliže jsou nulové.
RezieSP Část mzdy patřící do režie položky 'Pojistné sociální - organizace'.
Tyto věty vznikají automaticky při ukončování dávky podle informací nastavených funkcí _CASetItemInfo. Vyplňují pouze parametr Castka_SP  podle algoritmu:

Castka_SP = M[ixmSocPojFirm] - součet všech parametrů Castka_SP na všech částí mzdy

Věta nevznikne (nebo zanikne), jestliže je nulová.
RezieZP Část mzdy patřící do režie položky 'Pojistné zdravotní - organizace'.
Tyto věty vznikají automaticky při ukončování dávky podle informací nastavených funkcí _CASetItemInfo. Vyplňují pouze parametr Castka_ZP  podle algoritmu:

Castka_ZP = M[ixmZdrPojFirm] - součet všech parametrů Castka_ZP na všech částí mzdy

Věta nevznikne (nebo zanikne), jestliže je nulová.
Historie Věta je přidána jako změna mezd z minulosti.
RucnePrid Věta byla ručně přidána.

Jestliže dávka HndlBatch neexistuje nebo neexistuje položka ItemIdx, nebo je index Idx mimo rozsah, vrací funkce false.

Podívejte se na: Rozdělení nákladů

Příklad:

procedure RozdeleniNakladuJedneMzdy
    dim hBatch      : Longint;
    dim CntItems    : Integer;
    dim RVZSP       : Real;
    dim RVZZP       : Real;
    dim Err         : Byte;
	
    Err := false;

    RVZSP := M[ixmSocVymZakl] / M[ixmSocPojVZALL];
    RVZZP := M[ixmZdrVymZakl] / M[ixmZdrPojVZALL];

    { Spustí proces rozdělení }	
    hBatch := _CABatchBegin(O[dbIdent], _SysMonth, _ActMonth, _SysYear, false, CntItems);
    _CASetItemInfo(hBatch, RVZSP, RVZZP, M[ixmSocPojFirm], M[ixmZdrPojFirm], ixmSocPojFirm, ixmZdrPojFirm, 
            O[ixNaklStr], O[ixProjekt], O[ixZdroj], O[ixZakazka]);
    { Projdeme jednotlivé položky, kterých se rozdělení týká }
    for BatchIdxPol := 0 to CntItems-1 do	
        if(_CAGetItemAt(hBatch, BatchIdxPol, PolIdx, CntParts))then
            Err := ZpracujPolozku(hBatch, PolIdx, CntParts, RVZSP, RVZZP);
            exitif(Err)then endexit
        endif
    end
    if(CntItems > 0 and Err = false)then
        _CABatchCommit(hBatch);
    else
        _CABatchRollback(hBatch);
    endif		
endproc

function ZpracujPolozku(    hBatch  : Longint;
                            PolIdx  : Integer;
                            Pocet   : Integer;
                            RVZSP   : Real;
                            RVZZP   : Real)
	
    dim Idx         : Integer;
    dim AlgType     : Integer;
    dim AlgValue    : Integer;
    dim DoSocPoj    : Byte;
    dim DoZdrPoj    : Byte;
    dim Castka      : Real;
    dim Castka_SP   : Real;
    dim Castka_ZP   : Real;
    dim StrId       : Longint;
    dim PrjId       : Longint;
    dim ZdrId       : Longint;
    dim ZakId       : Longint;
    dim Historie    : Longint;
    dim RucnePrid   : Longint;
	
    dim OrigZaklad  : Longint;
    dim Zaklad      : Longint;
    dim RProc       : Real;
    dim Rezie       : Byte;
    dim RezieSP     : Byte;
    dim RezieZP     : Byte;
    dim PlatiOd     : Date;
    dim PlatiDo     : Date;
	
    dim Err         : Byte;
	
    Err := false;
	
    OrigZaklad := M[PolIdx];	
    Zaklad := OrigZaklad; 
    for Idx := 0 to Pocet-1 do	
        if(_CAGetPartItemAt(hBatch, PolIdx, Idx, AlgType, AlgValue, DoSocPoj, DoZdrPoj, Castka, Castka_SP, Castka_ZP, RProc,
            PlatiOd, PlatiDo, StrId, PrjId, ZdrId, ZakId, Rezie, RezieSP, RezieZP, Historie, RucnePrid))then
            { Výpočet }
            ...
            _CASetPartItemAt(hBatch, PolIdx, Idx, Castka, Castka_SP, Castka_ZP, RProc);
        endif
    end
    return Err;
 endfunc