Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Olá amigos! :mrgreen:

Bem, no ano passado eu havia feito minha rotina para gerar o Vendas do Período, do PAF-ECF, usando o ACBr. Me lembro que havia deixado validando sem problemas, no validador do Sintegra, mas, agora que voltei a mexer no projeto, me parece que ele não está regando o registro 90. Fiz isso:

(já no final da rotina) :

          begin

            try

              {********************************************************}

              {*        REGISTRO 75 - COD. PRODUTOS OU SERVIÇOS       *}

              {********************************************************}


              wRegistro75:= TRegistro75.Create;

              wRegistro75.DataInicial:= ACBrSintegra1.Registro10.DataInicial;

              wRegistro75.DataFinal:= ACBrSintegra1.Registro10.DataFinal;

              wRegistro75.Codigo:= wRegistro60D.Codigo;

              wRegistro75.Descricao:= FieldByName('NM_PRODUTO').AsString;

              wRegistro75.Unidade:= FieldByName('UNIDADE').AsString;

              if FieldByName('IPI').IsNull then

                wRegistro75.AliquotaIpi:= 0

              else

                wRegistro75.AliquotaIpi:= FieldByName('IPI').AsCurrency;

              wRegistro75.AliquotaICMS:= 0;


              ACBrSintegra1.Registros75.Add(wRegistro75);

            except

            on e : Exception do

              Informa('Falha ao gerar o registro 75. '+ e.Message);

            end;

            Next;

          end;


          Data:= IncDay(Data,1);

        end;

        Query.Active:= False;

      end;

    try

      GeraArquivo;

Fiz algo errado? Como eu poderia gerar o registro 90 à partir deste?

Agradeço a todos,

André.

Postado

Debugando, descobri que cai em uma exceção dentro do ACBr. Logo aqui:

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

for i:=0 to Registros60A.Count - 1 do

begin

wregistro60M:=GetRegistro60M(Registros60A.Emissao,Registros60A.NumSerie);

if not Assigned(wregistro60M) then

raise Exception.Create(ACBrStr('Registro 60A sem registro 60M correspondente!'+#13+

DateToStr(Registros60A.Emissao)+' - '+Registros60A.NumSerie));

wregistro60M.Regs60A.Add(Registros60A);

end;

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

E agora? =O

  • Consultores
Postado

Registro 60A sem registro 60M correspondente!

Procure o motivo de você ter lançado registros 60A e não ter lançado o 60M do mesmo dia. É algum erro no lançamento/geração dos dados e não na montagem do arquivo.

[]'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

Não consegui resolver. O que será que pode estar causando este problema? A rotina completa é essa:

procedure TfrmMenuFiscal.ArqSintegra;

var

  arquivo: TextFile;

  NM_Arquivo ,Diretorio : String;


  wregistro60M: TRegistro60M;

  wregistro60A: TRegistro60A;

  wregistro60D: TRegistro60D;

  wregistro75 : TRegistro75;

  wregistro50 : TRegistro50;

  wregistro61 : TRegistro61;

  data: TDate;//sempre que usar a var data lembrar d fazê-la receber a data inicial (de)

  iRetorno: Integer;

  regEAD: AnsiString;

