;** Bib_Bal ********************************************************************
;*  Biblioteca de Rotinas do Faturamento                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)      
;Desenvolvido    : 31/01/2004 por Anivel Augusto Rodrigues
;Ultima Alteracao: 18/08/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mesnagem_Venda()
;Ultima Alteracao: 26/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Observacao_Destinacao()
;Ultima Alteracao: 17/04/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tributacao Item,Calculo Substituicao
;Ultima Alteracao: 10/07/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item Tabela de Preco da Consulta
;Ultima Alteracao: 20/09/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IndexOorder
;Ultima Alteracao: 07/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tributacao IPI    
;Ultima Alteracao: 19/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA/CFO                                   
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BCICMS/ICMS Frete                         
;Ultima Alteracao: 28/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BCICMS/ICMS Frete Blank()                  
;Ultima Alteracao: 28/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Bloqueio Venda Tipo<>"C"                   
;Ultima Alteracao: 22/02/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Credito e Cheques                         
;Ultima Alteracao: 28/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco TN
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 05/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 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: 22/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes geral Cred.ICMS NOSN
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito
;Ultima Alteracao: 22/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Meses_SemVenda()
;Ultima Alteracao: 08/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;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: 27/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Orcai->FaturaI
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualizacao ESTQPRM            
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Pecas Brasil Textil            
;Ultima Alteracao: 02/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CalcICMS Adicicionais            
;Ultima Alteracao: 06/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_vendedor A VISTA/A PRAZO/TODAS              
;Ultima Alteracao: 18/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() Isabela Garcia         
;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: 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: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete  
;Ultima Alteracao: 25/04/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checam_pagina1()         
;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: Inclusao 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: 10/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo NF - Valor II                              
;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: 28/12/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina p/ informar VrEntrada na proc CALC_VENCTOS() 
;Ultima Alteracao: 04/01/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustado Proc Mensagem_Venda(), onde foi retirado o CLOSED 
;Ultima Alteracao: 04/01/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustado Proc Mensagem_Venda(), onde foi retirado o CLOSED 
;Ultima Alteracao: 11/01/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado na rotina CALC_VENCTOS a utiliza‡Æo de DATA_BASE
;Ultima Alteracao: 07/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DIA_VENCIMENTO_NOTINHA                            
;Ultima Alteracao: 10/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DIA_VENCIMENTO_NOTINHA                            
;Ultima Alteracao: 20/05/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Faturar pedidos/orcamentos
;Ultima Alteracao: 27/05/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes faturar apenas pedido simples remessa entrega futura
;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: 18/06/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes PARAM_UTILIZA_ENTRADA
;Ultima Alteracao: 03/07/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes nÆo deduzir descto ICMS_ST_BC                            
;Ultima Alteracao: 05/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes taxa desconto imperio rural 0344                   
;Ultima Alteracao: 30/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons                    
;Ultima Alteracao: 30/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes procs que tinham no balcao passaram para bib_bal            
;Ultima Alteracao: 09/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes procs calc_venctos()            
;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: 07/11/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes na op‡Æo F4, quando a forma de pagamento for cartao, so vai buscar os cartoes referente aquela forma de pagamento
;Ultima Alteracao: 22/12/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes na Proc Geral_Dialog, implementado F1 para os campos CIDADE e UF
;Ultima Alteracao: 04/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP E/S checar tipo movimento estoque destina‡Æo 
;Ultima Alteracao: 20/03/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Geral_Dialog() onde linhas h  comentadas de verifica‡Æo de "CT" ou "CD" e composi‡Æo de dias
;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: 14/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calc_Venctos()                       
;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: 12/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes campo CMC7 na digita‡Æo do cheque
;Ultima Alteracao: 19/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowDialog Cheques    
;Ultima Alteracao: 20/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Inclusao FT_ECH para lancamentos de cheques Faturav
;Ultima Alteracao: 22/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes usar pedido conforme cliente
;Ultima Alteracao: 03/03/2016 por Bruno Carvalho
;Motivo Alteracao: Ajsutes nos venctos na utiliza‡Æo de cartÆo de credito, onde estava com processo incorreto
;                  Caso o problema persistir ser  necess rio restruturar todo o c¢digo que utiliza este m‚todo devido a implementa‡Æo incorreta                                                                                                               
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord                    
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Retirado o Closed e UseVars da proc Checa_Comissao_Vendedor() #Sol.2357#
;Ultima Alteracao: 18/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calcular_Vencimentos() NDIAS=0 data base = data de emissao PRALUM
;Ultima Alteracao: 21/05/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Desconto Maximo]
;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: 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: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0396# -> PegaCodigoRaiz()
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado Digita_Frete(),Digita_Cartao(),Digita_Descto(),Datas_Of(),Digita_Obs() no Bib_Vend
;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 INSS] -> [Valor TC]
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao calc_itens()
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 13/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ver_Memo() substitu¡do por Ler_Memo() na proc Mensagem_Venda()
;Ultima Alteracao: 21/09/2017 por Bruno Carvalho
;Motivo Alteracao: Removido de COPIA_PED_ORC_FATURA() -> Edita Descricao do Item, Descricao da Unidade e Descricao da Marca
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA() e movido Checa_MVA() e LOC_TAB_PRECO() p/ Bib_Vend 
;Ultima Alteracao: 18/10/2017 por Bruno Carvalho
;Motivo Alteracao: Removido [Aliquota Reduzida BCIPI] e [Composicao de Dias] -> COPIA_PED_ORC_FATURA() 
;Ultima Alteracao: 06/11/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao realizar o SCAN -> ATUA_SITUACAO_PEDIDO_ORCAMENTO() **[Quantidade Faturada]>=[Quantidade]
;Ultima Alteracao: 27/01/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Informacoes_Adicionais] do OrcaI na proc COPIA_PED_ORC_FATURA()
;Ultima Alteracao: 19/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_Preco() pesquisa item e depois codigoraiz

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

If IsFile("\\Sistemas\\Vendas\\Bib_Bal.Lib")
   Then Run NoRefresh "Del \\Sistemas\\Vendas\\Bib_Bal.Lib>Nul"
        Sleep 2000
EndIf
CreateLib "\\Sistemas\\Vendas\\Bib_Bal"  Size 100
Sleep 2000

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private OpcaoP, TABPR, CPGTO, CodClie, CodRepr, CodItem,
        PesqOk, Registro_Tab_Preco, Registro_TabPreco_CondPagto,  regItens,
        wii,coditemtemp

If PARAM_TABPR_ITEM="S"
   Then If OpcaoP = "Cod_Barras"
           Then TABPR=[FaturaC->Codigo da Tabela]
           Else TABPR=[FaturaI->Codigo da Tabela]
        EndIf
   Else If Not Item_Ins_Consulta
           Then TABPR=[FaturaC->Codigo da Tabela]
           Else TABPR=[Codigo da Tabela]
        EndIf
EndIf
CPGTO=[FaturaC->Condicao de Pagamento]

CodClie         =[FaturaC->Codigo                 ]
CodRepr         =[FaturaC->Codigo do Representante]

CodItem         =VSD_I_Codigo_Item
ITEM_PROMOCIONAL="N"
PesqOk          =False

GetRecord "\\Sistemas\\Estoque\\Itens" CodItem To regItens
If RetVal
   Then 
        If PARAM_UTILIZA_TABPR_CLIENTE="S"
           Then 
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, coditemtemp To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        If PARAM_UTILIZA_TABPR_REPRES="S" and Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, coditemtemp To Registro_TabPreco_Item   
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        If Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, coditemtemp          To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
EndIf

If PesqOK
   Then ITEM_PROMOCIONAL=Registro_TabPreco_Item["Em Promocao"]

        If OpcaoP="Checa"
           Then Return True
        EndIf

        If PARAM_PEGAPRECO_CPAGTO = "S"
           Then 
                PesqOk=False
                Moveto [Lookup_TabPreco_CondPagto]
                Ativa_Lookup()
                Moveto [Codigo da Tabela]
                Locate TABPR
                If RetVal
                   Then While [Codigo da Tabela] = TABPR
                          If [Condicao de Pagamento] = CPGTO
                             Then CopyToArray Registro_TabPreco_CondPagto
                                  PesqOK=True
                                  QuitLoop
                          EndIf
                          Skip
                          If Eot()
                             Then QuitLoop
                          Endif
                        EndWhile
                Endif
                KeyPress "ESC"
                If PesqOk
                   Then [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)

                        If TX_DESCTO_CLIE>0
                           Then [Preco Unitario Tabela]=[Preco Unitario]
                                [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
                        EndIf

                   Else [Preco Unitario       ]=BlankNum()
                        [Preco Unitario Tabela]=BlankNum()
                EndIf
           Else [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
                [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]

                If TX_DESCTO_CLIE>0
                   Then [Preco Unitario Tabela]=[Preco Unitario]
                        [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
                EndIf

        EndIf
   Else [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()
EndIf

VSD_I_Preco_Unitario=[Preco Unitario       ]
VSD_I_Preco_Tabela  =[Preco Unitario Tabela]

EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, KM_FRETE, TAXA_FRETE, VRMINIMO_FRETE,
        CHAVEC, DESTIN_ATUALIZA_PEDIDOS, PARAM_BLOQUEIA_AUTORI, PARAM_DIAS_ATRASO,V_DESTIOBS,
        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, ATIVEMPR, CALCULO_NF_AUTOMATICO,
        CLIENTE_TPASSIT, CLIENTE_CDPGTO, CLIENTE_FPGTO, CLIENTE_DIAVENCTO, ALTERA_PRECO_TOTAL
    
Private CAMPOS_OK, NCAMPO, OBS, 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 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  

;*** CFOP E/S **************
Switch
  Case [Tipo Movimento Estoque]="S" And SubStr([CFO],1,1)<"5":
   Mensagem("CFOP informado "+[CFO]+",//nÆo ‚ uma opera‡Æo de saida conforme a destina‡Æo utilizada !")
   CAMPOS_Ok=False
  Case [Tipo Movimento Estoque]="E" And SubStr([CFO],1,1)>"3":
   Mensagem("CFOP informado "+[CFO]+",//nÆo ‚ uma opera‡Æo de entrada conforme a destina‡Æo utilizada !")
   CAMPOS_Ok=False
EndSwitch

;*** 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" And [Tipo]="C" And Not IsBlank([Nome do Autorizado])
   Then Monta_Opcoes("Autorizado",[Codigo])
        If Not Checa_Opcoes("Autorizado",[Nome do Autorizado])
           Then Mensagem("Autorizado n„o cadastrado !")
                CAMPOS_Ok=False
        EndIf
EndIf

;*** Checagem Dias em Atraso ***
If (PARAM_DIAS_ATRASO="S" Or PARAM_DIAS_ATRASO="P") 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 Clientes Diversos a Prazo ***
If [Nome Fantasia EmitDest]="DIVERSOS" And
   [FaturaC->Tipo de Pagamento]="P" And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0
   Then Mensagem("Venda a Prazo p/ Cliente DIVERSOS n„o permitida !") 
				CAMPOS_Ok=False
EndIf

If SYS_CODIGO_CLIENTE="0102"
   Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo]<>"C"
           Then Mensagem("Venda n„o permitida p/ Destinat rio diferente de Cliente !")
                CAMPOS_Ok=False
        EndIf
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"

;*** Checagem de CPF/CNPJ ***
If SYS_CODIGO_CLIENTE="0051" Or SYS_CODIGO_CLIENTE="0228" 
   Then VERIFICA_CPF=[CGC]
        VERIFICA_CFO=[CFO]
        If VERIFICA_CFO="6102" And Len(Tira_CharNum(VERIFICA_CPF))<>14
           Then Mensagem("Para este CFO somente pessoa Jur¡dica!")
                CAMPOS_Ok=False
        EndIf
EndIf   

;*** Pega UF 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"]
   Else UF_EMPRESA="??"
EndIf

;*** Checagem da Unidade Federativa c/ CFO ***
If [Codigo]<>[Codigo da Empresa]
   Then Moveto [Codigo da Empresa]
        If Busca_Lookup("Codigo da Empresa",[FaturaC->Codigo da Empresa],"")
           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
EndIf

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]
Ativa_Lookup()
Moveto [UF]
Locate [FaturaC->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
        UF_ALIQUOTA_ICMS_INTERNA =[Aliquota de ICMS_INTERNA]
   Else UF_ALIQUOTA_ICMS=BlankNum()
        UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
EndIf
KeyPress "ESC"

;*** Condicao Pagto ***
Moveto [Condicao de Pagamento]
Ativa_Lookup()
Moveto [Condicao de Pagamento]
Locate [FaturaC->Condicao de Pagamento]
If RetVal
   Then TX_DESCTO_BLOQUEIO=[Taxa Desconto]
   Else TX_DESCTO_BLOQUEIO=0
EndIf
KeyPress "ESC"

If SYS_CODIGO_CLIENTE="0344"
   Then If TX_DESCTO_BLOQUEIO>0 And [FaturaC->Taxa de Desconto]<=0 
           Then [FaturaC->Taxa de Desconto]=TX_DESCTO_BLOQUEIO 
        EndIf
EndIf            

;*** Aliquota/Tributacao/Observacao da Destinacao ***
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",[FaturaC->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=1 And V_DESTIOBS=1 Then [Observacao na Nota Fiscal]=OBS EndIf

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

;--- Pega dados do cliente p/ cond.pgto ----------------------------------------
CLIENTE_TPASSIT  =""
CLIENTE_CDPGTO   =""
CLIENTE_FPGTO    =""
CLIENTE_DIAVENCTO=""

Moveto [Codigo]
If Busca_Lookup("Codigo",[FaturaC->Codigo],"SM")
   Then CLIENTE_TPASSIT  =REG_BUSCA_LOOKUP["Tipo Assistencia"]
        CLIENTE_CDPGTO   =REG_BUSCA_LOOKUP["CondPagto Cliente"]
        CLIENTE_FPGTO    =REG_BUSCA_LOOKUP["Forma Pagamento Cliente"]
        CLIENTE_DIAVENCTO=REG_BUSCA_LOOKUP["Dia_Vencimento_Notinha"]
EndIf
;-------------------------------------------------------------------------------

Moveto "FaturaC"
Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Chamar Calculo de Vencimentos                                   *
;*******************************************************************************
Proc CALC_VENCTOS()
   
;-- Verifica se composicao de dias ‚ correta -----------------------------------
If Not Checa_CompDias([FaturaC->Composicao de Dias])
   Then Return
EndIf      

Calcular_Vencimentos()

Release Procs Calcular_Vencimentos
EndProc   ;  (CALC_VENCTOS)


;*******************************************************************************
;* Rotina para Calcular de Vencimentos                                         *
;*******************************************************************************
Proc Calcular_Vencimentos()
Private NP, NPC, pos_s, AUX_NP,  
        VRVENCTO, VRDIFERE, VRENTRADA, VR_NF,
        j, i,
        DTBASE, DTVENCTO,
        NDIAS, DIA_VECTO, MES_VECTO, ANO_VECTO, ANO_AUXILIAR, CONT_NDIAS,
        vrbaseoperacao, vrtitcred, delok, seq, tementrada, temcredito

;-- Verifica se composicao de dias ‚ correta -----------------------------------
If Not Checa_CompDias([FaturaC->Composicao de Dias])
   Then Return
EndIf      

;-- checa qual a data base para calculo dos vencimentos ------------------------
If [FaturaC->Tipo de Pagamento]<>"O" ; outros
   then
        If PARAM_DATA_BASE="S"
           Then 
                If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
                If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 
                VSD_Data_Base=[FaturaC->Data de Emissao]
           
                Echo Normal
                Echo Off
           
                Showdialog "Data p/ Calculo do Vencimento" Proc "Geral_Dialog"
                Trigger "OPEN","ARRIVE"
                Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
                @ 09,19 height 04 width 40
           
                Label  @ 1,03 "Informe a Data:" for "Data_Base"
                Accept @ 1,20  Width 13 "D" picture "#[#].##.##[##]" Tag "Data_Base" to VSD_Data_Base
           
                Enddialog
                Switch
                    Case Retval="ESC":
                         Return
                EndSwitch   
                Mouse Show
                DTBASE=VSD_Data_Base
          Else
                Switch
                  Case IsBlank([FaturaC->Data de Saida])                   : DTBASE=[FaturaC->Data de Emissao]
                  Case [FaturaC->Data de Saida]=[FaturaC->Data de Emissao] : DTBASE=[FaturaC->Data de Emissao]
                  OtherWise:
                    Echo Normal
                    Echo Off
              
                    ShowPopup " Calcular vencimentos sobre " CENTERED
                        "Data de ~E~miss„o" : " Calcula vencimentos sobre data de emiss„o":"EMISSAO",
                        "Data de ~S~aida"   : " Calcula vencimentos sobre data de saida  ":"SAIDA"
                    EndMenu
                  To Opcaoc
              
                    echo off
              
                  If Opcaoc="SAIDA"
                     Then DTBASE=[FaturaC->Data de Saida  ]
                     Else DTBASE=[FaturaC->Data de Emissao]
                  EndIf
                EndSwitch
        EndIf
endif
;-- inicializa‡Æo titulo de credito --------------------------------------------
temcredito=false
vrtitcred =0

;-- Excluir venctos existentes para gerar novos --------------------------------
Moveto "FaturaV"
Home
while true
  if RecordStatus("New")
     then quitloop
  endif   

  delok=true
  if PARAM_TITCRED="T" And 
     [Forma de Pagamento]="TC" and
     ( substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" ) 
     then temcredito=true
          delok=false
  endif
  if delok
     then unlockrecord
          del
     else skip  
          if eot() then quitloop endif   
  endif        

endwhile

If [FaturaC->Tipo de Pagamento]="O" ; outros
   Then Moveto "FaturaC"
        Return
EndIf      

;-- Soma valores p/ titulo de credito ------------------------------------------
if temcredito            
   then 
        i=0
        Moveto "FaturaV"
        Home
        while true
          if RecordStatus("New")
             then quitloop
          endif   
        
          if PARAM_TITCRED="T" And 
             [Forma de Pagamento]="TC" and
             ( substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" ) 
             then i=i+1
                  [Sequencia]=AlinhM(StrVal(i),2) ; refaz ordem da sequencia
                  vrtitcred  =vrtitcred+[Valor]
          endif
          skip   
          if eot() then quitloop endif   
        
        endwhile
endif
       
;-- Calcula Numero parcelas na operacao ----------------------------------------
NP            = [FaturaC->Numero de Parcelas] ; np da nota
NPC           = 1                             ; np base da composica
i             = 1                                  
If Not IsBlank([FaturaC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[FaturaC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf

If NPC=0
   Then NP=[FaturaC->Numero de Parcelas]
   Else If NPC=1 And [FaturaC->Numero de Parcelas]>1
           Then NP=[FaturaC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

;-- inicializa‡Æo da entrada ---------------------------------------------------
VRENTRADA=0
If IsAssigned(VSD_VrEntrada) 
   Then VRENTRADA=VSD_VrEntrada
        release vars VSD_VrEntrada
EndIf

If (PARAM_UTILIZA_ENTRADA="1" Or PARAM_UTILIZA_ENTRADA="2") And VRENTRADA>0
   Then tementrada=True
   Else tementrada=False
endif  
if NP=1 and tementrada Then tementrada=False endIf  
if not tementrada      Then VRENTRADA =0     endif   

;-- Valor base para parcelamentos ----------------------------------------------
vrbaseoperacao=[FaturaC->Valor Nota Fiscal]
VR_NF = vrbaseoperacao

;-- Verifica Novo VR_NF para parcelamentos -------------------------------------
If tementrada
   Then VR_NF = VR_NF-VRENTRADA
EndIf
if temcredito
   then VR_NF = VR_NF-vrtitcred
endif        
If PARAM_TITCRED="T" 
   then VR_NF = VR_NF+[FaturaC->Valor TC]
endif
 
if VR_NF<=0  ; creditos > vrnf
   then Moveto "FaturaC"
        return
endif

;-- Calcula valor da parcela e diferen‡a ---------------------------------------
AUX_NP=NP
If tementrada
   Then AUX_NP=NP-1
EndIf
VRVENCTO     = NDecimal(((VR_NF)/AUX_NP),2)
VRDIFERE     = VR_NF-(VRVENCTO*AUX_NP)

;--O Calcula valor da comissao e diferen‡a -------------------------------------
; calculo de comissao ‚ feito na proc RATEIO_COMISSAO_VENCTOS()
;-------------------------------------------------------------------------------

;-- Gerar parcelas -------------------------------------------------------------
j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[FaturaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,(Len([FaturaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([FaturaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,Len([FaturaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf
  
  If PARAM_DATA_BASE="S" and i=1 and NDIAS=0
     then DTVENCTO=[FaturaC->Data de Emissao]
     else DTVENCTO=DTBASE
  endif     
  
  While True
    Moveto [Sequencia]
    End
    SEQ = [Sequencia]
    Down
    [Numero da OF     ]=[FaturaC->Numero da OF]

    Moveto [Sequencia]
    Seta_Sequencia(SEQ,False)
    If not IsLockRecord()
       then quitloop
       else Del
    EndIf
  EndWhile

  ;-- calcula ndias e data vencto ----------------------------------------------
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day(DTVENCTO)
                  MES_VECTO=Month(DTVENCTO)
                  ANO_VECTO=Year(DTVENCTO)
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
             Else ;Quando o informar Composi‡Æo de Dias = 0 "Seria como ENTRADA"
                  If NDIAS=0 
                     Then CONT_NDIAS=i-1
                     Else CONT_NDIAS=i
                  EnDIf  
                  If Not IsAssigned(DIAS_NDIAS) Then DIAS_NDIAS=NDIAS EndIf
                  
                  [Numero de Dias   ]=DIAS_NDIAS*CONT_NDIAS
                  [Data             ]=DTVENCTO+(DIAS_NDIAS*CONT_NDIAS)
                  
                  If NDIAS=0 
                     Then DIAS_NDIAS=30
                  EndIf  
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=DTVENCTO+NDIAS
  EndIf  

  ;-- verifica forma de pagamento ----------------------------------------------
  If i=1 And NP>1 And NDIAS=0
     Then [Forma de Pagamento]="DN" 
     Else [Forma de Pagamento]=[FaturaC->Forma de Pagamento]
  EndIf   

  ;-- verifica regra do cliente ------------------------------------------------
  If ;UTILIZA_CP_FP And
     [FaturaC->Tipo Movimento Estoque]="S" And
     Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
     CLIENTE_TPASSIT  ="RECEBEDIAFIXO" And
     CLIENTE_CDPGTO   =[FaturaC->Condicao de Pagamento]  And
     CLIENTE_FPGTO    =[FaturaC->Forma de Pagamento] And
     CLIENTE_DIAVENCTO>""
     Then
          DIA_VECTO=NumVal(CLIENTE_DIAVENCTO)
          MES_VECTO=Month(Ultimo_Dia(AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)+StrVal(Year([FaturaC->Data de Emissao])))+1)
          ANO_VECTO= Year(Ultimo_Dia(AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)+StrVal(Year([FaturaC->Data de Emissao])))+1)
          
          ;*********** Verificando o Ultimo dia do Mˆs *****************
          Switch
            Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                 DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
            Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
          EndSwitch
          [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
          [Numero de Dias   ]=[Data]-[FaturaC->Data de Emissao]
  Endif   

  ;-- verifica valores ---------------------------------------------------------
  Switch
    Case i=1 And tementrada  : [Valor            ]=VRENTRADA
                                                   
    Case i<>NP               : [Valor            ]=VRVENCTO

    Case i=NP                : [Valor            ]=VRVENCTO+VRDIFERE
  EndSwitch

;-- Pega dados do cartao -------------------------------------------------------
  If [Forma de Pagamento]="CT" Or
     [Forma de Pagamento]="CD" Or
     [Forma de Pagamento]="CL"
     Then [Nome do Cartao  ]=Nome_Cartao
          [Numero do Cartao]=Numero_Cartao
  EndIf

  UnLockRecord

  i=i+1
EndWhile

Moveto "FaturaC"
Sleep 500

EndProc

;*******************************************************************************
;* 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
VRIR           =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" ;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 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 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

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 Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao_Vendedor()
;UseVars AutoLib, ErrorProc, PARAM_UTILIZA_COMISSAO_VENDREAL, SYS_CODIGO_CLIENTE
Private Tx_Comissao, Tx_Descto, Tx_Encontrada, Vr_Descto, NCampo,
        TOT_MERC_TABELA, TOT_MERC_VENDAS, DIFER, 
        CODREP, CODTAB, CODCDIA, wc1, wc2, wc3

If [FaturaC->Tipo de Pagamento]="O"
   Then Return True
EndIf

NCampo=Field()

If PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then TOT_MERC_TABELA=0
        TOT_MERC_VENDAS=[FaturaC->Valor Mercadoria Liquido]

        Moveto "FaturaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+Round(([Quantidade]*[Preco Unitario Tabela]),2)
        EndScan
        Moveto "FaturaC"

        DIFER=TOT_MERC_VENDAS-TOT_MERC_TABELA
        If DIFER<0
           Then DIFER=DIFER*-1
                Tx_Descto=Round(((DIFER*100)/TOT_MERC_TABELA),2)
           Else Tx_Descto=0
        EndIf
   Else If [FaturaC->Taxa de Desconto]>0
           Then Tx_Descto=[FaturaC->Taxa de Desconto ]
           Else Vr_Descto=[FaturaC->Valor do Desconto]
                Tx_Descto=(Vr_Descto/[FaturaC->Valor Mercadoria])*100
        EndIf
EndIf

Tx_Comissao  =BlankNum()
Tx_Encontrada=False

Moveto [Lookup_Trdescto]
Ativa_Lookup()
Moveto [Codigo da Empresa]
For wc1 From 1 To 2
  Switch
    Case wc1=1 : CODTAB=[FaturaC->Codigo da Tabela       ]
    Case wc1=2 : CODTAB="00000"
  EndSwitch

  For wc2 From 1 To 2
    Switch
      Case wc2=1 : CODREP=[FaturaC->Codigo do Representante]
      Case wc2=2 : CODREP="0000"
    EndSwitch

    For wc3 From 1 To 3
      Switch
        Case wc3=1 : CODCDIA=[FaturaC->Composicao de Dias]
        Case wc3=2 : Switch
                       Case [FaturaC->Tipo de Pagamento]="V": CODCDIA="A VISTA"
                       Case [FaturaC->Tipo de Pagamento]="P": CODCDIA="A PRAZO"
                     EndSwitch
        Case wc3=3 : CODCDIA="TODAS"
      EndSwitch
  
      Locate [FaturaC->Codigo da Empresa],CODTAB,CODREP,CODCDIA
      If Retval
         Then Tx_Encontrada=True
              QuitLoop
      EndIf
    EndFor
    If Tx_Encontrada Then QuitLoop EndIf
    
  EndFor
  If Tx_Encontrada Then QuitLoop EndIf
 
EndFor

If Tx_Encontrada
   Then Tx_Encontrada=False
        While [Codigo da Empresa      ]=[FaturaC->Codigo da Empresa      ] And
              [Codigo da Tabela       ]=CODTAB                             And
              [Codigo do Representante]=CODREP                             And
              [Composicao de Dias     ]=CODCDIA

          If [Taxa de Desconto]<=Tx_Descto
             Then Tx_Comissao  =[Taxa de Comissao Normal]
                  Tx_Encontrada=True
             Else QuitLoop
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf
KeyPress "ESC"
Moveto Field NCampo

If IsBlank(Tx_Comissao) Or Not Tx_Encontrada
   Then MSG="% Comiss„o n„o encontrada conforme tabela: //"
        MSG=MSG+"Tabela/Representante/Composi‡„o de Dias/Descontos/Comiss„o, // //Verificar Ok !"
        Mensagem(MSG)
        Return False
   Else [Comissao do Representante]=Tx_Comissao
        Return True
EndIf                                      

EndProc

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG
                              
;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
ESTQ_MES = AlinhM(StrVal(Month(AUX_DATA)),2)
ESTQ_ANO = StrVal(Year(AUX_DATA))                              

MSG="N„o foi encontrada a ficha de estoque referente a "+ESTQ_MES+"/"+ESTQ_ANO+" !// //"
MSG=MSG+Format("W08,AL","Empresa")   +"| "+Format("W11,AL","Item")   +"//"
MSG=MSG+Format("W08,AL",ESTQ_EMPRESA)+"| "+Format("W11,AL",ESTQ_ITEM)+"//"
MSG=MSG+"Observacoes:                                                           //"
MSG=MSG+"1. Talvez n„o foi executada a transferˆncia de saldos do mˆs anterior; //"
If ESTQ_CONFIRMA
   Then MSG=MSG+"2. Se for criada agora o saldo inicial deste item ser  igual a 0.      //"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cria-la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
   Else MSG=MSG+"2. A ficha do item ser  criada com o saldo inicial igual a 0.          //"
        Mensagem(MSG)
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Atualiza Situacao do Pedido ou Orcamento                                    *
;*******************************************************************************
Proc Closed ATUA_SITUACAO_PEDIDO_ORCAMENTO()
UseVars AutoLib, ErrorProc, PARAM_PEDIDO, SYS_CODIGO_CLIENTE

Private WC_NUMPED, WC_PEDFAT
 
WC_NUMPED=0
WC_PEDFAT=0
Scan
  WC_NUMPED=WC_NUMPED+1
  If [Quantidade Faturada]>=[Quantidade]
     Then WC_PEDFAT=WC_PEDFAT+1
  EndIf
EndScan
If WC_NUMPED>0
   Then If PARAM_PEDIDO="S" And Not IsBlank([FaturaC->Numero do Pedido   ]) 
           Then Moveto "PedidoC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Pedido   ]="FATURADO"
                   Else If SYS_CODIGO_CLIENTE = "0377"
                           Then [Situacao do Pedido   ]="FATURADO"
                           Else [Situacao do Pedido   ]="ABERTO"
                        EndIf
                EndIf
           Else Moveto "OrcaC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Orcamento]="FATURADO"
                   Else [Situacao do Orcamento]="ABERTO"
                EndIf
        EndIf
        UnLockRecord
        SaveTables
EndIf
EndProc     ; (Atua_Situacao_Pedido_Orcamento)


;*******************************************************************************
;* Copia Dados do Item do Pedido/Orcamento p/ Item da Fatura                   *
;*******************************************************************************
Proc Closed COPIA_PED_ORC_FATURA()
UseVars AutoLib, ErrorProc, PARAM_PEDIDO, PARAM_COMIS_MARCA, 
        SYS_CODIGO_CLIENTE, infadicitem,
        TPEMPR, ALIQUOTA_CREDITO_ICMS_NOSN, SYS_CLIENTE_CONFEC, ATIVEMPR, UF_ALIQUOTA_ICMS_INTERNA

If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""   EndIf

If PARAM_PEDIDO="S"
   Then [Numero Pedido_Orcamento ]=[PedidoI->Numero do Pedido        ]
        [Item Pedido_Orcamento   ]=[PedidoI->Item do Pedido          ]
        [Codigo do Item          ]=[PedidoI->Codigo do Item          ]
        [Tipo do Item            ]=[PedidoI->Tipo do Item            ]
        [Descricao do Item       ]=[PedidoI->Descricao do Item       ]
                
        If SYS_CODIGO_CLIENTE = "0003" And 
           Search("VENDA",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S" And
           [Tipo do Item]="P"
           Then 
                [Descricao do Item]=SubStr([PedidoI->Descricao do Item],1,30)

                infadicitem="" 
                If RTrim(SubStr([PedidoI->Descricao do Item],31,4))<>""
                   Then infadicitem=infadicitem+"Modelo: "+Completa(RTrim(SubStr([PedidoI->Descricao do Item],31,4)),5," ")
                EndIf
                If RTrim([PedidoI->Descricao da Cor_Tecido ])<>""
                   Then infadicitem=infadicitem+"Qtd Pecas: "+RTrim([PedidoI->Descricao da Cor_Tecido ])+" "
                EndIf
                If Not IsBlank([PedidoI->Observacao_Item])
                   Then infadicitem=infadicitem+"Cores: "+RTrim([PedidoI->Observacao_Item])
                EndIf   
                [Informacoes_Adicionais]=Infadicitem
        EndIf
        
    ;-- Informa‡äes Adicionais do Pedido -----------------------------------
        If PARAM_PEDIDO="S"
           Then GetRecord "\\Sistemas\\Vendas\\PedidoI" [PedidoI->Numero do Pedido],[PedidoI->Item do Pedido] To REG_ITEMPED
                If Retval
                   Then
                        ;-- Informac‡äes Adicionais --------------------------------------------------
                        If REG_ITEMPED["Informacoes_Adicionais"]<>"" And Search(REG_ITEMPED["Informacoes_Adicionais"],[Informacoes_Adicionais])=0 
                           Then If Not isblank([Informacoes_Adicionais])
                                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais]  + "-" + REG_ITEMPED["Informacoes_Adicionais"] 
                                   Else [Informacoes_Adicionais] = REG_ITEMPED["Informacoes_Adicionais"]
                                EndIf   
                        EndIf
                EndIf
        EndIf        
        
        If SYS_CODIGO_CLIENTE = "0319"
           Then Moveto [Codigo do Item]
                If Busca_Lookup("Codigo do Item",[FaturaI->Codigo do Item],"")
                   Then If len([Descricao do Item])<=30
                           Then [Descricao do Item]=Completa([Descricao do Item],31," ")+Reg_Busca_Lookup["Codigo Fornecedor"]
                        EndIf
                EndIf
        EndIf        
        
        [Codigo da Cor_Tecido    ]=[PedidoI->Codigo da Cor_Tecido    ]
        [Descricao da Cor_Tecido ]=[PedidoI->Descricao da Cor_Tecido ]
        [Tamanho                 ]=[PedidoI->Tamanho                 ]

        If [FaturaC->Tipo Movimento Estoque]="S"
           Then [Quantidade      ]=[PedidoI->Quantidade]-[PedidoI->Quantidade Faturada]
           Else [Quantidade      ]=[PedidoI->Quantidade]
        EndIf   

        If [Tributacao de ICMS]<>"D" And Not IsBlank([Tipo Tributacao])
          Then Switch
                Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
                Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
                Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
        			 EndSwitch
        EndIf
        
        ;* Seta Variaveis PegaCFOP
        Checa_CFOP      =[FaturaC->Tipo Movimento Estoque]
        Switch
          Case SYS_CODIGO_CLIENTE="0268": CFO_C=[PedidoI->CFO]
          OtherWise                     : CFO_C=[FaturaC->CFO]
        EndSwitch
        CFOP_TPITEM     =[Tipo do Item      ]
        CFOP_TRIBICMS   =[PedidoI->Tributacao de ICMS      ]
        CFOP_TPTRIB     =[PedidoI->Tipo Tributacao         ]
        CFOP_EMPRESA    =[FaturaC->Codigo da Empresa       ]
        CFOP_ATIVEMPRESA=ATIVEMPR

        Play "\\Sistemas\\Exporta\\PegaCFOP"

        Switch
          Case SYS_CODIGO_CLIENTE="0268": 
            [CFO            ]=[PedidoI->CFO]
            [Tipo Tributacao]=[PedidoI->Tipo Tributacao         ]
          OtherWise                     : 
            [CFO            ]=CFO_C
            [Tipo Tributacao]=CFOP_TPTRIB
        EndSwitch

        If Search("VENDA",[FaturaC->Descricao da Destinacao])=0 And [FaturaC->Tipo Movimento Estoque]<>"S"
          Then [PIS_CST        ]  ="99"
               [PIS_ALIQUOTA   ]=BlankNum() 
               [COFINS_CST     ]  ="99"
               [COFINS_ALIQUOTA]=BlankNum() 
        EndIf   

        [Unidade Fiscal          ]=[PedidoI->Unidade Fiscal          ]
        [Preco Unitario          ]=[PedidoI->Preco Unitario          ]
        [Preco Unitario Tabela   ]=[PedidoI->Preco Unitario Tabela   ]
    
        [Tipo Desconto Item      ]=[PedidoI->Tipo Desconto Item      ]
        [Taxa Desconto Unitario  ]=[PedidoI->Taxa Desconto Unitario  ]
        [Valor Desconto Unitario ]=[PedidoI->Valor Desconto Unitario ]
        If [Tipo Desconto Item]="U"
           Then [Valor Desconto Item]=Round([Quantidade]*[Valor Desconto Unitario ],2)
           Else [Valor Desconto Item]=[PedidoI->Valor Desconto Item  ]
        EndIf
        
        [Preco Total             ]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]

        [Tributacao de IPI       ]=[PedidoI->Tributacao de IPI       ]
        [Aliquota de IPI         ]=[PedidoI->Aliquota de IPI         ]
        [Valor do IPI            ]=[PedidoI->Valor do IPI            ]
        [Tributacao de ICMS      ]=[PedidoI->Tributacao de ICMS      ]
        [Aliquota Reduzida BCICMS]=[PedidoI->Aliquota Reduzida BCICMS]
        [Aliquota de ICMS        ]=[PedidoI->Aliquota de ICMS        ]
        [Valor do ICMS           ]=[PedidoI->Valor do ICMS           ]
        [ICMS_ST_Aliquota Reduzida]=[PedidoI->ICMS_ST_Aliquota Reduzida]
        [ICMS_ST_Aliquota        ]=[PedidoI->ICMS_ST_Aliquota         ]
        [Tributacao de ISSQN     ]=[PedidoI->Tributacao de ISSQN     ]
        [Aliquota de ISSQN       ]=[PedidoI->Aliquota de ISSQN       ]
        [Valor do ISSQN          ]=[PedidoI->Valor do ISSQN          ]
        [Taxa Desconto Total     ]=[PedidoI->Taxa Desconto Total     ]
        [Valor Desconto Total    ]=[PedidoI->Valor Desconto Total    ]
        [Peso Liquido            ]=[PedidoI->Peso Liquido            ]
        [Peso Embalagem          ]=[PedidoI->Peso Embalagem          ]
        [Volumes                 ]=[PedidoI->Volumes                 ]
        ;[Condicao de Pagamento   ]=[PedidoI->Condicao de Pagamento   ]
        [Comissao do Item        ]=[PedidoI->Comissao do Item        ]
        [Codigo da Tabela        ]=[PedidoI->Codigo da Tabela        ]
        [MVA                     ]=[PedidoI->MVA                     ]
        [Codigo MVA              ]=[PedidoI->Codigo MVA              ]
        [CSOSN                   ]=[PedidoI->CSOSN                   ]

        If [FaturaC->Tipo Movimento Estoque]="E"                     And
           (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
           Search("DEVOL",[FaturaC->Descricao da Destinacao])>0      And
           SYS_CLIENTE_CONFEC<>""
           Then [CSOSN                  ]="400"
                [Tipo Tributacao        ]=SubStr([Tipo Tributacao],1,1)+"90"
                [Tributacao de ICMS     ]="O"
        EndIf

        If [FaturaC->Tipo Movimento Estoque]="S"                     And
           (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
           (Search("SIMPLES",[FaturaC->Descricao da Destinacao])>0    Or
            Search("OUTRAS" ,[FaturaC->Descricao da Destinacao])>0)  And
           SYS_CLIENTE_CONFEC<>""
           Then [CSOSN                  ]="400"
                [Tipo Tributacao        ]=SubStr([Tipo Tributacao],1,1)+"90"
                [Tributacao de ICMS     ]="O"
        EndIf

        If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
           Then If ([CSOSN]="101" Or [CSOSN]="201") And [ICMS_CREDSN_Aliquota]<=0
                   Then [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                EndIf
                If ([CSOSN]="201" Or [CSOSN]="202" Or [CSOSN]="203") And [ICMS_ST_Aliquota]<=0
                   Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                EndIf
           Else    
                TribCST=SubStr([Tipo Tributacao],2,2)
                If (TribCST="10" Or TribCST="30" Or TribCST="70") And [ICMS_ST_Aliquota]<=0
                   Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                EndIf
        EndIf   
                
        If SYS_CODIGO_CLIENTE="0079"             And
           [Faturac->Codigo da Empresa]="0001"   And
           [FaturaC->Tipo Movimento Estoque]="S"
           Then
               [Tributacao de ICMS     ]="O"
               [Aliquota de ICMS       ]=BlankNum()
               [Tipo Tributacao        ]="090"
               [CSOSN                  ]="101"

               If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                  Then If [FaturaC->TIPO PESSOA]="FISICA" Or Not ALIQUOTA_CREDITO_ICMS_NOSN>0 
                          Then Switch
                                 Case [CSOSN]="101": [CSOSN]="102" 
                                 Case [CSOSN]="201": [CSOSN]="202" 
                               EndSwitch
                       EndIf
               EndIf

               If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
                  (Search("MOSTR",[FaturaC->Descricao da Destinacao])>0     Or
                   Search("DEVOL",[FaturaC->Descricao da Destinacao])>0     Or
                   Search("BRIND",[FaturaC->Descricao da Destinacao])>0)    And
                  SYS_CLIENTE_CONFEC<>""
                  Then [CSOSN]="400"
               EndIf

               [PIS_CST                ]="99"
               [PIS_ALIQUOTA           ]=BlankNum()
               [COFINS_CST             ]="99"
               [COFINS_ALIQUOTA        ]=BlankNum()
         EndIf

         If SYS_CODIGO_CLIENTE="0003" And ([CFO]="6109" Or [CFO]="6924")
          Then [PIS_CST                ]="08"
               [PIS_ALIQUOTA           ]=BlankNum()
               [COFINS_CST             ]="08"
               [COFINS_ALIQUOTA        ]=BlankNum()
         EndIf               

   Else [Numero Pedido_Orcamento ]=[OrcaI->Numero do Orcamento       ]
        [Item Pedido_Orcamento   ]=[OrcaI->Item do Orcamento         ]
        [Codigo do Item          ]=[OrcaI->Codigo do Item            ]
        [Tipo do Item            ]=[OrcaI->Tipo do Item              ]
        [Descricao do Item       ]=[OrcaI->Descricao do Item         ]
        
        If [FaturaC->Tipo Movimento Estoque]="S"
           Then [Quantidade      ]=[OrcaI->Quantidade]-[OrcaI->Quantidade Faturada]
           Else [Quantidade      ]=[OrcaI->Quantidade]
        EndIf   

        ;* Seta Variaveis PegaCFOP
        Checa_CFOP      =[FaturaC->Tipo Movimento Estoque]
        CFO_C           =[FaturaC->CFO      ]
        CFOP_TPITEM     =[Tipo do Item      ]
        CFOP_TRIBICMS   =[OrcaI->Tributacao de ICMS      ]
        CFOP_TPTRIB     =[OrcaI->Tipo Tributacao         ]
        CFOP_EMPRESA    =[FaturaC->Codigo da Empresa       ]
        CFOP_ATIVEMPRESA=ATIVEMPR
        Play "\\Sistemas\\Exporta\\PegaCFOP"
        [CFO            ]=CFO_C
        [Tipo Tributacao]=CFOP_TPTRIB

        [Unidade Fiscal          ]=[OrcaI->Unidade Fiscal            ]
        [Preco Unitario          ]=[OrcaI->Preco Unitario            ]
        [Preco Unitario Tabela   ]=[OrcaI->Preco Unitario Tabela     ]
    
        [Taxa Desconto Unitario  ]=[OrcaI->Taxa Desconto Unitario    ]
        [Valor Desconto Unitario ]=[OrcaI->Valor Desconto Unitario   ]
        if [Valor Desconto Unitario ]>0
           then [Tipo Desconto Item ]="U"
                [Valor Desconto Item]=Round([Quantidade]*[Valor Desconto Unitario ],2)
        endif   
        [Preco Total             ]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]
    
        [Tributacao de IPI       ]=[OrcaI->Tributacao de IPI         ]
        [Aliquota Reduzida BCIPI ]=[OrcaI->Aliquota Reduzida BCIPI   ]
        [Aliquota de IPI         ]=[OrcaI->Aliquota de IPI           ]
        [Valor do IPI            ]=[OrcaI->Valor do IPI              ]
        [Tributacao de ICMS      ]=[OrcaI->Tributacao de ICMS        ]
        [Aliquota Reduzida BCICMS]=[OrcaI->Aliquota Reduzida BCICMS  ]
        [Aliquota de ICMS        ]=[OrcaI->Aliquota de ICMS          ]
        [Valor do ICMS           ]=[OrcaI->Valor do ICMS             ]
        [Tributacao de ISSQN     ]=[OrcaI->Tributacao de ISSQN       ]
        [Aliquota de ISSQN       ]=[OrcaI->Aliquota de ISSQN         ]
        [Valor do ISSQN          ]=[OrcaI->Valor do ISSQN            ]
        [Taxa Desconto Total     ]=[OrcaI->Taxa Desconto Total       ]
        [Valor Desconto Total    ]=[OrcaI->Valor Desconto Total      ]
        [CSOSN                   ]=[Orcai->CSOSN                     ]
        [Informacoes_Adicionais  ]=[Orcai->Informacoes_Adicionais    ]
EndIf

If [Tributacao de ICMS]<>"D"
   Then If Not IsBlank([Tributacao de ICMS      ])
            Then [Aliquota Reduzida BCICMS]=BlankNum()
                 [Aliquota de ICMS        ]=BlankNum()
                 [Valor do ICMS           ]=BlankNum()
         EndIf
EndIf

If [Aliquota Reduzida BCICMS]>0 And
   [Aliquota de ICMS        ]>0
   Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
   Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
EndIf

If [Aliquota Reduzida BCIPI ]>0 And
   [Aliquota de IPI         ]>0 And
   PARAM_PEDIDO<>"S"
   Then [Valor do IPI ]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
   Else [Valor do IPI ]=Round(([Preco Total]*[Aliquota de IPI ])/100,2)
EndIf
[Valor do ISSQN ]=Round(([Preco Total]*[Aliquota de ISSQN ])/100,2)

EndProc    ; (Copia_Ped_Orc_Fatura)

;*******************************************************************************
;* Rotina p/ Checagem Saldo Pedido                                            **
;*******************************************************************************
Proc Closed Checa_Pedido()
UseVars AutoLib, ErrorProc, PARAM_PEDIDO, DESTIN_ATUALIZA_PEDIDOS, PARAM_BLOQPED_NEG, CHAVEI, QUANT

Private NOVOSALDO

If PARAM_PEDIDO<>"S"
   Then Return True
EndIf
If PARAM_PEDIDO="S" And DESTIN_ATUALIZA_PEDIDOS<>"S"
   Then Return True
EndIf
If IsBlank([FaturaC->Numero do Pedido]) Or  
   IsBlank([FaturaI->Numero Pedido_Orcamento]) And
   IsBlank([FaturaI->Item Pedido_Orcamento])
   Then Return True
EndIf

Moveto "FaturaC"
[Numero Pedido_Orcamento]=[FaturaI->Numero Pedido_Orcamento]

Moveto "PedidoI"
Moveto [Item do Pedido]
Locate [FaturaI->Item Pedido_Orcamento]
If Not RetVal
   Then Mensagem("Item do Pedido n„o encontrado !")
        Moveto "FaturaI"
        Return False
   Else NOVOSALDO=-1
        Switch
          Case CHAVEI=1:
               NOVOSALDO=NDecimal(([Quantidade]-[Quantidade Faturada])-[FaturaI->Quantidade],3)
          Case CHAVEI=0:
               NOVOSALDO=NDecimal(((([Quantidade]-[Quantidade Faturada])+QUANT)-[FaturaI->Quantidade]),3)
        EndSwitch
EndIf

Moveto "FaturaI"
If NOVOSALDO>=0
   Then Return True
   Else Mensagem("Saldo do Pedido Insuficiente em "+StrVal(Format("W11.3,EIC",NOVOSALDO))+", Verificar !")
        If PARAM_BLOQPED_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc    ; (Checa_Pedido)

;*******************************************************************************
;* Aprovacao do Limite de Credito                                              *
;*******************************************************************************
Proc Closed Limite_Credito()
UseVars AutoLib, ErrorProc,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO, 
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, PARAM_LIMITE_CREDITO, SYS_CODIGO_CLIENTE

Private CREDITO_TOTAV, CREDITO_TOTV, NLANCTO, CREDITO_TOTCQ, SOMA_CREDITO,
        CREDITO_LIMITE, CREDITO_DISPONIVEL2, CREDITO_DISPONIVEL1, MSG,
        CREDITO_TOTCQAC, CREDITO_TOTCQSF

Aguarde("Aguarde, Analisando Credito")

;; Titulos a Vencer e Vencidos
CREDITO_TOTAV=0
CREDITO_TOTV =0
MSG=""

Moveto "\\Sistemas\\CtaRec\\Duplic"
Moveto [Codigo do Destinatario]
Locate IndexOrder by "IndDup22" [FaturaC->Codigo]
If RetVal
	 Then While [Codigo do Destinatario]=[FaturaC->Codigo]
         If ([Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] Or
            IsBlank([Numero Docto Gerador])) And
            [Data de Emissao     ]<>[FaturaC->Data de Emissao   ]
            Then If [Saldo do Documento]>0.01
                    Then If [Data de Vencimento]>=Today()
                            Then CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                            Else CREDITO_TOTV =CREDITO_TOTV +[Saldo do Documento]
                         EndIf
                 EndIf
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndDup22" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
				EndWhile
EndIf

;;; Cheques a Descontar
NLANCTO="******"
CREDITO_TOTCQ=0
CREDITO_TOTCQAC=0
CREDITO_TOTCQSF=0
Moveto "\\Sistemas\\CheqRec\\ChequeI"
Moveto [Codigo_Cliente]
Locate IndexOrder by "IndChI01" [FaturaC->Codigo]
If RetVal
   Then While [Codigo_Cliente]=[FaturaC->Codigo]
        ;;If [Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] And
        ;;   [Data de Entrada     ]<>[FaturaC->Data de Emissao   ]
        ;;   Then
        ;;EndIf

          If [Situacao]<>"LIQUIDADO"   And
             [Situacao]<>"EM COBRANCA" And
             [Situacao]<>"EM COBRANCAPGTO" And
             Search("TROCADO",[Situacao])=0     
             Then If [Situacao]="SEM FUNDO"
                     Then CREDITO_TOTCQSF=CREDITO_TOTCQSF+[Valor]
                     Else CREDITO_TOTCQ  =CREDITO_TOTCQ  +[Valor] 
                  EndIf
          EndIf
          If [Situacao]="LIQUIDADO"
             Then Switch
                    Case SYS_CODIGO_CLIENTE="0157" Or
                         SYS_CODIGO_CLIENTE="0130":
                      If [Data Vencimento]>=Today()
			     							 Then CREDITO_TOTCQAC=CREDITO_TOTCQAC+[Valor]
						    			EndIf
                    OtherWise:
                      If [Data Vencimento]>=(Today()-7)
                         Then CREDITO_TOTCQAC=CREDITO_TOTCQAC+[Valor]
                      EndIf    
									EndSwitch
					EndIf				
          
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndChI01" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "\\Sistemas\\Cadastro\\FichaCli"
Moveto [Codigo]
Locate [FaturaC->Codigo]
If RetVal
   Then CREDITO_LIMITE=[\Sistemas\Cadastro\FichaCli->Limite de Credito]
   Else CREDITO_LIMITE=0
        Mensagem("Cliente sem limite de credito informado na ficha financeira !")
EndIf

Moveto "FaturaC"
LimpAguarde()

CREDITO_DISPONIVEL1=CREDITO_LIMITE-(CREDITO_TOTAV+CREDITO_TOTV+CREDITO_TOTCQ+CREDITO_TOTCQAC+CREDITO_TOTCQSF)
CREDITO_DISPONIVEL2=CREDITO_DISPONIVEL1-[FaturaC->Valor Nota Fiscal]

If CREDITO_DISPONIVEL2<0
   Then MSG=    "Total Duplicatas Vencidas :"+Format("W10.2,EIC",CREDITO_TOTV)+"//"
        MSG=MSG+"Total Duplicatas a Receber:"+Format("W10.2,EIC",CREDITO_TOTAV)+"//"
        MSG=MSG+"Total Cheques a Descontar :"+Format("W10.2,EIC",CREDITO_TOTCQ)+"//"
        MSG=MSG+"Total Cheques a Compensar :"+Format("W10.2,EIC",CREDITO_TOTCQAC)+"//"
        MSG=MSG+"Total Cheques Sem Fundo   :"+Format("W10.2,EIC",CREDITO_TOTCQSF)+"//"
        MSG=MSG+"        Limite de Credito :"+Format("W10.2,EIC",CREDITO_LIMITE)+"//"
        MSG=MSG+"          Disponibilidade :"+Format("W10.2,EIC",CREDITO_DISPONIVEL1)+"//"
        MSG=MSG+"Compra Atual: "+Format("W10.2,EIC",[FaturaC->Valor Nota Fiscal])
        MSG=MSG+"  =  Indisponibilidade: "+Format("W10.2,EIC",CREDITO_DISPONIVEL2)
        If PARAM_LIMITE_CREDITO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then MSG="OF: "+ORDFAT+" Cliente "+[FaturaC->Codigo]
                        MSG=MSG+" Vr="+LTrim(Format("W10.2,EIC",(CREDITO_DISPONIVEL2*-1)))
                        Grava_Logt("#","LibCred",MSG)
                        Return True
                   Else Return False
                EndIf
           Else Mensagem(MSG)
                Return False
        EndIf
   Else Return True
EndIf

EndProc    ;  (Limite_Credito)

;*******************************************************************************
;* Verificacao Maximo de Dias de Atraso                                        *
;*******************************************************************************
Proc Closed Dias_Atraso()
UseVars AutoLib, ErrorProc,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO, 
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, PARAM_DIAS_ATRASO

Private CREDITO_TOTAV, CREDITO_TOTV, DIAS_ATRASO, MSG

Aguarde("Aguarde, Analisando Documentos c/ Dias Atrasados")

;; Titulos a Vencer e Vencidos
CREDITO_TOTAV  = 0
CREDITO_TOTV   = 0
DIAS_ATRASO    = 0
MSG=" Pedido "+[FaturaC->Numero do Pedido]+"//"
MSG=MSG+"Cliente "+[FaturaC->Codigo]+"-"+[FaturaC->Razao Social]+"// //"

UnLockRecord
FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli"
Moveto [Codigo]
Locate [FaturaC->Codigo]
If Not RetVal
   Then Mensagem("Cliente sem n§ dias p/ atraso informado na ficha financeira !")
   Else DIAS_ATRASO=[Maximo Dias Atraso]
        If DIAS_ATRASO<=0
           Then MSG="Cliente sem n§ dias p/ atraso informado na ficha financeira !// //"
        EndIf
EndIf

Moveto "\\Sistemas\\Ctarec\\Duplic"
Moveto [Codigo do Destinatario]
Locate IndexOrder by "IndDup22" [FaturaC->Codigo]
If RetVal
	 Then While [Codigo do Destinatario]=[FaturaC->Codigo]
         If ([Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] Or
            IsBlank([Numero Docto Gerador])) And
            [Data de Emissao     ]<>[FaturaC->Data de Emissao   ]
            Then If [Saldo do Documento]>0.01
                   Then If [Data de Vencimento]>=Today()
                           Then CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                           Else If (Today()-[Data de Vencimento])>=DIAS_ATRASO
                                   Then CREDITO_TOTV =CREDITO_TOTV +[Saldo do Documento]
                                   Else CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                                EndIf
                        EndIf
                 EndIf
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndDup22" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
				EndWhile
EndIf
Moveto "FaturaC"
FormKey

LimpAguarde()

If CREDITO_TOTV > 0
   Then MSG=MSG+Completa("Maximo de Dias de Atraso..:"+Format("W10",DIAS_ATRASO),38," ")+"//"
        MSG=MSG+"Duplicatas com Dias Atraso:"+Format("W10.2,EIC",CREDITO_TOTV)+"//"
        MSG=MSG+"Duplicatas a Receber      :"+Format("W10.2,EIC",CREDITO_TOTAV)+"//"
        MSG=MSG+"Total Duplicatas a Receber:"+Format("W10.2,EIC",CREDITO_TOTAV+CREDITO_TOTV)
        If PARAM_DIAS_ATRASO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then MSG2="OF: "+ORDFAT+" Cliente "+[FaturaC->Codigo]
                        MSG2=MSG2+" ND="+LTrim(Format("W10",DIAS_ATRASO))
                        Grava_Logt("#","LibAtras",MSG2)
                        Return True
                   Else Return False
                EndIf
           Else Mensagem(MSG)
                Return False
        EndIf
   Else Return True
EndIf

EndProc   ; (Dias_Atraso)

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

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

;*******************************************************************************
;* Atualizacao de Cheques                                                      *
;*******************************************************************************
Proc CHEQUES()
Private NUMEROL, EXISTE_CHEQUE_LIQUIDADO, primeiravez

while true

  Aguarde("Efetuando Estorno CHEQUES TERCEIROS "+Opcaoc+" "+NOTAFISC)

  NUMEROL=""
  Moveto "\\Sistemas\\CheqRec\\ChequeC"
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "Indchc01" [NotaC->Codigo da Empresa],[NotaC->Tipo do Documento],[NotaC->Numero do Documento]
  if retval
    then NUMEROL=[Numero do Lancamento]
    else Moveto [Observacao do Lancamento]
         Locate "REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
         if retval
            then NUMEROL=[Numero do Lancamento]
         endif
  endif      
    
  if not isblank(NUMEROL)
     then
          EXISTE_CHEQUE_LIQUIDADO=false
     
         Moveto "\\Sistemas\\CheqRec\\ChequeI"
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If RetVal
            Then While [Numero do Lancamento]=NUMEROL
  
                   If [Situacao]<>"EM ABERTO"
                      Then EXISTE_CHEQUE_LIQUIDADO=True
                           quitloop
                   EndIf
                   
                   Skip
                   If EOT() Then QuitLoop EndIf
                 EndWhile
         EndIf
         
         if EXISTE_CHEQUE_LIQUIDADO
            then
                 MSG="J  existem cheques movimentados para esta Nota.//"
                 MSG=MSG+"Os cheques n„o podem ser estornados.//"
                 MSG=MSG+"Verificar no Lan‡amento de Cheques Ok !//"
                 MSG=MSG+"Lan‡amento: "+StrVal(NUMEROL)+" - "+SubStr([\Sistemas\CheqRec\ChequeC->Observacao do Lancamento],1,20)
                 Mensagem(MSG)
                 
                 quitloop
         endif
         
         Moveto "\\Sistemas\\CheqRec\\ChequeI"
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If RetVal
            Then While [Numero do Lancamento]=NUMEROL
                   del
                   If EOT() Then QuitLoop EndIf
                 EndWhile
         EndIf
         
         Moveto "\\Sistemas\\CheqRec\\ChequeC"
         Del
  endif

  Aguarde("Atualizando CHEQUES TERCEIROS "+Opcaoc+" "+NOTAFISC)

  primeiravez=true

  Moveto "NotaV"
  Moveto [Codigo da Empresa]
  Locate [NotaC->Codigo da Empresa],[NotaC->Numero do Documento],[NotaC->Serie do Documento]
  If Not RetVal
     Then quitloop            
  EndIf
  
  while [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
        [Numero do Documento]=[NotaC->Numero do Documento] and
        [Serie do Documento ]=[NotaC->Serie do Documento ]

    if ([forma de pagamento]="CH" or [forma de pagamento]="CP") and Not IsBlank([Numero_Cheque])
       then
            if primeiravez
               then primeiravez=false
               
                    Moveto "\\Sistemas\\CheqRec\\ChequeC"
                    While True
                      Moveto [Numero do Lancamento]
                      End
                      If Numero_Lancamento("Interno","")
                         Then NUMEROL = PROXLANCTO_NLANC
                              Release Vars PROXLANCTO_NLANC
                      EndIf
                      Locate NUMEROL
                      If Not Retval
                         Then End Down
                              [Numero do Lancamento ]=NUMEROL
                              If Not IsLockRecord()
                                 Then QuitLoop
                                 Else Del
                              EndIf
                      EndIf
                    EndWhile
             
                   [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
                   [Data de Entrada         ]=[NotaC->Data de Emissao         ]
                   [Codigo                  ]=[NotaC->Codigo                  ]
                   [Codigo do Representante ]=[NotaC->Codigo do Representante ]
                   [Observacao do Lancamento]="REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
        
                   [Sistema Gerador         ]=[NotaC->Sistema Gerador         ]
                   [Tipo Docto Gerador      ]=[NotaC->Tipo do Documento       ]
                   [Numero Docto Gerador    ]=[NotaC->Numero do Documento     ]
                   [Serie Docto Gerador     ]=[NotaC->Serie do Documento      ]
                   [Numero_Carregamento_Orig]=[NotaC->Numero_Carregamento     ]
                   [Valor Total             ]=0
                   Controle_Dia()
                   UnLockRecord
                   
                   Moveto "NotaC"
                   [Numero Lancamento Cheque]=NUMEROL
                   UnLockRecord

            endif
            
            Moveto "\\Sistemas\\CheqRec\\ChequeI"
            Moveto [Numero do Lancamento]
            Locate NUMEROL, NumVal([NotaV->Sequencia])
            If Not RetVal
               Then End
                    Down
                    [Numero do Lancamento]=NUMEROL
                    [Sequencia do Cheque ]=NumVal([NotaV->Sequencia])
                    [Codigo_Banco        ]=[NotaV->Codigo_Banco   ]
                    [Agencia             ]=[NotaV->Agencia        ]
                    [Numero_Conta        ]=[NotaV->Numero_Conta   ]
                    [Numero_Cheque       ]=[NotaV->Numero_Cheque  ]
                    [CPF                 ]=[NotaV->CPF            ]
                    [Tipo_Emitente       ]=[NotaV->Tipo_Emitente  ]
                    [Titular_Cheque      ]=[NotaV->Titular_Cheque ]
                    [Cidade              ]=[NotaV->Cidade         ]
                    [UF                  ]=[NotaV->UF             ]
                    [Data Vencimento     ]=[NotaV->Data           ]
                    [Valor               ]=[NotaV->Valor          ]
                    [Observacao do Cheque]=[NotaV->Observacao     ]
                    [Codigo CMC7         ]=[NotaV->Codigo CMC7    ]
                    
                    [Sistema Origem      ]=[NotaC->Sistema Gerador     ]
                    [Tipo do Documento   ]=[NotaC->Tipo do Documento   ]
                    [Numero do Documento ]=[NotaC->Numero do Documento ]
                    [Codigo_Cliente      ]=[NotaC->Codigo              ]
                    [Data_Entrada        ]=[NotaC->Data de Emissao     ]
                    [Situacao            ]="EM ABERTO"
                    
                    [Codigo da Conta     ]=CX_CONTA_CAIXA
                    [Codigo da Empresa   ]=[NotaC->Codigo da Empresa       ]
                    Controle_Dia()
                    UnLockRecord
                    
                    Moveto "\\Sistemas\\CheqRec\\ChequeC"
                    [Valor Total         ]=[Valor Total  ]+[NotaV->Valor   ]
                    UnLockRecord
            EndIf
    endif

    moveto "NotaV"
    skip
    if eot() then quitloop endif
  endwhile

  quitloop
endwhile

Moveto "FaturaC"

EndProc    ;  (Cheques)

;*******************************************************************************
;* Rotina para exclusao do rateio da comissao                                  *
;*******************************************************************************
Proc Closed Excluir_Rateio_Comissao()
UseVars AutoLib, ErrorProc, ORDFAT, SEQIT

Moveto "FaturaC"
UnLockRecord
FormKey

Moveto "FaturaIC"
Moveto [Numero da OF]
Locate ORDFAT,SEQIT
If RetVal
   Then While [Numero da OF]=ORDFAT And [Item da OF]=SEQIT
          Del
        EndWhile
EndIf

Moveto "FaturaC"
UnLockRecord
FormKey
Moveto [Numero da OF]
Locate ORDFAT
Moveto "FaturaI"

EndProc  ; (Excluir_Rateio_Comissao)

;*******************************************************************************
;* Rotina para Rateio de Comissao Vencimentos                                  *
;*******************************************************************************
Proc Closed RATEIO_COMISSAO_VENCTOS()
UseVars AutoLib, ErrorProc, PARAM_TITCRED

Private TCOM, COM_NF, DIFER, TOT_VECTOS

If Not IsAssigned(PARAM_TITCRED)          Then PARAM_TITCRED=""          EndIf

If [FaturaC->Tipo de Pagamento     ]="O" or
   [FaturaC->Tipo Movimento Estoque]="E" or
   PARAM_TITCRED="T"
   Then Moveto "FaturaC"
        Return
EndIf
Aguarde("Rateio Comissoes/Vencimentos")

COM_NF=NDecimal(([FaturaC->Valor Nota Fiscal]*[FaturaC->Comissao do Representante])/100,2)
TCOM  =0

Moveto "FaturaV"
Moveto [Valor]
TOT_VECTOS=ImageCSum()
If TOT_VECTOS>0
   Then Scan
          [Valor da Comissao]=NDecimal(([Valor]*[FaturaC->Comissao do Representante])/100,2)
          TCOM=TCOM+[Valor da Comissao]
        EndScan

        DIFER=COM_NF-TCOM
        [Valor da Comissao]=[Valor da Comissao]+DIFER
        UnLockRecord
EndIf

Moveto "FaturaC"
EndProc ; (RATEIO_COMISSAO_VENCTOS)

;*******************************************************************************
;* Rotina para Apresentar Mensagem de Venda dos Clientes                       *
;*******************************************************************************
Proc Mensagem_Venda()
Private MSG_VENDA  

MSG_VENDA = ""
GetRecord "\\Sistemas\\Cadastro\\DestMsg" [Codigo] To REG_DESTMSG
If RetVal
   Then MSG_VENDA = REG_DESTMSG["Observacoes"]
EndIf                        

If MSG_VENDA<>""
   Then Ler_Memo("Observa‡”es para Venda",11,01,10,76,MSG_VENDA)
EndIf                      
     
EndProc ;(Mensagem_Venda)

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_SPC()
Private NomeCampo,Retorno,DATA_SPC,BLOQUEIA_SPC

Retorno=True
NomeCampo=Field()
BLOQUEIA_SPC=False

UnLockRecord
FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli" 
Moveto [Codigo]
Locate [\Sistemas\Vendas\FaturaC->Codigo]
If RetVal
   Then DATA_SPC=[Data_Ultima_Consulta]
        If DATA_SPC=BlankDate() Or
           DATA_SPC+PARAM_NBLOQUEIO_SPC <= Today()
           Then BLOQUEIA_SPC=True
        EndIf   
   Else DATA_SPC=BlankDate()
        BLOQUEIA_SPC=True          
EndIf

If BLOQUEIA_SPC
   Then If DATA_SPC<>BlankDate()
           Then DATA_SPC=         "Efetuar uma nova consulta no SPC!//"
                DATA_SPC=DATA_SPC+"Ultima Consulta: "+SubsTr(StrVal([Data_Ultima_Consulta]),1,2)+"/"
                DATA_SPC=DATA_SPC+                    SubsTr(StrVal([Data_Ultima_Consulta]),4,2)+"/"
                DATA_SPC=DATA_SPC+                    SubsTr(StrVal([Data_Ultima_Consulta]),7,4)
           Else DATA_SPC=         "Efetuar uma consulta no SPC!//"
                DATA_SPC=DATA_SPC+"N„o consta nenhuma data de consulta deste cliente!"
        EndIf            
        If Not IsAssigned(MSG_SPC)
           Then MSG=    "Opera‡„o Bloqueada!//"
                MSG=MSG+DATA_SPC
                Libera_Bloqueio(MSG)
                If Ok="S"
                   Then MSG="OF: "+ORDFAT+" Cliente "+[FaturaC->Codigo]
                        MSG=MSG+" UltConsulta="+Format("D13",[Data_Ultima_Consulta])
                        Grava_Logt("#","BloqDSPC",MSG)
                   Else Retorno=False
                EndIf
           Else Mensagem(DATA_SPC)     
        EndIf
EndIf

Moveto "FaturaC"
FormKey

Moveto Field NomeCampo
Return Retorno
EndProc

;*******************************************************************************
;* Rotina para gravar telefone no cadastro de clientes                         *
;*******************************************************************************
Proc Grava_Telefone()

UnLockRecord
FormKey

{TableAdd} {\\Sistemas\\Cadastro\\Destinat} 
Moveto [Codigo]
Locate [FaturaC->Codigo]
If RetVal
   Then If IsBlank([Telefone]) Or [Telefone]<>[Faturac->Telefone]
           Then [Telefone]=[Faturac->Telefone]
                UnLockRecord
        EndIf
EndIf
Do_It!
ClearImage

Moveto "FaturaC"
FormKey
CoeditKey
IsLockRecord()

Return

EndProc ;Grava_Telefone()

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Geral_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,Janela,WinArray5,Temp,REG_VENCTO

Temp=True

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
      ;;;***** Valor p/ Troco ****
           Switch
              Case Campo="I_VrTroco" : CancelDialog
           EndSwitch            
      ;;;***** Cupom   ****
           Switch
             Case Campo="CUPOM"         : CancelDialog
           EndSwitch
      ;;;***** Acrescimo ****
           Switch
             Case Campo="A_Acrescimo"   : CancelDialog
           EndSwitch
      ;;;***** Data Calculo Vencto****
           Switch
             Case Campo="Data_Base"      : CancelDialog
           EndSwitch           
                           
      Case Evento["KeyCode"] = 13:
      ;;;***** Valor p/ Troco ****
           Switch              
              Case Campo="I_VrTroco" :
                   VSD_VrTroco=ControlValue("I_VrTroco")
                   AcceptDialog
           EndSwitch                 
      ;;;***** CUPOM  ****
           Switch
             Case Campo="CUPOM":
                  NUMERO_OF =[Faturac->Numero da Of]
                  VSD_CUPOM=AlinhM(ControlValue("CUPOM"),6)
                  If VSD_CUPOM <> ""
                     Then UnlockRecord
                          KeyPress "F7"
                          Moveto "Notac"
                          Moveto [Codigo da Empresa]
                          Locate [Faturac->Codigo da Empresa],VSD_CUPOM,""
                          If RetVal
                             Then Transfere_Dados_Nota()
                             Else Moveto "FaturaC"
                                  MENSAGEM("Cupom Fiscal n„o Encontrado")
                          EndIf
                          UnlockRecord
                          KeyPress "F7"
                          LockRecord
                  EndIf
                  CancelDialog
           EndSwitch
      ;;;***** Acrescimo ****
           Switch
             Case Campo="A_Acrescimo"   :
                  VSD_Acrescimo=ControlValue("A_Acrescimo")
                  AcceptDialog
           EndSwitch
      ;;;***** Data Calculo Vencto****
           Switch
             Case Campo="Data_Base":
                  VSD_Data_Base=ControlValue("Data_Base")
                  AcceptDialog
           EndSwitch           
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

If (OP_SHOWD="Cheque" Or OP_SHOWD="Observacao") And CHAVEV=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

@ 23,0 ?? ">"+Format("W79,AL",MSGCAMPO)
PaintCanvas Attribute 30 23,0,23,79
          
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79

Mouse Hide
RefreshDialog
Return TEMP
EndProc    ; (Geral_Dialog)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Rateio_BC_Itens(TabelaRefC)
Private nitens,
        TabelaRefC, TabelaRefI, REG_TABELAREFC

;--- Seta Tabelas de Trabalho --------------------------------------------------
Moveto TabelaRefC
Switch
  Case TabelaRefC="FaturaC" : TabelaRefI="FaturaI"
EndSwitch

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

Aguarde("Atualizando rateios nos itens")

Moveto TabelaRefI
nitens=0
Scan
  nitens=nitens+1

  [Taxa Desconto Total      ]=It_txdescto[nitens]        
  [Valor Desconto Total     ]=It_descto[nitens]          
  [Valor Frete Total        ]=It_frete[nitens]         
  [Valor Seguro Total       ]=It_seguro[nitens]          
  [Valor OutDesp Total      ]=It_outdesp[nitens]         

  [ICMS_BC                  ]=It_bc_icms[nitens]       
  [Valor do ICMS            ]=It_vr_icms[nitens]       

  [ICMS_CREDSN_Aliquota     ]=It_aliq_icmscred[nitens]  
  [ICMS_CREDSN_Valor        ]=It_vr_icmscred[nitens]   

  [ICMS_ST_Aliquota         ]=It_aliq_st[nitens]        
  [ICMS_ST_BC               ]=It_bc_st[nitens]         
  [ICMS_ST_Valor            ]=It_vr_st[nitens]         

  [IPI_BC                   ]=It_bc_ipi[nitens]        
  [Valor do IPI             ]=It_vr_ipi[nitens]        

  [ISSQN_BC                 ]=It_bc_issqn[nitens]      
  [Valor do ISSQN           ]=It_vr_issqn[nitens]      

  [PIS_BC                   ]=It_bc_pis[nitens]        
  [PIS_Valor                ]=It_vr_pis[nitens]         

  [COFINS_BC                ]=It_bc_cofins[nitens]     
  [COFINS_Valor             ]=It_vr_cofins[nitens]     

EndScan
If RecordStatus("Locked") Then UnLockRecord EndIf         

Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

;*******************************************************************************
;* Faturamento de Pedido ou Orcamento Automatico                               *
;*******************************************************************************
Proc FATURA_PEDIDO_ORCAMENTO()
Private PED_ORC_TITULO, OK, PED_ORC_FAT, SEQI, Atualiza, ItemRef, ItemCodFor, linha1, linha2, linha3

If PARAM_PEDIDO="S" And Not IsBlank([FaturaC->Numero do Pedido   ]) 
   Then 

        switch
          case sys_codigo_Cliente="0377":
          
          otherwise                     :
            If Search("SIMPLES REMESSA ENTR",[FaturaC->Descricao da Destinacao])=0
               Then Mensagem("Permitido usar pedido apenas para,// SIMPLES REMESSA ENTR.FUTURA !") 
                    Return
            EndIf   
        endswitch

        PED_ORC_FATURAR=[FaturaC->Numero do Pedido   ]
        PED_ORC_TITULO ="N§ Pedido......:"
        PARAM_ORCAMENTO="N"
   Else If PARAM_ORCAMENTO="S" And Not IsBlank([FaturaC->Numero do Orcamento   ])
           Then PED_ORC_FATURAR=[FaturaC->Numero do Orcamento]
                PED_ORC_TITULO ="N§ Or‡amento...:"
                PARAM_PEDIDO="N"
           Else Return     
        EndIf
EndIf

OK=""
PED_ORC_FAT=""
ShowDialog "" proc "OPCAO" @ 08,23 height 03 width 30
  @ 0,1 ?? PED_ORC_TITULO
  Accept @ 00,18 width 9 "A6" Picture "#*#" tag "PED_ORC_FATURAR" to PED_ORC_FATURAR

  PushButton @ 02,06 Width 10 "Sim"     OK Value "Sim" Tag "Sim" to Button
  PushButton @ 02,15 Width 10 "N„o" CANCEL Value "Nao" Tag "N„o" to Button
Enddialog
PED_ORC_FATURAR=PED_ORC_FAT
If OK="N"
   Then Return
EndIf
PED_ORC_FATURAR=AlinhM(PED_ORC_FATURAR,6)

Moveto "FaturaC"
If PARAM_PEDIDO="S"
   Then [Numero Pedido_Orcamento]=PED_ORC_FATURAR
        Moveto "PedidoC"
        If RecordStatus("New")
           Then Mensagem("Pedido n„o Encontrado !")
                Return
           Else If [Codigo]<>[FaturaC->Codigo]
                   Then Mensagem("Pedido c/ Cliente diferente desta Fatura !")
                        Return
                EndIf
        EndIf
        Moveto "PedidoI"
   Else [Numero Pedido_Orcamento]=PED_ORC_FATURAR
        Moveto "OrcaC"
        If RecordStatus("New")
           Then Mensagem("Or‡amento n„o Encontrado !")
                Return
           Else If [Codigo]<>[FaturaC->Codigo]
                   Then Mensagem("Or‡amento c/ Cliente diferente desta Fatura !")
                        Return
                EndIf
        EndIf
        Moveto "OrcaI"
EndIf

PEDANT="***"
Scan

	If [FaturaC->Tipo Movimento Estoque]="S"
	   Then
				  If Not IsBlank([Quantidade Faturada]) And
				     [Quantidade Faturada]<0                 Then Loop EndIf
				  If ([Quantidade]-[Quantidade Faturada])<=0 Then Loop EndIf
  EndIf
  
  Moveto "FaturaI"
  End
  SEQI=[Item da Of]
  If Isblank(SEQI)
     Then SEQI="1"
     Else SEQI=StrVal(NumVal(SEQI)+1)
  EndIf
  If NumVal(SEQI)>900
     Then Mensagem("N£mero m ximo de itens permitidos ‚ 900 !")
          QuitLoop
  EndIf
  Down

  [Numero da Of]=[FaturaC->Numero da Of]
  [Item da Of  ]=NumVal(SEQI)
  COPIA_PED_ORC_FATURA()
  Echo Normal
  Echo Off


  CHAVEI=1
  ATUALIZA=True
  If Not Checa_Estoque() 
     Then
          ItemRef   =""
          ItemCodFor=""
          Moveto [Codigo do Item]
          If Busca_Lookup("Codigo do Item",[Codigo do Item],"SM")
             Then ItemRef   =REG_BUSCA_LOOKUP["Referencia"]
                  ItemCodFor=REG_BUSCA_LOOKUP["Codigo Fornecedor"]
          EndIf    
      
          MSG=    "N£mero do Pedido: "+[Numero Pedido_Orcamento]+"    Item do Pedido: "+StrVal([Item Pedido_Orcamento])+"// //"

          MSG=MSG+Completa("Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30),60," ")+"//"
          MSG=MSG+Completa(" Ref: "+ItemRef,60," ")+"//"
          MSG=MSG+Completa("  CF: "+ItemCodFor,60," ")+"// //"

         ; MSG=MSG+"Quantidade pedida: "+StrVal(Format("W11.3,EICB",[Quantidade]))+"//"
         ; MSG=MSG+"- Estoque atual  : "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
         ; MSG=MSG+"                   -------------"                             +"//"
         ; MSG=MSG+"Falta em estoque : "+StrVal(Format("W11.3,EICB",NOVOSALDO*-1))+"// //"

          Linha1=Chr(179)+"   Quantidade"+Chr(179)+"      Estoque"+Chr(179)+"     Falta em"+Chr(179)+"     Faturado"+Chr(179)
          Linha2=Chr(179)+"       pedida"+Chr(179)+"        atual"+Chr(179)+"      estoque"+Chr(179)+"      parcial"+Chr(179)
          Linha3=Chr(179)+Format("W13.3,EICB",[Quantidade])+
                 Chr(179)+Format("W13.3,EICB",SALDOATUAL  )+
                 Chr(179)+Format("W13.3,EICB",NOVOSALDO*-1)+        
                 Chr(179)+Format("W13.3,EICB",0           )+Chr(179)

          If PARAM_BAIXA_PARCIAL="S"
             Then If SALDOATUAL<=0
                     Then Del
                          ATUALIZA=False
                     Else Linha3=SubStr(Linha3,1,43)+Format("W13.3,EICB",SALDOATUAL)+Chr(179) 
                     
                          ;MSG=MSG+"Faturando parcial: "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
                  Endif
             Else Del
                  Atualiza=False
          EndIf
          Echo Normal
          Echo Off 

          MSG=MSG+Linha1+"//"
          MSG=MSG+Linha2+"//"
          MSG=MSG+Linha3+"// //"       

          Release Vars ItemRef, ItemCodFor, Linha1, Linha2, Linha3

          If Not ATUALIZA
             Then MSG=MSG+"Item n„o pode ser faturado por saldo insuficiente !"
             Else MSG=MSG+"  "
                  [Quantidade]=SALDOATUAL
                  if [Valor Desconto Unitario]>0
                     then [Valor Desconto Item    ]=round([Quantidade]*[Valor Desconto Unitario],2)
                  endif        
                  
                  If [Quantidade]>0 and [Preco Unitario]>0
                      Then [Preco Total]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]
                      Else If [Preco Unitario]>0
                              Then [Preco Total]=Round([Preco Unitario]-[Valor Desconto Item],2)
                           EndIf
                  EndIf

                  If [Tributacao de ICMS]<>"D"
                     Then If Not IsBlank([Tributacao de ICMS      ])
                              Then [Aliquota Reduzida BCICMS]=BlankNum()
                                   [Aliquota de ICMS        ]=BlankNum()
                                   [Valor do ICMS           ]=BlankNum()
                           EndIf
                  EndIf

                  If [Aliquota Reduzida BCICMS]>0 And
                     [Aliquota de ICMS        ]>0
                     Then [Valor do ICMS]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                     Else [Valor do ICMS]=NDecimal(([Preco Total]*[Aliquota de ICMS])/100,2)
                  EndIf

                  If [Aliquota Reduzida BCIPI ]>0 And
                     [Aliquota de IPI         ]>0 
                     Then [Valor do IPI ]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
                     Else [Valor do IPI ]=NDecimal(([Preco Total]*[Aliquota de IPI ])/100,2)
                  EndIf
                  UnLockRecord
          EndIf
          Mensagem(MSG)
  EndIf
	
  If ATUALIZA
     Then ESTOQUE()
  EndIf

  If PARAM_PEDIDO="S"
     Then Moveto "PedidoI"
     Else Moveto "OrcaI"
  EndIf

	If [FaturaC->Tipo Movimento Estoque]="S"
	   Then
				  If ATUALIZA
				     Then If (PARAM_ORCAMENTO="S") Or
				             (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
				             Then [Quantidade Faturada]=[Quantidade Faturada]+[FaturaI->Quantidade]
				                  UnlockRecord
				          EndIf
				     Else ConfGeral("Continuar faturando os outros Itens deste pedido ?")
				          If OK<>"S"
				             Then Quitloop
				          EndIf
				  EndIf
	EndIf

EndScan

If ([FaturaC->Tipo Movimento Estoque]="S") And
   (PARAM_ORCAMENTO="S") Or
   (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
   Then ATUA_SITUACAO_PEDIDO_ORCAMENTO()
EndIf

EndProc   ;  (Fatura_Pedido_Orcamento)

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Meses_SemVenda()
Private NomeCampo,Retorno

Retorno=True
NomeCampo=Field()

UnLockRecord
FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli" 
Moveto [Codigo]
Locate [\Sistemas\Vendas\FaturaC->Codigo]
If RetVal
   Then If Not IsBlank([Data da Ultima Compra]) And
           ((Today()-[Data da Ultima Compra])/30)>
           PARAM_MESES_SEMVENDA Then
           MSG=    "Bloqueio mais de "+StrVal(PARAM_MESES_SEMVENDA)+" meses sem compra."+"// //"
           MSG=MSG+"Ultima Compra em:"+Format("D13",[Data da Ultima Compra])+"// //"
           MSG=MSG+"Consultar posi‡„o do Cliente e Recadastro !!"
           Libera_Bloqueio(MSG)
           If Ok="S"
              Then MSG="OF: "+ORDFAT+" Cliente "+[FaturaC->Codigo]
                   MSG=MSG+" UltCompra="+Format("D13",[Data da Ultima Compra])
                   Grava_Logt("#","BloqMes",MSG)
              Else Retorno=False
           EndIf
        EndIf
EndIf
Moveto "FaturaC"
FormKey

Moveto Field NomeCampo
Return Retorno
EndProc

;*******************************************************************************
;* Rotina para conferir entrega dos itens                                      *
;*******************************************************************************
Proc Closed Checa_Entrega()
UseVars AutoLib, ErrorProc

Moveto "FaturaI"
Scan
  If [Entrega]="N"
     Then Moveto "FaturaC"
          Return False
  EndIf
EndScan
Moveto "FaturaC"
Return True
EndProc ; (Checa_Entrega)

;*******************************************************************************
;* Rotina para a pegar o numero do cupom                                       *
;*******************************************************************************
Proc Entra_Numero_Cupom()
INICIO_DIALOG=True
OP_SHOWD="Cupom"

VSD_CUPOM     = ""
Showdialog "" Proc "Geral_Dialog" @ 12,30 height 03 width 24
   Label  @ 00,01 "N§ Cupom : " for "CUPOM"
   Accept @ 0,11  Width 09 "A6" picture "!*!" Tag "CUPOM" to VSD_CUPOM
Enddialog                       
  
EndProc ;(Entra_Numero_Cupom)

;*******************************************************************************
;* Atualiza Quantidade Faturada do Pedido ou Orcamento                         *
;*******************************************************************************
Proc ATUA_PEDIDO_ORCAMENTO()

If (PARAM_ORCAMENTO="S") Or
   (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
   Then If Not IsBlank([FaturaI->Numero Pedido_Orcamento]) And
           Not IsBlank([FaturaI->Item Pedido_Orcamento])
           Then Moveto "FaturaC"
                [Numero Pedido_Orcamento]=[FaturaI->Numero Pedido_Orcamento]
                If PARAM_PEDIDO="S" And Not IsBlank([FaturaC->Numero do Pedido])
                   Then Moveto "PedidoI"
                        Moveto [Item do Pedido]
                   Else Moveto "OrcaI"
                        Moveto [Item do Orcamento]
                EndIf
                Locate [FaturaI->Item Pedido_Orcamento]
                If RetVal
                   Then If CHAVEI<>8
                           Then [Quantidade Faturada]=([Quantidade Faturada]-QUANT)+[FaturaI->Quantidade]
                                UnLockRecord
                           Else If [Quantidade Faturada]>0
													         Then [Quantidade Faturada]=[Quantidade Faturada]-[FaturaI->Quantidade]
                                        UnLockRecord
                                EndIf        
                        EndIf
                        ATUA_SITUACAO_PEDIDO_ORCAMENTO()
                EndIf
        EndIf
EndIf
EndProc   ; (Atua_Pedido_Orcamento)

;*******************************************************************************
;* Confirmacao de Janela                                                       *
;*******************************************************************************
Proc OPCAO(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento
Temp=True
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY"
   Then Switch
           Case Evento["KeyCode"] = 27:
                OK="N"
                CancelDialog
                Temp=False
           Case Evento["KeyCode"] = 13:
                If Campo="PED_ORC_FATURAR"
                   Then PED_ORC_FAT=ControlValue("PED_ORC_FATURAR")
                        SelectControl "Sim"
                        OK="S"
                   Else OK="N"
                EndIf
                CancelDialog
                Temp=False
        EndSwitch
Endif
Return Temp
EndProc  ; (Opcao)

;*******************************************************************************
;* Rotina para Impressao Geral (NF)                                            *
;*******************************************************************************
Proc IMPRIGERAL()

Private OPCAOC,OPCAON

UnLockRecord
KeyPress "F7"
IMPRIME_GERAL_INICIO=True
Scan For IsBlank([Numero Nota Gerada])
	If Not IMPRIME_GERAL_INICIO
		 Then If PARAM_FATURA_IGUAL_OF="S"
						 Then NOTAFISC=[FaturaC->Numero da OF]
						 Else NOTAFISC=[NumeroNF->Proximo Numero]
									NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")
					EndIf
		 Else While True
            If Not IsBlank(PARAM_RELAT_ROMA) And Not IsBlank(PARAM_RELAT_NF)
               Then Echo Normal
                    Echo Off
                    ShowPopup " Impress„o " CENTERED
                        "~R~omaneio"    : " Imprime apartir da OF N§ "+[Numero da OF]:"Romaneio",
                        "~N~ota Fiscal" : " Imprime apartir da OF N§ "+[Numero da OF]:"Nota Fiscal",
                        "~C~ancela"     : " Cancelar Impress„o"                      :"Cancela"
                    EndMenu
                    To Opcaoc
               Else If Not IsBlank(PARAM_RELAT_ROMA)
                       Then Echo Normal
                            Echo Off
                            ShowPopup " Impress„o " CENTERED
                                "~R~omaneio"    : " Imprime apartir da OF N§ "+[Numero da OF]:"Romaneio",
                                "~C~ancela"     : " Cancelar Impress„o"                      :"Cancela"
                            EndMenu
                            To Opcaoc
                       Else Echo Normal
                            Echo Off
                            ShowPopup " Impress„o " CENTERED
                                "~N~ota Fiscal" : " Imprime apartir da OF N§ "+[Numero da OF]:"Nota Fiscal",
                                "~C~ancela"     : " Cancelar Impress„o"                      :"Cancela"
                            EndMenu
                            To Opcaoc
                    EndIf
            EndIf

						Echo off

            If Not Retval or Opcaoc="Esc"
               Then Opcaoc="Cancela"
            EndIf
            If Opcaoc="Cancela"
               Then Moveto "FaturaC"
                    KeyPress "F7"
                    Return
            EndIf

            ;***** Obtendo o Numero da Nota Fiscal *******
            NOTAFISC ="000000"
            CODFISC  =""
            SERIEFISC=""

            Switch
              Case Opcaoc="Nota Fiscal":
                   CODFISC  ="NF1"
                   SERIEFISC="M-1"
              Case Opcaoc="Romaneio":
                   CODFISC  ="ROM"
                   SERIEFISC="RO"
            EndSwitch

						If PARAM_FATURA_IGUAL_OF="S"
							 Then NOTAFISC=[FaturaC->Numero da OF]
										Moveto "NumeroNf"
										Moveto [Codigo da Empresa]
										Locate [FaturaC->Codigo da Empresa],CODFISC
										If Not RetVal
											 Then Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
														Moveto "FaturaC"
														KeyPress "F7"
														Return
										EndIf
               Else Moveto "NumeroNf"
										Moveto [Codigo da Empresa]
										Locate [FaturaC->Codigo da Empresa],CODFISC
										If RetVal
											 Then While True
															If Not IsLockRecord()
																 Then NOTAFISC = [Proximo Numero]
																			QuitLoop
															EndIf
														EndWhile
														If [FaturaC->Data de Emissao]<[Data Ultima Emissao]
															 Then MSG=Opcaoc+" com Data de Emiss„o inferior a data da ultima emiss„o !// //"
																		MSG=MSG+" Verificar no controle de numera‡„o !"
																		Mensagem(MSG)
																		Moveto "FaturaC"
																		KeyPress "F7"
																		Return
														EndIf
														NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")
											 Else Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
														Moveto "FaturaC"
														KeyPress "F7"
														Return
										EndIf
						EndIf
            Moveto "FaturaC"

            If Opcaoc="Romaneio"
               Then NUMCOPIA=PARAM_NVIAS_ROMANEIO
                    Do_It!
                    DispositivoI("FAT")
                    CoEditKey
                    If OK="" Then Loop EndIf
                    N_COPIAS=NUMCOPIA
               Else Do_It!
                    DispositivoI("FAT")
                    CoEditKey
                    If OK="" Then Loop EndIf
            EndIf
            QuitLoop

          EndWhile
          IMPRIME_GERAL_INICIO=False
  EndIf

  Moveto "NotaC"
  Moveto [Codigo da Empresa]
  Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
  If RetVal
     Then Moveto "FaturaC"
          MSG_T=Opcaoc+" N§"+NOTAFISC+" j  existe no Sistema, Verificar !//"
          MSG_T=MSG_T+"Emiss„o abortada na O.F. N§"+[Numero da OF]
          Mensagem(MSG_T)
          QuitLoop
  EndIf

  Moveto "FaturaC"
  If [Taxa de Desconto]>0
     Then TXDESCTO_TOTAL=[Taxa de Desconto]
     Else VRDESCTO=[Valor do Desconto]
          TXDESCTO_TOTAL=(VRDESCTO/[Valor Mercadoria])*100
  EndIf
  UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
  Nota()

  OK="S"
  Switch
    Case Opcaoc="Romaneio":
         Play PARAM_RELAT_ROMA
    Case Opcaoc="Nota Fiscal":
         Play PARAM_RELAT_NF
  EndSwitch
;;******  Emissao Nota Promissoria  *************

  If Not IsBlank(PARAM_RELAT_NP) And [FaturaC->Forma de Pagamento]="NP"
     Then Echo Normal
          Echo Off
          ShowPopup " Op‡”es " CENTERED
            "Nota ~P~romissoria" : "Imprime Nota Promissoria"    :"Nota Promissoria",
            "~C~ancelar"         : "N„o Imprime Nota Promissoria":"Cancelar"
          EndMenu
          To Opcaon

          echo off
          If (Opcaon="Esc") or (Opcaon="Cancelar")
             Then QuitLoop
          EndIf

         If Opcaon="Nota Promissoria" Then Play PARAM_RELAT_NP EndIf
  EndIf

  Moveto "FaturaC"

  If OK<>"S" Then QuitLoop EndIf

EndScan

If PARAM_FATURA_IGUAL_OF<>"S"
	 Then Moveto "NumeroNF"
				UnLockRecord
EndIf

Moveto "FaturaC"
UnLockRecord
KeyPress "F7"

If IMPRIME_GERAL_INICIO
   Then Mensagem("N„o existem O.F.'s a imprimir !")
EndIf
EndProc ;IMPRIGERAL()

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

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   ; (Calc_NLinhas_Descricao)


;*******************************************************************************
;* Rotina para Acrescimo Preco Unitario Item                                   *
;*******************************************************************************
Proc Acrescimo_Item()

INICIO_DIALOG=True
OP_SHOWD="Acrescimo"

VSD_Acrescimo=0

Showdialog "Acr‚scimo Pre‡o Unit rio" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "ENTER","ESC","ClearArea"
     @ 12,20 height 04 width 40

   Label  @ 0,00 "% Sobre a Tabela de Pre‡o" for "A_Acrescimo"
   Accept @ 1,02 Width 10 "N" picture "#*#.[###]" Tag "A_Acrescimo" to VSD_Acrescimo

Enddialog
If Not RetVal
   Then Return
EndIf

If VSD_Acrescimo<0
   Then Mensagem("% Inv lida !")
        Return
EndIf

MSG_AGUARDE="Aguarde, Calculando Valores"
Moveto "FaturaI"
Moveto [Item da OF]
NR=ImageCMax()
Scan
  Aguarde(MSG_AGUARDE+Barra(NR,[Item da OF]))

  [Preco Unitario       ]=[Preco Unitario Tabela]+(([Preco Unitario Tabela]*VSD_ACRESCIMO)/100)
  [Preco Total          ]=round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]

  If [Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10"
     Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
             Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
             Else [Tributacao de Icms]=TRIB_ICMS
          EndIf
  EndIf

  If [Tributacao de ICMS]<>"D" And SubStr([Tipo Tributacao],2,2)<>"10"
     Then If Not IsBlank([Tributacao de ICMS      ])
              Then [Aliquota Reduzida BCICMS]=BlankNum()
                   [Aliquota de ICMS        ]=BlankNum()
                   [Valor do ICMS           ]=BlankNum()
           EndIf
  EndIf

  If [Aliquota Reduzida BCICMS]>0 And
     [Aliquota de ICMS        ]>0
     Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
     Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
  EndIf

  If [Aliquota Reduzida BCIPI ]>0 And
     [Aliquota de IPI         ]>0
     Then [Valor do IPI ]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
     Else [Valor do IPI ]=Round(([Preco Total]*[Aliquota de IPI ])/100,2)
  EndIf

EndScan
LimpAguarde()
Endproc ;Acrescimo_Item()

;******************************************************************************
;** Monta Procedures                                                        ***
;******************************************************************************
WriteLib "\\Sistemas\\Vendas\\Bib_Bal"
         Checagem_Pagina1, Calc_NLinhas_Descricao,
         Pega_Preco, CALC_OF, CALC_VENCTOS, 
         Cria_Ficha, 
         ATUA_SITUACAO_PEDIDO_ORCAMENTO, COPIA_PED_ORC_FATURA, Limite_Credito,
         Dias_Atraso, Verifica_Caixa, CHEQUES, Checa_Entrega,Checa_Comissao_Vendedor,
         Excluir_Rateio_Comissao,
         Entra_Numero_Cupom, ATUA_PEDIDO_ORCAMENTO, FATURA_PEDIDO_ORCAMENTO,
         OPCAO, IMPRIGERAL,
         RATEIO_COMISSAO_VENCTOS, Mensagem_Venda, 
         Checa_Meses_SemVenda, Rateio_BC_Itens, Checa_SPC, Checa_Pedido,
         Acrescimo_Item, Grava_Telefone,
         Geral_Dialog, Calcular_Vencimentos
