Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa Tarde,

Estou desenvolvendo um PAF-ECF com uma ECF SWEDA - ST 120, ao chamar a funcao ACBrECF.PafMF_LMFC_Cotepe1704 ocorreu o seguinte erro

- 2 = Parâmetro inválido na função

Verificando o fonte do projeto ACBr e a documentação da dll da sweda, identifiquei que quando chamada a funcao:

Self.ArquivoMFD_DLL(DataInicial, DataFinal, PathArquivo, [docTodos], finMF );

a finalidade finMF seta um tipo "1" que ao chamar

xECF_ReproduzirMemoriaFiscalMFD(Tipo, DiaIni, DiaFim, NomeArquivo, '');

passa o 'ultimo parâmetro vazio ("") e pela documentação da dll não é permitido

segue a documentação que estou me fundamentando

Tipo: STRING que determina o tipo de relatório a ser gerado:

Informar um dos seguintes valores ("0" a "3"): 




"0" = L M F simplificada – formato texto.


"1" = L M F  COMPLETA    – formato texto.


"2" = L M F  COMPLETA    – formato COTEPE. 

PatBin = caminho e nome do arquivo de Memória Fiscal no formato binário.


"2" = M F D              – formato COTEPE.

Processa o movimento gravado apenas no dispositivo Memória de Fita Detalhe - MFD. 



Para que seja lido apenas a MFD, informar "" ou vazio no argumento abaixo - PatBin.  Assim, NÃO irá processar o movimento do dispositivo da Memória Fiscal.



A DLL vai procurar o arquivo binário MFD no computador automaticamente. 

"3" = LMF  e  MFD        – formato COTEPE.

Também conhecido como "TDM" porque inclui movimento da Memória Fiscal e da MFD.



No argumento abaixo - PatBin -  deverá ser informado o  caminho e o nome do  arquivo  que contém a Memória Fiscal em formato binário.



Já os arquivos que contém a memória MFD não deverão ser informados. A DLL vai procurar os arquivos binários tipo  MFD  no computador automaticamente. 

"4" = Gera o arquivo com a mesma informação do tipo "3". mas com as seguintes diferenças: 

·      A função não consulta o ECF sobre o conteúdo da MFD

·      Não exibe a caixa de geração do arquivo COTEPE.

·      Poderá usar a pasta informada  no argumento "PatBin" abaixo para obter os arquivos  MFD e gerar o arquivo cotepe na mesma pasta e na pasta informada em "PatTxt".  Os arquivos não precisam pertencer ao ECF conectado. 



FxaIni: STRING com a data inicial no formato  ddmmaa, dd/mm/aa, ddmmaaaa ou dd/mm/aaaa ou o  CRZ inicial.  Será assumido que o valor refere-se ao contador COO se o comprimento do valor tiver 7 dígitos.  

FxaFim: STRING  com a data final no formato  ddmmaa, dd/mm/aa, ddmmaaaa ou dd/mm/aaaa  ou  o CRZ   final.  Será assumido que o valor refere-se ao contador COO se o comprimento do valor tiver 7 dígitos.  

PatTxt: STRING  informando a localização e o nome do arquivo texto a  ser  gerado.  

PatBin: STRING  informando a localização e o nome do arquivo binário da Memória Fiscal.  Usado para gerar o movimento 

da Memória Fiscal ou TDM. Este arquivo é gerado, chamando a função  ECF_DownloadMF. 

para soluciona o problema seria necessário passar o tipo = '2',

xECF_ReproduzirMemoriaFiscalMFD(Tipo, DiaIni, DiaFim, NomeArquivo, '');

porem pela documentação ao usar o tipo = '2' surge duas possibilidades,

se o parâmetro PatBin for vazio será gerado o aquivo no layout MFD, se for informado o parâmetro PatBin será gerado o arquivo no layout MF que acredito ser o correto para o requisito do PAF

Espero ter ajudado, estou tentando finalizar uma solução para contribuir com o projeto.

________________

Carlos Nascimento

http://www.cnbatalha.com.br

Postado

Você está certo!

Eu sabia que eu estava esquecendo de algo depois que homologuei...

Quando fui homologar na última vez, tive que alterar a rotina. Mas tava com tanta coisa na cabeça que acabei esquecendo de passar pra cá a questão.

Quando desenvolvi essa rotina, fiz dessa forma e estava funcionando, mas acho que para adequar ela alguém deve ter mudado e não deu atenção a isso.

E como eu não atualizo o componente no servidor desde a ultima homologação, acabou passando batido.

As modificações que fiz foram:

* Adicionar o pathBin

* Colocar a verificação da finalidade da mfd para gerar corretamente

Antes de subir isso para o servidor gostaria que fosse discutido, pois não sei se é a melhor solução.


procedure TACBrECFSwedaSTX.ArquivoMFD_DLL(ContInicial, ContFinal: Integer;

  NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet;

  Finalidade: TACBrECFFinalizaArqMFD;

  TipoContador: TACBrECFTipoContador);

Var

  Resp : Integer ;

  CooIni, CooFim : AnsiString ;

  OldAtivo : Boolean ;

  PathBin, Tipo :AnsiString;

begin

  LoadDLLFunctions ;


  OldAtivo := Ativo ;

  try

    AbrePortaSerialDLL ;


    PathBin:= fsApplicationPath + 'MF.BIN'; 


    if TipoContador = tpcCRZ then

     begin

       {Por CRZ}

       CooIni := IntToStrZero( ContInicial, 4 ) ;

       CooFim := IntToStrZero( ContFinal, 4 ) ;

     end

    else

     begin

       {POr COO}

       CooIni  := IntToStrZero( ContInicial, 7 );

       CooFim  := IntToStrZero( ContFinal, 7 ) ;

       PathBin := '';  // por COO Download deve ser efetuado diretamente do ECF

     end ;


    case Finalidade of

       finMF  : Tipo := '1';

       finTDM : Tipo := '3';

    else

       Tipo := '2' ;

    end;


    if PathBin <> '' then

    begin

      DeleteFile( PathBin );


      Resp := xECF_DownloadMF( pathBin );

      if Resp <> 1 then

        raise Exception.Create( ACBrStr( 'Erro ao executar xECFDownloadMF'+sLineBreak+

                                         DescricaoErroDLL(Resp) ));

    end ;


    Resp := xECF_ReproduzirMemoriaFiscalMFD(Tipo , CooIni, CooFim, NomeArquivo, PathBin);

    if (Resp <> 1) then

      raise Exception.Create( ACBrStr( 'Erro ao executar xECF_ReproduzirMemoriaFiscalMFD.'+sLineBreak+

                                       DescricaoErroDLL(Resp) ))

  finally

    xECF_FechaPortaSerial ;

    Ativo := OldAtivo ;

  end ;


  if not FileExists( NomeArquivo ) then

     raise Exception.Create( ACBrStr( 'Erro na execução de ECF_DownloadMFD.'+sLineBreak+

                            'Arquivo: "'+NomeArquivo + '" não gerado' ))

end;


procedure TACBrECFSwedaSTX.ArquivoMFD_DLL(DataInicial, DataFinal: TDateTime;

  NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet;

  Finalidade: TACBrECFFinalizaArqMFD);

Var

  Resp : Integer ;

  DiaIni, DiaFim : AnsiString ;

  OldAtivo : Boolean ;

  PathBin, Tipo:AnsiString;

begin

  LoadDLLFunctions ;


  OldAtivo := Ativo ;

  try

    AbrePortaSerialDLL ;


    PathBin:= fsApplicationPath + 'MF.BIN';

    DeleteFile( PathBin );


    Resp := xECF_DownloadMF( pathBin );

    if Resp <> 1 then

      raise Exception.Create( ACBrStr( 'Erro ao executar xECFDownloadMF'+sLineBreak+

                                       DescricaoErroDLL(Resp) ));


    case Finalidade of

       finMF  : Tipo := '1';

       finTDM : Tipo := '3';

    else

       Tipo := '2' ;

    end;


    DiaIni := FormatDateTime('dd"/"mm"/"yy', DataInicial) ;

    DiaFim := FormatDateTime('dd"/"mm"/"yy', DataFinal) ;


    Resp := xECF_ReproduzirMemoriaFiscalMFD(Tipo, DiaIni, DiaFim, NomeArquivo, pathBin);

    if (Resp <> 1) then

      raise Exception.Create( ACBrStr( 'Erro ao executar ECF_DownloadMFD.'+sLineBreak+

                                       DescricaoErroDLL(Resp) ))

  finally

    xECF_FechaPortaSerial ;

    Ativo := OldAtivo ;

  end ;


  if not FileExists( NomeArquivo ) then

     raise Exception.Create( ACBrStr( 'Erro na execução de ECF_DownloadMFD.'+sLineBreak+

                            'Arquivo: "'+NomeArquivo+'" não gerado' ))

end;


Para chamar as funções :

para gerar o ato cotepe 17/04 por data

DM.ECF.ArquivoMFD_DLL(Data1, Data2, NomeArquivo,[docLMF]);


arquivo mfd

DM.ECF.ArquivoMFD_DLL(Data1, Data2, NomeArquivo);


cotepe 17/04 por crz e coo 

      if PorCrz then //crz

         TipoDoc := [docRZ,docLMF]

      else

         TipoDoc := [docTodos,docLMF];


      DM.ECF.ArquivoMFD_DLL(Inicio, Fim, NomeArquivo,TipoDoc);

Só que pensando bem, isso pode interferir nas outras marcas... eu não testei nas outras marcas.

Não sei o que acontece se chamar essa função com esses parâmetros na bematech por exemplo.

Provavelmente o resultado vai ser diferente do esperado...

E isso tá errado.

Alguém tem alguma dica? Vou ter que arrumar isso :|

Quantas reuniões foram mesmo esta semana? Reúna os amigos!

  • 2 semanas depois ...
  • Fundadores
Postado

Fernando,

O ideal é que as modificações sejam efetuadas apenas na classe da Sweda e SwedaSTX...

Não sei se compreendi muito bem as mudanças sugeridas... mas pelo que notei elas poderiam estar internas...

Estou enviando para o SVN modificações nesse fonte:

-- ACBrECFSwedaSTX --

[*] Método CorrigeEstadoErro modificado para suportar problemas de ECF a muito

tempo sem uso, onde é necessário informar a Data e Hora atual (por: DSA)

[+] Implementado o método: PafMF_GerarCAT52 (por: DSA)

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.

  • 9 meses depois ...
Postado (editado)

Boa tarde!

 

A linha que está com problema é a seguinte, da unit ACBrECFSwedaSTX:

Resp := xECF_ReproduzirMemoriaFiscalMFD(Tipo, DiaIni, DiaFim, NomeArquivo, '');

Quando uso o modelo "ecfSwedaSTX" não consigo gerar nenhum dos arquivos do cotepe1704, mas usando o modelo "ecfSweda" consigo gerar por data, por CRZ ainda apresenta erro. fiz o teste hoje (16.05.2013)

 

Ainda não fiz nenhuma alteração no componente.

vlw.

Editado por dlimaun
  • Consultores
Postado

dlimaun,

Crie um tópico novo para uma dúvida nova conforme as regras. Veja neste em especial a "2.2 - Permaneça no assunto".

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado (editado)

EMBarbosa, o assunto é o mesmo. Também não estou conseguindo gerar o arquivo do cotepe1704 usando o modelo SwedaSTX, quis expor que a geração do arquivo por data está funcionando no modelo Sweda, logo a programação usada para esse modelo deve estar correta, podendo dessa forma facilitar a solução do problema. Mas se ainda considerar que não esta no assunto, pode excluir as minhas mensagens para não atrapalhar. Espero que tenha entendido se ainda considerar errado então, desculpe.

Tenho uma impressora Sweda ST120 qualquer coisa posso fazer os testes para validar as alterações.

Editado por dlimaun
  • Consultores
Postado

Não sei se notou, mas o tópico data de Julho de 2012. De qualquer forma, queira então relacionar o seu problema com o que foi apresentado pelo Daniel e o lampada.

Caso tenha alguma informação nova queira apresentar informações completas: comportamento esperado, comportamento conseguido, modelo do ECF, mensagem de erros, Sistema Operacional, etc...

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

EMBarbosa, não tinha notado que o tópico é de 2012, mas percebi que existia outra pessoa com o mesmo problema, não ia criar um novo tópico com o mesmo assunto.

 Sistema Operacional: Windows XP.

 Impressora: Sweda IF ST120.

 Executar a função de LMFC, com as seguintes opções selecionadas "Efetuar a geração de arquivo" e "Gerar o arquivo no formato do ato Cotepe 17/04".

 No projeto exemplo do ACBrECFTeste.

 

Adicionei o arquivo de log acbrlog.txt.

 

A Mensagem de erro é a mesma:

Erro ao executar ECF_ReproduzirMemoriaFiscalMFD.

Cod.: -2 - Parâmetro inválido na função.

 

Obrigado.

  • 2 semanas depois ...
  • Este tópico foi criado há 4193 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.