ลงชื่อเข้าใช้
กระดานข่าว VB
>
เว็บบอร์ดเปิดโค้ดต้นฉบับ
ส่ง
|
[VB.NET] การคำนวณภาษีมูลค่าเพิ่ม ทั้งแบบรวม (Vat Include) และแบบแยก (Vat Exclude)
ดู2734
|
โพสต์1
|
บุ๊คมาร์ก
thongkorn
ดูทั้งหมด
2021-3-9 19:30:44
จัดโค้ดเบาๆใน
การคำนวณ
ภาษีมูลค่าเพิ่ม ทั้งแบบรวม (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) ... ได้ที่นี่
...
ไฟล์แนบ:
คุณจำเป็นต้อง
ลงชื่อเข้าใช้
ก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีบัญชีหรือยังไม่ได้เป็นสมาชิก กรุณา
ลงทะเบียน
outhai1992
ดูทั้งหมด
2021-4-19 09:22:11
ขอบคุณครับ
G2GNet.com
Powered by
Discuz!
X3.4
โฮมเพจ
|
รูปแบบทั่วไป
|
รูปแบบโมเดิร์น
|
รูปแบบคอมพิวเตอร์