Ir para conteúdo
  • Cadastre-se

dev botao

Acess violation para gerar atoCotep


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

Recommended Posts

Bom dia,

Estou tentando fazer o meu PDV (frente de caixa) gerar automaticamente todo dia o
arquivo do CAT-52. Vi que o ACBr tem várias forma de gerar o CAT-52, porém nenhuma
deu muito certo nos meus testes (estou usando o emulador da Bematech mp-4200th).

Código:

      dir := ExtractFilePath(Application.ExeName)+'Cat52\';
      if not DirectoryExists(dir) then
         ForceDirectories(dir);
      dir := dir+IntToStr(YearOf(data))+'\';
      if not DirectoryExists(dir) then
         ForceDirectories(dir);
      dir := dir + PegaMes(data) + '\';
      if not DirectoryExists(dir) then
         ForceDirectories(dir);

      ecf.PafMF_MFD_Cotepe1704(Date(),Date(),dir);
function PegaMes(Data:TDate):String;
begin
case MonthOf(Data) of
   1: Result := 'Janeiro';
   2: Result := 'Fevereiro';
   3: Result := 'Marco';
   4: Result := 'Abril';
   5: Result := 'Maio';
   6: Result := 'Junho';
   7: Result := 'Julho';
   8: Result := 'Agosto';
   9: Result := 'Setembro';
  10: Result := 'Outubro';
  11: Result := 'Novembro';
  12: Result := 'Dezembro';
   end;
end;

O diretório da variável dir existe e o log do ACBr não tem nada (limpei ele, executei de novo a função e continuou em branco).


Alguma sugestão? Existe algum esquema de "cada função pra determinada impressora"?

 

Obrigado, Marcos

Acabei de tentar de mudar o emulado para o da Epson e o erro agora foi:

Erro ao carregar a função: EPSON_Obter_Dados_MF_MFD de: InterfaceEpson.dll

PS: O log continua em branco

 

Bom dia,

Estou tentando fazer o meu PDV (frente de caixa) gerar automaticamente todo dia o
arquivo do CAT-52. Vi que o ACBr tem várias forma de gerar o CAT-52, porém nenhuma
deu muito certo nos meus testes (estou usando o emulador da Bematech mp-4200th).

Código:

      dir := ExtractFilePath(Application.ExeName)+'Cat52\';
      if not DirectoryExists(dir) then
         ForceDirectories(dir);
      dir := dir+IntToStr(YearOf(data))+'\';
      if not DirectoryExists(dir) then
         ForceDirectories(dir);
      dir := dir + PegaMes(data) + '\';
      if not DirectoryExists(dir) then
         ForceDirectories(dir);

      ecf.PafMF_MFD_Cotepe1704(Date(),Date(),dir);
function PegaMes(Data:TDate):String;
begin
case MonthOf(Data) of
   1: Result := 'Janeiro';
   2: Result := 'Fevereiro';
   3: Result := 'Marco';
   4: Result := 'Abril';
   5: Result := 'Maio';
   6: Result := 'Junho';
   7: Result := 'Julho';
   8: Result := 'Agosto';
   9: Result := 'Setembro';
  10: Result := 'Outubro';
  11: Result := 'Novembro';
  12: Result := 'Dezembro';
   end;
end;

O diretório da variável dir existe e o log do ACBr não tem nada (limpei ele, executei de novo a função e continuou em branco).


Alguma sugestão? Existe algum esquema de "cada função pra determinada impressora"?

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

Acabei de tentar de mudar o emulado para o da Epson e o erro agora foi:

Erro ao carregar a função: EPSON_Obter_Dados_MF_MFD de: InterfaceEpson.dll

PS: O log continua em branco

 

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Fundadores

sim... mas cada ECF dependerá das DLLs específica do fabricante...

Seja curioso.. lembre-se que o ACBr é código aberto... abra os fontes e veja como é implementado...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Bom dia Daniel,

Fiz o que disse e testei hoje com a Elgin e com a Bematech, ambas deram certo, mas existem algumas "ressalvas".

1-) O que eu queria era o arquivo do cat-52 mesmo, já formatado bonitinho, isso é possível? a função que citei

acima na bematech gerou o "download.mfd" e na Elgin o "Memoria.tdm", ambos são o arquivo de leitura antes de separar...

Com a bematech  Epson foi gerado o "ACBr_CTP.txt", este exatamente do jeito que eu queria.... existe como separar esses arquivos

pelo componente (gerar o arquivo final do cat-52)? Ou devo usar outra função que faça isso?

 

2-) No caso da Bematech eu coloquei o bemafi32.ini na pasta do meu exe e ao invés de mudar o Path do meu bemafi32.ini quando

mudo o diretório, quando eu chamava a função era criado um novo bemafi32.ini no "C:\Windows\"

 

Muito obrigado pela ajuda, Marcos

Editado por Marcos Spirito

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Cada DLL tem a sua configuração...

o ACBrECF deve gerar o arquivo na Pasta ou com o nome que você especificou...

Tente com o projeto ECFTeste... estude os fontes dele...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

No comando PafMF_MFD_Cotepe1704() os parâmetros são Data inicial, Data final e diretório, não controlo o nome do arquivo gerado...

procedure TFrmPDV.GravarCat52(data:TDate);
var
dir, arquivo, arq_log_MFD:string;
logMFD:TStringList;
begin
if (MessageBox(Handle,'Este processo pode ser muito lento se a movimentação do dia for grande. Deseja continuar?', 'Gerar CAT-52', Mb_yesno+mb_iconquestion+MB_DEFBUTTON2) = ID_NO) then
   Exit;

try
   dir := ExtractFilePath(Application.ExeName)+'Cat52\';
   arq_log_MFD := dir+'logCAT_52.txt';

   logMFD := TStringList.Create;
   if (FileExists(arq_log_MFD)) then
      logMFD.LoadFromFile(arq_log_MFD);

   try
       if not DirectoryExists(dir) then
          ForceDirectories(dir);
       dir := dir+IntToStr(YearOf(data))+'\';
       if not DirectoryExists(dir) then
          ForceDirectories(dir);
       dir := dir + PegaMes(data) + '\';
       if not DirectoryExists(dir) then
          ForceDirectories(dir);

       case ECF.Modelo of
         ecfFiscNET  : arquivo := dir + 'Memoria.tdm';
         ecfEpson    : arquivo := dir + 'ACBr_CTP.txt';
         ecfBematech : arquivo := dir + 'Download.MFD';
         ecfDaruma, ecfEscECF : arquivo := dir+'ver_nomes.txt'; //To do.
         end;

       if (FileExists(arquivo)) then
         DeleteFile(arquivo);
       try
          Aguardar(True);
          ECF.PafMF_MFD_Cotepe1704(data, data, dir);
          if (FileExists(arquivo)) then
            RenameFile(arquivo, dir+FormatDateTime('ddmmyyyy',data)+'.txt');
          logMFD.Add('Arquivo CAT-52 de '+FormatDateTime('dd/mm/yyyy',data)+' gerado com sucesso.');
       finally
          Aguardar(False);
       end;
   except on e:exception do
       begin
       logMFD.Add('Erro ao gerar arquivo CAT-52 de '+FormatDateTime('dd/mm/yyyy',data));
       logMFD.Add('           '+e.Message);
       end;
   end;
finally
   try
      logMFD.SaveToFile(arq_log_MFD);
   finally
      logMFD.Free;
   end;
end;

 

Existe uma função da ECF PafMF_GerarCAT52() pensei em usar ela, mas vi em alguns posts você dizendo que essa função

era pra impressoras antigas matriciais...

 

Vou ver se acho algo para separar esses arquivos no cat-52 que eu preciso... e quanto ao Bemafi32.ini, alguma dica de porque ele

não alterar o que está na pasta ao ínvés de criar um novo?

 

PS: Cheguei a apagar o .ini ai no meu log apareceu o erro que não existe o .ini mesmo criando no c:\windows...

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

Boa tarde,

Existe uma propriedade PathDlls que eu não setava, era por isso que o meu bemafi32.ini não modificava

e criava um novo no c:\windows\.

 

Porém na minha máquina agora ele acha o .ini, modifica ele, mas na hora de abrir a porta serial da impressora

ele diz que o bemafi32.ini não foi encontrado (erro -4). Vou fazer um teste em uma máquina "virgem" para garantir

que não tem nada interferindo nisso e posto o resultado.

 

[ ]'s

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

Fiz o teste em uma máquina "virgem" e tive o mesmo resultado. O Acbr chega alterar as propriedades Porta, Path, etc do bemafi32.ini, mas

quando vai fazer o "Bematech_FI_AbrePortaSerial" retorna isso:

 

Erro em Bematech_FI_AbrePortaSerial
Cod.: -4 - Arquivo BemaFI32.INI não encontrado. Verifique!

Marcos Gerene

[email protected]

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Como ficou esta situação? Conseguiu resolver?

Estou utilizando a Bemafi32.ini com Windows 10 e Delphi XE6, com as dlls da Bematech versão 7, que prevê o novo ECF MP-4200 TH FI do novo convênio 09/09 de Santa Catariana e não importa o comando que eu execute, a dll sempre retorna -1, isto é, não encontrou a Bemafi32.ini, porém já coloquei ela no diretório do aplicativo, do windows, do system, system32 e sysWOW64 e continua dando o mesmo problema.

Depois testes com um EXE compilado no Delphi XE em uma máquina com Windows XP e o comando funcionou, por isso me parece algo relacionado ou a versão do Delphi, ou a versão do windows.

Se alguém já achou solução para o caso, poderia compartilhar?

Hoje mandei e-mail para o suporte ao desenvolvedor da Bematech e estou no aguardo de algum retorno.

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Eu não estou analisando... Fique a vontade para analisar e se desejar sugerir modificações, por favor anexe os fontes...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3157 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...