begin

  nm_arquivo:= 'Vendas_do_Periodo_SINTEGRA'+'_'+FormatDateTime('yyyymmddhhmm',now)+'.txt';

  diretorio:= CriaDiretorio('Vendas_do_Periodo');

  ACBrSintegra1.FileName:= diretorio+nm_arquivo;

  ACBrSintegra1.VersaoValidador:= Tversaovalidador(1);

  data:= DataHoraInicial(edtDe.Date);

  with ACBrSintegra1 do

  begin

    try

      {Registro 10}

      Registro10.CNPJ:= PoeZeros(SoNumeros(RegEmpresa.CGC),14);                                                                                                         {TAM}

      Registro10.Inscricao:= CortaString(SoNumeros(RegEmpresa.InscEstadual),14,true);

      Registro10.RazaoSocial:= CortaString(RegEmpresa.Nm_Empresa,35,true);

      Registro10.Cidade:= CortaString(RegEmpresa.Cidade,30,true);

      Registro10.Estado:= CortaString(RegEmpresa.Estado,2,true);

      Registro10.Telefone:= PoeZeros(SoNumeros(RegEmpresa.Telefone),10);

      Registro10.DataInicial:= DataHoraInicial(edtDe.Date);

      Registro10.DataFinal:= DataHoraInicial(edtAte.Date);


      Registro10.CodigoConvenio:= IntToStr(3);

      Registro10.NaturezaInformacoes := IntToStr(3);

      Registro10.FinalidadeArquivo := IntToStr(1);

    except

      Informa('Falha ao gerar o Registro 10.');

    end;


    try

      {Registro 11}

      ThreadQuery.ExecuteAndWait(Self);

      query.Active := false;

      query.SQL.Clear;

      query.SQL.Add('SELECT E.* FROM EMPRESAS E');

      if not query.Prepared then query.Prepare;

      query.Active := true;

      Registro11.Endereco:= CortaString(RegEmpresa.Endereco,34,true);

      Registro11.Numero:= PoeZeros(Query.FieldByName('ENDERECO_NUMERO').AsString,5);

      Registro11.Complemento:= CortaString(Query.FieldByName('COMPLEMENTO').AsString,22,true);

      Registro11.Bairro:= CortaString(RegEmpresa.Bairro,15,true);

      Registro11.Cep:= RegEmpresa.Cep;

      Registro11.Responsavel:= CortaString(Query.FieldByName('NM_RESPONSAVEL').AsString,28,true);

      Registro11.Telefone:= PoeZeros(SoNumeros(RegEmpresa.Telefone),12);

    except

    on e : Exception do

      Informa('Falha ao gerar o Registro 11 '+ e.Message);

    end;


    GerarRegistro50;

    GerarRegistro60M;

    GerarRegistro60A;

    GerarRegistro60D;


    try

      Data:= DataHoraInicial(edtDe.Date);

      while Data <= DataHoraFinal(edtAte.Date) do

      begin

        with Query do

        begin

          Active:= False;

          SQL.Clear;

          SQL.Add('SELECT PR.CD_PRODUTO, PI.QUANTIDADE, PI.SUBTOTAL');

          SQL.Add('from PEDIDO_ITEM PI');

          SQL.Add('join PEDIDO PD on PD.NUM_DOCUMENTO = PD.NUM_DOCUMENTO');

          SQL.Add('left outer join PRODUTOS PR on PI.CD_PRODUTO = PR.CD_PRODUTO ');

         // SQL.Add('where PD.DATA_HORA between :de and :ate');


          if rgpFaixadeDados.ItemIndex = 2 then

            SQL.Add('WHERE  (ECF_COO BETWEEN :DE AND :ATE)')

          else if rgpFaixadeDados.ItemIndex = 1 then

            SQL.Add('WHERE  (ECF_CRZ BETWEEN :DE AND :ATE)')

          else

            SQL.Add('where PD.DATA_HORA between :de and :ate');


          Active:= TRUE;

          if not Prepared then Prepare;

          if rgpFaixadeDados.ItemIndex = 2 then

          begin

            ParamByName('DE').AsString := edtCOOIni.Text;

            ParamByName('ATE').AsString := edtCOOFin.Text;

          end else if rgpFaixadeDados.ItemIndex = 1 then

          begin

            ParamByName('DE').AsString := edtCRZIni.Text;

            ParamByName('ATE').AsString := edtCRZFin.Text;

          end else

          begin

            ParamByName('DE').AsDateTime := DataHoraInicial(edtDe.Date);

            ParamByName('ATE').AsDateTime := DataHoraFinal(edtAte.Date);

          end;

          Active:= True;

          First;

          while not eof do

          begin

            try

              {********************************************************}

              {*        REGISTRO 75 - COD. PRODUTOS OU SERVIÇOS       *}

              {********************************************************}


              wRegistro75:= TRegistro75.Create;

              wRegistro75.DataInicial:= ACBrSintegra1.Registro10.DataInicial;

              wRegistro75.DataFinal:= ACBrSintegra1.Registro10.DataFinal;

              wRegistro75.Codigo:= wRegistro60D.Codigo;

              wRegistro75.Descricao:= FieldByName('NM_PRODUTO').AsString;

              wRegistro75.Unidade:= FieldByName('UNIDADE').AsString;

              if FieldByName('IPI').IsNull then

                wRegistro75.AliquotaIpi:= 0

              else

                wRegistro75.AliquotaIpi:= FieldByName('IPI').AsCurrency;

              wRegistro75.AliquotaICMS:= 0;


              ACBrSintegra1.Registros75.Add(wRegistro75);

            except

            on e : Exception do

              Informa('Falha ao gerar o registro 75. '+ e.Message);

            end;

            Next;

          end;


          Data:= IncDay(Data,1);

        end;

        Query.Active:= False;

      end;

    except

    on e : Exception do

      Informa('Falha ao gerar o arquivo 60D. '+e.Message);

    end;

    try

      GeraArquivo;

    except

    on e : Exception do

      Informa('Falha ao gerar Arquivo Sintegra.'+ e.Message);

    end;


    ACBrECF.Free;

    FechaTransacao;

  end;


  {Assinatura}

  SetLength(regEAD, 256);

    Informa('Arquivo Sintegra gerado em: ' + PL +

                diretorio + nm_arquivo + PL);



   ACBrEAD.AssinarArquivoComEAD(diretorio + nm_arquivo);

   iRetorno := validateFile((diretorio + nm_arquivo), mChPub.Lines.Text, mChPri.Lines.Text);

    if iRetorno = 0 then

      Informa('Arquivo Sintegra gerado em:'+

      PL + diretorio + nm_arquivo +

      'Assinatura Inválida, Verifique!')

    else

      Informa('Arquivo Arquivo Sintegra gerado com sucesso em:  ' +

            PL + diretorio + nm_arquivo);

