;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "NotaCF" e inclu¡do "NotaCC"
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "NotaOcp" 
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item

;*******************************************************************************
;* Rotina para Verificar Sistema Gerador                                       *
;*******************************************************************************
Proc Sistema_Gerador(PARAM)
Private PARAM,MSG
      
If PARAM_BLOQALT = False Then Return True EndIf

Switch
  Case PARAM = "EXCLUIR" : MSG = "A exclus„o n„o ‚ permitida !"
  Case PARAM = "ITEM"    : MSG = "N„o ‚ poss¡vel altera‡„o nos itens!"
  Case PARAM = "VALORES" : MSG = "Os valores n„o poderÆo ser alterados!"
  Case PARAM = ""        : MSG = ""   
EndSwitch   

; [NotaC->Sistema Gerador] = "FT" Or      
; [NotaC->Sistema Gerador] = "BA" Or
; [NotaC->Sistema Gerador] = "TR" Or

If Search("NFE",Upper([NotaC->Tipo do Documento]))>0
   Then If MSG <> "" Then Mensagem(MSG) EndIf
        Return False
EndIf

Return True

EndProc ;Sistema_Gerador()

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, KM_FRETE,
        TAXA_FRETE, VRMINIMO_FRETE, CHAVEC, OPCAO_RED_BCICMS,
        TRIB_ICMS, TRIB_IPI, UF_EMPRESA,
        UFEMPRESA_ALIQUOTA_ICMS,
        ALIQUOTA_CREDITO_ICMS_NOSN, UF_ALIQUOTA_ICMS_INTERNA,
        DESTIN_ATUALIZA_PEDIDOS,
        DP_GERA_DUPLICATA,TPEMPR, ATIVEMPR, CALCULO_NF_AUTOMATICO, CHAVEC

Private CAMPOS_OK, NCAMPO, CDDESTIN

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Invalida !")
;;Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
  OtherWise: CAMPOS_OK=True
EndSwitch

;*** Pega UF/Tipo Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[NotaC->Codigo da Empresa],"Empresa: "+[NotaC->Codigo da Empresa]+" sem UF !")
   Then UF_EMPRESA=REG_BUSCA_LOOKUP["UF Empresa"]
        TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
        ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
EndIf

;*** Checagem da Unidade Federativa c/ CFO ***
If CAMPOS_Ok
   Then Moveto [Codigo da Empresa]
        If Busca_Lookup("Codigo da Empresa",[NotaC->Codigo da Empresa],"")
           Then Switch
                  Case SubStr([NotaC->CFO],1,1)="1" And [NotaC->UF]<>UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de origem usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                  Case SubStr([NotaC->CFO],1,1)="5" And [NotaC->UF]<>UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de destino usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                  Case SubStr([NotaC->CFO],1,1)="2" And [NotaC->UF]=UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de origem usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                  Case SubStr([NotaC->CFO],1,1)="6" And [NotaC->UF]=UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de destino usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                EndSwitch
        EndIf
EndIf

If Not IsBlank([Numero_Carregamento])
   Then Moveto [Numero_Carregamento]
        If Busca_Lookup("Numero_Carregamento",[NotaC->Numero_Carregamento],"SM")
           Then If REG_BUSCA_LOOKUP["Situacao"]="ACERTADO"
                   Then Mensagem("Carregamento j  foi ACERTADO !")
                        CAMPOS_OK=False
                EndIf
           Else Mensagem("Carregamento n„o encontrado !")
                CAMPOS_OK=False
        EndIf
EndIf

If SubStr([Codigo do Documento],1,2)="CT"
   Then If [Tipo Movimento Estoque]<>"S"
           Then Mensagem("Destina‡Æo nÆo ‚ de saida de documento !")
                CAMPOS_OK=False
        EndIf   
        If [Frete por Conta]<>"1" And [Frete por Conta]<>"2"
           Then Mensagem("Frete por conta: 1-CIF ou 2-FOB !")
                CAMPOS_OK=False
        EndIf        
        
        If SYS_CODIGO_CLIENTE="0000"
           Then Switch
                  Case [Frete por Conta]="1" And ([Codigo da Empresa]<>[Codigo]):
                        Mensagem("Frete por conta: 1-CIF, c¢digo do tomador difere do c¢digo da empresa !")
                        CAMPOS_OK=False
                  Case [Frete por Conta]="2" And ([Codigo da Empresa] =[Codigo]):
                        Mensagem("Frete por conta: 2-FOB, c¢digo do tomador igual ao c¢digo da empresa !")
                        CAMPOS_OK=False
                EndSwitch
        EndIf
EndIf

If Not CAMPOS_OK
  Then Moveto "NotaC"
       Moveto Field NCAMPO
       Return False
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[NotaC->UF],"")
   Then UF_ALIQUOTA_ICMS         =REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        UF_ALIQUOTA_ICMS_INTERNA =REG_BUSCA_LOOKUP["Aliquota de ICMS_INTERNA"]
   Else UF_ALIQUOTA_ICMS         =BlankNum()
        UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
EndIf

If Busca_Lookup("UF",UF_EMPRESA,"")
   Then UFEMPRESA_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
   Else UFEMPRESA_ALIQUOTA_ICMS=BlankNum()
EndIf

;*** Aliquota/Tributacao/Observacao da Destinacao ***
TRIB_ICMS=""
TRIB_IPI =""
OPCAO_RED_BCICMS="1"


CDDESTIN=[Codigo da Destinacao]
[Codigo da Destinacao]=""
[Codigo da Destinacao]=CDDESTIN

OBS=""
ALIQUOTA_CREDITO_ICMS_NOSN =BlankNum()
TRIB_ICMS=""
TRIB_IPI =""
DESTIN_ATUALIZA_PEDIDOS=""
OPCAO_RED_BCICMS="1"
DP_GERA_DUPLICATA="N"
CALCULO_NF_AUTOMATICO="A"

Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[NotaC->Codigo da Destinacao],"")
   Then ALIQUOTA_CREDITO_ICMS_NOSN =REG_BUSCA_LOOKUP["Aliquota CredICMS NOSN"]
        If REG_BUSCA_LOOKUP["ICMS Aliquota do Estado"]<>"S"
           Then UF_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        EndIf
        CALCULO_NF_AUTOMATICO=REG_BUSCA_LOOKUP["Calcula_Nota"]
        TRIB_ICMS=REG_BUSCA_LOOKUP["Tributacao de ICMS"]
        TRIB_IPI =REG_BUSCA_LOOKUP["Tributacao de IPI"]
        DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]

        OBS = OBS+REG_BUSCA_LOOKUP["Observacao_Destinacao"]

        If Not IsBlank(REG_BUSCA_LOOKUP["Conta Caixa Padrao"])
           Then PARAM_CONTA_CAIXA=REG_BUSCA_LOOKUP["Conta Caixa Padrao"]
        EndIf
        OPCAO_RED_BCICMS=REG_BUSCA_LOOKUP["Sem Reducao BCICMS"]
        DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
EndIf
[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

;If CHAVEC=0 And CALCULO_NF_AUTOMATICO="A"
;   Then CALCULO_NF_AUTOMATICO="L"
;EndIf   

;*** Tabela de Kilometragem ***
Moveto [Codigo]
If Busca_Lookup("Codigo",[NotaC->Codigo],"SM")
   Then If IsBlank(REG_BUSCA_LOOKUP["Km Frete"])
           Then KM_FRETE=0
           Else KM_FRETE=REG_BUSCA_LOOKUP["Km Frete"]
        EndIf
   Else KM_Frete=0
EndIf

TAXA_FRETE=0
VRMINIMO_FRETE=0
Moveto [Lookup_Tabela_Frete]
Ativa_Lookup()
Scan
  If (KM_Frete>=[Km Inicial]) And
     (KM_Frete<=[Km Final  ])
     Then TAXA_FRETE    =[Taxa]
          VRMINIMO_FRETE=[Valor Minimo]
          QuitLoop
  EndIf
EndScan
KeyPress "ESC"

Moveto "NotaC"

Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
Private VRBCICMS_CREDSN, nitens

TabelaRefC="NotaC"    TabelaRefI="NotaI" 

If Sistema_Gerador("")
   Then Aguarde("Somando itens")

        ;-------- Variaveis para calculo de impostos por item --------------------------
        Release Vars It_tpitem, It_prtotal, It_cfop,
                     It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
                     It_cst_icms, It_csosn_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
                     It_aliq_icmscred, It_vr_icmscred,
                     It_mva, It_red_st, It_aliq_st, It_bc_st, It_vr_st,
                     It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
                     It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
                     It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
                     It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins, it_vr_ii 
        
        DynArray It_tpitem[]
        DynArray It_prtotal[]
        DynArray It_cfop[]
        
        DynArray It_txdescto[]
        DynArray It_descto[]
        DynArray It_frete[]
        DynArray It_seguro[]
        DynArray It_outdesp[]
        
        DynArray It_cst_icms[]
        DynArray It_trib_icms[]
        DynArray It_red_icms[]
        DynArray It_aliq_icms[]
        DynArray It_bc_icms[]
        DynArray It_vr_icms[]
        
        DynArray It_csosn_icms[]
        DynArray It_aliq_icmscred[]
        DynArray It_vr_icmscred[]
        
        DynArray It_mva[]
        DynArray It_red_st[]
        DynArray It_aliq_st[]
        DynArray It_bc_st[]
        DynArray It_vr_st[]
        
        DynArray It_cst_ipi[]
        DynArray It_trib_ipi[]
        DynArray It_aliq_ipi[]
        DynArray It_bc_ipi[]
        DynArray It_vr_ipi[]
        
        DynArray It_trib_issqn[]
        DynArray It_aliq_issqn[]
        DynArray It_bc_issqn[]
        DynArray It_vr_issqn[]
        
        DynArray It_cst_pis[]
        DynArray It_aliq_pis[]
        DynArray It_bc_pis[]
        DynArray It_vr_pis[]
        
        DynArray It_cst_cofins[]
        DynArray It_aliq_cofins[]
        DynArray It_bc_cofins[]
        DynArray It_vr_cofins[]
        
        DynArray It_vr_ii[]
        
        ;-------- Variaveis para calculo da nota ---------------------------------------
        
        VRMERC          =0
        VRSERV          =0
        VRBC_COMIS      =0
        VRBCICMS_CREDSN =0
        
        Moveto TabelaRefI
        nitens=0
        Scan 
          
          If [Situacao_Item]<>"C" ; item nÆo cancelado
             Then  
                  If [Tipo do Item]<>"C"
                     Then VRMERC=VRMERC+[Preco Total]
                     Else VRSERV=VRSERV+[Preco Total]
                  EndIf
                
                  If PARAM_CALC_COMIS_ITEM="S"
                     Then VRBC_COMIS=VRBC_COMIS+Round((([Preco Total]*[Comissao do Item])/100),2)
                  EndIf
                
                  If SubStr(PARAM_DOC_NF,1,3)="NFE" And IsBlank([Tipo Tributacao])
                     Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // CST/ICMS inv lido, verificar !")
                  EndIf
          EndIf
                
          ;-------- Variaveis para calculo imposto do item -------------------------------
          nitens=nitens+1
          It_tpitem[nitens]        =[Tipo do Item            ] 
          It_prtotal[nitens]       =[Preco Total             ] 
          It_cfop[nitens]          =[CFO                     ] 
        
          It_txdescto[nitens]      =BlankNum()  
          It_descto[nitens]        =BlankNum()  
          It_frete[nitens]         =BlankNum()
          It_seguro[nitens]        =BlankNum()  
          It_outdesp[nitens]       =BlankNum()  
        
          It_trib_icms[nitens]     =[Tributacao de ICMS      ]
          It_cst_icms[nitens]      =[Tipo Tributacao         ]
          It_red_icms[nitens]      =[Aliquota Reduzida BCICMS]
          It_aliq_icms[nitens]     =[Aliquota de ICMS        ]
          It_bc_icms[nitens]       =[ICMS_BC                 ]
          It_vr_icms[nitens]       =[Valor do ICMS           ]
        
          It_csosn_icms[nitens]    =[CSOSN                   ]
          It_aliq_icmscred[nitens] =[ICMS_CredSN_Aliquota    ]
          It_vr_icmscred[nitens]   =[ICMS_CredSN_Valor       ]
                  
          It_mva[nitens]           =[MVA                     ]
          It_red_st[nitens]        =[ICMS_ST_Aliquota Reduzida]
          It_aliq_st[nitens]       =[ICMS_ST_Aliquota        ]
          It_bc_st[nitens]         =[ICMS_ST_BC              ]
          It_vr_st[nitens]         =[ICMS_ST_Valor           ]
        
          It_trib_ipi[nitens]      =[Tributacao de IPI       ]
          It_cst_ipi[nitens]       =[IPI_CST                 ]
          It_aliq_ipi[nitens]      =[Aliquota de IPI         ]
          It_bc_ipi[nitens]        =[IPI_BC                  ]
          It_vr_ipi[nitens]        =[Valor do IPI            ]
        
          It_trib_issqn[nitens]    =[Tributacao de ISSQN     ]
          It_aliq_issqn[nitens]    =[Aliquota de ISSQN       ]
          It_bc_issqn[nitens]      =[ISSQN_BC                ]
          It_vr_issqn[nitens]      =[Valor do ISSQN          ]
        
          It_cst_pis[nitens]       =[PIS_CST                 ]
          It_aliq_pis[nitens]      =[PIS_Aliquota            ]
          It_bc_pis[nitens]        =[PIS_BC                  ]
          It_vr_pis[nitens]        =[PIS_Valor               ]
        
          It_cst_cofins[nitens]    =[COFINS_CST              ]
          It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
          It_bc_cofins[nitens]     =[COFINS_BC               ]
          It_vr_cofins[nitens]     =[COFINS_Valor            ]
        
          It_vr_ii[nitens]         =[II_Valor Imposto        ]
        
          If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
             SubStr(Directory(),1,1)<>"X"                              And
             (It_csosn_icms[nitens]="101" Or It_csosn_icms[nitens]="201")
             Then VRBCICMS_CREDSN  =VRBCICMS_CREDSN+It_prtotal[nitens]
          EndIf   
        
          If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
             Then
                  It_bc_icms[nitens]       =BlankNum()
                  It_vr_icms[nitens]       =BlankNum()
        
                  It_bc_st[nitens]         =BlankNum()
                  It_vr_st[nitens]         =BlankNum()
        
                  It_vr_icmscred[nitens]   =BlankNum()
        
                  It_bc_ipi[nitens]        =BlankNum()
                  It_vr_ipi[nitens]        =BlankNum()
        
                  It_bc_issqn[nitens]      =BlankNum()
                  It_vr_issqn[nitens]      =BlankNum()
        
                  It_bc_pis[nitens]        =BlankNum()
                  It_vr_pis[nitens]        =BlankNum()
        
                  It_bc_cofins[nitens]     =BlankNum()
                  It_vr_cofins[nitens]     =BlankNum()
        
          EndIf   
        
        EndScan
        LimpAguarde()
        
        CHAVEF=0
        CHAVEV=1
        COPIOU_REGISTRO=False
        
        Moveto TabelaRefC

        CALC_OF()
EndIf

EndProc   ; (DigitaF)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc CALC_OF()
Private TabelaRefC, TabelaRefI, CampoTab, wi,

        VRBCIPI, VRIPI, VRBCICMS, VRICMS, VRBCST, VRST, VRICMS_CREDSN,
        VRBCISSQN, VRISSQN, VRBCPIS, VRPIS, VRBCCOFINS, VRCOFINS,  
        VRII, 

        Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor,
        DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor,
        OutrosRateioOk,
        VL_BC_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST,
        TribCST,
        MercadoriaRateio_Valor

Aguarde("Calculando valores da nota")

Switch
  Case Table()="Faturac": TabelaRefC="FaturaC"  TabelaRefI="FaturaI"
  Case Table()="Notac"  : TabelaRefC="NotaC"    TabelaRefI="NotaI" 
EndSwitch

Moveto TabelaRefC
CampoTab=Field()

VRBCIPI        =0
VRIPI          =0
VRBCICMS       =0
VRICMS         =0
VRBCST         =0
VRST           =0
VRICMS_CREDSN  =0
VRBCISSQN      =0
VRISSQN        =0
VRBCPIS        =0
VRPIS          =0
VRBCCOFINS     =0
VRCOFINS       =0
VRII           =0

VRNF           =0

MSG_AUTOMATICA=""

[Valor Mercadoria]=VRMERC
If [Descricao da Destinacao]="COMPLEMENTO IPI SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO IPI CBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ST"
   Then [Valor Mercadoria  ]=BlankNum()
EndIf
[Valor Servico   ]=VRSERV
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-[Valor Desconto]

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Soma dos Items para rateio ------------------------------------------------
MercadoriaRateio_Valor=0
For wi From 1 to DynArraySize(It_prtotal)
  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
     Else 
          OutrosRateioOk=True
          If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
             (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
             Then OutrosRateioOk=False
          EndIf
  EndIf
  
  If OutrosRateioOk
     Then MercadoriaRateio_Valor=MercadoriaRateio_Valor+It_prtotal[wi]
  EndIf   
EndFor

;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
Frete_Valor      =0
Seguro_Valor     =0
OutDesp_Valor    =0
Descto_Valor     =0

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else 
          OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/MercadoriaRateio_Valor)*100 
          If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
             (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
             Then OutrosRateioOk=False
          EndIf
  EndIf   

  If OutrosRateioOk
     Then It_txdescto[wi]=TXDESCTO_TOTAL
          It_descto[wi]  =NDecimal((REG_TABELAREFC["Valor Desconto"          ]*PORC_IT_MERC)/100,2)
          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
             Then It_frete[wi]=NDecimal((REG_TABELAREFC["Valor do Frete"     ]*PORC_IT_MERC)/100,2)
             Else It_frete[wi]=0           
          EndIf
          It_seguro[wi] =NDecimal((REG_TABELAREFC["Valor do Seguro"          ]*PORC_IT_MERC)/100,2)
          It_outdesp[wi]=NDecimal((REG_TABELAREFC["Valor Despesas Acessorias"]*PORC_IT_MERC)/100,2)

          Descto_Valor  =Descto_Valor +It_descto[wi]
          Frete_Valor   =Frete_Valor  +It_frete[wi]
          Seguro_Valor  =Seguro_Valor +It_seguro[wi]
          OutDesp_Valor =OutDesp_Valor+It_outdesp[wi]

          If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
          If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
          If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
          If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
          If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf

     Else It_txdescto[wi]=BlankNum()
          It_descto[wi]  =BlankNum()
          It_frete[wi]   =BlankNum()
          It_seguro[wi]  =BlankNum()
          It_outdesp[wi] =BlankNum()
  EndIf

EndFor

;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,2)
If REG_TABELAREFC["Frete Incluso na Nota"]="+"
   Then DIF_Frete_Valor=NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
   Else DIF_Frete_Valor=0
EndIf
DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)

If DIF_Descto_Valor <>0 Or
   DIF_Frete_Valor  <>0 Or
   DIF_Seguro_Valor <>0 Or
   DIF_OutDesp_Valor<>0 
   Then 
        For wi From 1 to DynArraySize(It_prtotal) 
              
          Switch
            Case It_tpitem[wi]="C" :  ;Igual a Seri‡o
              OutrosRateioOk=False    ;nÆo rateia frete e outros
            OtherWise              :  ;Diferente de servi‡o
              OutrosRateioOk=True     ;rateia frete e outros 
              If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
                (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
                 Then OutrosRateioOk=False
              EndIf
          EndSwitch
          If OutrosRateioOk 
             Then 
                  If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                     Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                          DIF_Descto_Valor=0 
                  EndIf
                  If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                     Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                          DIF_Frete_Valor =0
                  EndIf
                  If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                     Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                          DIF_Seguro_Valor=0
                  EndIf   
                  If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                     Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                          DIF_OutDesp_Valor=0
                  EndIf   

                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
          
        EndFor
EndIf
          
;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)

  Switch
    Case CALCULO_NF_AUTOMATICO="A":

      ;--- Calculando IPI ----------------------------------------------------------
      If It_aliq_ipi[wi]>0
         Then It_bc_ipi[wi]=It_prtotal[wi]
              If REG_TABELAREFC["Frete Incluso na Nota"]="+" And
                 SubStr(It_cfop[wi],1,1)    ="3" And ; entrada import‡Æo  
                 SubStr(It_cst_icms[wi],1,1)="1"     ; item importa‡Æo direta
                 Then It_bc_ipi[wi]=It_bc_ipi[wi]+It_frete[wi]
              EndIf
              It_vr_ipi[wi]=Round((It_bc_ipi[wi]*It_aliq_ipi[wi])/100,2) 
         Else It_bc_ipi[wi]=BlankNum()   
              It_vr_ipi[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando Base de Calculo ICMS para todas as situa‡äes -----------------
      Switch
        Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
          Switch
            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)<>"60": 
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)="60" And
                 Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
        OtherWise:
          Switch
            Case OPCAO_RED_BCICMS=3 And It_red_icms[wi]>0 And It_txdescto[wi]>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
      EndSwitch
      VL_BC_ICMS   =VL_BC_ICMS   +It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_frete[wi]+It_seguro[wi]+It_outdesp[wi] 

      If REG_TABELAREFC["Consumidor Final"]="S" 
         Then VL_BC_ICMS   =VL_BC_ICMS   +it_vr_ipi[wi]
         Else VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
      EndIf   
      VL_RED_BC    =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS   =VL_BC_ICMS-VL_RED_BC                   

      ;--- Calculando Credito ICMS Simples Nacional ------------------------
      If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
         SubStr(Directory(),1,1)<>"X"                              And
         (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")
         Then It_vr_icmscred[wi]  =Round((VL_BC_ICMS*It_aliq_icmscred[wi])/100,2)
         Else It_aliq_icmscred[wi]  =BlankNum()
              It_vr_icmscred[wi]    =BlankNum()
      EndIf   

      ;--- Calculando ICMS ---------------------------------------------------------
      If It_aliq_icms[wi]>0 
         Then It_bc_icms[wi]    =VL_BC_ICMS
              It_vr_icms[wi]    =Round((It_bc_icms[wi]*It_aliq_icms[wi])/100,2)
         Else It_aliq_icms[wi]  =BlankNum()
              It_bc_icms[wi]    =BlankNum()
              It_vr_icms[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando Substituicao Tributaria --------------------------------------
      If It_aliq_st[wi]>0
         Then
              If SYS_CODIGO_CLIENTE="0167"
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST-It_frete[wi]     
              EndIf
        
              VL_BC_ICMS_ST=VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*It_mva[wi])/100,2)
              VL_RED_BCST  =NDecimal((VL_BC_ICMS_ST*It_red_st[wi])/100,2)
              VL_BC_ICMS_ST=VL_BC_ICMS_ST-VL_RED_BCST                   
       
              VL_ICMS_ST=Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)

              ;Comentado para nÆo pegar aliquota do estado caso ICMS esteja em branco
              VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;Switch
              ;  Case It_vr_icms[wi]>0 :
              ;       VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;  OtherWise             :
              ;       VL_ICMS_ST=VL_ICMS_ST-Round((VL_BC_ICMS*UF_ALIQUOTA_ICMS)/100,2)
              ;EndSwitch
        
              It_bc_st[wi]=VL_BC_ICMS_ST
              It_vr_st[wi]=VL_ICMS_ST
      
         Else It_red_st[wi]    =BlankNum() 
              It_aliq_st[wi]   =BlankNum()
              It_bc_st[wi]     =BlankNum()
              It_vr_st[wi]     =BlankNum()
      EndIf
    
      ;--- Calculando ISSQN --------------------------------------------------------
      If It_aliq_issqn[wi]>0
         Then It_bc_issqn[wi]=It_prtotal[wi]
              It_vr_issqn[wi]=Round((It_bc_issqn[wi]*It_aliq_issqn[wi])/100,2) 
         Else It_bc_issqn[wi]=BlankNum()    
              It_vr_issqn[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0
         Then It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              It_vr_pis[wi]=Round((It_bc_pis[wi]*It_aliq_pis[wi])/100,2) 
         Else It_bc_pis[wi]=BlankNum()    
              It_vr_pis[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando COFINS -------------------------------------------------------
      If It_aliq_cofins[wi]>0
         Then It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              It_vr_cofins[wi]=Round((It_bc_cofins[wi]*It_aliq_cofins[wi])/100,2) 
         Else It_bc_cofins[wi]=BlankNum()    
              It_vr_cofins[wi]=BlankNum()    
      EndIf

    OtherWise:

  EndSwitch

  ;--- Somando Impostos --------------------------------------------------------
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
  VRICMS         =VRICMS       +It_vr_icms[wi]
  VRICMS_CREDSN  =VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  VRBCISSQN      =VRBCISSQN    +It_bc_issqn[wi]
  VRISSQN        =VRISSQN      +It_vr_issqn[wi]
  VRBCPIS        =VRBCPIS      +It_bc_pis[wi]
  VRPIS          =VRPIS        +It_vr_pis[wi]  
  VRBCCOFINS     =VRBCCOFINS   +It_bc_cofins[wi]
  VRCOFINS       =VRCOFINS     +It_vr_cofins[wi]
  VRII           =VRII         +It_vr_ii[wi]
                                                                          
EndFor

Moveto "NotaC"
Moveto Field CampoTab


[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor II     ]=VRII    
[Valor PIS    ]=VRPIS
[Valor COFINS ]=VRCOFINS

[Valor BCSubstituicao ICMS]=VRBCST
[Valor Substituicao ICMS  ]=VRST

[Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                     [Valor Substituicao ICMS]+[Valor do Seguro])
                     
VRNF=[Valor Nota Fiscal]

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
EndIf

If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   VRICMS_CREDSN>0
   Then
        MSG_AUTOMATICA=" ** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS NO VALOR DE RS "+
                       LTRIM(Format("W12.2,EIC",VRICMS_CREDSN))+
                       " , CORRESPONDENTE A ALIQUOTA DE "+
                       LTRIM(Format("W12.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN))+
                       "% NOS TERMOS DO ARTIGO 23 DA LC123/2006 * "+
                       " NAO GERA DIREITO A CREDITO FISCAL DE ISS E IPI"
EndIf

If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ST" 
   Then [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf

;*** 0=BlankNum() **************************************************************
If [Valor BCICMS             ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
If [Valor ICMS               ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
If [Valor BCSubstituicao ICMS]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
If [Valor Substituicao ICMS  ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
If [Valor IPI                ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor BCISSQN            ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN              ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf
If [Valor do Frete           ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
If [Valor do Seguro          ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
If [Valor Despesas Acessorias]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor PIS                ]=0 Then [Valor PIS                ]=BlankNum() EndIf
If [Valor COFINS             ]=0 Then [Valor COFINS             ]=BlankNum() EndIf
If [Valor II                 ]=0 Then [Valor II                 ]=BlankNum() EndIf

If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
   PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then Checa_Comissao_Vendedor()
EndIf

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc     ;  (Calc_OF)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc, PARAM_CONSIGNACAO, PARAM_RELAT_NF

View NOWINDOW "P_Fatura"
View NOWINDOW "P_Balcao"
View NOWINDOW "P_Cartao"
View NOWINDOW "FaturaC"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaIDD"
View NOWINDOW "NotaIAD"
View NOWINDOW "NotaIDV"
View NOWINDOW "NotaV"
View NOWINDOW "NotaR"
View NOWINDOW "NotaCC"
;;;View NOWINDOW "DupC"
;;;View NOWINDOW "DupI"
;;;View NOWINDOW "DupNF"
View NOWINDOW "NumeroDP"
;;;View NOWINDOW "TbPrIte"
;;;View NOWINDOW "TbPrCpg"
;;;View NOWINDOW "TbprCli"
;;;View NOWINDOW "TbprCit"

View NOWINDOW "\\Sistemas\\Estoque\\Itens"
View NOWINDOW "\\Sistemas\\Estoque\\P_Entra"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEC"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEI"
View NOWINDOW "\\Sistemas\\Estoque\\EstqPrm"
View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"

View NOWINDOW "\\Sistemas\\Cadastro\\Destinat"
View NOWINDOW "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW "\\Sistemas\\Cadastro\\Feriados"

View NOWINDOW "\\Sistemas\\CheqRec\\ChequeC"
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeI"

;;;View NOWINDOW  "\\Sistemas\\CtaCor\\SaldCont"
;;;View NOWINDOW  "\\Sistemas\\CtaCor\\MovCont"

View NOWINDOW  "\\Sistemas\\CtaRec\\Duplic"
View NOWINDOW  "\\Sistemas\\CtaRec\\P_Duplic"

EndProc  ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para Carregar Parametros_                                            *
;*******************************************************************************
Proc Carrega_Parametros()

Switch
  Case [NotaC->Sistema Gerador]="BA" :  Return Carrega_Parametros_Balcao()
  OtherWise                          :  Return Carrega_Parametros_Fatura()
EndSwitch
EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros_Fatura                                      *
;*******************************************************************************
Proc Carrega_Parametros_Fatura()
Private ParamF, ParamE

If IsEmpty("P_Fatura")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Saida/Fatura]!")
        Return False
EndIf

If IsEmpty("\\Sistemas\\Estoque\\P_Entra")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Entrada/NE]!")
        Return False
EndIf

UnLockRecord
KeyPress "F7"
While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

ParamF=False
Moveto "P_Fatura"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamF=True

        PARAM_EMPRESA       =[Codigo_Empresa           ]
        PARAM_DESTINACAO    =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA   =[Codigo_Conta_Caixa       ]
        PARAM_DATAS_VENCTOS =[Datas_Vencimentos        ]
        PARAM_COR_TECIDO    =[Cor_Tecido               ]
        PARAM_TAMANHO       =[Tamanho                  ]
        PARAM_DESCUNIT      =[Desconto Unitario        ]
        PARAM_VOLUMES       =[Volumes                  ]
        PARAM_SUBSTICMS     =[Substituicao ICMS        ]
        PARAM_PEDIDO        =[Utiliza_Pedido           ]
        PARAM_ORCAMENTO     =[Utiliza_Orcamento        ]
        PARAM_ORDEM_SERVICO =[Utiliza_OS               ]
        PARAM_BLOQUEIA_NEG  =[Bloqueia_Estoque_Negativo]
        PARAM_MULT_BCICMS   =[Multiplas_BC_ICMS        ]
        PARAM_NLCHQ_IGUAL_NF=[NLCheque_Igual_NF        ]
        PARAM_IMPOSTOS      =[Impostos                 ]
        PARAM_TABELA_PRECO  =[Tabela_Preco             ]
        PARAM_TRANSPORTADORA=[Codigo_Transportadora    ]
        PARAM_TRANSFERENCIA =[Utiliza_Transferencia    ]
        PARAM_CONSIGNACAO   ="N"
        PARAM_CHEQUES       =[Utiliza_Controle_Cheques ]
        PARAM_AVISTAAUTOMAT =[Gera_VendasVista_Automat ]
        PARAM_APRAZOAUTOMAT =[Gera_VendasPrazo_Automat ]
        PARAM_AVISTADUPLIC  =[Gera_Duplicatas_AVista   ]
        PARAM_TXJUROS       =[Duplicata_TxJuros        ]
        PARAM_FORMA_TXJUROS =[Duplicata_Forma_TxJuros  ]
        PARAM_DUPLIC_NUMERO =[Gera_Duplicatas_Numero   ]
        PARAM_COMIS_ITEM    =[Comissao_Item            ]
        PARAM_COMIS_MARCA   =[Utiliza_Comissao_Marca   ]

        PARAM_TABPR_ITEM    =[Utiliza_Tabela_Preco_Item]
        PARAM_COMIS_VENCTO  =[Calcula_Comissao_Vencto  ]
        PARAM_EXIBECUSTO    =[Exibe_Custo_Item_Consulta]  
        
        PARAM_UTILIZA_COMISSAO_VENDEDOR=[Utiliza_Comissao_Vendedor]
        PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
        PARAM_UTILIZA_COMISSAO_VENDREAL=[Utiliza_Comissao_VendReal]
        PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
        PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
        PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
        
        If SYS_CODIGO_CLIENTE="0102" Or
           SYS_CODIGO_CLIENTE="0114"
           Then PARAM_CALC_COMIS_ITEM="S"
           Else PARAM_CALC_COMIS_ITEM="N"
        EndIf
        
        PARAM_DOC_ROM = [Rom_Codigo do Documento  ]  
        PARAM_TIP_ROM = [Rom_Tipo do Documento    ]  
        PARAM_SER_ROM = [Rom_Serie do Documento   ]  
               
        PARAM_DOC_NF  = [Not_Codigo do Documento  ]  
        PARAM_TIP_NF  = [Not_Tipo do Documento    ]  
        PARAM_SER_NF  = [Not_Serie do Documento   ]  
               
        PARAM_DOC_DUP = [Dup_Codigo do Documento  ]  
        PARAM_TIP_DUP = [Dup_Tipo do Documento    ]  
        PARAM_SER_DUP = [Dup_Serie do Documento   ]  
        
        PARAM_UTILIZACDBARRA           =[Utiliza_Codigo_Barras    ]

        PARAM_DOC_NFEN                 =[NFEN_Codigo do Docto     ]  
        PARAM_TIP_NFEN                 =[NFEN_Tipo do Docto       ]  
        PARAM_SER_NFEN                 =[NFEN_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFEN              =[NFEN Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFEN              =[NFEN Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFEN              =[NFEN Dup_Serie do Docto  ]  
        
        PARAM_DOC_NFES                 =[NFES_Codigo do Docto     ]  
        PARAM_TIP_NFES                 =[NFES_Tipo do Docto       ]  
        PARAM_SER_NFES                 =[NFES_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFES              =[NFES Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFES              =[NFES Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFES              =[NFES Dup_Serie do Docto  ]  
        PARAM_TITCRED                  =[Utiliza_Titulo_Credito   ] 
        
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Fatura] !")
EndIf


ParamE=False
Moveto "\\Sistemas\\Estoque\\P_Entra"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamE=True 
        ;;PARAM_PECAS_ITEM      = [Controla_Pecas_Item      ] nÆo usa mais
        PARAM_PECAS_ITEM      = "N"
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Entrada/NE] !")
EndIf

Moveto "NotaC"
KeyPress "F7"

If ParamF And ParamE
   Then Return True
   Else Return False
EndIf   
EndProc ; (Carrega_Parametros)


;*******************************************************************************
;* Rotina para Carregar Parametros Balcao                                      *
;*******************************************************************************
Proc Carrega_Parametros_Balcao()
Private ParamF, ParamE

If IsEmpty("P_Balcao")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Saida/Balc„o]!")
        Return False
EndIf

If IsEmpty("\\Sistemas\\Estoque\\P_Entra")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Entrada/NE]!")
        Return False
EndIf

UnLockRecord
KeyPress "F7"
IsLockRecord()

ParamF=False
Moveto "P_Balcao"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamF=True

        PARAM_EMPRESA                  =[Codigo_Empresa           ]
        PARAM_DESTINACAO               =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA              =[Codigo_Conta_Caixa       ]
        PARAM_DATAS_VENCTOS            =[Datas_Vencimentos        ]
        PARAM_COR_TECIDO               =[Cor_Tecido               ]
        PARAM_TAMANHO                  =[Tamanho                  ]
        PARAM_DESCUNIT                 =[Desconto Unitario        ]
        PARAM_VOLUMES                  =[Volumes                  ]
        PARAM_SUBSTICMS                =[Substituicao ICMS        ]
        PARAM_PEDIDO                   =[Utiliza_Pedido           ] ;antes recebia "N" - Kamila Gomes
        PARAM_ORCAMENTO                =[Utiliza_Orcamento        ]
        PARAM_ORDEM_SERVICO            =[Utiliza_OS               ]
        PARAM_BLOQUEIA_NEG             =[Bloqueia_Estoque_Negativo]
        PARAM_MULT_BCICMS              =[Multiplas_BC_ICMS        ]
        PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
        PARAM_IMPOSTOS                 =[Impostos                 ]
        PARAM_TABELA_PRECO             =[Tabela_Preco             ]
        PARAM_TRANSPORTADORA           =[Codigo_Transportadora    ]
        PARAM_TRANSFERENCIA            ="N"
        If SYS_CODIGO_CLIENTE="0217"
           Then PARAM_TRANSFERENCIA    ="S"
        EndIf   
        PARAM_CONSIGNACAO              ="N"
        PARAM_CHEQUES                  =[Utiliza_Controle_Cheques ]
        PARAM_RELAT_NF                 =[Script_Impressao_NF      ]
        PARAM_RELAT_ROMA               =[Script_Impressao_Romaneio]
        PARAM_RELAT_NP                 =[Script_Impressao_NP      ]
        PARAM_RELAT_CARNE              =[Script_Impressao_Carne   ]
        PARAM_CONTROLA_NITENS          =[Controla_Numero_Itens    ]
        PARAM_NITENS                   =[Numero_Itens             ] 
        PARAM_TAMANHO_DESCR            =[Tamanho_Descricao_Item   ]
        PARAM_NLINHAS_OBS              =[NLinhas_Obs_Campo_Itens  ]
        PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
        PARAM_NVIAS_ROMANEIO           =[NVias_Romaneio           ]
        PARAM_ENTREGA                  =[Entrega_Mercadoria       ]
        PARAM_RELAT_ENTREGA            =[Script_Impressao_Entrega ]
        PARAM_PORTA_ENTREGA            =[Porta_Impressao_Entrega  ]
        PARAM_LIMITE_CREDITO           =[Utiliza_Limite_Credito   ]
        PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
        PARAM_DIAS_ATRASO              =[Utiliza_Dias_Atraso      ]
        PARAM_CUPOM_FISCAL             =[Utiliza_Cupom_Fiscal     ]
        PARAM_CLIENTE                  =[Codigo_Cliente           ]
        PARAM_VENDEDOR                 =[Codigo_Vendedor          ]
        PARAM_COND_PAGTO               =[Codigo_Cond_Pagto        ]
        PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto       ]
        PARAM_UTILIZAVENDEDOR          =[Utiliza_Vendedor         ]
        PARAM_UTILIZACDBARRA           =[Utiliza_Codigo_Barras    ]
        PARAM_BLOQUEIA_REEMISSAO       =[Bloqueia_Reemissao_NF    ]
        PARAM_AVISTAAUTOMAT            =[Gera_VendasVista_Automat ]
        PARAM_APRAZOAUTOMAT            =[Gera_VendasPrazo_Automat ]
        PARAM_AVISTADUPLIC             =[Gera_Duplicatas_AVista   ]
        PARAM_TXJUROS                  =[Duplicata_TxJuros        ]
        PARAM_FORMA_TXJUROS            =[Duplicata_Forma_TxJuros  ]
        PARAM_DUPLIC_NUMERO            =[Gera_Duplicatas_Numero   ]
        
        PARAM_COMIS_ITEM               =[Comissao_Item            ]
        PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]

        PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
        PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
        PARAM_VISITA                   =[Utiliza_Visita           ]
        PARAM_BLOQUEIA_AUTORI          =[Bloqueia_Autorizados     ]
        PARAM_FATURA_IGUAL_OF          =[Gera_Fatura_Igual_OF     ]
        
        If SYS_CODIGO_CLIENTE="0102" Or
           SYS_CODIGO_CLIENTE="0114"
           Then PARAM_CALC_COMIS_ITEM="S"
           Else PARAM_CALC_COMIS_ITEM="N"
        EndIf
        
        PARAM_UTILIZA_COMISSAO_VENDEDOR=[Utiliza_Comissao_Vendedor]
        PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
        PARAM_TRANSF_ULTCT             =[Utiliza_UltCust_Transfer ]
        PARAM_UTILIZA_COMISSAO_VENDREAL=[Utiliza_Comissao_VendReal]
        PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
        PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
        PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_Cpagto ]
        
        PARAM_BLOQ_DESCTO              =[Utiliza_Bloqueio_Descto  ]
        PARAM_BLOQ_TPDESCTO            =[Tipo_Bloqueio_Descto     ]
        PARAM_BLOQ_TXDESCTO            =[Taxa_Bloqueio_Descto     ]
        PARAM_EXIBECUSTO               =[Exibe_Custo_Item_Consulta]
        
        PARAM_BLOQ_DESCTOUNIT          =[Utiliza_Bloqueio_DesctoUn]
        PARAM_BLOQ_TPDESCTOUNIT        =[Tipo_Bloqueio_DesctoUn   ]
        PARAM_BLOQ_TXDESCTOUNIT        =[Taxa_Bloqueio_DesctoUn   ]
        
        PARAM_DOC_ROM                  =[Rom_Codigo do Documento  ]  
        PARAM_TIP_ROM                  =[Rom_Tipo do Documento    ]  
        PARAM_SER_ROM                  =[Rom_Serie do Documento   ]  
               
        PARAM_DOC_NF                   =[Not_Codigo do Documento  ]  
        PARAM_TIP_NF                   =[Not_Tipo do Documento    ]  
        PARAM_SER_NF                   =[Not_Serie do Documento   ]  
               
        PARAM_DOC_DUP                  =[Dup_Codigo do Documento  ]  
        PARAM_TIP_DUP                  =[Dup_Tipo do Documento    ]  
        PARAM_SER_DUP                  =[Dup_Serie do Documento   ]  
        
        PARAM_BLOQUEIA_CANCEL          =[Bloqueia Cancelamento    ]
        PARAM_BLOQUEIA_ALTERA          =[Bloqueia_Alteracao_NF    ]        
        PARAM_TITCRED                  =[Utiliza_Titulo_Credito   ] 
        
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Balc„o] !")
EndIf


ParamE=False
Moveto "\\Sistemas\\Estoque\\P_Entra"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamE=True 
        ;;PARAM_PECAS_ITEM      = [Controla_Pecas_Item      ] nÆo usa mais
        PARAM_PECAS_ITEM      = "N"
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Entrada/NE] !")
EndIf

Moveto "NotaC"
KeyPress "F7"

If ParamF And ParamE
   Then Return True
   Else Return False
EndIf   
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
SYS_VALOR()
SetDir "\\Sistemas\\Vendas"

If SYS_CODIGO_CLIENTE = "0227"
   Then PARAM_BLOQALT  = True
   Else PARAM_BLOQALT  = False
EndIf   

MSG = "Deseja executar a rotina CALC_OF das Notas ?"
ConfGeral(MSG)
If Ok="S"
   Then MSG = "Deseja realizar o BACKUP do NOTAC e NOTAI ?"
        ConfGeral(MSG)
        If Ok="S"
           Then Aguarde("Copiando a tabela NOTAC para BK_NOTC !")
                Copy "NotaC" "Bk_NotC"
                Aguarde("Copiando a tabela NOTAI para BK_NOTI !")
                If IsTable("Bk_NotI")
                   Then Copy "Bk_NotI" "Bk_NotI2"
                EndIf   
                Copy "NotaI" "Bk_NotI" 
        EndIf   
   Else Return
EndIf
   
EMP = "***"   
   
REG = 0

NR = NRecords("NotaC")

Carrega_Tabelas()

Coedit "NotaC"
PickForm "1"
Scan
  Barra(NR, RecNo())
  
  If REG > 0
     Then Aguarde("Aguarde, Atualizando PIS/COFINS -> "+StrVal(REG)+" registros"+BARRA_STRING)
     Else Aguarde("Aguarde, Atualizando PIS/COFINS "+BARRA_STRING)
  EndIf   
  
  If IsBlank([Data de Emissao]) Then Loop EndIf
  
  If AlinhM(StrVal(Month([Data de Emissao])),2)<>"11" Or
     StrVal(Year([Data de Emissao]))<>"2015"          Or 
     Upper(SubStr([Serie do Documento],1,1))<>"X"     Or
     Upper([Situacao])="C"
     Then Loop
  EndIf
  CHAVEC=0
  If EMP<>[Codigo da Empresa]
     Then EMP = [Codigo da Empresa]
          Carrega_Parametros()     
  EndIf
  Checagem_Pagina1()
  DIGITAF()
  Moveto "NotaC"
EndScan
Do_it!
ClearAll

Mensagem("Processo Finalizado!")  

Release Vars All
Release Procs All
