| |  |  | Miembros: Mensajes: Temas: Online: Ultimo Miembro: | | | 
14-05-2008, 13:11:20
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 151
| | 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.
| 
14-05-2008, 22:17:46
|  | Administrator | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.100
| | 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"... | 
15-05-2008, 12:59:28
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 151
| | 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
| 
15-05-2008, 17:28:27
| | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.155
| | 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. | 
15-05-2008, 18:25:16
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 151
| | 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
| 
15-05-2008, 19:41:36
| | Moderador | | Registrado: dic 2002 Ubicación: Madrid Posts: 4.155
| | 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.
Última edición por acalanto fecha: 15-05-2008 a las 19:44:19.
| 
15-05-2008, 19:45:18
|  | Administrator | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.100
| | 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 !!!
Última edición por J.M.Movilla fecha: 15-05-2008 a las 19:51:44.
| 
15-05-2008, 20:41:37
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 151
| | 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....
__________________
El exito no es un milagro, es una Recopensa
| 
15-05-2008, 20:51:25
|  | Administrator | | Registrado: dic 2002 Ubicación: BURGOS - ESPAÑA Posts: 5.100
| | 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...
Última edición por J.M.Movilla fecha: 15-05-2008 a las 20:57:03.
| 
15-05-2008, 21:03:11
| | Gran Participación en el Foro | | Registrado: sep 2006 Posts: 151
| | 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
| | Herramientas | | | | Desplegado | Mode Lineal |
Normas de Publicación
| no Puedes crear nuevos temas no Puedes responder a temas no Puedes adjuntar archivos no Puedes editar tus mensajes Código [IMG] está habilitado Código HTML está deshabilitado | | | 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
|  |