border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 14-05-2008, 13:11:20
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 151
El_Principiante Valoración +2
Predeterminado Imprimir Grillas con Printer

Hola que tal, una consulta alguien sabe como imprimir las grillas con el metodo printer probablemente sea el menos adecuado pero hasta ahorita es con lo que cuento ya que no tengo otro tipo de reporteadores y el que viene en visual basic no me agrada mucho puesto que no lo conosco del todo. no me interesan los OCX ni tampoco imprimir con el Pinture ya que la impresión se distorciona. si alguien sabe usar este metodo del Printer se los agradeceria mucho. por lo pronto gracias y hasta pronto.



EDITO:
Gracias a todos por prestarme su ayuda, ya logre hacer las impresiones solo que tengo ahora otro problema resulta que la primera pagina si me la imprime bien y las demas me pone un dato en una hoja y otro dato en otra y asi hasta llegar a imprimir como alrededor de 50 hojas. ya que la grilla tiene varios registros. hice esto para poder imprimir en otra pagina pero no logro con el resultado..

ContarFila = ContarFila + 1
If ContarFila > 41 Then
Printer.NewPage 'Llamamos otra pagina
'ContarFila = 0
EncabezadoGrilla 'imprimimos nuevamente el encabezado
End If

con esto me imprime solo 41 filas en la primera hoja el problema esta en las dejas hojas ya que me va imprimiendo un dato por cada hoja cuando deveria imprimirme los demas datos en la siguiente hoja puesto que son 53 registros.

espero su valiosa ayuda por lo pronto gracias...
__________________
El exito no es un milagro, es una Recopensa

Última edición por El_Principiante fecha: 14-05-2008 a las 19:05:54.
Responder Con Cita
  #2 (permalink)  
Antiguo 14-05-2008, 22:17:46
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.100
J.M.Movilla Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Hombre, yo creo que es indispensable que inicialices la variable ContarFila = 0, porque si no, siempre va a seguir valiendo más de 41 y te incrementará nueva página. Ten en cuenta que al primer paso, ContarFila vale 42, y cuando empiece la segunda página valdrá 43 (ContarFila = ContarFila + 1). Así que quita esa vírgulita que convierte esa línea en "comentario"...
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 15-05-2008, 12:59:28
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 151
El_Principiante Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Te agradezco tu Aportación mi estimado J. M. Movilla

de hecho lo puse como comentario por que no me estaba funcionando la variable de ContarFila = 0, me sigue haciendo lo mismo me imprime un monton de paginas en vez de que me imprima las dos que se supone deveria de imprimir ya que la grilla solo contiene 53 registros.
__________________
El exito no es un milagro, es una Recopensa
Responder Con Cita
  #4 (permalink)  
Antiguo 15-05-2008, 17:28:27
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.155
acalanto Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Pero entonces debe existir alguna otra razón en el resto del código para que te ejecute lo mismo si anulas la instrucción ContarFila=0 como si no lo haces.

Las variables no es que funcionen bien o mal, tienen el valor que se le asigna.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 15-05-2008, 18:25:16
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 151
El_Principiante Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Bien, creo que es necesario colocar el codigo donde ejecuto esta sentencia de imprimir para tener un panorama mas amplico y asi me puedan ayudar.

aqui lo tienen:

************************************************** *******************
Private Sub CmdImprimirPeriodos_Click()
Dim Fila As Integer, ContarFila As Integer

'Papel Tamaño Carta = 21.59 x 27.94 Centimetros = 2550 x 3300 pixels

'Imprimimos la hoja en forma Horizontal
Printer.Orientation = vbPRORPortrait '2 Orientación Horizontal vbPRORLandscape '1 Horientación Vertical "vbPRORPortrait"
Printer.ScaleMode = vbCentimeters 'Ponemos la Escala en Centimetros
'Margenes
HorizontalMargen = (21.59 - Printer.ScaleWidth) / 2
VerticalMargen = (27.94 - Printer.ScaleHeight) / 2

HorizontalMargen = 0.1 + HorizontalMargen
VerticalMargen = 0.1 + VerticalMargen

'Imprimimos la Grilla
'---------------------------------------------------------------------------------------
'imprimimos los datos de la grilla

EncabezadoGrilla 'imprimimos el encabezado
'Cargamos nuevas fuentes y tamaños para la grilla
Printer.Font = "Verdana"
Printer.FontSize = 8
Printer.ForeColor = vbBlue
Printer.FontBold = False

VerticalMargen = VerticalMargen + 4
ContarFila = 1

For Fila = 1 To (Me.GrillaPeriodos.Rows - 1)
'Columna 0 Meses
Printer.CurrentX = HorizontalMargen + ((3.5 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 0))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 0)
'Columna 1 Numero de Periodo
Printer.CurrentX = 3.5 + HorizontalMargen + ((2 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 1))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 1)
'Columna 2 Dias a Pagar
Printer.CurrentX = 5.5 + HorizontalMargen + ((2 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 2))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 2)
'Columna 3 Fecha en que inicia el Periodo
Printer.CurrentX = 7.5 + HorizontalMargen + ((3.5 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 3))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 3)
'Columna 4 Fecha en que Termina el Periodo
Printer.CurrentX = 11 + HorizontalMargen + ((3.5 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 4))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 4)
'Columna 5 Partes de un Mes
Printer.CurrentX = 14.5 + HorizontalMargen + ((2 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 5))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 5)
'Columna 6 Status Activo o Inactivo
Printer.CurrentX = 16.5 + HorizontalMargen + ((3 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fil a, 6))) / 2)
Printer.CurrentY = VerticalMargen
Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 6)
'Incrementamos al CurrentY 0.6 para poder desplegar la lista hacia abajo
VerticalMargen = VerticalMargen + 0.6
ContarFila = ContarFila + 1
'Aqui es donde ya estoy atorado.
If ContarFila > 37 Then
Printer.NewPage 'Llamamos otra pagina
EncabezadoGrilla 'imprimimos nuevamente el encabezado
ContarFila = 0
End If
Next Fila

MsgBox "Las Tablas que se Generaron se Estan Imprimiendo en la Impresora:" & vbCrLf & " " & Printer.DeviceName, vbInformation, "Imprimiendo Tablas" 'Printer.Port & "Imprimiendo"

'Final de la impresión
Printer.EndDoc

End Sub

************************************************** *******************


Creo que con esto nos podemos orientar mejor. un Saludo a todos.
__________________
El exito no es un milagro, es una Recopensa
Responder Con Cita
  #6 (permalink)  
Antiguo 15-05-2008, 19:41:36
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.155
acalanto Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Creo que deberías iniciar la variable INICIALMARGEN antes de llamar a encabezarGrilla, tanto al inicio del proceso como cuando detectas que se han impreso 37 líneas por página.


'Margenes
HorizontalMargen = (21.59 - Printer.ScaleWidth) / 2
VerticalMargen = (27.94 - Printer.ScaleHeight) / 2

HorizontalMargen = 0.1 + HorizontalMargen
VerticalMargen = 0.1 + VerticalMargen

Fíjate que utilizas VerticalMargen para posicionar la cabeza de impresión y le vas sumando 0.6, pero en ningún momento del bucle la vuelves aponer a su valor inicial, por lo que la impresora está imprimiendo FUERA del papel y ella misma provoca un salto de página.

Creo que es esto lo que te está pasando.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion

Última edición por acalanto fecha: 15-05-2008 a las 19:44:19.
Responder Con Cita
  #7 (permalink)  
Antiguo 15-05-2008, 19:45:18
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.100
J.M.Movilla Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Código:
Private Sub CmdImprimirPeriodos_Click()
    Dim Fila As Integer, ContarFila As Integer, nIncrem As Single

    'Papel Tamaño Carta = 21.59 x 27.94 Centimetros = 2550 x 3300 pixels
  
    'Imprimimos la hoja en forma Horizontal
    Printer.Orientation = vbPRORPortrait '2 Orientación Horizontal vbPRORLandscape '1 Horientación Vertical "vbPRORPortrait"
    Printer.ScaleMode = vbCentimeters 'Ponemos la Escala en Centimetros
    'Margenes
    HorizontalMargen = (21.59 - Printer.ScaleWidth) / 2 + 0.1
    VerticalMargen = (27.94 - Printer.ScaleHeight) / 2 + 0.1 + 4
    nIncrem = 0.6
  
    'Imprimimos la Grilla
     '---------------------------------------------------------------------------------------
    'imprimimos los datos de la grilla
    
    EncabezadoGrilla 'imprimimos el encabezado
    'Cargamos nuevas fuentes y tamaños para la grilla
    Printer.Font = "Verdana"
    Printer.FontSize = 8
    Printer.ForeColor = vbBlue
    Printer.FontBold = False
        
    ContarFila = 1
        
    For Fila = 1 To (Me.GrillaPeriodos.Rows - 1)
        Printer.CurrentY = VerticalMargen + (ContarFila - 1) * nIncrem

        'Columna 0 Meses
        Printer.CurrentX = HorizontalMargen + ((3.5 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 0))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 0)

        'Columna 1 Numero de Periodo
        Printer.CurrentX = 3.5 + HorizontalMargen + ((2 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 1))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 1)

        'Columna 2 Dias a Pagar
        Printer.CurrentX = 5.5 + HorizontalMargen + ((2 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 2))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 2)

        'Columna 3 Fecha en que inicia el Periodo
        Printer.CurrentX = 7.5 + HorizontalMargen + ((3.5 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 3))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 3)

        'Columna 4 Fecha en que Termina el Periodo
        Printer.CurrentX = 11 + HorizontalMargen + ((3.5 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 4))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 4)

        'Columna 5 Partes de un Mes
        Printer.CurrentX = 14.5 + HorizontalMargen + ((2 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 5))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 5)

        'Columna 6 Status Activo o Inactivo
        Printer.CurrentX = 16.5 + HorizontalMargen + ((3 - Printer.TextWidth(Me.GrillaPeriodos.TextMatrix(Fila, 6))) / 2)
        Printer.Print Me.GrillaPeriodos.TextMatrix(Fila, 6)

        ContarFila = ContarFila + 1

        If ContarFila > 37 Then
            Printer.NewPage 'Llamamos otra pagina
            EncabezadoGrilla 'imprimimos nuevamente el encabezado
            ContarFila = 1
        End If
    Next Fila
        
    ' No sé si el siguiente mensaje se presenta adecuadamente tal como le pones...
    MsgBox "Las Tablas que se Generaron se Estan Imprimiendo en la Impresora:" & vbCrLf & " " & Printer.DeviceName, vbInformation, "Imprimiendo Tablas" 'Printer.Port & "Imprimiendo"
    
    'Final de la impresión
    Printer.EndDoc
  
End Sub
Como ves, no es necesario definir el "CurrentY" para cada columna. Vale con que le definas una vez para toda la fila.

Y, aunque no sea indispensable, verás también que merece la pena cuidar la presentación del código.

Por otra parte, me da la impresión de que estás manejando variables que no has definido. Si te acostumbrases a poner "Option Explicit" como primera línea de todos tus formularios... evitarías esos posibles errores.

Y lo más importante: Ojalá ahora te funcione !!!
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion

Última edición por J.M.Movilla fecha: 15-05-2008 a las 19:51:44.
Responder Con Cita
  #8 (permalink)  
Antiguo 15-05-2008, 20:41:37
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 151
El_Principiante Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Gracias Amigo, J. M. Movilla ya me imprime el contenido en tres hojas solo que me los va desplazando los datos de la fila como en forma de escalera.

voy a colocar mejor mi formulario a ver si asi nos entendemos mejor ya que a lo mejor estoy usando el metodo mas obsoleto hacerca de las impresiones pero me tengo que familiarizar con ellos ya que no tengo otro tipo de programas para poderlos hacer.

asi que ahi va mi formulario por si alguien tambien le interesa posteriormente al sacar periodos de los años por semana.

Perdon se me olvidaba una vez abierto el formulario hay que dar click en el combo y escoger la que dice "Por Semana" y posteriormente clikear en el boton generar periodos para poderlos imprimir....
Archivos Adjuntos
Tipo de Archivo: rar Periodos.rar (7,0 KB, 3 visitas)
__________________
El exito no es un milagro, es una Recopensa
Responder Con Cita
  #9 (permalink)  
Antiguo 15-05-2008, 20:51:25
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.100
J.M.Movilla Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Lo que debes hacer es pulsar la tecla [F9] sobre la línea "Printer.FontBold = False". Luego pulsas [F5] y cuando veas que se te para sobre la línea en que pusiste el Stop, vas pulsando [F8] y pones el cursor sobre el nombre de las distintas variables, para ver qué valor tienen en cada momento, y por qué se incrementa la línea.

Eso es lo que se dice "hacer debug", que es fundamental manejarlo bien para que seas tú el que aprendas a corregir esos pasos que a veces dan respuestas inesperadas...

Por lo que dices, a lo mejor es necesario definir el CurrentY en todas las columnas, y tienes que poner

Printer.CurrentY = VerticalMargen + (ContarFila - 1) * nIncrem

antes de cada Printer.CurrentX...

Prueba a ver si es ése el problema...
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion

Última edición por J.M.Movilla fecha: 15-05-2008 a las 20:57:03.
Responder Con Cita
  #10 (permalink)  
Antiguo 15-05-2008, 21:03:11
Gran Participación en el Foro
 
Registrado: sep 2006
Posts: 151
El_Principiante Valoración +2
Predeterminado Re: Imprimir Grillas con Printer

Bien, Gracias Amigo J.M.Movilla lo voy a probar mañana por que hoy ya me tengo que ir y mañana les contare como me fue con mi problema cuando logre solucionarlo lo voy a postear para si mas de alguno lo necesita. por lo pronto Gracias a J.M.Movila y Acalanto por su valioso apoyo que me estan dando. Dios me los Bendiga Ricamente... Hasta Mañana...
__________________
El exito no es un milagro, es una Recopensa
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado



La franja horaria es GMT. Ahora son las 06:24:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right