Július Pastierik / 18. 08. 2010, 00:00
Pre používateľov z Českej republiky prinášame príjmové a výdavkové pokladničné doklady s automatickým vypisovaním sumy slovom v českom jazyku.
V predchádzajúcom dieli sme vám ukázali makrá a súbory príjmových a výdavkových pokladničných dokladov v slovenskom jazyku. Pravdaže, podobne, ako pri faktúrach, ani teraz sme nezabudli na používateľov z Českej republiky a pripravili sme pre nich osobitné verzie týchto dokladov.
Stiahnite si tlačivo príjmového a výdavkového pokladničného dokladu v českom jazyku.
Pre programátorov zároveň uvádzame makro pre prevod reálneho čísla na české slovo (makro pre kopírovanie tabuliek a tlač už nie, pretože je totožné pre obidva jazyky), pričom znovu upozorňujeme na to, že v makre sa testuje, či sa prevádza celá alebo desatinná časť a podľa toho sa skloňujú číslovky jedna a dva (jedna koruna – jeden halíř, dvě koruny – dva halíře):
function daj_slovne(cislo as Long, koruna as boolean) as string
dim rad as integer ' 1 – tisíc, 2 – milion, 3 – miliarda
dim slovne as string
dim analyza as long
slovne=""
if cislo=0 then
' Osobitne musíme ošetriť číslo „nula“
slovne="nula"
else
rad=0
do while cislo<>0
' z čísla vyberieme posledné tri číslice
analyza=cislo mod 1000
' ktoré prevedieme na text
slovne=slovne_stovky(analyza, rad)+slovne
' číslo zmenšíme o už spracovanú časť
cislo=int(cislo/1000)
' a pridáme text rádu, ktorý budeme spracovávať v ďalšom kroku cyklu
if cislo<>0 then
rad=rad+1
slovne=slovne_rady(cislo mod 1000, rad)+slovne
endif
loop
' Vymazanie prebytočných medzier na začiatku a konci slovného znenia
slovne=trim(slovne)
' Úprava prvého slova v prípade, že ide o sto, tisíc na Jednosto, Jedentisíc ...
if (analyza>=100) and (analyza<=199) then
' úprava výsledku pre stovky
slovne="jedno"+slovne ' Jednosto...
endif
if (analyza=1) and (rad=0) then
' úprava výsledku, ak sme prevádzali na text číslo jedna, lebo
' číslovka "jedna" sa skloňuje, t.j. vo financiách sa píše "jedna koruna, jeden halíř".
if koruna then
slovne="jedna"
else
slovne="jeden"
endif
endif
if (analyza=2) and (rad=0) then
' úprava výsledku, ak sme prevádzali na text číslo dva, lebo
' číslovka "dva" sa skloňuje, t.j. vo financiách sa píše "dvě koruny, dva halíře".
if koruna then
slovne="dvě"
else
slovne="dva"
endif
endif
if (analyza=1) and (rad>0) then
' úprava výsledku pre ostatné rády
select case rad
case 1, 2, 4, 6, 8
slovne="jeden"+slovne ' jedentisíc, jedenmilión, …
case 3, 5, 7, 9
slovne="jedna"+slovne ' jednamilarda, …
end select
endif
endif
' Prvé písmeno musí byť veľké – zmena
slovne=uCase(left(slovne,1))+right(slovne,len(slovne)-1)
daj_slovne=slovne
end function
function slovne_jedno_cislo(cislo, rad as integer) as string
' Pre stovky, kde sa skloňuje číslovka 2 použijeme hodnotu rad=3
dim pom_nazov as string
pom_nazov=""
select case cislo
case 1
' Číslovka „jedna“ sa pri rádoch tisíc, milión,... nepíše
if (rad=0) then
pom_nazov="jedna"
endif
case 2
' Dvojka sa skloňuje – dva, dvěstě, dvatisíce, dvamilióny, dvěmiliardy, …
select case rad
case 0, 1, 2 ' dva, dva tisíce, dva milióny
pom_nazov="dva"
case 3
pom_nazov="dvě" ' dvě stě, dvě miliardy
case 4
pom_nazov="dva" ' dva bilióny
case 5
pom_nazov="dvě" ' dvě biliardy
case 6
pom_nazov="dva" ' dva trilióny
case 7
pom_nazov="dvě" ' dvě triliardy
case 8
pom_nazov="dva" ' dva kvadrilióny
case 9
pom_nazov="dvě" ' dvě kvadriliardy
end select
case 3
pom_nazov="tři"
case 4
pom_nazov="čtyři"
case 5
pom_nazov="pět"
case 6
pom_nazov="šest"
case 7
pom_nazov="sedm"
case 8
pom_nazov="osm"
case 9
pom_nazov="devěť"
end select
slovne_jedno_cislo=pom_nazov
end function
function slovne_desiatky(jednotky, desiatky as integer) as string
dim pom_nazov, pom_jednotky as string
pom_nazov=""
select case desiatky
case 1
' desať – devätnásť
select case jednotky
case 0
pom_nazov="deset"
case 1
pom_nazov="jedenáct"
case 2
pom_nazov="dvanáct"
case 3
pom_nazov="třináct"
case 4
pom_nazov="čtrnáct"
case 5
pom_nazov="patnáct"
case 6
pom_nazov="šestnáct"
case 7
pom_nazov="sedmnáct"
case 8
pom_nazov="osmnáct"
case 9
pom_nazov="devatenáct"
end select
jednotky=0
case 2 to 4
' "cet" – dvacet až čtyřicet
pom_nazov=slovne_jedno_cislo(desiatky,0)+"cet"
case 5
pom_nazov="padesát"
case 6
pom_nazov="šedesát"
case 7, 8
' "desár" – sedmdesát, osmdesát
pom_nazov=slovne_jedno_cislo(desiatky,0)+"desát"
case else
' devatesát
pom_nazov="devadesát"
end select
pom_jednotky=slovne_jedno_cislo(jednotky,0)
if pom_jednotky<>"" then
' pri finančných číslach sa nepíše medzera
pom_nazov=pom_nazov+pom_jednotky
endif
slovne_desiatky=pom_nazov
end function
function slovne_stovky(cislo, rad as integer) as string
dim stovky, desiatky, jednotky as integer
dim pom_slovne, pom_stovky, pom_stovky_c as string
' z čísla vypreparujeme číslice na mieste jednotiek, desiatok a stoviek
jednotky=cislo mod 10
desiatky=int(cislo/10) mod 10
stovky=int(cislo/100)
pom_slovne=""
pom_stovky=""
' Najprv prevedieme na text jednotky a desiatky (číslo 0 až 99)
if desiatky=0 then
' iba jednotky (čísla 0 až 9)
if stovky=0 then
' celá trojica je číslo 0 až 9 a vtedy sa číslovka 1 a 2 skloňuje podľa rádu
pom_slovne= slovne_jedno_cislo(jednotky,rad)
else
' je to zložené číslo a vtedy sa číslovka 1 a 2 neskloňuje (základný tvar je pre rád 0)
pom_slovne= slovne_jedno_cislo(jednotky,0)
endif
else
' je to číslo od 10 do 99
pom_slovne=slovne_desiatky(jednotky, desiatky)
endif
' teraz k prevedenému dvojcifernému číslu pridáme text o stovkách
pom_stovky_c=slovne_jedno_cislo(stovky,3)
select case stovky
case 1
' Pri stovkách sa jednosto píše iba finančne
pom_stovky="sto"
case 2
' dvě stě
pom_stovky="stě"
case 3, 4
' tři sta, čtyři sta
pom_stovky="sta"
case 5 to 9
' pět set až devět set
pom_stovky="set"
end select
if pom_stovky_c<>"" then
' pri finančných číslach sa nepíše medzera
pom_stovky=pom_stovky_c+pom_stovky
endif
if pom_slovne="" then
pom_slovne=pom_stovky
else
' pri finančných číslach sa nepíše medzera
pom_slovne=pom_stovky+pom_slovne
endif
slovne_stovky=pom_slovne
end function
function slovne_rady(cislo, rad as integer) as string
' Texty o biliónoch, ... sú teoretické, pretože premenná typu LONG je maximálne 2.147.483.647, t.j.
' dvemiliardystoštyridsaťsedemmiliónovštyristoosemdesiattritisícšesťstoštyridsaťsedem
dim pom_kolko as string
dim predpona as string
predpona=""
pom_kolko=""
select case rad
case 1
select case cislo
case 1
predpona="tisíc"
case 2 to 4
predpona="tisíce"
case else
predpona="tisíc"
end select
predpona="tisíc"
case 2, 3
predpona="mi"
case 4, 5
predpona="bi"
case 6, 7
predpona="tri"
case 8, 9
predpona="kvadri"
end select
if rad=1 then ' tisíce
select case cislo
case 0
pom_kolko=""
case else
pom_kolko=predpona
end select
else
if (rad mod 2)=0 then ' „lióny“ – milión, bilióny, triliónov
select case cislo
case 0
pom_kolko=""
case 1
pom_kolko=predpona+"lión"
case 2 to 4
pom_kolko=predpona+"lióny"
case else
pom_kolko=predpona+"liónů"
end select
else ' „liardy“ – miliarda, biliardy, triliárd
select case cislo
case 0
pom_kolko=""
case 1
pom_kolko=predpona+"liarda"
case 2 to 4
pom_kolko=predpona+"liardy"
case else
pom_kolko=predpona+"liárd"
end select
endif
endif
slovne_rady=pom_kolko
end function
function Suma_Slovom (suma as string) as string
dim poms, cisla, znak as string
dim cela_cast, desatinna_cast as long
dim koruna, halire, koruna_text, halire_text as string
cisla="0123456789,." ' Definícia čísiel a desatinnej čiarky/bodky
' Vymazanie všetkých znakov okrem čísla a desatinnej čiarky/bodky z reťazca sumy
poms=""
for i=1 to len(suma)
znak=mid(suma,i,1)
if instr(cisla,znak)<>0 then poms=poms+znak
next i
' Vyhľadanie desatinnej čiarky
kde=Instr(poms,",")
if kde=0 then kde=Instr(poms,".")
cela_cast=0
desatinna_cast=0
if kde>0 then
cela_cast=val(left(poms,kde-1))
endif
kde=len(poms)-kde
if kde>0 then
desatinna_cast=val(right(poms,kde))
endif
' Prevod na text
' 0 Korun, 1 Koruna, 2-4 Koruny, 5 Korun
koruna_text=" Korun "
if cela_cast=1 then koruna_text=" Koruna "
if cela_cast>1 and cela_cast<5 then koruna_text=" Koruny "
' 0 halířů, 1 halíř, 2-4 halíře, 5 halířů
halire_text=" halířů"
if desatinna_cast=1 then halire_text=" halíř"
if desatinna_cast>1 and desatinna_cast<5 then halire_text=" halíře"
koruna=Daj_Slovne(cela_cast, true)
halire=Daj_Slovne(desatinna_cast, false)
Suma_Slovom=koruna+koruna_text+halire+halire_text
end function
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk