Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

Boa tarde, estou tendo o seguinte problema:

Na geração do arquivo da EFD contribuições, utilizando a versão mais recente da biblioteca ACBR trunk2, o componente TACBrSPEDPisCofins não está gerando alguns registros que são obrigatórios, quando o campo IND_MOV do registro de abertura daquele registro é definido como sem dados.

Aparentemente, se não há dados não é necessária a informação de tal registro, no entanto o PVA da EFD Contribuições reclama da estrutura de esses registros não forem informados ao menos como "sem dados". Além disso no Guia Pratico da EFD Contribuições Versão 1.20 mostra que alguns registros tem que estar obrigatoriamente no arquivo, mesmo que sem dados (neste caso o registro de abertura e de fechamento).

Os blocos para os quais essa regra não se aplica são: I e P.

O problema está no procedimento SaveFileTXT da unit ACBrSpedPisCofins.pas, cujo trecho destaco abaixo:

procedure TACBrSPEDPisCofins.SaveFileTXT;
begin
  try
    IniciaGeracao;

    WriteBloco_0;
    if FBloco_A.RegistroA001.IND_MOV = imComDados then WriteBloco_A( True );
    if FBloco_C.RegistroC001.IND_MOV = imComDados then WriteBloco_C( True );
    if FBloco_D.RegistroD001.IND_MOV = imComDados then WriteBloco_D;
    if FBloco_F.RegistroF001.IND_MOV = imComDados then WriteBloco_F;
    if FBloco_I.RegistroI001.IND_MOV = imComDados then WriteBloco_I;
    if FBloco_M.RegistroM001.IND_MOV = imComDados then WriteBloco_M;
    if FBloco_P.RegistroP001.IND_MOV = imComDados then WriteBloco_P;
    if FBloco_1.Registro1001.IND_MOV = imComDados then WriteBloco_1;
    WriteBloco_9;
  finally
    /// Limpa de todos os Blocos as listas de todos os registros.
    LimpaRegistros;
    FACBrTXT.Conteudo.Clear;

    FInicializado := False ;
        end;
end;

 

Note que as checagens "if FBloco_X.RegistroX001.IND_MOV = imComDados then" impedem que os blocos de informação obrigatória (que forem informados como sem dados) sejam gerados.

Segue anexo a screen do PVA versão 2.0.12 alegando erro na estrutura do arquivo.

Alguém confirma isso?

 

1.png

Editado por adenilton
  • Consultores
Postado

Olá Adenilton,

   Só pra confirmar, você está falando do SPED Contribuições certo? É que ficou postado na área do SPED PIS/COFINS.

   Você consegue reproduzir o problema com o programa de exemplo?

   Outra coisa, em quais páginas do Guia Prático estão a informação de que o bloco precisa ser gerado?

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

O ACBr Sped não vai gerar registros obrigatórios pelo PVA por padrão, ou seja se quem deve gerenciar se os registros deve ter o param de com ou sem dados é vc então se quer que um registro seja gerado por exigência do PVA informe a propriedade com ComDados no seu código 

  • Curtir 1

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Postado (editado)

Primeiramente gostaria de elogiar a todos os responsáveis pelo projeto open source e pela dedicação de vocês.

Quanto à reposta do EMBarbosa:

[Só pra confirmar, você está falando do SPED Contribuições certo? É que ficou postado na área do SPED PIS/COFINS.]

R: Desculpa, mas não encontrei no fórum do SAC(http://www.projetoacbr.com.br/forum/forum/23-acbr-sac/) uma área para "SPED Contribuições", somente para "SPED Pis/Cofins". Mas se pensar bem, a EFD Contribuições não é o mesmo que o SPED PIS/COFINS? Ref: http://www1.receita.fazenda.gov.br/sistemas/efd-contribuicoes/o-que-e.htm.

 [Você consegue reproduzir o problema com o programa de exemplo?]

R: Sim, consegui reproduzir o problema aqui na aplicação de demonstração (Utilizando a aplicação do trunk2, com fontes da biblioteca atualizado até hoje - 21/10/2015) e abaixo segue os passos para que também possa identificar o problema:

1 - Na aplicação de demonstração, no arquivo Frm_SPEDPisCofins.pas, linha 239, troque:

for int0140 := 1 to 2 do

Por:

for int0140 := 1 to 1 do

Em seguida, execute a aplicação e clique nos botões "Bloco 0", "Bloco A", "Bloco C", "Bloco D" e depois em "Gerar TXT", conforme imagem (1.png) em anexo.

Irás notar que ele não irá gerar os blocos F e M, mas irá gerar o Bloco 1, como 'sem dados", mas o Bloco 1 NÃO FOI MARCADO, certo?

Agora restaure o conteúdo da linha 239 para o que estava lá anteriormente e refaça o procedimento acima para gerar o TXT. Você notará que agora ele irá gerar os Bloco F e M, além do Bloco I que não foi marcado.

Por que isso aconteceu?

Bom, o código do componente acaba gerando em cascata alguns blocos, mesmo que você não os informe que seja "com" ou "sem" dados.

Se olhares para o código do procedimento SaveFileTXT na unit ACBrSpedPisCofins.pas, irás ver que no final ele executa o procedimento WriteBloco_9 para totalizar os registros. Até aí tudo bem.

Agora vamos no procedimento WriteBloco_9 e notamos que ele verifica se o Bloco 1 Já foi gravado. Caso o Bloco 1 não tenha sido gravado, ele chama o procedimento WriteBloco_1 para escrever o Bloco 1 como "sem dados". Até aí tudo bem.

Agora vamos para o procedimento WriteBloco_1 que é chamado, conforme mencionado acima. Nele é verificada a existência do Bloco P. Se ele não encontrar o Bloco P, ele grava. É aí na gravação do Bloco P onde está o problema, vejamos abaixo:

procedure TACBrSPEDPisCofins.WriteBloco_P;
begin
   if (Bloco_P.Gravado) or (Bloco_0.Registro0145Count = 0) then exit ;

   if not Bloco_M.Gravado then
      WriteBloco_M;

   /// BLOCO P
   WriteRegistroP001;
   WriteRegistroP990;
   Bloco_P.WriteBuffer;
   Bloco_P.Conteudo.Clear;
   Bloco_P.Gravado := True ;
end;

Olhe para a verificação em:

if (Bloco_P.Gravado) or (Bloco_0.Registro0145Count = 0) then exit ;

Quer dizer, se não tiver um registro 0145 ele não irá gravar o P, mas também não irá gravar o M, que por sua vez não gravará o F, e assim por diante.

No entanto o registro 0145 não deve interferir nos blocos M, F, D, C, etc. Como está em cascata no código. A existência do registro 0145 deve garantir somente a obrigatoriedade do bloco P.

Próximo ponto:

[Outra coisa, em quais páginas do Guia Prático estão a informação de que o bloco precisa ser gerado?]

R: Essa informação encontra-se nas páginas 24-35 do "Guia Prático EFD-Contribuições – Versão 1.20", Seção 4 – Obrigatoriedade dos Registros.

Você vai notar que nesta seção, para cada bloco, é indicado a "ocorrência" e a "Obrigatoriedade do Registro". Se a ocorrência de determinado registro de abertura do Bloco for maior que zero e a obrigatoriedade estiver indicada como "O", o bloco será de presença obrigatória no arquivo, mesmo que seja "Sem dados".

 

Por último quanto a menagem do Isaque Pinheiro, Observo o seguinte:

[O ACBr Sped não vai gerar registros obrigatórios pelo PVA por padrão]

R: Como já mostrado acima, o componente gera blocos em cascata como "sem dados", quando detecta que este ainda não foi gerado. Se "não vai gerar registros obrigatórios pelo PVA por padrão" for o desejo dos administradores do projeto, então o código do componente precisa ser revisto.

[se quer que um registro seja gerado por exigência do PVA informe a propriedade com ComDados no seu código]

R: Irá notar no Guia prático que "todos" os blocos são de presença obrigatória no arquivo, exceto os blocos I e P. Além disso se você informar o registro de abertura do bloco como "ComDados" e não informar os registros filhos daquele bloco, o PVA irá apontar erros na estrutura do arquivo.

Sei que a mensagem ficou enorme, mas espero poder ajudar para melhorar o código do componente.

Fico no aguardo para que possam realizar os testes e fazer os devidos ajustes no código, se necessário. Ou então me recomendarem como deverei proceder, pois se eu informar os blocos obrigatórios que não possuem registros filhos como "sem dados", o componente não irá gravar eles no arquivo, a não ser que eu informe o registro 0145. Já se eu informar como "com dados" e o bloco não possuir registros filhos, o PVA irá informar erro na estrutura.

Desde já agradeço a todos.

1.png

Editado por adenilton
Postado

Para confirmar o problema, ainda a título de exemplo, após mudar a linha 239 para:

for int0140 := 1 to 1 do

Também altere o procedimento btnB_FClick(Sender: TObject) para:

procedure TFrmSPEDPisCofins.btnB_FClick(Sender: TObject);
begin
   // Alimenta o componente com informações para gerar todos os registros do
   // Bloco F.
   with ACBrSPEDPisCofins1.Bloco_F do
   begin
      with RegistroF001New do
      begin
        IND_MOV := imSemDados;

//        //F010 - Identificação do Estabelecimento
//        with RegistroF010New do
//        begin
//           CNPJ := '11111111000191';
//
//           //F100 - Demais Documentos e Operações Geradoras de Contribuição e Créditos
//           with RegistroF100New do
//           begin
//              IND_OPER      := indRepCustosDespesasEncargos;
//              COD_PART      := '1';
//              COD_ITEM      := '000001'; //Codigo do Item no registro 0200
//              DT_OPER       := Date();
//              VL_OPER       := 0.01;  //Deve ser Maior que zero
//              CST_PIS       := stpisCredPresAquiExcRecTribMercInt;  //Para Operação Representativa de Aquisição, Custos, Despesa ou Encargos, Sujeita à Incidência de Crédito, o CST deve ser referente a Operações com Direito a Crédito (50 a 56) ou a Crédito Presumido (60 a 66).Para Operação Representativa de Receita Auferida, Sujeita ao Pagamento da Contribuição, o CST deve ser igual a 01, 02, 03 ou 05.Para Operação Representativa de Receita Auferida NÃO Sujeita ao Pagamento da Contribuição, o CST deve ser igual a 04, 06, 07, 08, 09, 49 ou 99.
//              VL_BC_PIS     := 0;
//              ALIQ_PIS      := 1.2375;
//              VL_PIS        := 0;
//              CST_COFINS    := stcofinsCredPresAquiExcRecTribMercInt;
//              VL_BC_COFINS  := 0;
//              ALIQ_COFINS   := 3.04;
//              VL_COFINS     := 0;
//              NAT_BC_CRED   := bccAqBensRevenda;
//              IND_ORIG_CRED := opcMercadoInterno;
//              COD_CTA       := '';
//              COD_CCUS      := '';
////              COD_CCUS      := '123';//Para usar o COD_CCUS é necessário gerar, primeiro, um registro 0600 correspondente.
//              DESC_DOC_OPER := '';
//           end;
//        end;
      end;
   end;
   btnB_F.Enabled := false;

   if cbConcomitante.Checked then
   begin
      ACBrSPEDPisCofins1.WriteBloco_F;
      LoadToMemo;
   end;
end;

Em seguida execute a aplicação, clique nos botões "Bloco 0", "Bloco A", "Bloco C", "Bloco D" e "Bloco F" e depois em "Gerar TXT", conforme imagem (2.png) em anexo.

Note agora que o bloco F foi gerado no componente como "Sem dados", mas o mesmo não consta no arquivo gerado!

 

2.png

  • Consultores
Postado (editado)

Primeiramente gostaria de elogiar a todos os responsáveis pelo projeto open source e pela dedicação de vocês.

Quanto à reposta do EMBarbosa:

[Só pra confirmar, você está falando do SPED Contribuições certo? É que ficou postado na área do SPED PIS/COFINS.]

R: Desculpa, mas não encontrei no fórum do SAC(http://www.projetoacbr.com.br/forum/forum/23-acbr-sac/) uma área para "SPED Contribuições", somente para "SPED Pis/Cofins". Mas se pensar bem, a EFD Contribuições não é o mesmo que o SPED PIS/COFINS? Ref: http://www1.receita.fazenda.gov.br/sistemas/efd-contribuicoes/o-que-e.htm.

Ops... Você tem toda a razão. Falha minha. Coincidentemente eu estava lendo o site do SPED e acabei confundindo com Contábil.

Vou tentar verificar se consigo reproduzir e resolver agora a tarde...

Editado por EMBarbosa

[]'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.
  • Consultores
Postado (editado)

Olá adenilton. Poderia tentar alterar o método TACBrSPEDPisCofins.WriteBloco_P para o seguinte código e testar aí se resolve seu problema? Aqui parece que funcionou...

procedure TACBrSPEDPisCofins.WriteBloco_P;
begin
   if not Bloco_M.Gravado then
      WriteBloco_M;

   if (Bloco_P.Gravado) or (Bloco_0.Registro0145Count = 0) then exit ;

   /// BLOCO P
   WriteRegistroP001;
   WriteRegistroP990;
   Bloco_P.WriteBuffer;
   Bloco_P.Conteudo.Clear;
   Bloco_P.Gravado := True ;
end;

Edit: Tópico relacionado: http://www.projetoacbr.com.br/forum/topic/25334-acbrspedpiscofins-geração-bloco-p-obrigatoriedade-do-bloco-0145

Editado por EMBarbosa

[]'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.
  • Consultores
Postado

Sim. Só precisava confirmar. Acabei de enviar ao SVN, revisão 10282.

Obrigado pelo report e testes. (:

  • 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.
×
×
  • 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.