end;

Alguém poderia me ajudar?

  • Consultores
Postado

O seu problema está nessas duas procedures

    GerarRegistro60M;
GerarRegistro60A;[/code]

A última vez que isso me aconteceu foi que alguém esqueceu de lançar uma Redução Z, e daí meu software não gerou o registro 60M. Como havia cupons no dia, ele gerou o registro 60A do dia, e esse erro aconteceu.

Se está caindo em uma exceção, a mensagem dela pode ajudar a descobrir em qual dia está faltando o dado.

[]'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

Então, Elton...

Mas eu estou com a ECF desconectada do computador. O engraçado é que, aparentemente, a exceção é exatamente aqui:

if not Assigned(wregistro60M) then

Eu não faço ideia de como resolver. Estava funcionando, há um tempo atrás. Deixei o projeto parado por algum tempo e agora que voltei a mexer, está assim.

Mas como a ECF não está conectada, não poderia ser redução Z, né?

Obrigado.

Postado

Detalhe: um outro projeto meu, antigo (um backup, na verdade) está funcionando. Copiei a rotina dele, dessa que postei aqui, e ocorre o mesmo problema, sendo que no backup funciona. Muito estranho isso.

  • Consultores
Postado

Então, Elton...

Mas eu estou com a ECF desconectada do computador. O engraçado é que, aparentemente, a exceção é exatamente aqui:

Detalhe: um outro projeto meu, antigo (um backup, na verdade) está funcionando. Copiei a rotina dele, dessa que postei aqui, e ocorre o mesmo problema, sendo que no backup funciona. Muito estranho isso.

Não André. Acho que você não entendeu que uma coisa não tem nada a ver com a outra. :?

Em primeiro lugar, o ACBrSintegra não pega nada do ECF. Tudo é você quem insere. Pelo seu código, provém do seu Banco de dados. Isso é fácil de notar pois você usa Query e SQL fazendo um loop para criar um registro novo a cada linha de retorno da query.

Então, se está faltando alguma coisa é no seu BD. O problema não é exatamente no código. É na falta do registro 60 M. Essa falta acontece nas duas procedures que mencionei antes. Você está criando pelo menos um registro 60A em um dia em que não foi criado um registro 60M.

Você sabe o que cada registro desse significa?

[]'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

Então, Elton...

Mas eu estou com a ECF desconectada do computador. O engraçado é que, aparentemente, a exceção é exatamente aqui:

Detalhe: um outro projeto meu, antigo (um backup, na verdade) está funcionando. Copiei a rotina dele, dessa que postei aqui, e ocorre o mesmo problema, sendo que no backup funciona. Muito estranho isso.

Não André. Acho que você não entendeu que uma coisa não tem nada a ver com a outra. :?

Em primeiro lugar, o ACBrSintegra não pega nada do ECF. Tudo é você quem insere. Pelo seu código, provém do seu Banco de dados. Isso é fácil de notar pois você usa Query e SQL fazendo um loop para criar um registro novo a cada linha de retorno da query.

Então, se está faltando alguma coisa é no seu BD. O problema não é exatamente no código. É na falta do registro 60 M. Essa falta acontece nas duas procedures que mencionei antes. Você está criando pelo menos um registro 60A em um dia em que não foi criado um registro 60M.

Você sabe o que cada registro desse significa?

Uai! Então vou verificar o meu banco de dados. Sim, sei mais ou menos do que cada um se trata. Estou acompanhando por aqui:

http://www.fazenda.gov.br/confaz/confaz ... ntacao.htm

Obrigado.

Postado

