Clipper On Line • Ver Tópico - Modelo NFCe Acbr

Modelo NFCe Acbr

Discussão sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (ECF, TEF, SINTEGRA, NF-e, ECD, EFD, etc.)

Moderador: Moderadores

 

Modelo NFCe Acbr

Mensagempor Itamar M. Lins Jr. » 24 Nov 2017 11:27

Ola!
Preciso de um modelo simples de uma NFCe no modelo do Acbr.
Eu não sei o que fiz aqui, porque o ACBR está travando. Estava indo bem porém tem alguma coisa errada aqui e não sei identificar.
Isso já no final, estava faltando só trocar a chave de Homologação para produção... Agora gero o ent.txt e o acbr trava.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modelo NFCe Acbr

Mensagempor MSDN » 24 Nov 2017 12:30

O motivo de eu não usar ACBr é por isso, eu tinha tudo feito, levei 1 semana testando, estava tudo certo, dai fui almoçar e quando voltei, nem com reza e vela a coisa funcionava, o mesmo com o Uninfe, só que com ele, não trava, mas as vezes não envia, ou não acha arquivo, principalmente quando atualiza versão, por isso optei pela classe do Quintas, só não consegui ir mais adiante ainda pq estou esperando meu certificado, que deve chegar semana que vem, dai continuarei as postagens no tópico que criei sobre essa implementação.

Abraços e boa sorte
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Modelo NFCe Acbr

Mensagempor Itamar M. Lins Jr. » 24 Nov 2017 12:53

Ola!
Parece que identifiquei o defeito, ainda estou procurando... porém as versões do OPENSSL e das DLL´s do ACBR não estão batendo com a do SVN.
Estou tentando compilar via Lazarus.
Eu já uso o ACBR, só estou adicionando a NFCe, já uso com exito a NFe, há muito tempo e sem dor de cabeça.
O problema é que eles unificaram as versões com OPENSSL e CAPICOM, antes eram separadas.
O certificado de 1 ano .PFX usa OPENSSL e o TOKEN/Cartão usa CAPICOM.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modelo NFCe Acbr

Mensagempor Itamar M. Lins Jr. » 24 Nov 2017 13:01

Ola!
O problema é com a escolha da forma, em Menu DF-e -> Certificados -> Configuração SSL -> LibWinCrypt está funcionado. Já com LibOpenSSL dá pau!
E lá se vão algumas horas só para identificar isso.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modelo NFCe Acbr

Mensagempor MSDN » 24 Nov 2017 13:05

Veja o lado bom, suas horas vão ajudar outras pessoas que usam o ACBr, mas claro que podia ser melhor.
De qualquer forma, depender dos outros para implementar alguma rotina no sistema não é fácil.

Abraços
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Modelo NFCe Acbr

Mensagempor Itamar M. Lins Jr. » 24 Nov 2017 14:24

Ola!
Viu Marcelo, vc que tem sistema para bares, agora precisa cadastrar todas essas informações para tirar uma NFCe.
NCM, CFOP, CEST, CSOSN além da antiga ST das ECF´s isso para vender uma lata de refrigerante. Se já não tiver isso cadastrado, lógico.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

Modelo NFCe Acbr

Mensagempor MSDN » 24 Nov 2017 17:03

É isso mesmo Itamar, estou correndo bastante para deixar tudo 100% como deve ser, nem parei pra fazer o XML de acordo com a 3.10, já estou fazendo tudo pra 4.0.
Inclusive a ideia de ir fazendo e postando aqui no Fórum e no repositório do GIT, é justamente criar um grupo de programadores atentos às mudanças, o que 1 não vê, outro pode ver.

Abraços
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Modelo NFCe Acbr

Mensagempor rubens » 24 Nov 2017 17:08

A resposta nao foi para mim, mas para empresa do simples isso tudo da para automatizar pela entrada com xml..
EAN - Vem no xml
NCM - vem no ncm
CFOP - praticamente 5102-5405-5656 se o cliente de outro estado - 6102-6404-6652
CEST - vem no XML - se produto antigo - cria uma rotina para atualizar o CSET
CSOSN/CST - depende do CFOP..

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Modelo NFCe Acbr

Mensagempor MSDN » 24 Nov 2017 17:12

Obrigado Rubens pela dica, o que vc falou seria importar o XML do Fornecedor da mercadoria para associar os códigos, correto ?

Abraços
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Modelo NFCe Acbr

Mensagempor rubens » 24 Nov 2017 17:47

Sim... Marcelo...

Já faço e creio que muitos aqui fazem...
Então...
Baixo o XML
Uso a classe do Quintas para ler o Xml
Daí verifico se o produto é cadastrado ou não.
Se for cadastrado atualiza dados do cadastro conforme dados do produto do xml. Tipo EAN, NCM, CFOP, CEST.
Se não for cadastrado faz um cadastro novo com os dados do produto do xml.
Dessa forma na hora de emitir a NFCe dificilmente dará um erro de integridade.
Tenho isso pronto em HMGs... se quiser coloco a disposição...
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Modelo NFCe Acbr

Mensagempor MSDN » 24 Nov 2017 18:01

Rubens, se quiser compartilhar, me envie que deixarei no GIT do projeto que estou fazendo, fica centralizado para todos.

Abraços
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Modelo NFCe Acbr

Mensagempor Fernando queiroz » 19 Dez 2017 10:19

Se quiserem disponibilizo a rotina de emissao de NFC-e usando a SEFAZCLASS , com pequenas adaptações a coisa fica pronta

STATIC FUNCTION ENVIAR_NFCE( tEMISSAO, nPEDIDO, nCPFCNPJ  )

Local bREGERA := .F., minfNFe, Mn_nNF, Mn_serie, Mb_indPag , cPrefixo
      ThisNFE:oLabel5:SetText("Verificando Dados....                                             ")
      ThisNFE:oProgressbar1:Set(,30)   
      
      SELE NOTAFCE
      SET ORDER TO 1
      IF  DBSEEK(STRZERO(mNUMNOT,6,0))
         ThisNFE:oLabel5:SetText("Consultando se NFC-e Existe                                        ")
         SELE CERTIFICADO
         IF !DBSEEK(rtrim(hwg_GetComputerName()))
            hwg_MsgInfo("Computador sem o CERTIFICADO DIGITAL instalado"+ HB_EOL()+"A Operação não poderá ser efetuada")
            SELE NOTAFCE
            RETURN NIL
         endif
         SELE NOTAFCE
         oSefaz              := SefazClass():New()
         oSefaz:cCertificado := TRIM(CERTIFICADO->NOMCERT)
         oSefaz:cNFCE       := "S"
         cXmlRetorno := oSefaz:NFeConsultaProtocolo( substr(NOTAFCE->a_Id,4,44), ALLTRIM(oSefaz:cCertificado) , FLAG->n_tpAmb )
         IF  oSefaz:cStatus $ "100,101,150,301,302"

            ThisNFE:oLabel5:SetText("Não pode Enviar pois NFC-e já existe na base da SEFAZ")         
            ThisNFE:oOwnerbutton4:DISABLE( )         
            hwg_MsgInfo("MOTIVO: " + XmlNode(cXmlRetorno, "xMotivo")+ HB_EOL() +HB_EOL() + ;
               "STATUS: " + XmlNode(cXmlRetorno, "cStat")+ HB_EOL() + ;
               "DATA:   " + XmlNode(cXmlRetorno, "dhRecbto")+ HB_EOL()+ ;
               "CHAVE:  " + XmlNode(cXmlRetorno, "chNFe")+ HB_EOL()+ ;
               "PROTOCOLO:  " + XmlNode(cXmlRetorno, "nProt")+ HB_EOL() )
            SELE NOTAFCE
            RETURN NIL            
         ENDIF
         ThisNFE:oLabel5:SetText("Re-gerando dados da NFC-e                                          ")
         Mn_nNF              :=NOTAFCE->b_nNF
         Mn_serie            :=NOTAFCE->b_serie
         minfNFe             :=SUBSTR(NOTAFCE->a_Id,4,44)
         Mb_indPag         :="1"

         cPrefixo := hb_Dirbase()+"\xml\retorno\NFCe" + NOTAFCE->b_serie + NOTAFCE->b_nNF
         
      ELSE
         ThisNFE:oLabel5:SetText("Gerando dados para Nova NFC-e                                      ")
         SELE NOTAFCE
         DBAPPEND()
         Mn_nNF              :=STRZERO(VAL(FLAG->n_nNFC),9,0)
         Mn_serie            :=STRZERO(VAL(FLAG->n_serieNFC),3,0 )
         Mb_indPag           :="1"
         minfNFe             :=MONTA_CHAVE( )
         NOTAFCE->a_versao    := "3.10"
         NOTAFCE->a_Id      := 'NFe'+minfNFe
         NOTAFCE->b_cUF      := FLAG->n_cUF
         NOTAFCE->b_cNF      := FLAG->n_cNF      
         NOTAFCE->b_natOp   := FLAG->n_natOp
         NOTAFCE->b_indPag   := PEDIDO->b_indPag
         NOTAFCE->b_mod      := FLAG->n_modNFC
         NOTAFCE->b_serie   := FLAG->n_serieNFC
         NOTAFCE->b_nNF      := FLAG->n_nNFC

         DBCOMMIT()
         SELE FLAG
         DO WHILE ! RLOCK()
            hwg_MsgInfo("Registro em uso por outro Operador"+ HB_EOL()+"Solicite ao Outro Operador a Liberacao")
         END
         FLAG->n_cNF  := strzero(HB_RandomInt(1, 99999999),8,0)
         FLAG->n_nNFC := strzero(val(FLAG->n_nNFC)+1,9,0)
         DBUNLOCK()
         DBCOMMIT()
         SELE NOTAFCE
         cPrefixo := hb_Dirbase()+"\xml\retorno\NFCe" + NOTAFCE->b_serie + NOTAFCE->b_nNF
      ENDIF
