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.
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.
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.
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".
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.