Ayuda con Data report

Amigo muchísimas gracias por preocuparte por mi problema ya que no encuentro solución al mismo, quiero ser más especifico,
mira yo deseo varias cosas como:
1)Antes de enviar a Imprimir quiero modificar en tiempo de ejecución el tamaño de papel de la impresora, por que los reportes a imprimir son de diferente tipo de tamaño de papel, e imprimo en una impresora con papel continuo, yo quiero especificar el tamaño de papel para que al momento de terminar de imprimir el reporte no se corra la hoja de impresión, es decir, no pase a la siguiente hoja de impresión.
Algunas personas me han dicho que no se puede, por que el tamaño del papel lo determina la configuración de la impresora, y que no se puede modificar,
otros me han dicho haciendo la siguiente rutina:
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim tm as Integer 'tamaño de la hoja
Printer.ScaleMode=vbCentimeters
Printer.Heigth=tm
DataReport.Heigth=tm
DataReport.ButtomMargin=tm
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Lo intentado y no funciona, crees que excita otro método, por que como ultimo recurso quisiera hacerlo mediante las API's de windows, y el problema es ese no se las funciones.
Sino se puede, quisiera que por favor me ayudases a decirme como puedo enviar a imprimir con cualquier objeto de VB, u otro control, y que la impresión salga de la siguiente forma:
----------------------------------------------------------------
Cod Cant PrecioC PrecioV Importe
----------------------------------------------------------------
001 1 1.200 1.600 1.600
002 11 21.200 1.600 1.600
003 1 1.200 1.600 1.600
004 1 1.200 1.600 1.600
El problema es que no se como imprimir justificando cada columna a la izquierda cuando son cantidades numéricas.

1 respuesta

Respuesta
1
El código que me muestras es bastante correcto, suponiendo que la página tenga las mismas dimensiones, tanto de alto como de ancho, pero hay que tener una cosa en cuenta :
El objeto printer, requiere que se le pasen las medidas en Twips ( unidad de medida inventada por microsoft ). Cada milímetro es igual a 56,7 Twips.
Así al definir el tamaño de la página, se debería hacer :
Printer.ScaleMode=vbMillimetres
Printer.Heigth=tm *56.7
DataReport.Heigth=tm * 56.7
No se si esto funcionará con el DataReport, pero si te montas tu propio módulo de impresión ( aconsejable si tienes demasiados problemas con el DataReport), te será de utilidad.
Ahora vamos ha hacer un ejemplo de como imprimir el texto que has mandado. Una vez creado el objeto printer y hechas todas las especificaciones de tamñaos deseados :
Printer. Line (xinicial, yinicial) - (xfinal, yfinal) ' Te hace una línia desde la una posición (x, y) de inicio hasta una posición (x, y) final.
y = número ' guardamos la y donde queremos imprimir
Printer.Currenty = y
Printer.Currentx = num
Printer. Print "Cod"
Así consigues posicionar el texto deseado. PAra seguir con el resto de la línea solo deberías especificar otra CurrentX más grande y asignar la variable y, para que siga en la misma línea. También puedes imprimir toda la línea en la misma cadena :
Printer. Print "cod Cant PrecioC PrecioV Importe"
Este método tiene el inconveniente de no saber en que X empexará cada columna. Del otro modo sabes exactamente donde tienes que imprimir los campos que vendrán a continuación ( y la alineación que debes darles).
Sobre la justificación a la derecha de los números (porque los número siempre se deben justificar a la derecha con un mismo formato para evitar la confusión en las magnitudes). Al imprimir la cadena que deseas que esté justificada a la derecha, solo hay que poner :
Printer.CurrentX = x - TextWidth(Cadena)
Donde X es el límite derecho donde quieres poner la cadena. Después solo hay que imprimir la cadena (printer. Print). De esta forma simple se puede tener una perfecta columna, alineada a la derecha.
Consejos :
Si no quieres usar programas externos como el DataReport para las impresiones ( a veces dan problemas extraños ), construye un módulo propio para las impresiones, donde tengas una función que puedas pasarle una X, una Y, y una justificación (Derecha, izquierda, Centrado), incluso si quieres el texto en negrita etc, y autómaticamente te haga todos los pasos comentados anteriormente (Printer. CurrentX, CurrentY, etc).
Al principio irás algo más lento que con el DataReport, pero a medida que vayas incluyendo funcionalidades, verás que con la llamada a tu función, podrás imprimir texto en negrita, cursiva, centrado y todo lo que quieras, simplemente con una llamada. Y con un bucle, poder crear un listado como el que me has mostrado.
Siento lo largo que me ha quedado el escrito, pero si dispones de algo de tiempo, la creación de este módulo, te dará la oportunidad de crear impresiones más flexibles, más a tu gusto.
Espero que te haya resuelto alguna duda, y si he dejado alguna por contestar o te surgen de nuevas, ya sabes.
Magne

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas