Ir para conteúdo
  • Cadastre-se

dev botao

Adaptações no código-fonte para Envio do Evento R-2055 - Aquisição de Produção Rural


Ver Solução Respondido por EMBarbosa,
  • Este tópico foi criado há 1068 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde

Fiz algumas adaptações no código-fonte para habilitar o envio do Evento R-2055 - Aquisição de Produção Rural através do ACBrMonitor Plus. 
Verifiquei que já existia uma implementação para leitura do arquivo INI para este Evento, mas ainda faltavam alguns detalhes para funcionar corretamente.

Compartilhando com vocês as alterações que fiz para enviar o evento R-2055 corretamente através leitura de arquivo INI pelo Monitor.

As alterações estão localizadas entre as linhas com o texto "//28/04/2021 * Fábio *" ).

1ª Alteração: 

unit pcnEventosReinf

function TReinfEventos.LoadFromIni(const AIniString: String): Boolean;
var
  Ok: Boolean;
begin
  case StringINIToTipoEvento(Ok, AIniString) of
    teR1000: Self.R1000.New.evtInfoContri.LerArqIni(AIniString);
    teR1070: Self.R1070.New.evtTabProcesso.LerArqIni(AIniString);
    teR2010: Self.R2010.New.evtServTom.LerArqIni(AIniString);
    teR2020: Self.R2020.New.evtServPrest.LerArqIni(AIniString);
    teR2030: Self.R2030.New.evtAssocDespRec.LerArqIni(AIniString);
    teR2040: Self.R2040.New.evtAssocDespRep.LerArqIni(AIniString);
    teR2050: Self.R2050.New.evtComProd.LerArqIni(AIniString);
    //28/04/2021 * Fábio *
    teR2055: Self.R2055.New.evtAqProd.LerArqIni(AIniString);
    //28/04/2021 * Fábio *
    teR2060: Self.R2060.New.evtCPRB.LerArqIni(AIniString);
    teR2070: Self.R2070.New.evtPgtosDivs.LerArqIni(AIniString);
    teR2098: Self.R2098.New.evtReabreEvPer.LerArqIni(AIniString);
    teR2099: Self.R2099.New.evtFechaEvPer.LerArqIni(AIniString);
    teR3010: Self.R3010.New.evtEspDesportivo.LerArqIni(AIniString);
    teR9000: Self.R9000.New.evtExclusao.LerArqIni(AIniString);
  end;

  Result := (GetCount > 0);
end;

 

2ª Alteração

unit pcnReinfR2055

TinfoProcCollectionItem = class(TObject)
  private
    //28/04/2021 * Fábio *
    FtpProc: TtpProc;
    //28/04/2021 * Fábio *
    FcodSusp: String;
    FvlrSenarNRet: double;
    FnrProc: String;
    FvlrRatNRet: double;
    FvlrCPNRet: double;
  public
    //28/04/2021 * Fábio *
    property tpProc: TtpProc read FtpProc write FtpProc;
    //28/04/2021 * Fábio *
    property nrProc: String read FnrProc write FnrProc;
    property codSusp: String read FcodSusp write FcodSusp;
    property vlrCPNRet: double read FvlrCPNRet write FvlrCPNRet;
    property vlrRatNRet: double read FvlrRatNRet write FvlrRatNRet;
    property vlrSenarNRet: double read FvlrSenarNRet write FvlrSenarNRet;
  end;

 

3ª Alteração

unit pcnReinfR2055

function TevtAqProd.LerArqIni(const AIniString: String): Boolean;
var
  INIRec: TMemIniFile;
  Ok: Boolean;
  sSecao, sFim, sSecaoF: String;
  I, J: Integer;
