Pesquisar na Comunidade
Showing results for tags 'acbrecfescecf'.
Encontrado 2 registros
-
Boa tarde glr, estou com um problema complicado. O sistema trabalha o dia todo muito bem, mas esporadicamente, aparece uma msg: CANNOT CREATE FILE "C:\MINHAPASTA\ACBRECFESCECF003.TXT. A OPERAÇÃO SOLICITADA NÃO PODE SER EXECUTADA EM UM ARQUIVO COM UMA SEÇÃO MAPEADA PELO USUÁRIO ABERTA." Depois dessa msg, o produto é vendido na impressora, mas dá pau na minha venda, e eu não sei o que fazer para resolver isso. Por favor, me ajudem.
- 4 replies
-
- acbrecfescecf
- ecf
-
(e 1 mais)
Tags:
-
Olá senhores, Recentemente atualizei os fontes do ACBr. Pois estava tendo um travamento com a impressora MP 4200 TH FI II. E segundo o log do SVN Data: 06/04/2016 -- ACBrECFEscECF -- [*] Modificado tamanho máximo de Buffer de envio para Bematech, para 256 bytes para evitar travamentos do ECF. (por: DSA) Até ai tudo bem, porém ao testar a impressão de comprovante no emulador da impressora MP 4200... a cada envio de texto fica mais alinhado a direita. Imagem "alinhamento a direita.png" no link https://drive.google.com/open?id=0B7ZvS1wjEhJSeWRzNDFjVnllUFU. Imagem "mudança de código fonte.png" no link https://drive.google.com/open?id=0B7ZvS1wjEhJSX0xqZ3pXdWV4SnM é como deveria imprimir. Abaixo como está no projeto ACBr a unit ACBrECFEscECF: procedure TACBrECFEscECF.LinhaRelatorioGerencial(Linha: AnsiString; IndiceBMP: Integer); var P, Espera, LenMaxBuffer: Integer; Buffer : AnsiString ; EhControle: Boolean; begin Linha := AjustaLinhas( Linha, Colunas, 0, IsBematech ); { Formata as Linhas de acordo com "Coluna" } if IsBematech then LenMaxBuffer := cEscECFMaxBufferBematech else LenMaxBuffer := cEscECFMaxBuffer; P := pos(LF, Linha); while P > 0 do begin EhControle := Linha[max(P-1,1)] = ESC; if not EhControle then begin Linha := StuffString(Linha, P, 0, CR ); // Adiciona CR antes de LF Inc( P ); end else begin if IsBematech then begin Delete(Linha, P-1, 1); // Remove "ESC" (carcater de controle) Dec( P ); end; end; P := PosEx( LF, Linha, P+1); end; while Length( Linha ) > 0 do begin P := Length( Linha ) ; if P > LenMaxBuffer then { Acha o fim de Linha mais próximo do limite máximo } P := PosLast(LF, copy(Linha, 1 , LenMaxBuffer) ) ; if P = 0 then P := Trunc( LenMaxBuffer / Colunas ) * Colunas; Buffer := copy( Linha, 1, P); Espera := Trunc( CountStr( Buffer, LF ) / 4); EscECFComando.CMD := 9; EscECFComando.TimeOut := Espera; EscECFComando.AddParamString(Buffer); EnviaComando; { ficou apenas um LF sozinho ? } if (P = Colunas) and (RightStr( Buffer, 1) <> LF) and (copy( Linha, P+1, 1) = LF) then P := P + 1 ; Linha := copy( Linha, P+1, Length(Linha) ) ; // O Restante end ; end; Abaixo como deixei o código fonte: procedure TACBrECFEscECF.LinhaRelatorioGerencial(Linha: AnsiString; IndiceBMP: Integer); var P, Espera, LenMaxBuffer: Integer; Buffer : AnsiString ; begin Linha := AjustaLinhas( Linha, Colunas, 0, (IsEpson or IsBematech) ); { Formata as Linhas de acordo com "Coluna" } if IsBematech then LenMaxBuffer := cEscECFMaxBufferBematech else LenMaxBuffer := cEscECFMaxBuffer; while Length( Linha ) > 0 do begin P := Length( Linha ) ; if P > LenMaxBuffer then { Acha o fim de Linha mais próximo do limite máximo } P := PosLast(LF, copy(Linha, 1 , LenMaxBuffer) ) ; if P = 0 then P := Trunc( LenMaxBuffer / Colunas ) * Colunas; Buffer := copy( Linha, 1, P) ; Espera := Trunc( CountStr( Buffer, LF ) / 4) ; EscECFComando.CMD := 9 ; EscECFComando.TimeOut := Espera ; EscECFComando.AddParamString(Buffer); EnviaComando; { ficou apenas um LF sozinho ? } if (P = Colunas) and (RightStr( Buffer, 1) <> LF) and (copy( Linha, P+1, 1) = LF) then P := P + 1 ; Linha := copy( Linha, P+1, Length(Linha) ) ; // O Restante end ; end; Não sei se estou fazendo errado, ou se precisa de algum parâmetro que não estou passando. Mas com minha alteração a impressão fica certa. Obs: vi que a mudança dessa função entrou no seguinte commit Revision: 10712 Author: dopi Date: segunda-feira, 21 de dezembro de 2015 14:53:13 Message: -- ACBrECFEscECF -- [*] Ajuste para correta impressão de Cod.Barras e Caracteres de Controle em Epson TM-800/900F, e Bametech MP4200-THFI (nota: Para a Impressão de Cod.barras usando a DLL da Epson como túnel, é requer necessário uma atualização da mesma) (por: DSA) ---- Modified : /trunk2/Fontes/ACBrSerial/ACBrECFBematech.pas Modified : /trunk2/Fontes/ACBrSerial/ACBrECFEpson.pas Modified : /trunk2/Fontes/ACBrSerial/ACBrECFEscECF.pas Modified : /trunk2/Fontes/ACBrSerial/ACBrSerial-change-log.txt