_WageCache

(    Mode : Integer;
     ...        ) : xxxx

Tato funkce umožňuje komunikaci se mzdovou cache programu. Její funkce, vstupní parametry i vracený parametr se mění podle parametru Mode.

Mzdová cache uchovává mzdové věty v paměti kvůli rychlejšímu zpracování. Mzdové věty jsou vyhledávány podle identu zaměstnance, měsíce a roku. Změny mzdových položek se ukládají pouze do paměti a ukládání do databáze proběhne až při ukončení posledního makra (ať už chybou nebo korektně) nebo pomocí funkce _WageCache. Navíc se uloží pouze opravdu změněné položky!!

Pozor! U makrofunkce _SumWage proběhne v některých případech také uložení rozpracovaných mzdových vět. Je to ve chvíli, kdy je požadavek na práci se mzdovou větu v databázi, která je, ale současně rozpracovaná ve mzdové cache!

Mzdová cache zásadně pracuje pouze s vyplněnými položkami! Vyplněných položek bývá v průměru 40 na jednu mzdovou větu! Plný počet mzdových položek je cca 500! Proto operace sčítání, kopírování atd. jsou nad mzdovou větou v cache mnohokrát rychlejší než nad pracovní sadou 'M' mzdových položek a dokonce i než nad typem Wage v makrojazyku, protože tyto stále pracují s plným počtem položek!

Uložení změn mzdových položek do databáze:

_WageCache(wcMode_CommitOne, O[dbIdent], _SysMonth, _SysYear);
_WageCache(wcMode_CommitAll);

Před uložením se kontroluje stav položek před začátkem změn se stavem aktuálním a do databáze se ukládají pouze rozdíly! Pouze tyto rozdíly se ukládají i do LOG systemu (je-li nastaven) a do Avíza (je-li nastaveno).

Vrácení změn mzdových položek před jejich uložením do databáze:

_WageCache(wcMode_RollbackOne, O[dbIdent], _SysMonth, _SysYear);
_WageCache(wcMode_RollbackAll);

Test, zda aktuálně existuje změna mezi stavem položek před začátkem změn a stavem aktuálním:

_WageCache(wcMode_ExistsChange, O[dbIdent], _SysMonth, _SysYear);

Rychlé čtení mzdových položek z jiné než pracovní 'M' sady položek:

dim dVal : Real;
dVal := _WageCache(wcMode_GetItem, nZamIdent, _SysMonth, _SysYear, 100);

Rychlý zápis mzdové položky do jiné než pracovní 'M' sady položek:

_WageCache(wcMode_SetItem, nZamIdent, _SysMonth, _SysYear, 100, 10000);

Přitom ovšem opět platí, že změny do databáze uloží až nějaký Commit nebo ukončení posledního makra!

Jestliže bude změna položky zakázána ruční opravou, změna se neuloží!

Jestliže bude mzdová věta uzamčena, skončí makro chybou! Pouze atribut M0002 lze v tomto případě ukládat, protože v atributu je uložena informace o uzamčení!!

Rychlé sčítání mzdových položek podle masky a skupiny z jiné než pracovní 'M' sady položek:

dim dVal : Real;
dVal := _WageCache(wcMode_SumItems, nZamIdent, _SysMonth, _SysYear, 0 {GroupPol}, 1 { MacMask});
dVal := _WageCache(wcMode_SumAndItems, nZamIdent, _SysMonth, _SysYear, 0 {GroupPol}, 1 { MacMask});

Dotaz na stav mzdové věty:

dim nState : Integer;
nState := _WageCache(wcMode_GetState, nZamIdent, _SysMonth, _SysYear);
{ nState = wcState_InDB, wcState_InDB_Change, wcState_New, wcState_New_Change, wcState_Temp }

nebo jen jestli existuje v databázi nebo v cache jako nová se změnou:

if(_WageCache(wcMode_Exists, nZamIdent, _SysMonth, _SysYear))then

Dočasné mzdové věty

Dočasné mzdové věty se nečtou z databáze ani se do ní neukládají. Mají životnost do ukončení posledního makra, pak zanikají. Lze s nimi pracovat stejně jako s ostatními mzdovými větami. Ident zaměstnance nemusí se zaměstnancem vůbec souviset a může být záporný. Ostatní uživatelé v síti dočasné věty nemohou ovlivnit.

Příklad:

1: _WageCache(wcMode_SetAsTemporary,  -O[dbIdent],_SysMonth,_SysYear,   true);
2: _WageCache(wcMode_SetAsTemporary,   -O[dbIdent],_SysMonth+1,_SysYear, true);
3: _WageCache(wcMode_WageCopy,          O[dbIdent],_SysMonth,_SysYear,   -O[dbIdent],_SysMonth,_SysYear,   0, 0);
4: _WageCache(wcMode_SetItem,          -O[dbIdent],_SysMonth+1,_SysYear, 100, 200);
5: _WageCache(wcMode_WageAdd,          -O[dbIdent],_SysMonth+1,_SysYear, -O[dbIdent],_SysMonth,_SysYear,   0, 0);
6: _WageCache(wcMode_SetItem,          -O[dbIdent],_SysMonth+1,_SysYear, 100, 100);
7: _WageCache(wcMode_WageSub,          -O[dbIdent],_SysMonth+1,_SysYear, -O[dbIdent],_SysMonth,_SysYear,   0, 0);
8: _WageCache(wcMode_SetAsTemporaryNew,-O[dbIdent],_SysMonth,_SysYear,   true);      

1. Vytvoří první dočasnou mzdovou větu.

2. Vytvoří druhou dočasnou mzdovou větu.

3. Kopíruje aktuální mzdovou větu zaměstnance do první dočasné věty.

4. Naplní do druhé dočasné věty položku M0100 hodnotou 200.

5. Druhou dočasnou větu přičte do první dočasné věty.

6. Naplní do druhé dočasné věty položku M0100 hodnotou 100.

7. Druhou dočasnou větu odečte od první dočasné věty.

8. První dočasnou mzdovou větu smaže.

Jestliže by tedy ve výchozí mzdové položce M0100 byla hodnota 1500, pak v bodě 7. v první dočasné větě bude M0100 = 1600.

Jaká je interakce mzdové cache s pracovní 'M' sadou položek:

Makro funkce hledající mzdovou větu _LoadWage a _SearchWage pouze připravují system pro práci se mzdovou větou, ale data fyzicky nenahrají! Pouze připraví spojení příslušného makro threadu s mzdovou větou v cache.

Teprve požadavek na data některé mzdové položky (čtení nebo zápis) pomocí pracovní 'M' sady mzdových položek vedou k nahrání mzdové věty (jestliže již nahraná není) do mzdové cache a k fyzickému přenesení dat ze mzdové cache do pracovní 'M' sady mzdových položek. Toto není úplně ideální, protože používaných mzdových položek jsou stovky a pracovní sada 'M' se napřed nuluje a pak kopíruje ze mzdové cache. Z toho je vidět, že kvůli přečtení třeba jedné mzdové položky je to velké množství zbytečných operací. Proto je pro čtení malého množství mzdových položek lépe použít mzdové položky přímo ze mzdové cache.

Ukládání dat do mzdových položek pomocí pracovní 'M' sady mzdových položek ukládá data zároveň i do mzdové cache. Proto změna pracovní 'M' sady mzdových položek na jiné období nebo jiného zaměstnance nevadí a data zůstanou ve mzdové cache zachována. Později se k nim lze změnou období nebo zaměstnance vrátit.

Kombinovat ukládání dat do mzdové cache pomocí pracovní věty 'M' a funkce wcMode_SetItem je možné, protože pracovní věta se před použitím některé z položek ptá na změnu věty v cache. Jestliže od minulého použití došlo ke změně věty v cache (i rollbackem), přehraje se cache znovu do pracovní věty 'M'.

Automatické období podle pracovní mzdové věty:

Aby mzdová cache mohla pracovat nad aktuálně nahranou pracovní větou 'M', nelze mnohdy používat funkce _SysMonth a _SysYear ke stanovení období, protože funkce _LoadWage může nahrát větu zcela jinou!!! Proto je u řady příkazů funkce _WageCache používat možnost zadat období nulou, která bude doplněna obdobím podle aktuální pracovní věty 'M' a to i v případě, kdy se jedná pouze o připravenou neexistující mzdovou větu!!

Stejně tak, jestliže na místě identu zaměstnance (ManId) zadáte nulu, bude doplněn ident aktuálního zaměstnance se kterým makro pracuje.

Statistika:

Statistická data o naplněnosti mzdové cache atd. lze sledovat pomocí programu FlxSrv2Admin.Exe. Na vybraném programu Pam5 otevřete (pravé tlačítko myši) kontextové menu a zvolte příkaz Statistika.

Popis parametrů:

Mode Parametry Popis
wcMode_CommitOne ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte
Uloží jednu rozpracovanou mzdovou větu do databáze. Jestliže nebude SQL chyba vrací. Lze použít automatické období.
wcMode_RollbackOne ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte
Vrací rozpracované změny jedné mzdové věty. Vrací true. Lze použít automatické období.
wcMode_CommitAll ...                          ) : Byte Uloží všechny rozpracované mzdové věty do databáze. Jestliže nebude SQL chyba vrací true. Stejná funkce se volá při ukončení posledního makra (chybou nebo korektně).
wcMode_RollbackAll ...                          ) : Byte Vrací změny všech rozpracovaných mzdových vět. Vrací true.
wcMode_DelAllTemp ...                          ) : Byte Smaže všechny dočasné mzdové věty z paměti. Stejná funkce se volá při ukončení posledního makra (chybou nebo korektně).  Vrací true.
wcMode_ExistsChange ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte
Vrací true, jestliže existují rozpracované změny mzdové věty. Porovnává stav položek před začátkem změn se stavem aktuálním! Jinak vrací false. Lze použít automatické období.
wcMode_GetState ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte

Vrací informaci o požadované mzdové větě:

  • wcState_InDB
    Mzdová věta je v databázi a není rozpracovaná. Funkce _LoadWage u tohoto stavu vrací true.
  • wcState_InDB_Change
    Mzdová věta je v databázi a je rozpracovaná. Funkce _LoadWage u tohoto stavu vrací true.
  • wcState_New
    Mzdová věta není v databázi a není rozpracovaná. Funkce _LoadWage u tohoto stavu vrací false.
  • wcState_New_Change
    Mzdová věta není v databázi, ale je rozpracovaná (stačí přiřadit nulu do nějaké položky). Funkce _LoadWage u tohoto stavu vrací true.
  • wcState_Temp
    Dočasná věta, neukládá se do databáze. Funkce _LoadWage u tohoto stavu vrací false.

 Lze použít automatické období.

wcMode_Exists ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte
Vrací true, jestli mzdová věta existuje v databázi, nebo je v cache jako nová, ale se změnami, připravena k uložení do databáze. Jinak vrací false. Vrací stejné výsledky jako _LoadWage. Lze použít automatické období.
wcMode_GetItem ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer;
    INumber         : Integer) : xxx
Vrací data požadované mzdové věty a položky INumber. Vracený typ dat závisí na typu mzdové položky. Jestliže mzdová věta neexistuje, vrací prázdnou hodnotu daného typu položky. Lze použít automatické období.
wcMode_SetItem ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer;
    INumber         : Integer;
    Data            : xxxx) : Byte
Uloží Data do požadované mzdové věty a položky INumber. Jestliže jsou data rozdílná od dat ve mzdové cache, vrací true. Jinak vrací false. Jestliže je mzdová věta uzamčena, hlásí makro chybu. Jestliže na položce existuje ruční oprava, nebude změna uložena. Lze použít automatické období.
wcMode_WageProtected ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte
Vrací true, jestliže je mzdová věta uzamčena. Lze použít automatické období.
wcMode_SetWageProtected ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer
    Protected       : Byte) : Byte
Nastaví / zruší příznak mzdové věty - uzamčena podle parametru Protected. Lze použít automatické období.

Jestliže dojde ke změně, vrací true.
wcMode_SetAsTemporary ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer
    TempRec         : Byte) : Byte
Nastaví / zruší příznak mzdové věty - dočasná podle parametru TempRec. Dočasné věty nejsou nahrávány ani ukládány do databáze. Jestliže se příznak nastaví do již nahrané a rozpracované mzdové věty, nic se nestane a změny položek zůstanou zachovánby. Jestliže bude příznak zrušen u rozpracované věty, budou změny zahozeny a věta bude znovu nahrána z databáze!

Vrací vždy true.
wcMode_SetAsTemporaryNew ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer
    TempRec         : Byte) : Byte
Chová se stejně jako mode wcMode_SetAsTemporary, ale jestliže bude TempRec = true, vyčistí všechny položky. Lze používat opakovaně a vždy získáte prázdnou mzdovou větu.

Vrací vždy true.
wcMode_Join_M ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer) : Byte
Spojí pracovní mzdovou větu M s příslušnou větou v cache. To znamená, že najde mzdovou větu v cache a její obsah zkopíruje do pracovní věty M.
Chování je podobné jako použití  _LoadWage a pak čtení hodnoty z pracovní věty M. Lze použít automatické období.

Vrací vždy true.
wcMode_SumItems ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer;
    GroupItem       : Word;
    Mask            : LongInt) : Real
Vrací součet čísel jedné mzdové věty podle skupin a masky.
Více o parametrech GroupItem a Mask ve funkci _Sum. Lze použít automatické období.
wcMode_SumAndItems ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer;
    GroupItem       : Word;
    Mask            : LongInt) : Real
Vrací součet čísel jedné mzdové věty podle skupin a masky.
Více o parametrech GroupItem a Mask ve funkci _SumAnd. Lze použít automatické období.
wcMode_WageClear ...
    ManId           : Longint;
    Month           : Integer;
    Year            : Integer;
    GroupItem       : Word;
    Mask            : LongInt) : Byte
Maže položky mzdové věty podle skupin a masky. Jestliže je mzdová věta uzamčena, hlásí makro chybu. Jestliže na položce existuje ruční oprava, nebude změna uložena. Lze použít automatické období.

Vrací vždy true.
wcMode_WageAdd ...
    ManId_From      : Longint;
    Month_From      : Integer;
    Year_From       : Integer;
    ManId_To        : Longint;
    Month_To        : Integer;
    Year_To         : Integer;
    GroupItem       : Word;
    Mask            : LongInt) : Byte
Přičítá položky ze mzdové věty From do mzdové věty To podle skupin a masky. Výsledek ukládá do To. Jestliže je mzdová věta To uzamčena, hlásí makro chybu. Jestliže na některé To položce existuje ruční oprava, nebude změna uložena.
(To = To + From)

Vrací vždy true.
wcMode_WageSub ...
    ManId_From      : Longint;
    Month_From      : Integer;
    Year_From       : Integer;
    ManId_To        : Longint;
    Month_To        : Integer;
    Year_To         : Integer;
    GroupItem       : Word;
    Mask            : LongInt) : Byte
Odčítá položky mzdové věty From od mzdové věty To podle skupin a masky. Výsledek ukládá do To. Jestliže je mzdová věta To uzamčena, hlásí makro chybu. Jestliže na některé To položce existuje ruční oprava, nebude změna uložena.
(To = To - From)

Vrací vždy true.
wcMode_WageCopy ...
    ManId_From      : Longint;
    Month_From      : Integer;
    Year_From       : Integer;
    ManId_To        : Longint;
    Month_To        : Integer;
    Year_To         : Integer;
    GroupItem       : Word;
    Mask            : LongInt) : Byte
Kopíruje položky ze mzdové věty From do mzdové věty To podle skupin a masky. Jestliže je mzdová věta To uzamčena, hlásí makro chybu. Jestliže na některé To položce existuje ruční oprava, nebude změna uložena. Vrací true.
(To = From)

Vrací vždy True.
wcMode_SearchWage ...
    ManId           : Longint;
    Mod             : Word;
    ForMonth        : Integer;
    FromMonth       : Longint;
    ForYear         : Integer;
    FromYear        : Integer;
dim SearchMonth     : Word) : Byte
Pracuje stejně jako _SearchWage, ale nepřipraví spojení cache s pracovní mzdovou větou M ! To znamená, že nepřipraví práci s pracovní mzdovou větou M ! Jestliže chcete po této funkci používat pracovní mzdovou větou M, musíte jí spojit pomocí wcMode_Join_M!

Není-li nalezena žádná věta, vrací funkce false. Jinak true.
wcMode_FreeAll ) Uvolní celou mzdovou cache z paměti. Je vhodné používat po rozsáhlých změnách mzdových vět za několik období.

Pozor! Ruší (neuloží) všechny rozpracované změny. Proto před použitím udělejte Commit!
wcMode_BulkLoad_All ...
    Month           : Integer;
    Year            : Integer) : Integer
Podle přístupových práv aktuálního uživatele rychle nahraje mzdové věty pro zadané období (navíc se přidají sumární a delta věty). Zabývá se pouze těmi větami, které dosud v cache nejsou! Počet skutečně zpracovaných zaměstnanců vrací.
wcMode_BulkLoad_ByStream ...
    Month           : Integer;
    Year            : Integer;
dim F               : File) : Integer  
Podle streamu 'F' kde jsou identy zaměstnanců, rychle nahraje mzdové věty pro zadané období (navíc se přidají sumární a delta věty). Zabývá se pouze těmi větami, které dosud v cache nejsou! Počet skutečně zpracovaných zaměstnanců vrací.

Podívejte se na: Mzdy