;** NF_NCE 4.0 *****************************************************************
;*  Gera‡Æo arquivo TecnoSpeed nota fiscal eletronica consumidor               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 10/08/2020 por Anivel Augusto Rodrigues
;Ultima Alteracao: 05/08/2020 por Bruno Carvalho
;Motivo Alteracao: Movido NF_NCE40 -> BIB_VEND 
;                  Procs NFE_GravaCampo,NFE_GravarCampoMemo,NFE_PegaEndereco,NFE_Tira_CharNFE,NFE_CalcMod11,NFE_CalcChaveAcesso,NFE_MontarFormasPagtos
;Ultima Alteracao: 29/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes razao consumidor final
;Ultima Alteracao: 10/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IsRegimeSimplesNacional, IsRegimeSimplesNacionalESRB
;Ultima Alteracao: 16/02/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes f6 definir impressora padrÆo 

;*******************************************************************************
;* Grava ISSQN do Item                                                         *
;*******************************************************************************
Proc Grava_ISSQN()

NFE_GravaCampo("","","","")
NFE_GravaCampo("vBC_U02         ","$" ,"S",regfi["ISSQN_BC"         ])
NFE_GravaCampo("vAliq_U03       ","N2","S",regfi["Aliquota de ISSQN"])
NFE_GravaCampo("vISSQN_U04      ","$" ,"S",regfi["Valor do ISSQN"   ])
NFE_GravaCampo("cMunFG_U05      ","I" ,"S",regfi["ISSQN_Municipio"])
NFE_GravaCampo("cListServ_U06   ","S" ,"S",SubStr(AlinhM(StrVal(regfi["Codigo_Servico"]),4),1,2)+"."+SubStr(AlinhM(StrVal(regfi["Codigo_Servico"]),4),3,2))
NFE_GravaCampo("vDeducao_U07   ","$2","N",regfi["Valor Desconto Total"]+regfi["Valor Desconto Item"])
NFE_GravaCampo("indISS_U12      ","S" ,"S",1)
NFE_GravaCampo("nProcesso_U16   ","S" ,"S","")
NFE_GravaCampo("indIncentivo_U17","S" ,"S",2)

EndProc

;*******************************************************************************
;* Grava ICMS/ST do Item                                                       *
;*******************************************************************************
Proc Grava_ICMS_ST()
Private modBC_N13, pRedBC_N14, vBC_N15, pICMS_N16, vICMS_N17, 
        modBCST_N18, pMVAST_N19, pRedBCST_N20, vBCST_N21, pICMSST_N22, vICMSST_N23,
        vBCSTRet_N26, vICMSSTRet_N27, pCredSN_N29, vCredICMSSN_N30

orig_N11        = SubStr(regfi["Tipo Tributacao"],1,1)
CST_N12         = SubStr(regfi["Tipo Tributacao"],2,2)
CSOSN_N12a      = regfi["CSOSN"]    

modBC_N13       = "3"
pRedBC_N14      = regfi["Aliquota Reduzida BCICMS"]
vBC_N15         = regfi["ICMS_BC"] 
pICMS_N16       = regfi["Aliquota de ICMS"]
vICMS_N17       = regfi["Valor do ICMS"]

modBCST_N18     = "4"
pMVAST_N19      = regfi["MVA"]
pRedBCST_N20    = regfi["ICMS_ST_Aliquota Reduzida"]
vBCST_N21       = regfi["ICMS_ST_BC"]
pICMSST_N22     = regfi["ICMS_ST_Aliquota"]
vICMSST_N23     = regfi["ICMS_ST_Valor"]

pCredSN_N29     = regfi["ICMS_CredSN_Aliquota"]
vCredICMSSN_N30 = regfi["ICMS_CredSN_Valor"]

vBCSTRet_N26    = regfi["ICMS_ST_BC"]
vICMSSTRet_N27  = regfi["ICMS_ST_Valor"]

Switch
  Case IsRegimeSimplesNacional(TPEMPR):
    Switch
      Case CSOSN_N12a="101":
        NFE_GravaCampo("","","","")
        NFE_GravaCampo("orig_N11       ","S","S",orig_N11)
        NFE_GravaCampo("CSOSN_N12a     ","S","S",CSOSN_N12a)
        NFE_GravaCampo("pCredSN_N29    ","N2","S",pCredSN_N29)
        NFE_GravaCampo("vCredICMSSN_N30","$" ,"S",vCredICMSSN_N30)

      Case CSOSN_N12a="102" Or CSOSN_N12a="103" Or CSOSN_N12a="300" Or CSOSN_N12a="400":
        NFE_GravaCampo("","","","")
        NFE_GravaCampo("orig_N11       ","S","S",orig_N11)
        NFE_GravaCampo("CSOSN_N12a     ","S","S",CSOSN_N12a)

      Case CSOSN_N12a="201" Or CSOSN_N12a="202" Or CSOSN_N12a="203":
        NFE_GravaCampo("","","","")
        NFE_GravaCampo("orig_N11     ","S" ,"S",orig_N11)
        NFE_GravaCampo("CSOSN_N12a   ","S" ,"S",CSOSN_N12a)
        NFE_GravaCampo("modBCST_N18  ","S" ,"S",modBCST_N18)
        NFE_GravaCampo("pMVAST_N19   ","N2","N",pMVAST_N19)
				NFE_GravaCampo("pRedBCST_N20 ","N2","N",pRedBCST_N20)
				NFE_GravaCampo("vBCST_N21    ","$" ,"S",vBCST_N21)
        NFE_GravaCampo("pICMSST_N22  ","N2","S",pICMSST_N22)
        NFE_GravaCampo("vICMSST_N23  ","$" ,"S",vICMSST_N23)

        If CSOSN_N12a="201"
           Then NFE_GravaCampo("pCredSN_N29    ","N2","S",pCredSN_N29)
                NFE_GravaCampo("vCredICMSSN_N30","$" ,"S",vCredICMSSN_N30)
        EndIf
        NFE_GravaCampo("","","","")

      Case CSOSN_N12a="500":
        NFE_GravaCampo("","","","")
        NFE_GravaCampo("orig_N11            ","S" ,"S",orig_N11)
        NFE_GravaCampo("CSOSN_N12a          ","S" ,"S",CSOSN_N12a)
;        NFE_GravaCampo("vBCSTRet_N26        ","$" ,"S",vBCSTRet_N26)
;        NFE_GravaCampo("vICMSSubstituto_N26b","N2","S",0)
;        NFE_GravaCampo("vICMSSTRet_N27      ","$" ,"S",vICMSSTRet_N27)
        NFE_GravaCampo("","","","")

      Case CSOSN_N12a="900":
        NFE_GravaCampo("","","","")
        NFE_GravaCampo("orig_N11       ","S" ,"S",orig_N11)
        NFE_GravaCampo("CSOSN_N12a     ","S" ,"S",CSOSN_N12a)
        NFE_GravaCampo("modBC_N13      ","S" ,"S",modBC_N13)
        NFE_GravaCampo("vBC_N15        ","$" ,"S",vBC_N15)
        NFE_GravaCampo("pRedBC_N14     ","N2","N",pRedBC_N14)
        NFE_GravaCampo("pICMS_N16      ","N2","S",pICMS_N16)
        NFE_GravaCampo("vICMS_N17      ","$" ,"S",vICMS_N17)
        if vICMSST_N23>0
           then  
                NFE_GravaCampo("modBCST_N18    ","S" ,"S",modBCST_N18)
                NFE_GravaCampo("pMVAST_N19     ","N2","N",pMVAST_N19)
        				NFE_GravaCampo("pRedBCST_N20   ","N2","N",pRedBCST_N20)
        				NFE_GravaCampo("vBCST_N21      ","$" ,"S",vBCST_N21)
                NFE_GravaCampo("pICMSST_N22    ","N2","S",pICMSST_N22)
                NFE_GravaCampo("vICMSST_N23    ","$" ,"S",vICMSST_N23)
        endif
        NFE_GravaCampo("pCredSN_N29    ","N2","S",pCredSN_N29)
        NFE_GravaCampo("vCredICMSSN_N30","$" ,"S",vCredICMSSN_N30)
        NFE_GravaCampo("","","","")
    EndSwitch

  OtherWise:   ;*** NÆo ‚ SIMPLES NACIONAL
    Switch
      Case CST_N12="00":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11    ","S","S",orig_N11)
            NFE_GravaCampo("CST_N12     ","S","S",CST_N12)
            NFE_GravaCampo("modBC_N13   ","S","S",modBC_N13)
            NFE_GravaCampo("vBC_N15     ","$" ,"S",vBC_N15)
            NFE_GravaCampo("pICMS_N16   ","N2","S",pICMS_N16)
            NFE_GravaCampo("vICMS_N17   ","$" ,"S",vICMS_N17)
            NFE_GravaCampo("","","","")
            
      Case CST_N12="10":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11     ","S" ,"S",orig_N11)
            NFE_GravaCampo("CST_N12      ","S" ,"S",CST_N12)
            NFE_GravaCampo("modBC_N13    ","S" ,"S",modBC_N13)
            NFE_GravaCampo("vBC_N15      ","$" ,"S",vBC_N15)                     
            NFE_GravaCampo("pICMS_N16    ","N2","S",pICMS_N16)
            NFE_GravaCampo("vICMS_N17    ","$" ,"S",vICMS_N17)
            NFE_GravaCampo("modBCST_N18  ","S" ,"S",modBCST_N18)
            NFE_GravaCampo("pMVAST_N19   ","N2","N",pMVAST_N19)
						NFE_GravaCampo("pRedBCST_N20 ","N2","N",pRedBCST_N20)
						NFE_GravaCampo("vBCST_N21    ","$" ,"S",vBCST_N21)
            NFE_GravaCampo("pICMSST_N22  ","N2","S",pICMSST_N22)
            NFE_GravaCampo("vICMSST_N23  ","$" ,"S",vICMSST_N23)
            NFE_GravaCampo("","","","")
            
      Case CST_N12="20":         
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11    ","S","S",orig_N11)
            NFE_GravaCampo("CST_N12     ","S","S",CST_N12)
            NFE_GravaCampo("modBC_N13   ","S","S",modBC_N13)
            NFE_GravaCampo("pRedBC_N14  ","N2","S",pRedBC_N14)
            NFE_GravaCampo("vBC_N15     ","$" ,"S",vBC_N15)
            NFE_GravaCampo("pICMS_N16   ","N2","S",pICMS_N16)
            NFE_GravaCampo("vICMS_N17   ","$" ,"S",vICMS_N17)
            NFE_GravaCampo("","","","")

       Case CST_N12="30":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11     ","S" ,"S",orig_N11)
            NFE_GravaCampo("CST_N12      ","S" ,"S",CST_N12)
            NFE_GravaCampo("modBCST_N18  ","S" ,"S",modBCST_N18)
            NFE_GravaCampo("pMVAST_N19   ","N2","N",pMVAST_N19)
  					NFE_GravaCampo("pRedBCST_N20 ","N2","N",pRedBCST_N20)
  					NFE_GravaCampo("vBCST_N21    ","$" ,"S",vBCST_N21)
            NFE_GravaCampo("pICMSST_N22  ","N2","S",pICMSST_N22)
            NFE_GravaCampo("vICMSST_N23  ","$" ,"S",vICMSST_N23)
            NFE_GravaCampo("","","","")

      Case CST_N12="40" Or CST_N12="41" Or CST_N12="50":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11    ","S","S",orig_N11)
            NFE_GravaCampo("CST_N12     ","S","S",CST_N12)
            NFE_GravaCampo("","","","")

      Case CST_N12="51":         
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11    ","S","S",orig_N11)
            NFE_GravaCampo("CST_N12     ","S","S",CST_N12)
            NFE_GravaCampo("modBC_N13   ","S","S",modBC_N13)
            NFE_GravaCampo("pRedBC_N14  ","N2","S",pRedBC_N14)
            NFE_GravaCampo("vBC_N15     ","$" ,"S",vBC_N15)
            NFE_GravaCampo("pICMS_N16   ","N2","S",pICMS_N16)
            NFE_GravaCampo("vICMS_N17   ","$" ,"S",vICMS_N17)
            NFE_GravaCampo("","","","")

      Case CST_N12="60":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11            ","S" ,"S",orig_N11)
            NFE_GravaCampo("CST_N12             ","S" ,"S",CST_N12)
;            NFE_GravaCampo("vBCSTRet_N26        ","$" ,"S",vBCSTRet_N26)
;            NFE_GravaCampo("vICMSSubstituto_N26b","N2","S",0)
;            NFE_GravaCampo("vICMSSTRet_N27      ","$" ,"S",vICMSSTRet_N27)
            NFE_GravaCampo("","","","")

      Case CST_N12="70":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11     ","S" ,"S",orig_N11)
            NFE_GravaCampo("CST_N12      ","S" ,"S",CST_N12)
            NFE_GravaCampo("modBC_N13    ","S" ,"S",modBC_N13)
            NFE_GravaCampo("pRedBC_N14  ","N2","S",pRedBC_N14)
            NFE_GravaCampo("vBC_N15      ","$" ,"S",vBC_N15)                     
            NFE_GravaCampo("pICMS_N16    ","N2","S",pICMS_N16)
            NFE_GravaCampo("vICMS_N17    ","$" ,"S",vICMS_N17)
            NFE_GravaCampo("modBCST_N18  ","S" ,"S",modBCST_N18)
            NFE_GravaCampo("pMVAST_N19   ","N2","N",pMVAST_N19)
						NFE_GravaCampo("pRedBCST_N20 ","N2","N",pRedBCST_N20)
						NFE_GravaCampo("vBCST_N21    ","$" ,"S",vBCST_N21)
            NFE_GravaCampo("pICMSST_N22  ","N2","S",pICMSST_N22)
            NFE_GravaCampo("vICMSST_N23  ","$" ,"S",vICMSST_N23)
            NFE_GravaCampo("","","","")

      Case CST_N12="90":
            NFE_GravaCampo("","","","")
            NFE_GravaCampo("orig_N11    ","S" ,"S",orig_N11)
            NFE_GravaCampo("CST_N12     ","S" ,"S",CST_N12)
            NFE_GravaCampo("modBC_N13   ","S" ,"S",modBC_N13)
            NFE_GravaCampo("pRedBC_N14  ","N2","N",pRedBC_N14)
            NFE_GravaCampo("vBC_N15     ","$" ,"S",vBC_N15)
            NFE_GravaCampo("pICMS_N16   ","N2","S",pICMS_N16)
            NFE_GravaCampo("vICMS_N17   ","$" ,"S",vICMS_N17)
            if vICMSST_N23>0
               then 
                    NFE_GravaCampo("modBCST_N18  ","S" ,"S",modBCST_N18)
                    NFE_GravaCampo("pMVAST_N19   ","N2","N",pMVAST_N19)
                    NFE_GravaCampo("pRedBCST_N20 ","N2","N",pRedBCST_N20)
                    NFE_GravaCampo("vBCST_N21    ","$" ,"S",vBCST_N21)
                    NFE_GravaCampo("pICMSST_N22  ","N2","S",pICMSST_N22)
                    NFE_GravaCampo("vICMSST_N23  ","$" ,"S",vICMSST_N23)
            endif   
            NFE_GravaCampo("","","","")
    EndSwitch
EndSwitch

EndProc

;*******************************************************************************
;* Grava PIS/COFINS do Item                                                     *
;*******************************************************************************
Proc Grava_PIS_COFINS()       
Private CST_Q06, vBC_Q07, 
        CST_S06, vBC_S07

;--- PIS -----------------------------------------------------------------------
CST_Q06 =regfi["PIS_CST"]
vBC_Q07 =regfi["PIS_BC" ]
Switch
  Case IsBlank(CST_Q06): CST_Q06="99"
EndSwitch

NFE_GravaCampo("","","","")
NFE_GravaCampo("CST_Q06      ","S" ,"S",CST_Q06)
Switch 
 Case (vBC_Q07>0 Or regfi["PIS_Valor"]>0): 
   NFE_GravaCampo("vBC_Q07      ","$" ,"S",vBC_Q07)
   NFE_GravaCampo("pPIS_Q08     ","N2","S",regfi["PIS_Aliquota"])
   NFE_GravaCampo("vPIS_Q09     ","$" ,"S",regfi["PIS_Valor"])
 Case (CST_Q06="99" Or CST_Q06="71"): 
   If regfi["PIS_Aliquota"]<=0 And regfi["PIS_Valor"]<=0
      Then vBC_Q07=0
   EndIf

   NFE_GravaCampo("vBC_Q07      ","$" ,"S",vBC_Q07)
   NFE_GravaCampo("pPIS_Q08     ","N2","S",regfi["PIS_Aliquota"])
   NFE_GravaCampo("vPIS_Q09     ","$" ,"S",regfi["PIS_Valor"])
   NFE_GravaCampo("qBCProd_Q10  ","N4","N",0)
   NFE_GravaCampo("vAliqProd_Q11","$" ,"N",0)
EndSwitch

;--- COFINS --------------------------------------------------------------------
CST_S06 =regfi["COFINS_CST"]
vBC_S07 =regfi["COFINS_BC" ]
Switch
  Case IsBlank(CST_S06): CST_S06="99"
EndSwitch

NFE_GravaCampo("","","","")
NFE_GravaCampo("CST_S06      ","S" ,"S",CST_S06)
Switch 
 Case (vBC_S07>0 Or regfi["COFINS_Valor"]>0): 
   NFE_GravaCampo("vBC_S07         ","$" ,"S",vBC_S07)
   NFE_GravaCampo("pCOFINS_S08     ","N2","S",regfi["COFINS_Aliquota"])
   NFE_GravaCampo("vCOFINS_S11     ","$" ,"S",regfi["COFINS_Valor"])
 Case (CST_S06="99" Or CST_S06="71"): 
   If regfi["COFINS_Aliquota"]<=0 And regfi["COFINS_Valor"]<=0
      Then vBC_S07=0
   EndIf

   NFE_GravaCampo("vBC_S07         ","$" ,"S",vBC_S07)
   NFE_GravaCampo("pCOFINS_S08     ","N2","S",regfi["COFINS_Aliquota"])
   NFE_GravaCampo("qBCProd_S09     ","N4","N",0)
   NFE_GravaCampo("vAliqProd_S10   ","$" ,"N",0)
   NFE_GravaCampo("vCOFINS_S11     ","$" ,"S",regfi["COFINS_Valor"])
EndSwitch

Endproc

;*******************************************************************************
;* Grava dados do Produto/Servico                                              *
;*******************************************************************************
Proc Grava_Item()
private xProd_I04, cEAN_I03,
        descrcompl, descrcomposicao, descrsimbologia, descrsimbologia_impressao, descrrendimento, codforn, referencia, 
        CEST_I05c,infAdProd_V01          

descrcompl      =regitens["Descricao Complementar"]    
codforn         =regitens["Codigo Fornecedor"] 
referencia      =regitens["Referencia"]
descrsimbologia =""
If regitens["Descricao da Simbologia"]<>""
   Then 
        descrsimbologia ="Simbol: "+regitens["Descricao da Simbologia"]    
        If regitens["Pais"]<>""
           Then descrsimbologia=descrsimbologia+" - "+regitens["Pais"]
        EndIf
EndIf

descrcomposicao           = ""
descrrendimento           = ""
descrsimbologia_impressao = ""
GetRecord "\\Sistemas\\Estoque\\Iten_Tec" regfi["Codigo do Item"] To regiten_tec 
If RetVal
   Then descrcomposicao           = regiten_tec["Composicao"]
        descrrendimento           = regiten_tec["Rendimento"]
        descrsimbologia_impressao = regiten_tec["Simbologia_Impressao"]
        
       ;Quando a SIMBOLOGIA est  sem preenchimento no cadastro de itens 
        If IsBlank(Rtrim(descrsimbologia)) And Not IsBlank(Rtrim(descrsimbologia_impressao))
           Then descrsimbologia ="Simbol: "+descrsimbologia_impressao    
                If regitens["Pais"]<>""
                   Then descrsimbologia=descrsimbologia+" - "+regitens["Pais"]
                EndIf
        EndIf         
EndIf

switch
  case regfi["Tipo do Item"]="C" : TotalDescontoServico   =TotalDescontoServico   +regfi["Valor Desconto Item"]
  otherwise                      : TotalDescontoMercadoria=TotalDescontoMercadoria+regfi["Valor Desconto Item"]
endswitch

ContItem=ContItem+1
NFE_GravaCampo("","","","")
NFE_GravaCampo("","","","INCLUIRITEM")
NFE_GravaCampo("","","","")

NFE_GravaCampo("nItem_H02   ","I" ,"S",ContItem)
NFE_GravaCampo("cProd_I02   ","S" ,"S",regfi["Codigo do Item"])

Switch
  Case regitens["Tipo Codigo_Barras"]="A-EAN13" or
       regitens["Tipo Codigo_Barras"]="B-EAN8"  or
       regitens["Tipo Codigo_Barras"]="F-EAN14" : cEAN_I03=regitens["Codigo de Barras"]

  OtherWise                                     : 
   cEAN_I03="SEM GTIN"

EndSwitch
NFE_GravaCampo("cEAN_I03    ","S" ,"S",cEAN_I03)

If AmbienteNFe="2" ;Homologa‡Æo
   then xProd_I04="NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"
   else xProd_I04=regfi["Descricao do Item"]
endif
   
NFE_GravaCampo("xProd_I04     ","S" ,"S",xProd_I04)
NFE_GravaCampo("NCM_I05       ","S" ,"N",regfi["NCM"])
CEST_I05c=rtrim(regiten_com["CEST"])
if isblank(CEST_I05c)
   then CEST_I05c="0000000"
endif   
NFE_GravaCampo("CEST_I05c     ","S" ,"S",CEST_I05c)

if regitens["indEscala"]="N"
 then 
      NFE_GravaCampo("indEscala_I05d","S" ,"S",regitens["indEscala"])
      NFE_GravaCampo("CNPJFab_I05e  ","SN","S",regitens["CNPJFab"  ])
 else 
      NFE_GravaCampo("indEscala_I05d","S" ,"S","S")
      NFE_GravaCampo("CNPJFab_I05e  ","S" ,"S","")
endif
NFE_GravaCampo("cBenef_I05f   ","S" ,"S",regitens["cBenef"   ])

NFE_GravaCampo("EXTIPI_I06    ","S" ,"N",regiten_com["EX_TIPI"])
NFE_GravaCampo("CFOP_I08      ","S" ,"S",regfi["CFO"])
NFE_GravaCampo("uCom_I09      ","S" ,"S",regfi["Unidade Fiscal"])

NFE_GravaCampo("qCom_I10      ","N4","S",regfi["Quantidade"     ])
NFE_GravaCampo("vUnCom_I10a   ","$6","S",regfi["Preco Unitario" ])
NFE_GravaCampo("vProd_I11     ","$" ,"S",regfi["Preco Total"    ]+regfi["Valor Desconto Item"]) ; somando desconto do item, nfe informa valor bruto e depois descontos
NFE_GravaCampo("cEANTrib_I12  ","S" ,"S",cEAN_I03)
NFE_GravaCampo("uTrib_I13     ","S" ,"S",regfi["Unidade Fiscal" ])
NFE_GravaCampo("qTrib_I14     ","N4","S",regfi["Quantidade"     ])
NFE_GravaCampo("vUnTrib_I14a  ","$6","S",regfi["Preco Unitario" ])

If regfi["Tipo do Item"]<>"C"   ; Item diferente de Servi‡o
   Then NFE_GravaCampo("vFrete_I15  ","$2","N",regfi["Valor Frete Total"  ])
        NFE_GravaCampo("vSeg_I16    ","$2","N",regfi["Valor Seguro Total" ])
        NFE_GravaCampo("vOutro_I17a" ,"$2","N",regfi["Valor OutDesp Total"])
EndIf   
NFE_GravaCampo("vDesc_I17   ","$2","N",regfi["Valor Desconto Total"]+regfi["Valor Desconto Item"])

NFE_GravaCampo("indTot_I17b   ","I","S",1)

;--- ICMS/ST -------------------------------------------------------------------
If regfi["Tipo do Item"]<>"C"   ; Item diferente de Servi‡o
   Then Grava_ICMS_ST()
        
EndIf

;--- PIS/COFINS ----------------------------------------------------------------
if TPEMPR="DEBITO/CREDITO" 
  Then Grava_PIS_COFINS()
endif  

;--- ISSQN ---------------------------------------------------------------------
If regfi["Tipo do Item"]="C"   ; Item de Servi‡o
   Then Grava_ISSQN()
EndIf

If regiten_com["FCI"]<>""
   Then NFE_GravaCampo("","","","")
        NFE_GravaCampo("nFCI_I70    ","S" ,"N",regiten_com["FCI"])
EndIf

infAdProd_V01=regfi["Informacoes_Adicionais"]   

NFE_GravarCampoMemo("infAdProd_V01",infAdProd_V01,100)

NFE_GravaCampo("vTotTrib_M02   ","$","N",regfi["Valor TotTributos"])

NFE_GravaCampo("","","","")
NFE_GravaCampo("","","","SALVARITEM")

Return True
EndProc

;*******************************************************************************
;* Gera Arquivo NF-e TecnoSpeed                                                *
;*******************************************************************************
Proc GeraNFE()
Private i, vrfatura, xNome_E04

;--- Inicio --------------------------------------------------------------------
If PARAM_VISUALIZAR_DANFE Then NFE_GravaCampo("PREVERDANFE","S","S","1")  EndIf
NFE_GravaCampo("","","","FORMATO=TX2")
NFE_GravaCampo("NUMLOTE","S","S","0")
NFE_GravaCampo("","","","")

;--- Identificacao -------------------------------------------------------------

NFE_GravaCampo("","","","INCLUIR")
NFE_GravaCampo("versao_A02 ","S" ,"S",versao_A02)
NFE_GravaCampo("cUF_B02    ","I" ,"S",regcidadesemitente["Codigo_UF"])
NFE_GravaCampo("cNF_B03    ","SI","S",cNF_B03)

NFE_GravaCampo("natOp_B04   ","S"  ,"S",regdestin["Descricao da Destinacao"])
NFE_GravaCampo("mod_B06     ","S"  ,"S",mod_B06)
NFE_GravaCampo("serie_B07   ","S"  ,"S",serie_B07)
NFE_GravaCampo("nNF_B08     ","SI" ,"S",nNF_B08)
NFE_GravaCampo("dhEmi_B09   ","DH" ,"S",regfaturac["Data de Emissao"])

Switch
  Case regfaturac["Tipo Movimento Estoque"]="S" : NFE_GravaCampo("tpNF_B11   ","I" ,"S",1)
EndSwitch

Switch
    Case substr(regfaturac["CFO"],1,1) = "5":       
         idDest_B11a = 1
         
EndSwitch    
NFE_GravaCampo("idDest_B11a  ","I" ,"S",idDest_B11a)
NFE_GravaCampo("cMunFG_B12 ","I" ,"S",regcidadesemitente["Codigo_Cidade"])

NFE_GravaCampo("","","","")
NFE_GravaCampo("tpImp_B21  ","S" ,"S","4") ; DANFE 
NFE_GravaCampo("tpEmis_B22 ","S" ,"S",tpEmis_B22)
NFE_GravaCampo("cDV_B23    ","I" ,"S",cDV_B23)
NFE_GravaCampo("tpAmb_B24  ","S" ,"S",AmbienteNFe)
NFE_GravaCampo("finNFe_B25 ","S" ,"S",regdestin["finNFe" ])
NFE_GravaCampo("indFinal_B25a","I" ,"S",1)
NFE_GravaCampo("indPres_B25b","S" ,"S",regfaturac["IndPres"])
NFE_GravaCampo("procEmi_B26","S" ,"S","0")
NFE_GravaCampo("verProc_B27","S" ,"S",verProc_B27)

Switch
  Case ModoNFe<>"Normal":

    s=AlinhM(StrVal(Year(VSDGDTINI)),4)+"-"+AlinhM(StrVal(Month(VSDGDTINI)),2)+"-"+AlinhM(StrVal(Day(VSDGDTINI)),2)
    s=s+"T"+VSDGHRINI+":00"+Fuso_Horario 

    NFE_GravaCampo("dhCont_B28","S" ,"S",s)
    NFE_GravaCampo("xJust_B29" ,"S" ,"S",VSDGJUST)

    Release Vars VSDGDTINI, VSDGHRINI, VSDGJUST, s

EndSwitch

;--- Emitente ------------------------------------------------------------------
NFE_GravaCampo("","","","")
NFE_GravaCampo("CNPJ_C02   ","SN","S",regemitente["CGC"])
NFE_GravaCampo("xNome_C03  ","S" ,"S",regemitente["Razao Social"])
NFE_GravaCampo("xFant_C04  ","S" ,"S",regemitente["Nome Fantasia EmitDest"])

NFE_PegaEndereco(regemitente["Endereco"])
NFE_GravaCampo("xLgr_C06   ","S" ,"S",End_Logradouro)
NFE_GravaCampo("nro_C07    ","S" ,"S",End_Numero)
NFE_GravaCampo("xCpl_C08   ","S" ,"S",End_Complemento)

NFE_GravaCampo("xBairro_C09","S" ,"S",regemitente["Bairro"])
NFE_GravaCampo("cMun_C10   ","I" ,"S",regcidadesemitente["Codigo_Cidade"])
NFE_GravaCampo("xMun_C11   ","S" ,"S",regemitente["Cidade"]) 
NFE_GravaCampo("UF_C12     ","S" ,"S",regemitente["UF"])
NFE_GravaCampo("CEP_C13    ","SN","S",regemitente["CEP"])
NFE_GravaCampo("cPais_C14  ","I" ,"S",regcidadesemitente["Codigo_Pais"  ])
NFE_GravaCampo("xPais_C15  ","S" ,"S",regcidadesemitente["Pais"         ])
NFE_GravaCampo("fone_C16   ","SN","S",regemitente["Telefone"])
NFE_GravaCampo("IE_C17     ","SN","S",regemitente["IE"])
NFE_GravaCampo("IEST_C18   ","SN","S",regemitente["IE_ST"])

If regfaturac["Valor Servico"]>0
   Then 
        If IsBlank(regemitente["IM"]) Or IsBlank(regemitente["CNAE"])
           Then Mensagem("NFC-e com servi‡o, IM e CNAE nÆo cadastrado empresa: "+regfaturac["Codigo da Empresa"])
                Return False
        EndIf    

        NFE_GravaCampo("IM_C19     ","SN","S",regemitente["IM"  ])
        NFE_GravaCampo("CNAE_C20   ","SN","S",regemitente["CNAE"])
EndIf        

Switch
  Case IsRegimeSimplesNacional(TPEMPR)     : NFE_GravaCampo("CRT_C21    ","I","S",1)
  Case IsRegimeSimplesNacionalESRB(TPEMPR) : NFE_GravaCampo("CRT_C21    ","I","S",2)
  OtherWise                                : NFE_GravaCampo("CRT_C21    ","I","S",3)
EndSwitch

;--- Destinatario --------------------------------------------------------------
xMun_E11          =regfaturac["Cidade" ]
UF_E12            =regfaturac["UF"     ]
CEP_E13           =regfaturac["CEP"    ]
IM_E18a           =regdestinatario["IM"]
idEstrangeiro_E03a=regdestinatario["RG"]

EMAILDESTINATARIO =regdestinatario["Endereco_Eletronico"]
GetRecord "\\Sistemas\\Cadastro\\Destmail" regfaturac["Codigo"],"N" To regdestmail
If RetVal
   then if not isblank(regdestmail["Email"])
           then EMAILDESTINATARIO=regdestmail["Email"]
                PosI=Search(";",EMAILDESTINATARIO)
                If PosI>0
                   Then While PosI>0
                          EMAILDESTINATARIO = SubStr(EMAILDESTINATARIO,1,PosI-1)+","+SubStr(EMAILDESTINATARIO,PosI+1,Len(EMAILDESTINATARIO))
                          PosI=Search(";",EMAILDESTINATARIO)
                          If PosI = 0 Then QuitLoop EndIf
                        EndWhile 
                EndIf
                Release Vars PosI
        endif
endif           

GetRecord "\\Sistemas\\Cadastro\\Cidades" XMun_E11,UF_E12 To regcidadesDestinatario
If not RetVal
   Then Mensagem("Erro cadastro cidades: "+XMun_E11+"/"+UF_E12+" [Cidades] !")
        Return False
Endif   
cMun_E10   =regcidadesDestinatario["Codigo_Cidade"]

If regfaturac["Tipo Pessoa"]="JURIDICA"
   Then CNPJ_E02=regfaturac["CGC"]
        CPF_E03 ="" 
   Else CNPJ_E02="null"
        CPF_E03 =regfaturac["CGC"]
EndIf

NFE_GravaCampo("","","","")

If AmbienteNFe="2" ;Homologa‡Æo
   Then xNome_E04="NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"
   else xNome_E04=regfaturac["Razao Social"]
EndIf

NFE_GravaCampo("indIEDest_E16a    ","SN","S","9")

If regfaturac["Razao Social"]<>"DIVERSOS" and regfaturac["Razao Social"]<>"CONSUMIDOR FINAL" and regfaturac["Razao Social"]<>""
   then
        NFE_GravaCampo("CNPJ_E02          ","SN","S",CNPJ_E02)
        NFE_GravaCampo("CPF_E03           ","SN","S",CPF_E03)
   
        NFE_GravaCampo("xNome_E04         ","S" ,"S",xNome_E04)
        NFE_PegaEndereco(regfaturac["Endereco"])
        NFE_GravaCampo("xLgr_E06          ","S" ,"S",End_Logradouro)
        NFE_GravaCampo("nro_E07           ","S" ,"S",End_Numero)
        NFE_GravaCampo("xCpl_E08          ","S" ,"S",End_Complemento)
        
        NFE_GravaCampo("xBairro_E09       ","S" ,"S",regfaturac["Bairro"])
        NFE_GravaCampo("cMun_E10          ","I" ,"S",cMun_E10)
        NFE_GravaCampo("xMun_E11          ","S" ,"S",xMun_E11)
        NFE_GravaCampo("UF_E12            ","S" ,"S",UF_E12)
        NFE_GravaCampo("CEP_E13           ","SN","S",CEP_E13)
        NFE_GravaCampo("cPais_E14         ","S" ,"S",regcidadesDestinatario["Codigo_Pais"  ])
        NFE_GravaCampo("xPais_E15         ","S" ,"S",regcidadesDestinatario["Pais"         ])
        NFE_GravaCampo("fone_E16          ","SN","S",regfaturac["Telefone"])
endif

;--- Local de Entrega ----------------------------------------------------------
getrecord "\\sistemas\\vendas\\faturacc" regfaturac["Numero da OF"] to regfaturacc
if retval
   then  

        ;-- Entrega ------------------------------------------------------------
        If regfaturacc["Endereco de Entrega"]<>""                  And 
           regfaturacc["Endereco de Entrega"]<>"O MESMO"           And 
           regfaturacc["Endereco de Entrega"]<>regfaturac["Endereco"] 
           Then 
                GetRecord "\\Sistemas\\Cadastro\\Cidades" regfaturacc["Cidade de Entrega"],regfaturacc["UF de Entrega"] To regcidadesentrega    
                If not RetVal
                   Then Mensagem("Erro cadastro cidades: "+regfaturacc["Cidade de Entrega"]+"/"+regfaturacc["UF de Entrega"]+" [Cidades] !")
                        Return False
                Endif   
        
                NFE_GravaCampo("","","","")

                if len(regfaturacc["CGC Recebedor"])=18
                   Then 
                        CNPJ_G02=regfaturacc["CGC Recebedor"]
                        CPF_G02a=""
                   Else 
                        CNPJ_G02=""
                        CPF_G02a=regfaturacc["CGC Recebedor"]
                endif   

                cMun_G07=regcidadesentrega["Codigo_Cidade"]
                xMun_G08=regfaturacc["Cidade de Entrega"  ]
                CEP_G10 =regfaturacc["CEP de Entrega"     ]
                IE_G15  =regfaturacc["IE Recebedor"       ]

                NFE_GravaCampo("CNPJ_G02   ","SN","S",CNPJ_G02)
                NFE_GravaCampo("CPF_G02a   ","SN","S",CPF_G02a)
                NFE_PegaEndereco(regfaturacc["Endereco de Entrega"])
                NFE_GravaCampo("xLgr_G03   ","S" ,"S",End_Logradouro)
                NFE_GravaCampo("nro_G04    ","S" ,"S",End_Numero)
                NFE_GravaCampo("xCpl_G05   ","S" ,"S",End_Complemento)
                NFE_GravaCampo("xBairro_G06","S" ,"S",regfaturacc["Bairro de Entrega"  ])
                NFE_GravaCampo("cMun_G07   ","I" ,"S",cMun_G07)
                NFE_GravaCampo("xMun_G08   ","S" ,"S",xMun_G08)
                NFE_GravaCampo("UF_G09     ","S" ,"S",regfaturacc["UF de Entrega"      ])

                NFE_GravaCampo("XNome_G02b ","S" ,"N",regfaturacc["Razao Social Recebedor"])
                NFE_GravaCampo("CEP_G10    ","SN","N",CEP_G10)
                NFE_GravaCampo("cPais_G11  ","I" ,"N",regcidadesentrega["Codigo_Pais"  ])
                NFE_GravaCampo("xPais_G12  ","S" ,"N",regcidadesentrega["Pais"         ])
                NFE_GravaCampo("fone_G13   ","SN","N",regfaturacc["Telefone Recebedor"])
                NFE_GravaCampo("email_G14  ","S" ,"N",regfaturacc["Email Recebedor"])
                if IE_G15 <>"ISENTO" and IE_G15<>"NAOCONTRIBUINTE" 
                   then NFE_GravaCampo("IE_G15     ","SN","N",IE_G15)
                endif
                
                NFE_GravaCampo("","","","")
                Release Vars CNPJ_G02,CPF_G02a,cMun_G07,xMun_G08,CEP_G10,IE_G15
        endif   
EndIf  

;--- autorizados XML -----------------------------------------------------------
Moveto "\\Sistemas\\Cadastro\\EmpAut"
Moveto [Codigo]
Locate regfaturac["Codigo da Empresa"]
If RetVal
  Then ContAutxml=1
       While [Codigo]=regfaturac["Codigo da Empresa"] And ContAutxml<=10
         CNPJ_GA02 = ""
         CPF_GA03  = ""
         NFE_GravaCampo("","","","")
         NFE_GravaCampo("","","","INCLUIRPARTE=AUTXML")
         If Len([CNPJ_CPF])=18
           then CNPJ_GA02 = [CNPJ_CPF]
           else CPF_GA03  = [CNPJ_CPF]
         EndIf
         NFE_GravaCampo("CNPJ_GA02","SN","S",CNPJ_GA02)    
         NFE_GravaCampo("CPF_GA03","SN","S",CPF_GA03 )
         NFE_GravaCampo("","","","SALVARPARTE=AUTXML")
         NFE_GravaCampo("","","","")
         
         ContAutxml=ContAutxml+1
         Skip
         If EOT() Then QuitLoop EndIf
       EndWhile
EndIf
     

;--- Itens ---------------------------------------------------------------------
TotalDescontoMercadoria=0
TotalDescontoServico   =0

ContItem=0

Moveto "FaturaI"

Moveto [Numero da OF]
Locate regfaturac["Numero da OF"]
While [Numero da OF]=regfaturac["Numero da OF"]

  if [Situacao_Item]<>"C"
     then 
        	CopyToArray regfi
        
          GetRecord "\\Sistemas\\Estoque\\Itens" regfi["Codigo do Item"] To regitens         
          If Not RetVal
             Then msg="Item nÆo Cadastrado !//"
                  msg=msg+regfi["Codigo do Item"]+"/"+regfi["Descricao do Item"]
                  Mensagem(msg)
                  Return False
          EndIf
          GetRecord "\\Sistemas\\Estoque\\Iten_Com" regfi["Codigo do Item"] To regiten_com  
          If Not RetVal
             Then msg="Item sem complemto !//"
                  msg=msg+regfi["Codigo do Item"]+"/"+regfi["Descricao do Item"]
                  Mensagem(msg)
                  Return False
          EndIf
        
          Grava_Item()
  endif
  
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

;--- Totalizador ---------------------------------------------------------------
Moveto "FaturaC"

NFE_GravaCampo("","","","")
NFE_GravaCampo("vBC_W03           ","$" ,"S",regfaturac["Valor BCICMS"])
NFE_GravaCampo("vICMS_W04         ","$" ,"S",regfaturac["Valor ICMS"  ])
NFE_GravaCampo("vICMSDeson_W04a   ","$" ,"S",regfaturac["Valor Desconto NTributado"])  

NFE_GravaCampo("vFCP_W04h         ","$" ,"S",regfaturac["Valor FCP"         ])
NFE_GravaCampo("vFCPUFDest_W04c   ","$" ,"S",regfaturac["Valor FCP_UFDest"  ])
NFE_GravaCampo("vICMSUFDest_W04e  ","$" ,"S",regfaturac["Valor ICMS_UFDest" ])  
NFE_GravaCampo("vICMSUFRemet_W04g ","$" ,"S",regfaturac["Valor ICMS_UFRemet"])  

NFE_GravaCampo("vBCST_W05         ","$" ,"S",regfaturac["Valor BCSubstituicao ICMS"])
NFE_GravaCampo("vST_W06           ","$" ,"S",regfaturac["Valor Substituicao ICMS"  ])

NFE_GravaCampo("vFCPST_W06a       ","$" ,"S",regfaturac["Valor FCP_Ret_ST"    ])
NFE_GravaCampo("vFCPSTRet_W06b    ","$" ,"S",regfaturac["Valor FCP_Ret_Ant_ST"])

NFE_GravaCampo("vProd_W07         ","$" ,"S",regfaturac["Valor Mercadoria"]+TotalDescontoMercadoria)

If regfaturac["Frete Incluso na Nota"]="+"
   Then NFE_GravaCampo("vFrete_W08","$" ,"S",regfaturac["Valor do Frete"])
   else NFE_GravaCampo("vFrete_W08","$" ,"S",0)
EndIf   

NFE_GravaCampo("vSeg_W09          ","$" ,"S",regfaturac["Valor do Seguro"])
NFE_GravaCampo("vDesc_W10         ","$" ,"S",regfaturac["Valor Desconto" ]+regfaturac["Valor Desconto Servico"]+TotalDescontoMercadoria+TotalDescontoServico)
NFE_GravaCampo("vII_W11           ","$" ,"S",regfaturac["Valor II" ])
NFE_GravaCampo("vIPI_W12          ","$" ,"S",regfaturac["Valor IPI"])
NFE_GravaCampo("vIPIDevol_W12a    ","$" ,"S",regfaturac["Valor IPI Devolvido"])

NFE_GravaCampo("vPIS_W13          ","$" ,"S",regfaturac["Valor PIS"   ])
NFE_GravaCampo("vCOFINS_W14       ","$" ,"S",regfaturac["Valor COFINS"])
NFE_GravaCampo("vOutro_W15        ","$" ,"S",regfaturac["Valor Despesas Acessorias"])
NFE_GravaCampo("vNF_W16           ","$" ,"S",regfaturac["Valor Nota Fiscal"])
NFE_GravaCampo("vTotTrib_W16a     ","$" ,"S",regfaturac["Valor TotTributos"])

If regfaturac["Valor Servico"]>0
   Then 
        NFE_GravaCampo("vServ_W18    ","$" ,"S",regfaturac["Valor Servico"  ]+TotalDescontoServico)
        NFE_GravaCampo("vBC_W19      ","$" ,"N",regfaturac["Valor BCISSQN"  ])
        NFE_GravaCampo("vISS_W20     ","$" ,"N",regfaturac["Valor ISSQN"    ])
        NFE_GravaCampo("vPIS_W21     ","$" ,"N",0)
        NFE_GravaCampo("vCOFINS_W22  ","$" ,"N",0)
        NFE_GravaCampo("dCompet_W22a ","D" ,"S",regfaturac["Data de Emissao"])     
        NFE_GravaCampo("vDeducao_W22b","$" ,"N",regfaturac["Valor Desconto Servico"  ]+TotalDescontoServico)
        NFE_GravaCampo("cRegTrib_w22g","S" ,"S",1)
EndIf    

;--- Transportadora ------------------------------------------------------------
NFE_GravaCampo("","","","")
Switch
  Case regfaturac["Frete por Conta"]="1" : NFE_GravaCampo("modFrete_X02","N" ,"S","0") ; Remetente
  Case regfaturac["Frete por Conta"]="2" : NFE_GravaCampo("modFrete_X02","N" ,"S","1") ; Destinatario              
  Case regfaturac["Frete por Conta"]="3" : NFE_GravaCampo("modFrete_X02","N" ,"S","2") ; Terceiros
  Case regfaturac["Frete por Conta"]="4" : NFE_GravaCampo("modFrete_X02","N" ,"S","3") ; Pr¢prio/Remetente
  Case regfaturac["Frete por Conta"]="5" : NFE_GravaCampo("modFrete_X02","N" ,"S","4") ; Pr¢prio/Destinatario
  otherwise                              : NFE_GravaCampo("modFrete_X02","N" ,"S","9") ; Sem Frete
EndSwitch

if regfaturac["IndPres"]="4" then
  Switch
    Case Len(regfaturac["CGC Transport"])=18 : NFE_GravaCampo("CNPJ_X04 ","SN","S",regfaturac["CGC Transport"]) 
    OtherWise                                : NFE_GravaCampo("CPF_X05  ","SN","S",regfaturac["CGC Transport"])
  EndSwitch
  NFE_GravaCampo("xNome_X06   ","S" ,"S",regfaturac["Razao Social Transport"])
  If regfaturac["IE Transport"] = "NAOCONTRIBUINTE" 
     Then NFE_GravaCampo("IE_X07      ","S" ,"S","ISENTO")
     Else NFE_GravaCampo("IE_X07      ","SN","S",regfaturac["IE Transport"])
  EndIf
  NFE_GravaCampo("xEnder_X08  ","S" ,"S",regfaturac["Endereco Transport"])
  NFE_GravaCampo("xMun_X09    ","S" ,"S",regfaturac["Cidade Transport"  ])
  NFE_GravaCampo("UF_X10      ","S" ,"S",regfaturac["UF Transport"      ])
  
  ;--- Veiculo -------------------------------------------------------------------
  if idDest_B11a=1 and regcidadesDestinatario["Codigo_Cidade"]=regcidadesemitente["Codigo_Cidade"] 
     then
          NFE_GravaCampo("","","","")
          NFE_GravaCampo("placa_X19   ","SN","S",regfaturac["Placa do Veiculo"])
          NFE_GravaCampo("uf_X20      ","S" ,"S",regfaturac["UF Veiculo"      ])
          NFE_GravaCampo("rntc_X21    ","S" ,"N",regfaturac["RNTC Veiculo"    ])
  endif

  ;--- Volumes -------------------------------------------------------------------
  If regfaturac["Numero de Volumes"]>0 Or regfaturac["Peso Liquido"]>0 Or regfaturac["Peso Bruto"]>0
     Then
          Switch
            Case regfaturac["Numero de Volumes"]<=0 : 
              Mensagem("Peso dos volumes informado, Qtde de volumes ‚ obrigat¢rio !") 
              Return False
  
          EndSwitch
          
          NFE_GravaCampo("","","","")
          NFE_GravaCampo("","","","INCLUIRPARTE=VOL")
          NFE_GravaCampo("","","","")
          NFE_GravaCampo("qVol_X27 ","I" ,"S",regfaturac["Numero de Volumes" ])
          NFE_GravaCampo("esp_X28  ","S" ,"S",regfaturac["Especie de Volumes"])
          NFE_GravaCampo("marca_X29","S" ,"S",regfaturac["Marca dos Volumes"])
          NFE_GravaCampo("nVol_X30 ","I" ,"S",regfaturac["Numero Ordem de Volumes"])
          NFE_GravaCampo("pesoL_X31","N3","S",regfaturac["Peso Liquido"])
          NFE_GravaCampo("pesoB_X32","N3","S",regfaturac["Peso Bruto"  ])
          NFE_GravaCampo("","","","")
          NFE_GravaCampo("","","","SALVARPARTE=VOL")
          
  EndIf
endif

NFE_GravaCampo("","","","")

;--- Cobranca ------------------------------------------------------------------
;--- Pagamento -----------------------------------------------------------------

vrfatura     =0
DP_NPARC     =0
RelDuplicatas=""

switch
  case regfaturac["Tipo de Pagamento"]="O":
    NFE_GravaCampo("","","","INCLUIRPARTE=YA")
    NFE_GravaCampo("","","","")

    NFE_GravaCampo("tPag_YA02      ","S" ,"S","90")
    NFE_GravaCampo("vPag_YA03      ","$" ,"S",0)

    NFE_GravaCampo("","","","SALVARPARTE=YA")
    NFE_GravaCampo("","","","")
        
  case regfaturac["Tipo de Pagamento" ]="P":
             
    Moveto "FaturaV"
    Moveto [Numero da OF]
    Locate regfaturac["Numero da OF"]
    If RetVal
       Then While [Numero da OF]=regfaturac["Numero da OF"]

              vrfatura=vrfatura+[Valor]                           

              if [Data]>regfaturac["Data de Emissao"]
                 Then 
                      DP_NPARC=DP_NPARC+1     ;*** Contagem de desdobramentos ***

                      If [Data]<=regfaturac["Data de Emissao"]
                         Then MSG="Vencimento invalido !// //"
                              MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                              MSG=MSG+" inferior a data de emiss„o !// //Verificar !"
                              Mensagem(MSG)
                              Moveto "FaturaC"
                              Return False
                      EndIf
              EndIf
              
              Skip
              If EOT()
                 Then QuitLoop
              Endif
            EndWhile
    Endif

    If Search("VEND",regfaturac["Descricao da Destinacao"])>0
       Then
            If Format("W12.2",vrfatura)<>Format("W12.2",regfaturac["Valor Nota Fiscal"])
               Then 
                    Mensagem("O Valor Total dos Vencimentos a prazo,//difere do Valor da Nota Fiscal !// //Verificar !")
                    Moveto "FaturaC"
                    Return False
            Endif
    EndIf

endswitch

if regfaturac["Tipo de Pagamento" ]<>"O"
   then
        DynArray TabelaFormasPagto[]
        wcTabelaFormasPagto =0
        wc2TabelaFormasPagto=0

        vrfatura     =0
        
        Moveto "FaturaV"
        Moveto [Numero da OF]
        Locate regfaturac["Numero da OF"]
        If RetVal
           Then While [Numero da OF]=regfaturac["Numero da OF"]
                  nomeCartao   =[Nome do Cartao]
                  numCartao    =[Numero do Cartao]
                  switch
                    case [Forma de Pagamento]="DN" : tPag_YA02  ="01"

                    case [Forma de Pagamento]="CH" : tPag_YA02  ="02"

                    case [Forma de Pagamento]="CP" : tPag_YA02  ="02"

                    case [Forma de Pagamento]="CT" or      
                         [Forma de Pagamento]="CL" : tPag_YA02  ="03"

                    case [Forma de Pagamento]="CD" : tPag_YA02  ="04"

                    case [Forma de Pagamento]="CO" or                    
                         [Forma de Pagamento]="DP" or                
                         [Forma de Pagamento]="NO" : tPag_YA02  ="99"
                    
                    case [Forma de Pagamento]="BO" : tPag_YA02  ="15"
                    
                    case [Forma de Pagamento]="TC" : tPag_YA02  ="99"
                                                     nomeCartao   =""
                                                     numCartao    ="" 

                    otherwise                      : tPag_YA02  ="99"
                    
                  endswitch          

                  NFE_MontarFormasPagtos(tPag_YA02,[Valor],nomeCartao,numCartao)
                  vrfatura=vrfatura+[Valor]

                  Moveto "FaturaV"
                  skip
                  If EOT()
                     Then QuitLoop
                  Endif
                EndWhile
        endif

        vTroco_YA09=blanknum()
        if regfaturac["Tipo de Pagamento" ]="V"
           then
                If Format("W12.2",vrfatura)>Format("W12.2",regfaturac["Valor Nota Fiscal"])
                   Then vTroco_YA09=vrfatura-regfaturac["Valor Nota Fiscal"]
                Endif
        endif         
        
        For wcTabelaFormasPagto From 1 To DynArraySize(TabelaFormasPagto)

          tPag_YA02         =                   substr(TabelaFormasPagto[wcTabelaFormasPagto],01,02)
          YANomeDoCartao    =             rtrim(substr(TabelaFormasPagto[wcTabelaFormasPagto],04,15))
          YAAutorizacao     =             rtrim(substr(TabelaFormasPagto[wcTabelaFormasPagto],20,30))
          YAValor           =      numval(ltrim(substr(TabelaFormasPagto[wcTabelaFormasPagto],51,10)))

          vPag_YA03      =YAValor
          tpIntegra_YA04a=""
          CNPJ_YA05       =""
          TBand_YA06     =""
          cAut_YA07      =YAAutorizacao             
          
          if tPag_YA02="03" or      
             tPag_YA02="04"
             then
                   GetRecord "\\Sistemas\\Vendas\\P_cartao" regfaturac["Codigo da Empresa"],YANomeDoCartao To regp_cartao  
                   If not RetVal 
                       Then Mensagem("Parƒmetros cartÆo: "+YANomeDoCartao+", nÆo cadastrado !")
                            Return False
                   EndIf
                   if isblank(regp_cartao["CodigoBandeiraOperadora"])
                      Then Mensagem("Parƒmetros cartÆo: "+YANomeDoCartao+", bandeira da operadora nÆo cadastrada !")
                           Return False
                   endif   
                   GetRecord "\\Sistemas\\Cadastro\\Destinat" regp_cartao["Codigo Destinat"] To regdestinatcartao 
                   If RetVal 
                       Then CNPJ_YA05=regdestinatcartao["CGC"]
                       Else Mensagem("Paramˆtros cartÆo: "+YANomeDoCartao+", pessoa : "+regp_cartao["Codigo Destinat"]+" nÆo cadastrada !")
                            Return False
                   EndIf
          endif
          

          switch
            case regfaturac["Tipo de Pagamento" ]="V" : indPag_YA01b="0"
            case regfaturac["Tipo de Pagamento" ]="P" : indPag_YA01b="1"
          endswitch
    
          switch
            case tPag_YA02="01": indPag_YA01b="0"
                  
            case tPag_YA02="02": indPag_YA01b="0"
                 
            case tPag_YA02="03": TBand_YA06     =regp_cartao["CodigoBandeiraOperadora"]
                                 tpIntegra_YA04a="2"
                                 cAut_YA07      =YAAutorizacao
                       
            case tPag_YA02="04": TBand_YA06     =regp_cartao["CodigoBandeiraOperadora"]
                                 tpIntegra_YA04a="2"
                                 cAut_YA07      =YAAutorizacao

          endswitch          

          NFE_GravaCampo("","","","INCLUIRPARTE=YA")
          NFE_GravaCampo("","","","")
          NFE_GravaCampo("indPag_YA01b   ","S" ,"S",indPag_YA01b)
          NFE_GravaCampo("tPag_YA02      ","S" ,"S",tPag_YA02)
          NFE_GravaCampo("vPag_YA03      ","$" ,"S",vPag_YA03)
          if tPag_YA02="03" or      
             tPag_YA02="04" 
             then
                  NFE_GravaCampo("tpIntegra_YA04a","S" ,"S",tpIntegra_YA04a)
                  NFE_GravaCampo("CNPJ_YA05      ","SN","S",CNPJ_YA05)
                  NFE_GravaCampo("TBand_YA06     ","S" ,"S",TBand_YA06)
                  NFE_GravaCampo("cAut_YA07      ","S" ,"S",cAut_YA07)
          endif
          NFE_GravaCampo("vTroco_YA09    ","$" ,"S",vTroco_YA09)
          NFE_GravaCampo("","","","")
          NFE_GravaCampo("","","","SALVARPARTE=YA")
          NFE_GravaCampo("","","","")

          vTroco_YA09=blanknum()

        endfor
        
        release vars indPag_YA01b,tPag_YA02,vPag_YA03,tpIntegra_YA04a,CNPJ_YA5,TBand_YA06,cAut_YA07,nDup_Y08,vTroco_YA09,
                     TabelaFormasPagto,TabelaFormasPagtoNew,wcTabelaFormasPagto,wc2TabelaFormasPagto,
                     YANomeDoCartao,YAAutorizacao,YAValor
                     
endif
Release Vars i 

;--- Observacoes ---------------------------------------------------------------
Moveto "FaturaC"

locentreg=""
getrecord "\\sistemas\\vendas\\faturacc" regfaturac["Numero da OF"] to regfaturacc
if retval
   then
        If regfaturacc["Endereco de Entrega"]<>""                     And 
           regfaturacc["Endereco de Entrega"]<>"O MESMO"              And 
           regfaturacc["Endereco de Entrega"]<>regfaturac["Endereco"]
           Then 
                locentreg=" [Local de Entrega, "
                locentreg=locentreg+"End: "   +regfaturacc["Endereco de Entrega"]+", "
                locentreg=locentreg+"Bairro: "+regfaturacc["Bairro de Entrega"  ]+", "
                locentreg=locentreg+"CEP: "   +regfaturacc["CEP de Entrega"     ]+", "
                locentreg=locentreg+"Cidade: "+regfaturacc["Cidade de Entrega"  ]+"/"+regfaturacc["UF de Entrega"]+"]"
        endif
endif

NFE_GravaCampo("","","","")
NFE_GravarCampoMemo("infCpl_Z03","_"+regfaturac["Observacao na Nota Fiscal"]+locentreg+RelDuplicatas,100)

;--- Outros --------------------------------------------------------------------
NFE_GravaCampo("","","","")
If AmbienteNFe="2" ;Homologa‡Æo
   then
        NFE_GravaCampo("EMAILDESTINATARIO","S" ,"S","")
        NFE_GravaCampo("EMAILCCO         ","S" ,"S","")
   else
        NFE_GravaCampo("EMAILDESTINATARIO","S" ,"S",EMAILDESTINATARIO)
        if not isblank(regfaturac["Codigo da Transportadora"])
           then NFE_GravaCampo("EMAILCCO         ","S" ,"S",regtranspor["Endereco_Eletronico Trans"])
        endif
endif
If Not IsBlank(ModeloReportRTM)
   Then NFE_GravaCampo("MODELORTM        ","S" ,"S",ModeloReportRTM)
EndIf   

if Dispositivo=3 and substr(Sys_Set_Porta,1,3)<>"LPT"
   then NFE_GravaCampo("","","","")
        NFE_GravaCampo("Impressora","S" ,"S",rtrim(Sys_Set_Porta))
endif   

;--- Fim -----------------------------------------------------------------------
NFE_GravaCampo("","","","")
NFE_GravaCampo("","","","SALVAR")

Close Printer

return True
EndProc

;*******************************************************************************
;* Rotina carrega dados tabela relacionadas                                    *
;*******************************************************************************
Proc GetTabelasPrincipais()

Moveto "FaturaC"
copytoarray regfaturac

GetRecord "\\Sistemas\\Cadastro\\Destinat" regfaturac["Codigo da Empresa"] To regemitente
If not RetVal
   Then Mensagem("Erro cadastro empresa: "+regfaturac["Codigo da Empresa"]+" [Destinat] !")
        Return False
Endif   

GetRecord "\\Sistemas\\Cadastro\\Cidades" regemitente["Cidade"],regemitente["UF"] To regcidadesemitente    
If not RetVal
   Then Mensagem("Erro cadastro cidades: "+regemitente["Cidade"]+"/"+regemitente["UF"]+" [Cidades] !")
        Return False
Endif   

GetRecord "\\Sistemas\\Vendas\\Destin" regfaturac["Codigo da Destinacao"] To regdestin 
If not RetVal
   Then Mensagem("Erro cadastro destina‡äes: "+regfaturac["Codigo da Destinacao"]+" [Destin] !")
        Return False
Endif   

GetRecord "\\Sistemas\\Cadastro\\Destinat" regfaturac["Codigo"] To regdestinatario
If Not RetVal
   Then Mensagem("Erro cadastro pessoa: "+regfaturac["Codigo"]+" [Destinat] !")
        Return False
Endif   

if not isblank(regfaturac["Codigo da Transportadora"])
   then
        GetRecord "\\Sistemas\\Vendas\\Transpor" regfaturac["Codigo da Transportadora"] To regtranspor
        If not RetVal
           Then Mensagem("Erro cadastro transportadora: "+regfaturac["Codigo da Transportadora"] +" [Transpor] !")
                Return False
        Endif  
endif 

return true
endProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(PARAM_VISUALIZAR_DANFE) Then PARAM_VISUALIZAR_DANFE=False EndIf

while NFE_CalcChaveAcesso("65") 

  If Not PARAM_VISUALIZAR_DANFE
     Then 
          Moveto "FaturaC"
          Switch
            Case ModoNFe="Normal"   : [Sistema Gerador]="n" 
            Case ModoNFe="SCAN"     : [Sistema Gerador]="s"
          EndSwitch
          UnLockRecord
      
          Play "FT_NOTA"
     Else UnLockRecord
  EndIf      

  Moveto "FaturaC"

  ModeloReportRTM=""

  If PARAM_VISUALIZAR_DANFE
     Then AGUARDE("Gerando Pre-visualiza‡Æo OF -> "+NOTAFISC)
     Else AGUARDE("Gerando NFC-e -> "+NOTAFISC)
  EndIf

  ARQTX2=PrivDir()+"nce.tx2"
  FileWrite ARQTX2 From ""

  NFEJA_AUTORIZADA=False
  
  If Not GeraNFE()
     Then 
          Mensagem("NFC-e nÆo foi concluida, verificar erros !")
          quitloop
  endif

  AGUARDE("Enviando arquivo ao Manager eDoc NFC-e -> "+NOTAFISC)
  
  FileWrite Privdir()+"managret.txt" From ""

  if isblank([FaturaC->Numero Nota Gerada]) and [FaturaC->Data de Emissao]<today()
     then 
          [Data de Emissao]=Today()
          [Data de Saida  ]=Today()
          [Hora de Saida  ]=Time()
          unlockrecord
  endif


  FileWrite        PrivDir()+"funcao5.txt"  From  "EDOCE|"+PrivDir()+"|"+"nce.tx2"+"|"+PastaNfeManagerMonitorar+"|"+ArqNFe+"|"+NOTAFISC+"\n"
  ExecVise(PrivDir()+"funcao5.txt")

  conteudodoarquivo="" 
  if Not LerConteudodoArquivo8(PrivDir()+"managret.txt") Or conteudodoarquivo=""
     then
          MSG="Sem resposta do eDOC p/ verificar situa‡Æo !// //"
       	  MSG=MSG+"// Verificar situa‡Æo no eDoc !"
       		Mensagem(MSG)
       		quitloop
     else
          Switch
            Case Search(CHAVE_ACESSO_NFe  ,conteudodoarquivo)>0 and
                 Search("Autorizado o uso",conteudodoarquivo)>0 :   
                 Mensagem("NFC-e "+NOTAFISC+" foi confirmada sua autoriza‡„o no SEFAZ !")
      
                 Switch
                   Case [FaturaC->Sistema Gerador]="n" : [FaturaC->Sistema Gerador]="n!" 
                   Case [FaturaC->Sistema Gerador]="s" : [FaturaC->Sistema Gerador]="s!" 
                 EndSwitch
                 UnLockRecord
      
                 Moveto "NotaC"
                 Moveto [Codigo da Empresa]
                 Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
                 If RetVal
                    Then [Sistema Gerador]=[FaturaC->Sistema Gerador]
                         UnLockRecord
                 EndIf
          
            Case Search("REGISTRADA",conteudodoarquivo)>0:
                 Mensagem("NFC-e "+NOTAFISC+" foi REGISTRADA no eDoc !// //Emitida Modo: Contingencia Offline ")
                 
          ;;Case Search("EXCEPTION" ,conteudodoarquivo)>0 or
          ;;     Search(",Rejeição:",conteudodoarquivo)>0:
          ;;     Mensagem("ERRO NFC-e -> "+ArqNFE+"// //"+conteudodoarquivo)
                  
           EndSwitch
  endif
  
  quitloop     
Endwhile 

LIMPAGUARDE()

Release Vars End_Logradouro, End_Numero, Endd_Complemento, PastaNfeManager, PastaNfeManagerMonitorar,
             ArqNFE, ArqNFE_Reenviar, ArqTX2, 
             TotalDescontoMercadoria, TotalDescontoServico,
             EMAILDESTINATARIO, ModeloReportRTM, ContItem, conteudodoarquivo, locentreg, RelDuplicatas

Release Vars cNF_B03, mod_B06, serie_B07, nNF_B08, tpEmis_B22, cDV_B23, verProc_B27,
             CNPJ_E02, CPF_E03, cMun_E10, xMun_E11, UF_E12, CEP_E13 
                          
Release Vars regdestin, regestados, regtranspor, regdestinat,
             regitens, regiten_com, regiten_tec, 
             regemitente, regcidadesemitente, regdestinatario, regcidadesdestinatario, regcidadesentrega, regcidadesretirada,
             regdestmail, regEmpriest, regfaturacc, regp_cartao, regdestinatRTM, regfi, regfaturac, regfaturicm
             
Release Procs Grava_ISSQN,Grava_ICMS_ST, Grava_PIS_COFINS, Grava_Item, 
              GeraNFE, GetTabelasPrincipais
              
