Tema: Re: GPM algoritmas
Autorius: Laimis
Data: 2012-11-30 21:39:52
CurrentUser rašė:
> Kazko tylu. Tikriausiai neaiskiai parasiau.
> Cia turima raumeny Gyv.pajamu mokescio skaiciavimo formule iskaitant
> lengvatas uz vaikus

GPM įstatymas, žinok, ne trijų puslapių dydžio ir bendras GPM 
apskaičiavimo algoritmas yra gana sudėtingas, nes GPM suma 
apskaičiuojama vertinant visus/įvairius apmokestinimo aspektus ir 
niuansus (kuriuos žino tik tas, kas tą GPM apskaičiuoja): įvairių rūšių 
pajamos, įvairiausios išlygos/sąlygos, lengvatos.
(Pvz.: gavai palikimą, pardavei (kada, kaip, už kiek) NT, automobilį, 
grybų pusę tonos ir t.t.?)

Jei reikia apskaičiuoti GPM tik darbo santykių pajamų kontekste, tai
ir tokiu atveju, reikia visų pirma pasikliauti buhalteriu, o ne 
o.programming...

O šiaip, GPM305/GPM308 yra tekstinis failas ir visas VBA kodas jame 
puikiai matyti.
Kaip ir tokie perliukai, kurie priverčia nusišypsoti:

                 objRE.Pattern = "^\d\d\d\d\d\d\d$"		'7
                 Set Matches = objRE.Execute(reiksme)
		For Each Match in Matches
     			if match.value=reiksme then log=true
		Next
		objRE.Pattern = "^\d\d\d\d\d\d\d\d\d$"		'9
                 Set Matches = objRE.Execute(reiksme)
		For Each Match in Matches
     			if match.value=reiksme then log=true
		Next
                 objRE.Pattern = "^\d\d\d\d\d\d\d\d\d\d$"	'10
                 Set Matches = objRE.Execute(reiksme)
		For Each Match in Matches
     			if match.value=reiksme then log=true
		Next
		objRE.Pattern = "^\d\d\d\d\d\d\d\d\d\d\d$"	'11
                 Set Matches = objRE.Execute(reiksme)
		For Each Match in Matches
     			if match.value=reiksme then log=true
		Next
		case "IBAN"
		objRE.Pattern = "^LT\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d$"	' LT + 18N
		Set Matches = objRE.Execute(reiksme)

Taip ir įsivaizduoju, kaip trindami akis bent kelis sykius iš eilės 
skaičiavo \d ir net komentarą pridėjo, kiek tų \d turi būti... :-)

Vietoje viso šio kvailoko šmoto buvo galima parašyti:

'objRE.Pattern = "^(\d{7}|\d{9}|\d{10}|\d{11})$"
objRE.Pattern = "^(\d{7}|\d{9,11})$"
if objRE.Test(reiksme) then
	log=true
end if

Na, nukrypau. Žodžiu: to VBA kodo — *daug*, kaip ir dera GPM algoritmo 
sudėtingumui ir jis gana kreivas ir painus. Todėl nieko gero be doro 
supratimo ką ir kam darai, nebus...