2015-12-30 4 views
2

Мне нужно создать хрустальный отчет для отображения данных в двух таблицах (т. Е. Sales_Invoice и Sales_Invoice_Items) .Sales_Invoice_Items имеет чужой от Sales_Invoice.I потребность чтобы отобразить отчет, как это,Как создать отчет о счете продаж в отчете Crystal (данные привязки в двух таблицах)

enter image description here

Я создал отчет кристалл для отображения данных, как это. Данные в таблице Sales_Invoice правильно сгруппированы по отношению к invoice_no. Но Его дисплей все данные в таблицах Sales_Invoice_Items в каждом Sales_Invoice row.I необходимо отобразить данные Sales_Invoice_Items по отношению к иностранным Sales_Invoice в Sales_Invoice_Items

enter image description here

Тогда я Bind с ней следующий код.

private DataSet getData() 
    { 
     DataSetSalesReport ds = new DataSetSalesReport(); 
     try 
     { 
      using (SqlConnection con = new SqlConnection(DBCon.conStr)) 
      { 
       con.Open(); 
       SqlCommand cmd = new SqlCommand(AppConstraints.GET_SALES_REPORT); 
       cmd.Connection = con; 
       cmd.CommandType = CommandType.StoredProcedure; 

       SqlDataReader rd = cmd.ExecuteReader(); 
       decimal slno = 1; 
       while (rd.Read()) 
       { 
        DataRow dr = ds.Tables["DataTable1"].NewRow(); 
        dr["Id"] = rd["Id"].ToString(); 
        dr["invoiceno"] = rd["invoiceno"].ToString(); 
        dr["invoice_date"] = rd["invoice_date"].ToString(); 
        dr["delivery_date"] = rd["delivery_date"].ToString(); 
        dr["account"] = rd["account"].ToString(); 
        dr["customer"] = rd["customer"].ToString(); 
        dr["gross_amount"] = rd["gross_amount"].ToString(); 
        dr["discount"] = rd["discount"].ToString(); 
        dr["total_tax"] = rd["total_tax"].ToString(); 
        dr["net_amount"] = rd["net_amount"].ToString(); 
        dr["cash_discount"] = rd["cash_discount"].ToString(); 
        dr["freight_charge"] = rd["freight_charge"].ToString(); 
        dr["additional"] = rd["additional"].ToString(); 
        dr["paid"] = rd["paid"].ToString(); 
        dr["balance"] = rd["balance"].ToString(); 
        dr["balancepaid_date"] = rd["balancepaid_date"].ToString(); 
        dr["note"] = rd["note"].ToString(); 
        dr["total_amount"] = rd["total_amount"].ToString(); 
        dr["payment_mode"] = rd["payment_mode"].ToString(); 
        dr["ac"] = rd["ac"].ToString(); 
        dr["reg_date"] = rd["reg_date"].ToString(); 
        dr["last_update"] = rd["last_update"].ToString(); 
        dr["invoice_note"] = rd["invoice_note"].ToString(); 
        dr["slno"] = slno++.ToString(); 
        ds.Tables["DataTable1"].Rows.Add(dr); 

        using (SqlConnection con1 = new SqlConnection(DBCon.conStr)) 
        { 
         con1.Open(); 
         SqlCommand cmd1 = new SqlCommand(AppConstraints.GET_SALES_ITEMS_REPORT); 
         cmd1.Connection = con1; 
         cmd1.CommandType = CommandType.StoredProcedure; 
         cmd1.Parameters.AddWithValue("@Id", rd["Id"].ToString()); 
         SqlDataReader rd1 = cmd1.ExecuteReader(); 
         decimal j = 1; 
         while(rd1.Read()) 
         { 
          DataRow dr1 = ds.Tables["DataTable2"].NewRow(); 
          dr1["Id"] = rd1["Id"].ToString(); 
          dr1["invoice_id"] = rd["Id"].ToString(); 
          dr1["item_name"] = rd1["item_name"].ToString(); 
          dr1["barcode"] = rd1["barcode"].ToString(); 
          dr1["rate"] = rd1["rate"].ToString(); 
          dr1["discount"] = rd1["discount"].ToString(); 
          dr1["qty"] = rd1["qty"].ToString(); 
          dr1["unit"] = rd1["unit"].ToString(); 
          dr1["tax"] = rd1["tax"].ToString(); 
          dr1["net"] = rd1["net"].ToString(); 
          dr1["mrp"] = rd1["mrp"].ToString(); 
          dr1["slno"] = j++.ToString(); 

          ds.Tables["DataTable2"].Rows.Add(dr1); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

     return ds; 
    } 

Я называю выше методом в Window_Loaded события в окне WPF

 private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     ReportDocument report = new ReportDocument(); 
     report.Load("rptSalesReport.rpt"); 
     report.SetDataSource(getData()); 
     PrintSalesReport.ViewerCore.ReportSource = report; 
     PrintSalesReport.ToggleSidePanel = SAPBusinessObjects.WPF.Viewer.Constants.SidePanelKind.None; 
    } 

Мой DataSet показан ниже

enter image description here

После его выполнения я получил следующий результат

enter image description here

В приведенном выше виде; он отображает все данные Sales_invoice_Items ниже в каждой из данных Sales_Invoice.

Мне нужно отобразить данные Sales_Invoice в отношении его данных Sales_Invoice_Items (Sales_Invoice_Items содержит внешний ключ Sales_Invoice). Мне нужна ваша помощь для этого.

Спасибо

ответ

0

Использование Sub Report решить эту проблему enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^