none
Impresion Masiva RRS feed

  • Pregunta

  • Sres. Tengo el siguiente problema, no se si a alguien le habrá sucedido, pero al tratar de imprimir un documento o reporte hecho con Crystal Report, dentro de un ciclo FOR, este se detiene o queda sin hacer nada a las 75 iteraciones, la forma de realizar la impresion se realiza de la siguiente forma (les dejo el codigo)

    Private Sub BtnImprimirCartolas_Click(sender As System.Object, e As System.EventArgs) Handles BtnImprimirCartolas.Click
            Try
                Dim Fila As Integer = 1
                For Each row As DataGridViewRow In DgSucursales.Rows ' SE RECORRE LA GRILLA OBTENIENDO SUCURSAL
                    If row.Index = (DgSucursales.Rows.Count - 1) Then
                        Exit For
                    Else
                        Sucursal = row.Cells(0).Value ' SE OBTIENE LA SUCURSAL PARA PODER CARGAR EL LISTADO DE CIUDADES X SUCURSAL
                        MessageBox.Show("Se comenzará a imprimir las cartolas de la Sucursal= " & Sucursal & _
                                        ". Verifique que la bandeja de papel de la impresora se encuentre" & _
                                        " con papel.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

                        CargarGRillaCiudades(Sucursal)  ' SE CARGA EL LISTADO DE CIUDADES DE CADA SUCURSAL

                        For Each ROW3 As DataGridViewRow In DgCiudades.Rows  ' SE RECORRE EL LISTADO DE CIUDADES PARA OBETENER EL LISTADO DE CLIENTES
                            If ROW3.Index = (DgCiudades.Rows.Count - 1) Then
                                Exit For
                            Else
                                Ciudad = ROW3.Cells(1).Value
                                CargarListadoPorCiudad(Sucursal, Ciudad) ' CARGO LISTADO DE CLIENTES (RUT-PROCESO) PARA COMENZAR A IMPRIMIR

                                For Each row2 As DataGridViewRow In DgListadoPorSucursales.Rows
                                    If row2.Index = (DgListadoPorSucursales.Rows.Count - 1) Then
                                        Exit For
                                    Else
                                        Dim conn As OdbcConnection
                                        Dim ds As New DataSet
                                        Dim da As New OdbcDataAdapter
                                        Dim dt As New DataTable
                                        Dim comando As New OdbcCommand


                                        dt.Clear()
                                        conn = New OdbcConnection(Login.FastConextion)
                                        comando.Connection = conn
                                        comando.CommandTimeout = 0
                                        Dim Rut As String

                                        Rut = row2.Cells(0).Value

                                        Periodo = row2.Cells(1).Value

                                        comando.CommandText = "SELECT * FROM CUENTACORRIENTE_E WHERE CTT_RUTCLI='" & Rut & _
                                              "' AND PER_FAC_CODIGO='" & Periodo & "'"
                                        conn.Open()
                                        da = New OdbcDataAdapter(comando)
                                        da.Fill(dt)

                                        Dim reporte As New EstadoDeCuenta
                                        reporte.SetDataSource(dt)
                                        conn.Close()
                                        CargarGrafico(Rut, Periodo)
                                        configureCrystalReports() ' conexion
                                       reporte.PrintToPrinter(1, False, 0, 0)
                                    End If
                                Next
                            End If
                        Next

                    End If
                Next
            Catch ex As Exception
                Dim msg As String = ex.Message
            End Try
        End Sub

    Pensé que era un problema con los datos pero no lo es, elimine el dato donde se detiene pero igual se detuvo en 75 iteraciones.

    Alguien puede ayudarme por favor.

    viernes, 10 de mayo de 2013 14:55

Respuestas

  • Gracias Vicdeju voy a tenerlo presente, pero encontre la solución por ahora, me faltan realizar mas pruebas pero por lo menos me funciona hasta el momento, la solucion fue agregar dos sentencias super fáciles y comunes.

    Reporte.refresh()

    Reporte.Close()

    Les dejo el codigo:

    Private Sub BtnImprimirCartolas_Click(sender As System.Object, e As System.EventArgs) Handles BtnImprimirCartolas.Click
            Try
                Dim Fila As Integer = 1
                For Each row As DataGridViewRow In DgSucursales.Rows ' SE RECORRE LA GRILLA OBTENIENDO SUCURSAL
                    If row.Index = (DgSucursales.Rows.Count - 1) Then
                        Exit For
                    Else
                        Sucursal = row.Cells(0).Value ' SE OBTIENE LA SUCURSAL PARA PODER CARGAR EL LISTADO DE CIUDADES X SUCURSAL
                        MessageBox.Show("Se comenzará a imprimir las cartolas de la Sucursal= " & Sucursal & _
                                        ". Verifique que la bandeja de papel de la impresora se encuentre" & _
                                        " con papel.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

                        CargarGRillaCiudades(Sucursal)  ' SE CARGA EL LISTADO DE CIUDADES DE CADA SUCURSAL

                        For Each ROW3 As DataGridViewRow In DgCiudades.Rows  ' SE RECORRE EL LISTADO DE CIUDADES PARA OBETENER EL LISTADO DE CLIENTES
                            If ROW3.Index = (DgCiudades.Rows.Count - 1) Then
                                Exit For
                            Else
                                Ciudad = ROW3.Cells(1).Value
                                CargarListadoPorCiudad(Sucursal, Ciudad) ' CARGO LISTADO DE CLIENTES (RUT-PROCESO) PARA COMENZAR A IMPRIMIR

                                For Each row2 As DataGridViewRow In DgListadoPorSucursales.Rows
                                    If row2.Index = (DgListadoPorSucursales.Rows.Count - 1) Then
                                        Exit For
                                    Else
                                        Dim conn As OdbcConnection
                                        Dim ds As New DataSet
                                        Dim da As New OdbcDataAdapter
                                        Dim dt As New DataTable
                                        Dim comando As New OdbcCommand


                                        dt.Clear()
                                        conn = New OdbcConnection(Login.FastConextion)
                                        comando.Connection = conn
                                        comando.CommandTimeout = 0
                                        Dim Rut As String

                                        Rut = row2.Cells(0).Value

                                        Periodo = row2.Cells(1).Value

                                        comando.CommandText = "SELECT * FROM CUENTACORRIENTE_E WHERE CTT_RUTCLI='" & Rut & _
                                              "' AND PER_FAC_CODIGO='" & Periodo & "'"
                                        conn.Open()
                                        da = New OdbcDataAdapter(comando)
                                        da.Fill(dt)

                                        Dim reporte As New EstadoDeCuenta

    Reporte.refresh() ' Ahora no se por que va antes de cargarle el Dataset 
                                        reporte.SetDataSource(dt)
                                        conn.Close()
                                        CargarGrafico(Rut, Periodo)
                                        configureCrystalReports() ' conexion
                                       reporte.PrintToPrinter(1, False, 0, 0)

    Reporte.Close() ' Creo que al no cerrar el Control, solo se puede abrir 75 veces.
                                    End If
                                Next
                            End If
                        Next

                    End If
                Next
            Catch ex As Exception
                Dim msg As String = ex.Message
            End Try
        End Sub

    --------------------------------------------------------------------------------------------------------

    Espero sea de ayuda para alguien mas.

    Slds.

    Sonyx.

    viernes, 10 de mayo de 2013 16:30

Todas las respuestas

  • Buenas,

    Hay una variable en el registro de Windows que se llama "PrintJobLimit", cambiala a 0 y se acabo el problema.

    Un saludo.

    viernes, 10 de mayo de 2013 16:21
  • Gracias Vicdeju voy a tenerlo presente, pero encontre la solución por ahora, me faltan realizar mas pruebas pero por lo menos me funciona hasta el momento, la solucion fue agregar dos sentencias super fáciles y comunes.

    Reporte.refresh()

    Reporte.Close()

    Les dejo el codigo:

    Private Sub BtnImprimirCartolas_Click(sender As System.Object, e As System.EventArgs) Handles BtnImprimirCartolas.Click
            Try
                Dim Fila As Integer = 1
                For Each row As DataGridViewRow In DgSucursales.Rows ' SE RECORRE LA GRILLA OBTENIENDO SUCURSAL
                    If row.Index = (DgSucursales.Rows.Count - 1) Then
                        Exit For
                    Else
                        Sucursal = row.Cells(0).Value ' SE OBTIENE LA SUCURSAL PARA PODER CARGAR EL LISTADO DE CIUDADES X SUCURSAL
                        MessageBox.Show("Se comenzará a imprimir las cartolas de la Sucursal= " & Sucursal & _
                                        ". Verifique que la bandeja de papel de la impresora se encuentre" & _
                                        " con papel.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

                        CargarGRillaCiudades(Sucursal)  ' SE CARGA EL LISTADO DE CIUDADES DE CADA SUCURSAL

                        For Each ROW3 As DataGridViewRow In DgCiudades.Rows  ' SE RECORRE EL LISTADO DE CIUDADES PARA OBETENER EL LISTADO DE CLIENTES
                            If ROW3.Index = (DgCiudades.Rows.Count - 1) Then
                                Exit For
                            Else
                                Ciudad = ROW3.Cells(1).Value
                                CargarListadoPorCiudad(Sucursal, Ciudad) ' CARGO LISTADO DE CLIENTES (RUT-PROCESO) PARA COMENZAR A IMPRIMIR

                                For Each row2 As DataGridViewRow In DgListadoPorSucursales.Rows
                                    If row2.Index = (DgListadoPorSucursales.Rows.Count - 1) Then
                                        Exit For
                                    Else
                                        Dim conn As OdbcConnection
                                        Dim ds As New DataSet
                                        Dim da As New OdbcDataAdapter
                                        Dim dt As New DataTable
                                        Dim comando As New OdbcCommand


                                        dt.Clear()
                                        conn = New OdbcConnection(Login.FastConextion)
                                        comando.Connection = conn
                                        comando.CommandTimeout = 0
                                        Dim Rut As String

                                        Rut = row2.Cells(0).Value

                                        Periodo = row2.Cells(1).Value

                                        comando.CommandText = "SELECT * FROM CUENTACORRIENTE_E WHERE CTT_RUTCLI='" & Rut & _
                                              "' AND PER_FAC_CODIGO='" & Periodo & "'"
                                        conn.Open()
                                        da = New OdbcDataAdapter(comando)
                                        da.Fill(dt)

                                        Dim reporte As New EstadoDeCuenta

    Reporte.refresh() ' Ahora no se por que va antes de cargarle el Dataset 
                                        reporte.SetDataSource(dt)
                                        conn.Close()
                                        CargarGrafico(Rut, Periodo)
                                        configureCrystalReports() ' conexion
                                       reporte.PrintToPrinter(1, False, 0, 0)

    Reporte.Close() ' Creo que al no cerrar el Control, solo se puede abrir 75 veces.
                                    End If
                                Next
                            End If
                        Next

                    End If
                Next
            Catch ex As Exception
                Dim msg As String = ex.Message
            End Try
        End Sub

    --------------------------------------------------------------------------------------------------------

    Espero sea de ayuda para alguien mas.

    Slds.

    Sonyx.

    viernes, 10 de mayo de 2013 16:30