Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Imprimir recordset - expertos en el objeto printer

Estas en el tema de Imprimir recordset - expertos en el objeto printer en el foro de Visual Basic clásico en Foros del Web. Bueno quiero imprimir una lista pero lo que necesito por ahora es imprimir un recorset igual a esta imagen . El codigo que tengo es ...
  #1 (permalink)  
Antiguo 11/10/2008, 23:43
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 2 meses
Puntos: 2
Imprimir recordset - expertos en el objeto printer

Bueno quiero imprimir una lista pero lo que necesito por ahora es imprimir un recorset igual a esta imagen.

El codigo que tengo es este, se manejar un poco el objeto printer pero me atasque con esto, quiero hacer lo mismo de imagen, pero los campos codprod y precioVenta quedan juntos en una misma fila y las cabeceras esta descuadradas(podria usar currentx y currentY pero seria mucho trabajo y repetir las cordenadas muchas veces), para separarlas intente separar con espacios en blanco pero debe haber otra forma
Código:
Printer.Print "Descripción" & "                " & "Precio"
Lo mismo hize con el rsTemporal


Código:
Private Sub cmdImprimir_Click()
Printer.Print
Printer.CurrentX = 800
Printer.Print "Descripción" & " " & "Precio"
Printer.Print

rsTemporal.MoveFirst
Do Until rsTemporal.EOF
With rsTemporal
  Printer.CurrentX = 800
  Printer.Print .Fields("nomprod") & " " & .Fields("precioventa")
End With
rsTemporal.MoveNext
Loop

Printer.EndDoc
End Sub

Última edición por KingColt; 11/10/2008 a las 23:56
  #2 (permalink)  
Antiguo 12/10/2008, 03:41
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Imprimir recordset - expertos en el objeto printer

Cita:
Iniciado por KingColt Ver Mensaje
Bueno quiero imprimir una lista pero lo que necesito por ahora es imprimir un recorset igual a esta imagen.

El codigo que tengo es este, se manejar un poco el objeto printer pero me atasque con esto, quiero hacer lo mismo de imagen, pero los campos codprod y precioVenta quedan juntos en una misma fila y las cabeceras esta descuadradas(podria usar currentx y currentY pero seria mucho trabajo y repetir las cordenadas muchas veces), para separarlas intente separar con espacios en blanco pero debe haber otra forma
Para alinear los importes en la misma columna, prueba así:

Código:
Private Sub cmdImprimir_Click()
Dim iCol As Integer, iFila As Integer, sImp As String
    
iCol = 5        ' margen izquierdo
iFila = 2       ' 1ª línea de págima

' inicializamos la impresora
Printer.Print "";
With Printer
    .ScaleMode = vbCharacters
    .FontName = "LinePrinter"
    .FontSize = 8
    .CurrentY = iFila
    .CurrentX = iCol
End With

' encabezado del informe
Printer.CurrentX = iCol
Printer.Print "Descripción";
Printer.CurrentX = iCol + 75
Printer.Print "Precio"
Printer.Print

' impresión de los datos
rsTemporal.MoveFirst
Do Until rsTemporal.EOF
    With rsTemporal
        Printer.CurrentX = iCol
        Printer.Print !nomprod;
        sImp = Format(!precioventa, "#,##0.00")
        Printer.CurrentX = 80 - (Printer.TextWidth(sImp))
        Printer.Print sImp
        Printer.CurrentY = Printer.CurrentY + 0.3
    End With
    rsTemporal.MoveNext
Loop
Printer.EndDoc
End Sub
Nota: 80 es la posición derecha (en caracteres) de la columna a imprimir el campo 'precioventa'. Atento al punto y coma después del campo 'nomprod' para que imprima en la misma línea.

  #3 (permalink)  
Antiguo 12/10/2008, 04:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Imprimir recordset - expertos en el objeto printer

lo mas sencillo es poner Tab de la siguiente manera

Private Sub cmdImprimir_Click()
Printer.Print
Printer.CurrentX = 800
Printer.Print "Descripción" ; 'hay que poner ; al final para mantener la misma linea, si lo quitas se escribe lo siguiente en otra linea
Printer.Print Tab(80); "Precio"

rsTemporal.MoveFirst
Do Until rsTemporal.EOF
With rsTemporal
Printer.CurrentX = 800
Printer.Print .Fields("nomprod") ;
Printer.Print Tab(80); Fields("precioventa")
End With
rsTemporal.MoveNext
Loop

Printer.EndDoc
End Sub

jugando con los Tab colocas cada cosa en su sitio.
  #4 (permalink)  
Antiguo 12/10/2008, 04:41
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Imprimir recordset - expertos en el objeto printer

Cita:
Iniciado por redpos Ver Mensaje
lo mas sencillo es poner Tab de la siguiente manera

Private Sub cmdImprimir_Click()
Printer.Print
Printer.CurrentX = 800
Printer.Print "Descripción" ; 'hay que poner ; al final para mantener la misma linea, si lo quitas se escribe lo siguiente en otra linea
Printer.Print Tab(80); "Precio"

rsTemporal.MoveFirst
Do Until rsTemporal.EOF
With rsTemporal
Printer.CurrentX = 800
Printer.Print .Fields("nomprod") ;
Printer.Print Tab(80); Fields("precioventa")
End With
rsTemporal.MoveNext
Loop

Printer.EndDoc
End Sub

jugando con los Tab colocas cada cosa en su sitio.
Pero, además que no lo va a imprimir formateado como él quiere, si los números no tienen los mismos dígitos, no los va a alinear con Tab.

p.e.
numero1....1256,30
numero2....336,50


cuando debería ser:
Numero1....1.256,30
Numero2......336,50


  #5 (permalink)  
Antiguo 12/10/2008, 05:41
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Imprimir recordset - expertos en el objeto printer

Tienes Razon para alinear los datos númericos habria que usar una función teniendo en cuenta el números de dígitos, pero eso es otra guerra.
  #6 (permalink)  
Antiguo 12/10/2008, 22:54
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Imprimir recordset - expertos en el objeto printer

Bueno agregue mas columnas y todo perfecto.
Ahora al poner un campo contenido en txtTotal que esta fuera del bucle, se descuadra con
relacion al campo !subTotal que esta dentro del bucle, pero solo a veces y no pillo donde esta el error de por que se descuadra, solo sucede esto cuando la lista es muy extensa, dejo esta imagen para que vean el problema

Código:
Private Sub cmdImprimir_Click()
Dim iCol As Integer, iFila As Integer, sImp As String, sImp2 As String, sImp3 As String
    
iCol = 5        ' margen izquierdo
iFila = 2       ' 1ª línea de págima

' Inicializamos la impresora
Printer.Print "";
With Printer
    .ScaleMode = vbCharacters
    .FontName = "LinePrinter"
    .FontSize = 9
    .CurrentY = iFila
    .CurrentX = iCol
End With

Printer.Print "Fecha" & " : " & txtFecha;
Printer.CurrentX = 56
Printer.Print "Boleta Nº" & " : " & txtBoleta
Printer.Print

' Encabezado del informe
Printer.CurrentX = iCol
Printer.Print "Descripción";
Printer.CurrentX = iCol + 39.5
Printer.Print "Precio";
Printer.CurrentX = iCol + 47.5
Printer.Print "Cantidad";
Printer.CurrentX = iCol + 58
Printer.Print "Subtotal";
Printer.Print

'Printer.FontBold = False
rsTemporal.MoveFirst
Do Until rsTemporal.EOF
    With rsTemporal
        Printer.CurrentX = iCol
        Printer.Print !nomProd;
        sImp = Format(!precioVenta, "###0.00")
        Printer.CurrentX = 49 - (Printer.TextWidth(sImp)) 'Alinea los decimales a la derecha?
        Printer.Print sImp;
       
        sImp2 = Format(!cantidad)
        Printer.CurrentX = 59 - (Printer.TextWidth(sImp2))
        Printer.Print sImp2;
        
        sImp3 = Format(!SubTotal, "###0.00")
        Printer.CurrentX = 69 - (Printer.TextWidth(sImp3))
        Printer.Print sImp3;
        
        Printer.CurrentY = Printer.CurrentY + 0.9 'Espacio entre cada fila del rs
    End With
    rsTemporal.MoveNext
Loop

Printer.Print
Printer.CurrentX = 69 - (Printer.TextWidth(sImp3))
Printer.Print Trim(txtTotal)
Printer.Print
Printer.CurrentX = 5
Printer.Print "Vendedor" & " : " & dtcEmpleado.Text
Printer.EndDoc

End Sub
saludos
  #7 (permalink)  
Antiguo 13/10/2008, 02:44
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Imprimir recordset - expertos en el objeto printer

Prueba así:

....
Printer.Print
txtTotal = Format(txtTotal, "###0.00")
Printer.CurrentX = 69 - (Printer.TextWidth(txtTotal))
Printer.Print txtTotal



Saludos
  #8 (permalink)  
Antiguo 13/10/2008, 10:39
 
Fecha de Ingreso: febrero-2008
Mensajes: 303
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Imprimir recordset - expertos en el objeto printer

Gracias tio, no pense en hacerlo de esa manera jeje, ya funciona bien

saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:11.