Crystal Reports empty when printed during runtime(without viewer)

半世苍凉 提交于 2021-02-11 12:51:45

问题


I'm developing a small POS system using VB.Net , MS Sql and Crystal Reports. I have no trouble viewing reports using Cry Rep Viewer. But when i try to print a bill during runtime the report becomes empty. Following is the sequence i'm executing within the procedure.

  • Generate bill no
  • Deduct qty from stocks
  • add the transaction from temp table to final sales table
  • print bill
  • delete temp table transactions
  • clear for next transaction

But my problem comes during the bill printing. Bill does not pickup the necessary records from the sales table. Following is my code for the end transaction. (I am using few of my own methods and functions which are from another class and im also using a fix bill no for testing)

I'm also attaching 2 bills. First 1 is the one viewed and exported from the Cry Report Viewer. The second one is the one with problem, and its empty even though the records exists in the table. Can some one kindly advice me on this matter?

   Private Sub endCurrentTransaction()
    Try
        Dim sqlTempBill As String = "SELECT * FROM tb_transactions where cur_user='" & curUser & "'"
        Dim sqlSales As String = "SELECT * FROM tb_sales where bill_no=''"

        'Get Bill No
        Dim newBillNo As String = generateBillNo()

        'Deduct IT qty
        Dim tempBill As DataTable
        tempBill = myTbClass.myFunctionFetchTbData(sqlTempBill)

        Dim i As Integer = 0
        Dim curQty As Double = 0
        Dim trQty As Double = 0
        Dim updatedQty As Double = 0

        For i = 0 To tempBill.Rows.Count - 1
            curQty = 0
            'Get the Current stock qty
            Dim sqlgetCurQty As String = "SElECT cur_qty FROM tb_stock where it_batch_code='" & tempBill.Rows(i).Item("it_batch_code") & "'"

            conn.Open()
            Dim SqlCmdCurQty As New SqlCommand(sqlgetCurQty, conn)
            Dim DataReadercurQty As SqlDataReader = SqlCmdCurQty.ExecuteReader
            While DataReadercurQty.Read()
                curQty = DataReadercurQty.Item(0)
            End While
            DataReadercurQty.Close()
            conn.Close()

            trQty = tempBill.Rows(i).Item("qty")
            updatedQty = curQty - trQty
            Dim sqlUpdateQtyString As String = "UPDATE tb_stock SET cur_qty=" & Math.Round((updatedQty), 3) & " Where it_batch_code='" & tempBill.Rows(i).Item("it_batch_code") & "'"
            conn.Open()
            Dim SqlCmdQty As New SqlCommand(sqlUpdateQtyString, conn)
            SqlCmdQty.ExecuteNonQuery()
            conn.Close()

            'add to sales
            Dim tempTbSales As DataTable
            tempTbSales = myTbClass.myFunctionFetchTbData(sqlSales)
            Dim dataRow As DataRow = tempTbSales.NewRow
            dataRow("it_code") = Trim(tempBill.Rows(i).Item("it_code"))
            dataRow("it_batch_code") = Trim(tempBill.Rows(i).Item("it_batch_code"))
            dataRow("it_name") = Trim(tempBill.Rows(i).Item("it_name"))
            dataRow("buy_price") = Math.Round(tempBill.Rows(i).Item("buy_price"), 3)
            dataRow("sell_price") = Math.Round(tempBill.Rows(i).Item("sell_price"), 3)
            dataRow("qty") = Math.Round(tempBill.Rows(i).Item("qty"), 3)
            dataRow("gross_val") = Math.Round(tempBill.Rows(i).Item("gross_val"), 3)
            dataRow("discount_val") = Math.Round(tempBill.Rows(i).Item("discount_val"), 3)
            dataRow("net_val") = Math.Round(tempBill.Rows(i).Item("net_val"), 3)
            dataRow("profit_profile") = Trim(tempBill.Rows(i).Item("profit_profile"))
            dataRow("discount_profile") = Trim(tempBill.Rows(i).Item("discount_profile"))
            dataRow("cus_name") = Trim(tempBill.Rows(i).Item("cus_name"))
            dataRow("tr_type") = Trim(cmbTrans.Text)
            dataRow("cr_card_type") = Trim(cmbCardType.Text)
            dataRow("card_no") = Trim(txtCardNo.Text)
            dataRow("bill_no") = newBillNo
            dataRow("discount_profile") = Trim(tempBill.Rows(i).Item("cus_name"))
            dataRow("cur_user") = curUser
            dataRow("added_date") = curServerDateTime
            tempTbSales.Rows.Add(dataRow)
            Call myTbClass.MyMethodUpdateTable(sqlSales, tempTbSales)
        Next

        i = 0

    'Print bill
    Dim cash, balance As Double
    Dim crepBill As New repBill
    crepBill.SetDatabaseLogon("sa", dbPwd)
    cash = Val(Me.txtCash.Text)
    balance = Val(Me.txtBalance.Text)

    crepBill.RecordSelectionFormula = "{TB_SALES.bill_no} ='" & "000015" & "'"
    crepBill.DataDefinition.FormulaFields("txtCash").Text = Format(cash, "#0.00")
    crepBill.DataDefinition.FormulaFields("txtBal").Text = Format(balance, "#0.00")

    crepBill.PrintToPrinter(1, False, 0, 0)
    crepBill.Dispose()

    'delete temp bill table
    For i = 0 To tempBill.Rows.Count - 1
        tempBill.Rows(i).Delete()
    Next
    Call myTbClass.MyMethodUpdateTable(sqlTempBill, tempBill)

    'reset front end
    Call loadBill()
    Call clearCurrentTransaction()
    Call clearCurrentSubTotals()
    Call clearCurCashBalance()

    'Íncrease the bill no by 1
    Call increaseBillNo()

    txtItCode.Focus()
    Catch ex As Exception
    MsgBox("This error was generated at endCurrentTransaction()")
    End Try
End Sub


回答1:


I found out that report need to be refreshed before printing. Report will only take data if it is refreshed.

https://answers.sap.com/answers/13088178/view.html



来源:https://stackoverflow.com/questions/62774069/crystal-reports-empty-when-printed-during-runtimewithout-viewer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!