//      ThisNFE:oLabel4:setText("65/"+Mn_serie+"/"+Mn_nNF)

      
      SELE PEDIDO
      DO WHILE ! RLOCK()
         hwg_MsgInfo("Registro em uso por outro Operador"+ HB_EOL()+"Solicite ao Outro Operador a Liberacao")
      END
         

      SELE NOTAFCE
      
      DO WHILE ! RLOCK()
         hwg_MsgInfo("Registro em uso por outro Operador"+ HB_EOL()+"Solicite ao Outro Operador a Liberacao")
      END
      NOTAFCE->b_dhSaiEnt   := SPACE(25)      
      NOTAFCE->b_tpNF      := "1"                                    && tipo de operacao 0-entrada 1-saida   
      NOTAFCE->b_idDest   := "1"                                    && operacao local

      NOTAFCE->b_cMunFG   := FLAG->n_cMun
      NOTAFCE->b_tpImp   := "4"                                    && 4 = CUPOM FISCAL
      NOTAFCE->b_tpEmis   := "1"

      NOTAFCE->b_cDV      := SUBSTR(minfNFe,44,1)
      NOTAFCE->b_tpAmb   := FLAG->n_tpAmb                           && tipo de ambiente 1-producao 2-homologacao
      NOTAFCE->b_finNFe   := "1"                                    && FINALIDADE 1=NFe normal
      NOTAFCE->b_indFinal   := "1"                                    && 0=normal 1=consumidor final

      NOTAFCE->b_indPres   := "1"

//      NOTAFCE->b_procEmi   := "3"                                    && 3=emissao NFe app do fisco
//      NOTAFCE->b_verProc   := FLAG->b_verProc                           && versao do app do fisco

      NOTAFCE->b_procEmi   := "0"                                    && 0=emissao NFCe app do CLIENTE
      NOTAFCE->b_verProc   := "1.0"                                             && FLAG->b_verProc   versao do app do cliente
      

      NOTAFCE->b_dhCont   := SPACE(25)
      NOTAFCE->b_xJust      := SPACE(256)      

      NOTAFCE->c_CNPJ      := FLAG->n_CNPJ   
      NOTAFCE->c_xNome    := FLAG->n_xNome
      NOTAFCE->c_xFant    := FLAG->n_xFant
      NOTAFCE->c_xLgr      := FLAG->n_xLgr      
      NOTAFCE->c_nro      := FLAG->n_nro      
      NOTAFCE->c_xCpl      := FLAG->n_xCpl
      NOTAFCE->c_xBairro   := FLAG->n_xBairro
      NOTAFCE->c_cMun      := FLAG->n_cMun
      NOTAFCE->c_xMun      := FLAG->n_xMun
      NOTAFCE->c_UF      := FLAG->n_xUF 
      NOTAFCE->c_CEP      := FLAG->n_CEP 
      NOTAFCE->c_cPais      := FLAG->n_cPais
      NOTAFCE->c_xPais      := FLAG->n_xPais
      NOTAFCE->c_fone      := FLAG->n_fone
      NOTAFCE->c_IE      := FLAG->n_IE
      NOTAFCE->c_IEST      := space(14)         && IE do substituto tributario
      NOTAFCE->c_IM      := FLAG->n_IM      
      NOTAFCE->c_CNAE      := FLAG->n_CNAE
      NOTAFCE->c_CRT      := FLAG->n_CRT

        NOTAFCE->e_CNPJ      := PEDIDO->e_CNPJ
        NOTAFCE->e_IdEstr   := PEDIDO->e_IdEstr

       NOTAFCE->e_xNome      := PEDIDO->e_xNome
      
//      if FLAG->n_tpAmb    = "2"
//         NOTAFCE->e_xNome      := "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"
//      endif   

        NOTAFCE->e_xLgr       := PEDIDO->e_xLgr
        NOTAFCE->e_nro      := PEDIDO->e_nro      
        NOTAFCE->e_xCpl      := PEDIDO->e_xCpl
        NOTAFCE->e_xBairr   := PEDIDO->e_xBairr      
        NOTAFCE->e_cMun      := PEDIDO->e_cMun   
        NOTAFCE->e_xMun      := PEDIDO->e_xMun
        NOTAFCE->e_UF      := PEDIDO->e_UF
        NOTAFCE->e_CEP      := TIRAPONTO(PEDIDO->e_CEP)
        NOTAFCE->e_cPais      := PEDIDO->e_cPais
        NOTAFCE->e_xPais      := PEDIDO->e_xPais      
        NOTAFCE->e_fone      := PEDIDO->e_fone
      NOTAFCE->e_IE        := PEDIDO->e_IE
        NOTAFCE->e_indIE     := PEDIDO->e_indIE
        NOTAFCE->e_ISUF      := PEDIDO->e_ISUF   
        NOTAFCE->e_eMAIL      := PEDIDO->e_eMAIL
      NOTAFCE->NUMNOT      := STRZERO(mNUMNOT,6,0)      
      mINFCPL             := cMemo1

      IF FILE("C:\TEMP\NFCEITENS.DBF")
         FILEDELETE("C:\TEMP\NFCEITENS.DBF")
         FILEDELETE("C:\TEMP\NFCEITENS.001")
      ENDIF
      IF ! ABRE_NFCEITEM()
         DBCLOSEALL()
         RETURN (NIL)
      END   
      IF ! ABRE_ITENS(SUBSTR(DTOS(PEDIDO->DATVEN),3,6))
         DBCLOSEALL()
         RETURN (NIL)
      END   
      IF ! DBSEEK(PEDIDO->NUMNOT, .T.)
         hwg_MsgInfo("ERRO DE POSICIONAMENTO - SGC4800"+ HB_EOL()+"GERANDO ITENS DA NF-e" )
         DBUNLOCKALL()
         DBCOMMITALL()
         DBCLOSEALL()
         hwg_Enddialog()
         QUIT
      END
      
      M->i_nItem       :=0
      M->m_vTotFed    :=0
      M->m_vTotEst    :=0
      M->m_vTotTrib    :=0      
   
      
************************************************************************************************************************************         
      DO WHILE ITENS->NUMNOT = PEDIDO->NUMNOT
         SELE PRODUTOS
         IF ! DBSEEK(STRZERO(VAL(ITENS->CODPRO),7,0))
            hwg_MsgInfo( "ERRO DE POSICIONAMENTO - SGC4800"+ HB_EOL()+"GERANDO ITENS DA NF-e"+ HB_EOL()+"PRODUTOS NAO EXISTE NO CADASTRO - "+STRZERO(VAL(ITENS->CODPRO),7,0) )
            DBUNLOCKALL()
            DBCOMMITALL()
            DBCLOSEALL()
            return nil
         END
         IF PRODUTOS->PROSER = "2"
            SELE ITENS
            DBSKIP()
            LOOP
         ENDIF
         
         SELE NCMBASE
         IF PRODUTOS->NCM =0
            hwg_MsgInfo( "PRODUTO SEM NCM - FAVOR CADASTRAR "+ HB_EOL()+PRODUTOS->DESPRO+ HB_EOL()+"NFe - Nao Pode Ser Emitida" )
            DBUNLOCKALL()
            DBCOMMITALL()
            DBCLOSEALL()
            return nil
         END
         IF .NOT. DBSEEK(STRZERO(produtos->NCM,8,0))
            hwg_MsgInfo( "PRODUTO COM NCM INVALIDO - FAVOR CADASTRAR CORRETAMENTE "+ HB_EOL()+PRODUTOS->DESPRO+ HB_EOL()+"NFe - Nao Pode Ser Emitida" )
            DBUNLOCKALL()
            DBCOMMITALL()
            DBCLOSEALL()
            return nil
         END   
         
         SELE NFCEITENS
         DBAPPEND()
         NFCEITENS->NUMNOT      := ITENS->NUMNOT               && numero da nota de pedido
         NFCEITENS->i_versao      := NOTAFCE->a_versao
         NFCEITENS->i_Id         := NOTAFCE->a_Id
         NFCEITENS->i_nItem       := STR(++M->i_nItem,3,0)         && numero do item varia entre 001-990

         NFCEITENS->i_cProd      := substr(STRZERO(VAL(ITENS->CODPRO),7,0),1,6)+"-"+substr(STRZERO(VAL(ITENS->CODPRO),7,0),7,1)
         NFCEITENS->i_cEAN      := if(PRODUTOS->EAN13 = 0,SPACE(14),STR(PRODUTOS->EAN13))   
         
         if FLAG->n_tpAmb    = "2" .AND. VAL(NFCEITENS->i_nItem) = 1
            NFCEITENS->i_xProd      := "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"
         ELSE
            NFCEITENS->i_xProd      := ITENS->DESPRO      
         endif   

         NFCEITENS->i_NCM         := STRZERO(PRODUTOS->NCM,8,0)         
**         NFCEITENS->i_NVE         := STRZERO(PRODUTOS->NVE,6,0)      && nao existe no cadastro
         NFCEITENS->i_EXTIPI      := STRZERO(PRODUTOS->EXTIPI,3,0)      
            if flag->n_xUF = mUF
            NFCEITENS->i_CFOP      := PRODUTOS->ICMS_CFOP
         else
            NFCEITENS->i_CFOP      := PRODUTOS->ICMS_CFOPI
         endif
         NFCEITENS->i_uCom      := PRODUTOS->TIPUNI
         NFCEITENS->i_qCom      := ITENS->QTDPRO
         NFCEITENS->i_vUnCom      := ITENS->VLRUNI
         NFCEITENS->i_vProd      := ROUND((ITENS->QTDPRO * ITENS->VLRUNI),2)
         NFCEITENS->i_cEANTrib   := if(PRODUTOS->EAN13 = 0,SPACE(14),STR(PRODUTOS->EAN13))   
         NFCEITENS->i_uTrib      := PRODUTOS->TIPUNI
         NFCEITENS->i_qTrib      := ITENS->QTDPRO
         NFCEITENS->i_vUnTrib      := ITENS->VLRUNI
         NFCEITENS->i_vFrete      := 0.00                        && valor do frete implementacao futura
         NFCEITENS->i_vSeg      := 0.00                        && valor do seguro implementacao futura
         NFCEITENS->i_vDesc      := round((PEDIDO->TOTDES*((ITENS->QTDPRO * ITENS->VLRUNI)/(PEDIDO->TOT_PROD+PEDIDO->TOTDES))),2)                  && valor do desconto implementacao futura
         NFCEITENS->i_vOutro      := 0.00
         NFCEITENS->i_indTot      := 1
         
         IF PRODUTOS->ICMS_ORIGE$"0345"      
            NFCEITENS->m_vTotFed := ((ITENS->QTDPRO * ITENS->VLRUNI)*NCMBASE->NACFED)/100
            NFCEITENS->m_vTotEst := ((ITENS->QTDPRO * ITENS->VLRUNI)*NCMBASE->ESTADUAL)/100
            NFCEITENS->m_vTotTrib:= NFCEITENS->m_vTotFed + NFCEITENS->m_vTotEst            
         ELSE
            NFCEITENS->m_vTotFed := ((ITENS->QTDPRO * ITENS->VLRUNI)*NCMBASE->IMPFED)/100
            NFCEITENS->m_vTotEst := ((ITENS->QTDPRO * ITENS->VLRUNI)*NCMBASE->ESTADUAL)/100      
            NFCEITENS->m_vTotTrib:= NFCEITENS->m_vTotFed + NFCEITENS->m_vTotEst            
         ENDIF

         NFCEITENS->CEST          := PRODUTOS->CEST
         NFCEITENS->i_xPed        := PEDIDO->NUMNOT

      ******************************************
      ***GRUPO DE TRIBUTAçAO SIMPLES NACIONAL
      ******************************************
         IF  PRODUTOS->ICMS_REGIM = "1"
            NFCEITENS->ICMS_REGIM :=PRODUTOS->ICMS_REGIM         
            NFCEITENS->ICMS_ST    :=PRODUTOS->ICMS_ST       
            NFCEITENS->ICMS_ORIGE :=PRODUTOS->ICMS_ORIGE                  

            NFCEITENS->q_CST       :=PRODUTOS->q_PISst               && PIS 99 outras operacoes
            NFCEITENS->q_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->q_pPIS    :=0.0000                        && aliquota em percentual
            NFCEITENS->q_vAlqProd :=0.00                           && aliquota em reais
            NFCEITENS->q_PISQtde  :=0.00                           && quantidade vendida
            NFCEITENS->q_vPIS     :=0.00

            NFCEITENS->s_CST       :=PRODUTOS->s_COFst               && COFINS 99 outras operacoes
            NFCEITENS->s_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->s_pCOFINS  :=0.0000                        && aliquota em percentual
            NFCEITENS->s_vAlqProd :=0.00                           && aliquota em reais
            NFCEITENS->s_COFSQtde :=0.00                           && quantidade vendida
            NFCEITENS->s_vCOFINS  :=0.00

            NFCEITENS->i_nItemPed := LTRIM(STR(M->i_nItem,3,0))

         endif
      ******************************************
      ***GRUPO DE TRIBUTAçAO SIMPLES NACIONAL - excesso de sublimite de receita bruta
      ******************************************
         IF  PRODUTOS->ICMS_REGIM = "2"
            NFCEITENS->ICMS_REGIM :=PRODUTOS->ICMS_REGIM         
            NFCEITENS->ICMS_ST    :=PRODUTOS->ICMS_ST       
            NFCEITENS->ICMS_ORIGE :=PRODUTOS->ICMS_ORIGE                  

            NFCEITENS->q_CST       :=PRODUTOS->q_PISst               && PIS 99 outras operacoes
            NFCEITENS->q_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->q_pPIS    :=0.0000                        && aliquota em percentual
            NFCEITENS->q_vAlqProd :=0.00                           && aliquota em reais
            NFCEITENS->q_PISQtde  :=0.00                           && quantidade vendida
            NFCEITENS->q_vPIS     :=0.00

            NFCEITENS->s_CST       :=PRODUTOS->s_COFst               && COFINS 99 outras operacoes
            NFCEITENS->s_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->s_pCOFINS  :=0.0000                        && aliquota em percentual
            NFCEITENS->s_vAlqProd :=0.00                           && aliquota em reais
            NFCEITENS->s_COFSQtde :=0.00                           && quantidade vendida
            NFCEITENS->s_vCOFINS  :=0.00      

         endif
      **************************************************************************
      ***GRUPO DE TRIBUTAçAO NORMAL ICMS=00/10/20/30/40/41/50/51/60/70/90
      **************************************************************************
         IF PRODUTOS->ICMS_REGIM = "3"
            NFCEITENS->ICMS_REGIM :=PRODUTOS->ICMS_REGIM         
            NFCEITENS->ICMS_ST    :=PRODUTOS->ICMS_ST       
            NFCEITENS->ICMS_ORIGE :=PRODUTOS->ICMS_ORIGE                  

            NFCEITENS->o_cEnc    :=PRODUTOS->o_cEnc   
            NFCEITENS->o_CST       :=PRODUTOS->o_CST
            NFCEITENS->o_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->o_pIPI    :=0.0000                        && aliquota em percentual
            NFCEITENS->o_vIPI     :=0.00
            
            NFCEITENS->q_CST       :=PRODUTOS->q_PISst               && PIS 99 outras operacoes
            NFCEITENS->q_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->q_pPIS    :=0.0000                        && aliquota em percentual
            NFCEITENS->q_vAlqProd :=0.00                           && aliquota em reais
            NFCEITENS->q_PISQtde  :=0.00                           && quantidade vendida
            NFCEITENS->q_vPIS     :=0.00

            NFCEITENS->s_CST       :=PRODUTOS->s_COFst               && COFINS 99 outras operacoes
            NFCEITENS->s_vBC       :=0.00                           && valor da base de calculo
            NFCEITENS->s_pCOFINS  :=0.0000                        && aliquota em percentual
            NFCEITENS->s_vAlqProd :=0.00                           && aliquota em reais
            NFCEITENS->s_COFSQtde :=0.00                           && quantidade vendida
            NFCEITENS->s_vCOFINS  :=0.00
         ENDIF
         SELE ITENS
         mTOTNOTA       += round((ITENS->QTDPRO * ITENS->VLRUNI),2)
         mTOTDESC       += round((PEDIDO->TOTDES*((ITENS->QTDPRO * ITENS->VLRUNI)/(PEDIDO->TOT_PROD+PEDIDO->TOTDES))),2)
         mm_vTotFed    +=   NFCEITENS->m_vTotFed
         mm_vTotEst    +=   NFCEITENS->m_vTotEst
         mm_vTotTrib    +=   NFCEITENS->m_vTotTrib      
         
         DBSKIP()

      ENDD
********************************************************************************************************************************************      
      NOTAFCE->w_vPROD:=mTOTNOTA   
      NOTAFCE->w_vDesc:=mTOTDESC
      NOTAFCE->w_vNF  :=(mTOTNOTA - mTOTDESC)   
      
      mINFCPL  :=STRTRAN(mINFCPL,"<TRIBFED>",ALLTRIM(str(mm_vTotFed)))
      mINFCPL  :=STRTRAN(mINFCPL,"<TRIBEST>",ALLTRIM(str(mm_vTotEst)))         
      NOTAFCE->z_infCpl    := mINFCPL
*
* -------> arredondando o centavo perdido no ultimo item do pedido
*
      IF (PEDIDO->TOTDES - mTOTDESC) > 0.00
         NOTAFCE->w_vDesc +=(PEDIDO->TOTDES - mTOTDESC)         
         NOTAFCE->w_vNF   -=(PEDIDO->TOTDES - mTOTDESC)
           NFCEITENS->i_vDesc +=(PEDIDO->TOTDES - mTOTDESC)
      ENDIF
      
      nEdit12:= NOTAFCE->w_vNF
      nEdit13:= NOTAFCE->w_vDesc
        sele NFCEITENS
      DBGOTOP()
      mTOTITENS:=0.00
      mTOTDESC:=0.00
      do while .not. eof()
         mTOTITENS += (NFCEITENS->i_vProd - NFCEITENS->i_vDesc)
         mTOTDESC  += NFCEITENS->i_vDesc
         DBSKIP()
      ENDDO
       NFCEITENS->i_vDesc +=(PEDIDO->TOTDES - mTOTDESC)
        NOTAFCE->w_vNF   := mTOTITENS
      NOTAFCE->w_vDesc := mTOTDESC
      
*************************************************************************************************************************      
      ThisNFE:oLabel5:SetText("Gerando arquivo de Transmissao XML                                ")
      ThisNFE:oProgressbar1:Set(,50)

      M->cXml := '<NFe xmlns="http://www.portalfiscal.inf.br/nfe">'
      M->cXml += '<infNFe Id="'+ NOTAFCE->a_Id + '" versao="'+NOTAFCE->a_versao+'">'
      M->cXml += '<ide>'
      M->cXml += '<cUF>'      +NOTAFCE->b_cUF                       +'</cUF>'
      M->cXml += '<cNF>'      +NOTAFCE->b_cNF                       +'</cNF>'
      M->cXml += '<natOp>'    +RTRIM(NOTAFCE->b_natOp)              +'</natOp>'
      M->cXml += '<indPag>'   +Mb_indPag                        +'</indPag>'                                           && 0-A VISTA 1-A PRAZO 2-OUTROS
      M->cXml += '<mod>'      +NOTAFCE->b_mod                       +'</mod>'
      M->cXml += '<serie>'    +ALLTRIM(STR(VAL(NOTAFCE->b_serie)))  +'</serie>'
      M->cXml += '<nNF>'      +ALLTRIM(STR(VAL(NOTAFCE->b_nNF)))    +'</nNF>'
      M->cXml += '<dhEmi>'    +DateTimeXml(DATE(),TIME() ,FLAG->n_xUF,.T. )+'</dhEmi>'
      M->cXml += '<tpNF>'     +NOTAFCE->b_tpNF                      +'</tpNF>'                                      && 0-ENTRADA 1-SAIDA
      M->cXml += '<idDest>'   +NOTAFCE->b_idDest                    +'</idDest>'                                           && id de destino da operacao 1=interna 2=interestadual 3=exterior
      M->cXml += '<cMunFG>'   +NOTAFCE->b_cMunFG                    +'</cMunFG>'
      M->cXml += '<tpImp>'    +NOTAFCE->b_tpImp                     +'</tpImp>'                                             && formato impressao 
      M->cXml += '<tpEmis>'   +NOTAFCE->b_tpEmis                    +'</tpEmis>'                                           && tipo emissao 4 = CUPOM FISCAL
      M->cXml += '<cDV>'      +NOTAFCE->b_cDV                       +'</cDV>'
      M->cXml += '<tpAmb>'    +NOTAFCE->b_tpAmb                     +'</tpAmb>'                                   && TIPO DE AMBIENTE 1-PRODUCAO 2-DESENVOLVIMENTO
      M->cXml += '<finNFe>'   +NOTAFCE->b_finNFe                    +'</finNFe>'                                           && finalidade da emissao 1-normal 2-complementar 3-ajuste 4-devolucao
      M->cXml += '<indFinal>' +NOTAFCE->b_indFinal                  +'</indFinal>'                                       && operacao com consumidor final 0-normal 1-consumidor final
      M->cXml += '<indPres>'  +SUBSTR(aINDPRES[nCombo1],1,1)       +'</indPres>'                                         && indicador de presenca do comprador 1-operacao presencial
      M->cXml += '<procEmi>'  +NOTAFCE->b_procEmi                   +'</procEmi>'                                         && processo de emissao da NFe 3-app fornecido pelo fisco
      M->cXml += '<verProc>'  +ALLTRIM(NOTAFCE->b_verProc)          +'</verProc>'
      M->cXml += '</ide>'
*************************************************************************************************************************      
      M->cXml += '<emit>'
        IF LEN(NOTAFCE->c_CNPJ) > 11
         M->cXml += '<CNPJ>'     +ALLTRIM(NOTAFCE->c_CNPJ)                      +'</CNPJ>'
      ELSE
         M->cXml += '<CPF>'     +ALLTRIM(NOTAFCE->c_CNPJ)              +'</CPF>'
      ENDIF
      M->cXml += '<xNome>'    +rtrim(TIRACENTO(NOTAFCE->c_xNome))   +'</xNome>'
      M->cXml += '<xFant>'    +RTRIM(TIRACENTO(NOTAFCE->c_xFant))   +'</xFant>'
      M->cXml += '<enderEmit>'
      M->cXml += '<xLgr>'     +rtrim(TIRACENTO(NOTAFCE->c_xLgr))    +'</xLgr>'
      M->cXml += '<nro>'      +rtrim(NOTAFCE->c_nro)                +'</nro>'
      if NOTAFCE->c_xCpl <> space(60)
         M->cXml += '<xCpl>'     +rtrim(NOTAFCE->c_xCpl)           +'</xCpl>'
      endif
      M->cXml += '<xBairro>'  +rtrim(NOTAFCE->c_xBairro)            +'</xBairro>'
      M->cXml += '<cMun>'     +NOTAFCE->c_cMun                      +'</cMun>'
      M->cXml += '<xMun>'     +rtrim(NOTAFCE->c_xMun)               +'</xMun>'
      M->cXml += '<UF>'       +NOTAFCE->c_UF                        +'</UF>'
      M->cXml += '<CEP>'      +NOTAFCE->c_CEP                       +'</CEP>'
      M->cXml += '<cPais>'    +NOTAFCE->c_cPais                     +'</cPais>'
      M->cXml += '<xPais>'    +rtrim(NOTAFCE->c_xPais)              +'</xPais>'
      M->cXml += '<fone>'     +rtrim(NOTAFCE->c_fone)               +'</fone>'
      M->cXml += '</enderEmit>'
      IF FLAG->n_IE <> SPACE(14)
         M->cXml += '<IE>'   +rtrim(NOTAFCE->c_IE)                 +'</IE>'
      ENDIF
***      IF FLAG->n_IM <> SPACE(15)
***         M->cXml += '<IM>'   +rtrim(NOTAFCE->c_IM)                 +'</IM>'
***         M->cXml += '<CNAE>' +NOTAFCE->c_CNAE                      +'</CNAE>'
***      ENDIF
      M->cXml += '<CRT>'      +NOTAFCE->c_CRT                       +'</CRT>'
      M->cXml += '</emit>'            
*************************************************************************************************************************

      IF LEN(ALLTRIM(NOTAFCE->e_CNPJ)) # 0
         IF LEN(ALLTRIM(NOTAFCE->e_CNPJ)) > 11
            M->cXml += '<dest>'   
            M->cXml += '<CNPJ>'      +ALLTRIM(NOTAFCE->e_CNPJ)          +'</CNPJ>'
            M->cXml += '<indIEDest>'+"9"                                 +'</indIEDest>'   
            M->cXml += '</dest>'
         ELSE
            M->cXml += '<dest>'   
            M->cXml += '<CPF>'      +ALLTRIM(NOTAFCE->e_CNPJ)           +'</CPF>'   
            M->cXml += '<indIEDest>'+"9"                                 +'</indIEDest>'   
            M->cXml += '</dest>'         
         ENDIF
      ENDIF
      
      
*************************************************************************************************************************      
      SELE NFCEITENS
      SET ORDER TO 2
      DBGOTOP()
      IF ! DBSEEK(NOTAFCE->a_Id+"  1")            
         BEEP(); MsgWarning( "ERRO DE POSICIONAMENTO - SGC4800"+ HB_EOL()+"GERANDO ITENS XML DA NF-e" )
         DBUNLOCKALL()
         DBCOMMITALL()
         DBCLOSEALL()
         QUIT
      END
      M->TOTPRO        :=0.00
      M->vFCPUFDest     :=0.00
      M->vICMSUFDest    :=0.00
      M->vICMSUFRemet   :=0.00
        M->vBC            :=0.00
      M->vICMS          :=0.00
      
      DO WHILE NFCEITENS->i_Id = NOTAFCE->a_Id

//         hwg_MsgInfo(NFCEITENS->i_nItem)      
         
         
         M->cXml += '<det nItem="'    +ltrim(NFCEITENS->i_nItem)              +'">'
         M->cXml += '<prod>'
         M->cXml += '<cProd>'         +rtrim(NFCEITENS->i_cProd)              +'</cProd>'
         if NFCEITENS->i_cEAN <> space(14)
             if len(alltrim(NFCEITENS->i_cEAN)) < 13
               M->cXml +=                                                       '<cEAN/>'
            else
               M->cXml += '<cEAN>'      +alltrim(NFCEITENS->i_cEAN)          +'</cEAN>'
            endif
         else
            M->cXml +=                                                       '<cEAN/>'
         endif
         
*******************************************************************************************************
         M->cXml += '<xProd>'         +rtrim(NFCEITENS->i_xProd)              +'</xProd>'
         M->cXml += '<NCM>'           +rtrim(NFCEITENS->i_NCM)                +'</NCM>'

            IF NFCEITENS->CEST <> space(08)
            M->cXml += '<CEST>'          +rtrim(NFCEITENS->CEST)             +'</CEST>'
         ENDIF
         M->cXml += '<EXTIPI>'        +rtrim(NFCEITENS->i_EXTIPI)             +'</EXTIPI>'
         M->cXml += '<CFOP>'          +rtrim(NFCEITENS->i_CFOP)               +'</CFOP>'
         M->cXml += '<uCom>'          +rtrim(NFCEITENS->i_uCom)               +'</uCom>'
         M->cXml += '<qCom>'          +LTRIM(str(NFCEITENS->i_qCom,14,4))     +'</qCom>'
         M->cXml += '<vUnCom>'        +LTRIM(str(NFCEITENS->i_vUnCom,14,2))   +'</vUnCom>'
         M->cXml += '<vProd>'         +LTRIM(str(NFCEITENS->i_vProd,14,2))    +'</vProd>'
            M->TOTPRO += (NFCEITENS->i_qCom * NFCEITENS->i_vProd)
         IF NFCEITENS->i_cEANTrib <> SPACE(14)
            M->cXml += '<cEANTrib>'      +alltrim(NFCEITENS->i_cEANTrib)       +'</cEANTrib>'
         else
            M->cXml +=                                                       '<cEANTrib/>'
         ENDIF
         M->cXml += '<uTrib>'         +rtrim(NFCEITENS->i_uTrib)              +'</uTrib>'
         M->cXml += '<qTrib>'         +LTRIM(str(NFCEITENS->i_qTrib,14,4))    +'</qTrib>'
         M->cXml += '<vUnTrib>'       +LTRIM(str(NFCEITENS->i_vUnTrib,14,2))  +'</vUnTrib>'
         IF NFCEITENS->i_vDesc <> 0.00
            M->cXml += '<vDesc>'       +LTRIM(str(NFCEITENS->i_vDesc,14,2))  +'</vDesc>'
         ENDIF
         M->cXml += '<indTot>'        +str(NFCEITENS->i_indTot,1,0)           +'</indTot>'
         M->cXml += '<xPed>'          +NOTAFCE->NUMNOT                        +'</xPed>'
*      M->cXml += '<nItemPed>'      +ltrim(NFCEITENS->i_nItem)              +'</nItemPed>'
         M->cXml += '</prod>'
****************************************************************         
*         simples nacional
****************************************************************
         IF  PRODUTOS->ICMS_REGIM = "1"
            M->cXml += '<imposto>'
            M->cXml += '<ICMS>'
            M->cXml += '<ICMSSN'         +NFCEITENS->ICMS_ST                     +'>'
            M->cXml += '<orig>'          +NFCEITENS->ICMS_ORIGE                  +'</orig>'
            M->cXml += '<CSOSN>'         +NFCEITENS->ICMS_ST                     +'</CSOSN>'
            M->cXml += '</ICMSSN'        +NFCEITENS->ICMS_ST                     +'>'
            M->cXml += '</ICMS>'

            M->cXml += '<PIS>'
            M->cXml += '<PISOutr>'
            M->cXml += '<CST>'               +NFCEITENS->q_CST                   +'</CST>'
            M->cXml += '<vBC>'               +ltrim(str(NFCEITENS->q_vBC,14,2))  +'</vBC>'
            M->cXml += '<pPIS>'              +ltrim(str(NFCEITENS->q_pPIS,7,4))  +'</pPIS>'
            M->cXml += '<vPIS>'              +ltrim(str(NFCEITENS->q_vPIS,14,2)) +'</vPIS>'
            M->cXml += '</PISOutr>'
            M->cXml += '</PIS>'
            
            M->cXml += '<COFINS>'
            M->cXml += '<COFINSOutr>'
            M->cXml += '<CST>'               +NFCEITENS->s_CST                     +'</CST>'
            M->cXml += '<vBC>'               +ltrim(str(NFCEITENS->s_vBC,14,2))    +'</vBC>'
            M->cXml += '<pCOFINS>'           +ltrim(str(NFCEITENS->s_pCOFINS,7,4)) +'</pCOFINS>'
            M->cXml += '<vCOFINS>'           +ltrim(str(NFCEITENS->s_vCOFINS,14,2))+'</vCOFINS>'
            M->cXml += '</COFINSOutr>'
            M->cXml += '</COFINS>'
            M->cXml += '</imposto>'
            M->cXml += '</det>'
         endif
****************************************************************         
*         tributacao normal
****************************************************************         
         IF PRODUTOS->ICMS_REGIM = "3"         
            M->cXml += '<imposto>'
            M->cXml += '<ICMS>'
            if flag->n_xUF # mUF
               M->cXml += '<ICMS60>'
               M->cXml += '<orig>'          +NFCEITENS->ICMS_ORIGE                  +'</orig>'
               M->cXml += '<CST>60</CST>'
*               M->cXml += '<modBC>3</modBC>'
*               M->cXml += '<vBC>'+ltrim(str((NFCEITENS->i_vProd*NFCEITENS->i_qTrib)-NFCEITENS->i_vDesc,14,2))  +'</vBC>'
*               M->cXml += '<pICMS>12.00</pICMS>'
*               M->cXml += '<vICMS>'+LTRIM(str((((NFCEITENS->i_vProd*NFCEITENS->i_qTrib)-NFCEITENS->i_vDesc)*0.12),14,2))  +'</vICMS>'
*               M->cXml += '<modBCST>0</modBCST>'
*               M->cXml += '<vBCST>0.00</vBCST>'
*               M->cXml += '<pICMSST>0.00</pICMSST>'
*               M->cXml += '<vICMSST>0.00</vICMSST>'
               M->cXml += '</ICMS60>'
               M->vBC   +=((NFCEITENS->i_vProd*NFCEITENS->i_qTrib)-NFCEITENS->i_vDesc)
               M->vICMS +=(((NFCEITENS->i_vProd*NFCEITENS->i_qTrib)-NFCEITENS->i_vDesc)*0.12)

            else
               M->cXml += '<ICMS'           +ALLTRIM(NFCEITENS->ICMS_ST)            +'>'
               M->cXml += '<orig>'          +NFCEITENS->ICMS_ORIGE                  +'</orig>'
               M->cXml += '<CST>'           +ALLTRIM(NFCEITENS->ICMS_ST)            +'</CST>'
               M->cXml += '</ICMS'          +ALLTRIM(NFCEITENS->ICMS_ST)            +'>'
            endif

            M->cXml += '</ICMS>'

//            M->cXml += '<IPI>'
//            M->cXml += '<cEnq>'              +NFCEITENS->o_cEnc                  +'</cEnq>'            
//            M->cXml += '<IPITrib>'
//            M->cXml += '<CST>'               +NFCEITENS->o_CST                   +'</CST>'
//            M->cXml += '<vBC>'               +ltrim(str(NFCEITENS->o_vBC,14,2))  +'</vBC>'
//            M->cXml += '<pIPI>'              +ltrim(str(NFCEITENS->o_pIPI,7,4))  +'</pIPI>'
//            M->cXml += '<vIPI>'              +ltrim(str(NFCEITENS->o_vIPI,14,2)) +'</vIPI>'
//            M->cXml += '</IPITrib>'
//            M->cXml += '</IPI>'

            M->cXml += '<PIS>'
            M->cXml += '<PISNT>'
            M->cXml += '<CST>'               +NFCEITENS->q_CST                   +'</CST>'
*            M->cXml += '<vBC>'               +ltrim(str(NFCEITENS->o_vBC,14,2))  +'</vBC>'
*            M->cXml += '<pPIS>'              +ltrim(str(NFCEITENS->q_pPIS,7,4))  +'</pPIS>'
*            M->cXml += '<vPIS>'              +ltrim(str(NFCEITENS->q_vPIS,14,2)) +'</vPIS>'
            M->cXml += '</PISNT>'
            M->cXml += '</PIS>'
            
            M->cXml += '<COFINS>'
            M->cXml += '<COFINSNT>'
            M->cXml += '<CST>'               +NFCEITENS->s_CST                     +'</CST>'
*            M->cXml += '<vBC>'               +ltrim(str(NFCEITENS->s_vBC,14,2))    +'</vBC>'
*            M->cXml += '<pCOFINS>'           +ltrim(str(NFCEITENS->s_pCOFINS,7,4)) +'</pCOFINS>'
*            M->cXml += '<vCOFINS>'           +ltrim(str(NFCEITENS->s_vCOFINS,14,2))+'</vCOFINS>'
            M->cXml += '</COFINSNT>'
            M->cXml += '</COFINS>'
            if flag->n_xUF # mUF
               M->cXml += '<ICMSUFDest>'
               M->cXml += '<vBCUFDest>'+ ltrim(str(NFCEITENS->i_vProd - NFCEITENS->i_vDesc )) +'</vBCUFDest>'
               M->cXml += '<pFCPUFDest>2.00</pFCPUFDest>'
               M->cXml += '<pICMSUFDest>18.00</pICMSUFDest>'
               M->cXml += '<pICMSInter>12.00</pICMSInter>'
               M->cXml += '<pICMSInterPart>60.00</pICMSInterPart>'
               M->cXml += '<vFCPUFDest>'+ ltrim(str(((NFCEITENS->i_vProd - NFCEITENS->i_vDesc )*0.02),14,2)) +'</vFCPUFDest>'
               M->cXml += '<vICMSUFDest>'+ ltrim(str((((NFCEITENS->i_vProd - NFCEITENS->i_vDesc )*0.06)*0.6),14,2))         +'</vICMSUFDest>'
               M->cXml += '<vICMSUFRemet>'+ ltrim(str((((NFCEITENS->i_vProd - NFCEITENS->i_vDesc )*0.06)*0.4),14,2))         +'</vICMSUFRemet>'
               M->cXml += '</ICMSUFDest>'
               M->vFCPUFDest     += VAL(str(((NFCEITENS->i_vProd - NFCEITENS->i_vDesc )*0.02),14,2))
               M->vICMSUFDest    += VAL(str((((NFCEITENS->i_vProd - NFCEITENS->i_vDesc )*0.06)*0.6),14,2))
               M->vICMSUFRemet   += VAL(str((((NFCEITENS->i_vProd - NFCEITENS->i_vDesc )*0.06)*0.4),14,2))

            endif

            M->cXml += '</imposto>'
            M->cXml += '</det>'            

            endif   
         DBSKIP()
      ENDD               

      
      M->cXml += '<total>'
      M->cXml += '<ICMSTot>'
*******************************************************************************
*      M->cXml += '<vBC>'+LTRIM(str(M->Vbc,14,2))+'</vBC>'                   
*      M->cXml += '<vICMS>'+LTRIM(str(M->vICMS,14,2))+'</vICMS>'
*******************************************************************************
      M->cXml += '<vBC>0.00</vBC>'                   
      M->cXml += '<vICMS>0.00</vICMS>'
      M->cXml += '<vICMSDeson>0.00</vICMSDeson>'
      M->cXml += '<vFCPUFDest>'   +ltrim(str(M->vFCPUFDest,14,2))      +'</vFCPUFDest>'
      M->cXml += '<vICMSUFDest>'   +ltrim(str(M->vICMSUFDest,14,2))   +'</vICMSUFDest>'
      M->cXml += '<vICMSUFRemet>'   +ltrim(str(M->vICMSUFRemet,14,2))   +'</vICMSUFRemet>'
      M->cXml += '<vBCST>0.00</vBCST>'
      M->cXml += '<vST>0.00</vST>'
      M->cXml += '<vProd>'                        + LTRIM(STR(NOTAFCE->w_vPROD,14,2))                   +'</vProd>'
      M->cXml += '<vFrete>0.00</vFrete>'
      M->cXml += '<vSeg>0.00</vSeg>'
      M->cXml += '<vDesc>'                        + LTRIM(STR(NOTAFCE->w_vDesc,14,2))                   +'</vDesc>'
      M->cXml += '<vII>0.00</vII>'
      M->cXml += '<vIPI>0.00</vIPI>'
      M->cXml += '<vPIS>0.00</vPIS>'
      M->cXml += '<vCOFINS>0.00</vCOFINS>'
      M->cXml += '<vOutro>0.00</vOutro>'
      M->cXml += '<vNF>'                          + LTRIM(STR(NOTAFCE->w_vNF,14,2))                   +'</vNF>'
      M->cXml += '<vTotTrib>0.00</vTotTrib>'

      M->cXml += '</ICMSTot>'
      M->cXml += '</total>'
      M->cXml += '<transp>'
      M->cXml += '<modFrete>9</modFrete>'
      M->cXml += '</transp>'
      

      
      IF PEDIDO->TIPPAG = 1
         M->cXml += '<pag>'
         M->cXml += '<tPag>01</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
      ELSEIF PEDIDO->TIPPAG = 2      
         M->cXml += '<pag>'
         M->cXml += '<tPag>03</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'      
      ELSEIF PEDIDO->TIPPAG = 3      
         M->cXml += '<pag>'
         M->cXml += '<tPag>05</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'   
      ELSEIF PEDIDO->TIPPAG = 4      
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
      ELSEIF PEDIDO->TIPPAG = 5      
         M->cXml += '<pag>'
         M->cXml += '<tPag>01</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>03</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'
      ELSEIF PEDIDO->TIPPAG = 6      
         M->cXml += '<pag>'
         M->cXml += '<tPag>01</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>05</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'
      ELSEIF PEDIDO->TIPPAG = 7      
         M->cXml += '<pag>'
         M->cXml += '<tPag>01</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'      
      ELSEIF PEDIDO->TIPPAG = 8      
         M->cXml += '<pag>'
         M->cXml += '<tPag>01</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>2</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'
      ELSEIF PEDIDO->TIPPAG = 9      
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>03</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'         
      ELSEIF PEDIDO->TIPPAG = 10      
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>05</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'            
      ELSEIF PEDIDO->TIPPAG = 11      
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str((PEDIDO->TOTNOT-PEDIDO->TOT001),14,2))+'</vPag>'
         M->cXml += '</pag>'            
      ELSEIF PEDIDO->TIPPAG = 12      
         M->cXml += '<pag>'
         M->cXml += '<tPag>02</tPag>'
         M->cXml += '<vPag>'+ltrim(str(PEDIDO->TOT001,14,2))+'</vPag>'
         M->cXml += '</pag>'
      ENDIF
      
      M->cXml += '<infAdic>'
*      M->cXml += '<infAdFisco>INFORMACOES ADICIONAIS DE INTERESSE DO FISCO</infAdFisco>'
      M->cXml += '<infCpl>'+rtrim(NOTAFCE->z_infCpl)+'</infCpl>'
      M->cXml += '</infAdic>'
      M->cXml += '</infNFe>'
      M->cXml += '</NFe>'
*      M->cXml += '</nfeProc>'      
      NOTAFCE->w_vPROD:=NOTAFCE->w_vPROD
      NOTAFCE->w_vNF  :=NOTAFCE->w_vNF

***************************************************************************************
* MODULO DE ASSINATURA , TRANSMISSAO, AUTORIZACAO, RETORNO E IMPRESSAO
***************************************************************************************
      ThisNFE:oProgressbar1:Set(,60)
      ThisNFE:oLabel5:SetText("Assinando NFC-e e gerando QR-CODE                                                   ")
********* ASSINATURA VIA SEFAZCLASS **********************************************************************************************************

      SELE CERTIFICADO
      IF !DBSEEK(rtrim(hwg_GetComputerName()))
         hwg_MsgInfo("Computador sem o CERTIFICADO DIGITAL instalado"+ HB_EOL()+"A Operação não poderá ser efetuada")
         SELE NOTAFCE
         RETURN NIL
      endif
      SELE NOTAFCE

      cTxtXml:=M->cXml
   
      oSefaz              := SefazClass():New()
      oSefaz:cUF          := FLAG->n_xUF
      oSefaz:cAmbiente    := FLAG->n_tpAmb      
      oSefaz:cCertificado := TRIM(CERTIFICADO->NOMCERT)
      oSefaz:cIdToken      := "000001"
      oSefaz:cCSC         := TRIM(FLAG->cCertifica)
      oSefaz:cNFCE        := "S"      
//      cXmlRetorno := oSefaz:NfeStatusServico(  ) 
**********************************************************************************************************************************************   
      ThisNFE:oProgressbar1:Set(,80)
      ThisNFE:oLabel5:SetText("Aguardando Retorno                                                ")

//      oSefaz:cXmlDocumento:=cTxtXml
//      oSefaz:AssinaXml(  )
//      oSefaz:GeraQRCode( oSefaz:cXmlDocumento )
//      oSefaz:NFEloteenvia( oSefaz:cXmlDocumento )
      
      oSefaz:NFEloteenvia( cTxtXml )

      hb_MemoWrit( cPrefixo + "_1_documento.xml", oSefaz:cXmlDocumento )
      hb_MemoWrit( cPrefixo + "_2_Envio.xml", oSefaz:cXmlEnvio )
      hb_MemoWrit( cPrefixo + "_3_Soap.xml", oSefaz:cXmlSoap  )
      hb_MemoWrit( cPrefixo + "_4_Retorno.xml", oSefaz:cXmlRetorno  )
      hb_MemoWrit( cPrefixo + "_5_Protocolo.xml", oSefaz:cXmlProtocolo   )
      hb_MemoWrit( cPrefixo + "_6_Recibo.xml", oSefaz:cXmlRecibo  )
      hb_MemoWrit( cPrefixo + "_7_Autorizado.xml", oSefaz:cXmlAutorizado )

//      oSpedDa := hbNfeDaGeral():New()
//      oSpedDa:ToPdf( oSefaz:cXmlDocumento, cPrefixo + "_8_AutorizadoPDF.PDF" )
//      HB_RUN( 'Start sumatra\sumatrapdf.exe ' + cPrefixo + "_8_AutorizadoPDF.PDF" )      
      
      
      IF ! oSefaz:cStatus $ "100,101,150,301,302"
         ThisNFE:oLabel5:SetText(oSefaz:cMotivo)
         ThisNFE:oOwnerbutton4:DISABLE( )
      ELSE
         ThisNFE:oLabel5:SetText(oSefaz:cStatus + oSefaz:cMotivo)
         SELE NOTAFCE
         IF RLOCK()
            NOTAFCE->FL_SITUAC := XmlNode(oSefaz:cXmlRetorno, "cStat")
            NOTAFCE->FL_MOTIVO := XmlNode(oSefaz:cXmlRetorno, "xMotivo")
            DBUNLOCK()
         ENDIF
         ThisNFE:oProgressbar1:Set(,90)
         ThisNFE:oLabel5:SetText("Gerando DANFE em PDF                                              ")   
         oSpedDa := hbNfeDaGeral():New()
//               oDanfe:cLogoFile := curdrive()+":\"+CURDIR()+"\clientelogo.jpg"
         oSpedDa:ToPdf( oSefaz:cXmlAutorizado, cPrefixo + "_8_AutorizadoPDF.PDF" )
         ThisNFE:oProgressbar1:Set(,100)
         ThisNFE:oLabel5:SetText("NFC-e Concluida com sucesso                                        ")
         ThisNFE:oOwnerbutton4:DISABLE( )
         
         If File( hb_Dirbase()+'sumatra\sumatrapdf.exe' )
            HB_RUN( 'Start sumatra\sumatrapdf.exe ' + cPrefixo + "_8_AutorizadoPDF.PDF" )
         Else  // Executa a visualizacao padrao para PDF senao tiver o Sumatra
            HB_RUN( 'START /MAX '+cPrefixo + "_8_AutorizadoPDF.PDF")
         EndIf
      ENDIF

    SELE ITENS   
   DBCLOSEAREA()
    SELE NFCEITENS   
   DBCLOSEAREA()
//   dbcloseall()
return nil

*************************************
STATIC FUNCTION MONTA_CHAVE( b_mod )
*************************************

M->mod         :=FLAG->n_modNFC
M->serie      :=FLAG->n_serieNFC
M->nNF         :=FLAG->n_nNFC

M->cUF         :=FLAG->n_cUF
M->dhEmi      :=substr(strzero(YEAR(M->DAT_HOJE),4,0),3,2)+strzero(MONTH(M->DAT_HOJE),2,0)
M->CNPJ         :=FLAG->n_CNPJ

M->tpEmis      :='1'
M->cNF         :=FLAG->n_cNF

M->cDV       :=CalculaDigito( M->cUF+M->dhEmi+M->CNPJ+M->mod+M->serie+M->nNF+M->tpEmis+M->cNF, "11" )
M->chaveNFe := M->cUF+M->dhEmi+M->CNPJ+M->mod+M->serie+M->nNF+M->tpEmis+M->cNF+M->cDV

RETURN M->cUF+M->dhEmi+M->CNPJ+M->mod+M->serie+M->nNF+M->tpEmis+M->cNF+M->cDV


os arquivo que uso

**********************************
FUNCTION ABRE_NFCE()
**********************************
IF FILE("DATABASE\NFCEDADOS.DBF")
  USE DATABASE\NFCEDADOS NEW SHARED ALIAS NOTAFCE
ELSE
   ***IDENTIFICACAO DA NOTA FISCAL ELETRONIC
   BANCO:= {}
   AADD(BANCO, {"a_versao","C",4,0})                    
   AADD(BANCO, {"a_Id","C",47,0})

   AADD(BANCO, {"b_cUF","C",02,0})
   AADD(BANCO, {"b_cNF","C",08,0})
   AADD(BANCO, {"b_natOp","C",60,0})
   AADD(BANCO, {"b_indPag","C",01,0})
   AADD(BANCO, {"b_mod","C",02,0})
   AADD(BANCO, {"b_serie","C",03,0})
   AADD(BANCO, {"b_nNF","C",09,0})
   AADD(BANCO, {"b_dhEmi","C",25,0})
   AADD(BANCO, {"b_dhSaiEnt","C",25,0})
   AADD(BANCO, {"b_tpNF","C",01,0})
   AADD(BANCO, {"b_idDest","C",01,0})
   AADD(BANCO, {"b_cMunFG","C",07,0})
   AADD(BANCO, {"b_tpImp","C",01,0})
   AADD(BANCO, {"b_tpEmis","C",01,0})
   AADD(BANCO, {"b_cDV","C",01,0})
   AADD(BANCO, {"b_tpAmb","C",01,0})
   AADD(BANCO, {"b_finNFe","C",01,0})   
   AADD(BANCO, {"b_indFinal","C",01,0}) 
   AADD(BANCO, {"b_indPres","C",01,0}) 
   AADD(BANCO, {"b_procEmi","C",01,0})
   AADD(BANCO, {"b_verProc","C",20,0})
   AADD(BANCO, {"b_dhCont","C",25,0})
   AADD(BANCO, {"b_xJust","C",256,0})
   
   ***IDENTIFICACAO DO EMITENTE DA NF-e
   AADD(BANCO, {"c_CNPJ","C",14,0})
   AADD(BANCO, {"c_xNome","C",60,0})
   AADD(BANCO, {"c_xFant","C",60,0}) 
   AADD(BANCO, {"c_xLgr","C",60,0}) 
   AADD(BANCO, {"c_nro","C",60,0})   
   AADD(BANCO, {"c_xCpl","C",60,0})
   AADD(BANCO, {"c_xBairro","C",60,0}) 
   AADD(BANCO, {"c_cMun","C",07,0})
   AADD(BANCO, {"c_xMun","C",60,0})
   AADD(BANCO, {"c_UF","C",02,0}) 
   AADD(BANCO, {"c_CEP","C",08,0})
   AADD(BANCO, {"c_cPais","C",04,0}) 
   AADD(BANCO, {"c_xPais","C",60,0}) 
   AADD(BANCO, {"c_fone","C",14,0}) 
   AADD(BANCO, {"c_IE","C",14,0})
   AADD(BANCO, {"c_IEST","C",14,0})
   AADD(BANCO, {"c_IM","C",15,0})
   AADD(BANCO, {"c_CNAE","C",07,0}) 
   AADD(BANCO, {"c_CRT","C",01,0})   

   ***IDENTIFICACAO DO DESTINATARIO DA NF-e
   AADD(BANCO, {"e_CNPJ","C",14,0})
   AADD(BANCO, {"e_IdEstr","C",20,0})
   AADD(BANCO, {"e_xNome","C",60,0})
   AADD(BANCO, {"e_xFant","C",60,0}) 
   AADD(BANCO, {"e_xLgr","C",60,0}) 
   AADD(BANCO, {"e_nro","C",60,0})   
   AADD(BANCO, {"e_xCpl","C",60,0})
   AADD(BANCO, {"e_xBairr","C",60,0}) 
   AADD(BANCO, {"e_cMun","C",07,0})
   AADD(BANCO, {"e_xMun","C",60,0})
   AADD(BANCO, {"e_UF","C",02,0}) 
   AADD(BANCO, {"e_CEP","C",08,0})
   AADD(BANCO, {"e_cPais","C",04,0}) 
   AADD(BANCO, {"e_xPais","C",60,0}) 
   AADD(BANCO, {"e_fone","C",14,0}) 
   AADD(BANCO, {"e_indIE","C",01,0})   
   AADD(BANCO, {"e_IE","C",14,0})
   AADD(BANCO, {"e_ISUF","C",09,0}) 
   AADD(BANCO, {"e_IM","C",15,0})
   AADD(BANCO, {"e_eMAIL","C",60,0}) 

   ***IDENTIFICACAO DO LOCAL DE RETIRADA
   
   AADD(BANCO, {"f_CNPJ","C",14,0})
   AADD(BANCO, {"f_xLgr","C",60,0}) 
   AADD(BANCO, {"f_nro","C",60,0})   
   AADD(BANCO, {"f_xCpl","C",60,0})
   AADD(BANCO, {"f_xBairr","C",60,0}) 
   AADD(BANCO, {"f_cMun","C",07,0})
   AADD(BANCO, {"f_xMun","C",60,0})
   AADD(BANCO, {"f_UF","C",02,0}) 

   ***IDENTIFICACAO DO LOCAL DE ENTREGA
   
   AADD(BANCO, {"g_CNPJ","C",14,0})
   AADD(BANCO, {"g_xLgr","C",60,0}) 
   AADD(BANCO, {"g_nro","C",60,0})   
   AADD(BANCO, {"g_xCpl","C",60,0})
   AADD(BANCO, {"g_xBairr","C",60,0}) 
   AADD(BANCO, {"g_cMun","C",07,0})
   AADD(BANCO, {"g_xMun","C",60,0})
   AADD(BANCO, {"g_UF","C",02,0})   

   *** TOTAL DA NF-e
   AADD(BANCO, {"w_vBC","N",14,2}) 
   AADD(BANCO, {"w_vICMS","N",14,2})
   AADD(BANCO, {"w_vICMSD","N",14,2})
   AADD(BANCO, {"w_vBCST","N",14,2})
   AADD(BANCO, {"w_vST","N",14,2})
   AADD(BANCO, {"w_vPROD","N",14,2})
   AADD(BANCO, {"w_vFrete","N",14,2})
   AADD(BANCO, {"w_vSeg","N",14,2})
   AADD(BANCO, {"w_vDesc","N",14,2})
   AADD(BANCO, {"w_vII","N",14,2})
   AADD(BANCO, {"w_vIPI","N",14,2})
   AADD(BANCO, {"w_vPIS","N",14,2})
   AADD(BANCO, {"w_vCOFINS","N",14,2})
   AADD(BANCO, {"w_vOutro","N",14,2})
   AADD(BANCO, {"w_vNF","N",14,2})
   AADD(BANCO, {"w_vTotTrib","N",14,2})

   *** FORMA DE PAGAMENTO

   AADD(BANCO, {"ya_tPag","C",02,0})  && 01=dinheiro 02=cheque 03=c.cred 04=c.deb 05=cred loja 99=outros
   AADD(BANCO, {"ya_vPag","N",14,2})
   AADD(BANCO, {"ya_CNPJ","C",14,0})
   AADD(BANCO, {"ya_Band","C",02,0})  && 01=visa 02=master 03=amex 04=sorocred 99=outros
   AADD(BANCO, {"ya_Aut","C",20,0})

   *** INFORMACOES ADICIONAIS DA NFe

   AADD(BANCO, {"z_infAdFis","C",1000,0})
   AADD(BANCO, {"z_infCpl","C",1000,0})

   *** INFORMACOES DE COMPRAS

   AADD(BANCO, {"zb_xNEmp","C",22,0})      && identificacao da nota de empenho (compras publicas)
   AADD(BANCO, {"zb_xPed","C",60,0})      && informar pedido
   AADD(BANCO, {"zb_xCont","C",60,0})      && informar o contrato de compra

   *** FLAGS DE CONTROLE

   AADD(BANCO, {"FL_VALIDA","L",01,0})      && testa se a nota ja foi validada
   AADD(BANCO, {"FL_ASSINA","L",01,0})      && testa se a nota ja foi assinada
   AADD(BANCO, {"FL_TRANSM","L",01,0})      && testa se a nota ja foi transmitida
   AADD(BANCO, {"FL_IMPRIM","L",01,0})      && testa se a nota ja foi impressa
   AADD(BANCO, {"FL_EXPORT","L",01,0})      && testa se a nota ja foi exportada
   AADD(BANCO, {"FL_SITUAC","C",03,0})      && situacao da NFe
   AADD(BANCO, {"FL_MOTIVO","C",60,0})      && Motivo da NFe   
   ***IDENTIFICACAO DA NOTA DE PEDIDO
   
   AADD(BANCO, {"NUMNOT","C",06,0})

   ***IDENTIFICACAO DO OPERADOR E DA MAQUINA
   
   AADD(BANCO, {"OPERADOR","C",20,0})
   AADD(BANCO, {"MAQUINA","C",20,0})
   
   DBCREATE("DATABASE\NFCEDADOS",BANCO)
   USE DATABASE\NFCEDADOS NEW SHARED ALIAS NOTAFCE
END
IF NETERR()

   RETURN .F.
END
IF FILE("DATABASE\NFCEDADOS.001")
   SET INDEX TO DATABASE\NFCEDADOS.001
ELSE
  USE DATABASE\NFCEDADOS EXCLUSIVE
  IF NETERR()

      RETURN .F.
  END
  PACK

  INDEX ON NUMNOT                                    TAG NFCE01 TO DATABASE\NFCEDADOS.001

  INDEX ON b_mod+b_serie+b_nNF                   TAG NFCE02 TO DATABASE\NFCEDADOS.001 

  INDEX ON a_Id                                     TAG NFCE03 TO DATABASE\NFCEDADOS.001 

  INDEX ON e_xNome+b_dhEmi                           TAG NFCE04 TO DATABASE\NFCEDADOS.001 
 
  DBCLOSEAREA()
  USE DATABASE\NFCEDADOS NEW SHARED ALIAS NOTAFCE
  IF NETERR()

     RETURN .F.
  END
  SET INDEX TO DATABASE\NFCEDADOS.001
END     
RETURN .T.

**********************************
FUNCTION ABRE_NFCEITEM()
**********************************
IF FILE("C:\TEMP\NFCEITENS.DBF")
  USE C:\TEMP\NFCEITENS NEW SHARED ALIAS NFCEITENS
ELSE
   ***PRODUTOS E SERVICOS DA NFC-e
   
   BANCO:= {}
   AADD(BANCO, {"NUMNOT","C",06,0})
   
   AADD(BANCO, {"i_versao","C",4,0})                    
   AADD(BANCO, {"i_Id","C",47,0})
   AADD(BANCO, {"i_nItem","C",03,0})   && varia entre 001-990
   AADD(BANCO, {"i_cProd","C",60,0})
   AADD(BANCO, {"i_cEAN","C",14,0})
   AADD(BANCO, {"i_xProd","C",120,0})
   AADD(BANCO, {"i_NCM","C",08,0})
   AADD(BANCO, {"i_NVE","C",08,0})
   AADD(BANCO, {"i_EXTIPI","C",03,0})
   AADD(BANCO, {"i_CFOP","C",04,0})
   AADD(BANCO, {"i_uCom","C",06,0})
   AADD(BANCO, {"i_qCom","N",14,4})
   AADD(BANCO, {"i_vUnCom","N",14,4})
   AADD(BANCO, {"i_vProd","N",14,2})
   AADD(BANCO, {"i_cEANTrib","C",14,0})
   AADD(BANCO, {"i_uTrib","C",06,0})
   AADD(BANCO, {"i_qTrib","N",14,4})
   AADD(BANCO, {"i_vUnTrib","N",14,4})
   AADD(BANCO, {"i_vFrete","N",14,2})
   AADD(BANCO, {"i_vSeg","N",14,2})
   AADD(BANCO, {"i_vDesc","N",14,2})
   AADD(BANCO, {"i_vOutro","N",14,2})
   AADD(BANCO, {"i_indTot","N",01,0})

   AADD(BANCO, {"i_xPed","C",15,0})
   AADD(BANCO, {"i_nItemPed","C",6,0})
   
   AADD(BANCO, {"m_vTotTrib","N",14,2})
   AADD(BANCO, {"m_vTotFed","N",14,2})
   AADD(BANCO, {"m_vTotEst","N",14,2})
   AADD(BANCO, {"m_vTotMun","N",14,2})   
   
   AADD(BANCO, {"CEST","C",08,0})    
   
   
   ***GRUPO DE TRIBUTAÇAO SIMPLES NACIONAL

   AADD(BANCO, {"ICMS_REGIM","C",01,0})    &&  1-simples naciona   
   AADD(BANCO, {"ICMS_ST","C",03,0})      && 101/102/103/300/400 CODIGO DE SITUACAO DE OPERACAO
   AADD(BANCO, {"ICMS_ORIGE","C",01,0})   

   
   
*   ***GRUPO DE TRIBUTAÇAO NORMAL 00/10/20/30/40/41/50/51/60/70/90
*   
*   AADD(BANCO, {"n_origTN","C",01,0})      && 3 TRIBUTACAO NORMAL
*   AADD(BANCO, {"n_CST","C",02,0})         && 00=tributada integralmente
*   AADD(BANCO, {"n_modBC","N",01,0})      && 0=margem valor agregado (%)
*   AADD(BANCO, {"n_vBC","N",14,4})           && valor da base de calculo
*   AADD(BANCO, {"n_pICMS","N",03,4})      && aliquota do imposto
*   AADD(BANCO, {"n_vICMS","N",14,4})

   ***GRUPO DE TRIBUTAÇAO IPI
   
   AADD(BANCO, {"o_CST","C",02,0})         && situacao tributaria
   AADD(BANCO, {"o_clEnq","C",05,0})      && classe do enquadramento
   AADD(BANCO, {"o_CNPJProd","C",14,0})   && cnpj do produtor da mercdoria
   AADD(BANCO, {"o_cSelo","C",60,0})
   AADD(BANCO, {"o_qSelo","C",12,0})
   AADD(BANCO, {"o_cEnc","C",03,0})        && informar 999 enquanto tabela nao for criada
   AADD(BANCO, {"o_vBC","N",14,4})   
   AADD(BANCO, {"o_pIPI","N",07,4})      && aliquota do imposto
   AADD(BANCO, {"o_qUnid","N",14,4})
   AADD(BANCO, {"o_vUnid","N",14,4})
   AADD(BANCO, {"o_vIPI","N",14,4})
   
   ***GRUPO DE TRIBUTACAO PIS
   
   AADD(BANCO, {"q_CST","C",02,0})         && PIS 99 outras operacoes
   AADD(BANCO, {"q_vBC","N",14,4})         && valor da base de calculo
   AADD(BANCO, {"q_pPIS","N",07,4})      && aliquota em percentual
   AADD(BANCO, {"q_vAlqProd","N",14,4})   && aliquota em reais
   AADD(BANCO, {"q_PISQtde","N",14,2})     && quantidade vendida
   AADD(BANCO, {"q_vPIS","N",14,2})      && aliquota em percentual   

   ***GRUPO DE TRIBUTACAO COFINS
   
   AADD(BANCO, {"s_CST","C",02,0})         && COFINS 99 outras operacoes
   AADD(BANCO, {"s_vBC","N",14,4})         && valor da base de calculo
   AADD(BANCO, {"s_pCOFINS","N",07,4})      && aliquota em percentual
   AADD(BANCO, {"s_vAlqProd","N",14,4})   && aliquota em reais
   AADD(BANCO, {"s_COFSQtde","N",14,2})    && quantidade vendida
   AADD(BANCO, {"s_vCOFINS","N",14,2})      && aliquota em percentual   
   
   
   
   DBCREATE("C:\TEMP\NFCEITENS",BANCO)
   USE C:\TEMP\NFCEITENS NEW SHARED ALIAS NFCEITENS
END
IF NETERR()

   RETURN .F.
END
IF FILE("C:\TEMP\NFCEITENS.001")
   SET INDEX TO C:\TEMP\NFCEITENS.001
ELSE
  USE C:\TEMP\NFCEITENS EXCLUSIVE
  IF NETERR()

      RETURN .F.
  END
  PACK

  INDEX ON NUMNOT+i_nItem               TAG NFCEI01 TO C:\TEMP\NFCEITENS.001

  INDEX ON i_Id+i_nItem                 TAG NFCEI02 TO C:\TEMP\NFCEITENS.001

  DBCLOSEAREA()
  USE C:\TEMP\NFCEITENS NEW SHARED ALIAS NFCEITENS
  IF NETERR()

     RETURN .F.
  END
  SET INDEX TO C:\TEMP\NFCEITENS.001
END     
RETURN .T.
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Modelo NFCe Acbr

Mensagempor Fernando queiroz » 19 Dez 2017 10:23

Vou comecar a rotina de entrada de notas, quem tiver algo ja quase pronto manda ai para dar uma ajuda e facilitar o desenvolvimento :)) :)) :)) :))
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Modelo NFCe Acbr

Mensagempor JoséQuintas » 19 Dez 2017 12:42

Dependendo do caso, precisa melhorar a classe, pra pegar mais informações do que pega hoje.

Mas basicamente é:

oDocumento := XmlToDoc( cXml )

a partir daí, tá tudo em oDocumento.

oDocumento:Emitente:Nome
oDocumento:Emitente:CNPJ
oDocumento:Destinatario:Nome
oDocumento:Destinatario:Cnpj

É só decidir o que fazer com as informações que estão em oDocumento ou o nome que quiser.

Fernando:
Não aconselho o uso de M->cXml
Muito trabalhoso, e desnecessário.
Mais interessante declarar LOCAL cXml ou MEMVAR cXml
E usar -> só pra DBFs mesmo, pra indicar alias.
E se possível, usar o alias mesmo, e não a letra.
cliente->Codigo, cliente->Nome.

Usar letra acaba dando trabalho em pesquisar a que se refere aquela letra, além de obrigar a usar o arquivo exatamente naquela área.
Por nome/alias, tanto faz em que ordem abre os arquivos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18011
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Modelo NFCe Acbr

Mensagempor Nascimento » 19 Dez 2017 15:54

Rubens Disse:
Tenho isso pronto em HMGs... se quiser coloco a disposição...
Rubens


Querido vc poderia disponibilizar ? , Agradeço desde Já
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar de usuário

Nascimento
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 711
Data de registro: 19 Jul 2008 12:11
Cidade/Estado: OLINDA-PE
Curtiu: 110 vezes
Mens.Curtidas: 76 vezes

Próximo



Retornar para Legislação Fiscal e Tributária

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro