;** Bib_Tro ********************************************************************
;*  Biblioteca de Rotinas do Faturamento                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)   
;Desenvolvido    : 31/01/2004 por Anivel Augusto Rodrigues
;Ultima Alteracao: 06/02/2006 por Davi Carrano
;Motivo Alteracao: Ajustes Dias Atraso
;Ultima Alteracao: 30/05/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Dias Atraso/Pega_Preco/Descto Cliente
;Ultima Alteracao: 07/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tributacao IPI    
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BCICMS/ICMS Frete                         
;Ultima Alteracao: 05/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Pega_Preco()
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IsLockRecord/UnLockRecord
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques em Cobranca
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito
;Ultima Alteracao: 06/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques()
;Ultima Alteracao: 09/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSG Limite Credito/Dias Atraso
;Ultima Alteracao: 19/08/2009 por Antonio Marcelo Alves
;Motivo Alteracao: Ajustes proc Limite_Credito variaveis
;Ultima Alteracao: 10/09/2009 por Cleber Alves
;Motivo Alteracao: Declaracao da variavel PARAM_LIMITE_CREDITO
;Ultima Alteracao: 24/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() Brasil Textil
;Ultima Alteracao: 21/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exlusao ESTQPRM            
;Ultima Alteracao: 08/06/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Cheques Trocados
;Ultima Alteracao: 07/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 17/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Exlusao Lookupïs Calculo PIS/COFINS  
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 08/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SEM_RED_BCICMS (Proc CALC_OF)
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 28/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                           
;Ultima Alteracao: 29/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_OF trib_ICMS                               
;Ultima Alteracao: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                          
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 28/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Dados dos Cheques
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 26/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: InclusÆo "Checa_SPC"  
;Ultima Alteracao: 04/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Checa SPC" 
;Ultima Alteracao: 20/06/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado Proc Rateio_BC_Itens e Ajustes Calc_OF() 
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 29/06/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checagem_Pagina1() "CALCULO_NF_AUTOMATICO"    
;Ultima Alteracao: 12/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina1() Dados destinacao    
;Ultima Alteracao: 30/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem Closed                          
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando CalcVento for parcelas fixas "PARAM_DATAS_VENCTOS"    
;Ultima Alteracao: 13/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Uso campos INSS e IR. Calculo valor nota fiscal                            
;Ultima Alteracao: 27/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Calc_Vencto()
;Ultima Alteracao: 11/06/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Calc_Vencto()
;Ultima Alteracao: 05/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo deduzir descto ICMS_ST_BC                            
;Ultima Alteracao: 30/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons                    
;Ultima Alteracao: 01/10/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Utiliza Forma,Cond.Pgto, dia vencimento cadastro cliente
;Ultima Alteracao: 09/10/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Pega_Preco(s)
;Ultima Alteracao: 15/10/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Pega_Preco(OpcapP) e codigo de barras
;Ultima Alteracao: 14/01/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo ICMS_ST_BC                            
;Ultima Alteracao: 12/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Simples Nacional c/ calculo de ICMS, ST com redu‡Æo BC 
;Ultima Alteracao: 24/07/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Soma dos items que tem rateio do total das despesas                                     
;Ultima Alteracao: 05/11/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques em COBRANCAPGTO nÆo esta mais em aberto/pendente a receber
;Ultima Alteracao: 04/11/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes para nao pegar aliquota do estado caso ICMS esteja em branco
;Ultima Alteracao: 05/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Verifica_Caixa()                       
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo IR se nÆo for utilizado!
;Ultima Alteracao: 17/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calc_Venctos()                       
;Ultima Alteracao: 28/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data_Entrada ChequeI = Data de Entrada ChequeC
;Ultima Alteracao: 11/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor total de cheques em chequec
;Ultima Alteracao: 29/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UTILIZANDO_CP_FP_CLIENTE (condicao e Forma de Pagamento do cliente)
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord 
;Ultima Alteracao: 07/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Libera_Bloqueio()                   
;Ultima Alteracao: 21/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Destinat" -> [Situacao do Cliente]
;Ultima Alteracao: 27/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Nova Estrutura FaturaC, FaturaI, FaturaID, FaturaIG e nota tabela FaturaCC
;Ultima Alteracao: 08/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CHEQUES()
;Ultima Alteracao: 11/07/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Checagem_Pagina1() -> Verifica_Representante()
;Ultima Alteracao: 11/07/2016 por Bruno Carvalho
;Motivo Alteracao: Calcular FRETE quando [Frete Incluso na Nota]="+" -> Caso nÆo queira calcular, usar a op‡Æo "N" *Sol. 24400
;Ultima Alteracao: 02/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina1() liberar soimprir/reemitir
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()
;Ultima Alteracao: 04/11/2016 por Bruno Carvalho
;Motivo Alteracao: Checagem_Pagina1() -> Verifica‡Æo [Tipo Pessoa]=FISICA e CPF inv lido
;Ultima Alteracao: 02/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 10/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado na proc Checagem_Pagina1() -> ALTERA_PRECO_TOTAL p/ permitir altera‡Æo no campo "I_PRECO_TOTAL" se CALCULO_NF_AUTOMATICO="L"
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0396# -> PegaCodigoRaiz()
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado Data_Dialog() para "Data p/ Calculo do Vencimento"
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito] e [Valor INSS] -> [Valor TC]
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao calc_itens()
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes [Valor Servico] -> [Valor Devolucao]
;Ultima Alteracao: 19/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_Preco() pesquisa item e depois codigoraiz
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() 
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0419# -> PegaCodigoRaiz()
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes IMPRIGERAL() -> FT_GNF
;Ultima Alteracao: 22/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado controle para destina‡äes inativas -> DESTIN_INATIVA
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0429#
;Ultima Alteracao: 06/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ [Forma de Pagamento]="RP" na proc Calcular_Vencimentos()
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes closed desabilitado em rotina que usa direto
;Ultima Alteracao: 31/10/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes eliminar Calc_NLinhas_Descricao()
;Ultima Alteracao: 04/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Limite_Credito() p/ BIB_VEND e novos ajustes implementados 
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Cria_Ficha(),CALC_VENCTOS(),Pega_Preco(),Dias_Atraso(),CHEQUES(),Rateio_BC_Itens() p/ BIB_VEND  
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Checa_SPC(),Calcular_Vencimentos(),Data_Dialog() p/ BIB_VEND  

@ 22,28 ?? "Gerando Biblioteca Bib_Tro.Lib"
Style Blink
?? "... "

If IsFile("\\Sistemas\\Vendas\\Bib_Tro.Lib")
   Then Run NoRefresh "Del \\Sistemas\\Vendas\\Bib_Tro.Lib>Nul"
EndIf
CreateLib "\\Sistemas\\Vendas\\Bib_Tro"

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, KM_FRETE, TAXA_FRETE, VRMINIMO_FRETE, CHAVEC,
        PARAM_VISITA, DESTIN_ATUALIZA_PEDIDOS, PARAM_BLOQUEIA_AUTORI,
        PARAM_DIAS_ATRASO, NOVA_DESTINACAO, NOVO_PEDIDO,  
        PARAM_CONTA_CAIXA, OPCAO_RED_BCICMS,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO, 
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, TX_DESCTO_BLOQUEIO, TX_DESCTO_CLIE,
        TRIB_ICMS, TRIB_IPI, UF_EMPRESA, SYS_CODIGO_CLIENTE,
        UFEMPRESA_ALIQUOTA_ICMS,
        ALIQUOTA_CREDITO_ICMS_NOSN, UF_ALIQUOTA_ICMS_INTERNA,
        DP_GERA_DUPLICATA,TPEMPR,CNPJNF_e,NOMENF_e, CHECANFE_AUT, 
        GERDUP_CDESCTO, GERDUP_TXDESCTO, ATIVEMPR, CALCULO_NF_AUTOMATICO,
        PARAM_CONDPAGTO, UTILIZANDO_CP_FP_CLIENTE, ALTERA_PRECO_TOTAL,
        SYS_APLICATIVO

Private CAMPOS_OK, NCAMPO, CDDESTIN

NCAMPO=Field()

;*** Situacao do Cliente ***
GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] to REG_CLIE_PED  
If not RetVal
   Then Mensagem("Cliente Inv lido !")
        CAMPOS_Ok=False
   Else If REG_CLIE_PED["Situacao do Cliente"]="RECADASTRO"
           Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+REG_CLIE_PED["Situacao do Cliente"])
                CAMPOS_Ok=False
        EndIf
        If REG_CLIE_PED["Situacao do Cliente"]="PESSIMO"
           Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
                CAMPOS_Ok=False                                                        
        EndIf
EndIf

;*** Checagem Autorizados ***
If PARAM_BLOQUEIA_AUTORI="S" And
   [Nome Fantasia EmitDest]<>"DIVERSOS"
   Then Monta_Opcoes("Autorizado",[Codigo])
        If Not Checa_Opcoes("Autorizados",[Nome do Autorizado])
           Then Mensagem("Autorizado n„o cadastrado !")
                CAMPOS_Ok=False
        EndIf
EndIf

;*** Checagem Dias em Atraso ***
If PARAM_DIAS_ATRASO  ="S" And
   [FaturaC->Tipo    ]="C" And
   [Nome Fantasia EmitDest]<>"DIVERSOS" And
;;;Search("VIST",[FaturaC->Descricao CondPagto])=0 And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0
   Then If Not Dias_Atraso()
					 Then CAMPOS_Ok=False
        EndIf
EndIf

;*** 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 Upper([Tipo Pessoa])="FISICA" And Len(Tira_CharNum([CGC]))<>11 : Mensagem("CPF inv lido!")
  Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
                                           [IE]="ISENTO"
  OtherWise: CAMPOS_OK=True
EndSwitch

;*** Representante ********* 
If Not Verifica_Representante([FaturaC->Codigo do Representante])
   Then Mensagem("Representante/Vendedor Inativo !")
        CAMPOS_OK=False
EndIf  

;*** Checagem da Tabela de Preco ***
Moveto [Codigo da Tabela]
Ativa_Lookup()
Moveto [Codigo da Tabela]
Locate [FaturaC->Codigo da Tabela]
If RetVal
   Then If [Ativa]="N"
           Then Mensagem("Tabela de Pre‡o Inativa !")
                CAMPOS_Ok=False
        EndIf
EndIf
KeyPress "ESC"

If Search("TROCA",[Descricao da Destinacao])=0
   Then Mensagem("Somente destina‡„o de Troca !")
        CAMPOS_Ok=False
EndIf

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

;*** Checagem da Unidade Federativa c/ CFO ***
Moveto [Codigo da Empresa]
Ativa_Lookup()
Moveto [Codigo da Empresa]
Locate [FaturaC->Codigo da Empresa]
If RetVal
   Then Switch
          Case (SubStr([FaturaC->CFO],1,1)="1" And [FaturaC->UF]<>[UF Empresa]):
               Mensagem("O estado \""+[FaturaC->UF]+"\" de origem usado p/ o CFOP \""+[FaturaC->CFO]+"\"// ‚ diferente da sua Empresa \""+[UF Empresa]+"\" ! ")
               CAMPOS_Ok=False
          Case (SubStr([FaturaC->CFO],1,1)="5" And [FaturaC->UF]<>[UF Empresa]):
               Mensagem("O estado \""+[FaturaC->UF]+"\" de destino usado p/ o CFOP \""+[FaturaC->CFO]+"\"// ‚ diferente da sua Empresa \""+[UF Empresa]+"\" ! ")
               CAMPOS_Ok=False
          Case (SubStr([FaturaC->CFO],1,1)="2" And [FaturaC->UF]=[UF Empresa]):
               Mensagem("O estado \""+[FaturaC->UF]+"\" de origem usado p/ o CFOP \""+[FaturaC->CFO]+"\"// ‚ igual a sua Empresa \""+[UF Empresa]+"\" ! ")
               CAMPOS_Ok=False
          Case (SubStr([FaturaC->CFO],1,1)="6" And [FaturaC->UF]=[UF Empresa]):
               Mensagem("O estado \""+[FaturaC->UF]+"\" de destino usado p/ o CFOP \""+[FaturaC->CFO]+"\"// ‚ igual a sua Empresa \""+[UF Empresa]+"\" ! ")
               CAMPOS_Ok=False
        EndSwitch
EndIf
KeyPress "ESC"

If IsAssigned(REEMITIR) and IsAssigned(SOIMPRIMIR) 
   then if REEMITIR and SOIMPRIMIR
           then CAMPOS_OK=True
        endif
endif        

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

;*** Pega UF/Tipo Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[FaturaC->Codigo da Empresa],"Empresa: "+[FaturaC->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"]
        CNPJNF_e  =Tira_CharNum(REG_BUSCA_LOOKUP["CGC Empresa"])
        NOMENF_e  =REG_BUSCA_LOOKUP["Razao Social Empresa"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
        CNPJNF_e  ="??"
        NOMENF_e  ="??"
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[FaturaC->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 ***
CDDESTIN=[Codigo da Destinacao]
[Codigo da Destinacao]=""
[Codigo da Destinacao]=CDDESTIN

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

Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"")
   Then DESTIN_INATIVA=REG_BUSCA_LOOKUP["Inativo Destin"]
        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"]
        
        If DESTIN_INATIVA="S" 
           Then Mensagem("Destina‡Æo "+[FaturaC->Codigo da Destinacao]+" est  inativa!")
                Return False 
        EndIf
EndIf
;[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

;---- Altera Pre‡o Total se Forma de Calculo na Nota for LIVRE -----------------
ALTERA_PRECO_TOTAL = "N"
If CALCULO_NF_AUTOMATICO="L"
   Then ALTERA_PRECO_TOTAL = "S"
EnDIf

;*** Tabela de Kilometragem ***
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [FaturaC->Codigo]
If RetVal
   Then If IsBlank([Km Frete])
           Then KM_FRETE=0
           Else KM_FRETE=[Km Frete]
        EndIf
        TX_DESCTO_CLIE=[Taxa_Desconto Permitido]
   Else KM_Frete=0
EndIf
KeyPress "ESC"

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"

;--- Verifica Condicao/Forma de Pagamento do Cliente ---------------------------
UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("VERIFICAR", [FaturaC->Codigo])
;-------------------------------------------------------------------------------

Moveto "FaturaC"
Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* 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, 

        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"
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
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

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" ;saida industrializa‡Æo
             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" ;saida industrializa‡Æo
                 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]

  If ( (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And It_csosn_icms[wi]="900" )
     Or TPEMPR="DEBITO/CREDITO"
     Then 
          VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
          VRICMS         =VRICMS       +It_vr_icms[wi]
  EndIf
  
  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]
                                                                          
EndFor

Moveto TabelaRefC
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 Despesas Acessorias]+
                     [Valor do Seguro])

VRNF=[Valor Nota Fiscal]

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

[Valor DebitoCredito]=[Valor Devolucao]-[Valor Nota Fiscal]  
If [Valor DebitoCredito]>0
   Then [Forma de Pagamento]="TC"
EndIf

If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   VRICMS_CREDSN>0 And ALIQUOTA_CREDITO_ICMS_NOSN>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 [Valor TC                 ]=0 Then [Valor TC                 ]=BlankNum() EndIf

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc     ;  (Calc_OF)

;*******************************************************************************
;* Checa Caixa                                                                 *
;*******************************************************************************
Proc Verifica_Caixa(empresa)
private empresa, reg_p_troca, reg_conta

GetRecord "\\Sistemas\\Vendas\\P_Troca" empresa To reg_p_troca
if retval
   then GetRecord "\\Sistemas\\Ctacor\\Conta" reg_p_troca["Codigo_Conta_Caixa"] To reg_conta
        if retval
           then return true
           else MENSAGEM("Conta Caixa: "+reg_p_troca["Codigo_Conta_Caixa"]+", Paramˆtro Troca n„o cadastrada !")
                return false
        endif   
   else MENSAGEM("Paramˆtro Troca Empresa: "+empresa+", n„o cadastrado !")
        return false
endif
EndProc

;*******************************************************************************
;* Rotina para Calcular Numero de Linhas Conforme Descricao do Item            *
;*******************************************************************************
;Proc Closed Calc_NLinhas_Descricao()
;UseVars AutoLib, ErrorProc, VSD_I_Descricao_Item, PARAM_TAMANHO_DESCR, MSG_NUMERO_LINHAS,SYS_APLICATIVO
;
;Private Numero_de_Linhas
;
;MSG_NUMERO_LINHAS=StrVal(Len(VSD_I_Descricao_Item))+"C/"+StrVal(PARAM_TAMANHO_DESCR)+"TL= "
;Numero_de_Linhas=Int(Len(VSD_I_Descricao_Item)/PARAM_TAMANHO_DESCR)
;If (Len(VSD_I_Descricao_Item)/PARAM_TAMANHO_DESCR)>Numero_de_Linhas
;   Then Numero_de_Linhas=Numero_de_Linhas+1
;EndIf
;MSG_NUMERO_LINHAS=MSG_NUMERO_LINHAS+StrVal(Numero_de_Linhas)+" Linha(s)"
;EndProc

;******************************************************************************
;** Monta Procedures                                                        ***
;******************************************************************************
WriteLib "\\Sistemas\\Vendas\\Bib_Tro"
         Checagem_Pagina1,CALC_OF,Verifica_Caixa
