ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 918|ตอบกลับ: 1

[VB.NET] การคำนวณภาษีมูลค่าเพิ่ม ทั้งแบบรวม (Vat Include) และแบบแยก (Vat Exclude)

[คัดลอกลิงก์]

262

กระทู้

422

โพสต์

3751

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3751



จัดโค้ดเบาๆในการคำนวณภาษีมูลค่าเพิ่ม ทั้งแบบรวม (Vat Include) และแบบแยก (Vat Exclude) พร้อมกับนำเสนอเทคนิคในการเขียนโค้ด เพื่อดักจับความผิดพลาด (Trap Error) ก่อนที่จะนำค่าไปทำการคำนวณผล ...

มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Public Class frmVatCalc

  2.     Private Sub frmVatCalc_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         With cmbVatType
  4.             .Items.Add("ไม่คิดภาษี")
  5.             .Items.Add("รวมภาษี")
  6.             .Items.Add("แยกภาษี")
  7.             .SelectedIndex = 1
  8.         End With
  9.         txtVatRate.Text = 7
  10.         txtVatRate.MaxLength = 2
  11.         '// Initial Value.
  12.         txtPrice.Text = 100
  13.         txtPrice.MaxLength = 9
  14.     End Sub

  15.     Private Sub btnVatCal_Click(sender As System.Object, e As System.EventArgs) Handles btnVatCal.Click
  16.         '// ตรวจสอบหากเป็นค่าว่าง ให้กำหนดตัวเลขลงแทน ป้องกันการเกิด ERROR หรือคำนวณผิดพลาด
  17.         If txtVatRate.Text.Trim.Length = 0 Or txtVatRate.Text.Trim = "" Then txtVatRate.Text = 7
  18.         If txtPrice.Text.Trim.Length = 0 Or txtPrice.Text.Trim = "" Then txtPrice.Text = 100

  19.         '// ตรวจสอบ Vat Type ... 0 = ไม่คิดภาษี, 1 = รวมภาษี, 2 = แยกภาษี
  20.         Select Case cmbVatType.SelectedIndex
  21.             Case 0
  22.                 txtTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")
  23.                 txtVat.Text = 0
  24.                 txtNetTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")

  25.             Case 1
  26.                 txtTotal.Text = Format(CDbl(txtPrice.Text) / 1.07, "#,##0.00")
  27.                 '// คำนวณหาราคาสินค้าจริงก่อน CDbl(txtPrice.Text) / 1.07 แล้วค่อยนำไปลบออกจากสินค้าราคาเต็ม ก็จะได้ภาษีรวมใน
  28.                 '// *** การหารมี Priority สูงกว่าการลบ ก็เลยทำ CDbl(txtPrice.Text) / 1.07 ก่อน โดยไม่ต้องใส่วงเล็บก็ได้ ***
  29.                 '// เช่น ราคารวม VAT = 100 ... จะได้ราคาขายจริง 93.46 ลบราคาสินค้า 100 ก็จะได้ภาษี 6.54 บาท
  30.                 txtVat.Text = Format(CDbl(txtPrice.Text) - CDbl(txtPrice.Text) / 1.07, "#,##0.00")
  31.                 txtNetTotal.Text = Format(CDbl(txtTotal.Text) + CDbl(txtVat.Text), "#,##0.00")
  32.                 '// หรือ txtNetTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")

  33.             Case 2
  34.                 txtTotal.Text = Format(CDbl(txtPrice.Text), "#,##0.00")
  35.                 txtVat.Text = Format(Val(txtVatRate.Text), "#,##0.00")
  36.                 '// หรือใช้บัญญัติไตรยางค์ ... ราคาสินค้า * ภาษี / 100
  37.                 txtNetTotal.Text = Format(CDbl(txtPrice.Text) * 1.07, "#,##0.00")

  38.         End Select
  39.     End Sub

  40.     Private Sub txtPrice_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress
  41.         If e.KeyChar = Chr(13) Then
  42.             e.Handled = True
  43.             SendKeys.Send("{TAB}")
  44.         Else
  45.             '// ตรวจสอบ Handle หากถูกรีเทิร์นค่า False กลับมา แสดงว่ายอมรับการกดคีย์ตัวเลข และจุดทศนิยมได้เพียงหลักเดียว
  46.             e.Handled = CheckCurrency(Asc(e.KeyChar), txtPrice.Text)
  47.         End If
  48.     End Sub

  49.     Private Sub txtVatRate_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtVatRate.KeyPress
  50.         If Asc(e.KeyChar) = Keys.Enter Then
  51.             e.Handled = True
  52.             SendKeys.Send("{TAB}")
  53.         Else
  54.             '// ตรวจสอบ Handle หากถูกรีเทิร์นค่า False กลับมา แสดงว่ายอมรับการกดคีย์ตัวเลข
  55.             e.Handled = CheckDigitOnly(Asc(e.KeyChar))
  56.         End If
  57.     End Sub

  58.     '// ตรวจสอบการหลุดโฟกัส (ย้ายเคอร์เซอร์ไป Control ตัวอื่น) หากเป็นค่าว่างให้กำหนดค่าใหม่ เพื่อป้องกัน Error
  59.     Private Sub txtVatRate_LostFocus(sender As Object, e As System.EventArgs) Handles txtVatRate.LostFocus
  60.         If txtVatRate.Text.Trim.Length = 0 Or txtVatRate.Text.Trim = "" Then txtVatRate.Text = 7
  61.     End Sub

  62.     '// ตรวจสอบการหลุดโฟกัส (ย้ายเคอร์เซอร์ไป Control ตัวอื่น) หากเป็นค่าว่างให้กำหนดค่าใหม่ เพื่อป้องกัน Error
  63.     Private Sub txtPrice_LostFocus(sender As Object, e As System.EventArgs) Handles txtPrice.LostFocus
  64.         If txtPrice.Text.Trim.Length = 0 Or txtPrice.Text.Trim = "" Then txtPrice.Text = 100
  65.     End Sub

  66.     ' / ----------------------------- F U N C T I O N -------------------------------
  67.     ' / --------------------------------------------------------------------------------
  68.     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขได้เท่านั้น
  69.     Function CheckDigitOnly(ByVal index As Integer) As Boolean
  70.         Select Case index
  71.             Case 48 To 57 ' เลข 0 - 9
  72.                 CheckDigitOnly = False
  73.             Case 8, 13 ' Backspace = 8, Enter = 13
  74.                 CheckDigitOnly = False
  75.             Case Else
  76.                 CheckDigitOnly = True
  77.         End Select
  78.     End Function

  79.     ' / --------------------------------------------------------------------------------
  80.     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขและทศนิยมได้ตัวเดียวเท่านั้น
  81.     Function CheckCurrency(index As Integer, tmpStr As String) As Boolean
  82.         CheckCurrency = False
  83.         Select Case index
  84.             Case 48 To 57 ' เลข 0 - 9
  85.                 ' Allowed "."
  86.             Case 46
  87.                 ' can present "." only one
  88.                 If InStr(tmpStr, ".") Then CheckCurrency = True

  89.             Case 8, 13 ' Backspace = 8, Enter = 13
  90.             Case Else
  91.                 CheckCurrency = True
  92.         End Select
  93.     End Function

  94. End Class
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ... ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

2

กระทู้

4

โพสต์

88

เครดิต

Member

Rank: 2

เครดิต
88
โพสต์ 2021-4-19 09:22:11 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2021-9-22 16:17 , Processed in 0.060463 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้