Impresión

Me gustaría que me dijeras como imprimir textbox que contienen cantidades pero ordenadas de derecha a izquierda porque lo quiero para una factura
Utilizo el printer. Currentx y y para indicar las coordenadas pero cuando imprime me hace esto:
2.34
1234.34
Y necesito que salgan ordenados al revez porque en la factura necesitan estar justificados por la derecha.
      2.34
1234.34
LLevo bastante tiempo con este problema y nadie me puede dar una solución.
Respuesta
1
Lo mismito me sucedió
Te voy a dar la idea para solucionarlo
Tienes una posición, a esta posición le restas el ancho ( no se refiere al numero de caracteres) del resultado: por ejemplo:
1500.00 no es lo mismo que
1500 no tienen el mismo ancho.
Pero primero calcula el ancho de esa cadena (aunque sea numérico)
Busca la función que trae el propio visual basic para calcular ancho de canedas.
Suerte y no dudes en consultar.

3 respuestas más de otros expertos

Respuesta
1
Pásame el pedazo de código donde utilizas el currentx
se alinear a la derecha, pero necesites que me pases el código completo así te lo armo.
Es algo así capaz que lo haces.
printer.currenty= 7
Printer.CurrentX = 10 - Printer.TextWidth(variable)
printer.print = variable
Así alineo a la derecha.
Mira en la primer parte del código cálculo las cantidades para guardarlas en textbox y en la parte de
abajo las imprimo con las coordenadas, pero el detalle es que supongo que cuando se trata de coordenadas toma en cuanta de izquierda a derecha por eso cuando me imprime me imprime las cantidades alineadas a la izquierda y ya vez que generalmente en las facturas las cantidades son alineadas a la derecha
Private Sub calcular_Click()
Dim a, b, c, d, e, f, g, h, r1, iv, st, ri, tn As Double
a = importe1(16).Text
b = importe2(17).Text
c = importe3(18).Text
d = importe4(19).Text
e = importe5(20).Text
f = importe6(21).Text
g = importe7(22).Text
h = importe8(23).Text
r1 = 0
iv = 0
st = 0
ri = 0
tn = 0
r1 = (Val(a) + Val(b) + Val(c) + Val(d) + Val(e) + Val(f) + Val(g) + Val(h))
I.Text = Format(Format(r1, "#,###.00"), "@@@@@@@@@@@")
'I.Text = Format(r1, "###,###.00")
iv = Val(r1) * 0.15
iva(25).Text = Format(Format(iv, "#,###.00"), "@@@@@@@@@@@")
'iva(25).Text = Format(iv, "###,###.00")
st = (Val(a) + Val(b) + Val(c) + Val(d) + Val(e) + Val(f) + Val(g) + Val(h)) + (r1 * 0.15)
suto.Text = Format(Format(st, "#,###.00"), "@@@@@@@@@@@")
'suto.Text = Format(st, "###,###.00")
ri = Val(a) * 0.04
reten.Text = Format(Format(ri, "#,###.00"), "@@@@@@@@@@@")
'reten.Text = Format(ri, "###,###.00")
tn = (st) - (Val(a) * 0.04)
total(26).Text = Format(Format(tn, "#,###.00"), "@@@@@@@@@@@")
'total(26).Text = Format(tn, "###,###.00")
End Sub
Private Sub calculo2_Click()
Dim valor1, valor2 As Double
valor2 = Val(PU.Text)
valor1 = 0
valor1 = Val(valor2)
PUF.Text = Format(valor1, "###,###.00")
'importe1(16).Text = Format(CLng(valor1), "###,###.00")
End Sub
Private Sub Command1_Click()
Printer.PaperSize = 1
'tamaño A4
Printer.ScaleMode = 6 'mm
Printer.CurrentX = 30
Printer.CurrentY = 37
Printer.Print a1(1).Text
Printer.CurrentX = 30
Printer.CurrentY = 43
Printer.Print a1(0).Text
Printer.CurrentX = 30
Printer.CurrentY = 49
Printer.Print a1(2).Text
Printer.CurrentX = 30
Printer.CurrentY = 55
Printer.Print a1(3).Text
Printer.CurrentX = 30
Printer.CurrentY = 61
Printer.Print a1(4).Text
Printer.CurrentX = 160
Printer.CurrentY = 51.5
Printer.Print dia.Text
Printer.CurrentX = 175
Printer.CurrentY = 51.5
Printer.Print mes(5).Text
Printer.CurrentX = 190
Printer.CurrentY = 51.5
Printer.Print anio(6).Text
Printer.CurrentX = 15
Printer.CurrentY = 85
Printer.Print viaje(0).Text
Printer.CurrentX = 15
Printer.CurrentY = 91
Printer.Print viaje(1).Text
Printer.CurrentX = 15
Printer.CurrentY = 97
Printer.Print viaje(2).Text
Printer.CurrentX = 15
Printer.CurrentY = 103
Printer.Print viaje(3).Text
Printer.CurrentX = 60
Printer.CurrentY = 85
Printer.Print relacion(8).Text
Printer.CurrentX = 60
Printer.CurrentY = 91
Printer.Print relacion(9).Text
Printer.CurrentX = 60
Printer.CurrentY = 97
Printer.Print relacion(10).Text
Printer.CurrentX = 60
Printer.CurrentY = 103
Printer.Print relacion(11).Text
Printer.CurrentX = 179
Printer.CurrentY = 81.5
Printer.Print importe1(16).Text
Printer.CurrentX = 179
Printer.CurrentY = 90.5
Printer.Print importe8(23).Text
Printer.CurrentX = 179
Printer.CurrentY = 97.5
Printer.Print importe7(22).Text
Printer.CurrentX = 179
Printer.CurrentY = 104.5
Printer.Print importe6(21).Text
Printer.CurrentX = 179
Printer.CurrentY = 111.5
Printer.Print importe3(18).Text
Printer.CurrentX = 179
Printer.CurrentY = 118.5
Printer.Print importe2(17).Text
Printer.CurrentX = 179
Printer.CurrentY = 125.5
Printer.Print importe2(17).Text
Printer.CurrentX = 179
Printer.CurrentY = 132.5
Printer.Print importe2(17).Text
Printer.CurrentX = 143 'SOBRE ESCRIBIR EN OTROS
Printer.CurrentY = 125.5
Printer.Print Text1.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 180
Printer.Print I.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 187
Printer.Print iva(25).Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 194
Printer.Print suto.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 201
Printer.Print reten.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 208
Printer.Print total(26).Text
Printer.CurrentX = 17
Printer.CurrentY = 219.5
Printer.Print Text4.Text
Printer.EndDoc
´porfa que podria yo hacer experto.... tengo un buen de tiempo sin resolverlo
Vamos con unos consejos que a mi me sirvieron muchísimo.
Seguro debes estar trabajando con una factura pre-impresa.
Primero yo trabajo en centímetros, porque modificar algo en mm es muy complicado.
Comprate una buena regla de 30 cm y tenela siempre a mano.
Después olvidate por un momento que es algo pre-impreso, practica el uso de las coordeanadas
y la forma de alinear a la izquierda.
Atención yo uso primero las coordenadas de y y en centímetros
Printer.CurrentY = 1
Printer.CurrentX = 10 - printer.textwidth(a1(1).text)
Printer.Print a1(1).Text
Con el textwidht, logramos que el importe se alinee a la derecha, si imprimís en una hoja en blanco
vas a ver que el texto se imprime el ultimo decimal desde el los 10 cm, y si no usas textwidht el primer numero del importe se imprime desde el 10 y te queda alineado a la izquierda.
Lo que te cambia es la coordenadas por, porque tienes que calcular donde quieres que quede el ultimo decimal.
Te imaginas es medio dificil explicarlo, por eso te pide que hagas una prueba en hoja en blanco
utilizandos todas las opciones,
printer.currentY=1
printer.currentX=1
printer.print "Coordenada 1 de 1"
==================
printer.currentY=10
printer.currentX=10
printer.print "100.36"
printer.currentY=11
printer.currentX=10-printer.textwidth("100.36")
Printer. Print "100.36"
Con esta prueba vas a notar la diferencia.
Respuesta
1
Necesitaría que me enviases la parte del código donde imprimes, para ver que variables usas y como las usas.
Claro que si mira:
La primera parte del código obtengo las cantidades y las coloco en textbox y en la parte de abajo las imprimo lo único que les hice a las cantidades fue darles el formato solo para que me salieran dos decimales, en el programa ordena las cantidades bien alineadas a la derecha pero cuando las imrpimo me las ordena a la izquierda, y ya vez que en las facturas generalmente las cantidades están hacia a la derecha punto con punto.
Private Sub calcular_Click()
Dim a, b, c, d, e, f, g, h, r1, iv, st, ri, tn As Double
a = importe1(16).Text
b = importe2(17).Text
c = importe3(18).Text
d = importe4(19).Text
e = importe5(20).Text
f = importe6(21).Text
g = importe7(22).Text
h = importe8(23).Text
r1 = 0
iv = 0
st = 0
ri = 0
tn = 0
r1 = (Val(a) + Val(b) + Val(c) + Val(d) + Val(e) + Val(f) + Val(g) + Val(h))
I.Text = Format(Format(r1, "#,###.00"), "@@@@@@@@@@@")
'I.Text = Format(r1, "###,###.00")
iv = Val(r1) * 0.15
iva(25).Text = Format(Format(iv, "#,###.00"), "@@@@@@@@@@@")
'iva(25).Text = Format(iv, "###,###.00")
st = (Val(a) + Val(b) + Val(c) + Val(d) + Val(e) + Val(f) + Val(g) + Val(h)) + (r1 * 0.15)
suto.Text = Format(Format(st, "#,###.00"), "@@@@@@@@@@@")
'suto.Text = Format(st, "###,###.00")
ri = Val(a) * 0.04
reten.Text = Format(Format(ri, "#,###.00"), "@@@@@@@@@@@")
'reten.Text = Format(ri, "###,###.00")
tn = (st) - (Val(a) * 0.04)
total(26).Text = Format(Format(tn, "#,###.00"), "@@@@@@@@@@@")
'total(26).Text = Format(tn, "###,###.00")
End Sub
Private Sub calculo2_Click()
Dim valor1, valor2 As Double
valor2 = Val(PU.Text)
valor1 = 0
valor1 = Val(valor2)
PUF.Text = Format(valor1, "###,###.00")
'importe1(16).Text = Format(CLng(valor1), "###,###.00")
End Sub
Private Sub Command1_Click()
Printer.PaperSize = 1
'tamaño A4
Printer.ScaleMode = 6 'mm
Printer.CurrentX = 30
Printer.CurrentY = 37
Printer.Print a1(1).Text
Printer.CurrentX = 30
Printer.CurrentY = 43
Printer.Print a1(0).Text
Printer.CurrentX = 30
Printer.CurrentY = 49
Printer.Print a1(2).Text
Printer.CurrentX = 30
Printer.CurrentY = 55
Printer.Print a1(3).Text
Printer.CurrentX = 30
Printer.CurrentY = 61
Printer.Print a1(4).Text
Printer.CurrentX = 160
Printer.CurrentY = 51.5
Printer.Print dia.Text
Printer.CurrentX = 175
Printer.CurrentY = 51.5
Printer.Print mes(5).Text
Printer.CurrentX = 190
Printer.CurrentY = 51.5
Printer.Print anio(6).Text
Printer.CurrentX = 15
Printer.CurrentY = 85
Printer.Print viaje(0).Text
Printer.CurrentX = 15
Printer.CurrentY = 91
Printer.Print viaje(1).Text
Printer.CurrentX = 15
Printer.CurrentY = 97
Printer.Print viaje(2).Text
Printer.CurrentX = 15
Printer.CurrentY = 103
Printer.Print viaje(3).Text
Printer.CurrentX = 60
Printer.CurrentY = 85
Printer.Print relacion(8).Text
Printer.CurrentX = 60
Printer.CurrentY = 91
Printer.Print relacion(9).Text
Printer.CurrentX = 60
Printer.CurrentY = 97
Printer.Print relacion(10).Text
Printer.CurrentX = 60
Printer.CurrentY = 103
Printer.Print relacion(11).Text
Printer.CurrentX = 179
Printer.CurrentY = 81.5
Printer.Print importe1(16).Text
Printer.CurrentX = 179
Printer.CurrentY = 90.5
Printer.Print importe8(23).Text
Printer.CurrentX = 179
Printer.CurrentY = 97.5
Printer.Print importe7(22).Text
Printer.CurrentX = 179
Printer.CurrentY = 104.5
Printer.Print importe6(21).Text
Printer.CurrentX = 179
Printer.CurrentY = 111.5
Printer.Print importe3(18).Text
Printer.CurrentX = 179
Printer.CurrentY = 118.5
Printer.Print importe2(17).Text
Printer.CurrentX = 179
Printer.CurrentY = 125.5
Printer.Print importe2(17).Text
Printer.CurrentX = 179
Printer.CurrentY = 132.5
Printer.Print importe2(17).Text
Printer.CurrentX = 143 'SOBRE ESCRIBIR EN OTROS
Printer.CurrentY = 125.5
Printer.Print Text1.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 180
Printer.Print I.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 187
Printer.Print iva(25).Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 194
Printer.Print suto.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 201
Printer.Print reten.Text
Printer.RightToLeft = True
Printer.CurrentX = 179
Printer.CurrentY = 208
Printer.Print total(26).Text
Printer.CurrentX = 17
Printer.CurrentY = 219.5
Printer.Print Text4.Text
Printer.EndDoc
Pofa ayudame tengo un buen que no puedo resolver este problema, te agradezco
Voy a ver si me te sirve mi idea:
Cogemos la cadena que queremos imprimir y guardamos su longitud en una variable:
Lon01 =  Len(CStr(cadena))
y después el CurrentX si queremos que quede a una distacia 90 justificado por la derecha:
Printer.CurrentX = 90 - Lon01
Prueba y me dices si te funciona. Es importante que la fuente sea como la courier, que ocupa lo mismo una "i" que una "W".
Respuesta
1
Se me ocurre que hagas una rutina que verifique o cuente cuantos dígitos vas a imprimir, y cuando sepas cuantos vas a imprimir de acuerdo a la cantidad de puntos que estas utilizando para el font, cuentas desde el punto final hacia el inicio para que los números te queden justificados a la derecha.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas