Ir para conteúdo
  • Cadastre-se

dev botao

Bloco G Não É Gerado De Forma Alguma


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

Recommended Posts

Bom dia, aos usuários ACBR que já conseguiram gerar um SPED Fiscal sem erros no validador peço a encarecida ajuda.

 

O Bloco G não gera de forma alguma, mesmo passando os parametros. Por favor me apontem o que estou fazendo de errado:

procedure TF_ProcessaSped.geraBlocoG;

var
   ContRegistro: Integer;
begin
   ContRegistro := QryG110.RecordCount + QryG125.RecordCount + QryG126.RecordCount + QryG130.RecordCount + QryG140.RecordCount;


   // BLOCO G – CONTROLE DO CRÉDITO DE ICMS DO ATIVO PERMANENTE CIAP
   with ACBrSpedFiscal1.Bloco_G do
   begin
      DT_INI := QryMovimento.FieldByName('DT_MOV_INI').AsDateTime;
      DT_FIN := QryMovimento.FieldByName('DT_MOV_FIM').AsDateTime;


      // Abertura do Bloco G
      with RegistroG001New do
      begin
         // Indicador de movimento - TOpenBlocos
         if ContRegistro > 0 then
            IND_MOV := imComDados; // 0- Bloco com dados informados;


         if ContRegistro = 0 then
            IND_MOV := imSemDados; // 1- Bloco sem dados informados.
      end;


      if ContRegistro > 0 then
      begin
{$REGION '   REGISTRO G110: ICMS – ATIVO PERMANENTE – CIAP'}
         QryG110.First;
         {
ID
DT_PROCESSAMENTO
DT_INI
DT_FIN
SALDO_IN_ICMS
SOM_PARC
VL_TRIB_EXP
VL_TOTAL
IND_PER_SAI
ICMS_APROP
SOM_ICMS_OC


         }
         while not QryG110.EOF do
         begin
            with RegistroG110New do
            begin
               DT_INI := QryG110.FieldByName('DT_INI').AsDateTime;
               DT_FIN := QryG110.FieldByName('DT_FIN').AsDateTime;


               SALDO_IN_ICMS := QryG110.FieldByName('SALDO_IN_ICMS').AsFloat;
               SOM_PARC := QryG110.FieldByName('SOM_PARC').AsFloat;
               VL_TRIB_EXP := QryG110.FieldByName('VL_TRIB_EXP').AsFloat;
               VL_TOTAL := QryG110.FieldByName('VL_TOTAL').AsFloat;
               IND_PER_SAI := QryG110.FieldByName('IND_PER_SAI').AsFloat;
               ICMS_APROP := QryG110.FieldByName('ICMS_APROP').AsFloat;
               SOM_ICMS_OC := QryG110.FieldByName('SOM_ICMS_OC').AsFloat;
            end;


            QryG110.Next;
         end;
{$ENDREGION}


{$REGION '   REGISTRO G125: MOVIMENTAÇÃO  DE  BEM  OU  COMPONENTE  DO  ATIVO IMOBILIZADO'}
         QryG125.First;
         {
   ID
   DT_PROCESSAMENTO
   COD_IND_BEM
   DT_MOV
   TIPO_MOV
   VL_IMOB_ICMS_OP
   VL_IMOB_ICMS_ST
   VL_IMOB_ICMS_FRT
   VL_IMOB_ICMS_DIF
   NUM_PARC
   VL_PARC_PASS
         }
         while not QryG125.EOF do
         begin
            with RegistroG125New do
            begin
               COD_IND_BEM := QryG125.FieldByName('COD_IND_BEM').AsString;
               DT_MOV := QryG125.FieldByName('DT_MOV').AsDateTime;


               // TIPO_MOV := QryG125.FieldByName('TIPO_MOV').AsInteger;
               // Tipo de movimentação do bem ou componente
               if QryG125.FieldByName('TIPO_MOV').AsString = 'SI' then
                  TIPO_MOV := mbcSI; // SI = Saldo inicial de bens imobilizados
               if QryG125.FieldByName('TIPO_MOV').AsString = 'IM' then
                  TIPO_MOV := mbcIM; // IM = Imobilização de bem individual
               if QryG125.FieldByName('TIPO_MOV').AsString = 'IA' then
                  TIPO_MOV := mbcIA; // IA = Imobilização em Andamento - Componente
               if QryG125.FieldByName('TIPO_MOV').AsString = 'CI' then
                  TIPO_MOV := mbcCI; // CI = Conclusão de Imobilização em Andamento – Bem Resultante
               if QryG125.FieldByName('TIPO_MOV').AsString = 'MC' then
                  TIPO_MOV := mbcMC; // MC = Imobilização oriunda do Ativo Circulante
               if QryG125.FieldByName('TIPO_MOV').AsString = 'BA' then
                  TIPO_MOV := mbcBA; // BA = Baixa do Saldo de ICMS - Fim do período de apropriação
               if QryG125.FieldByName('TIPO_MOV').AsString = 'AT' then
                  TIPO_MOV := mbcAT; // AT = Alienação ou Transferência
               if QryG125.FieldByName('TIPO_MOV').AsString = 'PE' then
                  TIPO_MOV := mbcPE; // PE = Perecimento, Extravio ou Deterioração
               if QryG125.FieldByName('TIPO_MOV').AsString = 'OT' then
                  TIPO_MOV := mbcOT; // OT = Outras Saídas do Imobilizado


               VL_IMOB_ICMS_OP := QryG125.FieldByName('VL_IMOB_ICMS_OP').AsFloat;
               VL_IMOB_ICMS_ST := QryG125.FieldByName('VL_IMOB_ICMS_ST').AsFloat;
               VL_IMOB_ICMS_FRT := QryG125.FieldByName('VL_IMOB_ICMS_FRT').AsFloat;
               VL_IMOB_ICMS_DIF := QryG125.FieldByName('VL_IMOB_ICMS_DIF').AsFloat;
               NUM_PARC := QryG125.FieldByName('NUM_PARC').AsInteger;
               VL_PARC_PASS := QryG125.FieldByName('VL_PARC_PASS').AsFloat;
            end;
            QryG125.Next;
         end;
{$ENDREGION}


{$REGION '   REGISTRO G126: OUTROS CRÉDITOS CIAP'}
         QryG126.First;
         {
   ID
   DT_PROCESSAMENTO
   DT_INI
   DT_FIM
   NUM_PARC
   VL_PARC_PASS
   VL_TRIB_OC
   VL_TOTAL
   IND_PER_SAI
   VL_PARC_APROP


         }
         while not QryG126.EOF do
         begin
            with RegistroG126New do
            begin
               DT_INI := QryG126.FieldByName('DT_INI').AsDateTime;
               DT_FIN := QryG126.FieldByName('DT_FIN').AsDateTime;
               NUM_PARC := QryG126.FieldByName('NUM_PARC').AsInteger;
               VL_PARC_PASS := QryG126.FieldByName('VL_PARC_PASS').AsFloat;
               VL_TRIB_OC := QryG126.FieldByName('VL_TRIB_OC').AsFloat;
               VL_TOTAL := QryG126.FieldByName('VL_TOTAL').AsFloat;
               IND_PER_SAI := QryG126.FieldByName('IND_PER_SAI').AsFloat;
               VL_PARC_APROP := QryG126.FieldByName('VL_PARC_APROP').AsFloat;
            end;
            QryG126.Next;
         end;
{$ENDREGION}


{$REGION '   REGISTRO G130: IDENTIFICAÇÃO DO DOCUMENTO FISCAL'}
         QryG130.First;
         {
   ID
   DT_PROCESSAMENTO
   IND_EMIT
   COD_PART
   COD_MOD
   SERIE
   NUM_DOC
   CHV_NFE_CTE
   DT_DOC
         }
         while not QryG130.EOF do
         begin
            with RegistroG130New do
            begin
               // Indicador do emitente do documento fiscal
               //   IND_EMIT := QryG130.FieldByName('IND_EMIT').AsInteger;
               case QryG130.FieldByName('IND_EMIT').AsInteger of
                  0: IND_EMIT := edEmissaoPropria; // 0 - Emissão própria
                  1: IND_EMIT := edTerceiros; // 1 - Terceiro
               end;


               COD_PART := QryG130.FieldByName('COD_PART').AsString;
               COD_MOD := QryG130.FieldByName('COD_MOD').AsString;
               SERIE := QryG130.FieldByName('SERIE').AsString;
               NUM_DOC := QryG130.FieldByName('NUM_DOC').AsString;
               CHV_NFE_CTE := QryG130.FieldByName('CHV_NFE_CTE').AsString;
               DT_DOC := QryG130.FieldByName('DT_DOC').AsDateTime;
            end;
            QryG130.Next;
         end;
{$ENDREGION}


{$REGION '   REGISTRO G140: IDENTIFICAÇÃO DO ITEM DO DOCUMENTO FISCAL'}
         QryG140.First;
         {
   ID
   DT_PROCESSAMENTO
   NUM_ITEM
   COD_ITEM
         }
         while not QryG140.EOF do
         begin
            with RegistroG140New do
            begin
               NUM_ITEM := QryG140.FieldByName('NUM_ITEM').AsString;
               COD_ITEM := QryG140.FieldByName('COD_ITEM').AsString;
            end;
            QryG140.Next;
         end;
{$ENDREGION}
      end;
   end;
 
Agradeço qualquer ajuda.
Editado por EMBarbosa
Favor usar a tag code ao postar códigos.
Link para o comentário
Compartilhar em outros sites

  • Consultores

  Não dá pra perceber nada de imediato.

  O que está saindo no resultado? Você fez debug no seu código? Está passando pelas linhas que criam os registros G110, G125, G126, G130 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.
Link para o comentário
Compartilhar em outros sites

  • Moderadores

sugestão efetue um único teste em seu código, claro que não dará grande diferença mas 

troque seu código de :

         if ContRegistro > 0 then
            IND_MOV := imComDados; // 0- Bloco com dados informados;


         if ContRegistro = 0 then
            IND_MOV := imSemDados; // 1- Bloco sem dados informados.

por

         if ContRegistro > 0 then
            IND_MOV := imComDados // 0- Bloco com dados informados;
         else
            IND_MOV := imSemDados; // 1- Bloco sem dados informados.
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

  Não dá pra perceber nada de imediato.

  O que está saindo no resultado? Você fez debug no seu código? Está passando pelas linhas que criam os registros G110, G125, G126, G130 etc...?

Sim, no minimo o cabecalho É executado, passando a situacao do movimento e o intervalo de movimentação.

 

O Arquivo gera normal mas o bloco G nao como segue:

 

E001|1|
|E990|2|
|H001|1|
|H990|2|
|1001|1|
|1990|2|
|9001|0|
|9900|0000|1|
|9900|0001|1|
|9900|0005|1|
|9900|0100|1|
|9900|0150|30|
|9900|0990|1|
|9900|C001|1|
|9900|C100|30|
|9900|C170|51|
|9900|C190|33|
|9900|C500|1|
|9900|C990|1|
|9900|D001|1|
|9900|D990|1|
|9900|E001|1|
|9900|E990|1|
|9900|H001|1|
|9900|H990|1|
|9900|1001|1|
|9900|1990|1|
|9900|9001|1|
|9900|9900|24|
|9900|9990|1|
|9900|9999|1|
|9990|27|
|9999|187|
Link para o comentário
Compartilhar em outros sites

 

sugestão efetue um único teste em seu código, claro que não dará grande diferença mas 

troque seu código de :

         if ContRegistro > 0 then
            IND_MOV := imComDados; // 0- Bloco com dados informados;


         if ContRegistro = 0 then
            IND_MOV := imSemDados; // 1- Bloco sem dados informados.

por

         if ContRegistro > 0 then
            IND_MOV := imComDados // 0- Bloco com dados informados;
         else
            IND_MOV := imSemDados; // 1- Bloco sem dados informados.

Concordo que resolveria se não não executasse as linhas de comando, mas executa. e no final o arquivo gerado do sped fica conforme citado para EMBarbosa..

segue copia baixo:

 

E001|1|
|E990|2|
|H001|1|
|H990|2|
|1001|1|
|1990|2|
|9001|0|
|9900|0000|1|
|9900|0001|1|
|9900|0005|1|
|9900|0100|1|
|9900|0150|30|
|9900|0990|1|
|9900|C001|1|
|9900|C100|30|
|9900|C170|51|
|9900|C190|33|
|9900|C500|1|
|9900|C990|1|
|9900|D001|1|
|9900|D990|1|
|9900|E001|1|
|9900|E990|1|
|9900|H001|1|
|9900|H990|1|
|9900|1001|1|
|9900|1990|1|
|9900|9001|1|
|9900|9900|24|
|9900|9990|1|
|9900|9999|1|
|9990|27|
|9999|187|
Link para o comentário
Compartilhar em outros sites

  • Consultores

Verifique a sua data Inicial, o bloco G só é gerado para dados após Janeiro de 2011. Veja:

   /// Prorrogado para 01/01/2011 conforme Guia Prático da EFD 2.01
   /// *Bloco G incluído para vigorar a partir do período de apuração de janeiro de 2011.
   if DT_INI >= EncodeDate(2011,01,01) then
   begin
     /// BLOCO G
     WriteRegistroG001;
     WriteRegistroG990;
     Bloco_G.WriteBuffer;
   end;

Caso seja posterior, coloque um breakpoint logo no início deste método ( procedure TACBrSPEDFiscal.WriteBloco_G) da unit ACBrSpedFiscal.pas. Daí siga com F7 para verificar o motivo dele não gerar o bloco.

[]'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á 3725 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.