_SearchWage

(    Mod          : Word;
     ForMonth     : Byte;
     FromMonth    : Byte;
     ForYear      : Word;
     FromYear     : Word;
 dim SearchMonth  : Word) : Byte
			
Tato funkce se používá při přepočtech mzdy do minulých období. Při přepočtu se používá tzv historický trojúhelník (pro mod = 100):
12       ----------------------------------------------------------------------1213--1214--1215--- ...  max 1299
 |           |     |     |     |     |     |     |     |     |     |     |     |     |     |
 1           102---103---104---105---106---107---108---109---110---111---112---113---114---115--- ...
 |                 |     |     |     |     |     |     |     |     |     |     |     |     |
 2     -     -     203---204---205---206---207---208---209---210---211---212---213---214---215--- ...
 |                       |     |     |     |     |     |     |     |     |     |     |     |
 3     -     -     -     304---305---306---307---308---309---310---311---312---313---314---315--- ...
 |                             |     |     |     |     |     |     |     |     |     |     |
 4     -     -     -     -  ---405---406---407---408---409---410---411---412---413---414---415--- ...
 |                             |     |     |     |     |     |     |     |     |     |     |
 5     -     -     -     -     *     506---507---508---509---510---511---512---513---514---515--- ...
 |                             |
 |                             |-Linie zpětné opravy pro měsíc květen (5)
 |-Linie základních mzdových vět pro měsíce 1..12.

Příklady výpočtů:

 102 = 2 + ( 1 * 100) + (0 * 12) = z února do ledna stejného roku
 207 = 7 + ( 2 * 100) + (0 * 12) = z července do února stejného roku
1213 = 1 + (12 * 100) + (1 * 12) = z ledna do prosince minulého roku
1297 = 1 + (12 * 100) + (8 * 12) = z ledna do prosince před 8 lety
1298 = 2 + (12 * 100) + (8 * 12) = z února do prosince před 8 lety
1299 = 3 + (12 * 100) + (8 * 12) = z března do prosince před 8 lety (100 měsíců max)
 197 = 1 + ( 1 * 100) + (8 * 12) = z ledna do ledna před 8 lety
 198 = 2 + ( 1 * 100) + (8 * 12) = z února do ledna před 8 lety
 199 = 3 + ( 1 * 100) + (8 * 12) = z března do ledna před 8 lety (100 měsíců max)
Každý průsečík představuje jednu mzdovou větu a její číslo (systémový měsíc). Např. věta 305 je opravou věty 3. Jestliže tedy v měsíci číslo 5 provedete opravu až do měsíce 1, přepočtou se všechny mzdy znovu a vytvoří se opravné historické věty 105,205,305 a 405.

Do věty 520 se uloží tzv Delta neboli oprava vzniklá vzhledem k opravě do minula. Uvedený princip musí vykonávat příslušné makro.

Aby bylo možno jednoduše vyhledat poslední platnou mzdovou větu vzhledem k měsíci odkud je oprava provedena FromMonth pro měsíc kde je provedena ForMonth, je zde funkce _SearchWage.

Jestliže v našem příkladu jste v měsíci 6 a chcete najít poslední platnou větu v měsíci 2, zadáte pouze:
_SearchWage(100, 2, 6, _SysYear, _LastYear+1, W)
Nahraje mzdu s číslem 205 do paměti a číslo vrátí i v parametru SearchMonth. Není-li opravná věta nalezena, vrátí větu číslo 2. Není-li nalezena žádná věta, vrací funkce false. Jinak true. Vzhledem k tomu, že funkce používá mzdovou cache, vrací i věty, které jsou připravené k přidání do databáze (nové se změnou), ale zatím jsou pouze v paměti.

Rozsah pro parametr ForYear a FromYear je pro obecně používaný mod = 100 omezen na 8.

Způsob zpracování

Algoritmus pro výchozí číslo měsíce je:
SearchMonth = ForMonth * Mod + FromMonth + ((FromYear - ForYear) * 12)
Jestliže věta nebude nalezena (ať už v databázi nebo ve mzdové cache), sníží se SearchMonth o jedničku. Tak se pokračuje až do doby, kdy:
if(SearchMonth < ForMonth * Mod + FromMonth)
Pak se nastaví:
SearchMonth = ForMonth

Jestliže ani tato věta nebude nalezena (ať už v databázi nebo ve mzdové cache), vrací funkce false.

Poznámka:

Funkce pouze připraví práci s pracovní mzdovou větou M. Žádná data nebudou, až do požadavku na mzdovou položku (čtení nebo zápis) pomocí pracovní 'M' sady mzdových položek, nahrána. Při nahrání dat se použije mzdová cache a dojde k 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 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.

Funkce _SearchWage vrací stejné výsledky jako funkce _WageCache s modem wcMode_SearchWage, ale pro libovolného zaměstnance a ne pouze pro toho, který je aktuálně v paměti:

_WageCache(wcMode_SearchWage, ...

Podívejte se na: Mzdy