Tutorial Kali ini adalah membuat terbilang dengan crystal report.. Saya sih masih newbie di VB.NET saya hanya memanfaatkan parameter di crystal report saja..
Oke ayo kita mulai pertama buat design simple seperti gambar berikut :

Gambar Form1

Nah masing-masing kasih nama txtJumlah, txtTerbilang dan btnCetak.

Lalu tambahkan 1 buah form lagi misal form2 dan tambahkan tool CrystalReportViewer di dalam toolbox..
Gambar Form2
setelah itu tambahkan Crystal Report dengan newitem dan setel di propertiesnya Copy to Output dengan Copy Always...
Setting Properties
di dalam CRnya design saja sedemikian Rupa sehingga mirip seperti kuitansi dan tambahkan dua buah parameter di dalam Field Explorer seperti gambar :
Setting Parameter
Sudah itu lalu buat 1 Class Misal Terbilang dan Coding ini di Class Tersebut :
   1: Imports VB = Microsoft.VisualBasic
   2: Public Class Terbilang
   3:     Dim temp, angka As String
   4:     Function GetFigures(ByRef x As String) As String
   5:         Try
   6:             Dim satu(10) As String
   7:             Dim dua(10) As String
   8:             Dim tiga(10) As String
   9:             Dim ratus As String
  10:             Dim ribu As String
  11:             Dim juta As String
  12:             Dim miliar As String
  13:             Dim triliun As String
  14:             satu(0) = "" : satu(1) = "satu" : satu(2) = "dua" : satu(3) = "tiga" : satu(4) = "empat" : satu(5) = "lima" : satu(6) = "enam" : satu(7) = "tujuh" : satu(8) = "delapan" : satu(9) = "sembilan"
  15:             dua(0) = "sepuluh" : dua(1) = "sebelas" : dua(2) = "dua belas" : dua(3) = "tiga belas" : dua(4) = "empat belas" : dua(5) = "lima belas" : dua(6) = "enam belas" : dua(7) = "tujuh belas" : dua(8) = "delapan belas" : dua(9) = "sembilan belas"
  16:             tiga(2) = "dua puluh " : tiga(3) = "tiga puluh " : tiga(4) = "empat puluh " : tiga(5) = "lima puluh " : tiga(6) = "enam puluh " : tiga(7) = "tujuh puluh " : tiga(8) = "delapan puluh " : tiga(9) = "sembilan puluh "
  17:             ratus = " ratus " : ribu = " ribu " : juta = " juta "
  18:             miliar = " miliar " : triliun = " triliun "
  19:  
  20:             temp = CStr(Val(x))
  21:             Dim nilai As String
  22:             nilai = Len(temp)
  23:             Select Case nilai
  24:                 Case 1
  25:                     angka = satu(CInt(x))
  26:                 Case 2
  27:                     If CDbl(VB.Left(temp, 1)) > 1 Then  ' dari 20-99
  28:                         angka = tiga(CInt(VB.Left(temp, 1))) & satu(CInt(VB.Right(temp, 1)))
  29:                     ElseIf CDbl(VB.Left(temp, 1)) = 1 Then ' dari 11-19
  30:                         angka = dua(CInt(VB.Right(temp, 1)))
  31:                     Else ' dari 20 to 90 selisih 10
  32:                         angka = GetFigures(CStr(Int(CDbl(VB.Right(temp, 1)))))
  33:                     End If
  34:                 Case 3
  35:                     If (VB.Left(temp, 1)) > 1 Then
  36:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus ' dari 200-999
  37:                         angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 2)))))
  38:                     ElseIf Int(CDbl(VB.Left(temp, 1))) = 1 Then
  39:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus ' dari 100-199
  40:                         angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 2)))))
  41:                     Else
  42:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus ' dari 200-900
  43:                     End If
  44:                 Case 4
  45:                     If (VB.Left(temp, 1)) > 1 Then
  46:                         angka = satu(CInt(VB.Left(temp, 1))) & ribu ' dari 200-999
  47:                         angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 3)))))
  48:                     ElseIf Int(CDbl(VB.Left(temp, 1))) = 1 Then
  49:                         angka = satu(CInt(VB.Left(temp, 1))) & ribu ' dari 100-199
  50:                         angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 3)))))
  51:                     Else
  52:                         angka = satu(CInt(VB.Left(temp, 1))) & ribu ' dari 200-900
  53:                     End If
  54:                 Case 5
  55:                     If (VB.Left(temp, 1)) > 1 Then
  56:                         If (VB.Mid(temp, 2, 1)) = 0 Then
  57:                             angka = tiga(CInt(VB.Left(temp, 1))) & ribu
  58:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 3)))))
  59:                         Else
  60:                             angka = tiga(CInt(VB.Left(temp, 1)))
  61:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 4)))))
  62:                         End If
  63:                     ElseIf Int(CDbl(VB.Left(temp, 1))) = 1 Then
  64:                         If (VB.Mid(temp, 2, 1)) = 0 Then
  65:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & ribu
  66:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 4)))))
  67:                         Else
  68:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & ribu
  69:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 3)))))
  70:                         End If
  71:                     Else
  72:                         angka = tiga(CInt(VB.Left(temp, 1))) & ribu
  73:                     End If
  74:                 Case 6
  75:                     angka = satu(CInt(VB.Left(temp, 1))) & ratus
  76:                     angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 5)))))
  77:                 Case 7
  78:                     angka = satu(CInt(VB.Left(temp, 1))) & juta
  79:                     angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 6)))))
  80:  
  81:                 Case 8
  82:                     If (VB.Left(temp, 1)) > 1 Then
  83:                         If (VB.Mid(temp, 2, 1)) = 0 Then
  84:                             angka = tiga(CInt(VB.Left(temp, 1))) & juta
  85:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 6)))))
  86:                         Else
  87:                             angka = tiga(CInt(VB.Left(temp, 1)))
  88:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 7)))))
  89:                         End If
  90:                     ElseIf Int(CDbl(VB.Left(temp, 1))) = 1 Then
  91:                         If (VB.Mid(temp, 2, 1)) = 0 Then
  92:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & juta
  93:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 7)))))
  94:                         Else
  95:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & juta
  96:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 6)))))
  97:                         End If
  98:                     Else
  99:                         angka = tiga(CInt(VB.Left(temp, 1))) & ribu
 100:                     End If
 101:                 Case 9
 102:                     angka = satu(CInt(VB.Left(temp, 1))) & ratus & juta
 103:                     angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 8)))))
 104:                 Case 10
 105:                     angka = satu(CInt(VB.Left(temp, 1))) & miliar
 106:                     angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 9)))))
 107:                 Case 11
 108:                     If (VB.Left(temp, 1)) > 1 Then
 109:                         If (VB.Mid(temp, 2, 1)) = 0 Then
 110:                             angka = tiga(CInt(VB.Left(temp, 1))) & miliar
 111:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 9)))))
 112:                         Else
 113:                             angka = tiga(CInt(VB.Left(temp, 1)))
 114:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 10)))))
 115:                         End If
 116:                     ElseIf Int(CDbl(VB.Left(temp, 1))) = 1 Then
 117:                         If (VB.Mid(temp, 2, 1)) = 0 Then
 118:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & miliar
 119:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 10)))))
 120:                         Else
 121:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & miliar
 122:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 9)))))
 123:                         End If
 124:                     Else
 125:                         angka = tiga(CInt(VB.Left(temp, 1))) & ribu
 126:                     End If
 127:                 Case 12
 128:                     If (VB.Mid(temp, 2, 1)) = 0 Then
 129:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus & miliar
 130:                     Else
 131:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus
 132:                         angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 11)))))
 133:                     End If
 134:                 Case 13
 135:                     angka = satu(CInt(VB.Left(temp, 1))) & triliun
 136:                     angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 12)))))
 137:                 Case 14
 138:                     If (VB.Left(temp, 1)) > 1 Then
 139:                         If (VB.Mid(temp, 2, 1)) = 0 Then
 140:                             angka = tiga(CInt(VB.Left(temp, 1))) & triliun
 141:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 13)))))
 142:                         Else
 143:                             angka = tiga(CInt(VB.Left(temp, 1)))
 144:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 14)))))
 145:                         End If
 146:                     ElseIf Int(CDbl(VB.Left(temp, 1))) = 1 Then
 147:                         If (VB.Mid(temp, 2, 1)) = 0 Then
 148:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & triliun
 149:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 13)))))
 150:                         Else
 151:                             angka = dua(CInt(VB.Mid(temp, 2, 1))) & triliun
 152:                             angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 3, 12)))))
 153:                         End If
 154:                     End If
 155:                 Case 15
 156:                     If (VB.Mid(temp, 2, 1)) = 0 Then
 157:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus & triliun
 158:                     Else
 159:                         angka = satu(CInt(VB.Left(temp, 1))) & ratus
 160:                         angka = angka & GetFigures(CStr(Int(CDbl(VB.Mid(temp, 2, 14)))))
 161:                     End If
 162:             End Select
 163:         Catch
 164:             MessageBox.Show("Terdapat kesalahan cek lagi angka yang anda inputkan", "Kesalahan", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
 165:         End Try
 166:         GetFigures = Replace(angka, "satu ratus", "seratus")
 167:         GetFigures = Replace(GetFigures, "satu ribu", "seribu")
 168:     End Function
 169: End Class

Lalu coding ini di Form1:


   1: Imports CrystalDecisions.Shared
   2: Imports CrystalDecisions.CrystalReports.Engine
   3: Public Class Form1
   4:  
   5:     Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtJumlah.TextChanged
   6:         Dim obj As New Terbilang
   7:         txtTerbilang.Text = obj.GetFigures(txtJumlah.Text) & " rupiah"
   8:     End Sub
   9:  
  10:     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  11:         Dim cryRpt As New ReportDocument
  12:         cryRpt.Load(Application.StartupPath & "\CrystalReport1.rpt")
  13:  
  14:         ' Declare the parameter related objects.
  15:         Dim crParameterDiscreteValue As ParameterDiscreteValue
  16:         Dim crParameterFieldDefinitions As ParameterFieldDefinitions
  17:         Dim crParameterFieldLocation As ParameterFieldDefinition
  18:         Dim crParameterValues As ParameterValues
  19:  
  20:         ' Mengambil collection parameter dari report
  21:         crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields
  22:  
  23:         'Setting value untuk setiap parameter yang digunakan
  24:         crParameterFieldLocation = crParameterFieldDefinitions.Item("jumlah")
  25:         crParameterValues = crParameterFieldLocation.CurrentValues
  26:         crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
  27:         crParameterDiscreteValue.Value = txtJumlah.Text
  28:         crParameterValues.Add(crParameterDiscreteValue)
  29:         crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
  30:  
  31:         crParameterFieldLocation = crParameterFieldDefinitions.Item("terbilang")
  32:         crParameterValues = crParameterFieldLocation.CurrentValues
  33:         crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
  34:         crParameterDiscreteValue.Value = txtTerbilang.Text
  35:         crParameterValues.Add(crParameterDiscreteValue)
  36:         crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
  37:  
  38:         ' Tampilkan report pada viewer
  39:         Form2.Show()
  40:         Form2.CrystalReportViewer1.ReportSource = cryRpt
  41:     End Sub
  42: End Class


Untuk source code nya bisa di download disini

1 Komentar

  1. Christoven // Thursday, January 20, 2011 at 7:10:00 PM GMT+7  

    admin,tolong bantuin gw donk.. gw udah coba download dan pake source code yg admin ajarin.. terbilangnya muncul.. tapi masih ada masalah..
    contohnya : klo gw ketik 100000 harusnya kan "seratus ribu rupiah" tapi yg muncul cuma "seratus rupiah" klo ketik 120000 baru betul.

    dan 1 lagi,klo gw ketik 120000000,yg tampil malah "seratus juta dua puluh juta"

    tolong di carikan solusinya plsss..
    dibalas yah.. tq