( Mod : Word; ForMonth : Byte; FromMonth : Byte; ForYear : Word; FromYear : Word; dim SearchMonth : Word) : ByteTato 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.
_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.
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