Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3397 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Daniel,

Conclui a atualização do componente SAT usando o trunk2.

Ficou muito bom a nova estrutura, o anterior estava confuso, agora melhorou muito.

Após associar todos os componentes, quando passava para abrir a porta da impressora, retornava um erro na ECFVirtual.... Observando o código notei que a sequencia estava tentando abrir a porta serial duas vezes... então fiz a seguinte alteração.... (funcionou).

---------------------------------------------------------

procedure TACBrECFVirtualClass.Ativar;
begin
  if not Assigned(ECFVirtual) then  // Amarildo Lacerda  -- estava abrindo a porta serial antes de abrir a virtual (quando usa ESCPOS - epson)...
    inherited Ativar;

  try
    LeArqINI ;

    AtivarVirtual;
  except
    Desativar ;
    raise ;
  end ;
end;

--------------------------------------------------------

No desenvolvimento, usei uma impressora DASCOM com ESCPOS da epson...  Não esta imprimindo o QRCODE - ainda não olhei o que acontece, estou desconfiado que precisa fazer um código específico para ela - ou é porque estou com o simulador (vou olhar depois). Os outros comandos, funcionaram bem. 

O visual impresso do cupom, precisava dar uma melhorada. Antes, aquele que tem na NaoFiscal, sai legal, agora esta desalinhado no ESCPOS.

 

 

ACBrECFVirtual.pas

Amarildo Lacerda

Storeware Team

Postado

Hoje peguei uma epson para fazer teste;  notei que não esta passando os parametros da serial para a virtual

 

 

procedure TACBrECFVirtualPrinter.AtivarPosPrinter;
begin
  if not Assigned( FPosPrinter ) then
    raise Exception.Create('Componente PosPrinter não associado');

  if FPosPrinter.Porta = '' then
  begin
    FPosPrinter.Porta := TACBrECF( ECF ).Porta;
    FPosPrinter.Device.ParamsString := TACBrECF( ECF ).Device.DeviceToString(false); // Amarildo Lacerda - A PosPrinter deve receber a configuração da porta configurada na ACBrECF
  end;

  FPosPrinter.Ativar;
end;

ACBrECFVirtualPrinter.pas

  • Curtir 2

Amarildo Lacerda

Storeware Team

Postado

Aplicando teste unitário, notei que não estava passando o teste de desconto/acrescimo no total do cupom.

Quando manda Desconto  para o ECF, o valor do desconto vem negativo... então precisa inverter o sinal do desconto;

Fiz a seguinte alteração

 


procedure TACBrECFVirtualSATClass.SubtotalizaCupomVirtual(
  DescontoAcrescimo: Double; MensagemRodape: AnsiString);
begin
  with fsACBrSAT do
  begin
    if DescontoAcrescimo > 0 then
      CFe.Total.DescAcrEntr.vAcresSubtot := DescontoAcrescimo
    else
      CFe.Total.DescAcrEntr.vDescSubtot  := DescontoAcrescimo*(-1); // Amarildo Lacerda... checar com Daniel se esta correto... já que o dado vem negativo para desconto.

    CFe.InfAdic.infCpl := MensagemRodape;
  end;
end;

ACBrECFVirtualSAT.pas

Amarildo Lacerda

Storeware Team

Postado (editado)

 

Daniel, olha esta.

Concluido o teste unitário, passou tudo.... compilado com XE7, tanto no aplicativo final quando no ambiente de teste, tudo funcionando...

Então enviei para o montador. Lá no montador, esta instalado um XE6... com XE6 não funcionou, dá um erro de acesso a memória e trava o aplicativo  (quando vai fechar o cupom) e não sai do lugar... fica naquela janela de debug CPU do delphi mostrando os códigos hex.

Investigando, mudei o varíavel   "xSAT_EnviarDadosVenda" do TACBrSATDinamico_stdcall  para fora do objecto... de tal forma que fosse possível chama-la independente do objeto...

e  alterei estas linhas:

------------------------xxxxxxxxxxxxxxxxxxxxxxxxxxx-------------------------------------------------------

function TACBrSAT.EnviarDadosVenda(dadosVenda : AnsiString) : String ;
var
  NomeCFe,ret : String;
begin
  fsComandoLog := 'EnviarDadosVenda( '+dadosVenda+' )';
  if Trim(dadosVenda) = '' then
     raise EACBrSATErro.Create('Parâmetro: "dadosVenda" não informado');

  IniciaComando;

  if fsConfigArquivos.SalvarEnvio then
  begin
    NomeCFe := CalcCFeNomeArq( fsConfigArquivos.PastaEnvio,
                               fsConfigArquivos.PrefixoArqCFe +
                               FormatDateTime('YYYYMMDDHHNNSS',Now) + '-' +
                               IntToStrZero(numeroSessao, 6),
                               '-env');
    WriteToTXT(NomeCFe, dadosVenda, False, False);
  end;

  ret := Trim(dadosVenda);
  //ret := fsSATClass.EnviarDadosVenda( ret );  // debug
  ret := xSAT_EnviarDadosVenda( numeroSessao, PAnsiChar(codigoDeAtivacao),
                                   PAnsiChar(dadosVenda) ) ;
  Result := FinalizaComando( ret );

  DecodificaRetorno6000;
end ;

-----------------------------xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx----------------------------------

Alterado isto, funcionou OK no XE6.

Não entendi o que aconteceu, já que no XE7 a estrutura original funcionou correto... mas no XE6 falhou.

Meus 20 anos de DELPHI não foram suficiente.

Como estou usando o simulador, espero conseguir melhorias até chegar ao final.

 

Vou encerrar esta etapa, agora vamos preparar um piloto.

 

Editado por amarildolacerda

Amarildo Lacerda

Storeware Team

  • 4 semanas depois ...
Postado

Encontrei o problema - o tipo de assinatura dos metodos que acessavam a DLL estavam setados em desacordo com o que estava na DLL. 

Voltei o código para o original... 

 

Esta funcionado.

Amarildo Lacerda

Storeware Team

  • Este tópico foi criado há 3397 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...