PDA

Ver la Versión Completa : Impresora punto matriz, como alinear los valores tipo dinero ?


Jorge Taveras
17-05-2005, 13:04:53
Buenas tengan amigos foristas.
Tengo una impresora star sp 512 y hasta ahora todo ha ido bien.
Es un punto de venta que imprime una factura de compra. El problema me surge cuando intento alinear los valores tipo dinero. Me explico

leche de vaca 100.00
jamon cosido 900.00
lampara 1,100.00
---------------
total 2.100.00

Imprimo directamente a impresora. Al intentar formatear de la siguiente forma
no me corrige el alineamiento:
formatfloat(' ##,##0.00',Adodataset0.fieldbyname'Precioventa').value)

el format float solo me funciona si coloco ceros en lugar de numeros
formatfloat(' 00,000.00',Adodataset0.fieldbyname'Precioventa').value) , pero los resultados son muy feos además de que traen confusión.


leche de vaca 00,100.00
jamon cosido 00,900.00
lampara 01,100.00
---------------
total 02.100.00

He visto estas facturas muy bien cuadradas. Estoy seguro que es falta de conocimiento personal... Trabajo en una linea de 40 caracteres. Espero me puedan ayudar, con la gracias de primera mano, jorge

eduarcol
17-05-2005, 13:49:47
ok si trabajas en una linea de 40 caracteres me imagino que debes tener un limite para la descripcion, supongamos 25, lo que tienes que hacer en este caso es que antes de imprimir la variable la lleves al numero maximo de caracteres rellenandolo con espacios en blanco ( ' ' ).

Espero que te funcione cualquier duda pregunta

lroblesco
19-05-2005, 01:08:30
yo he impreso en una star sp200 de 42 caracteres, lo que hago como dice el compañero eduardocol, es que te hagas una funcion para aumentar o recortar la cadena de caracteres de la descripcion.


function rellena(var S:string;n:byte):string;
var
long,i:byte;
begin
long:=length(s);
for i:=1 to n-long do
s:=s+' ';
rellena:=s;
end;



//una llamada de un detalle
writeln(F,'******************************************');
for i:=0 to lstVentas.Items.Count-1 do
begin
str1:=lstVentas.Items[i].SubItems.Strings[2];
rellena(str1,2);
str2:=lstVentas.Items[i].SubItems.Strings[0];
rellena(str2,25);
str3:=lstVentas.Items[i].SubItems.Strings[3];
writeln(F,str1+' '+str2,format('%8.2f',[strtofloat(str3)]));
end;

Esta funcion lo que hace es recibe una cadena de hasta 255 caracteres y un numero entero(n), este el que indicara la longitud que deba tener, en este caso la descripcion, yo utilizo 25 caracteres para la descipcion.

Espero te sirva