;** 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
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx()
;Ultima Alteracao: 03/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CALC_OF() = bib_fat
;Ultima Alteracao: 04/07/2018 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado "Aliquota_ICMS_Desonerado"  e  "Motivo_Desoneracao_ICMS" na proc Checagem_Pagina1()
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0419# -> PegaCodigoRaiz()
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes IMPRIGERAL() -> FT_GNF
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao PARAM_VERSAODANFE
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Removido controle de "Troco" na proc Geral_Dialog() *Troco foi movido para a BIB_VEND
;Ultima Alteracao: 17/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pedido faturado 0388         
;Ultima Alteracao: 22/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado controle para destina‡äes inativas -> DESTIN_INATIVA
;Ultima Alteracao: 26/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado SaveTables e UnLockRecord ao criar registro -> Fatura_Pedido_Orcamento()
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 26/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NCMUF             
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0429#
;Ultima Alteracao: 12/06/2019 por Kamila Gomes                           
;Motivo Alteracao: Em ATUA_SITUACAO_PEDIDO_ORCAMENTO() Removido Cliente #0377# -> PEDIDO FATURADO mesmo se nÆo faturado total
;Ultima Alteracao: 04/09/2019 por Bruno Carvalho
;Motivo Alteracao: Comentado a linha [Valor do ISSQN] na proc COPIA_PED_ORC_FATURA(), pois nÆo h  este campo no PedidoI 
;Ultima Alteracao: 06/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ [Forma de Pagamento]="RP" na proc Calcular_Vencimentos()
;Ultima Alteracao: 10/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes faturar itens or‡amento entrega #0102                     
;Ultima Alteracao: 19/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes limite credito CHT regra #0377                     
;Ultima Alteracao: 30/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes obs orcamento #0102
;Ultima Alteracao: 11/10/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0102 Grava_Telefone() nÆo obrigatorio
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes closed desabilitado em rotina que usa direto
;Ultima Alteracao: 31/10/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes eliminar Calc_NLinhas_Descricao()
;Ultima Alteracao: 04/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido Limite_Credito() p/ BIB_VEND e novos ajustes implementados
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Cria_Ficha(),CALC_VENCTOS(),Pega_Preco(),Dias_Atraso(),CHEQUES(),Checa_Comissao_Vendedor() p/ BIB_VEND
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Excluir_Rateio_Comissao(),RATEIO_COMISSAO_VENCTOS(),Mensagem_Venda() p/ BIB_VEND
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Rateio_BC_Itens(),Checa_SPC(),Checa_Pedido(),Calcular_Vencimentos() p/ BIB_VEND
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Alterado Geral_Dialog() p/ Balcao_Dialog()
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Alterado proc OPCAO() p/ FATURA_PEDIDO_ORC_OPCAO()  
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#

@ 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 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,
        Aliquota_ICMS_Desonerado,Motivo_Desoneracao_ICMS, NOVA_DESTINACAO,
        SYS_APLICATIVO
    
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=""
If NOVA_DESTINACAO And Not IsBlank([Numero do Pedido])
   Then GetRecord "\\Sistemas\\Vendas\\PedidoC" [FaturaC->Numero do Pedido] To REG_BUSCA_LOOKUP
        If ReTval
           Then OBS=REG_BUSCA_LOOKUP["Observacao na Nota Fiscal"]
        EndIf
EndIf
If NOVA_DESTINACAO And Not IsBlank([Numero do Orcamento]) and
   sys_codigo_Cliente="0102"
   Then GetRecord "\\Sistemas\\Vendas\\OrcaC" [FaturaC->Numero do Orcamento] To REG_BUSCA_LOOKUP
        If ReTval
           Then OBS=REG_BUSCA_LOOKUP["Observacao do Orcamento"]
        EndIf
EndIf
NOVA_DESTINACAO=False


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

Aliquota_ICMS_Desonerado=0
Motivo_Desoneracao_ICMS =""

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

        OBS = OBS+REG_BUSCA_LOOKUP["Observacao_Destinacao"]

        If Not IsBlank(REG_BUSCA_LOOKUP["Conta Caixa Padrao"])
           Then PARAM_CONTA_CAIXA=REG_BUSCA_LOOKUP["Conta Caixa Padrao"]
        EndIf
        OPCAO_RED_BCICMS=REG_BUSCA_LOOKUP["Sem Reducao BCICMS"]
        DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
        Aliquota_ICMS_Desonerado=REG_BUSCA_LOOKUP["Aliquota ICMS Desonerado"]
        Motivo_Desoneracao_ICMS =REG_BUSCA_LOOKUP["Motivo Desoneracao ICMS" ]
        
        If DESTIN_INATIVA="S" 
           Then Mensagem("Destina‡Æo "+[FaturaC->Codigo da Destinacao]+" est  inativa!")
                Return False 
        EndIf
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 C lculo de Valores da Ordem de Faturamento/Nota                 *
;*******************************************************************************
Proc CALC_OF()   
Private TabelaRefI, CampoTab, wi,
        VRBCIPI, VRIPI, VRBCICMS, VRICMS, VRBCST, VRST, VRICMS_CREDSN,
        VRBCISSQN, VRISSQN, VRBCPIS, VRPIS, VRBCCOFINS, VRCOFINS,  
        VRII, VRDESCTONT,
        Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor,
        DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor, DIF_Descto_ValorServico,
        OutrosRateioOk,
        VL_BC_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST,
        TribCST, MercadoriaRateio_Valor,ServicoRateio_Valor,
        Bc_ICMS_Desonerado,
        regtabmva, regncm, regestados,
        TOT_FCP_Valor, TOT_FCP_ST_Valor, TOT_FCP_STRET_Valor,
        TOT_FCP_UFDEST_Valor, TOT_ICMS_UFDEST_Valor, TOT_ICMS_UFREMET_Valor,
        TOT_IPI_DEVOL_Valor, TOT_TRIB_Valor,
        vricmspart, aliqicmspart, aliq_ibpt


If Not IsAssigned(PARAM_CALCOF)      Then PARAM_CALCOF      = ""    EndIf
If Not IsAssigned(PARAM_AGRUPA_ITEM) Then PARAM_AGRUPA_ITEM = False EndIf
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
VRII           =0
VRNF           =0
VRDESCTONT     =0

TOT_FCP_Valor          =0 
TOT_FCP_ST_Valor       =0 
TOT_FCP_STRET_Valor    =0
TOT_FCP_UFDEST_Valor   =0
TOT_ICMS_UFDEST_Valor  =0
TOT_ICMS_UFREMET_Valor =0
TOT_IPI_DEVOL_Valor    =0 
TOT_TRIB_Valor         =0

MSG_AUTOMATICA     = ""

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

;-- Servico ------------------------------------------------------------
[Valor Servico   ]=VRSERV
if [Valor Servico   ]<=0
   then [Taxa de Desconto Servico ]=blanknum()
        [Valor do Desconto Servico]=blanknum()
endif    
If [Taxa de Desconto Servico]>0
   Then S_VRDESCTO      =Round((VRSERV*[Taxa de Desconto Servico])/100,2)
        S_TXDESCTO_TOTAL=[Taxa de Desconto Servico]
   Else S_VRDESCTO      =[Valor do Desconto Servico]
        S_TXDESCTO_TOTAL=(S_VRDESCTO/VRSERV)*100
EndIf
[Valor Desconto Servico]=S_VRDESCTO
[Valor Servico Liquido ]=[Valor Servico   ]-[Valor Desconto Servico]

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Soma dos Items para rateio ------------------------------------------------
MercadoriaRateio_Valor=0
ServicoRateio_Valor   =0
For wi From 1 to DynArraySize(It_prtotal)
  switch 
    case It_tpitem[wi]="C":
      ServicoRateio_Valor=ServicoRateio_Valor+It_prtotal[wi]
    
    otherwise             :
      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

      If OutrosRateioOk
         Then MercadoriaRateio_Valor=MercadoriaRateio_Valor+It_prtotal[wi]
      EndIf   
     
  endswitch 
EndFor

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

For wi From 1 to DynArraySize(It_prtotal)
  switch
    case It_tpitem[wi]="C" : ;servi‡o
          PORC_IT_MERC       =(It_prtotal[wi]/ServicoRateio_Valor)*100 
          It_txdescto[wi]    =S_TXDESCTO_TOTAL
          It_descto[wi]      =NDecimal((REG_TABELAREFC["Valor Desconto Servico"]*PORC_IT_MERC)/100,2)

          Descto_ValorServico=Descto_ValorServico +It_descto[wi]

    otherwise              :
          OutrosRateioOk=True

          PORC_IT_MERC=(It_prtotal[wi]/MercadoriaRateio_Valor)*100 
          If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
             (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
             Then OutrosRateioOk=False
          EndIf
          
          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]
        
             Else It_txdescto[wi]=BlankNum()
                  It_descto[wi]  =BlankNum()
                  It_frete[wi]   =BlankNum()
                  It_seguro[wi]  =BlankNum()
                  It_outdesp[wi] =BlankNum()
          EndIf
          
  endswitch
  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
EndFor

;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor        ,2)
DIF_Descto_ValorServico=NDecimal(REG_TABELAREFC["Valor Desconto Servico"   ]-Descto_ValorServico ,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_Descto_ValorServico <>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
              If DIF_Descto_ValorServico >=0 Or (DIF_Descto_ValorServico*-1) >=It_descto[wi]
                 Then It_descto[wi] =It_descto[wi] +DIF_Descto_ValorServico
                      DIF_Descto_ValorServico=0 
              EndIf

            OtherWise              :  
              OutrosRateioOk=True     ;rateia frete e outros 

              If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
                 (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
                 Then OutrosRateioOk=False
              EndIf
              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   
    
              EndIf
              
          EndSwitch
          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
            
          If DIF_Descto_Valor        =0 And
             DIF_Descto_ValorServico =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":
      switch 
        case It_tpitem[wi]="C":
          ;--- Calculando ISSQN --------------------------------------------------------
          If It_aliq_issqn[wi]>0
             Then 
                  It_bc_issqn[wi]=It_prtotal[wi]-It_descto[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
    
        
        otherwise             :
          ;--- 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
             (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")      And
             (SubStr(Directory(),1,1)<>"X" Or (TabelaRefC="FaturaC" And It_aliq_icmscred[wi]>0  ))
             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)
                  VL_ICMS_ST    =VL_ICMS_ST-It_vr_icms[wi]
            
                  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 ICMS Desonerado ----------------------------------------------
          if TPEMPR="DEBITO/CREDITO" and
             Motivo_Desoneracao_ICMS<>"" And Aliquota_ICMS_Desonerado>0 and
             not IsBlank([FaturaC->ISUFRAMA])
             Then 
                  if ( search(It_cfop[wi],"6109,6110,6120,6122,6123,6151,6152")>0 or 
                       search(It_cfop[wi],"6651,6652,6654,6655,6658,6659,6910")>0 ) and
                       search(SubStr(It_cst_icms[wi],2,2),"20,30,40,70,90")>0 
                     then
                          Bc_ICMS_Desonerado   = It_prtotal[wi] - It_descto[wi]
                          Bc_ICMS_Desonerado   = Bc_ICMS_Desonerado - round((It_prtotal[wi]*It_red_icms[wi])/100,2)
                          
                          It_vrdeson_icms[wi] = round((Bc_ICMS_Desonerado * Aliquota_ICMS_Desonerado)/100,2)
                          It_mtdeson_icms[wi]  = Motivo_Desoneracao_ICMS
                  endif
          EndIf

      endswitch 

        
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0 or It_cst_pis[wi]="06"
         Then 
              switch 
                case It_tpitem[wi]="C":
                  It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])
                
                otherwise             :
                  It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
        
              endswitch 

              switch
                case SYS_CODIGO_CLIENTE="0051" and REG_TABELAREFC["Data de Emissao"]>=dateval("01.05.2017"):
                  if It_bc_pis[wi]>0 
                     then if It_bc_pis[wi]>=It_vr_icms[wi]
                             then It_bc_pis[wi]=It_bc_pis[wi]-It_vr_icms[wi]
                             else It_bc_pis[wi]=0
                          endif   
                  endif   
              endswitch
              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 or It_cst_cofins[wi]="06"
         Then 
              switch 
                case It_tpitem[wi]="C":
                  It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])
                
                otherwise             :
                  It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
        
              endswitch 

              switch
                case SYS_CODIGO_CLIENTE="0051" and REG_TABELAREFC["Data de Emissao"]>=dateval("01.05.2017"):
                  if It_bc_cofins[wi]>0
                     then if It_bc_cofins[wi]>=It_vr_icms[wi]
                             then It_bc_cofins[wi]=It_bc_cofins[wi]-It_vr_icms[wi]
                             else It_bc_cofins[wi]=0
                          endif   
                  endif   
              endswitch
              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

  switch 
    case It_tpitem[wi]="C":

    
    otherwise             :
      ;--- calculo FCP ICMS ST ----------------------------------------------------- 
      If it_bc_st[wi]>0 and it_aliq_fcpst[wi]>0
         then
              it_bc_fcpst[wi]=it_bc_st[wi]
              it_vr_fcpst[wi]=round((it_bc_fcpst[wi]*it_aliq_fcpst[wi])/100,2)
      endif
    
      ;--- calculo FCP ICMS -------------------------------------------------------- 
      If REG_TABELAREFC["Tipo Movimento Estoque"] ="xxxxS"              And  ; tem que confiramr regra conforme necessidade
         Search("VEND",REG_TABELAREFC["Descricao da Destinacao"])>0     And
         it_bc_icms[wi]>0
         then
              GetRecord "\\Sistemas\\Estoque\\NCMUF" it_ncm[wi],REG_TABELAREFC["UF"] To regncmuf
              If RetVal
                 Then it_aliq_fcp[wi]=regncmuf["FCP_Aliquota"]
              EndIf
              if it_aliq_fcp[wi]>0
                 then it_bc_fcp[wi]=it_bc_icms[wi]                               
                      it_vr_fcp[wi]=round((it_bc_fcp[wi]*it_Aliq_fcp[wi])/100,2)
              endif       
      endif
      
      ;--- calculo ICMS Partilha ---------------------------------------------------
      If UF_EMPRESA                              <>REG_TABELAREFC["UF"] And
         REG_TABELAREFC["Tipo Movimento Estoque"] ="S"                  And
         Search("VEND",REG_TABELAREFC["Descricao da Destinacao"])>0     And
         ( ( REG_TABELAREFC["Consumidor Final"   ] ="S" and                
             REG_TABELAREFC["IE"                 ] ="NAOCONTRIBUINTE" ) or 
           ( REG_TABELAREFC["Consumidor Final"   ] ="S" and                
             REG_TABELAREFC["IE"                 ] <>"ISENTO" ) )       And 
         SubStr(It_cfop[wi],1,1)="6"                                    And  
         it_bc_icms[wi]>0
         then
              it_aliq_icmsufdest[wi]    = UF_ALIQUOTA_ICMS_INTERNA  ;Al¡quota interna da UF de destino
              it_aliq_icmsinter[wi]     = it_aliq_icms[wi]          ;Al¡quota interestadual para UF de destino
              
              aliqicmspart              = it_aliq_icmsufdest[wi]-it_aliq_icmsinter[wi]
              it_bc_icmsufdest[wi]      = it_bc_icms[wi]
              vricmspart                = round((it_bc_icmsufdest[wi]*aliqicmspart)/100,2)
              
              If UF_EMPRESA="MG" and (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                 then
                      it_bc_icmsufdest[wi] = 0
                      vricmspart           = 0
              endif  
    
              ;-- Percentual provis¢rio de partilha do ICMS Interestadual para UF destino --------------------------------
              switch
                case year([FaturaC->Data de Emissao]) =2015: It_aliq_icmsinterpart[wi]=20
                case year([FaturaC->Data de Emissao]) =2016: It_aliq_icmsinterpart[wi]=40
                case year([FaturaC->Data de Emissao]) =2017: It_aliq_icmsinterpart[wi]=60
                case year([FaturaC->Data de Emissao]) =2018: It_aliq_icmsinterpart[wi]=80
                case year([FaturaC->Data de Emissao]) >2018: It_aliq_icmsinterpart[wi]=100
              endswitch
              it_vr_icmsufdest[wi]  = round((vricmspart*     It_aliq_icmsinterpart[wi] )/100,2)  ;Valor do ICMS Interestadual para a UF de destino
              it_vr_icmsufremet[wi] = round((vricmspart*(100-It_aliq_icmsinterpart[wi]))/100,2)  ;Valor do ICMS Interestadual para a UF do remetente
    
              ;-- Combate a pobreza ---------------------------------------------------------------------------------------
              GetRecord "\\Sistemas\\Estoque\\NCMUF" it_ncm[wi],REG_TABELAREFC["UF"] To regncmuf
              If RetVal
                 then 
                      it_aliq_fcpufdest[wi]=regncmuf["FCP_Aliquota"]
              endif       
              it_bc_fcpufdest[wi]=it_bc_icmsufdest[wi]                                           ;BC       Fundo Combate probreza a UF Destino
              it_vr_fcpufdest[wi]=round((it_bc_fcpufdest[wi]*it_Aliq_fcpufdest[wi])/100,2)       ;Valor    Fundo Combate probreza a UF Destino
      EndIf

  endswitch 

  ;--- Total dos tributos---------------------------------------------------------
  if REG_TABELAREFC["Tipo Movimento Estoque"               ]="S" And
     (Search("VEND",REG_TABELAREFC["Descricao da Destinacao"])>0 Or 
      Search("SERV",REG_TABELAREFC["Descricao da Destinacao"])>0) 
     Then 
          Switch
           Case It_tpItem[wi]="C" :
             aliq_ibpt=Pega_AliqIBPT(It_trib_icms[wi], It_tpitem[wi], It_cdserv[wi], "")
            
           OtherWise              :
            GetRecord "\\Sistemas\\Estoque\\Iten_Com" It_cdItem[wi] To regiten_com  
            If RetVal
               Then It_extipi[wi]=regiten_com["EX_TIPI"]
            EndIf
            If IsAssigned(It_extipi[wi]) 
               Then aliq_ibpt=Pega_AliqIBPT(It_trib_icms[wi], It_tpitem[wi], StrVal(It_ncm[wi]), It_extipi[wi])
               Else aliq_ibpt=Pega_AliqIBPT(It_trib_icms[wi], It_tpitem[wi], StrVal(It_ncm[wi]), "")
            EndIf   
          EndSwitch
          
          It_vr_tottrib[wi]=NDecimal(((it_prtotal[wi]-It_descto[wi])*aliq_ibpt)/100,2)
  EndIf

  ;--- Somando Impostos -------------------------------------------------------- 
  If TabelaRefC="FaturaC"
     Then 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
     Else VRBCICMS = VRBCICMS + It_bc_icms[wi]
          VRICMS   = VRICMS   + It_vr_icms[wi]              
  EndIf 
     
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  VRICMS_CREDSN  =VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  VRBCISSQN      =VRBCISSQN    +It_bc_issqn[wi]
  VRISSQN        =VRISSQN      +It_vr_issqn[wi]
  VRBCPIS        =VRBCPIS      +It_bc_pis[wi]
  VRPIS          =VRPIS        +It_vr_pis[wi]  
  VRBCCOFINS     =VRBCCOFINS   +It_bc_cofins[wi]
  VRCOFINS       =VRCOFINS     +It_vr_cofins[wi]
  VRII           =VRII         +It_vr_ii[wi]    
  VRDESCTONT     =VRDESCTONT   +It_vrdeson_icms[wi]

  TOT_FCP_Valor          =TOT_FCP_Valor          +It_vr_fcp[wi]
  TOT_FCP_ST_Valor       =TOT_FCP_ST_Valor       +It_vr_fcpst[wi]
  TOT_FCP_STRET_Valor    =TOT_FCP_STRET_Valor    +It_vr_fcpstret[wi]
  TOT_FCP_UFDEST_Valor   =TOT_FCP_UFDEST_Valor   +It_vr_fcpufdest[wi]
  TOT_ICMS_UFDEST_Valor  =TOT_ICMS_UFDEST_Valor  +It_vr_icmsufdest[wi]
  TOT_ICMS_UFREMET_Valor =TOT_ICMS_UFREMET_Valor +It_vr_icmsufremet[wi]
  TOT_IPI_DEVOL_Valor    =TOT_IPI_DEVOL_Valor    +It_vr_ipidevol[wi]
  TOT_TRIB_Valor         =TOT_TRIB_Valor         +It_vr_tottrib[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 Desconto NTributado] = VRDESCTONT

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

[Valor TotTributos        ]=TOT_TRIB_Valor
[Valor IPI Devolvido      ]=TOT_IPI_DEVOL_Valor
[Valor ICMS_UFDest        ]=TOT_ICMS_UFDEST_Valor
[Valor ICMS_UFRemet       ]=TOT_ICMS_UFREMET_Valor

[Valor FCP                ]=TOT_FCP_Valor
[Valor FCP_Ret_ST         ]=TOT_FCP_ST_Valor
[Valor FCP_UFDest         ]=TOT_FCP_UFDEST_Valor
[Valor FCP_Ret_Ant_ST     ]=TOT_FCP_STRET_Valor

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

[Valor Nota Fiscal] =[Valor Nota Fiscal]+[Valor IPI Devolvido]+[Valor FCP_Ret_ST]

VRNF=[Valor Nota Fiscal   ]

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

if CALCULO_NF_AUTOMATICO="A" then
;-- monta observacao automatica ----------------------------------------

MSG_AUTOMATICA=""

TirarMensagemObs("[** Frete: ", "**]")
TirarMensagemObs("** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS ", "NAO GERA DIREITO A CREDITO FISCAL DE ISS E IPI")
TirarMensagemObs(" [* CST....: ", " *]")
TirarMensagemObs("[** ICMS RETIDO POR SUBSTITUICAO", "**]")

If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And VRICMS_CREDSN>0 And 
   ((ALIQUOTA_CREDITO_ICMS_NOSN>0 And TabelaRefC="FaturaC") Or TabelaRefC="NotaC")
   Then MSG_AUTOMATICA=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 [FaturaC->Valor do Frete]>0 And [Frete Incluso na Nota]<>"+"
   Then destfret=" [** Frete: "+lTrim(Format("W9.2,EIC",[Valor do Frete]))
        destfret=destfret+" Aliq: "+lTrim(Format("W6.2,EIC",[Aliquota de ICMS Frete]))
        ICMSFRETE = NDecimal((( ([Valor do Frete]-(([Valor do Frete]*[Aliquota BCICMS Frete])/100))*[Aliquota de ICMS Frete])/100),2)
        destfret=destfret+" ICMS: "+lTrim(Format("W9.2,EIC",ICMSFRETE))
        destfret=destfret+" CFOP: "+[CFO Frete]+" **]"
        
        MSG_AUTOMATICA=MSG_AUTOMATICA+destfret
        
        release vars ICMSFRETE, destfret 
EndIf

If [FaturaC->Tipo Movimento Estoque]="S"               And
   (Search("VEND" ,[FaturaC->Descricao da Destinacao])>0  Or
    Search("BONIF",[FaturaC->Descricao da Destinacao])>0 )
   then 
        if [Valor BCSubstituicao ICMS]>0
           then MSG_AUTOMATICA=MSG_AUTOMATICA+
                               " [** ICMS RETIDO POR SUBSTITUICAO TRIBUTARIA CONFORME õ1§ ART. 12 DO ANEXO XV DO RICMS/2002."
                                                          
                if [Valor FCP_Ret_ST ]>0
                   then MSG_AUTOMATICA=MSG_AUTOMATICA+
                                       " ADICIONAL DE ALIQUOTA - FUNDO DE ERRADICACAO DA MISERIA CUJO VALOR CORRESPONDE E R$ "+
                                       LTrim(FORMAT("W12.2,ECI",[Valor FCP_Ret_ST]))
                endif                  
                MSG_AUTOMATICA=MSG_AUTOMATICA+" **]"
        endif   
endif

[Observacao na Nota Fiscal]=ltrim([Observacao na Nota Fiscal])+MSG_AUTOMATICA

;-----------------------------------------------------------------------

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
endif

;*** 0=BlankNum() **************************************************************
If [Valor Mercadoria         ]=0 Then [Valor Mercadoria         ]=BlankNum() EndIf
If [Valor Mercadoria Liquido ]=0 Then [Valor Mercadoria Liquido ]=BlankNum() EndIf

If [Valor Servico            ]=0 Then [Valor Servico            ]=BlankNum()EndIf
If [Valor Servico Liquido    ]=0 Then [Valor Servico Liquido    ]=BlankNum() EndIf

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 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 [Valor Desconto NTributado]=0 Then [Valor Desconto NTributado]=BlankNum() EndIf

If [Valor Desconto           ]=0 Then [Valor Desconto           ]=BlankNum() EndIf
If [Valor Desconto Servico   ]=0 Then [Valor Desconto Servico   ]=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 TotTributos        ]=0 Then [Valor TotTributos        ]=BlankNum() EndIf
If [Valor IPI Devolvido      ]=0 Then [Valor IPI Devolvido      ]=BlankNum() EndIf
If [Valor ICMS_UFDest        ]=0 Then [Valor ICMS_UFDest        ]=BlankNum() EndIf
If [Valor ICMS_UFRemet       ]=0 Then [Valor ICMS_UFRemet       ]=BlankNum() EndIf

If [Valor FCP                ]=0 Then [Valor FCP                ]=BlankNum() EndIf
If [Valor FCP_UFDest         ]=0 Then [Valor FCP_UFDest         ]=BlankNum() EndIf
If [Valor FCP_Ret_ST         ]=0 Then [Valor FCP_Ret_ST         ]=BlankNum() EndIf
If [Valor FCP_Ret_Ant_ST     ]=0 Then [Valor FCP_Ret_Ant_ST     ]=BlankNum() EndIf

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

Moveto TabelaRefC
Moveto Field CampoTab

Release vars  VRBCIPI, VRIPI, VRBCICMS, VRICMS, VRBCST, VRST, VRICMS_CREDSN,
              VRBCISSQN, VRISSQN, VRBCPIS, VRPIS, VRBCCOFINS, VRCOFINS,  
              VRII, VRDESCTONT,
              Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor, Descto_ValorServico,
              DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor, DIF_Descto_ValorServico,
              OutrosRateioOk,
              VL_BC_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST,
              TribCST, MercadoriaRateio_Valor, ServicoRateio_Valor,
              Bc_ICMS_Desonerado,
              regtabmva, regncm, regestados, regiten_com,
              TOT_FCP_Valor, TOT_FCP_ST_Valor, TOT_FCP_STRET_Valor,
              TOT_FCP_UFDEST_Valor, TOT_ICMS_UFDEST_Valor, TOT_ICMS_UFREMET_Valor,
              TOT_IPI_DEVOL_Valor, TOT_TRIB_Valor,
              vricmspart, aliqicmspart, aliq_ibpt

Release Procs Pega_AliqIBPT, TirarMensagemObs

LimpAguarde()
EndProc     ;Calc_OF()

;*******************************************************************************
;* Atualiza Situacao do Pedido ou Orcamento                                    *
;*******************************************************************************
Proc ATUA_SITUACAO_PEDIDO_ORCAMENTO()

Private WC_NUMPED, WC_PEDFAT,TemItemFaturado
 
TemItemFaturado=False
 
WC_NUMPED=0
WC_PEDFAT=0
Scan
  WC_NUMPED=WC_NUMPED+1
  If [Quantidade Faturada]>=[Quantidade]
     Then WC_PEDFAT=WC_PEDFAT+1
  EndIf
  If [Quantidade Faturada]>0
     Then TemItemFaturado=True
  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 [Situacao do Pedido   ]="ABERTO"
                        If TemItemFaturado And 
                           ( ;SYS_CODIGO_CLIENTE = "0377" Or       **Jana¡na solicitou que removesse essa op‡Æo
                            SYS_CODIGO_CLIENTE = "0345" Or
                            SYS_CODIGO_CLIENTE = "0388" Or
                            SYS_CODIGO_CLIENTE = "0427" Or
                            SYS_CODIGO_CLIENTE = "0419" Or
                            SYS_CODIGO_CLIENTE = "0444" Or
                            SYS_CODIGO_CLIENTE = "0429") 
                           Then [Situacao do Pedido   ]="FATURADO"
                        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 COPIA_PED_ORC_FATURA()

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    ]
        
        if sys_codigo_cliente="0102"
           then
                [Entrega        ]="S"
                [Data a Entregar]=[FaturaC->Data de Emissao]
        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]=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)

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

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

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

;*******************************************************************************
;* 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 "FATURA_PEDIDO_ORC_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)
  UnLockRecord
  Locate [FaturaC->Numero 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
          EndIf
          Mensagem(MSG)
  EndIf
	
  If ATUALIZA
     Then ESTOQUE() 
  EndIf
  
  Moveto "FaturaI"
  UnLockRecord  

  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
SaveTables

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)

;*******************************************************************************
;* Confirmacao de Janela                                                       *
;*******************************************************************************
Proc FATURA_PEDIDO_ORC_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  ;FATURA_PEDIDO_ORC_OPCAO()

;*******************************************************************************
;* 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 Grava_LogEx("BIB_BAL BloqMes")
              Else Retorno=False
           EndIf
        EndIf
EndIf
Moveto "FaturaC"
FormKey

Moveto Field NomeCampo
Return Retorno
EndProc

;*******************************************************************************
;* 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 "Balcao_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()

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

if isblank([Faturac->Telefone])
   then return
endif   

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 Balcao_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:
      ;;;***** 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:
      ;;;***** 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    ; (Balcao_Dialog)

;******************************************************************************
;** Monta Procedures                                                        ***
;******************************************************************************
WriteLib "\\Sistemas\\Vendas\\Bib_Bal"
         Checagem_Pagina1,CALC_OF,ATUA_SITUACAO_PEDIDO_ORCAMENTO,
         COPIA_PED_ORC_FATURA,Verifica_Caixa,Checa_Entrega,Entra_Numero_Cupom,
         ATUA_PEDIDO_ORCAMENTO,FATURA_PEDIDO_ORCAMENTO,FATURA_PEDIDO_ORC_OPCAO,
         Checa_Meses_SemVenda,Acrescimo_Item, Grava_Telefone,Balcao_Dialog