Mas essas procedures que vc citou, em maioria, estão ainda com os valores padrão que veio no ACBr. Veja:

procedure TfrmMenuFiscal.GerarRegistro60M;

var

  wregistro60M: TRegistro60M;

begin

  wregistro60M:=TRegistro60M.Create;

  wregistro60M.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60M.NumSerie:='000000987456';

  wregistro60M.NumOrdem:=1;

  wregistro60M.ModeloDoc:='2D';

  wregistro60M.CooInicial:=1000;

  wregistro60M.CooFinal:=1050;

  wregistro60M.CRZ:=1;

  wregistro60M.CRO:=1;

  wregistro60M.VendaBruta:=2050.35;

  wregistro60M.ValorGT:=10000;

  ACBrSintegra1.Registros60M.Add(wregistro60M);


  wregistro60M:=TRegistro60M.Create;

  wregistro60M.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60M.NumSerie:='000000777777';

  wregistro60M.NumOrdem:=2;

  wregistro60M.ModeloDoc:='2D';

  wregistro60M.CooInicial:=2000;

  wregistro60M.CooFinal:=2010;

  wregistro60M.CRZ:=1;

  wregistro60M.CRO:=1;

  wregistro60M.VendaBruta:=300;

  wregistro60M.ValorGT:=15000;

  ACBrSintegra1.Registros60M.Add(wregistro60M);

end;
e :
procedure TfrmMenuFiscal.GerarRegistro60A;

var

  wregistro60A: TRegistro60A;

begin

  ThreadQuery.ExecuteAndWait(Self);

  with Query do

  begin

    Close;

    SQL.Clear;

    SQL.Add('SELECT * FROM ECF');

    Open;

  end;



  wregistro60A:=TRegistro60A.Create;

  wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60A.NumSerie:= Query.FieldByName('NUM_SERIE').AsString;

  wregistro60A.StAliquota:='F';

  wregistro60A.Valor:=500;

  ACBrSintegra1.Registros60A.Add(wregistro60A);


  wregistro60A:=TRegistro60A.Create;

  wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60A.NumSerie:='000000987456';

  wregistro60A.StAliquota:='I';

  wregistro60A.Valor:=550;

  ACBrSintegra1.Registros60A.Add(wregistro60A);


  wregistro60A:=TRegistro60A.Create;

  wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60A.NumSerie:='000000987456';

  wregistro60A.StAliquota:='1800';

  wregistro60A.Valor:=1000.35;

  ACBrSintegra1.Registros60A.Add(wregistro60A);


  wregistro60A:=TRegistro60A.Create;

  wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60A.NumSerie:='000000777777';

  wregistro60A.StAliquota:='F';

  wregistro60A.Valor:=100;

  ACBrSintegra1.Registros60A.Add(wregistro60A);


  wregistro60A:=TRegistro60A.Create;

  wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60A.NumSerie:='000000777777';

  wregistro60A.StAliquota:='I';

  wregistro60A.Valor:=100;

  ACBrSintegra1.Registros60A.Add(wregistro60A);


  wregistro60A:=TRegistro60A.Create;

  wregistro60A.Emissao:=ACBrSintegra1.Registro10.DataInicial;

  wregistro60A.NumSerie:='000000777777';

  wregistro60A.StAliquota:='1800';

  wregistro60A.Valor:=100;

  ACBrSintegra1.Registros60A.Add(wregistro60A);

end;

Nesse último, que usa o campo NUM_SERIE, no bd, o mesmo está com o valor "123".

  • Consultores
Postado

ahhh então está explicado né.

Os valores que estão no DEMO são valores de exemplo. Você deve buscar esses valores do seu Banco de dados.

[]'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

ahhh então está explicado né.

Os valores que estão no DEMO são valores de exemplo. Você deve buscar esses valores do seu Banco de dados.

Vou concertar isso então. Só que no backup, onde essa parte está idêntica, funciona.

Muito obrigado!

  • 7 meses depois ...
Postado

Ola colegas do ACBr.

No ACBrSintegra o registro 90 é totalizado automaticamente, ou seja não é necessário um GeraRegistro90?

Muito obrigado.

  • Consultores
Postado

Não. É preciso só chamar o AcbrSintegra.GeraArquivo

[]'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

Elton, muito obrigado por responder.

Ele (Registro90) precisa ser guardado no bd? (acho que não, mas gostaria de ter certeza).

Muito obrigado.

  • Consultores
Postado

Não. Ele é só um contador dos registros anteriores.

[]'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.
  • Este tópico foi criado há 4418 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.