Hola compañeros, como siempre solicito vuestra ayuda para lo siguiente, estoy trabajando en el sistema de TPV y antes de implantarlo en el me surge el siguiente problema, resulta que el primer ticket me sale bien
Pero a partir de este momento cada vez que mando a imprimir un ticket me sale con un "
,P" al principio, os pongo una imagen
Esto sucede cada vez después de la primera y hasta que apago y vuelvo a iniciar la impresora.
Esta hecho en Delphi 10, con una Epson TM-U210PB y con windows7,
La impresora esta conectada a un puerto USB y tiene un cajón monedero incorporado, además la impresora tinene cuchilla de corte
Aquí os pongo el código usado
Código Delphi
[-]procedure TForm1.Button6Click(Sender: TObject);
var i:Integer;
begin
if cmbPrinters.Text<>'' then
begin
if cmbPrinters.ItemIndex >= 0 then
begin
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\000');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\017'+Relleno(MyTextReplace('XXXXXXXX XXXXXX, X.X.'),' ',42,2)+'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+(Espacios(MyTextReplace('Xxxxxxxxxx, 9'),22,0)+Espacios('',1,0)+Espacios('C.I.F.:X-99.999.999',18,1))+'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+(Espacios('C.P.:99.999',11,0)+Espacios('',1,0)+Espacios('Xxx Xxxxxx',30,0))+'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+(Espacios('Xxx Xxxxxx xx Xxxx Xxxxxxx',42,0))+'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+(Espacios('Tfo: 999 999 999',20,0)+Espacios('',2,0)+Espacios('Fax: 999 999 999',20,1))+'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+(Espacios('Email: xxxxxx@xxxxxxx.xxx',42,0))+'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+(Espacios('Web: Xxxxxxx.xxx',42,0))+'\x0A\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001'+Espacios('Fecha: '+DateToStr(Now),20,0)+Espacios('',2,0)+Espacios('Hora: '+TimeToStr(Now),20,1)+'\x0A\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001Cant. Concepto P.Ud Importe\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001------------------------------------------\x0A\x0D');
For i := 0 To ListView1.Items.Count-1 do
begin
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],DesCRlinea(StrToInt(ListView1.Items.Item[i].SubItems[0]),ListView1.Items.Item[i].SubItems[1],
Strtofloat(ListView1.Items.Item[i].SubItems[2])));
end;
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\001------------------------------------------\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\009SUBTOTAL........................:'+Espacios(FormatFloat('#,##0.00',VarDSubtotal),9,1)+ '\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\009I.G.I.C.........................:'+Espacios(FormatFloat('#,##0.00',VardImpuestos),9,1) +'\x0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\009TOTAL...........................:'+Espacios(FormatFloat('#,##0.00',vardtotal),9,1)+'\x 0A\x0D');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\x1B@\x0A\x0A\x0A\x0A\x0A\x0A\x0A\x0A\x0A\x0A\x0D\x1Bi\x0A\x0D'); WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\112\000,\050,\080');
WriteRawDataToPrinter(cmbPrinters.Items[cmbPrinters.ItemIndex],'\027\033\000');
end;
End else ShowMessage('Elija primero una impresora');
end;
y aquí las funciones llamadas
Código Delphi
[-]
function WriteRawDataToPrinter(PrinterName: String; Str: String): Boolean;
var
PrinterHandle: THandle;
DocInfo: TDocInfo1;
i: Integer;
B: Byte;
Escritos: DWORD;
begin
Result:= FALSE;
if OpenPrinter(PChar(PrinterName), PrinterHandle, nil) then
try
FillChar(DocInfo,Sizeof(DocInfo),#0);
with DocInfo do
begin
pDocName:= PChar('Printer Test');
pOutputFile:= nil;
pDataType:= 'RAW';
end;
if StartDocPrinter(PrinterHandle, 1, @DocInfo) <> 0 then
try
if StartPagePrinter(PrinterHandle) then
try
while Length(Str) > 0 do
begin
if Copy(Str, 1, 1) = '\' then
begin
if Uppercase(Copy(Str, 2, 1)) = 'X' then
Str[2]:= '$';
if not TryStrToInt(Copy(Str, 2, 3),i) then
Exit;
B:= Byte(i);
Delete(Str, 1, 3);
end else B:= Byte(Str[1]);
Delete(Str,1,1);
WritePrinter(PrinterHandle, @B, 1, Escritos);
end;
Result:= TRUE;
finally
EndPagePrinter(PrinterHandle);
end;
finally
EndDocPrinter(PrinterHandle);
end;
finally
ClosePrinter(PrinterHandle);
end;
end;
function Relleno(text,Rell:string;Cant,posi:integer):string;
var
valor,x:integer;
dev,con:string;
begin
con:='';
valor:=length(text);
if valor < Cant then
begin
case posi of
0..1: begin
for x:=1 to (cant-valor) do
begin
con:=con+Rell;
end;
end;
2: begin
for x:=1 to ((cant-valor) div 2) do
begin
con:=con+Rell;
end;
end;
end;
case posi of
0: dev:=con+text;
1: dev:=text+con;
2: begin
if Cant=(Valor+length(Con)+length(Con)) then dev:=con+text+con
else
begin
if Cant>(Valor+length(Con)+length(Con)) then dev:=con+text+Con+Rell
else dev:=con+text+copy(con,0,(length(con)-(Cant-(Valor+length(Con)+length(Con)))));
end;
end;
end;
end
else
dev:=text;
result:=dev;
end;
function espacios(text:string;Cant:integer;posi:integer):string;
var
valor,x:integer;
dev,con:string;
begin
con:='';
valor:=length(text);
if valor < Cant then
begin
for x:=1 to (cant-valor) do
begin
con:=con+' ';
end;
if posi=1 then dev:=con+text
else dev:=text+con;
end
else
dev:=text;
result:=dev;
end;
function MyTextReplace(Texto:String):String;
begin
if Texto<>'' then begin
Texto:= AnsiReplaceStr(Texto,'Ñ', #165);
Texto:= AnsiReplaceStr(Texto,'ñ', #164);
Texto:= AnsiReplaceStr(Texto,'á', #160);
Texto:= AnsiReplaceStr(Texto,'é', #101); Texto:= AnsiReplaceStr(Texto,'í', #161);
Texto:= AnsiReplaceStr(Texto,'ó', #162);
Texto:= AnsiReplaceStr(Texto,'ú', #163);
Texto:= AnsiReplaceStr(Texto,'Á', #65);
Texto:= AnsiReplaceStr(Texto,'É', #144);
Texto:= AnsiReplaceStr(Texto,'Í', #73);
Texto:= AnsiReplaceStr(Texto,'Ó', #79);
Texto:= AnsiReplaceStr(Texto,'Ú', #85);
Texto:= AnsiReplaceStr(Texto,'Ü', #85);
Texto:= AnsiReplaceStr(Texto,'Ü', #129);
Result:=Texto;
end;
end;
A ver si podéis ayudarme y decirme por que de este error