[ dejanmaksimovic1976 @ 27.08.2008. 18:13 ] @
Naime, potrebno mi je da mi cena koja je konacna i koja se nalazi kao suma odredjenih kolona bude ispisana slovima u formi ili u raportu. |
[ dejanmaksimovic1976 @ 27.08.2008. 18:13 ] @
[ Getsbi @ 27.08.2008. 18:36 ] @
Ima funkcija postavljena na forumu. Pogledaj bazu znanja: http://www.elitesecurity.org/t52046-0#385077
Korišćenje polja za pretragu foruma bi ti dobro došla. [ dejanmaksimovic1976 @ 27.08.2008. 23:13 ] @
Getsbi nije mi bas najjasnije sta se desava i kad treba da pozovem tu funkciju i gde ce da je ispise. Iskopirao sam kod napravio modul ali nista se ne desava.
[ Catch 22 @ 27.08.2008. 23:58 ] @
Primer:
-Funkcija za ispis broja slovima se zove SLOVIMA -Na reportu imaš neki unbound text box koji se zove TxtSLV i u kome će se pojavljivati ispis broja slovima -Takođe imaš i text box koji se zove SubTotal2 u kome se izračunava nekakav međuzbir, tj. tvoj broj koji želiš da prikažeš slovima... Negde u kodu pozivaš ispis rezultata iz SubTotal2 slovima u TxtSLV: Code: Me.TxtSLV = "Slovima =" & SLOVIMA(Me.SubTotal2) [ Getsbi @ 28.08.2008. 06:21 ] @
Evo još jedan način. Iskopiraj tu funkciju u jedan objekat tipa Modules, kako bi bila javna i dostupna za više izveštaja ili formi. Recimo ovako:
Public Function slovima(broj As Currency) As String.......End Function Snimi i izkompajliraj. Ovo je najčešće potrebno na izveštaju, a možda i na fomri. Recimo da na izveštaju imaš neki texst box koji se zove "Ukupno" (Name = Ukupno) i koji želiš da napišeš slovima. Ispod tog text boxa napraviš novi text box, čije je ime nebitno za ovaj deo priče i u Control Source tog novog text boxa napišeš: =Slovima(Ukupno). Znači u zagradi navedeš kao parametar eksplicitan naziv tvog text boxa koji sadrži brojčanu vrednost za iskazivanje slovima. [ PR.VB.OR.00.MS.CR.01 @ 28.08.2008. 07:56 ] @
Mogu ti pomoci na ovaj nacin, imam uradjenu funkciju. E ovako ovo stavi u Modul (modPretvaranjebrojauTekst)
Code: '**************************************************************************** ' FUNKCIJA ZA PRETVARANJE BROJA U TEKST '**************************************************************************** Private varCifreJedinice As Variant Private varCifreDoDvadeset As Variant Private varCifreDesetice As Variant Private varCifreStotine As Variant Public Function PretvoriBrojUTekst(ByVal dblUlazniBroj As Double) As String Dim strCifra As String Dim intDuzinaCifre As Integer Dim intBrojTrojki As Integer Dim intOstatak As Integer Dim intBrojac As Integer Dim strMINUS As String varCifreJedinice = Array("", "jedan", "dva", "tri", "èetiri", "pet", _ "šest", "sedam", "osam", "devet") varCifreDoDvadeset = Array("deset", "jedanaest", "dvanaest", "trinaest", _ "èetrnaest", "petnaest", "šesnaest", "sedamnaest", "osamnaest", "devetnaest") varCifreDesetice = Array("", "", "dvadeset", "trideset", "èetrdeset", _ "pedeset", "šezdeset", "sedamdeset", "osamdeset", "devedeset") varCifreStotine = Array("", "sto", "dvesto", "tristo", "èetirsto", "petsto", _ "šesto", "sedamsto", "osamsto", "devetsto") If dblUlazniBroj < 0 Then strMINUS = "-" dblUlazniBroj = Abs(dblUlazniBroj) End If PretvoriBrojUTekst = "" strCifra = Format(dblUlazniBroj, "###################.00") strCifra = Left(strCifra, Len(strCifra) - 3) intDuzinaCifre = Len(strCifra) intOstatak = intDuzinaCifre Mod 3 intBrojTrojki = (intDuzinaCifre / 3) - ((intDuzinaCifre Mod 3) / 3) If dblUlazniBroj < 1000000000000# Then If intOstatak > 0 Then PretvoriBrojUTekst = OdrediTekstPodcifre(Left(strCifra, intOstatak), intBrojTrojki) strCifra = Right(strCifra, Len(strCifra) - intOstatak) End If For intBrojac = intBrojTrojki To 0 Step -1 PretvoriBrojUTekst = PretvoriBrojUTekst & OdrediTekstPodcifre(Left(strCifra, 3), intBrojac - 1) If Len(strCifra) > 3 Then strCifra = Right(strCifra, Len(strCifra) - 3) End If Next Else End If strCifra = Format(dblUlazniBroj, "###################.00") strCifra = Right(strCifra, 2) If Len(PretvoriBrojUTekst) > 0 Then 'PretvoriBrojUTekst = UCase(Left(PretvoriBrojUTekst, 1)) & Right(PretvoriBrojUTekst, Len(PretvoriBrojUTekst) - 1) If (Right(PretvoriBrojUTekst, 5) = "Jedan") Or (Right(PretvoriBrojUTekst, 5) = "jedan") Then PretvoriBrojUTekst = PretvoriBrojUTekst & " " & strCifra & "/100." Else PretvoriBrojUTekst = PretvoriBrojUTekst & " " & strCifra & "/100." End If End If End Function Private Function OdrediTekstPodcifre(ByVal strPodcifra As String, _ intVelicina As Integer) As String Dim strTekst As String OdrediTekstPodcifre = "" If Val(strPodcifra) <> 0 Then strTekst = OdrediTekst(strPodcifra) Select Case intVelicina Case 0 OdrediTekstPodcifre = strTekst Case 1 'Slucaj za 11000,12000,13000,14000 If strPodcifra = "11" Or strPodcifra = "12" Or strPodcifra = "13" Or strPodcifra = "14" Then OdrediTekstPodcifre = strTekst OdrediTekstPodcifre = OdrediTekstPodcifre & "hiljada" Else 'korekcija za slucaj za 2000, 22000, 32000 .... If Right(strPodcifra, 1) = "2" Then OdrediTekstPodcifre = Left(strTekst, Len(strTekst) - 1) & "e" Else OdrediTekstPodcifre = strTekst End If Select Case Right(strPodcifra, 1) 'Slucaj za 21000, 31000 .... Case "1" OdrediTekstPodcifre = Left(OdrediTekstPodcifre, Len(OdrediTekstPodcifre) - 2) & "nahiljada" Case "2", "3", "4" OdrediTekstPodcifre = OdrediTekstPodcifre & "hiljade" Case Else OdrediTekstPodcifre = OdrediTekstPodcifre & "hiljada" End Select 'Slucaj za 1000 If Val(strPodcifra) = 1 Then OdrediTekstPodcifre = "hiljadu" End If End If Case 2 OdrediTekstPodcifre = strTekst & "miliona" If Val(strPodcifra) = 1 Then OdrediTekstPodcifre = "milion" End If Case 3 If Val(strPodcifra) = 1 Then OdrediTekstPodcifre = "milijardu" Exit Function End If If Val(Right(strPodcifra, 2)) > 5 And Val(Right(strPodcifra, 2)) < 21 Then OdrediTekstPodcifre = strTekst & "milijardi" Exit Function End If If Right(strPodcifra, 1) = "2" Then OdrediTekstPodcifre = Left(strTekst, Len(strTekst) - 1) & "e" Else OdrediTekstPodcifre = strTekst End If Select Case Right(strPodcifra, 1) Case "1" OdrediTekstPodcifre = Left(OdrediTekstPodcifre, Len(OdrediTekstPodcifre) - 2) & "namilijarda" Case "2", "3", "4" OdrediTekstPodcifre = OdrediTekstPodcifre & "milijarde" Case Else OdrediTekstPodcifre = OdrediTekstPodcifre & "milijardi" End Select If Val(strPodcifra) = 1 Then OdrediTekstPodcifre = "milijardu" End If End Select End If End Function Private Function OdrediTekstDoSto(strPodcifra As String) As String OdrediTekstDoSto = "" Select Case Val(strPodcifra) Case 1 To 9 OdrediTekstDoSto = varCifreJedinice(Val(strPodcifra)) Case 10 To 19 OdrediTekstDoSto = varCifreDoDvadeset(Val(strPodcifra) - 10) Case 20 To 99 OdrediTekstDoSto = varCifreDesetice(Val(Left(strPodcifra, 1))) & varCifreJedinice(Val(Right(strPodcifra, 1))) End Select End Function Private Function OdrediTekst(strPodcifra As String) As String OdrediTekst = "" Select Case Val(strPodcifra) Case 1 To 99 OdrediTekst = OdrediTekstDoSto(Val(strPodcifra)) Case 100 To 999 OdrediTekst = varCifreStotine(Val(Left(strPodcifra, 1))) & OdrediTekstDoSto(Val(Right(strPodcifra, 2))) End Select End Function Znaci onda u formi pises kod npr. ako imas Text1 u kome upisujes broj i Label1 u kom ti treba ispisati rijecima pisi ovaj kod: Code: Label1.Caption = PretvoriBrojUTekst(Text1.Text) Mislim da ce ti ovo pomoci, mozes malo prouciti kod i samo pici napred. Pozdrav!!! [ goranvuc @ 28.08.2008. 09:21 ] @
Bilo bi lepo (a i kulturno) da navedes originalnog autora ;)
To je kao neki red u ovom poslu. [ PR.VB.OR.00.MS.CR.01 @ 28.08.2008. 09:40 ] @
@goranvuc
Znam da je fer, ali ovo vec imam oko godinu dana i stvarno ne znam ko je autor, skinuo sam sa neta. Nisam mislio nista lose, niti sam napisao da sam ja ovo uradio, ali da znam ko je NARAVNO da bi napisao. Pozdrav [ goranvuc @ 28.08.2008. 10:10 ] @
Pa ja sam to objavio na ovom forumu 18.08.2006. (na zalost temu je neko obrisao, ili se izgubila u jednom od rusenja baze ES-a, ili ja ne mogu da je nadjem) tako da ne mogu da te uputim na originalan post.
Eto sta je internet, cim nesto objavis to postaje "drustvena svojina" ![]() [ PR.VB.OR.00.MS.CR.01 @ 28.08.2008. 10:39 ] @
@goranvuc
Naravno, i ja bi sigurno tako reagovao kao ti, ali ti kazem stvarni nisam znao. ALI SADA ZNAM ![]() [ Getsbi @ 28.08.2008. 11:14 ] @
Pošto smo saznali da je kolega goranvuc autor, a i da se ne bi ponovo zagubila dodaću tu funkciju u Top temu "Access Baza Znanja". Ta tema je inače otključana i možete slobodno da dodate svoja rešenja koja smatrate da su opšteg karaktera i mogu drugima pomoći.
[ dejanmaksimovic1976 @ 29.08.2008. 22:17 ] @
Posto mi pokazuje da je tema zakljucana a ja idalje nemogu da se snadjem da posaljem ja malu bazu za primer pa nek neko to ubudzi da vidim gde gresim.
[ miso.miso @ 30.08.2008. 00:01 ] @
Promeni naziv Modula da se ne zove SLOVIMA stavi bilo sta drugo.
evo kod na formi Code: Private Sub SubTotal2_LostFocus() Me.TxtSLV = SLOVIMA(Me.SubTotal2) End Sub u SubTotal2 unesi broj i ispisace ga slovima Poz [ dejanmaksimovic1976 @ 30.08.2008. 15:29 ] @
Izbacuje mi gresku:
Compile error: Expected variable or procedure, not module. [ Getsbi @ 30.08.2008. 16:48 ] @
U prvo polje ukucaj broj sa zarezom ispred decimala. na enter ćeš dobiti ispis slovima u drugom text boxu.
Savet: U VBA uvek drži ključeno Option explicit. Tako ćeš imati manje neugodnosti kad ne deklarišeš varijable. Bićeš upozoren već kod kompajliranja. [ Catch 22 @ 30.08.2008. 16:54 ] @
Evo ti nazad tvoja baza sa urađenim primerom.
Ako ti se pojavljuje u vrhu prozora Security Warning kao na slici, zatvori otvorenu formu, klikni na Options i potvrdi kao na slici dole [ dejanmaksimovic1976 @ 30.08.2008. 17:06 ] @
Thanks ljudi. Samo da jos skockam sve pa saljem na forum sta sam napravio komplet. Moyda nekome posluzi.
[ maliradoznalac @ 22.03.2009. 23:15 ] @
jel moze mala pomoc oko implementacije ovog koda ali na report
tacnije, u pitanju je subreport u kojem se nalazi rekapitulacija sa fakture (osnovica, popust, pdv, ukupno za naplatu...) probao sam da stavim na OnOpen Code: Me.txt_slovima = "Slovima: " & SLOVIMA(Me.SumOfukupnosapdv) ali mi izbaci gresku Run-time error '2427' You entered an expression that has no value u stane izvrsenje na Code: If broj = 0 Then rez = "nula" odnosno stane na prvom redu koda nakon zaustavljanja debuger-a uopste ne prikaze subreport da li je OnOpen los izbor? da li nesto nisam definisao kako treba?? Kod je kopiran iz primera koji je okacio Catch22 koji radi ali na formi. okacio bih celu bazu ali je 24MB velika, pa cu probati da opsem sve sto je bitno za razumevanje problema [ Catch 22 @ 22.03.2009. 23:51 ] @
^ Probaj da staviš umesto OnOpen da procedura iz koje pozivaš funkciju SLOVIMA bude OnFormat... sad sam gledao neke svoje primere za izveštaje fakture / profakture i to kod mene stoji u sekciji OnFormat...
Mada ne verujem da ćeš time rešiti problem. Možda nisi uključio potrebne reference u VBA? Kompajlirao si kod i snimio novo stanje pre testiranja? Evo kako to izgleda u jednom primeru koji ja koristim u nekoj aplikaciji Code: Private Sub ReportFooter_Format(Cancel As Integer, FormatCount As Integer) Dim strLine1 As String, strLine2 As String, _ strSLOVIMA As String, strZAUPLATU As String strLine1 = Forms!PRODAJA.PRODAJA_POREZ1_Label.Caption strLine2 = Forms!PRODAJA.PRODAJA_POREZ1 & "%" Me.lblPromPorez = strLine1 & " " & strLine2 Me.RabatTotal.Visible = Forms!PRODAJA.PRODAJA_RABAT > 0 Me.LblRabat.Visible = Me.RabatTotal.Visible Me.PosPorez.Visible = Forms![PRODAJA].PRODAJA_POREZ2 > 0 Me.lblPosPorez.Visible = Me.PosPorez.Visible If Forms![PRODAJA].[PRODAJA_BROJ_IZJAVE] <> "" Then strZAUPLATU = Format(Me!SubTotal2, "Standard") strSLOVIMA = SLOVIMA(Me.SubTotal2) Me!OsnovBezPoreza.Visible = True Me!Uslovi.Visible = False Else strZAUPLATU = Format(Me.TotalPorez, "Standard") strSLOVIMA = SLOVIMA(Me!TotalPorez) End If Me.TxtZAUPLATU = strZAUPLATU Me.TxtSLOVIMA = "Slovima =" & strSLOVIMA End Sub [ maliradoznalac @ 23.03.2009. 06:44 ] @
jeeee
ne znam kako i zasto ali je proradilo :-) ubacio sam u report footer od subreporta, i stavio na onFormat isti kod i proradilo hvala Catch22 [ Getsbi @ 23.03.2009. 06:47 ] @
A zašto VBA kodom? Dovoljno je što je funkcija napisana u njemu.
Na reportu postaviš nevezanu kontrolu (recimo Text68) u Control Source te kontrole napišeš = Slovima([TvojeNumerikPolje]) [ maliradoznalac @ 23.03.2009. 07:38 ] @
e ovo je tek jednostavno. Tnx
nego imam jos jedno pitanje u vezi ovog koda kako da napravim ispravan encoding da mi ne pise kuke i motike vec lepo nasa slova. š i ž nisu problem ali č, ć i đ nece da se lepo prikazu [ Getsbi @ 23.03.2009. 08:37 ] @
Ukucaj u polje pretraga pojam: naša slova. Naći ćeš rešenje. Trtko je par puta ostavio i parče koda za konvertovanje.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|