Tema: Re: GPM algoritmas
Autorius: CurrentUser
Data: 2012-11-30 21:55:56
Net nebandziau ffilerio su notepadu atsidaryt niekad, bet ten ta koda 
atnarpliot (kas prie ko tai irgi laiko uzimtu, kad zmones norejo pasakyt).
Na, pastudijuosiu ta .frm, o siaip is tikruju, reikejo buhalterei tik 
d.santykiu (iskaitant lengvatas uz nepilnamecius vaikus) gpm'-a paskaiciuot, 
kad nereiktu kiekviena karta skaitliuku barskint :)
Aisku yra finvalda, bet jei reikia operatyviai pasakyt kiek gaysi i rankas 
prie priskaiciuoto atlyginimo, tai geriau toki iranki po ranka turet.
Zodziu susilipdziau exceliui ta formule. Pusmetrine gavosi, bet veikia. Gal 
veliau ir patobulinsiu.
Dabar reikai atvirkstini skaiciavima pasidaryt ir perdaryt and VBA.

"Laimis"  wrote in message news:k9auho$do7$1@trimpas.omnitel.net...

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...