Advertisement
Regys

Preenchimento da NFC-e versão 3.10

Nov 20th, 2017
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 11.99 KB | None | 0 0
  1. var
  2.   ConverteOk: Boolean;
  3.   CountItem: Integer;
  4.   VlrProdutos, VlrTotalDesconto, VlrTotalOutros, VlrTotalNF, VlrBaseICMS, VlrICMS, VlrPis, VlrCofins: Double;
  5.   vlrTribFederal, vlrTribEstadual: Double;
  6.   vlrTTTotTrib, vlrTTTribFederal, vlrTTTribEstadual: Double;
  7. begin
  8.   Self.ConfigurarNFe;
  9.  
  10.   try
  11.     ACBrNFe1.NotasFiscais.Clear;
  12.     with ACBrNFe1.NotasFiscais.Add.NFe do
  13.     begin
  14.       // Ambiente
  15.       Ide.tpAmb     := ACBrNFe1.Configuracoes.WebServices.Ambiente;
  16.       Ide.verProc   := '1.0.0.0';
  17.       Ide.tpImp     := ACBrNFe1.DANFE.TipoDANFE;
  18.  
  19.       // tipo de emissão
  20.       Ide.tpEmis := StrToTpEmis(ConverteOk, cdsNFeTIPO_EMISSAO.AsString);
  21.       if not ConverteOk then
  22.         raise EDatabaseError.CreateFmt('Tipo de Emissão "%d" desconhecida.', [cdsNFeTIPO_EMISSAO.AsInteger])
  23.       else
  24.         ACBrNFe1.Configuracoes.Geral.FormaEmissao := Ide.tpEmis;
  25.  
  26.       // Identificação da nota fiscal eletrônica
  27.       Ide.modelo    := 65;
  28.       Ide.tpImp     := tiNFCe;
  29.       Ide.tpNF      := tnSaida;
  30.       Ide.finNFe    := fnNormal;
  31.       Ide.indPag    := ipVista;
  32.       Ide.indFinal  := cfConsumidorFinal;
  33.       Ide.indPres   := pcPresencial;
  34.       Ide.cNF       := cdsNFeNUMERO.AsInteger;
  35.       Ide.nNF       := cdsNFeNUMERO.AsInteger;
  36.       Ide.serie     := cdsNFeSERIE.AsInteger;
  37.       Ide.natOp     := 'VENDA CONSUMIDOR';
  38.       Ide.dEmi      := Now;
  39.       Ide.tpEmis    := StrToTpEmis(ConverteOk, cdsNFeTIPO_EMISSAO.AsString);
  40.       Ide.cUF       := cdsNFeEMPRESA_UF_IBGE.AsInteger;
  41.       Ide.cMunFG    := cdsNFeEMPRESA_CIDADE_IBGE.AsInteger;
  42.       Ide.verProc   := 'v1.0';
  43.  
  44.       if Ide.tpEmis = teOffLine then
  45.       begin
  46.         Ide.dhCont := Now;
  47.         Ide.xJust  := 'ERRO ACESSO WEBSERVICE';
  48.       end;
  49.  
  50.       // identificação do EMITENTE
  51.       Emit.xNome             := cdsNFeEMPRESA_RAZAO_SOCIAL.AsString;
  52.       Emit.xFant             := cdsNFeEMPRESA_NOME_FANTASIA.AsString;
  53.       Emit.CNPJCPF           := cdsNFeEMPRESA_CNPJ.AsString;
  54.       Emit.IE                := cdsNFeEMPRESA_IE.AsString;
  55.       Emit.IEST              := '';
  56.       Emit.CNAE              := cdsNFeEMPRESA_CNAE.AsString;
  57.       Emit.IM                := cdsNFeEMPRESA_IM.AsString;
  58.       Emit.EnderEmit.fone    := cdsNFeEMPRESA_FONE.AsString;
  59.       Emit.EnderEmit.xLgr    := cdsNFeEMPRESA_ENDERECO.AsString;
  60.       Emit.EnderEmit.nro     := cdsNFeEMPRESA_NUMERO.AsString;
  61.       Emit.EnderEmit.xCpl    := cdsNFeEMPRESA_COMPLEMENTO.AsString;
  62.       Emit.EnderEmit.xBairro := cdsNFeEMPRESA_BAIRRO.AsString;
  63.       Emit.EnderEmit.xMun    := cdsNFeEMPRESA_CIDADE.AsString;
  64.       Emit.EnderEmit.cMun    := cdsNFeEMPRESA_CIDADE_IBGE.AsInteger;
  65.       Emit.EnderEmit.UF      := cdsNFeEMPRESA_UF.AsString;
  66.       Emit.EnderEmit.CEP     := cdsNFeEMPRESA_CEP.AsInteger;
  67.       Emit.enderEmit.cPais   := 1058;
  68.       Emit.enderEmit.xPais   := 'BRASIL';
  69.  
  70.       // tipo de regime tributário
  71.       Emit.CRT := StrToCRT(ConverteOk, cdsNFeEMPRESA_CRT.AsString);
  72.       if not ConverteOk then
  73.         raise EDatabaseError.CreateFmt('Código do regime tributário "%d" desconhecido.', [cdsNFeEMPRESA_CRT.AsInteger]);
  74.  
  75.       // informações do destinatário da nota fiscal
  76.       Dest.xNome             := cdsNFePESSOA_NOME.AsString.Trim;
  77.       Dest.CNPJCPF           := cdsNFePESSOA_CNPJ_CPF.AsString.Trim;
  78.       Dest.IE                := '';
  79.       Dest.ISUF              := '';
  80.       Dest.indIEDest         := inNaoContribuinte;
  81.       Dest.EnderDest.Fone    := cdsNFePESSOA_FONE.AsString.Trim;
  82.       Dest.EnderDest.xLgr    := cdsNFePESSOA_ENDERECO.AsString.Trim;
  83.       Dest.EnderDest.nro     := cdsNFePESSOA_NUMERO.AsString.Trim;
  84.       Dest.EnderDest.xCpl    := cdsNFePESSOA_COMPLEMENTO.AsString.Trim;
  85.       Dest.EnderDest.xBairro := cdsNFePESSOA_BAIRRO.AsString.Trim;
  86.       Dest.EnderDest.xMun    := cdsNFePESSOA_CIDADE.AsString.Trim;
  87.       Dest.EnderDest.cMun    := cdsNFePESSOA_CIDADE_IBGE.AsInteger;
  88.       Dest.EnderDest.UF      := cdsNFePESSOA_UF.AsString.Trim;
  89.       Dest.EnderDest.CEP     := StrToIntDef(cdsNFePESSOA_CEP.AsString, 0);
  90.       Dest.EnderDest.cPais   := 1058;
  91.       Dest.EnderDest.xPais   := 'Brasil';
  92.  
  93.       // Informações do frete ( não possui na NFC-e )
  94.       Transp.modFrete := mfSemFrete;
  95.  
  96.       // inicialização de totais
  97.       VlrBaseICMS        := 0.00;
  98.       VlrICMS            := 0.00;
  99.       VlrPis             := 0.00;
  100.       VlrCofins          := 0.00;
  101.  
  102.       vlrTTTotTrib       := 0.00;
  103.       vlrTTTribFederal   := 0.00;
  104.       vlrTTTribEstadual  := 0.00;
  105.  
  106.       VlrProdutos        := 0.00;
  107.       VlrTotalNF         := 0.00;
  108.       VlrTotalDesconto   := 0.00;
  109.       VlrTotalOutros     := 0.00;
  110.  
  111.       // itens da nota fiscal
  112.       Det.Clear;
  113.       CountItem := 0;
  114.       cdsNFeItem.First;
  115.       while not cdsNFeItem.Eof do
  116.       begin
  117.         Inc(CountItem);
  118.  
  119.         with Det.Add do
  120.         begin
  121.           Prod.nItem        := CountItem;
  122.           Prod.cProd        := Trim(cdsNFeItemID_PRODUTO.AsString);
  123.           Prod.cEAN         := Trim(cdsNFeItemGTIN.AsString);
  124.           Prod.xProd        := Trim(cdsNFeItemDESCRICAO.AsString);
  125.           Prod.NCM          := cdsNFeItemNCM.AsString;
  126.           Prod.EXTIPI       := cdsNFeItemEXTIPI.AsString;
  127.           Prod.CFOP         := cdsNFeItemCFOP.AsString;
  128.           Prod.uCom         := cdsNFeItemUND.AsString;
  129.           Prod.qCom         := cdsNFeItemQUANTIDADE.AsFloat;
  130.           Prod.vUnCom       := cdsNFeItemVL_UNITARIO.AsFloat;
  131.           Prod.vProd        := RoundABNT(Prod.qCom * Prod.vUnCom, 2);
  132.           Prod.cEANTrib     := cdsNFeItemGTIN.AsString;
  133.           Prod.uTrib        := Prod.uCom;
  134.           Prod.qTrib        := Prod.qCom;
  135.           Prod.vUnTrib      := Prod.vUnCom;
  136.           Prod.vFrete       := 0.00;
  137.           Prod.vSeg         := 0.00;
  138.           Prod.vOutro       := RoundABNT(cdsNFeItemVL_OUTROS.AsFloat + cdsNFeItemVL_OUTROS_RATEIO.AsFloat, 2);
  139.           Prod.vDesc        := RoundABNT(cdsNFeItemVL_DESCONTO.AsFloat + cdsNFeItemVL_DESCONTO_RATEIO.AsFloat, 2);
  140.           infAdProd         := cdsNFeItemINF_ADICIONAL.AsString;
  141.  
  142.           // calculos de totais
  143.           VlrProdutos       := VlrProdutos + Prod.vProd;
  144.           VlrTotalNF        := VlrTotalNF  + (Prod.vProd - Prod.vDesc + Prod.vOutro);
  145.           VlrTotalDesconto  := VlrTotalDesconto + Prod.vDesc;
  146.           VlrTotalOutros    := VlrTotalOutros + Prod.vOutro;
  147.  
  148.           // calculos de impostos da note aproximados
  149.           vlrTribFederal    := RoundABNT(cdsNFeItemIN_VL_FEDERAL.AsCurrency, 2);
  150.           vlrTribEstadual   := RoundABNT(cdsNFeItemIN_VL_ESTADUAL.AsCurrency, 2);
  151.  
  152.           // totais de impostos aproximados
  153.           vlrTTTribFederal  := vlrTTTribFederal   + vlrTribFederal;
  154.           vlrTTTribEstadual := vlrTTTribEstadual  + vlrTribEstadual;
  155.  
  156.           // Tributação do ICMS
  157.           with Imposto do
  158.           begin
  159.             vTotTrib     := vlrTribFederal + vlrTribEstadual;
  160.             vlrTTTotTrib := vlrTTTotTrib + vTotTrib;
  161.  
  162.             // origem da mercadoria
  163.             ICMS.orig := StrToOrig(ConverteOk, cdsNFeItemORIGEM.AsString);
  164.             if not ConverteOk then
  165.               raise EDatabaseError.CreateFmt('Origem "%d" desconhecida.', [cdsNFeItemORIGEM.AsInteger]);
  166.  
  167.             // situação tributária
  168.             if Emit.CRT = crtRegimeNormal then
  169.             begin
  170.               // ICMS normal
  171.               ICMS.CST := StrToCSTICMS(ConverteOk, cdsNFeItemCST.AsString);
  172.               if not ConverteOk then
  173.                 raise EDatabaseError.CreateFmt('Situação tributária "%s" desconhecida.',[cdsNFeItemCST.AsString]);
  174.  
  175.               if Imposto.ICMS.CST in [cst10, cst30, cst60, cst70, cst90] then
  176.                 Prod.CEST := cdsNFeItemCEST.AsString;
  177.  
  178.               ICMS.modBC       := dbiValorOperacao;
  179.               ICMS.vBC         := cdsNFeItemICMS_VBASE.AsFloat;
  180.               ICMS.pICMS       := cdsNFeItemICMS_ALIQUOTA.AsFloat;
  181.               ICMS.vICMS       := cdsNFeItemICMS_VIMPOSTO.AsFloat;
  182.               ICMS.pRedBC      := 0.00;
  183.  
  184.               if ICMS.vBC > 0 then
  185.               begin
  186.                 VlrBaseICMS := VlrBaseICMS + ICMS.vBC;
  187.                 VlrICMS     := VlrICMS     + ICMS.vICMS;
  188.               end;
  189.             end
  190.             else
  191.             begin
  192.               // campos do simples nacional
  193.               ICMS.CSOSN := StrToCSOSNIcms(ConverteOk, cdsNFeItemCST.AsString);
  194.               if not ConverteOk then
  195.                 raise EDatabaseError.CreateFmt('Situação tributária no simples nacional "%s" desconhecida.', [cdsNFeItemCST.AsString]);
  196.  
  197.               if Imposto.ICMS.CSOSN in [csosn201, csosn202, csosn203, csosn500,csosn900] then
  198.                 Prod.CEST := cdsNFeItemCEST.AsString;
  199.  
  200.               ICMS.pCredSN     := cdsNFeItemSN_ALIQCREDITO.AsFloat;
  201.               ICMS.vCredICMSSN := cdsNFeItemSN_VCREDITO.AsFloat;
  202.             end;
  203.  
  204.             // imposto do pis
  205.             PIS.CST := StrToCSTPIS(ConverteOk, FormatFloat('00', cdsNFeItemPIS_CST.AsInteger));
  206.             if not ConverteOk then
  207.               raise EDatabaseError.CreateFmt('Situação tributária do PIS "%s" desconhecida.', [cdsNFeItemPIS_CST.AsString]);
  208.  
  209.             PIS.vBC  := cdsNFeItemPIS_VBASE.AsFloat;
  210.             PIS.pPIS := cdsNFeItemPIS_ALIQUOTA.AsFloat;
  211.             PIS.vPIS := cdsNFeItemPIS_VIMPOSTO.AsFloat;
  212.  
  213.             // imposto do cofins
  214.             COFINS.CST := StrToCSTCOFINS(ConverteOk, FormatFloat('00', cdsNFeItemCOFINS_CST.AsInteger));
  215.             if not ConverteOk then
  216.               raise EDatabaseError.CreateFmt('Situação tributária do COFINS "%s" desconhecida.', [cdsNFeItemCOFINS_CST.AsString]);
  217.  
  218.             COFINS.vBC     := cdsNFeItemCOFINS_VBASE.AsFloat;
  219.             COFINS.pCOFINS := cdsNFeItemCOFINS_ALIQUOTA.AsFloat;
  220.             COFINS.vCOFINS := cdsNFeItemCOFINS_VIMPOSTO.AsFloat;
  221.  
  222.  
  223.             VlrPis      := VlrPis      + PIS.vPIS;
  224.             VlrCofins   := VlrCofins   + COFINS.vCOFINS;
  225.           end;
  226.         end;
  227.  
  228.         cdsNFeItem.Next;
  229.       end;
  230.  
  231.       // Totais da nota fiscal
  232.       Total.ICMSTot.vBC      := VlrBaseICMS;
  233.       Total.ICMSTot.vICMS    := VlrICMS;
  234.       Total.ICMSTot.vFrete   := 0.00;
  235.       Total.ICMSTot.vSeg     := 0.00;
  236.       Total.ICMSTot.vOutro   := VlrTotalOutros;
  237.       Total.ICMSTot.vDesc    := VlrTotalDesconto;
  238.       Total.ICMSTot.vBCST    := 0.00;
  239.       Total.ICMSTot.vST      := 0.00;
  240.       Total.ICMSTot.vII      := 0.00;
  241.       Total.ICMSTot.vIPI     := 0.00;
  242.       Total.ICMSTot.vPIS     := VlrPis;
  243.       Total.ICMSTot.vCOFINS  := VlrCofins;
  244.       Total.ICMSTot.vProd    := VlrProdutos;
  245.       Total.ICMSTot.vNF      := VlrTotalNF;
  246.       Total.ICMSTot.vTotTrib := vlrTTTotTrib;
  247.  
  248.       // informações complementares
  249.       InfAdic.infCpl     := cdsNFeOBSERVACAO.AsString;
  250.       InfAdic.infAdFisco := '';
  251.  
  252.       // tributos aproximados incidentes sobre a nota
  253.       ACBrNFe1.DANFE.TributosSeparadamente := True;
  254.       ACBrNFe1.DANFE.vTribFed              := vlrTTTribFederal;
  255.       ACBrNFe1.DANFE.vTribEst              := vlrTTTribEstadual;
  256.       ACBrNFe1.DANFE.vTribMun              := 0.00;
  257.       ACBrNFe1.DANFE.FonteTributos         := ACBrIBPTax1.Fonte;
  258.       ACBrNFe1.DANFE.ChaveTributos         := ACBrIBPTax1.ChaveArquivo;
  259.  
  260.       // valor do troco, quando houver
  261.       ACBrNFe1.DANFE.vTroco := cdsNFeVL_TROCO.AsFloat;
  262.  
  263.       //PAGAMENTOS apenas para NFC-e
  264.       cdsNFePagto.First;
  265.       while not cdsNFePagto.Eof do
  266.       begin
  267.         with pag.Add do
  268.         begin
  269.           tPag := StrToFormaPagamento(ConverteOk, Format('%2.2d', [cdsNFePagtoFORMA_PAGAMENTO.AsInteger]));
  270.           if not ConverteOk then
  271.             tPag := fpOutro;
  272.  
  273.           vPag := cdsNFePagtoVALOR.AsFloat;
  274.  
  275.           if tPag in [fpCartaoCredito, fpCartaoDebito] then
  276.             tpIntegra := tiPagNaoIntegrado;
  277.  
  278.           // remover o troco da finalizadora dinheiro para fechar
  279.           // na versão 4.0 isso não mais será necessário
  280.           if (tPag = fpDinheiro) and (cdsNFeVL_TROCO.AsFloat > 0) then
  281.             vPag := vPag - cdsNFeVL_TROCO.AsFloat;
  282.         end;
  283.  
  284.         cdsNFePagto.Next;
  285.       end;
  286.     end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement