Esboço completo de geração de XML NF-e

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Esboço completo de geração de XML NF-e

Mensagem por rochinha »

Amiguinhos,

Os esboço colocadoa aqui tem o intuito de ajudar aos amigos que estão as voltas com a criação do XML para intercâmbio com o SEFAZ.

Código: Selecionar todos

      cNFEindPag  := VerifyINI( "NFELETRONICA", "indPag"  , "0"           , cPath+"nfw.ini" ) // 0-a vista, 1-a prazo
      cNFEmod     := VerifyINI( "NFELETRONICA", "mod"     , "55"          , cPath+"nfw.ini" ) // 55-nota fiscal eletronica
      cNFEserie   := VerifyINI( "NFELETRONICA", "serie"   , "1"           , cPath+"nfw.ini" ) // 1
      //cNFEtpNF  := VerifyINI( "NFELETRONICA", "tpNF"    , "1"           , cPath+"nfw.ini" ) // 0-entrada, 1-saida
      cNFEtpImp   := VerifyINI( "NFELETRONICA", "tpImp"   , "2"           , cPath+"nfw.ini" ) // 1-retrato, 2-paisagem
      cNFEtpEmis  := VerifyINI( "NFELETRONICA", "tpEmis"  , "1"           , cPath+"nfw.ini" ) // 1-Normal, 2-Contingencia, 3-SCAN, 4-DPEC, 5-FS-DA
      cNFEtpAmb   := VerifyINI( "NFELETRONICA", "tpAmb"   , "1"           , cPath+"nfw.ini" ) // 1-Producao, 2-Homologacao
      cNFEfinNFe  := VerifyINI( "NFELETRONICA", "finNFe"  , "1"           , cPath+"nfw.ini" ) // 1-Normal, 2-Complementar, 3-Ajuste
      cNFEprocEmi := VerifyINI( "NFELETRONICA", "procEmi" , "0"           , cPath+"nfw.ini" ) // 1-Emissao pelo 5Volution, 3-Pelo Emissor do Fisco
      cNFEverProc := VerifyINI( "NFELETRONICA", "verProc" , "FENIX 1.0.20", cPath+"nfw.ini" ) //
      cNFEsperar  := VerifyINI( "NFELETRONICA", "Esperar" , "60"          , cPath+"nfw.ini" ) //

      dbSelectArea( "PN" )
      EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED

      EDX OPEN MARK "NFe" ATTRIB "xmlns" VALUE "http://www.portalfiscal.inf.br/nfe" OF oEDX
      EDX OPEN MARK "infNFe" ; // ATTRIB "xmlns:xsi" VALUE "http://www.w3.org/2001/XMLSchema-instance" ;
          ATTRIB "Id"        VALUE "SistemaFaturamento5Volution" ;
          ATTRIB "versao"    VALUE "1.10" OF oEDX

          EDX OPEN MARK "ide" OF oEDX /* *****( OK )***** */
              EDX OPEN MARK "cUF"     TYPE "" TAG ClIBGEUF                  AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "cNF"     TYPE "" TAG str( nIDNFE )             AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "natOp"   TYPE "" TAG ltrim(str( nIDNatureza ))+"-"+alltrim( cIDNatureza ) AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "indPag"  TYPE "" TAG cNFEindPag                AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "mod"     TYPE "" TAG cNFEmod                   AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "serie"   TYPE "" TAG cNFEserie                 AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "nNF"     TYPE "" TAG str( nIDNFE )             AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "dEmi"    TYPE "" TAG dtoz( dDTEmissao )        AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "dSaiEnt" TYPE "" TAG dtoz( dDTSaida )          AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "tpNF"    TYPE "" TAG cNFEtpNF                  AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "cMunFG"  TYPE "" TAG ClIBGEUF+ClIBGECODUF      AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "tpImp"   TYPE "" TAG cNFEtpImp                 AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "tpEmis"  TYPE "" TAG cNFEtpEmis                AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "cDV"     TYPE "" TAG cDV                       AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "tpAmb"   TYPE "" TAG cNFEtpAmb                 AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "finNFe"  TYPE "" TAG cNFEfinNFe                AUTOCLOSE REQUIRED OF oEDX
              if nOLDIDNFe > 0
                 EDX OPEN MARK "NFref" OF oEDX
                     EDX OPEN MARK "refNFe"  TYPE "" TAG cOLDIDNFe          AUTOCLOSE REQUIRED OF oEDX
                     EDX OPEN MARK "refNF" OF oEDX
                         EDX OPEN MARK "cUF"   TYPE "" TAG substr(cOLDIDNFe,01,2) AUTOCLOSE REQUIRED OF oEDX
                         EDX OPEN MARK "AAMM"  TYPE "" TAG substr(cOLDIDNFe,03,2) AUTOCLOSE REQUIRED OF oEDX
                         EDX OPEN MARK "CNPJ"  TYPE "" TAG substr(cOLDIDNFe,05,2) AUTOCLOSE REQUIRED OF oEDX
                         EDX OPEN MARK "mod"   TYPE "" TAG substr(cOLDIDNFe,21,2) AUTOCLOSE REQUIRED OF oEDX
                         EDX OPEN MARK "serie" TYPE "" TAG substr(cOLDIDNFe,23,3) AUTOCLOSE REQUIRED OF oEDX
                         EDX OPEN MARK "nNF"   TYPE "" TAG substr(cOLDIDNFe,35,9) AUTOCLOSE REQUIRED OF oEDX
                     EDX CLOSE MARK OF oEDX // refNF
                 EDX CLOSE MARK OF oEDX // NFref
              endif
              EDX OPEN MARK "procEmi" TYPE "" TAG cNFEprocEmi               AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "verProc" TYPE "" TAG cNFEverProc               AUTOCLOSE REQUIRED OF oEDX
          EDX CLOSE MARK OF oEDX // ide

          EDX OPEN MARK "emit" OF oEDX /* *****( OK )***** */
              EDX OPEN MARK "CNPJ"  TYPE "" TAG LimpaCGC( ClCNPJ )     AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "xNome" TYPE "" TAG Cl_Nome                AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "xFant" TYPE "" TAG ""                     AUTOCLOSE          OF oEDX
              EDX OPEN MARK "enderEmit" OF oEDX
                  EDX OPEN MARK "xLgr"    TYPE "" TAG ClEndereco       AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "nro"     TYPE "" TAG "-"              AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xCpl"    TYPE "" TAG ""               AUTOCLOSE          OF oEDX
                  EDX OPEN MARK "xBairro" TYPE "" TAG ClBairro         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cMun"    TYPE "" TAG ClIBGEUF+ClIBGECODUF AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xMun"    TYPE "" TAG ClCidade         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "UF"      TYPE "" TAG ClEstado         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "CEP"     TYPE "" TAG Cl_Cep            AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cPais"   TYPE "" TAG "1058"           AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xPais"   TYPE "" TAG "BRASIL"         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "fone"    TYPE "" TAG cLMPTEL( Cl_Telefone ) AUTOCLOSE OF oEDX
              EDX CLOSE MARK OF oEDX // enderEmit
              EDX OPEN MARK "IE" TYPE "" TAG ClIE                      AUTOCLOSE OF oEDX
          EDX CLOSE MARK OF oEDX // emit

          EDX OPEN MARK "dest" OF oEDX /* *****( OK )***** */
              if cClasCli = "J"
                 EDX OPEN MARK "CNPJ"  TYPE "" TAG LimpaCGC( cCGC )    AUTOCLOSE REQUIRED OF oEDX
              else
                 EDX OPEN MARK "CPF"   TYPE "" TAG LimpaCGC( cCGC )    AUTOCLOSE REQUIRED OF oEDX
              endif
              EDX OPEN MARK "xNome" TYPE "" TAG cNome                  AUTOCLOSE REQUIRED OF oEDX
              if !empty(cIDSuframa)
                 EDX OPEN MARK "ISUF" TYPE "" TAG LimpaCGC( cIDSuframa ) AUTOCLOSE OF oEDX
              endif
              EDX OPEN MARK "enderDest" OF oEDX
                  EDX OPEN MARK "xLgr"     TYPE "" TAG cEndereco       AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "nro"      TYPE "" TAG "-"             AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xCpl"     TYPE "" TAG ""              AUTOCLOSE          OF oEDX
                  EDX OPEN MARK "xBairro"  TYPE "" TAG cBairro         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cMun"     TYPE "" TAG cIBGEUF+cIBGECODUF AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xMun"     TYPE "" TAG cCidade         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "UF"       TYPE "" TAG cEstado         AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "CEP"      TYPE "" TAG cCEP            AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "cPais"    TYPE "" TAG "1058"          AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "xPais"    TYPE "" TAG "BRASIL"        AUTOCLOSE REQUIRED OF oEDX
                  EDX OPEN MARK "fone"     TYPE "" TAG cLMPTEL( cTelefone ) AUTOCLOSE OF oEDX
              EDX CLOSE MARK OF oEDX // enderDest
              EDX OPEN MARK "IE" TYPE "" TAG iif(cClasCli="J",cInscr,"") AUTOCLOSE OF oEDX 
          EDX CLOSE MARK OF oEDX // dest
                                                
          EDX OPEN MARK "retirada" OF oEDX /* *****( OK )***** */
              EDX OPEN MARK "CNPJ"     TYPE "" TAG LimpaCGC( Cl_Cnpj ) AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "xLgr"     TYPE "" TAG ClEndereco          AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "nro"      TYPE "" TAG "-"                 AUTOCLOSE          OF oEDX
              EDX OPEN MARK "xCpl"     TYPE "" TAG ""                  AUTOCLOSE          OF oEDX
              EDX OPEN MARK "xBairro"  TYPE "" TAG ClBairro            AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "cMun"     TYPE "" TAG ClIBGEUF+ClIBGECODUF AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "xMun"     TYPE "" TAG ClCidade            AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "UF"       TYPE "" TAG ClEstado            AUTOCLOSE REQUIRED OF oEDX
          EDX CLOSE MARK OF oEDX // retirada
                             
          EDX OPEN MARK "entrega" OF oEDX /* *****( OK )***** */
              if cClasCli = "J"
                 EDX OPEN MARK "CNPJ"  TYPE "" TAG LimpaCGC( cCGC )    AUTOCLOSE REQUIRED OF oEDX
              else
                 EDX OPEN MARK "CPF"   TYPE "" TAG LimpaCGC( cCGC )    AUTOCLOSE REQUIRED OF oEDX
              endif
              EDX OPEN MARK "xLgr"     TYPE "" TAG cLOCEntr            AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "nro"      TYPE "" TAG "-"                 AUTOCLOSE          OF oEDX
              EDX OPEN MARK "xCpl"     TYPE "" TAG ""                  AUTOCLOSE          OF oEDX
              EDX OPEN MARK "xBairro"  TYPE "" TAG cBAIEntr            AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "cMun"     TYPE "" TAG cIBGEeUF+cIBGEeCODUF AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "xMun"     TYPE "" TAG cCIDEntr            AUTOCLOSE REQUIRED OF oEDX
              EDX OPEN MARK "UF"       TYPE "" TAG cESTEntr            AUTOCLOSE REQUIRED OF oEDX
          EDX CLOSE MARK OF oEDX // entrega

          nCounter := 1
          nVLTotal := 0
          nVLICMS  := 0
          nVLIPI   := 0
          aDispositivos := {}
          cDispositivos := ""

          dbSelectArea( "ES" )
          OrdSetFocus( 3 )
          OrdScope(0, STR(nIdpedido,6,0) )
          OrdScope(1, STR(nIdpedido,6,0) )
          dbSetFilter( {|| ES->VT = 'V'}, "ES->VT = 'V'" )
          dbGoTop()

          DO WHILE .NOT. EOF() // Dados dos produtos
             if deleted()
                skip
                loop
             endif
             nNCMIPI  := PESQ(es->ncmfiscal,"FISCAL",1,"ALIQUOTA")
             cICMSNat := PESQ(str(iif(es->idnatureza>0,es->idnatureza,nIDNatureza),5,0),"NATUREZA",1,"CICMS") // Incidencia de ICMS
             cIPINat  := PESQ(str(iif(es->idnatureza>0,es->idnatureza,nIDNatureza),5,0),"NATUREZA",1,"CIPI")  // Incidencia de IPI
             cISSNat  := PESQ(str(iif(es->idnatureza>0,es->idnatureza,nIDNatureza),5,0),"NATUREZA",1,"CISS")  // Incidencia de ISS
             cDISP    := PESQ(str(iif(es->idnatureza>0,es->idnatureza,nIDNatureza),5,0),"NATUREZA",1,"DISPOSITIV")

             aadd( aDispositivos, cDISP )
             if ascan( aDispositivos, cDISP ) > 0 // Encontrou...
                cDispositivos := cDispositivos + cDISP + " "
             endif

             EDX OPEN MARK "det" ATTRIB "nItem" VALUE alltrim( str( nCounter ) ) OF oEDX

                 EDX OPEN MARK "prod" OF oEDX 
                     EDX OPEN MARK "cProd"    TYPE "" TAG es->resumido    AUTOCLOSE OF oEDX
                     EDX OPEN MARK "cEAN"     TYPE "" TAG ""              AUTOCLOSE OF oEDX
                     EDX OPEN MARK "xProd"    TYPE "" TAG es->descricao   AUTOCLOSE OF oEDX
                     EDX OPEN MARK "NCM"      TYPE "" TAG strtran( es->ncmfiscal,".","" ) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "EXTIPI"   TYPE "" TAG ""              AUTOCLOSE OF oEDX
                     EDX OPEN MARK "genero"   TYPE "" TAG ""              AUTOCLOSE OF oEDX
                     EDX OPEN MARK "CFOP"     TYPE "" TAG ltrim(str(iif(es->idnatureza>0,es->idnatureza,nIDNatureza))) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "uCom"     TYPE "" TAG es->medida      AUTOCLOSE OF oEDX
                     EDX OPEN MARK "qCom"     TYPE "" TAG str( es->quantidade,14,4) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "vUnCom"   TYPE "" TAG str( es->valorvenda,9,2) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "vProd"    TYPE "" TAG str( es->subtotal  ,9,2) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "cEANTrib" TYPE "" TAG ""              AUTOCLOSE OF oEDX
                     EDX OPEN MARK "uTrib"    TYPE "" TAG es->medida      AUTOCLOSE OF oEDX
                     EDX OPEN MARK "qTrib"    TYPE "" TAG str( es->quantidade,14,4) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "vUnTrib"  TYPE "" TAG str( es->valorvenda,9,2) AUTOCLOSE OF oEDX
                     EDX OPEN MARK "vFrete"   TYPE "" TAG ""              AUTOCLOSE OF oEDX
                     EDX OPEN MARK "vSeg"     TYPE "" TAG ""              AUTOCLOSE OF oEDX
                     EDX OPEN MARK "vDesc"    TYPE "" TAG ""              AUTOCLOSE OF oEDX
                 EDX CLOSE MARK OF oEDX // prod

                 EDX OPEN MARK "imposto" OF oEDX

                     EDX OPEN MARK "ICMS" OF oEDX
                         EDX OPEN MARK "ICMS00" OF oEDX          
                             EDX OPEN MARK "orig"     TYPE "" TAG substr( es->idtributo,1,1 ) AUTOCLOSE OF oEDX
                             EDX OPEN MARK "CST"      TYPE "" TAG substr( es->idtributo,2,2 ) AUTOCLOSE OF oEDX
                             EDX OPEN MARK "modBC"    TYPE "" TAG "0"                    AUTOCLOSE OF oEDX
                             if cICMSNat = "S"
                                EDX OPEN MARK "vBC"      TYPE "" TAG str( es->subtotal,9,2) AUTOCLOSE OF oEDX
                                EDX OPEN MARK "pICMS"    TYPE "" TAG str( nDestICMS,5,2)     AUTOCLOSE OF oEDX
                                EDX OPEN MARK "vICMS"    TYPE "" TAG str( es->subtotal*(nDestICMS*.01),9,2) AUTOCLOSE OF oEDX
                                EDX OPEN MARK "vBCST"    TYPE "" TAG str( es->subtotal,9,2) AUTOCLOSE OF oEDX
                                EDX OPEN MARK "pICMSST"  TYPE "" TAG str( nDestICMS,5,2)     AUTOCLOSE OF oEDX
                                EDX OPEN MARK "vICMSST"  TYPE "" TAG str( es->subtotal*(nDestICMS*.01),9,2) AUTOCLOSE OF oEDX
                                nVLICMS  := nVLICMS  + es->subtotal*(nDestICMS*.01)
                             endif
                         EDX CLOSE MARK OF oEDX // icms60
                     EDX CLOSE MARK OF oEDX // icms

                     EDX OPEN MARK "IPI" OF oEDX
                        EDX OPEN MARK "IPITrib" OF oEDX
                           EDX OPEN MARK "CST"      TYPE "" TAG ""            AUTOCLOSE OF oEDX
                           if cIPINat = "S"
                              EDX OPEN MARK "vBC"      TYPE "" TAG str( es->subtotal,9,2) AUTOCLOSE OF oEDX
                              EDX OPEN MARK "pIPI"     TYPE "" TAG str( nNCMIPI,5,2)      AUTOCLOSE OF oEDX
                              EDX OPEN MARK "vIPI"     TYPE "" TAG str( es->subtotal*(nNCMIPI*.01),9,2) AUTOCLOSE OF oEDX
                              nVLIPI   := nVLIPI   + es->subtotal*(nNCMIPI*.01)
                           endif
                        EDX CLOSE MARK OF oEDX // icms60
                     EDX CLOSE MARK OF oEDX // icms

                 EDX CLOSE MARK OF oEDX // imposto

             EDX CLOSE MARK OF oEDX // det

             nVLTotal := nVLTotal + es->subtotal

             nCounter := nCounter + 1
             SKIP
          ENDDO

          EDX OPEN MARK "total" OF oEDX
              EDX OPEN MARK "ICMSTot" OF oEDX         
                  if cICMSNat = "S"
                     EDX OPEN MARK "vBC"     TYPE "" TAG str(iif(!empty(cIDSuframa),0,nVLTotal),9,2 ) AUTOCLOSE OF oEDX 
                     EDX OPEN MARK "vICMS"   TYPE "" TAG str(iif(!empty(cIDSuframa),0,nVLICMS),9,2 )  AUTOCLOSE OF oEDX 
                  endif
                  EDX OPEN MARK "vBCST"   TYPE "" TAG "0"                        AUTOCLOSE OF oEDX
                  EDX OPEN MARK "vST"     TYPE "" TAG "0"                        AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vProd"   TYPE "" TAG str( nVLTotal,9,2 )        AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vFrete"  TYPE "" TAG str( nFrete,9,2 )          AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vSeg"    TYPE "" TAG str( nSeguro,9,2 )         AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vDesc"   TYPE "" TAG str(iif(!empty(cIDSuframa),nVLICMS,nDesconto),9,2 )       AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vII"     TYPE "" TAG "0"                        AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vIPI"    TYPE "" TAG str(iif(cIPINat="S",nVLIPI,0),9,2 ) AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vPIS"    TYPE "" TAG "0"                        AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vCOFINS" TYPE "" TAG "0"                        AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vOutro"  TYPE "" TAG str( nOutros,9,2 )         AUTOCLOSE OF oEDX 
                  EDX OPEN MARK "vNF"     TYPE "" TAG str( (nVLTotal+iif(cIPINat="S",nVLIPI,0)+nFrete+nSeguro+nOutros)-iif(!empty(cIDSuframa),nVLICMS,nDesconto),9,2 ) AUTOCLOSE OF oEDX 
              EDX CLOSE MARK OF oEDX // ICMSTot
          EDX CLOSE MARK OF oEDX // total 

          EDX OPEN MARK "transp" OF oEDX
              EDX OPEN MARK "modFrete"   TYPE "" TAG str( cFrete )     AUTOCLOSE OF oEDX

              EDX OPEN MARK "transporta" OF oEDX      
                  EDX OPEN MARK "CNPJ"    TYPE "" TAG LimpaCGC( cTRCNPJ ) AUTOCLOSE OF oEDX
                  EDX OPEN MARK "xNome"   TYPE "" TAG cTRNome             AUTOCLOSE OF oEDX
                  EDX OPEN MARK "IE"      TYPE "" TAG cTRInscr            AUTOCLOSE OF oEDX
                  EDX OPEN MARK "xEnder"  TYPE "" TAG cTREndereco         AUTOCLOSE OF oEDX
                  EDX OPEN MARK "xMun"    TYPE "" TAG cTRCidade           AUTOCLOSE OF oEDX
                  EDX OPEN MARK "UF"      TYPE "" TAG cTREstado           AUTOCLOSE OF oEDX
              EDX CLOSE MARK OF oEDX // transporta

              EDX OPEN MARK "veicTransp" OF oEDX
                  EDX OPEN MARK "placa"   TYPE "" TAG cPlaca              AUTOCLOSE OF oEDX
                  EDX OPEN MARK "UF"      TYPE "" TAG "SP"                AUTOCLOSE OF oEDX
                  EDX OPEN MARK "RNTC"    TYPE "" TAG "0"                 AUTOCLOSE OF oEDX
              EDX CLOSE MARK OF oEDX // veicTransp

              EDX OPEN MARK "vol" OF oEDX
                  EDX OPEN MARK "qVol"    TYPE "" TAG str( cVolumes )     AUTOCLOSE OF oEDX
                  EDX OPEN MARK "esp"     TYPE "" TAG cEspecie            AUTOCLOSE OF oEDX
                  EDX OPEN MARK "marca"   TYPE "" TAG ""                  AUTOCLOSE OF oEDX
                  EDX OPEN MARK "nVol"    TYPE "" TAG str( nIDPedido,6 )  AUTOCLOSE OF oEDX
                  EDX OPEN MARK "pesoL"   TYPE "" TAG str( nPesoL,9,3 )   AUTOCLOSE OF oEDX
                  EDX OPEN MARK "pesoB"   TYPE "" TAG str( nPeso,9,3 )    AUTOCLOSE OF oEDX
              EDX CLOSE MARK OF oEDX // vol

          EDX CLOSE MARK OF oEDX // transp

          EDX OPEN MARK "cobr" OF oEDX
              IF Q_TI_TULOS >= 1
                 nFaturas := nFaturas + TI_TULOS[1,2]
                 EDX OPEN MARK "dup" OF oEDX 
                  EDX OPEN MARK "nDup"    TYPE "" TAG strZero( nIDNFE,4 )+iif(Q_TI_TULOS=1,"-A","") AUTOCLOSE OF oEDX
                  EDX OPEN MARK "vDup"    TYPE "" TAG strtran(TRANSF(TI_TULOS[1,2],'@E 999,999.99'),".","") AUTOCLOSE OF oEDX
                  EDX OPEN MARK "dVenc"   TYPE "" TAG myDTOS(TI_TULOS[1,3]) AUTOCLOSE OF oEDX
                 EDX CLOSE MARK OF oEDX
              ENDIF
              IF Q_TI_TULOS >= 2
                 nFaturas := nFaturas + TI_TULOS[2,2]
                 EDX OPEN MARK "dup" OF oEDX
                  EDX OPEN MARK "nDup"    TYPE "" TAG strZero( nIDNFE,4 )+iif(Q_TI_TULOS=2,"-B","") AUTOCLOSE OF oEDX
                  EDX OPEN MARK "vDup"    TYPE "" TAG strtran(TRANSF(TI_TULOS[2,2],'@E 999,999.99'),".","") AUTOCLOSE OF oEDX
                  EDX OPEN MARK "dVenc"   TYPE "" TAG myDTOS(TI_TULOS[2,3]) AUTOCLOSE OF oEDX
                 EDX CLOSE MARK OF oEDX
              ENDIF
              IF Q_TI_TULOS >= 3
                 nFaturas := nFaturas + TI_TULOS[3,2]
                 EDX OPEN MARK "dup" OF oEDX
                  EDX OPEN MARK "nDup"    TYPE "" TAG strZero( nIDNFE,4 )+iif(Q_TI_TULOS=3,"-C","") AUTOCLOSE OF oEDX
                  EDX OPEN MARK "vDup"    TYPE "" TAG strtran(TRANSF(TI_TULOS[3,2],'@E 999,999.99'),".","") AUTOCLOSE OF oEDX
                  EDX OPEN MARK "dVenc"   TYPE "" TAG myDTOS(TI_TULOS[3,3]) AUTOCLOSE OF oEDX
                 EDX CLOSE MARK OF oEDX
              ENDIF
          EDX CLOSE MARK OF oEDX

          EDX OPEN MARK "infAdic" OF oEDX
              EDX OPEN MARK "infCpl"     TYPE "" TAG cDispositivos + " " + cOBSCpl  AUTOCLOSE OF oEDX
              EDX OPEN MARK "infAdFisco" TYPE "" TAG cOBSAdic AUTOCLOSE OF oEDX
          EDX CLOSE MARK OF oEDX // lacres

      EDX CLOSE MARK OF oEDX // infNFe

      EDX CLOSE MARK OF oEDX // NFe
      EDX END oEDX
A formatação segue o exemplificado acima, e existem algumas tabelas que deverão ser levadas em consideração para a geração de suas XMLs.

TABELAS
PN - é minha tabela de pedidos a qual me dá suporte a informações como CFOP, código da transportadora, código do cliente.
ES - é minha tabela de itens de pedido, de onde eu vou puxar os itens da nota que irei gerar e criticar seus registros.
FISCAL - é minha tabela que contém os códigos NCM usados pela empresa e seus respectivos valores de IPI.
NCM - é uma tabela completa que possui os códigos NCM e suas aliquotas de IPI.
NATUREZA - é uma tabela que contém as CFOP usadas na nota e as caracteristicas de cálculo de ICMS e IPI.
IBGE - é uma tabela que contém os códigos de UF e de localidades que serão usados para gerar a chave NFe
CEP - é uma tabela que contém os endereços para completar e sanear o conteúdo do XML.

VARIÁVEIS
cClasCli - usada para criticar o tipo de nota, sendo "J" para juridica e "F" para consumidor final criando a tag correta.
cIDSuframa - variável que configura a tag que dirá ao SEFAZ que se trata de uma nota SUFRAMA e configura as tags.
cICMSNat - variável que configura o cálculo ou não do ICMS em cada item e permite acumular o total.
cIPINat - variável que configura o cálculo ou não do IPI em cada item e permite acumular o total.
cDISP - acumula as frases de dispositivos legais que serão apresentadas no final da nota em informações adicionais.

Cada nota poderá ter em cada item uma CFOP diferente e portanto o cálculo de ICMS e IPI referente deve ser criticado corretamente.
Caso só exista uma CFOP para a nota todos seus itens devem ser identicos.

FUNÇÕES
VerifyINI - função que le e grava arquivos INI. Uma busca pelo forum e encontrarão ela.
LimpaCGC - função de limpeza de caracteres estranhos no código. idem a VerifyINI
Pesq - função de pesquisa em outras tabelas. Uma busca por Links, Links, e mais Links...

O código acima foi trabalhado usando esta dica

A codificação é baseada na criação de arquivo em baixo nivel e não requer Fivewin, mas coloquei nesta sessão por ser direcionada a código fonte.

Espero que o esboço sirva de valia para os atrasadinhos ou que ainda estiverem confusos com a sopa de letrinhas fiscal.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Esboço completo de geração de XML NF-e

Mensagem por JoséQuintas »

Trabalho com nota fiscal eletrônica desde 2008, e com Clipper há muito mais tempo.
Se eu não tivesse com tudo pronto, e olhasse esse fonte, eu ficaria desesperado.
Mas... criticar não leva a nada, vou contribuir.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Esboço completo de geração de XML NF-e

Mensagem por rochinha »

Amiguinho,

Quintas
Voce acha que ficou complicado e desesperador? porque tentei ser o mais didático possivel para que os atrasadinhos tenham noção do que necessitam.

O código da forma que esta e os códigos de auxilio deixam a codificaççao geral mais clean e facil de manter.

Mas caso esteja muito complicado dê umas dicas, quem sabe posso melhorar até no meu sistema.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Esboço completo de geração de XML NF-e

Mensagem por JoséQuintas »

Como eu já disse no post, já fiz, está em contribuições.
No fonte que postou, apesar de recursos, o "atrasadinho" que está preocupado em como resolver a nota fiscal, vai ficar preocupado em como entender classes e outras coisas.
Vai arrumar mais outra preocupação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder