23-03-20, 04:39 PM (آخر تعديل لهذه المشاركة : 24-03-20, 07:29 PM {2} بواسطة عبد العزيز البسكري.)
السّلام عليكم و رحمة الله و بركاته
إخواني الأكارم .. أرجو المساعدة لحل هذه الإشكالية بارك الله فيكم و لكم مقدما
لديّ جدولين اثنين بقاعدة البيانات
جدول رأس الفاتورة TBL_INVOICES_VENTE
جدول بيانات الفاتورة TBL_INVOICES_VENTE_DETAILS
الرابط المشترك بينهما هو الحقل : INVOICES_VENTE_Code و INVOICES_VENTE_DETAILS_Code
المشكلة أثناء إختيار كود الفاتورة بالتاكست بوكس رقم 2
عند الطباعة تظهر بيانات تفاصيل الفاتورة مكرّرة
حاولت بالعديد من الأكواد لكن بدون فائدة
هذا هو الكود المستخدم للطباعة
كود :
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
If Me.TextBox2.Text = vbNullString Then
MessageBox.Show("الرّجاء .. كتابة كود الفاتورة", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Else
Cursor.Current = Cursors.WaitCursor
Dim AzizCrystal As New ReportDocument
Dim crtableLogoninfo As New TableLogOnInfo
Dim crConnectionInfo As New ConnectionInfo
Dim CrTables As Tables
Try
Dim MyReportPath As String = Application.StartupPath & "\FolderReport\Crystal1.Rpt"
AzizCrystal.Load(MyReportPath)
With crConnectionInfo
.ServerName = Application.StartupPath & "\MARKETING.Mdb"
.DatabaseName = Application.StartupPath & "\MARKETING.Mdb"
.UserID = "Admin"
.Password = "AZERTY987654"
End With
CrTables = AzizCrystal.Database.Tables
For Each CrTable In CrTables
crtableLogoninfo = CrTable.LogOnInfo
crtableLogoninfo.ConnectionInfo = crConnectionInfo
CrTable.ApplyLogOnInfo(crtableLogoninfo)
Next
If Conne_2020.State = ConnectionState.Closed Then Conne_2020.Open()
Dim Ds As DataSet = New DataSet()
Dim Facture_Code As String = Me.TextBox2.Text
If Conne_2020.State = ConnectionState.Closed Then
Conne_2020.Open()
End If
Dim Sql As String = "SELECT TBL_INVOICES_VENTE_DETAILS.INVOICES_VENTE_DETAILS_Code, TBL_INVOICES_VENTE_DETAILS.INVOICES_VENTE_DETAILS_Items_Code, TBL_INVOICES_VENTE_DETAILS.INVOICES_VENTE_DETAILS_Items_Name, TBL_INVOICES_VENTE_DETAILS.INVOICES_VENTE_DETAILS_Quantite, TBL_INVOICES_VENTE_DETAILS.INVOICES_VENTE_DETAILS_Price, TBL_INVOICES_VENTE_DETAILS.INVOICES_VENTE_DETAILS_Total, TBL_INVOICES_VENTE.INVOICES_VENTE_Code,TBL_INVOICES_VENTE.INVOICES_VENTE_Date,TBL_INVOICES_VENTE.INVOICES_VENTE_Customers_Name,TBL_INVOICES_VENTE.INVOICES_VENTE_Total,TBL_INVOICES_VENTE.INVOICES_VENTE_Total_Arabic,TBL_INVOICES_VENTE.INVOICES_VENTE_Total_Quantite From TBL_INVOICES_VENTE, TBL_INVOICES_VENTE_DETAILS Where TBL_INVOICES_VENTE.INVOICES_VENTE_Code=@Pcode"
Dim cmd As New OleDbCommand(Sql, Conne_2020)
cmd.Parameters.AddWithValue("@Pcode", Facture_Code)
Ds.Clear()
Dim Da As New OleDbDataAdapter(cmd)
Da.Fill(Ds, "TBL_INVOICES_VENTE")
Da.Fill(Ds, "TBL_INVOICES_VENTE_DETAILS")
Dim Dt = Ds.Tables(0)
If Dt.Rows.Count = 0 Then
MessageBox.Show("لم يتم العثور على بيانات لعرضها في التّقرير", "طباعة التقرير", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Cursor.Current = Cursors.Default
Exit Sub
Else
AzizCrystal.SetDataSource(Ds)
Dim Frm As New FrmPrinting
Frm.CrystalReportViewer1.ReportSource = AzizCrystal
Frm.CrystalReportViewer1.Zoom(100%)
Frm.CrystalReportViewer1.Refresh()
Frm.ShowDialog()
End If
If Conne_2020.State = ConnectionState.Open Then Conne_2020.Close()
AzizCrystal.Close()
AzizCrystal.Dispose()
Catch ex As Exception
MessageBox.Show("خطأ غير متوقّع في عمليّة جلب البيانات", "طباعة التقرير")
End Try
End If
End Sub
If Me.TextBox2.Text = vbNullString Then
XtraMessageBox.Show("الرّجاء .. إختيار كود فاتورة المبيعات", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Else
Cursor.Current = Cursors.WaitCursor
Dim AzizCrystal As New ReportDocument
Dim crtableLogoninfo As New TableLogOnInfo
Dim crConnectionInfo As New ConnectionInfo
Dim CrTables As Tables
Try
Dim MyReportPath As String = Application.StartupPath & "\FolderReport\Crystal1.Rpt"
AzizCrystal.Load(MyReportPath)
With crConnectionInfo
.ServerName = Application.StartupPath & "\MARKETING.Mdb"
.DatabaseName = Application.StartupPath & "\MARKETING.Mdb"
.UserID = "Admin"
.Password = "AZERTY987654"
End With
CrTables = AzizCrystal.Database.Tables
For Each CrTable In CrTables
crtableLogoninfo = CrTable.LogOnInfo
crtableLogoninfo.ConnectionInfo = crConnectionInfo
CrTable.ApplyLogOnInfo(crtableLogoninfo)
Next
If Conne_2020.State = ConnectionState.Closed Then Conne_2020.Open()
Dim Adp As New OleDb.OleDbDataAdapter("SELECT INVOICES_VENTE_Code,INVOICES_VENTE_Date,INVOICES_VENTE_Customers_Name,INVOICES_VENTE_Total,INVOICES_VENTE_Total_Arabic,INVOICES_VENTE_Total_Quantite,INVOICES_VENTE_DETAILS_Code,INVOICES_VENTE_DETAILS_Items_Code,INVOICES_VENTE_DETAILS_Items_Name,INVOICES_VENTE_DETAILS_Quantite,INVOICES_VENTE_DETAILS_Price,INVOICES_VENTE_DETAILS_Total From TBL_INVOICES_VENTE INNER JOIN TBL_INVOICES_VENTE_DETAILS ON INVOICES_VENTE_DETAILS_Code = INVOICES_VENTE_Code Where INVOICES_VENTE_Code = '" & Facture_Code & "'", Conne_2020)
Dim Ds As DataSet = New DataSet()
Adp.Fill(Ds, "TBL_INVOICES_VENTE")
Adp.Fill(Ds, "TBL_INVOICES_VENTE_DETAILS")
Dim Dt = Ds.Tables(0)
If Dt.Rows.Count = 0 Then
XtraMessageBox.Show("لم يتم العثور على بيانات لعرضها في التّقرير", "طباعة التقرير", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Cursor.Current = Cursors.Default
Exit Sub
Else
AzizCrystal.SetDataSource(Ds)
Dim Frm As New FrmPrinting
Frm.CrystalReportViewer1.ReportSource = AzizCrystal
Frm.CrystalReportViewer1.Zoom(100%)
Frm.CrystalReportViewer1.Refresh()
Frm.ShowDialog()
End If
If Conne_2020.State = ConnectionState.Open Then Conne_2020.Close()
AzizCrystal.Close()
AzizCrystal.Dispose()
Catch ex As Exception
XtraMessageBox.Show("خطأ غير متوقّع في عمليّة جلب البيانات", "طباعة التقرير")
End Try
End If
الكود المستعمل رقم 2 :
كود :
If Me.TextBox2.Text = vbNullString Then
XtraMessageBox.Show("الرّجاء .. إختيار كود فاتورة المبيعات", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Else
Cursor.Current = Cursors.WaitCursor
Dim AzizCrystal As New ReportDocument
Dim crtableLogoninfo As New TableLogOnInfo
Dim crConnectionInfo As New ConnectionInfo
Dim CrTables As Tables
Try
Dim MyReportPath As String = Application.StartupPath & "\FolderReport\Crystal1.Rpt"
AzizCrystal.Load(MyReportPath)
With crConnectionInfo
.ServerName = Application.StartupPath & "\MARKETING.Mdb"
.DatabaseName = Application.StartupPath & "\MARKETING.Mdb"
.UserID = "Admin"
.Password = "AZERTY987654"
End With
CrTables = AzizCrystal.Database.Tables
For Each CrTable In CrTables
crtableLogoninfo = CrTable.LogOnInfo
crtableLogoninfo.ConnectionInfo = crConnectionInfo
CrTable.ApplyLogOnInfo(crtableLogoninfo)
Next
If Conne_2020.State = ConnectionState.Closed Then Conne_2020.Open()
Dim Ds As DataSet = New DataSet()
Dim Facture_Code As String = Me.TextBox2.Text
If Conne_2020.State = ConnectionState.Closed Then
Conne_2020.Open()
End If
Dim Sql As String = "SELECT INVOICES_VENTE_Code,INVOICES_VENTE_Date,INVOICES_VENTE_Customers_Name,INVOICES_VENTE_Total,INVOICES_VENTE_Total_Arabic,INVOICES_VENTE_Total_Quantite,INVOICES_VENTE_DETAILS_Code,INVOICES_VENTE_DETAILS_Items_Code,INVOICES_VENTE_DETAILS_Items_Name,INVOICES_VENTE_DETAILS_Quantite,INVOICES_VENTE_DETAILS_Price,INVOICES_VENTE_DETAILS_Total From TBL_INVOICES_VENTE INNER JOIN TBL_INVOICES_VENTE_DETAILS ON INVOICES_VENTE_DETAILS_Code = INVOICES_VENTE_Code Where INVOICES_VENTE_Code = @Pcode"
Dim cmd As New OleDbCommand(Sql, Conne_2020)
cmd.Parameters.AddWithValue("@Pcode", Facture_Code)
Ds.Clear()
Dim Da As New OleDbDataAdapter(cmd)
Da.Fill(Ds, "TBL_INVOICES_VENTE")
Da.Fill(Ds, "TBL_INVOICES_VENTE_DETAILS")
Dim Dt = Ds.Tables(0)
If Dt.Rows.Count = 0 Then
XtraMessageBox.Show("لم يتم العثور على بيانات لعرضها في التّقرير", "طباعة التقرير", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Cursor.Current = Cursors.Default
Exit Sub
Else
AzizCrystal.SetDataSource(Ds)
Dim Frm As New FrmPrinting
Frm.CrystalReportViewer1.ReportSource = AzizCrystal
Frm.CrystalReportViewer1.Zoom(100%)
Frm.CrystalReportViewer1.Refresh()
Frm.ShowDialog()
End If
If Conne_2020.State = ConnectionState.Open Then Conne_2020.Close()
AzizCrystal.Close()
AzizCrystal.Dispose()
Catch ex As Exception
XtraMessageBox.Show("خطأ غير متوقّع في عمليّة جلب البيانات", "طباعة التقرير")
End Try
End If
سواء بالكود رقم 1 أو بالكود رقم 2 .. نفس رسالة الخطأ
بارك الله فيك و لك أخي الكريم و جزاك خير الجزاء و أحسن إليك مثلما أحسنت لي بهذه المتابعة الطيّبة .. عسى الله أن يزيدها بموازين حسناتك إن شاء الله
ما قصّرت صدقني .. و بكل أمانة
المشكلة أخي الكريم أنّك استعملت و أخذت البيانات من جدول واحد و ليس مثل ما هو موجود بقاعدة بياناتي المرفقة
بعد البحث وجدت أنّ الإشكالية لها العديد من التساؤلات و بكل المنتديات
وجدت الحل المؤقت لكنه لم يرقْ لي صراحة
فاتورة المبيعات من الأمور الحسّاسة و لا ينفع معها .. التحايل
الفورميلا .. طبعًا تتغيّر حسب حقل من الحقول الموجودة
هذا مع الكريستال ريبورت .. أكيد يوجد شيء ناقص بالأكواد رغم أنّي عملت View بال Sql Server و حوّلت الأكواد .. لكن لا حياة لمن تنادي
الحل المباشر بدون أي لف أو دوران .. بدون أي التباسات أو تعقيدات
وجدته مع تقارير الديف إكسبرس و الحمد لله
أو ربّما نجد الحل عند السادة أساتذتنا الأكارم إن شاء الله
تحياتي واحتراماتي
PHP كود :
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If Me.TextBox1.Text = vbNullString Then MessageBox.Show("الرّجاء .. إختيار كود فاتورة المبيعات", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
Else Cursor.Current = Cursors.WaitCursor Dim AzizCrystal As New ReportDocument Dim crtableLogoninfo As New TableLogOnInfo Dim crConnectionInfo As New ConnectionInfo Dim CrTables As Tables Try Dim MyReportPath As String = Application.StartupPath & "\FolderReport\Crystal1.Rpt" AzizCrystal.Load(MyReportPath) With crConnectionInfo .ServerName = Application.StartupPath & "\MARKETING.Mdb" .DatabaseName = Application.StartupPath & "\MARKETING.Mdb" .UserID = "Admin" .Password = "AZERTY987654" End With CrTables = AzizCrystal.Database.Tables For Each CrTable In CrTables crtableLogoninfo = CrTable.LogOnInfo crtableLogoninfo.ConnectionInfo = crConnectionInfo CrTable.ApplyLogOnInfo(crtableLogoninfo) Next
Dim Ds As New DataSet Dim Facture_Code As String = Me.TextBox1.Text
Dim sqlINVOICES_VENTE As String = "SELECT INVOICES_VENTE_Code,INVOICES_VENTE_Date,INVOICES_VENTE_Customers_Name,INVOICES_VENTE_Total,INVOICES_VENTE_Total_Arabic,INVOICES_VENTE_Total_Quantite From TBL_INVOICES_VENTE Where INVOICES_VENTE_Code = @Pcode" Dim Da_INVOICES_VENTE As New OleDbDataAdapter(sqlINVOICES_VENTE, Conne_2020) Da_INVOICES_VENTE.SelectCommand.Parameters.AddWithValue("@Pcode", Facture_Code) Da_INVOICES_VENTE.Fill(Ds, "TBL_INVOICES_VENTE")
Dim sqlINVOICES_VENTE_DETAILS As String = "SELECT INVOICES_VENTE_DETAILS_Code,INVOICES_VENTE_DETAILS_Items_Code,INVOICES_VENTE_DETAILS_Items_Name,INVOICES_VENTE_DETAILS_Quantite,INVOICES_VENTE_DETAILS_Price,INVOICES_VENTE_DETAILS_Total From TBL_INVOICES_VENTE_DETAILS Where INVOICES_VENTE_DETAILS_Code = @Pcode" Dim Da_INVOICES_VENTE_DETAILS As New OleDbDataAdapter(sqlINVOICES_VENTE_DETAILS, Conne_2020) Da_INVOICES_VENTE_DETAILS.SelectCommand.Parameters.AddWithValue("@Pcode", Facture_Code) Da_INVOICES_VENTE_DETAILS.Fill(Ds, "TBL_INVOICES_VENTE_DETAILS")
If Ds.Tables(0).Rows.Count = 0 Then MessageBox.Show("لم يتم العثور على بيانات لعرضها في التّقرير", "طباعة التقرير", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Cursor.Current = Cursors.Default Exit Sub Else AzizCrystal.SetDataSource(Ds) Dim Frm As New FrmPrinting Frm.CrystalReportViewer1.ReportSource = AzizCrystal Frm.CrystalReportViewer1.Zoom(100%) Frm.CrystalReportViewer1.Refresh() Frm.ShowDialog() End If AzizCrystal.Close() AzizCrystal.Dispose() Catch ex As Exception 'MessageBox.Show("خطأ غير متوقّع في عمليّة جلب البيانات", "طباعة التقرير") MessageBox.Show(ex.Message, "طباعة التقرير") End Try End If