Nesta parte do artigo seguirá a procedure GerarDadosBlocos já com os códigos necessários para gerar o arquivo SPED.

Como o objetivo deste tutorial e demonstrar de forma rápida o processo de geração do arquivo SPED através do componente AcBr, eu não aprofundei em algumas rotinas, como por exemplo, as de acesso ao banco de dados para filtrar as informações necessárias. Mas sugiro que usem algo como um componente TQuery para através de comandos SQL, selecionar estes dados e repassar para geração do arquivo.

Sem mais delongas, segue os códigos:


procedure TForm1.GerarDadosBloco(pBloco: String);
var Int1, Int2, Notas : Integer;
    aTotalICMS : Double;
begin
  aTotalICMS := 0;
  if pBloco = '0' then
  begin
    with ACBrSpedFiscal1.Bloco_0 do
    begin
      // informações da Empresa
      with Registro0000New do
      begin
         COD_VER    := vlVersao103;
         COD_FIN    := raOriginal;
         NOME       := 'RAZAO SOCIAL DO INFORMANTE';
         CNPJ       := '';
         CPF        := '12345678901'; // Deve ser uma informação valida
         UF         := 'RJ';
         IE         := '0000000000';
         COD_MUN    := 12345678;
         IM         := '';
         SUFRAMA    := '';
         IND_PERFIL := pfPerfilA;
         IND_ATIV   := atOutros;
      end;
      with Registro0001New do
      begin
         IND_MOV := imComDados;
         // informações complementares da Empresa
         with Registro0005New do
         begin
            FANTASIA   := 'NOME FANTASSIA DA EMPRESA';
            CEP        := '21000000';
            ENDERECO   := 'RUA PRINCIPAL';
            NUM        := 'S/N';
            COMPL      := '';
            BAIRRO     := 'CENTRO';
            FONE       := '';
            FAX        := '';
            EMAIL      := 'email@empresa.net';
         end;
         // informações da contabilidade.
         with Registro0100New do
         begin
            NOME       := 'NOME DO CONTADOR';
            CPF        := '12345678900'; // Deve ser uma informação valida
            CRC        := '123456';
            CNPJ       := '';
            CEP        := '';
            ENDERECO   := '';
            NUM        := '';
            COMPL      := '';
            BAIRRO     := '';
            FONE       := '';
            FAX        := '';
            EMAIL      := '';
            COD_MUN    := 3200607;
         end;
         // Clientes
         with Registro0150New do
         begin
           COD_PART := '000001';
           NOME     := 'RAZAO SOCIAL DO CLIENTE';
           COD_PAIS := '001';
           CNPJ     := '12345678000123';
           CPF      := '';
           IE       := '';
           COD_MUN  := 1;
           SUFRAMA  := '';
           ENDERECO := 'ENDERECO';
           NUM      := '';
           COMPL    := 'COMPL';
           BAIRRO   := 'BAIRRO';
         end;
         with Registro0190New do
         begin
           UNID  := 'UN';
           DESCR := 'Descricao unidade';
         end;
 
         for Int1 := 1 to 6 do
         begin
            if not Registro0200.LocalizaRegistro(IntToStrZero(Int1,6)) then
            begin
              with Registro0200New do
              begin
                 COD_ITEM     := IntToStrZero(Int1,6);
                 DESCR_ITEM   := 'DESCRIÇÃO DO ITEM '+IntToStrZero(Int1,6);
                 COD_BARRA    := IntToStrZero(Int1,13);
                 COD_ANT_ITEM := '';
                 UNID_INV     := 'UN';
                 TIPO_ITEM    := tiMercadoriaRevenda;
                 COD_NCM      := '';
                 EX_IPI       := '';
                 COD_GEN      := '';
                 COD_LST      := '';
                 ALIQ_ICMS    := 18;
              end;
            end;
         end;
      end;
    end;
  end
  else if pBloco = 'C' then
  begin
    Notas := StrToInt64Def(Edit2.Text,1);
    with ACBrSpedFiscal1.Bloco_C do
    begin
      with RegistroC001New do
      begin
         IND_MOV := imComDados;
         //
         for Int1 := 1 to Notas do
         begin
           with RegistroC100New do
           begin
             COD_PART      := '000001';
             IND_EMIT      := edEmissaoPropria;
             IND_OPER      := tpEntradaAquisicao;
             COD_MOD       := '01';
             COD_SIT       := sdRegular;
             SER           := '';
             NUM_DOC       := IntToStrZero(Int1,6);
             CHV_NFE       := '';
             DT_DOC        := Date();
             DT_E_S        := Date();
             VL_DOC        := 0;
             IND_PGTO      := tpSemPagamento;
             VL_DESC       := 0;
             VL_ABAT_NT    := 0;
             VL_MERC       := 0;
             IND_FRT       := tfSemCobrancaFrete;
             VL_SEG        := 0;
             VL_OUT_DA     := 0;
             VL_BC_ICMS    := 0;
             VL_ICMS       := 0;
             VL_BC_ICMS_ST := 0;
             VL_ICMS_ST    := 0;
             VL_IPI        := 0;
             VL_PIS        := 0;
             VL_COFINS     := 0;
             VL_PIS_ST     := 0;
             VL_COFINS_ST  := 0;
             //c170
             for Int2 := 1 to 6 do
             begin
               with RegistroC170New do   //Inicio Adicionar os Itens:
               begin
                  NUM_ITEM    := IntToStrZero(Int2,3);
                  COD_ITEM    := IntToStrZero(Int2,6);
                  DESCR_COMPL := 'Descricao do item '+IntToStrZero(Int2,6);
                  QTD         := 1;
                  UNID        := 'UN';
                  VL_ITEM     := 10;
                  VL_DESC     := 0;
                  IND_MOV     := mfNao;
                  CST_ICMS    := '000';
                  CFOP        := '5102';
                  COD_NAT     := '';
                  VL_BC_ICMS  := 10;
                  ALIQ_ICMS   := 18;
                  VL_ICMS     := 1.8;
                  VL_BC_ICMS_ST := 0;
                  ALIQ_ST       := 0;
                  VL_ICMS_ST    := 0;
                  IND_APUR      := iaMensal;
                  CST_IPI       := ipiEntradaIsenta;
                  COD_ENQ       := '';
                  VL_BC_IPI     := 0;
                  ALIQ_IPI      := 0;
                  VL_IPI        := 0;
                  CST_PIS       := pisOutrasOperacoes;
                  VL_BC_PIS     := 0;
                  ALIQ_PIS_PERC := 0;
                  QUANT_BC_PIS  := 0;
                  ALIQ_PIS_R    := 0;
                  VL_PIS        := 0;
                  CST_COFINS    := cofinsOutrasOperacoes;
                  VL_BC_COFINS  := 0;
                  ALIQ_COFINS_PERC := 0;
                  QUANT_BC_COFINS  := 0;
                  ALIQ_COFINS_R    := 0;
                  VL_COFINS        := 0;
                  COD_CTA          := '000';
                end;
             end;
             //c190
             with RegistroC190New do
             begin
                CST_ICMS    := '000';
                CFOP        := '5102';
                ALIQ_ICMS   := 18;
                VL_OPR      := 60;
                VL_BC_ICMS  := 60;
                VL_ICMS     := 10.8;
                VL_BC_ICMS_ST := 0;
                VL_ICMS_ST    := 0;
                VL_RED_BC     := 0;
                VL_IPI        := 0;
                COD_OBS       := '';
             end;
             aTotalICMS := aTotalICMS + 10.8;
           end;
         end;
      end;
    end;
  end
  else if pBloco = 'D' then
  begin
    with ACBrSpedFiscal1.Bloco_D do
    begin
       with RegistroD001New do
       begin
         IND_MOV := imSemDados;
       end;
    end;
  end
  else if pBloco = 'E' then
  begin
    with ACBrSpedFiscal1.Bloco_E do
    begin
      with RegistroE001New do
      begin
         IND_MOV := imComDados;
         with RegistroE100New do
         begin
           DT_INI := DateTimePicker1.DateTime;
           DT_FIN := DateTimePicker2.DateTime;
         end;
         with RegistroE110New do
         begin
            VL_TOT_DEBITOS := aTotalICMS;
            VL_AJ_DEBITOS := 0;
            VL_TOT_AJ_DEBITOS := 0;
            VL_ESTORNOS_CRED := 0;
            VL_TOT_CREDITOS := 0;
            VL_AJ_CREDITOS := 0;
            VL_TOT_AJ_CREDITOS := 0;
            VL_ESTORNOS_DEB := 0;
            VL_SLD_CREDOR_ANT := 0;
            VL_SLD_APURADO := aTotalICMS;
            VL_TOT_DED := 0;
            VL_ICMS_RECOLHER := aTotalICMS;
            VL_SLD_CREDOR_TRANSPORTAR := 0;
            DEB_ESP := 0;
         end;
      end;
    end;
  end
  else if pBloco = 'H' then
  begin
    with ACBrSpedFiscal1.Bloco_H do
    begin
      with RegistroH001New do
      begin
         IND_MOV := imComDados;
         //
         with RegistroH005New do
         begin
            DT_INV := Date;
            VL_INV := 1000;
            // FILHO
            for Int1 := 1 to 6 do
            begin
               with RegistroH010New do
               begin
                  COD_ITEM := IntToStrZero(Int1,6);
                  UNID := 'UN';
                  QTD  := 1;
                  VL_UNIT := 100;
                  VL_ITEM := 100;
                  IND_PROP := piInformante;
                  COD_PART := '';
                  TXT_COMPL := '';
                  COD_CTA := '';
               end;
            end;
         end;
      end;
    end;
  end
  else if pBloco = '1' then
  begin
    with ACBrSpedFiscal1.Bloco_1 do
    begin
      with Registro1001New do
      begin
        IND_MOV := imSemDados;
      end;
    end;
  end
  else if pBloco = '9' then
  begin
    ACBrSPEDFiscal1.WriteBloco_9;
  end
end;