| 
 | 
 
  
 
จัดโค้ดเบาๆในการคำนวณภาษีมูลค่าเพิ่ม ทั้งแบบรวม (Vat Include) และแบบแยก (Vat Exclude) พร้อมกับนำเสนอเทคนิคในการเขียนโค้ด เพื่อดักจับความผิดพลาด (Trap Error) ก่อนที่จะนำค่าไปทำการคำนวณผล ... 
 
มาดูโค้ดฉบับเต็มกันเถอะ ...- Public Class frmVatCalc
 
  
-     Private Sub frmVatCalc_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
 
 -         With cmbVatType
 
 -             .Items.Add("ไม่คิดภาษี")
 
 -             .Items.Add("รวมภาษี")
 
 -             .Items.Add("แยกภาษี")
 
 -             .SelectedIndex = 1
 
 -         End With
 
 -         txtVatRate.Text = 7
 
 -         txtVatRate.MaxLength = 2
 
 -         '// Initial Value.
 
 -         txtPrice.Text = 100
 
 -         txtPrice.MaxLength = 9
 
 -     End Sub
 
  
-     Private Sub btnVatCal_Click(sender As System.Object, e As System.EventArgs) Handles btnVatCal.Click
 
 -         '// ตรวจสอบหากเป็นค่าว่าง ให้กำหนดตัวเลขลงแทน ป้องกันการเกิด ERROR หรือคำนวณผิดพลาด
 
 -         If txtVatRate.Text.Trim.Length = 0 Or txtVatRate.Text.Trim = "" Then txtVatRate.Text = 7
 
 -         If txtPrice.Text.Trim.Length = 0 Or txtPrice.Text.Trim = "" Then txtPrice.Text = 100
 
  
-         '// ตรวจสอบ Vat Type ... 0 = ไม่คิดภาษี, 1 = รวมภาษี, 2 = แยกภาษี
 
 -         Select Case cmbVatType.SelectedIndex
 
 -             Case 0
 
 -                 txtTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")
 
 -                 txtVat.Text = 0
 
 -                 txtNetTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")
 
  
-             Case 1
 
 -                 txtTotal.Text = Format(CDbl(txtPrice.Text) / 1.07, "#,##0.00")
 
 -                 '// คำนวณหาราคาสินค้าจริงก่อน CDbl(txtPrice.Text) / 1.07 แล้วค่อยนำไปลบออกจากสินค้าราคาเต็ม ก็จะได้ภาษีรวมใน
 
 -                 '// *** การหารมี Priority สูงกว่าการลบ ก็เลยทำ CDbl(txtPrice.Text) / 1.07 ก่อน โดยไม่ต้องใส่วงเล็บก็ได้ ***
 
 -                 '// เช่น ราคารวม VAT = 100 ... จะได้ราคาขายจริง 93.46 ลบราคาสินค้า 100 ก็จะได้ภาษี 6.54 บาท
 
 -                 txtVat.Text = Format(CDbl(txtPrice.Text) - CDbl(txtPrice.Text) / 1.07, "#,##0.00")
 
 -                 txtNetTotal.Text = Format(CDbl(txtTotal.Text) + CDbl(txtVat.Text), "#,##0.00")
 
 -                 '// หรือ txtNetTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")
 
  
-             Case 2
 
 -                 txtTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")
 
 -                 '// หรือใช้บัญญัติไตรยางค์ ... ราคาสินค้า * ภาษี / 100
 
 -                 txtNetTotal.Text = Format(CDbl(txtPrice.Text) * 1.07, "#,##0.00")
 
 -                 txtVat.Text = Format(CDbl(txtNetTotal.Text) - CDbl(txtTotal.Text), "#,##0.00")
 
 -         End Select
 
 -     End Sub
 
  
-     Private Sub txtPrice_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress
 
 -         If e.KeyChar = Chr(13) Then
 
 -             e.Handled = True
 
 -             SendKeys.Send("{TAB}")
 
 -         Else
 
 -             '// ตรวจสอบ Handle หากถูกรีเทิร์นค่า False กลับมา แสดงว่ายอมรับการกดคีย์ตัวเลข และจุดทศนิยมได้เพียงหลักเดียว
 
 -             e.Handled = CheckCurrency(Asc(e.KeyChar), txtPrice.Text)
 
 -         End If
 
 -     End Sub
 
  
-     Private Sub txtVatRate_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtVatRate.KeyPress
 
 -         If Asc(e.KeyChar) = Keys.Enter Then
 
 -             e.Handled = True
 
 -             SendKeys.Send("{TAB}")
 
 -         Else
 
 -             '// ตรวจสอบ Handle หากถูกรีเทิร์นค่า False กลับมา แสดงว่ายอมรับการกดคีย์ตัวเลข
 
 -             e.Handled = CheckDigitOnly(Asc(e.KeyChar))
 
 -         End If
 
 -     End Sub
 
  
-     '// ตรวจสอบการหลุดโฟกัส (ย้ายเคอร์เซอร์ไป Control ตัวอื่น) หากเป็นค่าว่าให้กำหนดค่าใหม่ เพื่อป้องกัน Error
 
 -     Private Sub txtVatRate_LostFocus(sender As Object, e As System.EventArgs) Handles txtVatRate.LostFocus
 
 -         If txtVatRate.Text.Trim.Length = 0 Or txtVatRate.Text.Trim = "" Then txtVatRate.Text = 7
 
 -     End Sub
 
  
-     '// ตรวจสอบการหลุดโฟกัส (ย้ายเคอร์เซอร์ไป Control ตัวอื่น) หากเป็นค่าว่าให้กำหนดค่าใหม่ เพื่อป้องกัน Error
 
 -     Private Sub txtPrice_LostFocus(sender As Object, e As System.EventArgs) Handles txtPrice.LostFocus
 
 -         If txtPrice.Text.Trim.Length = 0 Or txtPrice.Text.Trim = "" Then txtPrice.Text = 100
 
 -     End Sub
 
  
-     ' / ----------------------------- F U N C T I O N -------------------------------
 
 -     ' / --------------------------------------------------------------------------------
 
 -     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขได้เท่านั้น
 
 -     Function CheckDigitOnly(ByVal index As Integer) As Boolean
 
 -         Select Case index
 
 -             Case 48 To 57 ' เลข 0 - 9
 
 -                 CheckDigitOnly = False
 
 -             Case 8, 13 ' Backspace = 8, Enter = 13
 
 -                 CheckDigitOnly = False
 
 -             Case Else
 
 -                 CheckDigitOnly = True
 
 -         End Select
 
 -     End Function
 
  
-     ' / --------------------------------------------------------------------------------
 
 -     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขและทศนิยมได้ตัวเดียวเท่านั้น
 
 -     Function CheckCurrency(index As Integer, tmpStr As String) As Boolean
 
 -         CheckCurrency = False
 
 -         Select Case index
 
 -             Case 48 To 57 ' เลข 0 - 9
 
 -                 ' Allowed "."
 
 -             Case 46
 
 -                 ' can present "." only one
 
 -                 If InStr(tmpStr, ".") Then CheckCurrency = True
 
  
-             Case 8, 13 ' Backspace = 8, Enter = 13
 
 -             Case Else
 
 -                 CheckCurrency = True
 
 -         End Select
 
 -     End Function
 
  
- End Class
 
  คัดลอกไปที่คลิปบอร์ด 
ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ... ได้ที่นี่ ... 
 
 |   
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน  
 
x
 
 
 
 
 |