|
จัดโค้ดเบาๆในการคำนวณภาษีมูลค่าเพิ่ม ทั้งแบบรวม (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
|