Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > บทความจากสมาชิก > สร้างป้ายบาร์โค๊ตจากฟอร์น Code39 และ Crystal Report ด้วย Visual Basic 2013



 
Clound SSD Virtual Server

สร้างป้ายบาร์โค๊ตจากฟอร์น Code39 และ Crystal Report ด้วย Visual Basic 2013

บทความนี้จะนำเสนอแนวทางการสร้างบาร์โค๊ต โดยใช้ Font บาร์โค๊ต ซึ่งฟอร์นนี้มีชื่อว่า 3OF9_NEW.TTF ซึ่งเป็นฟอร์นเก่าดั้งเดิม คาดว่าน่าจะออกมานานแล้ว ซึ่งจะพัฒนาบน Visual Studio 2013 , .net 3.5 ทำคู่กับ Crystal Report For Visual Studio 2013 (หากใครยังไม่มีโหลดได้ที่นี่ https://www.aspsnippets.com/Articles/Download-Crystal-Reports-for-Visual-Studio-2013.aspx)

หลักการ จะทำการบันทึกข้อมูลลงในดาต้าเทเบิ้ล Z(DataTabel) และแสดงผลออกทาง Crystal Report โดย เพิ่ม * เข้าไปในส่วนหัวและท้ายของชุดตัวอักษรที่จะนำมาทำบาร์โค๊ต จากนั้นกำหนดให้แสดงผลโดยใช้ฟอร์น 3OF9_NEW.TTF ดังนั้นในเครื่องของผู้ใช้งานต้องติดตั้งฟอร์น 3OF9_NEW.TTF เข้าไปก่อน

เริ่มต้นด้วยการสร้าง Windows Form และ คอนโทรลข้อมาตารูปด้านล่าง

form1


และสร้าง DataSet ขึ้นมา 1 ตัว ชื่อ DataSet1

dataset1


จากนั้นสร้าง DataTabel ขึ้นมา 2 ตาราง ชื่อ txtLabel และ snlable_id ตามรูป

datable


datable1


โค๊ตใน Form1

Code (VB.NET)
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Text

Public Class Form1
    ''' <summary>
    ''' สั่งปิด/เปิด คอนโทรลต่าง ๆ 
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub rbCheck()
        If rbOneNum.Checked = True Then
            Me.NumericUpDown1.Enabled = True
            Me.txtOneNum.Clear()
            Me.txtOneNum.Enabled = True
        Else
            Me.txtOneNum.Clear()
            Me.txtOneNum.Enabled = False
        End If

        If rbCount.Checked = True Then
            Me.NumericUpDown1.Enabled = False
            Me.txtCountStart.Enabled = True
            Me.txtCountEnd.Enabled = True
        Else
            Me.NumericUpDown1.Enabled = True
            Me.txtCountStart.Enabled = False
            Me.txtCountEnd.Enabled = False
        End If

        If rbRanDom.Checked = True Then
            Me.NumericUpDown1.Enabled = True
            Me.cbbRandom.Enabled = True
            Me.NumericUpDown2.Enabled = True
        Else
            Me.cbbRandom.Enabled = False
            Me.NumericUpDown2.Enabled = False
        End If
    End Sub
    Dim snum As String = "123456789" & _
                            "123456789" & _
                            "123456789" & _
                            "123456789" & _
                            "123456789"

    Dim stext As String = "ABCDEFGHIJKLMNPQRSTUVWXYZ" & _
                            "ABCDEFGHIJKLMNPQRSTUVWXYZ" & _
                            "ABCDEFGHIJKLMNPQRSTUVWXYZ" & _
                            "ABCDEFGHIJKLMNPQRSTUVWXYZ" & _
                            "ABCDEFGHIJKLMNPQRSTUVWXYZ"
    ''' <summary>
    ''' ฟังก์ชั่นสุ่มตัวเลขและตัวอักษร
    ''' </summary>
    ''' <param name="s"></param>
    ''' <param name="n"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function snRnd(ByVal s As String, ByVal n As Integer)
        Dim r As New Random
        Dim sb As New StringBuilder
        For i As Integer = 1 To n
            Dim idx As Integer = r.Next(0, s.Length)
            sb.Append(s.Substring(idx, 1))
        Next
        Return sb.ToString()
    End Function

    Private Sub rbCount_CheckedChanged(sender As Object,
                                         e As EventArgs) Handles rbCount.CheckedChanged, rbOneNum.CheckedChanged, rbRanDom.CheckedChanged
        Call rbCheck()
    End Sub

    Private Sub cbbRandom_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cbbRandom.KeyPress
        'ปิด ComboBox ไม่ให้พิมพ์ได้
        e.Handled = True
    End Sub

    Private Sub SNLabelFrm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
        Me.Dispose()
    End Sub

    Private Sub SNLabelFrm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'เพิ่มไอเท็มเข้า ComboBox
        Me.cbbRandom.Items.Clear()
        Me.cbbRandom.Items.Add("ตัวเลขและตัวอักษร")
        Me.cbbRandom.Items.Add("ตัวเลข")
        Me.cbbRandom.Items.Add("ตัวอักษร")
        Me.cbbRandom.SelectedIndex = 0
    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'เคลียร์ตารางในดาต้าเทเบิ้ล textLabel
        Me.DataSet11.textLabel.Rows.Clear()
        'เพิ่มข้อมูลฉลากป้ายบาร์โค๊ตลงในดาต้าเทเบิ้ล
        Me.DataSet11.textLabel.Rows.Add(Me.TextBox1.Text)
        'เคลียร์ตารางในดาต้าเทเบิ้ล snlable_id
        Me.DataSet11.snlable_id.Rows.Clear()
        'ตรวจสอบเงื่อนไขตามการเลือก RadioButton
        'rbOneNum คือ กำหนดให้ป้ายฉลากทั้งหมด เหมือนกันทุกอัน
        If rbOneNum.Checked = True Then
            For r As Integer = 0 To Me.NumericUpDown1.Value - 1
                Dim newrowsss As DataSet1.snlable_idRow
                newrowsss = DataSet11.snlable_id.NewRow
                newrowsss.num_sn = Me.txtFrontNum.Text & Me.txtOneNum.Text
                Me.DataSet11.snlable_id.Rows.Add(newrowsss)
            Next
            'rbCount คือ กำหนดให้ป้ายฉลากทั้งหมด เรียงตามลำดับตัวเลข เช่น 00001, 00002, 00003 ฯ
        ElseIf rbCount.Checked = True Then
            If Me.txtCountStart.Text = Nothing And Me.txtCountEnd.Text = Nothing Then
                MessageBox.Show(Me, "กรุณาป้อนค่าตัวเลขเริ่มต้นและสิ้นสุดในช่องด้วย",
                                "ผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
            'เงื่อนไขการใส่ตัวเลขเรียงลำดับ
            'txtCountStart.Text ต้องมีค่าน้อยกว่า txtCountEnd.Text เสมอ ถ้าไม่ใช่จะแสดงข้อความเตือน
            If CInt(Me.txtCountStart.Text) > CInt(Me.txtCountEnd.Text) Then
                MessageBox.Show(Me, "ตัวเลขในช่องเริ่มมีค่ามากกว่าช่องถึง" & vbNewLine & "กรุณาใส่ค่าช่องตัวเลขเริ่มต้น ให้มีค่าน้อยกว่าค่า สิ้นสุด",
                                "ผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            Else
                'หาค่าจำนวนการเรียงลำดับ
                Dim ccc As Integer = CInt(Me.txtCountEnd.Text) - CInt(Me.txtCountStart.Text)
                'เงื่อนไขถ้าเกิน 10000 จะแสดงข้อความเตือน (สร้างป้ายบาร์โค๊ตเยอะมากจะทำให้โปรแกรมทำงานช้าและอาจจะค้างได้ ฉะนั้นไม่เกินหมื่นก็น่าจะพอ)
                If ccc > 10000 Then
                    MessageBox.Show(Me, "สร้างป้ายแยะเกินไปแล้วแก ! ขนาดเกินหมื่น มันใช้เวลานานนะ",
                                  "สร้างทีล่ะนิด ทีละหน่อยนะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    Exit Sub
                Else
                    'สร้างข้อมูลลงในดาต้าเทเบิ้ล
                    Dim num_start As Integer = Me.txtCountStart.Text
                    For r As Integer = CInt(Me.txtCountStart.Text) To CInt(Me.txtCountEnd.Text)
                        num_start = num_start + 1
                        Dim newrowsss As DataSet1.snlable_idRow
                        newrowsss = DataSet11.snlable_id.NewRow
                        newrowsss.num_sn = Me.txtFrontNum.Text & num_start
                        Me.DataSet11.snlable_id.Rows.Add(newrowsss)
                    Next
                End If
            End If
            ' rbRanDom คือ การส้รางรหัสบาร์โค๊ตจากการสุ่ม จาก ฟังก์ชั่น snRnd 
        ElseIf rbRanDom.Checked = True Then
            'สร้างข้อมูลลงในดาต้าเทเบิ้ล
            For r As Integer = 0 To Me.NumericUpDown1.Value - 1
                Dim newrowsss As DataSet1.snlable_idRow
                newrowsss = DataSet11.snlable_id.NewRow
                Dim nr As String = String.Empty
                If Me.cbbRandom.Text = "ตัวเลขและตัวอักษร" Then
                    nr = snRnd(snum & stext, Me.NumericUpDown2.Value)
                ElseIf Me.cbbRandom.Text = "ตัวเลข" Then
                    nr = snRnd(snum, Me.NumericUpDown2.Value)
                ElseIf Me.cbbRandom.Text = "ตัวอักษร" Then
                    nr = snRnd(stext, Me.NumericUpDown2.Value)
                End If
                Threading.Thread.Sleep(100)
                newrowsss.num_sn = Me.txtFrontNum.Text & nr
                Me.DataSet11.snlable_id.Rows.Add(newrowsss)
            Next
        End If

        Dim cry As ReportDocument = New ReportDocument
        'เลือกรีพอร์ต แบบที่มีป้ายฉากหรือไม่มีป้ายฉลาก
        If Me.cbLable.Checked = True Then
            cry.Load(Application.StartupPath & "\CrystalReport1.rpt")
        Else
            cry.Load(Application.StartupPath & "\CrystalReport2.rpt")
        End If
        cry.SetDataSource(Me.DataSet11)
        CrystalReportViewer1.ReportSource = cry
        cry.Refresh()
    End Sub


    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        'สั่งพิมพ์ออกทางเครื่องพิมพ์
        If Not CrystalReportViewer1.ReportSource Is Nothing Then
            CrystalReportViewer1.PrintReport()
        Else
            MessageBox.Show(Me, "ยังไม่มีข้อมูลที่จะพิมพ์ โปรดกด 'แสดงตัวอย่าง'", "ไม่มีข้อมูล",
                                 MessageBoxButtons.OK, MessageBoxIcon.None)
        End If
    End Sub

    Private Sub txtCountStart_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCountStart.KeyPress
        'ทำให้ TextBox พิมพ์ได้เฉพาะตัวเลขเท่านั้น
        Select Case Asc(e.KeyChar)
            Case 48 To 57 ' key โค๊ด ของตัวเลขจะอยู่ระหว่าง48-57ครับ 48คือเลข0 57คือเลข9ตามลำดับ
                e.Handled = False
            Case 8, 13, 127 ' ปุ่ม Backspace = 8,ปุ่ม Enter = 13, ปุ่มDelete = 46
                e.Handled = False
            Case Else
                e.Handled = True
        End Select
    End Sub

    Private Sub txtCountEnd_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCountEnd.KeyPress
        'ทำให้ TextBox พิมพ์ได้เฉพาะตัวเลขเท่านั้น
        Select Case Asc(e.KeyChar)
            Case 48 To 57 ' key โค๊ด ของตัวเลขจะอยู่ระหว่าง48-57ครับ 48คือเลข0 57คือเลข9ตามลำดับ
                e.Handled = False
            Case 8, 13, 127 ' ปุ่ม Backspace = 8,ปุ่ม Enter = 13, ปุ่มDelete = 46
                e.Handled = False
            Case Else
                e.Handled = True
        End Select
    End Sub

    Private Sub NumericUpDown1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles NumericUpDown1.KeyPress
        'ปิด  NumericUpDown1 ไม่ให้ผู้ใช้สามารถพิมพ์อะไรลงไปได้
        e.Handled = True
    End Sub


    Private Sub NumericUpDown2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles NumericUpDown2.KeyPress
        'ปิด  NumericUpDown2 ไม่ให้ผู้ใช้สามารถพิมพ์อะไรลงไปได้
        e.Handled = True
    End Sub

    Private Sub cbLable_CheckedChanged(sender As Object, e As EventArgs) Handles cbLable.CheckedChanged
        If Me.cbLable.Checked = True Then
            Me.TextBox1.Enabled = True
        Else
            Me.TextBox1.Enabled = False
        End If
    End Sub

    Private Sub txtFrontNum_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtFrontNum.KeyPress
        'ตัวอักษรนำหน้า เมื่อมีอักษรนำหน้า จะไปบวก ลบ กับรหัสตัวเลข ซึ่งรวมกันต้องไม่เกิน 10 ตัวอักษร หากเกินอาจจะยาวจะเกินขอบฉลากบาร์โค๊ต ทำให้สแกนไม่ได้
        Dim ml As Integer = 10 - (Me.txtFrontNum.Text.Length + 1)
        Me.txtOneNum.MaxLength = ml
        Me.txtCountStart.MaxLength = ml
        Me.txtCountEnd.MaxLength = ml
        Me.NumericUpDown2.Maximum = ml
    End Sub
End Class


จากนั้นก็สร้าง Crystal Report ชื่อ CrystalReport1
cry1


เลือกเป็น Mail Label จากนั้นกด ok

maillabel


เลือก Databel ที่สร้างไว้ จากนั้นกด Finish

Finish


กำหนดขนาดของป้าย ตามขนาดที่ต้องการ โดยผมตั้งขนาด 4 * 1.8 cm

418cm


418cm2


จากนั้นสร้าง Formula Fields เพื่อที่จะใส่เครื่องหมาย * ลงไปในส่วนหัวและท้ายของตัวอักษร เช่น *12345678908*

ffstar


โดยผมจะกำหนดชื่อของ Formula Fields เป็น star

star


จากนั้นดับเบิ้ลคลิ๊กที่ Datable ชื่อ num_sn ที่สร้างเอาไว้

num_sn


จากนั้นเพิ่ม * เข้าไปที่หัวกับท้าย ตามรูป

starstartend


จากนั้นกด บันทึก (มุมบนซ้ายของหน้าต่างโปรแกรม) ก็จะได้ Formula Fields ชื่อ star

Formula-Fields-star


ลากมาลงใน Crystal Report เลือกแบบอักษรเป็น 3 of 9 Barcode

39barcode


จากนั้นลาก Databel ชื่อ num_sn ลงมาเพื่อทำเป็นอักษรกำกับด้านล่างของบาร์โค๊ต

buttom


ลาก text ลงมาเพื่อทำเป็นป้ายฉลากด้านบนของบาร์โค๊ต

topbarcode


จัดรูปแบบให้พอดี สวยงามตามต้องการ

เมื่อจะใช้งาน ต้องก็อปปี้ CrystalReport1.rpt ไปไว้ในโฟล์เดอร์ของโปรแกรมที่จะรันด้วย ผมได้ทำไว้ 2 ตัว คือ CrystalReport1.rpt และ CrystalReport2.rpt แบบไม่มีป้ายฉลากด้านบนบาร์โค๊ต

พร้อมใช้งาน


เสร็จเรียบร้อยพร้อมใช้งาน ผู้ใช้งานต้องปริ๊นต์ด้วยกระดาษสติ๊กเกอร์แบบปริ๊นต์ได้ ถ้าต้องการนำไปติดกับสินค้าต่าง ๆ
จะให้คม สแกนง่าย ๆ ต้องเป็นปริ๊นต์เตอร์เลเซอร์จึงจะดี

เสร็จ


ซอร์ทโค๊ต นำไปดูเป็นแนวทางประยุกต์ใช้งานกันต่อไป (VB.net, .net3.5, Crystal Report For Visual Studio 2013)

https://drive.google.com/file/d/0B0tm4MRb-kmFTVZWVEdRRkpVcTQ/view?usp=sharing

Download!!!







   
Share
Bookmark.   

  By : pakyaudio
  Article : บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ
  Score Rating :
  Create Date : 2017-06-10
  Download : No files
Sponsored Links
ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


Hit Link
   







Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่