begin
  Result := True;

  INIRec := TMemIniFile.Create('');
  try
    LerIniArquivoOuString(AIniString, INIRec);

    // ********************************************
    // Precisa checar se não esta faltando nada
    // ********************************************

    with Self do
    begin
      sSecao := 'evtAqProd';
      Id         := INIRec.ReadString(sSecao, 'Id', '');
      Sequencial := INIRec.ReadInteger(sSecao, 'Sequencial', 0);

      sSecao := 'ideEvento';
      ideEvento.indRetif := StrToIndRetificacao(Ok, INIRec.ReadString(sSecao, 'indRetif', '1'));
      ideEvento.NrRecibo := INIRec.ReadString(sSecao, 'nrRecibo', EmptyStr);
      ideEvento.perApur  := INIRec.ReadString(sSecao, 'perApur', EmptyStr);
      ideEvento.ProcEmi  := StrToProcEmiReinf(Ok, INIRec.ReadString(sSecao, 'procEmi', '1'));
      ideEvento.VerProc     := INIRec.ReadString(sSecao, 'verProc', EmptyStr);

      {
      Indicativo de retificação de informação enviada ao ambiente nacional do eSocial.
      Validação: Informação permitida apenas se perApur for anterior ao início
      de vigência do evento R-2055 na EFD-Reinf.
      Só pode ser informado se indRetif = [1].
      Valores válidos: S.
      }
      ideEvento.retifS1250  := INIRec.ReadString(sSecao, 'retifS1250', EmptyStr);

      sSecao := 'ideContri';

      ideContri.OrgaoPublico := (TACBrReinf(FACBrReinf).Configuracoes.Geral.TipoContribuinte = tcOrgaoPublico);
      ideContri.TpInsc       := StrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInsc', '1'));
      ideContri.NrInsc       := INIRec.ReadString(sSecao, 'nrInsc', EmptyStr);
      
      sSecao := 'ideEstabAdq';

      FinfoAquisProd.ideEstabAdquir.tpInscAdq := StrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInscAdq', '1'));
      FinfoAquisProd.ideEstabAdquir.nrInscAdq := INIRec.ReadString(sSecao, 'nrInscAdq', EmptyStr);
      
      //28/04/2021 * Fábio *
      FinfoAquisProd.ideEstabAdquir.tpInscProd := StrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInscProd', '1'));
      FinfoAquisProd.ideEstabAdquir.nrInscProd := INIRec.ReadString(sSecao, 'nrInscProd', EmptyStr);
      FinfoAquisProd.ideEstabAdquir.indOpcCP   := INIRec.ReadString(sSecao, 'indOpcCP', EmptyStr);
      //28/04/2021 * Fábio *
      

      with FinfoAquisProd.ideEstabAdquir do
      begin
        I := 1;
        while true do
        begin
          // de 1 até 3
          sSecao := 'tipoCom' + IntToStrZero(I, 1);
          sFim   := INIRec.ReadString(sSecao, 'indCom', 'FIM');

          if (sFim = 'FIM') or (Length(sFim) <= 0) then
            break;

          with detAquis.New do
          begin
            indAquis := StrToDetAquis(Ok, sFim);
            vlrBruto := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrBruto', ''), 0);
            //28/04/2021 * Fábio *
            vlrCPDescPR  := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrCPDescPR', ''), 0);
            vlrRatDescPR := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrRatDescPR', ''), 0);
            vlrSenarDesc := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrSenarDesc', ''), 0);
            //28/04/2021 * Fábio *

            J := 1;
            while true do
            begin
              // de 01 até 50
              sSecao := 'infoProcJud' + IntToStrZero(I, 1) + IntToStrZero(J, 2);
              //28/04/2021 * Fábio *
              sFim   := INIRec.ReadString(sSecao, 'tpProc', 'FIM');
              //28/04/2021 * Fábio *

              if (sFim = 'FIM') or (Length(sFim) <= 0) then
                break;
            
              with infoProc.New do
              begin
                //28/04/2021 * Fábio *
                tpProc       := StrToTpProc(Ok, sFim);
                //28/04/2021 * Fábio *
                nrProc       := INIRec.ReadString(sSecao, 'nrProc', '');
                codSusp      := INIRec.ReadString(sSecao, 'codSusp', '');
                vlrCPNRet    := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrCPNRet', ''), 0);
                vlrRatNRet   := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrRatNRet', ''), 0);
                vlrSenarDesc := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrSenarDesc', ''), 0);
              end;
            
              Inc(J);
            end;
            
          end;

          Inc(I);
        end;
      end;
    end;

    GerarXML;
    XML := FXML;
  finally
    INIRec.Free;
  end;
end;

 

Realizei os envios em Ambiente de Homologação utilizando a seguinte estrutura no arquivo INI:

[evtAqProd]
Id=
Sequencial=
[ideEvento]
indRetif=
perApur=
tpAmb=
procEmi=
verProc=
[ideContri]
tpInsc=
nrInsc=
[ideEstabAdq]
tpInscAdq=
nrInscAdq=
tpInscProd=
nrInscProd=
indOpcCP=
[tipoCom1]
indCom=
vlrBruto=
vlrCPDescPR=
vlrRatDescPR=
vlrSenarDesc=
[infoProcJud101]
tpProc
nrProc=
codSusp=
vlrCPNRet=
vlrRatNRet=
vlrSenarDesc=

 

Conclusão:

Após estas adaptações, todos testes foram enviados com sucesso através do ACBrMonitor Plus 1.4.0.2.

Espero ter contribuído de alguma forma com a comunidade ACBr.

Obs: Units em Anexo para avaliação/validação pela equipe ACBr. 

 

pcnEventosReinf.pas pcnReinfR2055.pas

  • Curtir 1

Fábio W. Fonseca
Programador

Link para o comentário
Compartilhar em outros sites

  • Moderadores
58 minutos atrás, Fábio Fonseca disse:

Após estas adaptações, todos testes foram enviados com sucesso através do ACBrMonitor Plus 1.4.0.2.

tu recompilou ou tu pegou o sac?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Consultores
  • Solution
Em 29/04/2021 at 19:02, Fábio Fonseca disse:

Boa tarde

Fiz algumas adaptações no código-fonte para habilitar o envio do Evento R-2055 - Aquisição de Produção Rural através do ACBrMonitor Plus. 
Verifiquei que já existia uma implementação para leitura do arquivo INI para este Evento, mas ainda faltavam alguns detalhes para funcionar corretamente.

Compartilhando com vocês as alterações que fiz para enviar o evento R-2055 corretamente através leitura de arquivo INI pelo Monitor.

As alterações estão localizadas entre as linhas com o texto "//28/04/2021 * Fábio *" ).

1ª Alteração: 

unit pcnEventosReinf


function TReinfEventos.LoadFromIni(const AIniString: String): Boolean;
var
  Ok: Boolean;
begin
  case StringINIToTipoEvento(Ok, AIniString) of
    teR1000: Self.R1000.New.evtInfoContri.LerArqIni(AIniString);
    teR1070: Self.R1070.New.evtTabProcesso.LerArqIni(AIniString);
    teR2010: Self.R2010.New.evtServTom.LerArqIni(AIniString);
    teR2020: Self.R2020.New.evtServPrest.LerArqIni(AIniString);
    teR2030: Self.R2030.New.evtAssocDespRec.LerArqIni(AIniString);
    teR2040: Self.R2040.New.evtAssocDespRep.LerArqIni(AIniString);
    teR2050: Self.R2050.New.evtComProd.LerArqIni(AIniString);
    //28/04/2021 * Fábio *
    teR2055: Self.R2055.New.evtAqProd.LerArqIni(AIniString);
    //28/04/2021 * Fábio *
    teR2060: Self.R2060.New.evtCPRB.LerArqIni(AIniString);
    teR2070: Self.R2070.New.evtPgtosDivs.LerArqIni(AIniString);
    teR2098: Self.R2098.New.evtReabreEvPer.LerArqIni(AIniString);
    teR2099: Self.R2099.New.evtFechaEvPer.LerArqIni(AIniString);
    teR3010: Self.R3010.New.evtEspDesportivo.LerArqIni(AIniString);
    teR9000: Self.R9000.New.evtExclusao.LerArqIni(AIniString);
  end;

  Result := (GetCount > 0);
end;

 

2ª Alteração

unit pcnReinfR2055


TinfoProcCollectionItem = class(TObject)
  private
    //28/04/2021 * Fábio *
    FtpProc: TtpProc;
    //28/04/2021 * Fábio *
    FcodSusp: String;
    FvlrSenarNRet: double;
    FnrProc: String;
    FvlrRatNRet: double;
    FvlrCPNRet: double;
  public
    //28/04/2021 * Fábio *
    property tpProc: TtpProc read FtpProc write FtpProc;
    //28/04/2021 * Fábio *
    property nrProc: String read FnrProc write FnrProc;
    property codSusp: String read FcodSusp write FcodSusp;
    property vlrCPNRet: double read FvlrCPNRet write FvlrCPNRet;
    property vlrRatNRet: double read FvlrRatNRet write FvlrRatNRet;
    property vlrSenarNRet: double read FvlrSenarNRet write FvlrSenarNRet;
  end;

 

3ª Alteração

unit pcnReinfR2055


function TevtAqProd.LerArqIni(const AIniString: String): Boolean;
var
  INIRec: TMemIniFile;
  Ok: Boolean;
  sSecao, sFim, sSecaoF: String;
  I, J: Integer;
begin
  Result := True;

  INIRec := TMemIniFile.Create('');
  try
    LerIniArquivoOuString(AIniString, INIRec);

    // ********************************************
    // Precisa checar se não esta faltando nada
    // ********************************************

    with Self do
    begin
      sSecao := 'evtAqProd';
      Id         := INIRec.ReadString(sSecao, 'Id', '');
      Sequencial := INIRec.ReadInteger(sSecao, 'Sequencial', 0);

      sSecao := 'ideEvento';
      ideEvento.indRetif := StrToIndRetificacao(Ok, INIRec.ReadString(sSecao, 'indRetif', '1'));
      ideEvento.NrRecibo := INIRec.ReadString(sSecao, 'nrRecibo', EmptyStr);
      ideEvento.perApur  := INIRec.ReadString(sSecao, 'perApur', EmptyStr);
      ideEvento.ProcEmi  := StrToProcEmiReinf(Ok, INIRec.ReadString(sSecao, 'procEmi', '1'));
      ideEvento.VerProc     := INIRec.ReadString(sSecao, 'verProc', EmptyStr);

      {
      Indicativo de retificação de informação enviada ao ambiente nacional do eSocial.
      Validação: Informação permitida apenas se perApur for anterior ao início
      de vigência do evento R-2055 na EFD-Reinf.
      Só pode ser informado se indRetif = [1].
      Valores válidos: S.
      }
      ideEvento.retifS1250  := INIRec.ReadString(sSecao, 'retifS1250', EmptyStr);

      sSecao := 'ideContri';

      ideContri.OrgaoPublico := (TACBrReinf(FACBrReinf).Configuracoes.Geral.TipoContribuinte = tcOrgaoPublico);
      ideContri.TpInsc       := StrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInsc', '1'));
      ideContri.NrInsc       := INIRec.ReadString(sSecao, 'nrInsc', EmptyStr);
      
      sSecao := 'ideEstabAdq';

      FinfoAquisProd.ideEstabAdquir.tpInscAdq := StrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInscAdq', '1'));
      FinfoAquisProd.ideEstabAdquir.nrInscAdq := INIRec.ReadString(sSecao, 'nrInscAdq', EmptyStr);
      
      //28/04/2021 * Fábio *
      FinfoAquisProd.ideEstabAdquir.tpInscProd := StrToTpInscricao(Ok, INIRec.ReadString(sSecao, 'tpInscProd', '1'));
      FinfoAquisProd.ideEstabAdquir.nrInscProd := INIRec.ReadString(sSecao, 'nrInscProd', EmptyStr);
      FinfoAquisProd.ideEstabAdquir.indOpcCP   := INIRec.ReadString(sSecao, 'indOpcCP', EmptyStr);
      //28/04/2021 * Fábio *
      

      with FinfoAquisProd.ideEstabAdquir do
      begin
        I := 1;
        while true do
        begin
          // de 1 até 3
          sSecao := 'tipoCom' + IntToStrZero(I, 1);
          sFim   := INIRec.ReadString(sSecao, 'indCom', 'FIM');

          if (sFim = 'FIM') or (Length(sFim) <= 0) then
            break;

          with detAquis.New do
          begin
            indAquis := StrToDetAquis(Ok, sFim);
            vlrBruto := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrBruto', ''), 0);
            //28/04/2021 * Fábio *
            vlrCPDescPR  := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrCPDescPR', ''), 0);
            vlrRatDescPR := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrRatDescPR', ''), 0);
            vlrSenarDesc := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrSenarDesc', ''), 0);
            //28/04/2021 * Fábio *

            J := 1;
            while true do
            begin
              // de 01 até 50
              sSecao := 'infoProcJud' + IntToStrZero(I, 1) + IntToStrZero(J, 2);
              //28/04/2021 * Fábio *
              sFim   := INIRec.ReadString(sSecao, 'tpProc', 'FIM');
              //28/04/2021 * Fábio *

              if (sFim = 'FIM') or (Length(sFim) <= 0) then
                break;
            
              with infoProc.New do
              begin
                //28/04/2021 * Fábio *
                tpProc       := StrToTpProc(Ok, sFim);
                //28/04/2021 * Fábio *
                nrProc       := INIRec.ReadString(sSecao, 'nrProc', '');
                codSusp      := INIRec.ReadString(sSecao, 'codSusp', '');
                vlrCPNRet    := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrCPNRet', ''), 0);
                vlrRatNRet   := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrRatNRet', ''), 0);
                vlrSenarDesc := StringToFloatDef(INIRec.ReadString(sSecao, 'vlrSenarDesc', ''), 0);
              end;
            
              Inc(J);
            end;
            
          end;

          Inc(I);
        end;
      end;
    end;

    GerarXML;
    XML := FXML;
  finally
    INIRec.Free;
  end;
end;

 

Realizei os envios em Ambiente de Homologação utilizando a seguinte estrutura no arquivo INI:


[evtAqProd]
Id=
Sequencial=
[ideEvento]
indRetif=
perApur=
tpAmb=
procEmi=
verProc=
[ideContri]
tpInsc=
nrInsc=
[ideEstabAdq]
tpInscAdq=
nrInscAdq=
tpInscProd=
nrInscProd=
indOpcCP=
[tipoCom1]
indCom=
vlrBruto=
vlrCPDescPR=
vlrRatDescPR=
vlrSenarDesc=
[infoProcJud101]
tpProc
nrProc=
codSusp=
vlrCPNRet=
vlrRatNRet=
vlrSenarDesc=

 

Conclusão:

Após estas adaptações, todos testes foram enviados com sucesso através do ACBrMonitor Plus 1.4.0.2.

Espero ter contribuído de alguma forma com a comunidade ACBr.

Obs: Units em Anexo para avaliação/validação pela equipe ACBr. 

 

pcnEventosReinf.pas 24 kB · 1 download pcnReinfR2055.pas 16 kB · 1 download

Muito obrigado pela contribuição.
Fiz a implementação baseada nela.
Subi as alterações para o SVN na Revisão  21872.
Pelo que vi está tudo certo.
Queira por favor atualizar, testar e reportar qualquer problema.

Mais uma vez obrigado.

  • Curtir 1

[]'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.
Link para o comentário
Compartilhar em outros sites

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