شاطر
اذهب الى الأسفل
عدد المساهمات : 134
تاريخ التسجيل : 08/10/2012
معاينة صفحة البيانات الشخصي للعضو

طريقه عمل تقرير وفاتورة بفلتر بكل سهولة فى داتا جريد وليبل وداتا بيز اكسس (مبسط جدا)

في الإثنين أكتوبر 15, 2012 9:33 am
السلام عليكم ورحمه الله وبركاته

اخوانى انا طبعا فى الفترة الاخيرة كنت بحاول اعمل فاتورة او تقرير وفشلت بشتي الطرق هههههههه

ولله الحمد عملته بطريقه غريبة شوية كعادتى انى بحاول اوصل لمفهوم برمجى من منظورى انا

والحمد لله على انى وصلت اخيرا للحل

وشغال مليون فى الميه وحرفعلكم المثال ولكن انا عاوز تحاولوا الاول وبعدين ارفق المثال لو احتجتم لكن صدقونى الموضوع مش محتاج اكتر من اكود ولا اى حاجه تانيه

فياريت شوية تركيز بس وانا معاكم ولو فى اى مشكلة انا حاضر للاجابة

ومع العلم انى لو وفقت فمن عند الله ولو اخطأت فمن الشيطان ونفسي

وربنا ما يجيب اخطاء ان شاء الله

الهدف ان شاء الله عمل فاتورة على شكل معين وقابله للطابعه

الاستعلام حيكون عن طريق رقم الفاتورة

وكمان حنطبع فى الاخر على برنتر عاديه او PDF برنتر عشان نحفظه على الجهاز لو حبينا ولكن لازم تكون البرنتر او الطابعه الافتراضيه لاننا لن نختارها ولو حبينا نضيف دى ممكن نضيفها بسهولة لكن مش هى موضوعنا

بسم الله نبدء المطلوب
1 قاعده بيانات اكسس وبها جدولين واحد للعملاء والاخر للبضاعه اللى حنضيفها فى فاتورة البيع
2- فيجوال ستوديو 2008 ( 2005 لن يضر سيعمل بنفس الاكواد ان شاء الله )
3- متابعه جيده لخطورة خطوة

بسم الله الرحمن الرحيم

الكود:


Imports System
Imports System.Data.OleDb
Imports System.Drawing.Imaging
Imports System.Drawing.Printing 
استدعاءات بالطبع سنستخدمها لاختصار الاكواد وللتعامل مع قواعد البيانات وايضا للتعامل مع الطباعه


سنستخدم التالى فى البابلك كلاس

الكود:

Public Class Form2
    Dim b As Boolean
    Dim Con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" & Application.StartupPath & "\Store.mdb")
    Dim sqlstr1 As String
   
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim dt1 As OleDbDataAdapter
    Dim ID As Integer
    Dim DataSet1 As New DataSet
    Dim DataSet2 As New DataSet 

عمل الاتصال وحنسمية Con
الباقي معروف
حاجات اساسية وبعض المتغيرات المستخدمه

فى الحدث Load مش حنستخدمه غير انه يجيب التاريخ بالكود ده طبعا

الكود:

Label23.Text = Date.Now 

صورة للفاتورة

https://redcdn.net/ihimizer/img413/2237/invexplain.png

حنحتاج حوالى 23 ليبل
1 تكست بوكس
2 بوتون
واحد داتا جريد فيو

بس

الفكرة فى سحب بيانات الفاتورة برقم الفاتورة من الداتا بيز

وعرضها فى الداتا جريد

وسحب من نفس الجدول بيان رقم العميل واستخدامه فى سحب بيانات العميل من جدول العميل فى الاعلى

ثم اخيرا الطباعه وده كود جاهز

على فكرة الاكواد فيها كتير مقتبس طبعا ( هو اساسا مفيش حد بيألف اكاود على مزاجه ههههه )

نكمل الاكواد
اول زرار البحث فى الداتا بيز بأستخدام رقم الفاتورة فى التكست بوكس
حنضغط على الزرار مرتين عشان يجيبلنال الكود الخاص بيه

ونحط فيه الكود التالي انا حاطت عليه كونتات ولكن حنقول اللى فيه لو عاوزين طبعا

الكود:


        '================= البحث برقم الفاتورة=========================

        DataSet1.Clear()
        If TextBox1.Text = "" Then
            MsgBox("يجب ملأ الفراغ", MsgBoxStyle.Information)
            TextBox1.Focus()
        Else
            sqlstr1 = "SELECT Quntity As الكمية,Price As السعر,inv As رقم_الفاتورة,ItemCode As سيريال_الاجهزة,ItemName As المواصفات,ClientCode As رقم_العميل  From out WHERE inv LIKE '%" & TextBox1.Text & "%'"
            Try
                Con.Open()
            Catch ex As Exception
            End Try
            cmd = New OleDbCommand(sqlstr1, Con)
            dr = cmd.ExecuteReader
            Do While dr.Read
                TextBox1.Text = dr("رقم_الفاتورة")
            Loop
            Con.Close()
            dt1 = New OleDbDataAdapter(sqlstr1, Con)
            dt1.Fill(DataSet1, "out")
            DataGridView1.DataSource = DataSet1
            DataGridView1.DataMember = "out"
        End If
        '=========================== جمع الاسعار ==========================
        Dim sum As Double
        For i = 0 To DataGridView1.RowCount - 1
            sum += DataGridView1.Rows(i).Cells(1).Value
        Next
        Label17.Text = sum
        Label14.Text = Label17.Text * 10 / 100
        Label16.Text = Label14.Text + +Label17.Text
        ============================== سحب بيانات الليبلز للعميل ======================
        Try
            Label19.DataBindings.Add("Text", DataSet1, "Out.رقم_العميل")
        Catch ex As Exception


        End Try
        Call clientdata() 

انتهى الكود فى الزرار بالكود ده Call clientdata()

وده معناه ان فيه حدث احنا عاملينه مستقل حنستدعيه وده ناخده نحطه لوحده تحت الكود بتاع البوتون الاول ولكن طبعا بعد End Sub

الكود:


    Private Sub clientdata()
        '======================= bayanat el3amel fe labels
        sqlstr1 = "select ClientName As اسم_العميل,Phone AS رقم_التليفون,Mobile AS رقم_الموبايل,Fax AS رقم_الفاكس,Address As العنوان From Client WHERE Code LIKE '%" & Label19.Text & "%'"
        Try
            Con.Open()
        Catch ex As Exception
        End Try
        cmd = New OleDbCommand(sqlstr1, Con)
        dr = cmd.ExecuteReader
        Do While dr.Read
            Label18.Text = dr("اسم_العميل")
            Label22.Text = dr("رقم_التليفون")
            Label20.Text = dr("رقم_الفاكس")
            Label21.Text = dr("العنوان")
        Loop
        Con.Close()
        '
        dt1 = New OleDbDataAdapter(sqlstr1, Con)
        dt1.Fill(DataSet1, "Client")

    End Sub 

طبعا سيبكم من تعليقاتى لكن انا اتعودت عليها كده

المهم فى حاجه تانيه مهمه ودى بنستخدمها لحسب بيانات العميل
وحنحطها فى حدث منفصل زى اللى قبلها قبل End Class وبعد End Sub

الكود:

    Private Sub getdata()
        Con.Open()
        Dim DataAdapter1 As New OleDbDataAdapter(sqlstr1, Con)
        DataAdapter1.Fill(DataSet2, "Out")

        Con.Close()
    End Sub 

حنسمي زرار الطباعه btnPrint

ونحط الاكواد التاليه عشان نطبع الفاتورة


الكود:

    Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As System.Int32) As Boolean
    Private Const SRCCOPY As Integer = &HCC0020

    Private Function GetFormImage() As Bitmap
        ' Get this form's Graphics object.
        Dim me_gr As Graphics = Me.CreateGraphics

        ' Make a Bitmap to hold the image.
        Dim bm As New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height, me_gr)
        Dim bm_gr As Graphics = me_gr.FromImage(bm)
        Dim bm_hdc As IntPtr = bm_gr.GetHdc

        ' Get the form's hDC. We must do this after 
        ' creating the new Bitmap, which uses me_gr.
        Dim me_hdc As IntPtr = me_gr.GetHdc

        ' BitBlt the form's image onto the Bitmap.
        BitBlt(bm_hdc, 0, 0, Me.ClientSize.Width, Me.ClientSize.Height, _
            me_hdc, 0, 0, SRCCOPY)
        me_gr.ReleaseHdc(me_hdc)
        bm_gr.ReleaseHdc(bm_hdc)

        ' Return the result.
        Return bm
    End Function

    ' Variables used to print.
    Private m_PrintBitmap As Bitmap
    Private WithEvents m_PrintDocument As PrintDocument

    ' Print the picture.
    Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
        ' Copy the form's image into a bitmap.
        m_PrintBitmap = GetFormImage()

        ' Make a PrintDocument and print.
        m_PrintDocument = New PrintDocument
        m_PrintDocument.Print()
    End Sub

    ' Print the form image.
    Private Sub m_PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles m_PrintDocument.PrintPage
        ' Draw the image centered.
        Dim x As Integer = e.MarginBounds.X + _
            (e.MarginBounds.Width - m_PrintBitmap.Width)  2
        Dim y As Integer = e.MarginBounds.Y + _
            (e.MarginBounds.Height - m_PrintBitmap.Height)  2
        e.Graphics.DrawImage(m_PrintBitmap, x, y)

        ' There's only one page.
        e.HasMorePages = False
    End Sub

    Private Sub btnPrintForm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
        ' Copy the form's image into a bitmap.
        m_PrintBitmap = GetFormImage()

        Make a PrintDocument and print.
        m_PrintDocument = New PrintDocument
        m_PrintDocument.Print()
    End Sub
End Class 

اتمنى يكون المعلومة وصلت للناس زى ما انا عاوز اقولها بالظبط باقي بس انى انتظر ردودكم واتمنى ان الناس تستفيد من الشرح ده ولو فى شؤال انا حاضر لانى اعوذ بالله من كلمه انا اللى كعبلته على بعضه كده

فى انتظار الردود يا شباب

ومحدش ينسي زرار الشكر الجميل ده

سعر الشرح دعوة بالرزق والستر
الرجوع الى أعلى الصفحة
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى