;* Fatura **********************************************************************
;*  Digitacao de Ordem de Faturamento e Emissao Nota Fiscal                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 08/09/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 28/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Alteracao Vendedor/Empresa            
;Ultima Alteracao: 28/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Codigo de Barras Pega_Preco
;Ultima Alteracao: 08/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Desconto Unitario Entretex
;Ultima Alteracao: 14/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Comissao Item Vico
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 22/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Impressao Boleto/0147
;Ultima Alteracao: 28/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 13/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Duplic
;Ultima Alteracao: 24/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Gera_Fatura_Igual_OF
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 16/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCSubstituicao
;Ultima Alteracao: 22/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCICMS_CREDSN, VRIPI_SUBST
;Ultima Alteracao: 27/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao P_Cartao
;Ultima Alteracao: 30/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito Ft_Duplic
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito
;Ultima Alteracao: 04/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes REEMITIR CHAVECDBAR()
;Ultima Alteracao: 16/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Ajustado Calculo Substituicao MVA Item
;Ultima Alteracao: 24/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem situacao do Pedido em aberto      
;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: 04/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Faturar Expedicao                       
;Ultima Alteracao: 16/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes CHECA_MVA()
;Ultima Alteracao: 22/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes BCSubstituicao/Valor DIGITADO/CALCULADO
;Ultima Alteracao: 23/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao e MVA Ajustado
;Ultima Alteracao: 22/02/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Parƒmetros Data Base p/ Calculo de Venctos
;Ultima Alteracao: 15/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Cidades
;Ultima Alteracao: 23/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF-e                                       
;Ultima Alteracao: 30/03/2010 por Cleber Alves
;Motivo Alteracao: Ajustes F1 Cidade p/Cheque
;Ultima Alteracao: 12/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Selecao romaneio/nf formulario/ NF-e 
;Ultima Alteracao: 23/04/2010 por Cleber Alves            
;Motivo Alteracao: Play Calc_MA                                                                       
;Ultima Alteracao: 28/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSG_AUTOMATICA
;Ultima Alteracao: 03/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Frete por conta 0_Sem Frete                        
;Ultima Alteracao: 04/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CFO Frete
;Ultima Alteracao: 06/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Usar Pedido/Expedicao para Entrada
;Ultima Alteracao: 07/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_Estoque() SALDOATUAL       
;Ultima Alteracao: 13/05/2010 por Cleber Alves
;Motivo Alteracao: Ajustes Checa Autorizado
;Ultima Alteracao: 18/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie NFe          
;Ultima Alteracao: 21/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PARAM_CAMINHO_MANAGER
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 15/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem Nota Gera/Codigo/Serie          
;Ultima Alteracao: 01/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 07/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 05/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 08/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCICMS_CREDSN + ICMS NÆo Tributado p/ MSG automatica
;Ultima Alteracao: 17/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novos campos e ajustes layout
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSG PARCIAL em devolucao, CST ICMS   
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;Ultima Alteracao: 05/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculos PIs/COFINS Saida Venda     
;Ultima Alteracao: 09/08/2010 por  Bruno Carvalho
;Motivo Alteracao: Ajustes de Carnˆ para Cliente 0272   
;Ultima Alteracao: 13/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Menu tipo documento a gerar         
;Ultima Alteracao: 27/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Item NotaI                      
;Ultima Alteracao: 02/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Outro ICMS/IPI                     
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN  
;Ultima Alteracao: 13/09/2010 por Karina Andrade
;Motivo Alteracao: Ajuste MSGCAMPO Telefone 
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo                            
;Ultima Alteracao: 19/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSG_AUTOMATICA
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajuste Rotina C¢digo de Barra
;Ultima Alteracao: 10/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes VSD_I_RBC_IPI
;Ultima Alteracao: 12/11/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Consulta de Itens
;Ultima Alteracao: 16/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes notas referenciadas Inclusao FaturaR/NotaR                             
;Ultima Alteracao: 19/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes versÆo layout 1.10 / 2.00                         
;Ultima Alteracao: 24/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Bloqueio Faturamento>Pedido                 
;Ultima Alteracao: 25/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rotina C¢digo de Barra
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 24/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes data para layout 2.00
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas                         
;Ultima Alteracao: 04/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao NCM no Item            
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 13/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRSOMA_ST      
;Ultima Alteracao: 10/02/2011 por Karina
;Motivo Alteracao: Ajustes Checa_Tag p/ Codigo da Destinacao
;Ultima Alteracao: 15/02/2011 por Karina
;Motivo Alteracao: Ajustes Codigo da Destinacao
;Ultima Alteracao: 18/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRSOMA_ST      
;Ultima Alteracao: 23/02/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Verifica‡Æo de Limite de Cr‚dito para "0222"
;Ultima Alteracao: 03/03/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado ShowDialog e novas op‡äes na Digita‡Æo dos Itens
;Ultima Alteracao: 14/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Rateio_BC_Itens() Ajustes Novos Campos
;Ultima Alteracao: 22/03/2011 por Bruno Carvalho
;Motivo Alteracao: InclusÆo FT_JC e Ajustes Variavel TIPO_SAIDA
;Ultima Alteracao: 26/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FT_JC
;Ultima Alteracao: 26/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mudanca automatica CSON                         
;Ultima Alteracao: 29/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ST 60 soma/rateio                              
;Ultima Alteracao: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                          
;Ultima Alteracao: 13/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checam_pagina1() CNPJNF_e                                   
;Ultima Alteracao: 13/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo PIS/COFINS                                           
;Ultima Alteracao: 20/04/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout "Digita‡Æo dos Itens"
;Ultima Alteracao: 03/05/2011 por Karina Andrade
;Motivo Alteracao: Add FT_DESF para desfazer NFE Fatura/Nota e Financeiro
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 16/05/2011 por Karina Andrade
;Motivo Alteracao: Add Play "FT_DESF" para Cancelamento
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras 
;Ultima Alteracao: 24/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gravar N§ Carregamento, Ajustes ROM j  emitido  
;Ultima Alteracao: 16/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TECLAS nos itens
;Ultima Alteracao: 20/06/2011 por Karina Andrade
;Motivo Alteracao: Ajuste Inclusao Pedido Sys_codigo_cliente="0232"
;Ultima Alteracao: 07/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao/Ajustes dados para o SPED     
;Ultima Alteracao: 11/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Transportador "O PROPRIO"
;Ultima Alteracao: 13/07/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina nos itens "Valores de Importa‡Æo" 
;Ultima Alteracao: 13/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes travar trete por conta invalido
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BLOQUEIO_REIMPRESSAO c/ Supervisor
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IPI Outros                         
;Ultima Alteracao: 23/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowPopup                          
;Ultima Alteracao: 26/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gravar dados NotaR novos campos = FaturaR
;Ultima Alteracao: 27/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes gravar primeiro dados da Nota depois gerar NF-e
;Ultima Alteracao: 27/07/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina "informacoes adicionais" na digita‡Æo dos itens
;Ultima Alteracao: 28/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ST Devolcucao 60 rateio 
;Ultima Alteracao: 03/08/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes VRII                       
;Ultima Alteracao: 15/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina para formas de localizar o item e Ajustes "0296" 
;Ultima Alteracao: 24/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Fun‡äes para VISE                          
;Ultima Alteracao: 25/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Cancelamento 
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CUSTO=0->CUSTO=[Ultimo Custo Total]
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Auditoria nÆo alterar CFO da destina‡Æo
;Ultima Alteracao: 28/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC so Pessoa JURIDICA
;Ultima Alteracao: 30/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variavel opcaoc Cancelamento NF-e
;Ultima Alteracao: 11/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC so Pessoa JURIDICA s¢ no Fatura
;Ultima Alteracao: 20/10/2011 por Anivel Karina Andrade
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC so Pessoa JURIDICA s¢ VENDA
;Ultima Alteracao: 24/10/2011 por Anivel Karina Andrade
;Motivo Alteracao: Ajustes NF2011/004 
;Ultima Alteracao: 25/10/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Ordem de Compra Publica
;Ultima Alteracao: 31/10/2011 por Karina Andrade
;Motivo Alteracao: Ajuste msg versao Nf-e pl_006J
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 09/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Parametro de bloqueio para Altera‡Æo e ReemissÆo 
;Ultima Alteracao: 22/11/2011 por Karina Andrade
;Motivo Alteracao: Desabilitado CST PIS/COFINS Automatico para ISSQN="N"
;Ultima Alteracao: 29/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSON 101 Florita
;Ultima Alteracao: 13/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Ajustado SIMPLES NACIONAL                
;Ultima Alteracao: 10/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 27/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN SIMPLES NAC so Pessoa FISICA
;Ultima Alteracao: 27/02/2012 por Karina Andrade
;Motivo Alteracao: Ajustes CD_Barras SYS_CODIGO_CLIENTE="0304"
;Ultima Alteracao: 09/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CHECANFE_AUT                       
;Ultima Alteracao: 13/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TRAIRAïS checagem credito de icms simples nacional
;Ultima Alteracao: 16/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo e Rateio PIS/COFINS               
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo venctos com instru‡Æo de desconto ModaMil
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 17/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN=400 Confec‡Æo SIMPLES NACIONAL               
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 25/04/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo "Consulta SPC" conforme parƒmetro
;Ultima Alteracao: 04/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Consulta SPC"
;Ultima Alteracao: 07/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PIS/COFINS=99 Simples Nacional    
;Ultima Alteracao: 18/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Vencimento=A Vista de forma pagto = Deposito nÆo gerar Caixa/Banco - Tricustura
;Ultima Alteracao: 21/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nova logica para calculo da nota                   
;Ultima Alteracao: 24/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Consulta SPC"
;Ultima Alteracao: 11/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nova logica para calculo da nota/nota livre        
;Ultima Alteracao: 15/06/2012 por Bruno Carvalho 
;Motivo Alteracao: Ajsutes Posi‡Æo da Rotina Rateio_BC_Itens()
;Ultima Alteracao: 20/06/2012 por Bruno Carvalho 
;Motivo Alteracao: Retirado PARAM_ENTREGA pois nÆo h  utiliza‡Æo no Fatura 
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 28/06/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina de localizar item para c¢digo 0319    
;Ultima Alteracao: 02/07/2012 por Bruno Carvalho
;Motivo Alteracao: Removido Proc Nota() e Add "FT_NOTA" 
;Ultima Alteracao: 03/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nfeautorizada()    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message ShowDialog    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar novo MVA e %ST ao trocar CST/CSON    
;Ultima Alteracao: 05/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem desconto conforme condicao pagto - MODAMIL
;Ultima Alteracao: 11/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculando imposto de importa‡Æo                
;Ultima Alteracao: 12/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Imposto de Importa‡Æo          
;Ultima Alteracao: 16/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Proc Valor_Importacao()    
;Ultima Alteracao: 24/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF-e modo DPEC+FSDA                             
;Ultima Alteracao: 26/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes for‡ar aliquota de credito csosn com direito a credito
;Ultima Alteracao: 27/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes p/ Confec‡äes CSON=400 opera‡Æo diferente de venda
;Ultima Alteracao: 01/08/2012 por Bruno Carvalho
;Motivo Alteracao: Novos ajustes p/ BLOQUEIA_REEMISSAO e BLOQUEIA_ALTERA
;Ultima Alteracao: 13/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valor_importacao()
;Ultima Alteracao: 13/08/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado vizualiza‡Æo para uma nova tabela "Empriest" usada no NF-Nfe
;Ultima Alteracao: 16/08/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo Digitai() "VSD_I_Referencia"
;Ultima Alteracao: 17/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servico d lmeida                         

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Faturamento                         *
;*******************************************************************************
Proc ChaveC()
PARAM_CUPOM_FISCAL=""
COPIOU_REGISTRO=False                                           
FACA_DIGITAC=True
INICIO_PAGINA=True
PRIMEIRA_VEZ =True

NFEJA_AUTORIZADA=False
CHAVE_ACESSO_NFE=""

CHECANFE_AUT=False

IMPRIMIR_CARREGAMENTO=False

VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True
  Moveto "FaturaC"
  End
  Moveto [Numero da OF]
  ORDFAT=[Numero da OF]

  If OPCAO_FORM="F"
    Then Down
    Else PgDn PgDn PgDn PgDn
  EndIf
  Moveto [Numero da OF]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  If RetVal=-33
     Then Echo Normal
          Echo Off

          Switch
            Case SYS_CODIGO_CLIENTE="0092":
              ShowPopup " Fun‡”es VISE" CENTERED
               "F5 ~G~erar DB->ACCESS     ": " Gera arquivo DB->ACCESS NFS-e a emitir    " :"F5",
               "F8 Im~p~rimir Carregamento": " Imprime Carregamento                      " :"F8",
               "F9 ~L~impar emissÆo       ": " Limpar emissÆo de OFïs                    " :"F9",
               "~C~ancelar                ": " Cancelar a Opera‡„o                       " : "CANCELAR"
              EndMenu
              To MenuVar
            OtherWise:
              ShowPopup " Fun‡”es " CENTERED
               "F6 ~I~mprimir Todas       ": " Imprime Fatura                   " :"F6",
               "F8 Im~p~rimir Carregamento": " Imprime Carregamento             " :"F8",
               "~C~ancelar                ": " Cancelar a Opera‡„o              " : "CANCELAR"
              EndMenu
              To MenuVar
          EndSwitch

          Echo Off
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
          EndIf                                         
          RetVal=MenuVar
  EndIf

  Switch
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PARAM_CUPOM_FISCAL=""
           COPIOU_REGISTRO=False
           FACA_DIGITAC=True
           INICIO_PAGINA=True
           PRIMEIRA_VEZ =True
           CHECANFE_AUT=False

           IMPRIMIR_CARREGAMENTO=False

           VCITENS =BlankNum()
           VSQTDE  =BlankNum()
           VSVRMERC=BlankNum()

           If OPCAO_FORM="F"
              Then PAGINA("FaturaC","MR")
              Else PAGINA("FaturaC","MT")
           EndIf
           ORDFAT=[Numero da OF]
           Switch
             Case EDITAR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then CHAVEC=0
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) And
                     (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                     Then If Not IsBlank([Numero Nota Gerada])
                             Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !// J  Gerou Nota Fiscal N§ "+[Numero Nota Gerada])
                                  UnLockRecord
                             Else If QuerExcluir("")
                                     Then DESTIN_ATUALIZA_PEDIDOS=""
                                          Moveto [Codigo da Destinacao]
                                          If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"SM")
                                             Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
                                          EndIf
                                          EXCLUSAO_C()
                                     Else UnLockRecord
                                  EndIf
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="F6":
         Del
         IMPRIGERAL()
         QuitLoop
    Case Retval="F8":
         Del
         IMPRIMIR_CARREGAMENTO=True
         FATURA_PEDIDO_ORCAMENTO() ;** Apenas Showdialog !!
         If PED_ORC_FATURAR<>"000000" And
            PED_ORC_FATURAR<>""
            Then IMPRIGERAL()
         EndIf
         IMPRIMIR_CARREGAMENTO=False
         CHAVEC=5
         Return

    Case Retval="F9" And SYS_CODIGO_CLIENTE="0092":
         Del
         IMPRIMIR_CARREGAMENTO=True
         FATURA_PEDIDO_ORCAMENTO() ;** Apenas Showdialog !!
         If PED_ORC_FATURAR<>"000000" And
            PED_ORC_FATURAR<>""
            Then LIMPA_OFS()
         EndIf
         IMPRIMIR_CARREGAMENTO=False
         CHAVEC=5
         Return
    Case Retval="F5" And SYS_CODIGO_CLIENTE="0092":
         Del
         IMPRIMIR_CARREGAMENTO=True
         Play "gamdbnfe"
         Carrega_Tabelas()
         CoEdit NoWindow "FaturaC"

         IMPRIMIR_CARREGAMENTO=False
         CHAVEC=5
         Return

    Case Retval="ENTER":
         If IsBlank([])
            Then If IsBlank(ORDFAT)
                    Then ORDFAT="1"
                    Else ORDFAT=StrVal(NumVal(ORDFAT)+1)
                 EndIf
                 []=ORDFAT
         EndIf
         []=ALINH()
         ORDFAT=[]
         Del
         PickForm "1"
         Moveto [Numero da OF]
         Locate ORDFAT
         If Retval
            Then CHAVEC=0
            Else CHAVEC=1
                 End
                 If Not IsBlank([Numero da OF])
                    Then PgDn PgDn PgDn PgDn
                 EndIf
                 Moveto [Numero da OF]
                 [Numero da OF]=ORDFAT
         EndIf
         If Not IsLockRecord()
            Then Echo Normal
                 Echo Off
                 If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                    (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                    Then Return
                 EndIf
         EndIf
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
TX_DESCTO_CLIE=0

REEMITIR    =False
FACA_CHAVEI =True
NOVA_DESTINACAO=False
NOVO_PEDIDO    =False
Moveto "FaturaC"

If INICIO_PAGINA
   Then
        If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                CD_EMPRESA=[Codigo da Empresa]
                If CHAVEC=1
                   Then [Codigo da Empresa       ]=PARAM_EMPRESA
                        [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                        [Forma de Pagamento      ]=PARAM_FORMA_PAGTO

                        NOVA_DESTINACAO=True
                        NOVO_PEDIDO    =True
                EndIf
        EndIf

        If Not IsBlank([Numero Nota Gerada])
           Then 
                If SubStr([FaturaC->Sistema Gerador],1,1)="n" Or
                   SubStr([FaturaC->Sistema Gerador],1,1)="s" Or
                   SubStr([FaturaC->Sistema Gerador],1,1)="d" Or
                   SubStr([FaturaC->Sistema Gerador],1,1)="f"
                   Then NOTAFISC =[Numero Nota Gerada]
                        CODFISC  =[Docto Nota Gerada ]
                        SERIEFISC=[Serie Nota Gerada ]
                        
                        If [FaturaC->Sistema Gerador]="n!" Or
                           [FaturaC->Sistema Gerador]="s!" Or
                           [FaturaC->Sistema Gerador]="d!" Or
                           [FaturaC->Sistema Gerador]="f!"
                           Then MSG="NF-e "+NOTAFISC+" j„ foi enviada e autorizada no SEFAZ !"
                                MSG=MSG+"// //Deseja CANCELAR a Nota Fiscal?"
                                 
                                If ConfGeral(MSG)
                                  Then OpcaoC="NF-e"
                                       If PARAM_BLOQUEIA_CANCEL<>"N" 
                                        Then If CHECA_SUPERVISOR()
                                              Then TIPO="CANCELAR"
                                                   Play "FT_DESF"
                                              Else Mensagem("BLOQUEADO, Cancelamento nÆo permitido !")
                                             EndIf 
                                        Else TIPO="CANCELAR"
                                             Play "FT_DESF"    
                                       EndIf
                                EndIf                           
                                CHAVEC=9
                                Return
                        EndIf        

                        CHECANFE_AUT=True
                        If Not Checagem_Pagina1()
                           Then CHAVEC=9
                                Return
                        EndIf
                        CHECANFE_AUT=False

                       If nfeAutorizada("Consulta")
                          Then CHAVEC=9
                               Return
                       EndIf
                        
                        Echo Normal
                        Echo Off
                        OpcaoC="Reenviar"

                        ShowPopup " Op‡”es " CENTERED
                            "~R~eenviar" : " Reenviar NF-e "+[FaturaC->Numero Nota Gerada]          :"Reenviar",
                            "~A~lterar"  : " Alterar/Reenviar NF-e "+[FaturaC->Numero Nota Gerada]  :"Alterar",
                            "~D~esfazer" : " Desfazer NF-e "+[FaturaC->Numero Nota Gerada]+" gerada, para gerar outro numero/modo":"Desfazer",
                              Separator,
                              "~S~air"   : " Ignorar op‡äes"                                        :"Cancela"

                        EndMenu
                        To Opcaoc

                        echo off

                        If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                           Then CHAVEC=9
                                Return
                        EndIf

                        If Opcaoc="Desfazer"
                           Then 
                                MSG="Para desfazer esta NF-e "+NOTAFISC+" gerada em modo "
                                Switch
                                  Case SubStr([FaturaC->Sistema Gerador],1,1)="n" : MSG=MSG+"Normal"
                                  Case SubStr([FaturaC->Sistema Gerador],1,1)="s" : MSG=MSG+"SCAN"
                                EndSwitch
                                MSG=MSG+",// voce deve primeiramente:// //"
                                MSG=MSG+"- RESOLVER a situa‡„o da NF-e no manager;          //"
                                MSG=MSG+"- Se poss¡vel DESFAZER a NF-e no manager;          // //"
                                MSG=MSG+"- Desfazer a NF-e gerada neste Sistema;            //"
                                MSG=MSG+"- Verificar/Corrigir o n£mero da pr¢xima NF-e a ser//"
                                MSG=MSG+"  gerada, no modo Normal/SCAN conforme necess rio. // //"
                                If ConfGeral(MSG+"Deseja realmente desfazer ?")
                                   Then TIPO="DESFAZER"         
                                        Play "FT_DESF"
                                EndIf        
                                CHAVEC=9
                                Return
                        EndIf   

                        If ModoNFe="Normal" And [FaturaC->Sistema Gerador]="s"
                           Then Mensagem("Reenvio em modo Normal da NF-e "+NOTAFISC+" n„o ‚ poss¡vel !// //A mesma J  foi enviada em modo SCAN !") 
                                CHAVEC=9
                                Return
                        EndIf    
                 
                        If ModoNFe="SCAN" And [FaturaC->Sistema Gerador]="n"
                           Then Mensagem("Reenvio em modo SCAN da NF-e "+NOTAFISC+" n„o ‚ poss¡vel !// //A mesma J  foi enviada em modo Normal !") 
                                CHAVEC=9
                                Return
                        EndIf    
                  
                        If Opcaoc="Reenviar"
                           Then Moveto "FaturaC"
                                REEMITIR=True
                                Return
                        EndIf

                   Else 
                        DoctoGerado=[Docto Nota Gerada]+"/"+[Numero Nota Gerada]+"-"+[Serie Nota Gerada]

                        If SubStr([FaturaC->Sistema Gerador],1,1)="C"
                           Then MSG="Esta ordem de faturamento gerou o documento:// //"
                                MSG=MSG+DoctoGerado+"// //"
                                MSG=MSG+"Documento com situa‡Æo: CANCELADO !"
                                Mensagem(MSG)
                                CHAVEC=9
                                Return
                        EndIf
                        If Search("TROCA",[Descricao da Destinacao])>0
                           Then Mensagem("Opera‡Æo de TROCA, utilizar rotina TROCA/VENDA !")
                                CHAVEC=9
                                Return
                        EndIf

                        While True
                     
                          Echo Normal
                          Echo Off
                          ShowPopup " Op‡”es " CENTERED
                              "~R~eemissÆo do documento" : " ReemissÆo/Regera‡Æo da ordem de faturamento do documento "+DoctoGerado :"Imprimir",
                              "~A~lterar a O.F."         : " Altera‡Æo/ReemissÆo da ordem de faturamento do documento "+DoctoGerado :"Alterar",
                              "~C~ancelar o documento"   : " Cancelamento do documento gerado "+DoctoGerado                         :"Cancelar",
                              Separator,
                              "~S~air"      : " Ignorar op‡äes"                                                        :"Cancela"
                          EndMenu
                          To Opcaoc
                          echo off
  
                          If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                             Then CHAVEC=9
                                  Return
                          EndIf
                     
                          Switch
                            Case Opcaoc="Alterar":                
                              If PARAM_BLOQUEIA_ALTERA<>"N" 
                                Then Mensagem("BLOQUEADO, Altera‡Æo/Reemiss„o nÆo ‚ permitida !") 
                                     If PARAM_BLOQUEIA_ALTERA="P" 
                                        Then If Not CHECA_SUPERVISOR() 
                                                Then Loop
                                             EndIf
                                        Else Loop     
                                     EndIf      
                              EndIf
                              QuitLoop
                            Case Opcaoc="Imprimir":          
                              If PARAM_BLOQUEIA_REEMISSAO<>"N"
                                 Then Mensagem("BLOQUEADO, Reemiss„o nÆo ‚ permitida !")
                                      If PARAM_BLOQUEIA_REEMISSAO="P"
                                         Then If Not CHECA_SUPERVISOR()
                                                 Then Loop
                                              EndIf   
                                         Else Loop       
                                      EndIf   
                              EndIf
                              If Not Checagem_Pagina1()
                                 Then Loop
                              EndIf   
                              Moveto "FaturaC"
                              REEMITIR=True
                              Return
                            
                            Case Opcaoc="Cancelar":
                             MSG="Esta ordem de faturamento gerou o documento:// //"
                             MSG=MSG+DoctoGerado+"// //"
                             MSG=MSG+"Deseja CANCELAR este documento gerado ?" 
                             If ConfGeral(MSG)
                               Then If PARAM_BLOQUEIA_CANCEL<>"N" 
                                      Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !")
                                           If CHECA_SUPERVISOR()
                                            Then TIPO="CANCELAR"
                                                 Play "FT_DESF"
                                            Else Loop
                                           EndIf 
                                      Else TIPO="CANCELAR"
                                           Play "FT_DESF"    
                                    EndIf 
                             EndIf
                             CHAVEC=9
                             Return      
                            
                          EndSwitch
                        EndWhile
                EndIf                
        EndIf
EndIf

If CHAVEC=0 Or Not INICIO_PAGINA
   Then Switch
           Case SYS_CODIGO_CLIENTE="0092" : Moveto [Numero_Carregamento]
           OtherWise                      :   
              Moveto [Codigo da Destinacao]
        EndSwitch
   Else [Data de Saida  ]=Today()
        [Data de Emissao]=Today()
        [Hora de Saida  ]=Time()
        If Not IsBlank([Codigo da Empresa])
           Then If PARAM_PEDIDO="S"
                   Then Moveto [Numero do Pedido]
                   Else If PARAM_ORCAMENTO="S"
                           Then Moveto [Numero do Orcamento]
                           Else If IsBlank([Codigo da Destinacao])
                                   Then Moveto [Codigo da Destinacao]
                                   Else If PARAM_FATURA_IGUAL_OF="S"
                                           Then Moveto [Data de Emissao     ]
                                           Else Moveto [Codigo              ]
                                        EndIf
                                EndIf
                        EndIf
                EndIf
           Else Moveto [Codigo da Empresa]
        EndIf                        
EndIf

FACA_CHAVEDV=True
FACA_CHAVEI=True
INICIO_PAGINA=False

V_EMPRES =[Codigo da Empresa   ]
V_PEDIDO =[Numero do Pedido    ]
V_DESTIN =[Codigo da Destinacao]
V_COD    =[Codigo]
V_REPRES =[Codigo do Representante]

While True

  TECLA=" Esc=Retornar  "

  If Field()="Numero do Pedido"         Or
     Field()="Numero do Orcamento"      Or
     Field()="Codigo da Empresa"        Or
     Field()="Codigo da Destinacao"     Or
     Field()="Codigo"                   Or
     Field()="UF"                       Or
     Field()="Cidade"                   Or
     Field()="Codigo do Representante"  Or
     Field()="Codigo da Tabela"         Or
     Field()="Condicao de Pagamento"    Or
     Field()="Numero_Carregamento"      Or
     Field()="UF de Entrega"            Or
     Field()="Cidade de Entrega"        Or
     Field()="UF de Cobranca"           Or
     Field()="Cidade de Cobranca"       Or  
    (Field()="Nome do Autorizado" And [Tipo]="C")
     Then TECLA=TECLA + "F1=Tabelas  "
     Else TECLA=TECLA + "            "
  EndIf
   
  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  "
     Else TECLA=TECLA + "             "
  EndIf
  TECLA=TECLA + "Alt+F=Fun‡”es  "

  If (Field()="Endereco de Cobranca" Or Field()="Endereco de Entrega")
     Then TECLA=TECLA + "F9=End.=Cadastro  "
     Else TECLA=TECLA + "                  "
  EndIf

	If Field()="Codigo da Empresa"   Or
	   Field()="Numero do Pedido"    Or
	   Field()="Numero do Orcamento" Or
	   Field()="Numero_Carregamento" Or
	   Field()="Codigo da Destinacao"
	   Then TECLA=TECLA+"      "
	   Else TECLA=TECLA+"PgDn  "
	EndIf

;;  If CHAVEC=1 And PARAM_CUPOM_FISCAL="S"
;;     Then TECLA=TECLA+"F2=Imp.Cupom F4=Imp.Cupons"
;;  EndIf

  MSGCAMPO=Field()
  If Field()="Endereco"               
	   Then MSGCAMPO="Endere‡o: Logradouro, Numero, Complemento"
	EndIf   
  If Field()="Telefone"               
     Then If[UF]="EX"
            Then MSGCAMPO="+PP XX NNNN-NNNN"
            Else MSGCAMPO="XX NNNN-NNNN"
          EndIf  
	EndIf 
  If Field()="Consumidor Final"
     Then MSGCAMPO="Consumidor Final (Sim/N„o) * Sim = Calculo ICMS sobre o valor do IPI"
  EndIf
  If Field()="Numero Nota Original"
     Then MSGCAMPO="Informe n§ nota original que se refere, [F7] Notas referenciadas !"
  EndIf
  If Field()="Codigo da Tabela"
     Then MSGCAMPO="C¢digo da Tabela de Pre‡o"
  EndIf
  If Field()="Origem do Pedido"
     Then MSGCAMPO="Visita, Fone, Balc„o"
  EndIf
  If Field()="Tipo Pessoa"
     Then MSGCAMPO=MSGCAMPO+": Fisica, Juridica"
  EndIf
  If Field()="CGC"
     Then MSGCAMPO="CNPJ/CPF"
  EndIf
  If Field()="IE"
     Then MSGCAMPO="Informe o N§ ou ISENTO p/ Inscri‡Æo Estadual"
  EndIf
  If Field()="ISUFRAMA"
     Then MSGCAMPO="Inscri‡Æo SUFRAMA"
  EndIf
  If Field()="Codigo"
     Then If [Tipo Movimento Estoque]="S"
             Then MSGCAMPO="C¢digo do Destinatario"
             Else MSGCAMPO="C¢digo do Emitente"
          EndIf
  EndIf
  If Field()="Data de Saida"
     Then If [Tipo Movimento Estoque]="S"
             Then MSGCAMPO="Data de Saida"
             Else MSGCAMPO="Data de Entrada"
          EndIf
  EndIf
  If Field()="Hora de Saida"
     Then If [Tipo Movimento Estoque]="S"
             Then MSGCAMPO="Hora de Saida"
             Else MSGCAMPO="Hora de Entrada"
          EndIf
  EndIf

  If Field()="Nome do Autorizado" And [Tipo]="C"
     Then Monta_Opcoes("Autorizado",[Codigo])
  EndIf
  
  If Field()="Codigo da Destinacao"
    Then DEST_ANT=[Codigo da Destinacao]
  EndIf
    
  Prompt TECLA
  Wait Field
       Message MSGCAMPO
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7","F8","F9",-33

  If RetVal=-33
           Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
            "[F4] ~O~rdem de Compra P£blica " : " Ordem de Compra P£blica         " : "F4",
            "[F7] Documentos ~R~eferenciados" : " Referenciar demais documentos   " : "F7",
            "[F8] ~E~ndere‡os          " : " Endere‡os Entrega/Cobranca           " : "F8",
            Separator,
            "~S~air"                     : " Ignorar op‡äes"                   :"Cancela"
          EndMenu
          To MenuVar
          echo off
          If MenuVar="Cancela" or MenuVar="Esc"
             Then Loop
          EndIf

          RetVal=MenuVar
  EndIf

  Switch
  Case RetVal="F1":
       If Field()="Numero do Pedido"         Or
          Field()="Numero do Orcamento"      Or
          Field()="CFO"                      Or
          Field()="Codigo da Empresa"        Or
          Field()="Codigo da Destinacao"     Or
          Field()="Codigo"                   Or
          Field()="UF"                       Or
          Field()="Cidade"                   Or
          Field()="Codigo do Representante"  Or
          Field()="Codigo da Tabela"         Or
          Field()="Condicao de Pagamento"    Or 
          Field()="UF de Entrega"            Or
          Field()="Cidade de Entrega"        Or
          Field()="UF de Cobranca"           Or
          Field()="Cidade de Cobranca"       Or
          Field()="Numero_Carregamento"
          Then If CONSULTAF1()
                  Then If Field()="Cidade"
                          Then [UF  ]=Reg_ConsultaF1["UF"]
                       EndIf
                       If Field()="Cidade de Entrega"
                          Then [UF de Entrega ]=Reg_ConsultaF1["UF"]
                       EndIf
                       If Field()="Cidade de Cobranca"
                          Then [UF de Cobranca]=Reg_ConsultaF1["UF"]
                       EndIf
               EndIf
       EndIf
       If Field()="Nome do Autorizado" And [Tipo]="C"
          Then Seleciona_Opcoes("Autorizado","CR")
       EndIf
;;  Case RetVal="F2" Or RetVal="F4" And CHAVEC=1 And PARAM_CUPOM_FISCAL="S":
;;       If IsBlank([Codigo da Destinacao])
;;          Then Mensagem("Informe o Codigo da Destina‡„o")
;;               Loop
;;       EndIf
;;       Tecla_Dig=RetVal
;;       Campo_Ant=Field()
;;       Moveto [Codigo da Destinacao]
;;       Ativa_Lookup()
;;       Moveto [Codigo da Destinacao]
;;       Locate [FaturaC->Codigo da Destinacao]
;;       If [Atualiza Estoque]="S"
;;          Then Mensagem("Aten‡„o! Codigo da Destina‡„o Inv lida-> Atualiza Estoque=Sim")
;;               KeyPress "ESC"
;;               Loop
;;       EndIf
;;       KeyPress "ESC"
;;
;;       Switch
;;        Case Tecla_Dig="F2":
;;             Entra_Numero_Cupom()
;;        Case Tecla_Dig="F4":
;;             Do_It!
;;             Play "FT_CF"
;;             Carrega_Tabelas()
;;             CoEdit "FaturaC"
;;             PickForm "1"
;;             Moveto [Numero da OF]
;;             Locate ORDFAT
;;
;;             NOVA_DESTINACAO=False
;;       EndSwitch
;;       Moveto Field(Campo_Ant)
;;       Loop

  Case RetVal="PGDN":
       If Field()="Codigo da Empresa"   Or
          Field()="Numero do Pedido"    Or
          Field()="Numero do Orcamento" Or
          Field()="Numero_Carregamento" Or
          Field()="Codigo da Destinacao"
          Then Loop
       EndIf

       If [Codigo da Destinacao]<>V_DESTIN
          Then NOVA_DESTINACAO=True
       EndIf

       If [Numero do Pedido]<>V_PEDIDO
          Then NOVO_PEDIDO    =True
       EndIf

       If Checagem_Pagina1() Then QuitLoop EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If Not IsBlank([Numero Nota Gerada])
                  Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !// J  Gerou Nota Fiscal N§ "+[Numero Nota Gerada])
                  Else If QuerExcluir("")
                          Then EXCLUSAO_C()
                               CHAVEC=9
                               QuitLoop
                       EndIf
               EndIf
       EndIf
  Case Retval="F4":
       Ordem_Compra_Publica()       
  Case Retval="F7":
       Play "FT_NFER"
       Loop
  Case Retval="F8":
       Moveto [Endereco de Cobranca]
  Case Retval="F9":
       If Field()="Endereco de Cobranca" Or
          Field()="Endereco de Entrega"
          Then ENDERECOS()
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Razao Social"             : Moveto [Tipo Pessoa]
       Case Field()="Nome do Autorizado"       : Moveto [Razao Social]
       Case Field()="Endereco de Cobranca"     : Moveto [Codigo do Representante]
       Case Field()="Codigo da Tabela"         : Moveto [Condicao de Pagamento]
       Case Field()="Condicao de Pagamento"    : Moveto [Origem do Pedido]
       Case Field()="Origem do Pedido" or
            Field()="Comissao do Representante": Moveto [Codigo do Representante]
       Case Field()="Consumidor Final"         : Moveto [Codigo]
       Case Field()="CFO"                      : Moveto [Codigo da Destinacao]
       Case Field()="Codigo da Empresa":
            If QuerDesfazer("")
               Then EXCLUSAO_C()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Numero_Carregamento" And SYS_CODIGO_CLIENTE="0092":
            If CHAVEC=1
               Then Moveto [Codigo da Empresa]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Codigo da Destinacao":
            If CHAVEC=1
               Then Moveto [Codigo da Empresa]
               Else If SYS_CODIGO_CLIENTE="0092"
                       Then Moveto [Numero_Carregamento]
                            Loop
                    EndIf

                    If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Numero_Carregamento" And SYS_CODIGO_CLIENTE="0092":
            If CHAVEC=1
               Then Moveto [Codigo da Empresa]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Data de Emissao" Or 
            Field()="Numero Nota Original":
            Switch
              Case SYS_CODIGO_CLIENTE="0217": Moveto [Codigo da Destinacao]
              OtherWise                     : Moveto [CFO]
            EndSwitch
       Case Field()="Numero do Pedido" Or Field()="Numero do Orcamento":
            Moveto [Codigo da Empresa]
       OtherWise:
            Left
       EndSwitch
  Case Retval="ENTER":
       If IsBlank([])
          Then If Field()="Codigo da Empresa" Or
                  Field()="Codigo da Destinacao" Or
                  Field()="CFO" Or
                  Field()="Data de Emissao" Or
                  Field()="Codigo" Or
                  Field()="Codigo do Representante" Or
                  Field()="Condicao de Pagamento"
                  Then Loop
               EndIf
       EndIf
       Switch
       Case Field()="Codigo da Empresa":
            If Carrega_Parametros()
               Then If [Codigo da Empresa   ]<>V_EMPRES
                       Then V_EMPRES=[Codigo da Empresa   ]
                            If CHAVEC=1
                               Then [Codigo da Empresa       ]=PARAM_EMPRESA
                                    [Codigo da Destinacao    ]=PARAM_DESTINACAO
                                    [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                                    [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                                    [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                            EndIf
                    EndIf        
                    CD_EMPRESA=[Codigo da Empresa]
                    If PARAM_PEDIDO="S"
                       Then Moveto [Numero do Pedido]
                       Else If PARAM_ORCAMENTO="S"
                               Then Moveto [Numero do Orcamento]
                               Else Moveto [Numero_Carregamento]
                            EndIf
                    EndIf
            EndIf
       Case Field()="Numero do Pedido":
            If Not IsBlank([])
               Then  
                     If Not Carrega_Parametros()
                        Then Loop
                     EndIf

                     V_COD=[CODIGO]
                     [Codigo]=""
                     [CODIGO]=V_COD
                     ENDERECOS()
                     If [Situacao do Cliente]="RECADASTRO"
                        Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
                             Loop
                     EndIf
                     If [Situacao do Cliente]="PESSIMO"
                        Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
                             Loop
                     EndIf

                     V_PEDIDO=[Numero do Pedido]
                     [Numero do Pedido]=""
                     [Numero do Pedido]=V_PEDIDO

                     V_DESTIN2=[Codigo da Destinacao]
                     [Codigo da Destinacao]=""
                     [Codigo da Destinacao]=V_DESTIN2

                     V_REPRES =[Codigo do Representante]
                     [Codigo do Representante]=""
                     [Codigo do Representante]=V_REPRES

                     V_CONDPG =[Condicao de Pagamento]
                     [Condicao de Pagamento]=""
                     [Condicao de Pagamento]=V_CONDPG

                     V_TRANSP =[Codigo da Transportadora]
                     [Codigo da Transportadora]=""
                     [Codigo da Transportadora]=V_TRANSP

                     If [Nome Fantasia Transport]="O PROPRIO"
                        Then [Razao Social Transport ]=[Razao Social  ]
                             [Endereco Transport     ]=[Endereco      ]
                             [Bairro Transport       ]=[Bairro        ]
                             [CEP Transport          ]=[CEP           ]
                             [Cidade Transport       ]=[Cidade        ]
                             [UF Transport           ]=[UF            ]
                             [CGC Transport          ]=[CGC           ]
                             [IE Transport           ]=[IE            ]
                     EndIf

                     V_PEDIDO=[Numero do Pedido]
                     [Numero do Pedido]=""
                     [Numero do Pedido]=V_PEDIDO

                     V_VEICU  =[Codigo do Veiculo]
                     [Codigo do Veiculo]=""
                     [Codigo do Veiculo]=V_VEICU

                     [Data de Emissao]=Today()
                     [Data de Saida  ]=Today()
                     [Hora de Saida  ]=Time()

                     PED_VECTOS()

                     If CD_EMPRESA<>[Codigo da Empresa]
                       Then If SYS_CODIGO_CLIENTE="0232"
                             Then CD_EMPRESA=[Codigo da Empresa]  
                            EndIf 
                            [Codigo da Empresa]=CD_EMPRESA
                            If Not Carrega_Parametros()
                               Then Moveto [Codigo da Empresa]
                                    Loop
                            EndIf
                     EndIf       

                     If Search("VEND",[Descricao da Destinacao])>0
                        Then Mensagem_Venda()
                     EndIf
            EndIf
            Moveto [Numero_Carregamento]
       Case Field()="Numero do Orcamento":
            If Not IsBlank([])
               Then If CHAVEC=1
                       Then 
                            If Not Carrega_Parametros()
                               Then Loop
                            EndIf

                            V_COD=[CODIGO]
                            [Codigo]=""
                            [CODIGO]=V_COD
                            ENDERECOS()
                            If [Situacao do Cliente]="RECADASTRO"
                               Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
                                    Loop
                            EndIf
                            If [Situacao do Cliente]="PESSIMO"
                               Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
                                    Loop
                            EndIf

                            V_ORCAME=[Numero do Orcamento]
                            [Numero do Orcamento]=""
                            [Numero do Orcamento]=V_ORCAME

                            V_DESTIN2=[Codigo da Destinacao]
                            [Codigo da Destinacao]=""
                            [Codigo da Destinacao]=V_DESTIN2

                            V_REPRES =[Codigo do Representante]
                            [Codigo do Representante]=""
                            [Codigo do Representante]=V_REPRES

                            V_CONDPG =[Condicao de Pagamento]
                            [Condicao de Pagamento]=""
                            [Condicao de Pagamento]=V_CONDPG

                            V_TRANSP =[Codigo da Transportadora]
                            [Codigo da Transportadora]=""
                            [Codigo da Transportadora]=V_TRANSP

                            If [Nome Fantasia Transport]="O PROPRIO"
                               Then [Razao Social Transport ]=[Razao Social  ]
                                    [Endereco Transport     ]=[Endereco      ]
                                    [Bairro Transport       ]=[Bairro        ]
                                    [CEP Transport          ]=[CEP           ]
                                    [Cidade Transport       ]=[Cidade        ]
                                    [UF Transport           ]=[UF            ]
                                    [CGC Transport          ]=[CGC           ]
                                    [IE Transport           ]=[IE            ]
                            EndIf
        
                            [Data de Emissao]=Today()
                            [Data de Saida  ]=Today()
                            [Hora de Saida  ]=Time()

                    EndIf
            EndIf
            Moveto [Numero_Carregamento]
       Case Field()="Numero_Carregamento":
            Moveto [Codigo da Destinacao]
       Case Field()="Codigo da Destinacao":
         ;;;If []<>V_DESTIN
         ;;;   Then NOVA_DESTINACAO=True
         ;;;   Else NOVA_DESTINACAO=False
         ;;;EndIf
         ;;;V_DESTIN=[]
            If [Codigo da Destinacao]<>DEST_ANT
               Then Moveto "FaturaI"
                    Moveto [Item da Of]
                    If RecordStatus("New")= False
                      Then Moveto "FaturaC" 
                           [Codigo da Destinacao]=DEST_ANT
                           Mensagem("A Destina‡„o n„o pode ser alterada !// J  existe itens lan‡ados para esta OF. ")
                    EndIf
            EndIf
            Moveto "FaturaC"              
            
            If [Numero do Pedido   ]<>"" And [Situacao do Pedido   ]<>"ABERTO" And [Tipo Movimento Estoque]="S"
						   Then Mensagem("Verificar a Situa‡„o do Pedido !//Status="+[Situacao do Pedido])
						        Loop
  					EndIf
            If [Numero do Orcamento]<>"" And [Situacao do Orcamento]<>"ABERTO" And [Tipo Movimento Estoque]="S"
              Then Mensagem("Verificar a Situa‡„o do Orcamento !//Status="+[Situacao do Orcamento])
                   Loop
             EndIf

            Switch
              Case SYS_CODIGO_CLIENTE="0217":
                If Search("REMES",[Descricao da Destinacao])>0 Or
                   Search("COMPLEM",[Descricao da Destinacao])>0 Or
                   Search("BONIF",[Descricao da Destinacao])>0 Or
                   Search("TROCA",[Descricao da Destinacao])>0 Or
                   (Search("RETOR",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0) Or
                   (Search("VENDA",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0)
                   Then Moveto [Numero Nota Original]
                   Else Moveto [Data de Emissao]
                EndIf
              OtherWise:
                Moveto [CFO]
            EndSwitch
            
       Case Field()="CFO":
            If Search("REMES",[Descricao da Destinacao])>0 Or
               Search("COMPLEM",[Descricao da Destinacao])>0 Or
               Search("BONIF",[Descricao da Destinacao])>0 Or
               Search("TROCA",[Descricao da Destinacao])>0 Or
               (Search("RETOR",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0) Or
               (Search("VENDA",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0)
               Then Moveto [Numero Nota Original]
               Else Moveto [Data de Emissao]
            EndIf
       Case Field()="Numero Nota Original":
            []=ALINH()
            Right
       Case Field()="Data de Emissao":
            If CHAVEC=1 And Not IntervaloData([])
               Then Loop
            EndIf
            Moveto [Data de Saida]
       Case Field()="Codigo":
            If [Situacao do Cliente]="RECADASTRO"
               Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
                    Loop
            EndIf
            If [Situacao do Cliente]="PESSIMO"
               Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
                    Loop
            EndIf
            
            If CHAVEC=1
               Then If Search("VEND",[Descricao da Destinacao])>0   And
                       [Nome Fantasia EmitDest]<>"DIVERSOS"         And
                       [Nome Fantasia EmitDest]<>"CONSUMIDOR FINAL" And
                       [Tipo]="C"                                   And
                       PARAM_NBLOQUEIO_SPC > 0
                       Then MSG_SPC="AVISO_SPC"
                            Checa_SPC()
                            Release Vars MSG_SPC
                    EndIf        
            EndIf            
          
            If [Codigo]<>V_COD
               Then ENDERECOS()
                    V_REPRES =[Codigo do Representante]
                    [Codigo do Representante]=""
                    [Codigo do Representante]=V_REPRES

                    V_TRANSP =[Codigo da Transportadora]
                    [Codigo da Transportadora]=""
                    [Codigo da Transportadora]=V_TRANSP

                    If [Nome Fantasia Transport]="O PROPRIO"
                       Then [Razao Social Transport ]=[Razao Social  ]
                            [Endereco Transport     ]=[Endereco      ]
                            [Bairro Transport       ]=[Bairro        ]
                            [CEP Transport          ]=[CEP           ]
                            [Cidade Transport       ]=[Cidade        ]
                            [UF Transport           ]=[UF            ]
                            [CGC Transport          ]=[CGC           ]
                            [IE Transport           ]=[IE            ]
                    EndIf

                    V_COD=[Codigo]
            EndIf

            If [Tipo]<>"C"
               Then [Consumidor Final]="N"
            EndIf


            If Search("VEND",[Descricao da Destinacao])>0
               Then Mensagem_Venda()
            EndIf

            Moveto [Consumidor Final]
       Case Field()="Consumidor Final":
            If IsBlank([]) Then []="N" EndIf
            If [Nome Fantasia EmitDest]="DIVERSOS"
               Then Moveto [Razao Social]
               Else Moveto [Nome do Autorizado]
            EndIf
       Case Field()="Tipo Pessoa":
            Moveto [Razao Social]
       Case Field()="Nome do Autorizado": 
            If IsBlank([Nome do Autorizado])
               Then [CPF do Autorizado  ]=""
                    [Data da Autorizacao]=BlankDate()
               Else If PARAM_BLOQUEIA_AUTORI="S" And
                       [Nome Fantasia EmitDest]<>"DIVERSOS" And [Tipo]="C"
                       Then If Not Checa_Opcoes("Autorizado",[])
                               Then Mensagem("Autorizado n„o cadastrado !")
                                    Loop
                               Else [Nome do Autorizado  ]=Registro_F1["Nome"]
                                    [CPF do Autorizado   ]=Registro_F1["CGC/CPF"]
                                    [Data da Autorizacao ]=Registro_F1["Data da Autorizacao"]
                                    Moveto [CPF do Autorizado]
                            EndIf
                       Else Moveto [CPF do Autorizado]
                    EndIf   
            EndIf            
            Moveto [CPF do Autorizado]            
            
       Case Field()="CPF do Autorizado":
            Moveto [Codigo do Representante]
       Case Field()="Codigo do Representante":
            If [Codigo do Representante]<>V_REPRES
               Then V_REPRES =[Codigo do Representante]
                    [Codigo do Representante]=""
                    [Codigo do Representante]=V_REPRES
            EndIf
            Moveto [Comissao do Representante]
       Case Field()="UF de Entrega":
            Moveto [Codigo do Representante]
       Case Field()="Origem do Pedido":
            If PARAM_VISITA="S" And IsBlank([])
               Then Loop
            EndIf
            Moveto [Condicao de Pagamento]
       Case Field()="Condicao de Pagamento":
            Moveto [Codigo da Tabela]
       Case Field()="Codigo da Tabela":

            If [Codigo da Destinacao]<>V_DESTIN
               Then NOVA_DESTINACAO=True
            EndIf
            V_DESTIN=[Codigo da Destinacao]

            If [Numero do Pedido]<>V_PEDIDO
               Then NOVO_PEDIDO    =True
            EndIf
            V_PEDIDO=[Numero do Pedido]

            If Checagem_Pagina1() Then QuitLoop EndIf
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
Moveto "FaturaI"
FACA_DIGITAF=True
If REEMITIR
   Then CHAVEI=9
        Return
EndIf

While True
  Moveto "FaturaI"
  Usando_Expedicao=False
  
  Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
  Moveto [Item da OF    ]   VCITENS =ImageCCount()

  Moveto [Item da OF]
  End
  NITEM = [Item da OF]
  Down
  Moveto [Item da OF]

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Sw_Item_Pesquisado=""
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

    TECLA= " Esc=Retornar  F7=Paginar  Alt+F=Fun‡”es  PgUp/PgDn "
    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F5","F7","HOME","UP","PGUP","PGDN","PGUP","F8","F9",-33

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha              " : " Ver itens modo ficha             " : "F3",
              "F5  C~o~nsulta               " : " Consultar tabela pre‡o           " : "F5",
              "F8  ~F~atura Pedido/Or‡amento" : " Fatura pedido ou or‡amento       " : "F8",
              "F9  ~M~odo                   " : " Ativa/Desativa modo c¢digo de barras" : "F9",
              "~C~ancelar                   " : " Cancelar a opera‡„o              " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf

    Switch
    Case RetVal="F3":
         Del
         Moveto [Item da OF]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item da OF]
         Inicia_Registro()
         DigitaI()
         QuitLoop
         
    Case RetVal="F5": 
         VSDGEMPRESA=[FaturaC->Codigo da Empresa]
         If IsBlank([FaturaC->Codigo da Tabela])
            Then VSDGTABELA =PARAM_TABELA_PRECO
            Else VSDGTABELA =[FaturaC->Codigo da Tabela]
         EndIf
         Del
         Moveto "FaturaC"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True
         If PARAM_EXIBECUSTO="N"
            Then Play "SW_CONSS"
            Else Play "SW_CONS"
         EndIF

         Moveto "FaturaC"
         Moveto [Numero da OF]
         Locate ORDFAT
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "FaturaI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

         While True
           Moveto [Item da OF]
           End
           NITEM = [Item da OF]
           Down
           Moveto [Item da OF]
           Seta_Sequencia(NITEM,False)
           If IsLockRecord()
              Then Del
                   Loop
           EndIf
           QuitLoop
         EndWhile
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf

         SEQIT=[Item da OF  ]
         CHAVEI=1
         [Numero da OF    ]=ORDFAT
         [Item da OF      ]=SEQIT
         [Codigo do Item  ]=Sw_Item_Pesquisado
         [Codigo da Tabela]=VSDGTABELA
         Item_Ins_Consulta=True

         Return
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="F8":
         Del
    
         If PARAM_PEDIDO="S"
            Then Echo Normal
                 Echo Off
                 ShowPopup " Op‡”es " CENTERED
                   "~P~edido            " : " Carregar itens do pedido                       ":"PEDIDO",
                   "~E~xpedi‡„o c/Pedido" : " Carregar itens da ordem de expedi‡„o com Pedido":"EXPEDICAO",
                   "Expedi‡„o ~s~/Pedido" : " Carregar itens da ordem de expedi‡„o sem Pedido":"EXPEDICAOS",
                   "~C~ancela  " : " Cancelar"                            :"Cancela"
                 EndMenu
                 To Opcaoc
 
                 If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                    Then QuitLoop
                 EndIf
                 Switch
                   Case Opcaoc="PEDIDO"    : FATURA_PEDIDO_ORCAMENTO()
                   Case Opcaoc="EXPEDICAO" : Play("Ft_Exped")
                   Case Opcaoc="EXPEDICAOS": Play("Ft_Expds")
                 EndSwitch
            Else FATURA_PEDIDO_ORCAMENTO()
         EndIf
         
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Item da Of]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Faturamento deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf

         If Not ISBlank([FaturaC->Numero do Pedido]) And DESTIN_ATUALIZA_PEDIDOS="S" And [FaturaC->Tipo Movimento Estoque]="S"
            Then Moveto "FaturaC"
                 Moveto [Numero do Pedido]
                 If Busca_Lookup("Numero do Pedido",[FaturaC->Numero do Pedido],"SM")
                    Then Switch
                         ;;Case REG_BUSCA_LOOKUP["Situacao do Pedido"]="FATURADO": 
                         ;;     Mensagem("O Pedido "+[FaturaC->Numero do Pedido]+" foi "+REG_BUSCA_LOOKUP["Situacao do Pedido"]+", faturado total !") 
                           Case REG_BUSCA_LOOKUP["Situacao do Pedido"]="ABERTO"  : 
                                Mensagem("O Pedido "+[FaturaC->Numero do Pedido]+" continua em "+REG_BUSCA_LOOKUP["Situacao do Pedido"]+", faturado parcial !")
                         ;;OtherWise                                             : 
                         ;;     Mensagem("O Pedido "+[FaturaC->Numero do Pedido]+" esta "+REG_BUSCA_LOOKUP["Situacao do Pedido"]+" !")
                         EndSwitch
                 EndIf
                 Moveto "FaturaI"   
         EndIf

         CHAVEI=9
         Return
    Case RetVal="ESC" Or Retval="PGUP":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_DIGITAF=True
           Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
           Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
           Moveto [Item da OF    ]   VCITENS =ImageCCount()
           PAGINA("FaturaI","MR")

           SEQIT=[Item da OF]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   EXCLUSAO_I()
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate ORDFAT,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero da OF]=ORDFAT
                 [Item da OF  ]=SEQIT
                 UnLockRecord
                 Locate ORDFAT,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()

Moveto "FaturaI"
FACA_DIGITAF=True
If REEMITIR
   Then CHAVEI=9
        Return
EndIf

While True
  Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
  Moveto [Item da OF    ]   VCITENS =ImageCCount()

  Moveto [Item da OF]
  End
  NITEM = [Item da OF]
  Down
  Moveto [Item da OF]

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  SEQIT=[]
  CHAVEI=1

  While True
    Item_Ins_Consulta=False

    If Not Ler_CDBarras(22,00) 
       Then Del
            OPCHAVEI="CDC"
            CHAVEI=7
            Return
       Else If Dados_QTD<=0
               Then Mensagem("Quantidade tem que ser > ou = 1 !")
                    Loop
               Else CDBarras()
                    QuitLoop
            EndIf
    EndIf  
      
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()

ITOK=True
[Quantidade]=Dados_QTD             
CODIGO_BARRA=Dados_Item                

If Not Pega_Dados_Item("Codigo_Barras") Or
   Not CHECA_ESTOQUE()
   Then Del
        Return
EndIf
   
Registro_Item("Ler")
VSD_I_Quantidade =[Quantidade]
VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)

Registro_Item("Gravar")
Estoque()

;----- Brasil Textil -----------------------------------------------------------

If SYS_CODIGO_CLIENTE="0239" And
	[FaturaC->Tipo Movimento Estoque]="S" And
	Not IsBlank(NLANCPC)
	Then
	     Moveto "\\Sistemas\\Estoque\\PecasMov"
       [Sistema Destino  ]="BA"
       [Documento Destino]=[FaturaC->Numero da OF]
       UnLockRecord
       
       Moveto "FaturaI"
       [Valor IPI por Unidade]=NLANCPC
       UnLockRecord
     
EndIf
;-----------------------------------------------------------------------------------------

Moveto "FaturaI"
If RecordStatus("Locked") Then UnLockRecord EndIf

Sound 400 400
EndProc   ; (ChaveCdBar)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_Item(Origem) 
Private Item_ok, Origem

Item_ok=False

Moveto [Codigo do Item]
Ativa_Lookup()
Switch
  Case Origem="Codigo_Barras":
      Switch
        Case SYS_CODIGO_CLIENTE="0304":
              Moveto [Codigo de Barras]
              Locate IndexOrder by "cod_barras" CODIGO_BARRA
        OtherWise:        
              If Len(CODIGO_BARRA)<=10
                Then Moveto [Codigo do Item]
                     Locate ALINHM(CODIGO_BARRA,10)
                Else Moveto [Codigo de Barras]
                     Locate IndexOrder by "cod_barras" CODIGO_BARRA
              EndIf        
      EndSwitch       
  OtherWise:
      Localizar_Item_Por()         
EndSwitch
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"

       While True
         VSD_I_Referencia=REG_BUSCA_LOOKUP["Referencia"]

         If REG_BUSCA_LOOKUP["Inativo"]="S"
            Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                           REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                           REG_BUSCA_LOOKUP["Referencia"]+"//"+
                          "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta inativo !")
                 QuitLoop
         EndIf    

         FAMILIA=REG_BUSCA_LOOKUP["Codigo da Familia"] 

         
        ;----- Brasil Textil ---------------------------------------------------------------------
                 
        NLANCPC=BlankNum()
        If SYS_CODIGO_CLIENTE="0239"
          Then [Quantidade]=NumVal(SubStr(CODIGO_BARRA,26,10))/100
               NLANCPC     =NumVal(SubStr(CODIGO_BARRA,15,10))
               CODIGO_BARRA=SubStr(CODIGO_BARRA,4,10)
               
        			 If [FaturaC->Tipo Movimento Estoque]="S"
        			    Then
        			         ETIQOk=False
                       Moveto "\\Sistemas\\Estoque\\PecasMov"
                       Moveto [Numero do Lancamento]
                       Locate NLANCPC
                       If Not RetVal
                          Then Mensagem("Lan‡amento de etiqueta n„o encontrado !")
                          Else If Not IsBlank([Sistema Destino])
        											    Then Mensagem("Etiqueta j  foi faturada !")
        											    Else If [Tipo Movimento]="S" And [Tipo Lancamento]="CORTE NA PECA"
        											            Then ETIQOk=True
        															    Else Mensagem("Etiqueta n„o se refere a um CORTE de SAIDA !")
        			                         EndIf        
                               EndIf        
                       EndIf
        
                       Moveto "FaturaI"
        							 If ETIQOK And
        					        ([\Sistemas\Estoque\PecasMov->Codigo do Item]<>CODIGO_BARRA or
        					         [\Sistemas\Estoque\PecasMov->Quantidade    ]<>[Quantidade])
        					        Then Mensagem("Lan‡amento encontrado n„o confere com dados da etiqueta !")
        			                 ETIQOk=False
                       EndIf
        
        							 If Not ETIQOK
        							    Then Item_Ok=False 
                               QuitLoop
        							 EndIf
        	     EndIf
               
        EndIf
        ;-----------------------------------------------------------------------------------------
         
         CODIGO_BARRA=REG_BUSCA_LOOKUP["Codigo do Item"]
         VSD_I_Codigo_Item =CODIGO_BARRA
         Pega_Preco("Novo")
         [Codigo do Item]  =CODIGO_BARRA
         If Origem="Codigo_Barras"
            Then If [Preco Unitario]<=0
                   Then Mensagem("Item sem tabela de pre‡o !")
                        QuitLoop
                 EndIf
         EndIf               

         If [Tipo do Item]="C" ; Servi‡o
            Then 
                 [Aliquota de ICMS      ]=BlankNum()
                 [Aliquota de IPI       ]=BlankNum()

                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then 
                        [PIS_CST        ]="99"
                        [PIS_Aliquota   ]=BlankNum()

                        [COFINS_CST     ]="99"
                        [COFINS_Aliquota]=BlankNum()
                 EndIf        
                         
            Else
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         Switch
                           Case (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<>"":
                                [CSOSN]="400"

                           Case ( [FaturaC->Tipo Movimento Estoque]="S" And
                                  (Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                                   [FaturaC->Tipo Pessoa]="FISICA") )
                                  Or 
                                ( [FaturaC->Tipo Movimento Estoque]="E" Or
                                  Search("VEND",[FaturaC->Descricao da Destinacao])=0 Or
                                  [FaturaC->Tipo Pessoa]="FISICA" ):  
                                 Switch
                                   Case [CSOSN]="101": [CSOSN]="102" 
                                   Case [CSOSN]="201": [CSOSN]="202" 
                                 EndSwitch

                         EndSwitch
        
                         Switch
                           Case [CSOSN]="101" Or [CSOSN]="900":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
        
                           Case [CSOSN]="201":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                 Checa_MVA([Tributacao de ICMS],[Codigo MVA])
        
                           Case [CSOSN]="202" Or [CSOSN]="203" Or [CSOSN]="500":
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                 Checa_MVA([Tributacao de ICMS],[Codigo MVA])
        
                           OtherWise:
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
                         EndSwitch

                         [Tributacao de Icms]=Pega_TipoTributacao("CSOSN",[CSOSN])
                         
                   OtherWise:
        
                         TribCST=SubStr([Tipo Tributacao],2,2)
                         Switch
                           Case (TribCST="00" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="10" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="20" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="70" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0):
                                [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                
                           Case (TribCST="10" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="70" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0):
                                [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                
                           Case (TribCST="00" Or TribCST="10" Or TribCST="20" Or TribCST="70") And
                                TRIB_ICMS<>"D" And TRIB_ICMS<>"S":
                                [Tributacao de Icms]=TRIB_ICMS
                                [Aliquota de ICMS  ]=BlankNum()
                                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
                         EndSwitch
        
                         [CSOSN               ]="900"
                         [ICMS_CREDSN_Aliquota]=BlankNum()
        
                         If (TribCST="10" Or TribCST="30" Or TribCST="70")
                            Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                 Checa_MVA([Tributacao de ICMS],[Codigo MVA])
                            Else [MVA             ]=BlankNum()
                                 [ICMS_ST_Aliquota]=BlankNum()
                         EndIf 

                         [Tributacao de ISSQN     ]="N"
                         [Aliquota de ISSQN       ]=BlankNum()
        
                 EndSwitch
                 
         EndIf   

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

         If [Tipo do Item]="C" ; Servi‡o
            Then If SYS_CODIGO_CLIENTE="0296"
                    Then [ISSQN_Municipio]=3122306
                         [ISSQN_UF       ]="MG"
                         Switch
                           Case Substr([FaturaC->CFO],1,1)="5" : [CFO]="5933"
                           Case Substr([FaturaC->CFO],1,1)="6" : [CFO]="6933"
                         EndSwitch  
                 EndIf
         EndIf

         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   

         Item_Ok=True
         QuitLoop
       EndWhile
  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf

Echo Off
Return Item_ok
EndProc

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Valor_Importacao()
Private TEMP_CHAVEI,TEMP_CAMPO

If SubStr(RegItem["CFO"],1,1)="3"
   Then If SubStr(VSD_I_CFOP,1,1)<>"3"   
           Then ConfGeral("Confirma exclusÆo dos dados de importa‡„o ?")
                If OK<>"S"
                   Then Campo="I_CFOP"
                        Return
                EndIf
        EndIf
EndIf                                

If SubStr(VSD_I_CFOP,1,1)<>"3"
   Then I_ORDFAT = [Item da OF]
        TEMP_CAMPO=CAMPO
        TEMP_CHAVEI=CHAVEI
        CHAVEI=8
        APLIC_ORIGEM="FATURA"
        Play "FT_IMP"

        Moveto "FaturaI"
        Locate ORDFAT,SEQIT
        [II_BC             ]=BlankNum()
        [II_Valor DespAduan]=BlankNum()
        [II_Valor IOF      ]=BlankNum()
        [II_Valor Imposto  ]=BlankNum()

        CHAVEI=TEMP_CHAVEI
        CAMPO =TEMP_CAMPO    
EndIf   

If [FaturaC->Tipo Movimento Estoque]="E" And
   SubStr(VSD_I_CFOP,1,1)="3"
   Then Echo Normal
        Echo Off
        APLIC_ORIGEM="FATURA"
        Play "FT_IMP" 
        AcceptDialog
   Else AcceptDialog 
EndIf

EndProc ;Valor_Importacao()

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private Janela, WinArray5  ;

FTIMP=4                         
PARAM_FTIMP()

TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True
Old_Entrega=[Entrega]

If CHAVEI=0
   Then Moveto [Codigo do Item]
        Ativa_Lookup()
        Locate [FaturaI->Codigo do Item]
        VSD_I_Referencia=[Referencia]
        KeyPress "ESC"
EndIf

Mouse Show
If INICIO_DIALOG
   Then If CHAVEI=0
           Then Switch
                  Case Not IsBlank(VSD_I_Pedido_Item): Campo="I_Quantidade"
                  Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"                 
                  Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                  Case SYS_CODIGO_CLIENTE="0003"     : Campo="I_Modelo_Item"
                  Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                  Case PARAM_CPGTO_ITEM="S"          : Campo="I_Condicao_Pagamento"
                  OtherWise                          : Campo="I_Quantidade"
                EndSwitch

                TABANT=VSD_I_TABELA
                CPGANT=VSD_I_CONDICAO_PAGAMENTO
           Else If PARAM_PEDIDO="S" Or PARAM_ORCAMENTO="S"
                   Then If IsBlank([FaturaC->Numero do Pedido]) And
                           IsBlank([FaturaC->Numero do Orcamento])
                           Then Campo="I_Codigo_Item"
                           Else Campo="I_Pedido"
                        EndIf
                   Else Campo="I_Codigo_Item"
                EndIf
        EndIf
        INICIO_DIALOG=False
EndIf

If Not Opcao_Ver And (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
   Then

        VSD_I_BC_ICMS     =BlankNum()
        VSD_I_Valor_ICMS  =BlankNum()

        VSD_I_Valor_CSOSN =BlankNum() 

        VSD_I_BC_ST       =BlankNum()
        VSD_I_Valor_ST    =BlankNum()
   
        VSD_I_BC_IPI      =BlankNum()
        VSD_I_Valor_IPI   =BlankNum()
   
        VSD_I_BC_ISSQN    =BlankNum()
        VSD_I_Valor_ISSQN =BlankNum()

        VSD_I_BC_PIS      =BlankNum()                             
        VSD_I_Valor_PIS   =BlankNum()
       
        VSD_I_BC_COFINS   =BlankNum()                             
        VSD_I_Valor_COFINS=BlankNum()
   
EndIf    

If Opcao_Ver=True Then Campo="I_Seq" EndIf
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then

   If Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
           "F4 ~D~escri‡„o              ": " Descri‡„o do Item                  " :"F4",
           "F5 ~A~ltera ~P~re‡o         ": " Pre‡o do Item                      " :"F5",
           "F6 Altera ~C~omiss„o        ": " Comiss„o do Item                   " :"F6", 
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma de localizar o item   " :"F7", 
           "F8 ~I~nforma‡”es Adicionais ": " Informa‡”es Adicionais do Item NFe " :"F8",
          ;"F9 ~V~alores de Importa‡„o  ": " Valores de Importa‡„o              " :"F9", 
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
          EndIf                                         
          Evento["KeyCode"]=MenuVar
   EndIf 
    
   Switch
     Case Opcao_Ver=True:
          Temp=False   
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch               
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item da OF]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf      
     Case (Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4") And Not F4_ATIVADO:
          F4_ATIVADO=True
          Campo_Ant=Campo
          Campo="I_Descricao_Item"
          
     Case (Evento["KeyCode"] = -63 Or Evento["KeyCode"] = "F5")  And Not F5_ATIVADO:
          If PARAM_ALTERA_PRECO<>"P"
             Then FastMsg("Fun‡„o n„o configurada para essa op‡„o")
             Else If PARAM_ALTERA_PRECO="P"
                     Then If Checa_Supervisor()
                             Then F5_ATIVADO=True
                                  Campo="I_Preco_Unitario"
                          EndIf
                  EndIf                
          EndIf        
     Case (Evento["KeyCode"] = -64 Or Evento["KeyCode"] = "F6") And Not F6_ATIVADO:
          If PARAM_COMIS_ITEM<>"P"
             Then FastMsg("Fun‡„o n„o configurada para essa op‡„o")
             Else If Not IsBlank(VSD_I_Codigo_Item)
                     Then If PARAM_COMIS_ITEM="P"
                             Then Libera_Bloqueio("")
                                  If Ok="S"
                                     Then F6_ATIVADO=True
                                          Campo="I_Comissao_Item"
                                  EndIf
                          EndIf
                  EndIf
          EndIf
          
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ShowPopup " Alterar Forma de Localizar o Item " CENTERED
            "Por Codigo do ~I~tem       " : " Localiza o item pelo seu c¢digo           " : "LOC_CODITE",
            "Por Codigo do ~F~ornecedor " : " Localiza o item pelo codigo do fornecedor " : "LOC_CODFOR",
            "Por ~R~eferencia do Item   " : " Localiza o item pela sua referencia       " : "LOC_CODREF",
            "Por Codigo de ~B~arra      " : " Localiza o item pelo c¢digo de barra      " : "LOC_CODBAR",
            Separator,
            "~C~ancelar               " : " Cancelar a Opera‡„o                       " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off
          
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Return
          EndIf                                         
          RetVal=MenuVar
          LOCALIZA_CODIGO = MenuVar
          
          Switch 
            Case LOCALIZA_CODIGO="LOC_CODITE" : LOCALIZAR_POR="CodItem" 
            Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="CodFor" 
            Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Ref."
            Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="CodBar"   
          EndSwitch             
          
     Case (Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8"):    
          Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item NFe")
          VSD_I_InfAdic=[Informacoes_Adicionais]
     
     ;Rotina cancelada, ser  usada durante o processo da digita‡Æo do item, com outros regras
     ;Case (Evento["KeyCode"] = -67 Or Evento["KeyCode"] = "F9"):    
     ;     If Not IsAssigned(VSD_I_CST_Item) Or VSD_I_CST_Item=""
     ;        Then Mensagem("Informe o CST do Item para habilitar essa fun‡„o!")
     ;        Else If SubStr(VSD_I_CST_Item,1,1)<>"1"
     ;                Then Mensagem("Op‡„o Inv lida// //Verificar CST do Item!")
     ;                Else If [FaturaC->Tipo Movimento Estoque]="E" Or
     ;                        Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 
     ;                        Then Echo Normal
     ;                             Echo Off
     ;                             APLIC_ORIGEM="FATURA"
     ;                             Play "FT_IMP" 
     ;                        Else Mensagem("Op‡„o Inv lida// //Verificar situa‡„o da nota!")
     ;                     EndIf   
     ;             EndIf        
     ;     EndIf  
     
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Tipo_Item"          Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_Condicao_Pagamento" Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"            
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"        Then Moveto [Codigo do Item]         EndIf
                  If Campo="I_Tipo_Item"          Then Moveto [Tipo do Item]           EndIf
                  If Campo="I_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido]   EndIf
                  
                  If Campo="I_Condicao_Pagamento" 
                     Then FI_CDPGTOAnt=VSD_I_Condicao_Pagamento
                          FC_CDPGTOAnt=[FaturaC->Condicao de Pagamento]
                          Moveto "FaturaC"
                          Moveto [Condicao de Pagamento]  
                  EndIf
                  If Campo="I_Tabela"             
                     Then FI_TABELAAnt=VSD_I_Tabela
                          FC_TABELAAnt=[FaturaC->Codigo da Tabela]
                          Moveto "FaturaC"
                          Moveto [Codigo da Tabela]  
                  EndIf
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[FaturaC->CFO]
                          Moveto "FaturaC"
                          Moveto [CFO]
                  EndIf
                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[FaturaC->Cidade]
                          FC_UFSERVAnt =[FaturaC->UF]
                          Moveto "FaturaC"
                          Moveto [Cidade]  
                  EndIf

                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      VSD_I_CST_Item=Checa_CST("ICMS",[FaturaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_Item)
                         Then VSD_I_CST_Item=CSTNew
                         Else [Tipo Tributacao]=VSD_I_CST_Item
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_IPI":          
                      CSTNew=VSD_I_CST_IPI 
                      VSD_I_CST_IPI=Checa_CST("IPI",[FaturaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_IPI)
                         Then VSD_I_CST_IPI=CSTNew
                         Else [IPI_CST]=VSD_I_CST_IPI
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_PIS":          
                      CSTNew=VSD_I_CST_PIS 
                      VSD_I_CST_PIS=Checa_CST("PIS",[FaturaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_PIS)
                         Then VSD_I_CST_PIS=CSTNew
                         Else [PIS_CST]=VSD_I_CST_PIS
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_COFINS":          
                      CSTNew=VSD_I_CST_COFINS 
                      VSD_I_CST_COFINS=Checa_CST("COFINS",[FaturaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_COFINS)
                         Then VSD_I_CST_COFINS=CSTNew
                         Else [COFINS_CST]=VSD_I_CST_COFINS
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CSOSN":          
                      CSTNew=VSD_I_CSOSN 
                      VSD_I_CSOSN=Checa_CSOSN2("","")
                      If IsBlank(VSD_I_CSOSN)
                         Then VSD_I_CSOSN=CSTNew
                         Else [CSOSN    ]=VSD_I_CSOSN
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_TISSQN":          
                      CSTNew=VSD_I_TISSQN 
                      VSD_I_TISSQN=Checa_CST("ISSQN","","")
                      If IsBlank(VSD_I_TISSQN)
                         Then VSD_I_TISSQN         =CSTNew
                         Else [Tributacao de ISSQN]=VSD_I_TISSQN        
                      EndIf
                      Release Vars CSTNew
                    OtherWise:         
                      If ConsultaF1()
                         Then Switch
                                Case Campo="I_CFOP":               
                                      FI_CFOAnt     =[FaturaC->CFO] 
                                      [FaturaC->CFO]=FC_CFOAnt
                                      Moveto "FaturaI"
                                      [FaturaI->CFO]=FI_CFOAnt
                                Case Campo="I_Tabela":               
                                      FI_TABELAAnt     =[FaturaC->Codigo da Tabela] 
                                      [FaturaC->Codigo da Tabela]=FC_TABELAAnt
                                      Moveto "FaturaI"
                                      [FaturaI->Codigo da Tabela]=FI_TABELAAnt
                                Case Campo="I_Condicao_Pagamento":               
                                      FI_CDPGTOAnt     =[FaturaC->Condicao de Pagamento] 
                                      [FaturaC->Condicao de Pagamento]=FC_CDPGTOAnt
                                      Moveto "FaturaI"
                                      [FaturaI->Condicao de Pagamento]=FI_CDPGTOAnt
                                Case Campo="I_MUNSERV":               
                                      [FaturaC->Cidade   ]=FC_MUNSERVAnt
                                      [FaturaC->UF       ]=FC_UFSERVAnt
                                      Moveto "FaturaI"
                                      [FaturaI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [FaturaI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                              EndSwitch
                         Else If Campo="I_CFOP" Or Campo="I_Tabela" Or Campo="I_Condicao_Pagamento" Or
                                 Campo="I_MUNSERV"  
                                 Then Moveto "FaturaI"
                              EndIf        
                      EndIf                          
                  EndSwitch                          
                
                  Window Select JANELA
                  WinArray5["FLOATING"]=True
                  Window SetAttributes JANELA From WinArray5

                  echo Normal
                  echo off

                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]

                          Campo="I_Codigo_Item"
                  EndIf
                  If Campo="I_Tipo_Item"
                     Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Tipo_Item"
                  EndIf
                  If Campo="I_Codigo_Cor_Tecido"
                     Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                          VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                          Campo="I_Codigo_Cor_Tecido"
                 EndIf

                  If Campo="I_Condicao_Pagamento"
                     Then VSD_I_Condicao_Pagamento  =[Condicao de Pagamento  ]
                          VSD_I_Composicao_Dias     =[Composicao de Dias     ]
                          Release Vars FI_CDPGTOAnt,FC_CDPGTOAnt
                  EndIf
                  If Campo="I_Tabela"
                     Then VSD_I_Tabela              =[Codigo da Tabela       ]
                          Release Vars FI_TABELAAnt,FC_TABELAAnt
                  EndIf
                  If Campo="I_CFOP"
                     Then VSD_I_CFOP            =[CFO             ]
                          Campo="I_CFOP"
                          Release Vars FI_CFOAnt,FC_CFOAnt
                  EndIf
                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[FaturaI->ISSQN_Municipio]
                           VSD_I_UFSERV =[FaturaI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf
                  If Campo="I_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf
                  
                  Moveto "FaturaI"
         EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
            Case Campo="I_Pedido":
                 CancelDialog
            Case Campo="I_Pedido_Item"      : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"      :
                 If Not IsBlank([Numero Pedido_Orcamento])
                    Then Campo="I_Pedido_Item"
                    Else CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    :
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else CancelDialog
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido" :
                 Switch
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Tamanho":
                 Switch
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Modelo_Item":
                 Switch
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Tabela":
                 Switch
                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Condicao_Pagamento":
                 Switch
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Composicao_Dias"        : Campo="I_Condicao_Pagamento"
            Case Campo="I_Quantidade":
                 Switch
                   Case Not IsBlank(VSD_I_Pedido_Item):
                        If CHAVEI=1
                           Then Campo="I_Pedido_Item"
                           Else CancelDialog
                        EndIf
                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_UN_Item"                  Or
                 Campo="I_Preco_Unitario"           Or
                 Campo="I_Taxa_Desconto_Unitario"   Or
                 Campo="I_Valor_Desconto_Unitario"  Or
                 Campo="I_Preco_Total"              Or
                 Campo="I_CST_Item"                 Or 
                 Campo="I_Comissao_Item"     : Campo="I_Quantidade"

            Case Campo="I_CST_Item"     Or                           
                 Campo="I_CSOSN"             : Campo="I_Quantidade"
            Case Campo="I_RBC_ICMS"     Or
                 Campo="I_AICMS"        Or
                 Campo="I_BC_ICMS"      Or
                 Campo="I_Valor_ICMS"        : 
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_CST_Item"
                 EndIf
  
            Case Campo="I_ACSOSN"        Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"
  
            Case Campo="I_MVA"          Or
                 Campo="I_AST"          Or
                 Campo="I_BC_ST"        Or
                 Campo="I_Valor_ST"     Or
                 Campo="I_CST_IPI"      Or     
                 Campo="I_CFOP"              : 
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_TISSQN"
                    Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                            Then Campo="I_CSOSN"
                            Else Campo="I_CST_Item"
                         EndIf
                 EndIf
                   
            Case Campo="I_AIPI"         Or
                 Campo="I_Valor_IPI"    Or  
                 Campo="I_BC_IPI"            : Campo="I_CST_IPI"
            
            Case Campo="I_TISSQN"            :
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_Quantidade"
                    Else Campo="I_CST_IPI"
                 EndIf
        
            Case Campo="I_AISSQN"       Or
                 Campo="I_BC_ISSQN"     Or
                 Campo="I_Valor_ISSQN"       : Campo="I_TISSQN"

            Case Campo="I_CST_PIS"           :
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_TISSQN"
                    Else Campo="I_CST_IPI" 
                 EndIf

            Case Campo="I_APIS"         Or
                 Campo="I_Valor_PIS"    Or     
                 Campo="I_BC_PIS"       Or
                 Campo="I_CST_COFINS"        : Campo="I_CST_PIS"

            Case Campo="I_ACOFINS"      Or
                 Campo="I_BC_COFINS"    Or 
                 Campo="I_Valor_COFINS"      : Campo="I_CST_COFINS"
            
            Case Campo="I_NCM"      Or         
                 Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_CFOP"
                   
            Case Campo="I_Numero_Volumes"    : Campo="I_CFOP"
            Case Campo="I_Peso_Liquido"      : Campo="I_Numero_Volumes"
            Case Campo="I_Peso_Embalagem"    : Campo="I_Peso_Liquido"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Pedido":
                 VSD_I_Pedido=AlinhM(ControlValue("I_Pedido"),6)
                 If VSD_I_Pedido="000000"
                    Then VSD_I_Pedido     =""
                         VSD_I_Pedido_Item=0
                         Campo="I_Codigo_Item"
                    Else Campo="I_Pedido_Item"
                 EndIf
            Case Campo="I_Pedido_Item":
                 VSD_I_Pedido_Item=ControlValue("I_Pedido_Item")
                 If VSD_I_Pedido_Item=""
                    Then VSD_I_Pedido_Item=0
                 EndIf
                 If VSD_I_Pedido_Item>0
                    Then Moveto "FaturaC"
                         [Numero Pedido_Orcamento]=VSD_I_Pedido
                         If PARAM_PEDIDO="S"
                            Then Moveto "PedidoI"
                                 Moveto [Item do Pedido]
                            Else Moveto "OrcaI"
                                 Moveto [Item do Orcamento]
                         EndIf
                         Locate VSD_I_Pedido_Item
                         If Not RetVal
                            Then Mensagem("Item n„o Encontrado !")
                                 Moveto "FaturaI"
                            Else If ([Quantidade]-[Quantidade Faturada])<=0
                                    Then Mensagem("Item do Pedido c/ Saldo todo Faturado !")
                                 EndIf

                                 Moveto "FaturaI"
                                 Copia_Ped_Orc_Fatura()
                                 Registro_Item("Ler")

                                 Campo="I_Quantidade"
                         EndIf
                    Else Campo="I_Codigo_Item"
                 EndIf
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Mensagem("Item n„o cadastrado !")
                    Else If Pega_Dados_Item("")
                            Then Registro_Item("Ler")
                                 Switch
                                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                                   Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                                   Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                                   Case SYS_CODIGO_CLIENTE="0003"     : Campo="I_Modelo_Item"
                                   Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                                   Case PARAM_CPGTO_ITEM="S"          : Campo="I_Condicao_Pagamento"
                                   OtherWise                          : Campo="I_Quantidade"
                                 EndSwitch
                            Else     
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf        
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")                
                 Switch  
                   Case SYS_CODIGO_CLIENTE = "0251" or
                        SYS_CODIGO_CLIENTE = "0247" : 
                        Moveto [Codigo do Item]                                              
                        Ativa_Lookup()                   
                        Locate [Faturai->Codigo do Item] 
                        If [Codigo da Familia]="005"
                            Then Play "Calc_Ma" 
                        EndIf   
                        KeyPress "ESC"
                        Campo="I_Quantidade"                             
                   Case PARAM_COR_TECIDO="S"        : Campo="I_Codigo_Cor_Tecido"
                   Case PARAM_TAMANHO="S"           : Campo="I_Tamanho"
                   Case SYS_CODIGO_CLIENTE="0003"   : Campo="I_Modelo_Item"
                   Case PARAM_TABPR_ITEM="S"        : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"        : Campo="I_Condicao_Pagamento"                      
                   OtherWise                        : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then Moveto [Codigo da Cor_Tecido]
                         If Busca_Lookup("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido,"SM")
                            Then [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=REG_BUSCA_LOOKUP["Descricao da Cor_Tecido"]
                                 Campo="I_Descricao_Cor_Tecido"
                            Else Mensagem("Cor/Tecido n„o Cadastrado !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                         EndIf
                    Else Campo="I_Descricao_Cor_Tecido"
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 If PARAM_TAMANHO="S"
                    Then Campo="I_Tamanho"
                    Else If PARAM_TABPR_ITEM="S"
                            Then Campo="I_Tabela"
                            Else If PARAM_CPGTO_ITEM="S"
                                    Then Campo="I_Condicao_Pagamento"
                                    Else Campo="I_Quantidade"
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Tamanho":
                 VSD_I_Tamanho=ControlValue("I_Tamanho")
                 If PARAM_TABPR_ITEM="S"
                    Then Campo="I_Tabela"
                    Else If PARAM_CPGTO_ITEM="S"
                            Then Campo="I_Condicao_Pagamento"
                            Else Campo="I_Quantidade"
                         EndIf
                 EndIf
            Case Campo="I_Modelo_Item":
                 VSD_I_Modelo_Item=ControlValue("I_Modelo_Item")
                 Switch
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                   OtherWise                      : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Tabela":
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then Moveto "FaturaC"
                         Moveto [Codigo da Tabela]
                         Ativa_Lookup()
                         Moveto [Codigo da Tabela]
                         Locate VSD_I_Tabela
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "FaturaI"
                                 [Codigo da Tabela]=VSD_I_Tabela
                                 If PARAM_CPGTO_ITEM="S"
                                    Then Campo="I_Condicao_Pagamento"
                                    Else If CHAVEI=1
                                            Then Pega_Preco("Novo")
                                            Else If VSD_I_TABELA<>TABANT
                                                    Then Pega_Preco("Novo")
                                                    Else Pega_Preco("Checa")
                                                 EndIf
                                         EndIf
                                         TABANT=VSD_I_TABELA
                                         Campo="I_Quantidade"
                                 EndIf
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 KeyPress "ESC"
                                 Moveto "FaturaI"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Condicao_Pagamento":
                 VSD_I_Condicao_Pagamento=ControlValue("I_Condicao_Pagamento")
                 If Not IsBlank(VSD_I_Condicao_Pagamento)
                    Then VSD_I_Condicao_Pagamento=AlinhM(VSD_I_Condicao_Pagamento,2)
                         Moveto "FaturaC"
                         Moveto [Condicao de Pagamento]
                         Ativa_Lookup()
                         Moveto [Condicao de Pagamento]
                         Locate VSD_I_Condicao_Pagamento
                         If RetVal
                            Then VSD_I_Composicao_Dias=[Composicao de Dias]
                                 KeyPress "ESC"
                                 Moveto "FaturaI"
                                 [Condicao de Pagamento]=VSD_I_Condicao_Pagamento
                                 If CHAVEI=1
                                    Then Pega_Preco("Novo")
                                    Else If VSD_I_TABELA<>TABANT Or
                                            VSD_I_CONDICAO_PAGAMENTO<>CPGANT
                                            Then Pega_Preco("Novo")
                                            Else Pega_Preco("Checa")
                                         EndIf
                                 EndIf
                                 TABANT=VSD_I_TABELA
                                 CPGANT=VSD_I_CONDICAO_PAGAMENTO
                                 Campo="I_Composicao_Dias"
                            Else Mensagem("Condicao n„o Cadastrada !")
                                 KeyPress "ESC"
                                 Moveto "FaturaI"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Composicao_Dias":
                 VSD_I_Composicao_Dias=ControlValue("I_Composicao_Dias")
                 If VSD_I_Composicao_Dias=""
                    Then VSD_I_Composicao_Dias="0"
                 EndIf
                 If Checa_CompDias(VSD_I_Composicao_Dias)
                    Then Campo="I_Quantidade"
                 EndIf

            Case Campo="I_Quantidade":  
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 [Quantidade]=VSD_I_Quantidade
                 If CHECA_ESTOQUE() And CHECA_PEDIDO()
                    Then If PARAM_TRANSF_ULTCT="S"
                            Then If Search("TRANSF",[FaturaC->Descricao da Destinacao])>0 And
                                    (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T") And
                                    CHAVEI=1
                                    Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                 EndIf
                         EndIf

                         If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf

                         If PARAM_COMIS_MARCA="S"
                            Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                                    (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T")
                                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario)
                                            Else VSD_I_Preco_Total=VSD_I_Preco_Unitario
                                         EndIf
                                 EndIf
                         EndIf

                         Switch
                           Case [Edita Descricao do Item]="S" : Campo="I_UN_Item"
                           Case PARAM_ALTERA_PRECO="S"        : Campo="I_Preco_Unitario"
                           Case PARAM_ALTERA_PRECO="N" And
                                Search("VEND",[FaturaC->Descricao da Destinacao])=0:
                                                                Campo="I_Preco_Unitario"
                           Case PARAM_DESCUNIT="S"            : Campo="I_Taxa_Desconto_Unitario"
                           OtherWise                          :
                                VSD_I_Taxa_Desconto_Unitario =BlankNum()
                                VSD_I_Valor_Desconto_Unitario=BlankNum()
                                Campo="I_Preco_Total"
                         EndSwitch
                 EndIf
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Switch
                   Case PARAM_ALTERA_PRECO="S"        : Campo="I_Preco_Unitario"
                   Case PARAM_ALTERA_PRECO="N" And
                        Search("VEND",[FaturaC->Descricao da Destinacao])=0:
                                                        Campo="I_Preco_Unitario"
                   Case PARAM_DESCUNIT="S"            : Campo="I_Taxa_Desconto_Unitario"
                   OtherWise                          :
                        VSD_I_Taxa_Desconto_Unitario =BlankNum()
                        VSD_I_Valor_Desconto_Unitario=BlankNum()
                        Campo="I_Preco_Total"
                 EndSwitch
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If PARAM_DESCUNIT<>"S"
                    Then VSD_I_Taxa_Desconto_Unitario =BlankNum()
                         VSD_I_Valor_Desconto_Unitario=BlankNum()
                 EndIf

                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                 EndIf

                 CONTINUA=True
                 If PARAM_COMIS_MARCA="S"
                    Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                            (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T")
                            Then If VSD_I_Preco_Unitario>=VSD_I_Preco_Tabela
                                    Then VSD_I_Taxa_Desconto_Unitario =0
                                         VSD_I_Valor_Desconto_Unitario=0
                                    Else VSD_I_Taxa_Desconto_Unitario =((VSD_I_Preco_Tabela-VSD_I_Preco_Unitario)*100)/VSD_I_Preco_Tabela
                                         VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Tabela*VSD_I_Taxa_Desconto_Unitario)/100
                                 EndIf
                                 Pega_Preco("Checa")
                                 If Checa_Comissao()
                                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario)
                                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario)
                                         EndIf
                                         If Liberou_Bloqueio
                                            Then CONTINUA=False          ; Continua e pula
                                                 Campo="I_Comissao_Item" ; pra comissao
                                         EndIf
                                    Else CONTINUA=False
                                 EndIf
                         EndIf
                 EndIf

                 ;*** Ajustes 21/03/2007 MinasLack
                 If (PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P") And
                    Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                    PARAM_COMIS_MARCA="N"
                    Then If VSD_I_Preco_Unitario<VSD_I_Preco_Tabela
                            Then CONTINUA=False
                                 Mensagem("Pre‡o unit rio n„o permitido, menor que pre‡o da Tabela !")
                         EndIf
                 EndIf

                 If CONTINUA
                    Then Switch
													 Case PARAM_DESCUNIT="S"   : Campo="I_Taxa_Desconto_Unitario"
                           Case PARAM_COMIS_ITEM="S" : Campo="I_Comissao_Item"
                           Case PARAM_IMPOSTOS="S"   : 
                                 If VSD_I_Tipo_Item="C"
                                    Then Campo="I_TISSQN"
                                    Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                            Then Campo="I_CSOSN"
                                            Else Campo="I_CST_Item"
                                         EndIf
                                 EndIf
                           Case PARAM_VOLUMES="S"    : Campo="I_NUMERO_VOLUMES"
                           OtherWise                 : Valor_Importacao()
                         EndSwitch
                         If F5_ATIVADO=True
                            Then F5_ATIVADO=False
                                 MSG="OF: "+ORDFAT+"/"+StrVal(SEQIT)+", TabPr/CPg: "
                                 MSG=MSG+VSD_I_Tabela+"/"+VSD_I_Condicao_Pagamento
                                 Grava_Logt("#","AltPreco",MSG)
                         EndIf
                 EndIf
            Case Campo="I_Taxa_Desconto_Unitario":
                 VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                 If VSD_I_Taxa_Desconto_Unitario>0
                    Then VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100
                         If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf
                         If Checa_DescontoUnitario()
                            Then Campo="I_Preco_Total"
                         EndIf
                    Else Campo="I_Valor_Desconto_Unitario"
                 EndIf
            Case Campo="I_Valor_Desconto_Unitario":
                 VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                 If Checa_DescontoUnitario()
                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf
                         Campo="I_Preco_Total"
                 EndIf
            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                 EndIf
                 If PARAM_COMIS_ITEM="S"
                    Then Campo="I_Comissao_Item"
                    Else If PARAM_IMPOSTOS="S"
                            Then 
                                 If VSD_I_Tipo_Item="C"
                                    Then Campo="I_TISSQN"
                                    Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                            Then Campo="I_CSOSN"
                                            Else Campo="I_CST_Item"
                                         EndIf
                                 EndIf
                            Else If PARAM_VOLUMES="S"
                                    Then Campo="I_NUMERO_VOLUMES"
                                    Else Valor_Importacao()
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Comissao_Item":
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")

                 If F6_ATIVADO=True
                    Then F6_ATIVADO=False
                         MSG="Fatura: "+ORDFAT+"/"+StrVal(SEQIT)+", TabPr/CPg: "
                         MSG=MSG+VSD_I_Tabela+"/"+VSD_I_Condicao_Pagamento
                         Grava_Logt("#","AltComis",MSG)
                 EndIf

                 Switch
                   Case PARAM_IMPOSTOS="S"   :
                        If VSD_I_Tipo_Item="C"
                           Then Campo="I_TISSQN"
                           Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                   Then Campo="I_CSOSN"
                                   Else Campo="I_CST_Item"
                                EndIf
                         EndIf   
                    Case PARAM_VOLUMES="S"   : Campo="I_NUMERO_VOLUMES"
                    OtherWise                : Valor_Importacao()
                 EndSwitch            

            Case Campo="I_CST_Item":
                 VSD_I_CST_Item=ControlValue("I_CST_Item")
                 If Not IsBlank(VSD_I_CST_Item)
                    Then TribCST=Checa_CST("ICMS",[FaturaC->Tipo Movimento Estoque],VSD_I_CST_Item)
                         If TribCST<>""
                            Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 
                                 VSD_I_TICMS=Pega_TipoTributacao("ICMS",VSD_I_CST_Item) 

                                 VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900"
                                 VSD_I_ACSOSN     =BlankNum()
                                 VSD_I_Valor_CSOSN=BlankNum() 

                                 Switch
                                  Case (TribCST="00" Or TribCST="10"):   
                                       If TribCST="00"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       VSD_I_RBC_ICMS   =BlankNum()   
                                       Campo="I_AICMS"         
                                  Case (TribCST="20" Or TribCST="51" Or TribCST="60" Or TribCST="70" Or TribCST="90"):    
                                       Switch 
                                         Case (TribCST="20" Or TribCST="51"):
                                                             VSD_I_MVA        =BlankNum()
                                                             VSD_I_AST        =BlankNum()
                                                             VSD_I_Valor_ST   =BlankNum()
                                                             VSD_I_BC_ST      =BlankNum()
                                                             Campo="I_RBC_ICMS"
                                         Case TribCST="60" : VSD_I_MVA        =BlankNum()
                                                             VSD_I_BC_ICMS    =BlankNum()
                                                             VSD_I_RBC_ICMS   =BlankNum()
                                                             VSD_I_AICMS      =BlankNum()
                                                             VSD_I_Valor_ICMS =BlankNum() 
                                                             Switch
                                                               Case Search("DEVOL",[FaturaC->Descricao da Destinacao])>0: Campo="I_MVA"
                                                               Case Search("VEND" ,[FaturaC->Descricao da Destinacao])>0: Campo="I_CST_IPI"
                                                               OtherWise                                              : Campo="I_MVA"
                                                             EndSwitch
                                         OtherWise         : Campo="I_RBC_ICMS"
                                       EndSwitch  
                                  Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                        TribCST="50" Or TribCST="51") :                            
                                       If TribCST<>"30"
                                          Then VSD_I_MVA       =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_CST_IPI"
                                          Else VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_MVA"
                                       EndIf
       												  EndSwitch
               												  
                                If (TribCST="10" Or TribCST="30" Or TribCST="70") And
                                   VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                   Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                        Checa_MVA(VSD_I_TICMS,[Codigo MVA])
                                EndIf                                                 

                           Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
                 If IsAssigned(CST_TEMP)
                    Then If (SubStr(CST_TEMP,1,1)="1" And SubStr(VSD_I_CST_Item,1,1)<>"1") Or VSD_I_CST_Item=""
                            Then VERIFICA_IMPORTACAO="SIM"
                                 Echo Normal
                                 Echo Off
                                 APLIC_ORIGEM="FATURA"
                                 Play "FT_IMP"
                                 If VERIFICA_IMPORTACAO
                                    Then VSD_I_CST_Item=CST_TEMP
                                         Mensagem("Imposs¡vel Altera‡„o! // //Exclua as Importa‡”es para alter o CST!")
                                         Campo="I_CST_Item"
                                    Else CST_TEMP=VSD_I_CST_Item
                                 EndIf
                                 VERIFICA_IMPORTACAO="NAO"
                         EndIf
                 EndIf
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                           Case Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                           Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                           OtherWise                                                                          : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_BC_ICMS"
                 EndIf                 
            Case Campo="I_BC_ICMS":
                 VSD_I_BC_ICMS=ControlValue("I_BC_ICMS")
                 Campo="I_Valor_ICMS"                 
            Case Campo="I_Valor_ICMS": 
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                   Case Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                   Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                   OtherWise                                                                          : Campo="I_CST_IPI"
                 EndSwitch  

            Case Campo="I_CSOSN":
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 If Not IsBlank(VSD_I_CSOSN)
                    Then TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3)
                         If TribCST<>""
                            Then
                                 Switch
                                  Case TribCST="101"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="102"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="103"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="201"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"10" VSD_I_TICMS="S"
                                  Case TribCST="202"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"10" VSD_I_TICMS="S"
                                  Case TribCST="203"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"30" VSD_I_TICMS="S"
                                  Case TribCST="300"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="400"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="500"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"60" VSD_I_TICMS="S"
                                  Case TribCST="900"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                 EndSwitch

                                 If TribCST<>"900"
                                    Then VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()
                                 EndIf

                                 Switch
                                  Case (TribCST="101" Or TribCST="201"):   
                                       If TribCST="101"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       Campo="I_ACSOSN"        
                                  Case (TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"):    
                                       VSD_I_ACSOSN     =BlankNum()
                                       VSD_I_Valor_CSOSN=BlankNum()

                                       VSD_I_MVA       =BlankNum()
                                       VSD_I_AST       =BlankNum()
                                       VSD_I_BC_ST     =BlankNum()
                                       VSD_I_Valor_ST  =BlankNum()
                                       VSD_I_RBC_ICMS  =BlankNum()
                                       Campo="I_CST_IPI"               
                                  Case (TribCST="202" Or TribCST="203" Or TribCST="500"):    
                                       VSD_I_ACSOSN     =BlankNum()
                                       VSD_I_Valor_CSOSN=BlankNum()

                                       Switch
                                         Case Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And TribCST="500"          : Campo="I_MVA"
                                         Case (TribCST="202" Or TribCST="203")                                              : Campo="I_MVA"
                                         Case (TribCST="500")                                                               : Campo="I_MVA"
                                               VSD_I_MVA       =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               Campo="I_CST_IPI"
                                         OtherWise                                                                          : Campo="I_CST_IPI"
                                       EndSwitch  
                                  Case (TribCST="900") : Campo="I_RBC_ICMS"        
                                 EndSwitch

                                If (TribCST="201" Or TribCST="202" Or TribCST="203") And
                                   VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                   Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                        Checa_MVA(VSD_I_TICMS,[Codigo MVA])
                                EndIf                                                 

                                If (TribCST="101" Or TribCST="201") And VSD_I_ACSOSN<=0
                                   Then VSD_I_ACSOSN=ALIQUOTA_CREDITO_ICMS_NOSN
                                EndIf   

                            Else Mensagem("CSOSN inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACSOSN":
                 VSD_I_ACSOSN=ControlValue("I_ACSOSN")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case (TribCST="900")                                                   : Campo="I_MVA"
                           Case (TribCST="201" Or TribCST="202" Or TribCST="203" Or TribCST="500"): Campo="I_MVA"
                           OtherWise                                                              : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_Valor_CSOSN"
                 EndIf                 
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 Switch
                   Case (TribCST="900")                                                   : Campo="I_MVA"
                   Case (TribCST="201" Or TribCST="202" Or TribCST="203" Or TribCST="500"): Campo="I_MVA"
                   OtherWise                                                              : Campo="I_CST_IPI"
                 EndSwitch  
            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 Campo="I_AST"
            Case Campo="I_AST":
                 VSD_I_AST=ControlValue("I_AST")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_IPI"
                    Else Campo="I_BC_ST"
                 EndIf             
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"               
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI",[FaturaC->Tipo Movimento Estoque],VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
                                 
                                 VSD_I_TIPI=Pega_TipoTributacao("IPI",VSD_I_CST_IPI) 

                                 If VSD_I_TIPI<>"D" And VSD_I_TIPI<>"O"
                                    Then If Not IsBlank(VSD_I_TIPI)
                                            Then VSD_I_BC_IPI   =BlankNum()
                                                 VSD_I_AIPI     =BlankNum()
                                                 VSD_I_Valor_IPI=BlankNum()

                                                 Campo="I_CST_PIS"
                                         EndIf
                                    Else Campo="I_AIPI"
                                EndIf
                            Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_AIPI":
                 VSD_I_AIPI=ControlValue("I_AIPI")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_PIS"
                    Else Campo="I_BC_IPI"
                 EndIf             
            Case Campo="I_BC_IPI":
                 VSD_I_BC_IPI=ControlValue("I_BC_IPI")
                 Campo="I_Valor_IPI"                 
            Case Campo="I_Valor_IPI":
                 VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
                 Campo="I_CST_PIS"

            Case Campo="I_TISSQN":
                 VSD_I_TISSQN=ControlValue("I_TISSQN")

                 If Not IsBlank(VSD_I_TISSQN)
                    Then TribCST=Checa_CST("ISSQN","",VSD_I_TISSQN)
                         If TribCST<>""
                            Then If VSD_I_TISSQN="N"
                                    Then VSD_I_BC_ISSQN   =BlankNum()
                                         VSD_I_AISSQN     =BlankNum()
                                         VSD_I_Valor_ISSQN=BlankNum()
        
                                         If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                                            Then Campo="I_CFOP"
                                            Else Campo="I_CST_PIS"
                                         EndIf
                                    Else Campo="I_AISSQN"
                                 EndIf   
                            Else Mensagem("CST ISSQN inv lida, use F1 para consultar !")   
                        EndIf
                 EndIf

            Case Campo="I_AISSQN":
                 VSD_I_AISSQN=ControlValue("I_AISSQN")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                            Then Campo="I_CFOP"
                            Else Campo="I_CST_PIS"
                         EndIf   
                    Else Campo="I_BC_ISSQN"
                 EndIf             
            Case Campo="I_BC_ISSQN":
                 VSD_I_BC_ISSQN=ControlValue("I_BC_ISSQN")
                 Campo="I_Valor_ISSQN"                 
            Case Campo="I_Valor_ISSQN":
                 VSD_I_Valor_ISSQN=ControlValue("I_Valor_ISSQN")
                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then Campo="I_CFOP"
                    Else Campo="I_CST_PIS"
                 EndIf   

            Case Campo="I_CST_PIS":
                 VSD_I_CST_PIS=ControlValue("I_CST_PIS")
                 If IsBlank(VSD_I_CST_PIS)
                    Then VSD_I_CST_PIS="99"
                 EndIf        
                 If Not IsBlank(VSD_I_CST_PIS)
                    Then TribCST=Checa_CST("PIS",[FaturaC->Tipo Movimento Estoque],VSD_I_CST_PIS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_PIS   =BlankNum()
                                         VSD_I_APIS     =BlankNum()
                                         VSD_I_Valor_PIS=BlankNum()
                                         Campo="I_CST_COFINS"
                                    Else Campo="I_APIS"
                                EndIf
                            Else Mensagem("CST PIS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_APIS":
                 VSD_I_APIS=ControlValue("I_APIS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_COFINS"
                    Else Campo="I_BC_PIS"
                 EndIf             
            Case Campo="I_BC_PIS":
                 VSD_I_BC_PIS=ControlValue("I_BC_PIS")
                 Campo="I_Valor_PIS"                 
            Case Campo="I_Valor_PIS":
                 VSD_I_Valor_PIS=ControlValue("I_Valor_PIS")
                 Campo="I_CST_COFINS"

            Case Campo="I_CST_COFINS":
                 VSD_I_CST_COFINS=ControlValue("I_CST_COFINS")
                 If IsBlank(VSD_I_CST_COFINS)
                    Then VSD_I_CST_COFINS="99"
                 EndIf        
                 If Not IsBlank(VSD_I_CST_COFINS)
                    Then TribCST=Checa_CST("COFINS",[FaturaC->Tipo Movimento Estoque],VSD_I_CST_COFINS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_COFINS   =BlankNum()
                                         VSD_I_ACOFINS     =BlankNum()
                                         VSD_I_Valor_COFINS=BlankNum()
                                         Campo="I_CFOP"
                                    Else Campo="I_ACOFINS"
                                EndIf
                            Else Mensagem("CST COFINS inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACOFINS":
                 VSD_I_ACOFINS=ControlValue("I_ACOFINS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CFOP"
                    Else Campo="I_BC_COFINS"
                 EndIf             
            Case Campo="I_BC_COFINS":
                 VSD_I_BC_COFINS=ControlValue("I_BC_COFINS")
                 Campo="I_Valor_COFINS"                 
            Case Campo="I_Valor_COFINS":
                 VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
                 Campo="I_CFOP"

            Case Campo="I_CFOP":
                 VSD_I_CFOP=ControlValue("I_CFOP")

                 Moveto "FaturaC"
                 Moveto [CFO]
                 If Busca_Lookup("Codigo Fiscal de Operacao",VSD_I_CFOP,"CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                    Then Switch
                            Case SubStr(VSD_I_CFOP,1,1)<>SubStr([FaturaC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[FaturaC->CFO]+" !")
                            OtherWise: 
                                 If VSD_I_Tipo_Item="C"
                                    Then Campo="I_CDSERV"
                                    Else VSD_I_CDSERV =BlankNum()
                                         VSD_I_MUNSERV=BlankNum()     
                                         VSD_I_UFSERV =""
                                         Campo="I_NCM"
                                 EndIf
                          EndSwitch
                 EndIf
                 Moveto "FaturaI"
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else Valor_Importacao()
                 EndIf

            Case Campo="I_CDSERV":
                 VSD_I_CDSERV=ControlValue("I_CDSERV")
                 Campo="I_MUNSERV"
            Case Campo="I_MUNSERV":
                 VSD_I_MUNSERV=ControlValue("I_MUNSERV")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else Valor_Importacao()
                 EndIf
            Case Campo="I_Numero_Volumes":
                 VSD_I_Numero_Volumes=ControlValue("I_Numero_Volumes")
                 Campo="I_Peso_Liquido"
            Case Campo="I_Peso_Liquido":
                 VSD_I_Peso_Liquido=ControlValue("I_Peso_Liquido")
                 Campo="I_Peso_Embalagem"
            Case Campo="I_Peso_Embalagem":
                 VSD_I_Peso_Embalagem=ControlValue("I_Peso_Embalagem")
                 Valor_Importacao()            
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"        Or
   Campo="I_Tipo_Item"          Or
   Campo="I_Codigo_Cor_Tecido"  Or
   Campo="I_Condicao_Pagamento" Or
   Campo="I_Tabela"             Or
   Campo="I_CFOP"               Or
   Campo="I_CST_Item"           Or  
   Campo="I_CST_IPI"            Or  
   Campo="I_CST_PIS"            Or  
   Campo="I_CST_COFINS"         Or
   Campo="I_CSOSN"              Or
   Campo="I_MUNSERV"                 
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

If Not IsAssigned(LOCALIZAR_POR)
   Then Switch 
          Case SYS_CODIGO_CLIENTE="0296" : LOCALIZAR_POR="CodFor"
          Case SYS_CODIGO_CLIENTE="0046" And 
               PARAM_UTILIZACDBARRA="S"  : LOCALIZAR_POR="CodBar"
          OtherWise                      : LOCALIZAR_POR="CodItem"
        EndSwitch   
EndIf

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Pedido":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Numero do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Numero do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Numero da Ordem de Servi‡o"
       EndSwitch
  Case Campo="I_Pedido_Item":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Sequencia do Item do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Sequencia do Item do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Sequencia do Item da Ordem de Servi‡o"
       EndSwitch
  Case Campo="I_Codigo_Item" : 
       Switch
         Case LOCALIZAR_POR="CodItem": MSGCAMPO="C¢digo do Item"
         Case LOCALIZAR_POR="CodFor" : MSGCAMPO="C¢digo do Fornecedor"
         Case LOCALIZAR_POR="Ref."   : MSGCAMPO="Referˆncia"
         Case LOCALIZAR_POR="CodBar" : MSGCAMPO="C¢digo de Barra"
       EndSwitch

  Case Campo="I_Descricao_Item"         : MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item"              : MSGCAMPO="Tipo do Item"

  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"   : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tamanho"                : MSGCAMPO="Tamanho"
  Case Campo="I_Modelo_Item"            : MSGCAMPO="Sigla do modelo"
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"
  Case Campo="I_Condicao_Pagamento"     : MSGCAMPO="Codigo da condi‡Æo de pagamento"
  Case Campo="I_Composicao_Dias"        : MSGCAMPO="Composi‡Æo de dias"

  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Taxa_Desconto_Unitario" : MSGCAMPO="Taxa Desconto Unitario"
  Case Campo="I_Valor_Desconto_Unitario": MSGCAMPO="Valor Desconto Unitario"
  Case Campo="I_Preco_Total"            : MSGCAMPO="Pre‡o Total"
  Case Campo="I_Custo_Unitario"         : MSGCAMPO="Custo Unitario"
  Case Campo="I_Preco_Tabela"           : MSGCAMPO="Pre‡o da Tabela de Pre‡o"
  Case Campo="I_Comissao_Item"          : MSGCAMPO="Comiss„o do Item"

  Case Campo="I_TICMS"                  : MSGCAMPO="Tributacao ICMS: N„o tributado,Debitado,Isento,Outros,Substitui‡„o"
  Case Campo="I_CST_Item"               : MSGCAMPO="Codigo situa‡„o tributaria/ICMS"
  Case Campo="I_RBC_ICMS"               : MSGCAMPO="Aliquota redu‡Æo na base de calculo de ICMS"
  Case Campo="I_AICMS"                  : MSGCAMPO="Aliquota de ICMS"
  Case Campo="I_BC_ICMS"                : MSGCAMPO="Base de c lculo do ICMS com seus rateios proporcionais"  
  Case Campo="I_Valor_ICMS"             : MSGCAMPO="Valor do ICMS"

  Case Campo="I_ACSOSN"                 : MSGCAMPO="Aliquota de ICMS/Aproveitamento de credito SIMPLES NACIONAL"
  Case Campo="I_Valor_CSOSN"            : MSGCAMPO="Valor do ICMS/Aproveitamento de credito SIMPLES NACIONAL"

  Case Campo="I_MVA"                    : MSGCAMPO="Margem de valor agregado para base c lculo Subst.Tribut ria"
  Case Campo="I_AST"                    : MSGCAMPO="Aliquota da Subst.Tribut ria"
  Case Campo="I_BC_ST"                  : MSGCAMPO="Base de c lculo da Subst.Tribut ria com seus rateios proporcionais"  
  Case Campo="I_Valor_ST"               : MSGCAMPO="Valor da Subst.Tribut ria"

  Case Campo="I_CST_IPI"                : MSGCAMPO="Codigo situa‡„o tributaria/IPI"
  Case Campo="I_AIPI"                   : MSGCAMPO="Aliquota de IPI"
  Case Campo="I_BC_IPI"                 : MSGCAMPO="Base de c lculo do IPI com seus rateios proporcionais"  
  Case Campo="I_Valor_IPI"              : MSGCAMPO="Valor do IPI"

  Case Campo="I_TISSQN"                 : MSGCAMPO="Tributa‡„o ISSQN: Debitado, N„o tributado, Substituta, Retida, Isenta"
  Case Campo="I_AISSQN"                 : MSGCAMPO="Aliquota do ISSQN"
  Case Campo="I_BC_ISSQN"               : MSGCAMPO="Base de c lculo do ISSQN com seus rateios proporcionais"  
  Case Campo="I_Valor_ISSQN"            : MSGCAMPO="Valor do ISSQN"

  Case Campo="I_CST_PIS"                : MSGCAMPO="Codigo situa‡„o tributaria/PIS"
  Case Campo="I_APIS"                   : MSGCAMPO="Aliquota do PIS"
  Case Campo="I_BC_PIS"                 : MSGCAMPO="Base de c lculo do PIS com seus rateios proporcionais"  
  Case Campo="I_Valor_PIS"              : MSGCAMPO="Valor do PIS"

  Case Campo="I_CST_COFINS"             : MSGCAMPO="Codigo situa‡„o tributaria/COFINS"
  Case Campo="I_ACOFINS"                : MSGCAMPO="Aliquota do COFINS"
  Case Campo="I_BC_COFINS"              : MSGCAMPO="Base de c lculo do COFINS com seus rateios proporcionais"  
  Case Campo="I_Valor_COFINS"           : MSGCAMPO="Valor do COFINS"

  Case Campo="I_Numero_Volumes"         : MSGCAMPO="Quantidade de volumes"
  Case Campo="I_Peso_Liquido"           : MSGCAMPO="Peso liquido"
  Case Campo="I_Peso_Embalagem"         : MSGCAMPO="Peso da embalagem"

  Case Campo="I_NCM"                    : MSGCAMPO="NCM"
  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ este Item"
  Case Campo="I_CSOSN"                  : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"

  Case Campo="I_CDSERV"                 : MSGCAMPO="C¢digo do servi‡o"
  Case Campo="I_MUNSERV"                : MSGCAMPO="C¢digo do munic¡pio onde o servi‡o foi prestado"

  OtherWise                             : MSGCAMPO=""
EndSwitch

If CHAVEI=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
    Else TECLA=TECLA+"                  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  Localizar-> "+LOCALIZAR_POR 
EndIf
          
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc   ;  (Item_Dialog)

;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Localizar_Item_Por()

Switch
 Case SYS_CODIGO_CLIENTE="0296"      : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODFOR" 
                                       EndIf
 Case SYS_CODIGO_CLIENTE="0046" And 
      PARAM_UTILIZACDBARRA="S"       : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODBAR" 
                                       EndIf
 Case SYS_CODIGO_CLIENTE="0319"      : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODFOR" 
                                       EndIf                                     
 OtherWise                           : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODITE" 
                                       EndIf                                      
EndSwitch             
              
Switch
  Case LOCALIZA_CODIGO="LOC_CODITE" : If Len(ControlValue("I_Codigo_Item"))<=10
                                         Then Moveto [Codigo do Item]
                                              Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                                      EndIf
  Case LOCALIZA_CODIGO="LOC_CODFOR" : Moveto [Codigo Fornecedor]
                                      Locate ControlValue("I_Codigo_Item")
  Case LOCALIZA_CODIGO="LOC_CODREF" : Moveto [Referencia]
                                      Locate ControlValue("I_Codigo_Item")
  Case LOCALIZA_CODIGO="LOC_CODBAR" : Moveto [Codigo de Barras]
                                      Locate IndexOrder by "cod_barras" ControlValue("I_Codigo_Item")  
EndSwitch     

EndProc ;Proc Localizar_Item_Por()

;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Checa_MVA(ticms,cod)
Private a,b,cod

If ticms="S" And
   ((Search("VENDA",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S") Or
    (Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="E")) 
   Then 

        Moveto [Codigo MVA]
        If Not BUSCA_LOOKUP("Codigo MVA",[Codigo MVA],"Item "+[Codigo do Item]+", com c¢digo MVA n„o cadastrado !")
          Then Return False
        EndIf   
        [MVA         ]=REG_BUSCA_LOOKUP["MVA_1"]
        VSD_I_MVA     =[MVA         ]   
        If UF_EMPRESA=[FaturaC->UF] Or (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
           Then Return True
        EndIf   
        
        If REG_BUSCA_LOOKUP["Estados MVA_Ajustado"]="TODOS" Or
          Search([FaturaC->UF],REG_BUSCA_LOOKUP["Estados MVA_Ajustado"])>0
          Then a=1+([MVA]/100)
               b=(1-(UF_ALIQUOTA_ICMS/100))/(1-(UF_ALIQUOTA_ICMS_INTERNA/100))
               [MVA]    =Round(((a*b)-1)*100,2)
               VSD_I_MVA=[MVA         ]   
          Else 
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()
               VSD_I_MVA           =[MVA             ]   
               VSD_I_AST           =[ICMS_ST_Aliquota]   

               If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                  Then 
                       VSD_I_TICMS         ="O"
                       VSD_I_CSOSN         =SubStr(VSD_I_CST,1,1)+"900"

                       [CSOSN             ]=SubStr(VSD_I_CSOSN,2,3)
                       [Tributacao de ICMS]=VSD_I_TICMS
                  Else 
                       VSD_I_TICMS         ="O"
                       VSD_I_CST_Item      =SubStr(VSD_I_CST_Item,1,1)+"90"
                       
                       [Tipo Tributacao   ]=VSD_I_CST_Item
                       [Tributacao de ICMS]=VSD_I_TICMS
               EndIf   
        EndIf
   Else [Codigo MVA      ]=""
        [MVA             ]=BlankNum()   
        [ICMS_ST_Aliquota]=BlankNum()

        VSD_I_MVA         =[MVA         ]
        VSD_I_AST         =[ICMS_ST_Aliquota]   
EndIf
Return True
EndProc


;*******************************************************************************
;* Rotina para checagem desconto unitario                                      *
;*******************************************************************************
Proc Checa_DescontoUnitario()
Private TX_DESCTO_BLOQUEIO_UNIT, DesctoOK, VrBase, TxCalc

DesctoOk=True
If PARAM_BLOQ_DESCTOUNIT="S" Or PARAM_BLOQ_DESCTOUNIT="P"
   Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0
           Then DesctoOk=False
                If PARAM_ALTERA_PRECO="S"
                   Then VrBase=VSD_I_Preco_Tabela
                   Else VrBase=VSD_I_Preco_Unitario
                EndIf
                Tx_Calc=(VSD_I_Valor_Desconto_Unitario/VrBase)*100

                TX_DESCTO_BLOQUEIO_UNIT=TX_DESCTO_BLOQUEIO
                If PARAM_BLOQ_TPDESCTOUNIT="I"
                   Then TX_DESCTO_BLOQUEIO_UNIT=PARAM_BLOQ_TXDESCTOUNIT
                EndIf
                If PARAM_BLOQ_TPDESCTOUNIT="P"
                   Then Moveto [Codigo do Item]
                        If Busca_Lookup("Codigo do Item",[Codigo do Item],"")
                           Then TX_DESCTO_BLOQUEIO_UNIT=REG_BUSCA_LOOKUP["Desconto Maximo"]
                           Else TX_DESCTO_BLOQUEIO_UNIT=0
                        EndIf
                EndIf
                If tx_calc<=TX_DESCTO_BLOQUEIO_UNIT
                   Then DesctoOK=True
                EndIf
         EndIf
EndIf
If Not DesctoOK
   Then MSG="% Desconto concedido no Item acima do permitido !//"
        MSG=MSG+"Desconto m ximo = "+ Ltrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO_UNIT)) +"%.  "
        Switch
          Case PARAM_BLOQ_TPDESCTOUNIT="I":MSG=MSG+"Conforme Parƒmetro //"
          Case PARAM_BLOQ_TPDESCTOUNIT="C":MSG=MSG+"Conforme a Condi‡„o de Pagto //"
          Case PARAM_BLOQ_TPDESCTOUNIT="P":MSG=MSG+"Conforme o Item //"
        EndSwitch
        MSG=MSG+"// Verificar Ok !"
        If PARAM_BLOQ_DESCTOUNIT="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then DesctoOk=True
                        MSG="Fatura: "+ORDFAT+", Descto > "+LTrim(Format("W6.2,EIC",Tx_calc))+"%"
                        MSG=MSG+" Item: "+VSD_I_Codigo_Item+" "+VSD_I_Descricao_Item
                        Grava_Logt("#","DesctUnt",MSG)
                EndIf
           Else Mensagem(MSG)
        EndIf
EndIf
Return DesctoOk
EndProc

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero Pedido_Orcamento   ]=VSD_I_Pedido
       [Item Pedido_Orcamento     ]=VSD_I_Pedido_Item

       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Item            ]=VSD_I_Codigo_Item

       If SYS_CODIGO_CLIENTE="0003"
          Then [Descricao do Item ]=SubStr(VSD_I_Descricao_Item,1,30)+Spaces(30-Len(SubStr(VSD_I_Descricao_Item,1,30)))+VSD_I_Modelo_Item
          Else [Descricao do Item ]=VSD_I_Descricao_Item
       EndIf

       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
       [Tamanho                   ]=VSD_I_Tamanho

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Preco Total               ]=Round(VSD_I_Preco_Total,2)

       [Custo Medio Unitario      ]=VSD_I_Custo_Unitario
       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela

       [CFO                       ]=VSD_I_CFOP                
       [NCM                       ]=VSD_I_NCM                

       [Tipo Tributacao           ]=VSD_I_CST_Item
       [Tributacao de ICMS        ]=VSD_I_TICMS
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [ICMS_BC                   ]=VSD_I_BC_ICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)              
       [ICMS_CredSN_Aliquota      ]=VSD_I_ACSOSN    
       [ICMS_CredSN_Valor         ]=VSD_I_Valor_CSOSN

       [MVA                       ]=VSD_I_MVA                
       [ICMS_ST_Aliquota          ]=VSD_I_AST       
       [ICMS_ST_BC                ]=VSD_I_BC_ST
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST

       [Tributacao de IPI         ]=VSD_I_TIPI
       [Aliquota Reduzida BCIPI   ]=VSD_I_RBC_IPI
       [Aliquota de IPI           ]=VSD_I_AIPI
       [IPI_BC                    ]=VSD_I_BC_IPI
       [Valor do IPI              ]=VSD_I_Valor_IPI

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [Aliquota de ISSQN         ]=VSD_I_AISSQN
       [ISSQN_BC                  ]=VSD_I_BC_ISSQN
       [Valor do ISSQN            ]=VSD_I_Valor_ISSQN
       [Codigo_Servico            ]=VSD_I_CDSERV   
       [ISSQN_UF                  ]=VSD_I_UFSERV   
       [ISSQN_Municipio           ]=VSD_I_MUNSERV   

       [Tributacao de INSS        ]=VSD_I_TINSS
       [Aliquota de INSS          ]=VSD_I_AINSS
       [Valor do INSS             ]=VSD_I_Valor_INSS

       [Tributacao de IR          ]=VSD_I_TIR
       [Aliquota de IR            ]=VSD_I_AIR
       [Valor do IR               ]=VSD_I_Valor_IR

       [IPI_CST                   ]=VSD_I_CST_IPI                
       [PIS_CST                   ]=VSD_I_CST_PIS                
       [PIS_Aliquota              ]=VSD_I_APIS     
       [PIS_BC                    ]=VSD_I_BC_PIS             
       [PIS_Valor                 ]=VSD_I_Valor_PIS              

       [COFINS_CST                ]=VSD_I_CST_COFINS              
       [COFINS_Aliquota           ]=VSD_I_ACOFINS       
       [COFINS_BC                 ]=VSD_I_BC_COFINS         
       [COFINS_Valor              ]=VSD_I_Valor_COFINS           

       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Condicao de Pagamento     ]=VSD_I_Condicao_Pagamento
       [Composicao de Dias        ]=VSD_I_Composicao_Dias
       [Codigo da Tabela          ]=VSD_I_Tabela

       UnLockRecord
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item da OF                ]

       If CHAVEI=1
          Then If PARAM_PEDIDO="S"
                  Then VSD_I_Pedido=[FaturaC->Numero do Pedido   ]
                  Else VSD_I_Pedido=[FaturaC->Numero do Orcamento]
               EndIf
          Else VSD_I_Pedido=[Numero Pedido_Orcamento   ]
       EndIf
       VSD_I_Pedido_Item            =[Item Pedido_Orcamento     ]

       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]

       If SYS_CODIGO_CLIENTE="0003"
          Then VSD_I_Descricao_Item         =Substr([Descricao do Item],1,30)
               VSD_I_Modelo_Item            =Substr([Descricao do Item],31,4)
          Else VSD_I_Descricao_Item         =[Descricao do Item ]
               VSD_I_Modelo_Item            =""
       EndIf

       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]
       VSD_I_Tamanho                =[Tamanho                   ]

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Preco_Total            =Round([Preco Total               ],2)

       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]

       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_NCM                    =[NCM                       ]

       VSD_I_CST_Item               =[Tipo Tributacao           ]
       VSD_I_TICMS                  =[Tributacao de ICMS        ]
       VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
       VSD_I_AICMS                  =[Aliquota de ICMS          ]
       VSD_I_BC_ICMS                =[ICMS_BC                   ]
       VSD_I_Valor_ICMS             =[Valor do ICMS             ]

       VSD_I_CSOSN                  =SubStr([Tipo Tributacao],1,1)+[CSOSN]
       VSD_I_ACSOSN                 =[ICMS_CredSN_Aliquota      ]    
       VSD_I_Valor_CSOSN            =[ICMS_CredSN_Valor         ]

       VSD_I_MVA                    =[MVA                       ]
       VSD_I_AST                    =[ICMS_ST_Aliquota          ]
       VSD_I_BC_ST                  =[ICMS_ST_BC                ]
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]
       
       VSD_I_CST_IPI                =[IPI_CST                   ]
       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_RBC_IPI                =[Aliquota Reduzida BCIPI   ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_BC_IPI                 =[IPI_BC                    ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_BC_ISSQN               =[ISSQN_BC                  ]
       VSD_I_Valor_ISSQN            =[Valor do ISSQN            ]
       VSD_I_CDSERV                 =[Codigo_Servico            ]   
       VSD_I_UFSERV                 =[ISSQN_UF                  ]   
       VSD_I_MUNSERV                =[ISSQN_Municipio           ]   

       VSD_I_TINSS                  =[Tributacao de INSS        ]
       VSD_I_AINSS                  =[Aliquota de INSS          ]
       VSD_I_Valor_INSS             =[Valor do INSS             ]

       VSD_I_TIR                    =[Tributacao de IR          ]
       VSD_I_AIR                    =[Aliquota de IR            ]
       VSD_I_Valor_IR               =[Valor do IR               ]

       VSD_I_TPIS                   =""                          
       VSD_I_CST_PIS                =[PIS_CST                   ]
       VSD_I_APIS                   =[PIS_Aliquota              ]
       VSD_I_BC_PIS                 =[PIS_BC                    ]
       VSD_I_Valor_PIS              =[PIS_Valor                 ]

       VSD_I_TCOFINS                =""                          
       VSD_I_CST_COFINS             =[COFINS_CST                ]
       VSD_I_ACOFINS                =[COFINS_Aliquota           ]
       VSD_I_BC_COFINS              =[COFINS_BC                 ]
       VSD_I_Valor_COFINS           =[COFINS_Valor              ]

       VSD_I_Numero_Volumes         =[Volumes                   ]
       VSD_I_Peso_Liquido           =[Peso Liquido              ]
       VSD_I_Peso_Embalagem         =[Peso Embalagem            ]
       VSD_I_Comissao_Item          =[Comissao do Item          ]
       VSD_I_Condicao_Pagamento     =[Condicao de Pagamento     ]
       VSD_I_Composicao_Dias        =[Composicao de Dias        ]
       VSD_I_Tabela                 =[Codigo da Tabela          ]
       
       VSD_I_InfAdic                =[Informacoes_Adicionais    ]
EndSwitch
EndProc   ;  (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item da OF]
Locate [FaturaC->Numero da OF],SEQIT
CopyToArray RegItem
QUANT   =[Quantidade        ]
CTTOTAL =NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ]=[FaturaC->Codigo da Tabela     ]
        [Condicao de Pagamento]=[FaturaC->Condicao de Pagamento]
        [Composicao de Dias   ]=[FaturaC->Composicao de Dias   ]
EndIf
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Parƒmetros FT_IMP                                                           *
;*******************************************************************************
Proc PARAM_FTIMP()
If Not IsAssigned(CANCELA_IMPORTACAO_FTIMP) Then CANCELA_IMPORTACAO_FTIMP=False EndIf                                                                                     
Switch
  Case FTIMP=1 : Tela = 0
                 Carrega_Array_FTIMP=True
                 
                 Release Vars CST_TEMP
                 If IsAssigned(VSD_I_CST_Item)
                    Then CST_TEMP=VSD_I_CST_Item
                 EndIf  

  Case FTIMP=2 : If CANCELA_IMPORTACAO_FTIMP
                    Then APLIC_ORIGEM="FATURA"
                         Cancelar_Importacao=True
                         Play "FT_IMP"
                         Cancelar_Importacao=False
                 EndIf

  Case FTIMP=3 : CANCELA_IMPORTACAO_FTIMP=False
  
  Case FTIMP=4 : If INICIO_DIALOG
                    Then If Tela=0
                            Then Campo="I_Codigo_Item"
                                 Dynarray WinArray51[]
                                 Window Handle Dialog to JANELA1
                                 Window GetAttributes JANELA1 To WinArray51
                         EndIf
                 EndIf              
EndSwitch

EndProc ; PARAM_FT_IMP()

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
;;Sleep 500

Liberou_Bloqueio=False                       
F4_ATIVADO=False
F5_ATIVADO=False
F6_ATIVADO=False                            

FTIMP=1                         
PARAM_FTIMP()

Switch
  Case Not IsBlank([FaturaC->Numero do Pedido])   : MSG_Pedido_Orcamento="Pedido"
  Case Not IsBlank([FaturaC->Numero do Orcamento]): MSG_Pedido_Orcamento="Orcam."
  OtherWise                                       : MSG_Pedido_Orcamento="......"
EndSwitch

Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN"
   ;;;,"ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F5","F6","F7","F8","F9",-33,-147,"ClearArea","HOME","END","PGDN","PGUP"
     @ 02,0 height 21 width 80

   Accept @ -01,43 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,03 MSG_Pedido_Orcamento For "I_Pedido"
   Accept @ 00,18 Width 09 "A06" picture "#*#" Tag "I_Pedido" to VSD_I_Pedido
   Label  @ 00,11 "/Item" For "I_Pedido_Item"
   Accept @ 00,28 Width 06 "N" picture "#*#" Tag "I_Pedido_Item" to VSD_I_Pedido_Item

   Label  @ 00,55 "Ref. " For "I_Referencia"
   Accept @ 00,61 Width 16 "A14" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia  
   
   Label  @ 01,01 "C¢digo" For "I_Codigo_Item"
   Accept @ 02,01 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 01,18 "Descricao Item" For "I_Descricao_Item"
   Accept @ 02,18 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item

   Label  @ 01,61 "TI" For "I_Tipo_Item"
   Accept @ 02,61 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 03,00 "[F8]Inf.Adic->" For "I_InfAdic"
   Accept @ 03,18 Width 59 "A100" picture "!*!" Tag "I_InfAdic" to VSD_I_InfAdic

   Label  @ 04,01 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,01 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 05,07 Width 20 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   Label  @ 04,28 "TM" For "I_Tamanho"
   Accept @ 05,28 Width 05 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho
   Label  @ 04,33 "Modelo" For "I_Modelo_Item"
   Accept @ 05,34 Width 07 "A4" picture "!*!" Tag "I_Modelo_Item" to VSD_I_Modelo_Item
   Label  @ 04,42 "Tabela" For "I_Tabela"
   Accept @ 05,42 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   Label  @ 04,50 "CPG" For "I_Condicao_Pagamento"
   Accept @ 05,51 Width 5 "A2" picture "#*#" Tag "I_Condicao_Pagamento" to VSD_I_Condicao_Pagamento
   Label  @ 04,55 "Comp. Dias" For "I_Composicao_Dias"
   Accept @ 05,55 Width 22 "A50" picture "!*!" Tag "I_Composicao_Dias" to VSD_I_Composicao_Dias

   Label  @ 06,01 "Quantidade" For "I_Quantidade"
   Accept @ 07,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 06,15 "UN" For "I_UN_Item"
   Accept @ 07,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 06,21 "Pr.Unitario" For "I_Preco_Unitario"
	 Accept @ 07,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 06,33 "%" For "I_Taxa_Desconto_Unitario"
   Accept @ 07,34 Width 10 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 06,35 "/Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 07,45 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 06,57 "Pr.Total" For "I_Preco_Total"
   Accept @ 07,58 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 08,01 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 09,01 Width 13 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 08,21 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 09,21 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 08,33 "% Comiss„o" For "I_Comissao_Item"
   Accept @ 09,34 Width 10 "N" picture "#*#.[##]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   @ 10,00 ?? "Impostos CST  %Red     Aliq.  BC        Valor"
   
   Label  @ 11,00 "  ICMS" For "I_CST_Item"
   Accept @ 11,08 Width 06 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item   
   Accept @ 11,13 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 11,22 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 11,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ICMS" to VSD_I_BC_ICMS     
   Accept @ 11,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 12,00 " CSOSN" For "I_CSOSN"
   Accept @ 12,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 12, 14, 12, 21
   Accept @ 12,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 12, 29, 12, 40
   Accept @ 12,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

   Label  @ 13,00 "    ST" For "I_AST"
   Accept @ 13,14 Width 09 "N" picture "#*#.[##]" Tag "I_MVA" to VSD_I_MVA
   @ 13,10 ?? "%MVA"
   PaintCanvas Attribute 112 13, 08, 13, 21
   Accept @ 13,22 Width 08 "N" picture "#*#.[##]" Tag "I_AST" to VSD_I_AST 
   Accept @ 13,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ST" to VSD_I_BC_ST  
   Accept @ 13,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ST" to VSD_I_Valor_ST

   Label  @ 14,00 "   IPI" For "I_CST_IPI"
   Accept @ 14,08 Width 06 "A2" picture "!*!" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 14,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 14,22 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 14,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_IPI" to VSD_I_BC_IPI  
   Accept @ 14,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 15,00 " ISSQN" For "I_TISSQN"
   Accept @ 15,08 Width 06 "A1" picture "D,N,I,S,R" Tag "I_TISSQN" to VSD_I_TISSQN 
   Accept @ 15,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_ISSQN" to VSD_I_RBC_ISSQN
   Accept @ 15,22 Width 08 "N" picture "#*#.[##]" Tag "I_AISSQN" to VSD_I_AISSQN
   Accept @ 15,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ISSQN" to VSD_I_BC_ISSQN  
   Accept @ 15,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ISSQN" to VSD_I_Valor_ISSQN

   Label  @ 16,00 "   PIS" For "I_CST_PIS"    
   Accept @ 16,08 Width 06 "A2" picture "!*!" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 16,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS" to VSD_I_RBC_PIS
   Accept @ 16,22 Width 08 "N" picture "#*#.[##]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 16,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_PIS" to VSD_I_BC_PIS  
   Accept @ 16,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 17,00 "COFINS" For "I_CST_COFINS"   
   Accept @ 17,08 Width 06 "A2" picture "!*!" Tag "I_CST_COFINS" to VSD_I_CST_COFINS 
   Accept @ 17,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS" to VSD_I_RBC_COFINS
   Accept @ 17,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 17,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_COFINS" to VSD_I_BC_COFINS  
   Accept @ 17,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

   Label  @ 10,52 "CFOP" For "I_CFOP"
   Accept @ 11,52 Width 07 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 10,60 "NCM" For "I_NCM"
   Accept @ 11,60 Width 12 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM

   Label  @ 14,51 "Servi‡o" For "I_CDSERV"
   Accept @ 15,52 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 14,62 "Munic¡po" For "I_MUNSERV"
   Accept @ 15,62 Width 10 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 14,72 "UF" For "I_UFSERV"
   Accept @ 15,72 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 16,51 "Qtde/Volumes" For "I_Numero_Volumes"
   Accept @ 16,65 Width 12 "N" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 17,51 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 17,65 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 18,51 "Peso Embal.." For "I_Peso_Embalagem"
   Accept @ 18,65 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

EndDialog
Mouse Show
If RetVal
   Then Registro_Item("Gravar")
        FTIMP=3                         
        PARAM_FTIMP()
   Else If CHAVEI=1
           Then Del
           Else CopyFromArray RegItem
                UnLockRecord
                If CHAVEI=8
                   Then Exclusao_I()
                   Else FTIMP=2                         
                        PARAM_FTIMP()
                EndIf
        EndIf
        CHAVEI=9
EndIf
EndProc  ;  (DigitaI)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc VrImportacao_Dialog(Disparo,Campo,Evento,Elemento)
Private Janela, WinArray5 

TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True
Old_Entrega=[Entrega]
Mouse Show
If INICIO_DIALOG
   Then If CHAVEI=0
           Then Campo="II_BC"
        EndIf
        INICIO_DIALOG=False
EndIf

If Opcao_Ver=True Then Campo="II_BC" EndIf
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
 
   Switch
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
            Case Campo="II_BC":
                 CancelDialog
            Case Campo="II_Valor DespAduan"  : Campo="II_BC"
            Case Campo="II_Valor IOF"        : Campo="II_Valor DespAduan"
            Case Campo="II_Valor Imposto"    : Campo="II_Valor IOF"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="II_BC":
                 VSD_II_BC=ControlValue("II_BC")
                 Campo="II_Valor DespAduan"
            Case Campo="II_Valor DespAduan":
                 VSD_II_Valor_Desp=ControlValue("II_Valor DespAduan")
                 Campo="II_Valor IOF"
            Case Campo="II_Valor IOF":
                 VSD_II_Valor_IOF=ControlValue("II_Valor IOF")
                 Campo="II_Valor Imposto"
            Case Campo="II_Valor Imposto":
                 VSD_II_Valor_Imp=ControlValue("II_Valor Imposto")
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=""

Switch
  Case Campo="II_BC"               : MSGCAMPO="Base de C lculo"
  Case Campo="II_Valor DespAduan"  : MSGCAMPO="Valor de Despesas Aduaneiras"
  Case Campo="II_Valor IOF"        : MSGCAMPO="Valor IOF"
  Case Campo="II_Valor Imposto"    : MSGCAMPO="Valor dos Impostos"
  OtherWise                        : MSGCAMPO=""
EndSwitch
        
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc   ;  (Item_Dialog)

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

TabelaRefC="FaturaC"  TabelaRefI="FaturaI"

Aguarde("Somando itens")

;-------- Variaveis para calculo de impostos por item --------------------------
Release Vars It_tpitem, It_prtotal, It_cfop,
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             It_cst_icms, It_csosn_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
             It_aliq_icmscred, It_vr_icmscred,
             It_mva, It_aliq_st, It_vc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins, it_vr_ii

DynArray It_tpitem[]
DynArray It_prtotal[]
DynArray It_cfop[]

DynArray It_txdescto[]
DynArray It_descto[]
DynArray It_frete[]
DynArray It_seguro[]
DynArray It_outdesp[]

DynArray It_cst_icms[]
DynArray It_trib_icms[]
DynArray It_red_icms[]
DynArray It_aliq_icms[]
DynArray It_bc_icms[]
DynArray It_vr_icms[]

DynArray It_csosn_icms[]
DynArray It_aliq_icmscred[]
DynArray It_vr_icmscred[]

DynArray It_mva[]
DynArray It_aliq_st[]
DynArray It_bc_st[]
DynArray It_vr_st[]

DynArray It_cst_ipi[]
DynArray It_trib_ipi[]
DynArray It_aliq_ipi[]
DynArray It_bc_ipi[]
DynArray It_vr_ipi[]

DynArray It_trib_issqn[]
DynArray It_aliq_issqn[]
DynArray It_bc_issqn[]
DynArray It_vr_issqn[]

DynArray It_cst_pis[]
DynArray It_aliq_pis[]
DynArray It_bc_pis[]
DynArray It_vr_pis[]

DynArray It_cst_cofins[]
DynArray It_aliq_cofins[]
DynArray It_bc_cofins[]
DynArray It_vr_cofins[]

DynArray It_vr_ii[]

;-------- Variaveis para calculo da nota ---------------------------------------

VRMERC          =0
VRSERV          =0
VRBC_COMIS      =0
VRBCICMS_CREDSN =0

Moveto TabelaRefI
nitens=0
Scan

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
     Else VRSERV=VRSERV+[Preco Total]
  EndIf

  If PARAM_CALC_COMIS_ITEM="S"
     Then VRBC_COMIS=VRBC_COMIS+Round((([Preco Total]*[Comissao do Item])/100),2)
  EndIf

  If SubStr(PARAM_DOC_NF,1,3)="NFE" And IsBlank([Tipo Tributacao])
     Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // CST/ICMS inv lido, verificar !")
  EndIf

  ;-------- Variaveis para calculo imposto do item -------------------------------
  nitens=nitens+1
  It_tpitem[nitens]        =[Tipo do Item            ] 
  It_prtotal[nitens]       =[Preco Total             ] 
  It_cfop[nitens]          =[CFO                     ] 

  It_txdescto[nitens]      =BlankNum()  
  It_descto[nitens]        =BlankNum()  
  It_frete[nitens]         =BlankNum()
  It_seguro[nitens]        =BlankNum()  
  It_outdesp[nitens]       =BlankNum()  

  It_trib_icms[nitens]     =[Tributacao de ICMS      ]
  It_cst_icms[nitens]      =[Tipo Tributacao         ]
  It_red_icms[nitens]      =[Aliquota Reduzida BCICMS]
  It_aliq_icms[nitens]     =[Aliquota de ICMS        ]
  It_bc_icms[nitens]       =[ICMS_BC                 ]
  It_vr_icms[nitens]       =[Valor do ICMS           ]

  It_csosn_icms[nitens]    =[CSOSN                   ]
  It_aliq_icmscred[nitens] =[ICMS_CredSN_Aliquota    ]
  It_vr_icmscred[nitens]   =[ICMS_CredSN_Valor       ]

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

  It_trib_ipi[nitens]      =[Tributacao de IPI       ]
  It_cst_ipi[nitens]       =[IPI_CST                 ]
  It_aliq_ipi[nitens]      =[Aliquota de IPI         ]
  It_bc_ipi[nitens]        =[IPI_BC                  ]
  It_vr_ipi[nitens]        =[Valor do IPI            ]

  It_trib_ISSQN[nitens]    =[Tributacao de ISSQN     ]
  It_aliq_ISSQN[nitens]    =[Aliquota de ISSQN       ]
  It_bc_ISSQN[nitens]      =[ISSQN_BC                ]
  It_vr_ISSQN[nitens]      =[Valor do ISSQN          ]

  It_cst_pis[nitens]       =[PIS_CST                 ]
  It_aliq_pis[nitens]      =[PIS_Aliquota            ]
  It_bc_pis[nitens]        =[PIS_BC                  ]
  It_vr_pis[nitens]        =[PIS_Valor               ]

  It_cst_cofins[nitens]    =[COFINS_CST              ]
  It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
  It_bc_cofins[nitens]     =[COFINS_BC               ]
  It_vr_cofins[nitens]     =[COFINS_Valor            ]

  It_vr_ii[nitens]         =[II_Valor Imposto        ]

  If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
     It_aliq_icmscred[nitens]>0                                And
     (It_csosn_icms[nitens]="101" Or It_csosn_icms[nitens]="201")
     Then VRBCICMS_CREDSN  =VRBCICMS_CREDSN+It_prtotal[nitens]
  EndIf   

  If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
     Then
          It_bc_icms[nitens]       =BlankNum()
          It_vr_icms[nitens]       =BlankNum()

          It_bc_st[nitens]         =BlankNum()
          It_vr_st[nitens]         =BlankNum()

          It_vr_icmscred[nitens]   =BlankNum()

          It_bc_ipi[nitens]        =BlankNum()
          It_vr_ipi[nitens]        =BlankNum()

          It_bc_ISSQN[nitens]      =BlankNum()
          It_vr_ISSQN[nitens]      =BlankNum()

          It_bc_pis[nitens]        =BlankNum()
          It_vr_pis[nitens]        =BlankNum()

          It_bc_cofins[nitens]     =BlankNum()
          It_vr_cofins[nitens]     =BlankNum()

  EndIf   

EndScan
LimpAguarde()

Moveto "FaturaC"
CHAVEF=0

;*** Simples Nacional ***
If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   VRBCICMS_CREDSN>0       
   Then Moveto [Codigo]
        If Busca_Lookup("Codigo",[FaturaC->Codigo],"")
           Then Switch 
                ;  Case (REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NACIONAL" Or
                ;        REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NAC. ESRB") And
                ;        ALIQUOTA_CREDITO_ICMS_NOSN>0:
                ;        CHAVEF=9
                ;
                ;        MSG=    Completa([FaturaC->Nome Fantasia Empresa ]+"="+TPEMPR,70," ")+"//" 
                ;        MSG=MSG+Completa([FaturaC->Nome Fantasia EmitDest]+"="+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                ;        MSG=MSG+"Destinat rio sem direito a crˆdito de ICMS !"+"// //"
                ;        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                ;        MSG=MSG+Completa("- Exite(m) iten(s) Isento/Outros de ICMS;",70," ")+"//"
                ;        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo com cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                ;        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                ;        Mensagem(MSG)
                                                  
                  Case SYS_CODIGO_CLIENTE<>"0219" And
                       (REG_BUSCA_LOOKUP["Regime_Tributario"]="OUTROS") And
                        ALIQUOTA_CREDITO_ICMS_NOSN<=0:
                        CHAVEF=9
                        
                        MSG=    Completa([FaturaC->Nome Fantasia Empresa ]+" = "+TPEMPR,70," ")+"//" 
                        MSG=MSG+Completa([FaturaC->Nome Fantasia EmitDest]+" = "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                        MSG=MSG+"Destinat rio com direito a crˆdito de ICMS !"+"// //"
                        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                        MSG=MSG+Completa("- Exite(m) iten(s) Isento/Outros de ICMS;",70," ")+"//"
                        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo sem cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                        Mensagem(MSG)
                                                  
                EndSwitch           
        EndIf   
EndIf
If CHAVEF=9
   Then Return   
EndIf

Moveto [Valor Despesas Acessorias]

CALC_OF()

If REEMITIR
   Then Return
EndIf

While True

      MSGCAMPO=Field()
      
      If Field()="Tipo de Pagamento"         Then MSGCAMPO="Tipo de Pagamento=> V=A Vista  P=A Prazo  O=Outros" EndIf
      If Field()="Composicao de Dias"
         Then MSGCAMPO=MSGCAMPO+", Exemplo: 15/30/45/60 "
      EndIf

      TECLA=" Esc=Retornar  "
      If Field()="Forma de Pagamento"
         Then TECLA=TECLA+"F1=Tabelas  "
         Else TECLA=TECLA+"            "
      EndIf
      TECLA=TECLA+"F4=Calc_Venctos  F8=Venctos  PgUp/PgDn  "

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","PGDN","F8","PGUP","F1","F4","F","D"

    Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4":
           If PARAM_CPGTO_ITEM="S"
              Then Calc_Venctos_Itens()
              Else If IsBlank([Composicao de Dias])
                      Then Mensagem("Informe a Composi‡Æo de Dias para se calcular os Vencimentos!")
                           Loop
                   EndIf

                   Nome_Cartao=""
                   Numero_Cartao=""
                   If [Forma de Pagamento]="CT" Or
                      [Forma de Pagamento]="CD"
                      Then CHAVEV=1
                           Digita_Cartao()
                           UnLockRecord
                   EndIf
                   Calc_Venctos()
           EndIf
           If PARAM_CPGTO_ITEM="S"
              Then Moveto [Forma de Pagamento]
              Else Moveto [Tipo de Pagamento ]
           EndIf
      Case RetVal="F8":
      
           If GERDUP_CDESCTO>"0"
              Then MSG="Fun‡Æo nÆo disponivel !// //"+
                       "Calculo autom tico, para condi‡Æo pagto com instru‡Æo de desconto !"
                   Mensagem(MSG)    
                   Moveto [Forma de Pagamento]
                   Loop
           EndIf                    
      
           Moveto "FaturaV"
           While True
             CHAVEV()
             If CHAVEV=9
                Then QuitLoop
             EndIf
             Controla_EdicaoV()
           EndWhile
           Moveto "FaturaC"
           Moveto [Tipo de Pagamento]
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
              Then Mensagem("Forma Pagto Invalido !")
                   Loop
           EndIf
           If Search("VEND",[FaturaC->Descricao da Destinacao])>0
              Then If [Tipo de Pagamento]<>"O"
                      Then Moveto "FaturaV"
                           TOT_VECTOS=0
                           CHAVEV=0
                           Scan
                             If [Data]<[FaturaC->Data de Emissao]
                                Then CHAVEV=1
                                     MSG="Vencimento invalido !// //"
                                     MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                                     MSG=MSG+" inferior a data de emiss„o !"
                                     Mensagem(MSG)
                             EndIf
                             
                             If (GERDUP_CDESCTO>"0" And GERDUP_TXDESCTO>0 And [Duplicata_VrDesconto]<=0) Or
                                (GERDUP_CDESCTO="0" And                       [Duplicata_VrDesconto]>0 ) 
                                Then CHAVEV=1
                                     MSG="Valor de desconto na duplicata incorreto para cond. pagamento !// //"
                                     MSG=MSG+"Verifique os vencimentos, e recalcule novamente para corrigir !"
                                     Mensagem(MSG)
                                     QuitLoop
                             EndIf
                             
                             TOT_VECTOS=TOT_VECTOS+[Valor]
                           EndScan
                           Moveto "FaturaC"
                           If CHAVEV=1
                              Then Loop
                           EndIf
                           If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                              Then Mensagem("O Valor Total dos Vencimentos Difere do Valor da Nota Fiscal !")
                           EndIf
                   Endif

             If PARAM_CALC_COMIS_ITEM="S"
                Then VRBC_COMIS  =Round(VRBC_COMIS-((VRBC_COMIS*TXDESCTO_TOTAL)/100),2)
                     VRCALC_COMIS=0
                     Moveto "FaturaV"
                     Scan For Not IsBlank([Valor])
                       [Valor da Comissao]=Round((VRBC_COMIS*(([Valor]*100)/[FaturaC->Valor Mercadoria Liquido]))/100,2)
                       VRCALC_COMIS       =VRCALC_COMIS+[Valor da Comissao]
                     EndScan
                     If Not IsBlank([Valor])
                        Then [Valor da Comissao]=[Valor da Comissao]+(VRBC_COMIS-VRCALC_COMIS)
                     EndIf
                     Moveto "FaturaC"
             EndIf
                   
           EndIf

           If MSG_AUTOMATICA<>""
              Then posini=SearchFrom(" ** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS ",[Observacao na Nota Fiscal],1)
                   If posini>0               ;1234567890123456789012345678901234567890123456    
                      Then posfim=SearchFrom("NAO GERA DIREITO A CREDITO FISCAL DE ISS E IPI",[Observacao na Nota Fiscal],posini)
                           If posfim>0       ;5678961234567897123456789812345678991234567891
                              Then [Observacao na Nota Fiscal]=SubStr([Observacao na Nota Fiscal],1,posini-1)+
                                                               MSG_AUTOMATICA+
                                                               SubStr([Observacao na Nota Fiscal],posfim+46,Len([Observacao na Nota Fiscal]))
                              Else [Observacao na Nota Fiscal]=SubStr([Observacao na Nota Fiscal],1,posini-1)+
                                                               MSG_AUTOMATICA
                           EndIf
                      Else [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+
                                                       MSG_AUTOMATICA
                   EndIf
           EndIf

           If SYS_CODIGO_CLIENTE="0272" 
              Then If [Numero de Parcelas]>10 And [Forma de Pagamento]="CR"
                      Then Mensagem("M ximo de 10 parcelas permitido para esta forma de pagamento!")
                           Loop
                   EndIf
           EndIf
               
           If CHAVEC=1
              Then If Search("VEND",[Descricao da Destinacao])>0   And
                      [Nome Fantasia EmitDest]<>"DIVERSOS"         And
                      [Nome Fantasia EmitDest]<>"CONSUMIDOR FINAL" And
                      [Tipo]="C"                                   And                                 
                      PARAM_NBLOQUEIO_SPC > 0
                      Then If [Forma de Pagamento]<>"DN" And
                              [Forma de Pagamento]<>"CT" And
                              [Forma de Pagamento]<>"CD" 
                              Then If Not Checa_SPC()
                                      Then Loop
                                   EndIf
                           EndIf        
                   EndIf        
           EndIf       

           QuitLoop
      Case RetVal="F":
           Campo_Ant=Field()
           DIGITA_FRETE()
           CALC_OF()
           Moveto Field Campo_Ant
      Case RetVal="D":
           If Not Field()="Forma de Pagamento"
              Then 
                   If GERDUP_CDESCTO>"0"
                      Then MSG="Fun‡Æo nÆo disponivel !// //"+
                               "Calculo autom tico, para condi‡Æo pagto com instru‡Æo de desconto !"
                           Mensagem(MSG)    
                           Loop
                   EndIf                    
                   
                   Campo_Ant=Field()
                   DIGITA_DESCTO()
                   CALC_OF()
                   Moveto Field Campo_Ant
              Else KeyPress "D"
           EndIf
      Case RetVal="ESC":
        Switch
           Case Field()="Valor Despesas Acessorias":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Forma de Pagamento":
                If PARAM_CPGTO_ITEM="S"
                   Then Moveto [Valor do Seguro  ]
                   Else Moveto [Tipo de Pagamento]
                EndIf
           Case Field()="Tipo de Pagamento":
                Moveto [Valor do Seguro]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS" Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro":
                       If PARAM_CPGTO_ITEM="S"
                          Then Moveto [Forma de Pagamento]
                          Else Moveto [Tipo de Pagamento ]
                       EndIf
                EndSwitch
                CALC_OF()
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then [Numero de Parcelas]=BlankNum()
                        [Composicao de Dias]=""
                        [Forma de Pagamento]="OU"
                        Moveto [Forma de Pagamento]
                   Else Moveto [Numero de Parcelas]
                EndIf
           Case Field()="Numero de Parcelas":
                If SYS_CODIGO_CLIENTE="0272" 
                   Then If [Numero de Parcelas]>10 And [Forma de Pagamento]="CR"
                           Then Mensagem("M ximo de 10 parcelas permitido para esta forma de pagamento!")
                           Else Moveto [Composicao de Dias]
                        EndIf
                   Else Moveto [Composicao de Dias]     
                EndIf
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If SYS_CODIGO_CLIENTE="0272" 
                   Then If [Numero de Parcelas]>10 And [Forma de Pagamento]="CR"
                           Then Mensagem("M ximo de 10 parcelas permitido para esta forma de pagamento!")
                           Else Moveto [Tipo de Pagamento]
                        EndIf
                EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc    ;  (DigitaF)


;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc CHAVEV()
While True
  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

        TECLA= " Esc=Retornar  F7=Paginar  F9=Limpa_Venctos"

        Prompt TECLA

        Wait Field
             Until "ESC","ENTER","F7","HOME","UP","PGUP","F9"

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("FaturaV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             While Not RecordStatus("New")
               Del
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVEV=9
             Del
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVEV=0
                Else CHAVEV=1
                     End Down
                     [Sequencia]=SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ;  (ChaveV)

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DIGITAV()
If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else Moveto [Data]
EndIf
FPAGTO=[Forma de Pagamento]
While True
  TECLA= " Esc=Retornar  "
  If Field()="Forma de Pagamento"
     Then TECLA=TECLA+"F1=Tabelas  "
     Else TECLA=TECLA+"            "
  EndIf
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  Prompt TECLA

  Wait Field
       Message Field()
       Until "ESC","ENTER","DEL","F1"

  Switch
  Case RetVal="F1":
       If Field()="Forma de Pagamento"
          Then CONSULTAF1()
       EndIf
  Case RetVal="ESC":
       If Field()="Numero de Dias"
          Then If QuerDesfazer("")
                  Then If CHAVEV=1
                         Then Del
                       EndIf
                       QuitLoop
                EndIf
          Else Left
       EndIf
  Case RetVal="DEL":
       If QuerExcluir("")
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER":
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[FaturaC->Data de Emissao]+ND
               Else Right
            EndIf
       Case Field()="Forma de Pagamento":
            If []<>FPAGTO And Not IsBlank(FPAGTO)
               Then Mensagem("Para mudar forma de Pagto exclua e inclua novamente este Vencimento Ok !")
                    []=FPAGTO
                    Loop
            EndIf
            FPAGTO=[]
            If []="CH" or []="CP"
               Then Digita_Cheque()
               Else If []="CT" Or []="CD"
                       Then Digita_Cartao()
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc   ;  (DigitaV)

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Geral_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
INICIO_DIALOG=True
OP_SHOWD="DTBASE"

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:
           If Campo="CBanco" Or
              Campo="NomeCartao" or
              Campo="Cidade" Or
              Campo="UF"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5
                    
                    If Campo="CBanco"     Then Moveto [Codigo_Banco       ] EndIf
                    If Campo="NomeCartao" Then Moveto [Nome do Cartao     ] EndIf
                    If Campo="Cidade"     Then Moveto [Cidade             ] EndIf
                    If Campo="UF"         Then Moveto [UF                 ] EndIf
                    If ConsultaF1()
                      Then If Campo="Cidade"
                              Then [UF]=Reg_ConsultaF1["UF"]
                                   VSD_UF=[UF]
                           EndIf
                    EndIf

                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    echo Normal
                    echo off

                    If Campo="CBanco"
                       Then VSD_CBanco=[Codigo_Banco      ]
                            VSD_NBanco=[Nome_Banco        ]
                    EndIf
                    If Campo="NomeCartao"
                       Then VSD_NomeCartao=[Nome do Cartao]
                    EndIf
                    If Campo="Cidade"
                       Then VSD_Cidade=[Cidade]
                    EndIf
                    If Campo="UF"
                       Then VSD_UF=[UF]
                    EndIf
                    Moveto "FaturaV"
           EndIf
           If Campo="TipoEmit"
              Then ShowPopup " Emitente " @ 14,39
                      "~P~roprio" : " O Proprio Cliente" : "PROPRIO",
                      "~T~erceiro": " De Terceiro": "TERCEIRO"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then VSD_TipoEmit=MenuVar
                       EndIf
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 4 And OP_SHOWD="Cheque":
           If COPIOU_REGISTRO
              Then REGISTRO["Sequencia"]     =SEQ
                   REGISTRO["Numero de Dias"]=[Numero de Dias]
                   REGISTRO["Data"]          =[Data]
                   REGISTRO["Valor"]         =[Valor]
                   CopyFromArray REGISTRO
                   Ler_Gravar_Cheque("Ler")
           EndIf
      Case Evento["KeyCode"] = -81 And OP_SHOWD="Cheque":
           VSD_CBanco   =ControlValue("CBanco")
           VSD_NCheque  =ControlValue("NCheque")
           VSD_Nome     =ControlValue("Nome")
           VSD_Agencia  =ControlValue("Agencia")
           VSD_CCorrente=ControlValue("CCorrente")
           VSD_TipoEmit =ControlValue("TipoEmit")
           VSD_Cidade   =ControlValue("Cidade")
           VSD_UF       =ControlValue("UF")
           VSD_DataV    =ControlValue("DataV")
           VSD_Valor    =ControlValue("Valor")
           VSD_Obs      =ControlValue("Obs")
           VSD_CPF      =ControlValue("CPF")

           
           Pode_Gravar=True
           If IsBlank(VSD_TipoEmit)
              Then Mensagem("Emitente Invalido !")
                   Pode_Gravar=False
           EndIf
           
           If IsBlank(VSD_DataV)
              Then Mensagem("Data Vencimento Invalida !")
                   Pode_Gravar=False                  
           EndIf        
                   
           If IsBlank(VSD_Valor)
              Then Mensagem("Valor Invalido !")
                   Pode_Gravar=False
           EndIf

           If Pode_Gravar
              Then Ler_Gravar_Cheque("Gravar")
                   CancelDialog
           EndIf
           
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
                  [Frete Incluso na Nota ]=OLD_Frete_Incluso
                  [Aliquota BCFrete Nota ]=OLD_ABC_Frete
                  [Valor do Frete        ]=OLD_Frete
                  [Aliquota BCICMS Frete ]=OLD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=OLD_AICMS_Frete
                  [CFO Frete             ]=OLD_CFO_FRETE
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="ABCICMS_Frete" : Campo="AICMS_Frete"
             Case Campo="CFO_Frete"     : Campo="ABCICMS_Frete"
             Case Campo="I_Flag"        : Campo="Valor_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch
      ;;;***** Data Calculo Vencto****
           Switch
             Case Campo="Data_Base"      : CancelDialog
           EndSwitch    
      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco"        : CancelDialog
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit"      : Campo="NCheque"
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch
      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao"       : CancelDialog
             Case Campo="NomeCartao"    : Campo="NCartao"
           EndSwitch
      ;;;***** Obs    ****
           Switch
             Case Campo="OBS"           : CancelDialog
           EndSwitch
      ;;;***** Cupom   ****
      ;;;  Switch
      ;;;    Case Campo="CUPOM"         : CancelDialog
      ;;;  EndSwitch
        ;***** Datas OF ****
           Switch
             Case Campo="TGI_DTEMI"      : CancelDialog
             Case Campo="TGI_DTSAI"      : Campo="TGI_DTEMI"
             Case Campo="TGI_HRSAI"      : Campo="TGI_DTSAI"
           EndSwitch
        ;** Ordem de Compra P£blica **
           Switch
             Case Campo="TG_OCPEMPENHO"  : CancelDialog
             Case Campo="TG_OCPPEDIDO"   : Campo="TG_OCPEMPENHO"
             Case Campo="TG_OCPCONTRATO" : Campo="TG_OCPPEDIDO"
           EndSwitch           

      Case Evento["KeyCode"] = 13:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  If VSD_Frete_Incluso="S"
                     Then VSD_ABCICMS_Frete       =BlankNum()  
                          VSD_AICMS_Frete         =BlankNum() 
                          VSD_CFO_Frete           =""
                  EndIf   
                  Campo="ABC_Frete"
             Case Campo="ABC_Frete":
                  VSD_ABC_Frete=ControlValue("ABC_Frete")
                  If VSD_ABC_Frete>0
                     Then VSD_Frete=Round((VRNF*VSD_ABC_Frete)/100,2)
                          If VSD_Frete<VRMINIMO_FRETE
                             Then VSD_FRETE=VRMINIMO_FRETE
                          EndIf
                     Else VSD_ABC_Frete=BlankNum()
                  EndIf
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If VSD_Frete_Incluso="S"
                     Then If Not VSD_Frete>0
                             Then Mensagem("Valor do frete inv lido !")
                             Else Campo="I_Flag"
                          EndIf
                     Else If Not VSD_Frete>0
                             Then VSD_ABC_Frete           =BlankNum()
                                  VSD_Frete               =BlankNum()
                                  VSD_ABCICMS_Frete       =BlankNum()  
                                  VSD_AICMS_Frete         =BlankNum() 
                                  VSD_CFO_Frete           =""
                                  Campo="I_Flag"
                             Else Campo="AICMS_Frete"
                          EndIf   
                  EndIf
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  If Not IsBlank(VSD_AICMS_Frete) Or VSD_Frete<=0
                     Then Campo="ABCICMS_Frete"
                  EndIf
             Case Campo="ABCICMS_Frete":
                  VSD_ABCICMS_Frete=ControlValue("ABCICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")
                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then Moveto [CFO Frete]
                          If Busca_Lookup("Codigo Fiscal de Operacao",VSD_CFO_Frete,"CFO Inv lido")
                            Then Campo="I_Flag"
                          EndIF  
                  EndIf
             Case Campo="I_Flag":
                  If VSD_Frete_Incluso="S"
                     Then [Frete Incluso na Nota ]="+"
                     Else If VSD_Frete>0
                             Then [Frete Incluso na Nota ]=":"
                             Else [Frete Incluso na Nota ]=""
                          EndIf
                  EndIf
                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                  [Valor do Frete        ]=VSD_Frete
                  [Aliquota BCICMS Frete ]=VSD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                  [CFO Frete             ]=VSD_CFO_Frete

                  CancelDialog
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          AcceptDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")
                  AcceptDialog
           EndSwitch

      ;;;***** Data Calculo Vencto****
           Switch
             Case Campo="Data_Base":
                  VSD_Data_Base=ControlValue("Data_Base")
                  AcceptDialog
           EndSwitch
           
      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco":
                  VSD_CBanco=ControlValue("CBanco")
                  If Not IsBlank(VSD_CBanco)
                     Then Moveto [Codigo_Banco]
                          Ativa_Lookup()
                          Moveto [Codigo_Banco]
                          Locate VSD_CBanco
                          If RetVal
                             Then VSD_CBanco=[Codigo_Banco      ]
                                  VSD_NBanco=[Nome_Banco        ]
                                  KeyPress "ESC"
                                  Moveto "FaturaV"
                                  [Codigo_Banco]=VSD_CBanco
                                  Campo="Agencia"
                             Else Mensagem("Banco n„o Cadastrado !")
                                  VSD_CBanco=""
                                  VSD_NBanco=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="Agencia":
                  VSD_Agencia=ControlValue("Agencia")
                  Campo="CCorrente"
             Case Campo="CCorrente":
                  VSD_CCorrente=ControlValue("CCorrente")
                  Campo="NCheque"
             Case Campo="NCheque":
                  VSD_NCheque=ControlValue("NCheque")
                  Campo="TipoEmit"
             Case Campo="TipoEmit":
                  VSD_TipoEmit=ControlValue("TipoEmit")
                  If Not IsBlank(VSD_TipoEmit)
                     Then If VSD_Nome="" And VSD_TipoEmit="PROPRIO"
                             Then VSD_Nome  =[FaturaC->Razao Social]
                                  VSD_Cidade=[FaturaC->Cidade      ]
                                  VSD_UF    =[FaturaC->Uf          ]
                                  VSD_CPF   =[FaturaC->CGC         ]
                                  Campo="DataV"
                             Else Campo="CPF"
                          EndIf
                  Endif
             Case Campo="CPF":
                  VSD_CPF=ControlValue("CPF")
                  Campo="Nome"
             Case Campo="Nome":
                  VSD_Nome=ControlValue("Nome")
                  Campo="Cidade"
             Case Campo="Cidade":
                  VSD_Cidade=ControlValue("Cidade")              
                  If IsBlank(VSD_Cidade) 
                     Then Campo="Cidade"                     
                     Else Campo="UF"     
                  EndIf   
             Case Campo="UF":
                  VSD_UF=ControlValue("UF")
                   If IsBlank(VSD_UF) 
                      Then Campo="UF"                     
                      Else Campo="DataV"     
                   EndIf                  
                   If Not IsBlank(VSD_Cidade)
                      Then Moveto [Cidade]
                           Ativa_Lookup()
                           Moveto [Cidade]
                           Locate VSD_Cidade,VSD_UF
                           If RetVal
                              Then VSD_Cidade=[Cidade ]
                                   VSD_UF=[UF]
                                   KeyPress "ESC"
                                   Moveto "Faturav"
                                   [Cidade]=VSD_Cidade
                                   [UF]=VSD_UF                                
                              Else Mensagem("Cidade/UF n„o Cadastrada !")
                                   VSD_Cidade=""
                                   Campo="Cidade"
                                   KeyPress "ESC"
                           EndIf
                           Echo Off                  
                  EndIf
             Case Campo="DataV":
                  VSD_DataV=ControlValue("DataV")
                  If Not IsBlank(VSD_DataV)
                     Then Campo="Valor"
                  EndIf
             Case Campo="Valor":
                  VSD_Valor=ControlValue("Valor")
                  If Not IsBlank(VSD_Valor)
                     Then Campo="Obs"
                  EndIf
             Case Campo="Obs":
                  VSD_Obs=ControlValue("Obs")

                  Ler_Gravar_Cheque("Gravar")
                  CopyToArray REGISTRO
                  COPIOU_REGISTRO=True
                  CancelDialog
           EndSwitch


      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao":
                  VSD_NCartao=ControlValue("NCartao")
                  Campo="NomeCartao"
             Case Campo="NomeCartao":
                  VSD_NomeCartao=ControlValue("NomeCartao")
                  If Not IsBlank(VSD_NomeCartao)
                     Then Moveto [Nome do Cartao]
                          Ativa_Lookup()
                          Moveto [Nome do Cartao]
                          Locate VSD_NomeCartao
                          If RetVal
                             Then KeyPress "ESC"
                                  Moveto "FaturaV"
                                  [Numero do Cartao    ]=VSD_NCartao
                                  [Nome do Cartao      ]=VSD_NomeCartao
                                  Numero_Cartao         =VSD_NCartao
                                  Nome_Cartao           =VSD_NomeCartao
                                  CancelDialog
                             Else Mensagem("Cart„o n„o Cadastrado !")
                                  VSD_NomeCartao=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
           EndSwitch

      ;;;***** OBS    ****
           Switch
             Case Campo="OBS":
                  VSD_OBS=ControlValue("OBS")
                  [Observacao          ]=VSD_OBS
                  CancelDialog
           EndSwitch
      ;;;***** CUPOM  ****
      ;;;  Switch
      ;;;    Case Campo="CUPOM":
      ;;;         NUMERO_OF =[Faturac->Numero da Of]
      ;;;         VSD_CUPOM=AlinhM(ControlValue("CUPOM"),6)
      ;;;         If VSD_CUPOM <> ""
      ;;;            Then UnlockRecord
      ;;;                 KeyPress "F7"
      ;;;                 Moveto "Notac"
      ;;;                 Moveto [Codigo da Empresa]
      ;;;                 Locate [Faturac->Codigo da Empresa],VSD_CUPOM,""
      ;;;                 If RetVal
      ;;;                    Then Transfere_Dados_Nota()
      ;;;                         NOVA_DESTINACAO=False
      ;;;                    Else Moveto "FaturaC"
      ;;;                         MENSAGEM("Cupom Fiscal n„o Encontrado")
      ;;;                 EndIf
      ;;;                 UnlockRecord
      ;;;                 KeyPress "F7"
      ;;;                 LockRecord
      ;;;         EndIf
      ;;;         CancelDialog
      ;;;  EndSwitch

        ;***** Datas OF ****
           Switch
             Case Campo="TGI_DTEMI"      : Campo="TGI_DTSAI"
                  VSDGDTEMI=ControlValue("TGI_DTEMI")
             Case Campo="TGI_DTSAI"      : Campo="TGI_HRSAI"
                  VSDGDTSAI=ControlValue("TGI_DTSAI")
             Case Campo="TGI_HRSAI"      :
                  VSDGHRSAI=ControlValue("TGI_HRSAI")
                  AcceptDialog
           EndSwitch
        ;** Ordem de Compra P£blica **        
           Switch
             Case Campo="TG_OCPEMPENHO" : Campo="TG_OCPPEDIDO"
                  VSDGOCPEMPENHO=ControlValue("TG_OCPEMPENHO")
             Case Campo="TG_OCPPEDIDO"  : Campo="TG_OCPCONTRATO"
                  VSDGOCPPEDIDO=ControlValue("TG_OCPPEDIDO") 
             Case Campo="TG_OCPCONTRATO": AcceptDialog
                  VSDGOCPCONTRATO=ControlValue("TG_OCPCONTRATO")
           EndSwitch              
           
           
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="TipoEmit"    Or
   Campo="NomeCartao"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf
If OP_SHOWD="Cheque" And COPIOU_REGISTRO
   Then TECLA=TECLA+"Ctrl+D=Copiar  PgDn=Finalizar  "
EndIf

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

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

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc     ;  (Geral_Dialog)

;*******************************************************************************
;* Digitacao dos Dados do Frete                                                *
;*******************************************************************************
Proc Digita_Frete()
Private ncampo

ncampo=Field()

INICIO_DIALOG=True
OP_SHOWD="Frete"

OLD_Frete_Incluso=[Frete Incluso na Nota ]
OLD_ABC_Frete    =[Aliquota BCFrete Nota ]
OLD_Frete        =[Valor do Frete        ]
OLD_ABCICMS_Frete=[Aliquota BCICMS Frete ]
OLD_AICMS_Frete  =[Aliquota de ICMS Frete]
OLD_CFO_FRETE    =[CFO Frete             ]

If [Frete Incluso na Nota ]="+" Or
   [Frete Incluso na Nota ]="S"
   Then VSD_Frete_Incluso="S"
   Else VSD_Frete_Incluso="N"
EndIf

If CHAVEC=1
   Then VSD_ABC_Frete    =TAXA_FRETE
   Else VSD_ABC_Frete    =[Aliquota BCFrete Nota ]
EndIf
VSD_Frete         =[Valor do Frete        ]
VSD_ABCICMS_Frete =[Aliquota BCICMS Frete ]
VSD_AICMS_Frete   =[Aliquota de ICMS Frete]
VSD_CFO_Frete     =[CFO Frete             ]
VSD_KM_Frete      =KM_FRETE
VSD_VRMINIMO_Frete=VRMINIMO_FRETE

VSD_Flag         =""
Echo Normal
Echo Off

Showdialog "Calculo do Frete" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,09 height 06 width 61

   Label  @ 0,00 "Soma na Nota" for "Frete_Incluso"
   Label  @ 1,04 "(Sim/N„o)"    for "Frete_Incluso"
   Accept @ 1,01  Width 4 "A1" picture "S,N" Tag "Frete_Incluso" to VSD_Frete_Incluso

   Label  @ 0,15 "Km Cliente" for "TKM_Frete"
   Accept @ 1,19 Width 7 "S" picture "#*#" Tag "TKM_Frete" to VSD_KM_Frete

   Label  @ 0,26 "%Aplicar" for "ABC_Frete"
   Accept @ 1,27 Width 8 "N" picture "#*#.[###]" Tag "ABC_Frete" to VSD_ABC_Frete

   Label  @ 0,35 "Vr Minimo" for "TVRMINIMO_Frete"
   Accept @ 1,36 Width 10 "$" picture "#*#.[##]" Tag "TVRMINIMO_Frete" to VSD_VRMINIMO_Frete

   Label  @ 0,46 "Vr Frete" For "Valor_Frete"
   Accept @ 1,47 Width 11 "$" picture "#*#.[##]" Tag "Valor_Frete" to VSD_Frete

   Label  @ 2,26 "%ICMS" for "AICMS_Frete"
   Accept @ 3,27 Width 8 "N" picture "#*#.[###]" Tag "AICMS_Frete" to VSD_AICMS_Frete

   Label  @ 2,34 "%Red.BCICMS" for "ABCICMS_Frete"
   Accept @ 3,36 Width 10 "N" picture "#*#.[###]" Tag "ABCICMS_Frete" to VSD_ABCICMS_Frete

   Label  @ 2,46 "CFOP" for "CFO_Frete"
   Accept @ 3,47 Width 7 "A4" picture "####" Tag "CFO_Frete" to VSD_CFO_Frete

   Accept @ 3,55 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

Enddialog
Mouse Show
Moveto Field ncampo
EndProc    ;  (Digita_Frete)

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc Digita_Descto()
Private DesctoOk

INICIO_DIALOG=True
OP_SHOWD="Desconto"

VSD_A_Descto   =[Taxa de Desconto ]
VSD_Descto     =[Valor do Desconto]

Showdialog "Calculo do Desconto" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 12,20 height 04 width 32

   Label  @ 0,00 "%Sobre o Bruto" for "A_Descto"
   Accept @ 1,02 Width 10 "N" picture "#*#.[###]" Tag "A_Descto" to VSD_A_Descto

   Label  @ 0,18 "Valor" For "Descto"
   Accept @ 1,15 Width 13 "$" picture "#*#.[##]" Tag "Descto" to VSD_Descto

Enddialog
Mouse Show
If Not RetVal
   Then Return
EndIf

DesctoOk=True
If PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P"
   Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0
           Then DesctoOk=False
                If PARAM_BLOQ_TPDESCTO="I"
                   Then TX_DESCTO_BLOQUEIO=PARAM_BLOQ_TXDESCTO
                EndIf
                If VSD_A_Descto>0
                   Then If VSD_A_Descto<=TX_DESCTO_BLOQUEIO
                           Then DesctoOK=True
                        EndIf
                   Else If ((VSD_Descto/[FaturaC->Valor Mercadoria])*100)<=TX_DESCTO_BLOQUEIO
                           Then DesctoOK=True
                        EndIf
                EndIf
         EndIf
EndIf
If Not DesctoOK
   Then MSG="% Desconto concedido no Total acima do permitido !//"
        MSG=MSG+"Desconto m ximo = "+ Ltrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO)) +"% //"
        MSG=MSG+"// Verificar Ok !"
        If PARAM_BLOQ_DESCTO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then DesctoOk=True
                        MSG="Fatura: "+ORDFAT+", Descto > "+LTrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO))+"%"
                        Grava_Logt("#","DesctTot",MSG)
                EndIf
           Else Mensagem(MSG)
        EndIf
EndIf
If DesctoOk
   Then [Taxa de Desconto ]=VSD_A_Descto
        [Valor do Desconto]=VSD_Descto
EndIf

EndProc   ; (Digita_Descto)

;*******************************************************************************
;* Digitacao de Cheques                                                        *
;*******************************************************************************
Proc Digita_Cheque()
INICIO_DIALOG=True
OP_SHOWD="Cheque"
Echo Normal
Echo Off

Moveto "FaturaV"
Ler_Gravar_Cheque("Ler")

Showdialog "Dados do Cheque" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","PGDN","Ditto","ClearArea"
     @ 09,04 height 12 width 66

   Label  @ 0,00 "N§ Banco Nome Banco" for "CBanco"
   Accept @ 1,01  Width 8 "A4" picture "!*!" Tag "CBanco" to VSD_CBanco

   Accept @ 1,10  Width 23 "A20" picture "!*!" Tag "NBanco" to VSD_NBanco

   Label  @ 0,33 "Agencia" for "Agencia"
   Accept @ 1,34  Width 9 "A6" picture "!*!" Tag "Agencia" to VSD_Agencia

   Label  @ 2,00 "C/C" for "CCorrente"
   Accept @ 3,01  Width 13 "A10" picture "!*!" Tag "CCorrente" to VSD_CCorrente

   Label  @ 2,14 "N§ Cheque" for "NCheque"
   Accept @ 3,15  Width 13 "A10" picture "!*!" Tag "NCheque" to VSD_NCheque

   Label  @ 2,33 "Emitente" for "TipoEmit"
   Accept @ 3,34  Width 11 "A8" picture "PROPRIO,TERCEIRO" Tag "TipoEmit" to VSD_TipoEmit

   Label  @ 4,00 "CPF" for "CPF"
   Accept @ 5,01  Width 17 "A14" picture "!*!" Tag "CPF" to VSD_CPF

   Label  @ 4,19 "Nome do Titular" for "Nome"
   Accept @ 5,20  Width 43 "A40" picture "!*!" Tag "Nome" to VSD_Nome

   Label  @ 6,00 "Cidade" for "Cidade"
   Accept @ 7,01  Width 23 "A20" picture "!*!" Tag "Cidade" to VSD_Cidade

   Label  @ 6,24 "UF" for "UF"
   Accept @ 7,25  Width 5  "A2" picture "!*!" Tag "UF" to VSD_UF

   Label  @ 6,36 "Dt Vencto " for "DataV"
   Accept @ 7,37  Width 13 "D" picture "#[#];.##;.##[##]" Tag "DataV" to VSD_DataV

   Label  @ 6,50 "Valor" for "Valor"
   Accept @ 7,51  Width 12 "$" picture "#*#.[##]" Tag "Valor" to VSD_Valor

   Label  @ 08,00 "Observa‡„o do Cheque" for "Obs"
   Accept @ 09,01  Width 62 "A70" picture "!*!" Tag "Obs" to VSD_Obs

Enddialog
Mouse Show
EndProc  ; (Digita_Cheque)

;*******************************************************************************
;* Digitacao de Cartao                                                         *
;*******************************************************************************
Proc Digita_Cartao()
INICIO_DIALOG=True
OP_SHOWD="Cartao"

Moveto "FaturaV"
VSD_NCartao   =[Numero do Cartao    ]
VSD_NomeCartao=[Nome do Cartao      ]

Showdialog "Dados do Cartao" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,08 height 04 width 48


   Label  @ 0,00 "N§ Autoriza‡Æo" for "NCartao"
   Accept @ 1,01  Width 22 "A19" picture "!*!" Tag "NCartao" to VSD_NCartao

   Label  @ 0,25 "Nome do Cartao" for "NomeCartao"
   Accept @ 1,26 Width 18 "A15" picture "!*!" Tag "NomeCartao" To VSD_NomeCartao

Enddialog
Mouse Show
EndProc   ; (Digita_Cartao)

;*******************************************************************************
;* Digitacao de Observacao                                                     *
;*******************************************************************************
Proc Digita_Obs()
INICIO_DIALOG=True
OP_SHOWD="Observacao"

Moveto "FaturaV"
VSD_OBS       =[Observacao          ]

Showdialog "Observa‡„o" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,08 height 03 width 68

   Accept @ 0,01  Width 64 "A70" picture "!*!" Tag "OBS" to VSD_OBS

Enddialog
Mouse Show
EndProc  ;  (Digita_Obs)

;*******************************************************************************
;* Rotina para a pegar o numero do cupom                                       *
;*******************************************************************************
;;Proc Entra_Numero_Cupom()
;;INICIO_DIALOG=True
;;OP_SHOWD="Cupom"
;;
;;VSD_CUPOM     = ""
;;
;;Showdialog "" Proc "Geral_Dialog"
;;   Trigger "OPEN","ARRIVE"
;;    Key "TAB","ReverseTab","ENTER","ESC"
;;     @ 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)
;;
;*******************************************************************************
;* Ler ou Gravar Dados do Cheque                                               *
;*******************************************************************************
Proc Ler_Gravar_Cheque(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       VSD_DataV    =[Data          ]
       VSD_CBanco   =[Codigo_Banco  ]
       VSD_NBanco   =[Nome_Banco    ]
       VSD_Agencia  =[Agencia       ]
       VSD_CCorrente=[Numero_Conta  ]
       VSD_NCheque  =[Numero_Cheque ]
       VSD_TipoEmit =[Tipo_Emitente ]
       VSD_Nome     =[Titular_Cheque]
       VSD_Cidade   =[Cidade        ]
       VSD_UF       =[UF            ]
       VSD_Valor    =[Valor         ]
       VSD_Obs      =[Observacao    ]
       VSD_CPF      =[CPF           ]
  Case Opcao="Gravar":
       [Data          ]=VSD_DataV
       [Codigo_Banco  ]=VSD_CBanco
       [Nome_Banco    ]=VSD_NBanco
       [Agencia       ]=VSD_Agencia
       [Numero_Conta  ]=VSD_CCorrente
       [Numero_Cheque ]=VSD_NCheque
       [Tipo_Emitente ]=VSD_TipoEmit
       [Titular_Cheque]=VSD_Nome
       [Cidade        ]=VSD_Cidade
       [UF            ]=VSD_UF
       [Observacao    ]=VSD_Obs
       [Valor         ]=VSD_Valor
       [CPF           ]=VSD_CPF
EndSwitch
EndProc   ;  (Ler_Gravar_Cheque)

;*******************************************************************************
;* Rotina para Digitacao Cabeca 2¦ Pagina                                      *
;*******************************************************************************
Proc DIGITAD()
CHAVED=0

Moveto "FaturaC"
V_TRANSP=[Codigo da Transportadora]
Moveto [Codigo da Transportadora]
If CHAVEC=1 And IsBlank([Codigo da Transportadora])
   Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
EndIf

If REEMITIR
   Then CONFIMPRIME()
        Return
EndIf

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo da Transportadora" Or
         Field()="Codigo do Veiculo"        Or
         Field()="Cidade Transport"         Or
         Field()="UF Transport"
         Then TECLA=TECLA+"F1=Tabelas  "
         Else TECLA=TECLA+"            "
      EndIf
      TECLA=TECLA+"F4=Calc_Volumes  F8=Observa‡„o  PgUp/PgDn=Finalizar  "

      MSGCAMPO = Field()
      If Field()="Frete por Conta"    
          Then MSGCAMPO="Frete por Conta, Consulte [F1]"
      EndIf  
      pos_p=SearchFrom("Transp",Field(),1)
      If pos_p>0 And Field()<>"Codigo da Transportadora"
         Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
      EndIf

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","PGDN","PGUP","F8","F4"

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Transportadora" Or
              Field()="Codigo do Veiculo"        Or
              Field()="Cidade Transport"         Or
              Field()="UF Transport"
              Then If CONSULTAF1()
                      Then If Field()="Cidade Transport"
                              Then [UF Transport ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf
           EndIf
           If Field()="Frete por Conta"
              Then FreteporConta()
           EndIf   
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Transportadora":
                CHAVED=9
                QuitLoop
           Case Field()="Razao Social Transport":
                Moveto [Codigo da Transportadora]
           Case Field()="Codigo do Veiculo":
                Moveto [Razao Social Transport]
           Case Field()="Frete por Conta":
                Moveto [Codigo do Veiculo]
           Case Field()="Numero Ordem de Volumes":
                Moveto [Frete por Conta]
           Case Field()="Observacao na Nota Fiscal":
                Moveto [Numero Ordem de Volumes]
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGUP":
           CHAVED=9
           QuitLoop
      Case Retval="PGDN":
           If IsBlank([Codigo da Transportadora]) Then Mensagem("Transportador Inv lido !")   Loop EndIf
           If IsBlank([Frete por Conta])          Then Mensagem("Frete por conta Inv lido !") Loop EndIf

           If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
              PARAM_UTILIZA_COMISSAO_VENDREAL="S"
              Then Switch
                     Case SYS_CODIGO_CLIENTE="0117":
                       If [Codigo da Destinacao]="001" Or
                          [Codigo da Destinacao]="002"
                          Then If Not Checa_Comissao_Produto()
                                  Then QuitLoop
                               EndIf
                          Else If Not Checa_Comissao_Vendedor()
                                  Then QuitLoop
                               EndIf
                       EndIf
                     OtherWise:
                       If Not Checa_Comissao_Vendedor()
                          Then QuitLoop
                       EndIf
                   EndSwitch
           EndIf

           If PARAM_COMIS_VENCTO="S" And
              PARAM_CPGTO_ITEM<>"S"
              Then RATEIO_COMISSAO_VENCTOS()
           EndIf

           CONFIMPRIME()
           QuitLoop
      Case Retval="F4":
           CALC_VOLUMES()
      Case Retval="F8":
           CampoAnt=Field()
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo da Transportadora":
                If IsBlank([]) Then Loop EndIf
                If V_TRANSP<>[] And [Nome Fantasia Transport]="O PROPRIO"
                   Then [Razao Social Transport ]=[Razao Social  ]
                        [Endereco Transport     ]=[Endereco      ]
                        [Bairro Transport       ]=[Bairro        ]
                        [CEP Transport          ]=[CEP           ]
                        [Cidade Transport       ]=[Cidade        ]
                        [UF Transport           ]=[UF            ]
                        [CGC Transport          ]=[CGC           ]
                        [IE Transport           ]=[IE            ]
                        Moveto [Codigo do Veiculo]
                   Else If V_TRANSP<>[] And [Nome Fantasia Transport]="DIVERSOS"
                           Then Moveto [Razao Social Transport]
                           Else Moveto [Codigo do Veiculo]
                       EndIf
                EndIf
                V_TRANSP=[Codigo da Transportadora]
           Case Field()="Frete por Conta":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                Moveto [Numero de Volumes]
                Moveto [Numero Ordem de Volumes]
           Case Field()="Observacao na Nota Fiscal":
                Moveto [Numero Ordem de Volumes]
           Case Field()="Peso Liquido":
                Moveto [Numero Ordem de Volumes]
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaD)

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()
CUSTO=BlankNum()
If [FaturaC->Atualiza Estoque]<>"S" Or
   IsBlank([FaturaI->Codigo do Item]) Or
   [FaturaI->Tipo do Item]="C" Or [FaturaI->Tipo do Item]="D" Or [FaturaI->Tipo do Item]="F" Or
   [FaturaI->Tipo do Item]="G" Or [FaturaI->Tipo do Item]="H" Or [FaturaI->Tipo do Item]="I"
   Then Return
EndIf

If Not IsBlank([FaturaC->Data de Saida])
   Then MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Saida]))
   Else MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Emissao]))
EndIf

While True
 Moveto "\\Sistemas\\Estoque\\SdEstq"
 Locate [FaturaC->Codigo da Empresa],
        [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
 If Not RetVal
    Then If CHAVEI<>8
            Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
                    Then Moveto "FaturaI"
                         Return False
                    Else Loop
                 EndIf
            Else Moveto "FaturaI"
                 Return False
         EndIf
 EndIf
 While IsLockRecord() EndWhile
 QuitLoop
EndWhile

CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
If CUSTO=0 Or IsBlank(CUSTO)
   Then CUSTO=[Ultimo Custo Atual]
EndIf

Switch
  Case CHAVEI=1:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
     EndSwitch
  Case CHAVEI=8:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-([FaturaI->Custo Medio Unitario]*[FaturaI->Quantidade]),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal(([FaturaI->Custo Medio Unitario]*[FaturaI->Quantidade]),2),2)
       EndSwitch
  Case CHAVEI=0:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]-QUANT)+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]+QUANT)-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]+CTTOTAL)-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       EndSwitch
EndSwitch
If ([Custo Total Atual]/[Saldo Atual])>0
   Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
EndIf
UnLockRecord

If PARAM_PECAS_ITEM="S" And 
   [FaturaI->Tipo do Item]="T" And 
   [FaturaC->Tipo Movimento Estoque]="E" And  
   Search("DEVOL",[FaturaC->Descricao da Destinacao])>0
   Then While True
         Moveto "\\Sistemas\\Estoque\\PecasSD"
         Moveto [Codigo da Empresa]
         Locate [FaturaC->Codigo da Empresa], [FaturaI->Codigo do Item], 0, ANO_EST, MES_EST
         If RetVal
            Then If IsLockRecord()
                    Then Loop
                 EndIf

                 Switch
                   Case CHAVEI=8:
                        [Saldo Atual      ]=NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
                   OtherWise    :
                        If CHAVEI=1
                           Then [Saldo Atual      ]=NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
                           Else [Saldo Atual      ]=NDecimal(([Saldo Atual]-(QUANT))+[FaturaI->Quantidade],3)
                        EndIf   

                        If Not IsBlank([FaturaC->Data de Saida])
                           Then If [FaturaC->Data de Saida]>[Ultima_Entrada]
                                   Then [Ultima_Entrada]=[FaturaC->Data de Saida]
                                 EndIf
                           Else If [FaturaC->Data de Emissao]>[Ultima_Entrada]
                                   Then [Ultima_Entrada]=[FaturaC->Data de Emissao]
                                 EndIf
                        EndIf
                 EndSwitch
                 UnLockRecord
                 QuitLoop
            Else Cria_Ficha2([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
         EndIf
        EndWhile
EndIf


Moveto "FaturaI"
[Custo Medio Unitario]=CUSTO
EndProc   ; (Estoque)

;*******************************************************************************
;* Rotina p/ Checagem de Estoque Negativo                                     **
;*******************************************************************************
Proc Checa_Estoque()
ULTIMO_CTENTRADA=0

SALDOATUAL=BlankNum()
If [FaturaC->Atualiza Estoque]<>"S" Or
   [FaturaC->Tipo Movimento Estoque]="E" Or
   IsBlank([FaturaI->Codigo do Item]) Or
   [FaturaI->Tipo do Item]="C" Or [FaturaI->Tipo do Item]="D" Or [FaturaI->Tipo do Item]="F" Or
   [FaturaI->Tipo do Item]="G" Or [FaturaI->Tipo do Item]="H" Or [FaturaI->Tipo do Item]="I"
   Then Moveto "FaturaI"
        Return True
EndIf

If Not IsBlank([FaturaC->Data de Saida])
   Then MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Saida]))
   Else MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Emissao]))
EndIf

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [FaturaC->Codigo da Empresa],
         [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
             Then Moveto "FaturaI"
                  Return False
             Else Loop
          EndIf
  EndIf
  While IsLockRecord() EndWhile
  QuitLoop
EndWhile

SALDOATUAL=[Saldo Atual]
If IsBlank(SALDOATUAL)
   Then SALDOATUAL=0
EndIf
NOVOSALDO=-1
Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANT)-[FaturaI->Quantidade]),3)
EndSwitch
VSD_I_Custo_Unitario=NDecimal(([Custo Total Atual]/[Saldo Atual]),5)
If VSD_I_Custo_Unitario=0 Or IsBlank(VSD_I_Custo_Unitario)
   Then VSD_I_Custo_Unitario=[Ultimo Custo Atual]
EndIf

ULTIMO_CTENTRADA    =NDecimal([Preco de Custo],2)

UnLockRecord

Moveto "FaturaI"
If NOVOSALDO>=0
   Then Return True
   Else MSG=    "Estoque Insuficiente em "+LTrim(StrVal(Format("W11.3,EIC",NOVOSALDO)))+", Verificar !// //"
        MSG=MSG+"Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30)
        Mensagem(MSG)
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc    ; (Checa_Estoque)


;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()
;Checagem_Pagina1()

Moveto "FaturaI"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  EXCLUSAO_I()
EndWhile
Moveto "FaturaV"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile

Moveto "FaturaC"
Del
EndProc   ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
CHAVEI=8
ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()

Moveto "FaturaI"
SEQIT=[Item da OF]
Del

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

APLIC_ORIGEM="FATURA"
Play "FT_IMP"

EndProc   ; (Exclusao_I)

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

If IMPRIMIR_CARREGAMENTO
   Then PED_ORC_FATURAR=""
        PED_ORC_TITULO ="N§ Carregamento:"
   Else If PARAM_PEDIDO="S"
           Then PED_ORC_FATURAR=[FaturaC->Numero do Pedido   ]
                PED_ORC_TITULO ="N§ Pedido......:"
           Else PED_ORC_FATURAR=[FaturaC->Numero do Orcamento]
                PED_ORC_TITULO ="N§ Or‡amento...:"
        EndIf
EndIf

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

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

If IMPRIMIR_CARREGAMENTO
   Then Return
EndIf

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

PEDANT="***"
Scan

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

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


  CHAVEI=1
  ATUALIZA=True
  If Not Checa_Estoque()
     Then MSG=    "N£mero do Pedido: "+[Numero Pedido_Orcamento]+"    Item do Pedido: "+StrVal([Item Pedido_Orcamento])+"// //"
          MSG=MSG+"Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30)+"// //"
          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))+"// //"
          If PARAM_BAIXA_PARCIAL="S"
             Then If SALDOATUAL<=0
                     Then Del
                          ATUALIZA=False
                     Else MSG=MSG+"Faturando parcial: "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
                  Endif
             Else Del
                  Atualiza=False
          EndIf

          If Not ATUALIZA
             Then MSG=MSG+"Item n„o pode ser Faturado por Saldo Insuficiente !//"
             Else [Quantidade]=SALDOATUAL
                  If [Quantidade]>0 and [Preco Unitario]>0
                      Then [Preco Total]=Round([Quantidade]*([Preco Unitario]-[Valor Desconto Unitario]),2)
                      Else If [Preco Unitario]>0
                              Then [Preco Total]=Round([Preco Unitario]-[Valor Desconto Unitario],2)
                           EndIf
                  EndIf

                  If PARAM_COMIS_MARCA="S"
                    Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                            (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T")
                            Then If [Quantidade]>0 and [Preco Unitario]>0
                                     Then [Preco Total]=Round([Quantidade]*([Preco Unitario]),2)
                                     Else If [Preco Unitario]>0
                                             Then [Preco Total]=Round([Preco Unitario],2)
                                          EndIf
                                 EndIf
                         EndIf
                  EndIf

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

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

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

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

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

EndScan

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

EndProc   ;  (Fatura_Pedido_Orcamento)

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

;*******************************************************************************
;* ROTINA PARA CONFIRMACAO DE TESTE DE IMPRESSAO                               *
;*******************************************************************************
Proc CONFIMPRIME()
Private OPCAOC,OPCAON,NUM_FATURA,EMP_FATURA,NF_FATURADA, TIPO_SAIDA

TIPO_SAIDA=""

If PARAM_RATEIO_COMISSAO="T"
   Then Moveto "FaturaC"
        Moveto [Codigo do Representante]
        Echo Normal
        Echo Off
        APLIC_ORIGEM="FATURA"
        SEQIT=0
        Play "Ft_Comis"
EndIf

UnLockRecord
Do_It!
SaveTables

CoEditKey                            
FormKey

If (PARAM_LIMITE_CREDITO="S" Or PARAM_LIMITE_CREDITO="P") And
   [FaturaC->Tipo     ]="C" And
   [Nome Fantasia EmitDest]<>"DIVERSOS" And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0
   Then If SYS_CODIGO_CLIENTE<>"0222"
           Then If Search("VIST",[FaturaC->Descricao CondPagto])=0 
                   Then If Not Limite_Credito()
                           Then TIPO_SAIDA="NAO_FAZ"
                        EndIf
                EndIf
           Else If Not Limite_Credito()
                   Then TIPO_SAIDA="NAO_FAZ"
                EndIf
        EndIf        
EndIF   

While TIPO_SAIDA<>"NAO_FAZ"
  ModoNFe=""

  Switch
    Case REEMITIR And Not IsBlank(PARAM_DOC_NFEN) And Not IsBlank(PARAM_DOC_NFES) 
                  And Not IsBlank([Numero Nota Gerada]) And SubStr([FaturaC->Docto Nota Gerada],1,3)="NFE": 
                      
      Opcaoc="NF-e"                
                      
    OtherWise:

      Echo Normal
      Echo Off
    
      opcao1="."  dopcao1=""  ropcao1="Esc"
      opcao2="."  dopcao2=""  ropcao2="Esc"
      opcao3="."  dopcao3=""  ropcao3="Esc"
    
      If Not IsBlank(PARAM_DOC_ROM)
         Then opcao1="~R~omaneio              "  dopcao1=" Imprime Romaneio              "  ropcao1="Romaneio"
      EndIf
      If Not IsBlank(PARAM_DOC_NF)
         Then opcao2="~N~ota Fiscal/Formul rio"  dopcao2=" Imprime Nota Fiscal/Formul rio"  ropcao2="Nota Fiscal"
      EndIf
      If Not IsBlank(PARAM_DOC_NFEN) And
         Not IsBlank(PARAM_DOC_NFES)     
         Then opcao3="Nota Fiscal/~E~letr“nica"  dopcao3=" Gera Nota Fiscal Eletr“nica   "  ropcao3="NF-e"
      EndIf
      
      If Not IsBlank([Numero Nota Gerada])
         Then Switch
                Case SubStr([FaturaC->Docto Nota Gerada],1,3)="NFE" Or
                     SubStr([FaturaC->Docto Nota Gerada],1,3)="NFE":
                      opcao1="."  dopcao1=""  ropcao1="Esc"
                      opcao2="."  dopcao2=""  ropcao2="Esc"
                Case SubStr([FaturaC->Docto Nota Gerada],1,2)="RO"  :
                      opcao2="."  dopcao2=""  ropcao2="Esc"
                      opcao3="."  dopcao3=""  ropcao3="Esc"
                Case SubStr([FaturaC->Docto Nota Gerada],1,2)="NF"  :
                      opcao1="."  dopcao1=""  ropcao1="Esc"
                      opcao3="."  dopcao3=""  ropcao3="Esc"
              EndSwitch
      EndIf   
      ShowPopup " Impress„o " CENTERED
          "~S~uspende              " : " N„o Imprime no momento        " : "Suspende",
          opcao1                     : dopcao1                           : ropcao1,
          opcao2                     : dopcao2                           : ropcao2,
          opcao3                     : dopcao3                           : ropcao3 
      EndMenu To Opcaoc
      echo off
    
      If Opcaoc="Esc" Or Not Retval Or Opcaoc="Suspende"
         Then QuitLoop
      EndIf
                       
  EndSwitch
        
  ;***** Obtendo o Numero da Nota Fiscal *******
  NOTAFISC ="000000"

  Switch
    Case SubStr(Opcaoc,1,4)="NF-e":
         If SubStr(PARAM_DOC_NFEN,1,3)<>"NFE" Or
            SubStr(PARAM_DOC_DUPNFEN,1,3)<>"DPE"
            Then Mensagem("Configura‡„o inv lida NFe/Duplicata, ver parƒmetros !")
                 QuitLoop
         EndIf
         If SubStr(PARAM_DOC_NFES,1,3)<>"NFE" Or
            SubStr(PARAM_DOC_DUPNFES,1,3)<>"DPE"
            Then Mensagem("Configura‡„o inv lida NFe/Duplicata, ver parƒmetros !")
                 QuitLoop
         EndIf

         If Not Nfeautorizada("Status")
            Then QuitLoop
         Endif   

         opcaoc="NF-e em modo ["+ModoNFe+"]"

         Switch
           Case ModoNFe="SCAN"     : CODFISC  =PARAM_DOC_NFES
         														 SERIEFISC=PARAM_SER_NFES
           OtherWise               : CODFISC  =PARAM_DOC_NFEN
         														 SERIEFISC=PARAM_SER_NFEN
         EndSwitch

    Case Opcaoc="Nota Fiscal":
         If IsBlank(PARAM_RELAT_NF)
            Then Mensagem("Nota Fiscal n„o configurada, ver parƒmetros !")
                 QuitLoop
         EndIf        

         CODFISC  ="NF1"  ; PadrÆo
         SERIEFISC="M-1"

         CODFISC  =PARAM_DOC_NF
         SERIEFISC=PARAM_SER_NF

         Switch
           Case SYS_CODIGO_CLIENTE="0075" And
                ([FaturaC->Codigo da Destinacao]="020" Or
                 [FaturaC->Codigo da Destinacao]="022"):
                CODFISC  ="NF2"
                SERIEFISC="S-1"
         EndSwitch
    Case Opcaoc="Romaneio":
         If IsBlank(PARAM_RELAT_ROMA)
            Then Mensagem("Romaneio n„o configurado, ver parƒmetros !")
                 QuitLoop
         EndIf        


         CODFISC  ="ROM"  ; PadrÆo
         SERIEFISC="RO"

         CODFISC  =PARAM_DOC_ROM
         SERIEFISC=PARAM_SER_ROM

  EndSwitch

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

                            LockRecord
                            If RetVal
                               Then QuitLoop
                            EndIf
                            MSG="O usu rio "+Upper(ErrorUser())+", esta gerando:// //"
                            MSG=MSG+Opcaoc+" N§ "+NOTAFISC+" !// //"
                            MSG=MSG+"Efetuar uma nova tentativa para//"
                            MSG=MSG+"libera‡„o do pr¢ximo n£mero para "+Opcaoc+" ?"
                            ConfGeral(MSG)
                            If OK<>"S"
                               Then Moveto "FaturaC"
                                    UnLockRecord
                                    FormKey
                                    Return
                            EndIf
                          EndWhile
                          If [FaturaC->Data de Emissao]<[Data Ultima Emissao]
                             Then UnLockRecord
                                  MSG=Opcaoc+" com Data de Emiss„o inferior a data da ultima emiss„o !// //"
                                  MSG=MSG+"Verificar no controle de numera‡„o !"
                                  Mensagem(MSG)
                                  QuitLoop
                          EndIf
                     Else Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                          QuitLoop
                  EndIf
          EndIf

     Else NOTAFISC=[FaturaC->Numero Nota Gerada]
  EndIf

  If IsBlank([FaturaC->Numero Nota Gerada])
     Then Moveto "FaturaC"
          NUM_FATURA=[Numero da OF     ]
          EMP_FATURA=[Codigo da Empresa]

          Moveto [Numero Nota Gerada]
          Locate NOTAFISC
          If RetVal
             Then NF_FATURADA=False
                  While True
                    If [Codigo da Empresa]=EMP_FATURA And
                       [Docto Nota Gerada]=CODFISC    And
                       [Serie Nota Gerada]=SERIEFISC
                       Then NF_FATURADA=True
                            QuitLoop
                    EndIf   
                    Skip
                    If EOT() Then Quitloop EndIf
                    Locate Next NOTAFISC
                    If Not RetVal
                       Then QuitLoop
                    EndIf
                  EndWhile
                  If NF_FATURADA
                     Then Moveto "NumeroNF"
                          UnLockRecord

                          MSG=    "O pr¢ximo n§ "+Opcaoc+" "+NOTAFISC+" j  foi gerado pela //"
                          MSG=MSG+"Ordem de Faturamento n§ "+[FaturaC->Numero da OF]+"// //"
                          MSG=MSG+"Verificar no controle da numera‡„o se //"
                          MSG=MSG+"a ordem esta correta ou//"
                          MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                          MSG=MSG+"Emiss„o n„o permitida !"
                          Mensagem(MSG)
                          QuitLoop
                  EndIf
          EndIf


          Moveto [Numero da OF]
          Locate NUM_FATURA
          If Not RetVal
             Then Moveto "NumeroNF"
                  UnLockRecord

                  Mensagem("Erro ao localizar Ordem de Fatura: "+NUM_FATURA)
                  QuitLoop
             Else While True
                    If Not IsLockRecord()
                       Then QuitLoop
                    EndIf
                  EndWhile
          EndIf
  EndIf

  Moveto "NotaC"
  Moveto [Codigo da Empresa]
  Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
  If RetVal
     Then Moveto "FaturaC"
          If [NotaC->Situacao]<>"C"
             Then MSG=Opcaoc+" N§ "+NOTAFISC+" j  existe no Sistema !// //"
                  If IsBlank([FaturaC->Numero Nota Gerada])
                     Then Moveto "NumeroNF"
                          UnLockRecord

                          MSG=MSG+"Verificar no controle da numera‡„o se //"
                          MSG=MSG+"a ordem esta correta ou//"
                          MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                          MSG=MSG+"Emiss„o n„o permitida !"
                          Mensagem(MSG)
                          QuitLoop
                     Else If [NotaC->Numero da OF]<>[FaturaC->Numero da OF]
                             Then MSG=MSG+"E esta foi gerada pela Ordem de Fatura "+[NotaC->Numero da OF]+".//"
                                  MSG=MSG+"Verificar no controle da numera‡„o se //"
                                  MSG=MSG+"a ordem esta correta ou Ordem de Faturamento e Registro de notas.// //"
                                  MSG=MSG+"Emiss„o n„o permitida !"
                                  Mensagem(MSG)
                                  QuitLoop
                             Else MSG=MSG+"Deseja emit¡-la novamente ?"
                          EndIf
                  EndIf
                  ConfGeral(MSG)
                  If OK="N"
                     Then Moveto "NumeroNF"
                          UnLockRecord
                          QuitLoop           
                  EndIf
             Else TIPO_SAIDA = "LIBERA_NUMNF"
                  Mensagem(Opcaoc+" N§ "+NOTAFISC+" j  existe no Sistema !// // Situa‡„o [CANCELADA] !")
                  QuitLoop
          EndIf

     Else Moveto "FaturaC"
          ConfGeral("Confirma Emiss„o "+Opcaoc+" N§ "+NOTAFISC+" ?")
          If OK="N"
             Then TIPO_SAIDA = "LIBERA_NUMNF"
                  QuitLoop
          EndIf
  EndIf

  Switch
    Case Opcaoc="Romaneio":
         Echo Normal
         Echo Off
         ShowPopup " Romaneio " CENTERED
             "~I~mpressora"    : "Imprime Romaneio"    :"Impressora",
             "~L~ugar Nenhum"  : "N„o Imprime Romaneio":"Lugar Nenhum"
         EndMenu
         To Opcaon

         Echo off
         If Opcaon="Esc"
            Then TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf

         If Not RetVal Then Opcaon="Lugar Nenhum" EndIf
         If Opcaon="Impressora"
            Then NUMCOPIA=PARAM_NVIAS_ROMANEIO
                 MSGDISPOSITIVO=OpcaoC
                 DispositivoI("FAT")
                 If OK=""
                    Then TIPO_SAIDA = "LIBERA_NUMNF"
                         QuitLoop
                 EndIf
                 Play "FT_NOTA"
                 N_COPIAS=NUMCOPIA
                 Play PARAM_RELAT_ROMA
            Else Play "FT_NOTA"
         EndIf
    Case Opcaoc="Nota Fiscal": 
         If SYS_CODIGO_CLIENTE="0296" 
            Then Switch
                   Case [FaturaC->Valor Mercadoria]>0 : Mensagem("Formul rio apenas pra servi‡o!\\Existe item de mercadoria!")
                                                        TIPO_SAIDA = "LIBERA_NUMNF"
                                                        QuitLoop
                   Case [FaturaC->Valor Servico]<=0 :   Mensagem("Formul rio apenas pra servi‡o!\\Sem item de servi‡o informado!")
                                                        TIPO_SAIDA = "LIBERA_NUMNF"
                                                        QuitLoop
                 EndSwitch
         EndIf                         
                 
         MSGDISPOSITIVO=OpcaoC
         DispositivoI("FAT")
         If OK=""
            Then TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf
         Switch
             Case SYS_CODIGO_CLIENTE="0075":
                  If [FaturaC->Codigo da Destinacao]="020" Or
                     [FaturaC->Codigo da Destinacao]="022"
                     Then
                          Play "FT_NOTA"
                          Play "NF_0075"
                     Else
                          Echo Normal
                          Echo Off
                          ShowPopup " Usar formul rio " CENTERED
                           "~G~rande"   : "Imprime formul rio grande"    :"Grande",
                           "~P~equeno"  : "Imprime formul rio pequeno"   :"Pequeno",
                           "~C~ancelar" : "Cancelar impress„o"           :"Cancelar"
                          EndMenu
                          To Opcaonf75

                          Echo off
                          If Opcaonf75="Cancelar" or Opcaonf75="Esc"
                              Then TIPO_SAIDA = "LIBERA_NUMNF"
                                   QuitLoop
                          EndIf

                          Play "FT_NOTA"
                          If Opcaonf75="Grande"
                             Then Play "NF_0075B"
                             Else Play "NF_0075C"
                          EndIf

                  EndIf
             Case SYS_CODIGO_CLIENTE="0057":
                  Play "FT_NOTA"
                  If [FaturaC->Codigo da Destinacao]="036"
                     Then Play "NF_0057B"
                     Else Play "NF_0057"
                  EndIf
             OtherWise:
                  Play "FT_NOTA"
                  Play PARAM_RELAT_NF
         EndSwitch
    Case SubStr(Opcaoc,1,4)="NF-e":
  
         If SYS_CODIGO_CLIENTE="0296" 
            Then Switch
                   Case [FaturaC->Valor Mercadoria]<=0 And [FaturaC->Valor Servico]>0 : 
                        Mensagem("Essa Nota Fiscal deve conter item de mercadoria")
                        TIPO_SAIDA = "LIBERA_NUMNF"
                        QuitLoop
                 EndSwitch
         EndIf 

         If Not nfeautorizada("")
            Then GRAVA_CONTINGENCIA=True
                 If ModoNFe<>"Normal"
                    Then Play "FT_JC"
                 EndIf
                 If Not GRAVA_CONTINGENCIA
                    Then TIPO_SAIDA = "LIBERA_NUMNF"
                         QuitLoop
                 EndIf
           
                 Play "NF_NFE"
                  
            Else TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf
  EndSwitch

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

                   Echo off
                   If Opcaon="Cancelar" or Opcaon="Esc"
                       Then Quitloop
                   EndIf

                   If Opcaon="Nota Promissoria"
                     Then MSGDISPOSITIVO=OpcaoN
                          DispositivoI("NP")
                          If OK<>""
                             Then Play PARAM_RELAT_NP
                          EndIf                       
                  EndIf
          EndIf
   EndIf

   ;;******  Emissao de Carne ************
   
   Moveto "FaturaC"
   If Not IsBlank(PARAM_RELAT_CARNE) And [FaturaC->Forma de Pagamento]="CR"
      Then Echo Normal
           Echo Off                                    
           ShowPopup " Op‡”es " CENTERED
             "C~a~rnˆ"    : "Imprime Carnˆ"     :"Carne",
             "~C~ancelar" : "N„o Imprime Carnˆ" :"Cancelar"
           EndMenu
           To Opcaon

           Echo off

           If (Opcaon<>"Esc") and (Opcaon<>"Cancelar")
              Then If Opcaon="Carne"
                      Then MSGDISPOSITIVO=Opcaon
                           DispositivoI("CR")
                           If OK<>""
                              Then Play PARAM_RELAT_CARNE
                           EndIf
                   EndIf
           EndIf
   EndIf

   If SYS_CODIGO_CLIENTE="0147" Then
      Moveto "FaturaC"
      If Not IsBlank(PARAM_RELAT_CARNE) And [FaturaC->Forma de Pagamento]="BO"
         Then Echo Normal
              Echo Off
              ShowPopup " Op‡”es " CENTERED
                "~B~oleto"   : "Imprime Boleto Banc rio" :"Boleto",
                "~C~ancelar" : "N„o Imprime Boleto"      :"Cancelar"
              EndMenu
              To Opcaon

              Echo off

              If (Opcaon<>"Esc") and (Opcaon<>"Cancelar")
                 Then If Opcaon="Boleto"
                         Then MSGDISPOSITIVO=Opcaon
                              DispositivoI("BO")
                              If OK<>""
                                 Then Play PARAM_RELAT_CARNE
                              EndIf
                      EndIf
              EndIf
      EndIf
   EndIf

   QuitLoop
EndWhile

Switch
  Case TIPO_SAIDA = "LIBERA_NUMNF" : 
       If IsBlank([FaturaC->Numero Nota Gerada])
          Then Moveto "NumeroNF"
               UnLockRecord
       EndIf
EndSwitch

Moveto "FaturaC"
UnLockRecord
FormKey

SaveTables
EndProc   ; (ConfImprime)

;*******************************************************************************
;* Rotina para Impressao Geral (NF)                                            *
;*******************************************************************************
Proc nfeautorizada(Tipo)
Private nfeok, c, pos, pos2, nfeserie, s, i

PastaNfeManager  =RTrim(PARAM_CAMINHO_MANAGER)
GrupoeDoc        =RTrim(PARAM_GRUPO_EDOC)
CNPJ_Manager     =Tira_CharNum(CNPJNF_e)

Switch
  Case GrupoeDoc<>"": ;*** EDOC ***
    PastaNfeManagerMonitorar=PastaNfeManager+"Monitorar\\"+GrupoeDoc+"\\NFe\\"+CNPJ_Manager+"\\"
  OtherWise         : ;*** MANAGER ***
    PastaNfeManagerMonitorar=PastaNfeManager+"Monitorar\\"
EndSwitch

nfeok=False
While True

  If Tipo="Status" Or Tipo="Consulta" Then
    
    ;--- Carregando paramentros ----------------------------------------------------
    
    AmbienteNFe    =""
    ModoNFe        =""
    VersaoNFe      =""
    VersaoEsquema  =""
    
    Switch
      Case GrupoeDoc<>"": ;*** EDOC ***  
    
        ;--- Carregando paramentros .ini do Manger Edoc --------------------------------
        Aguarde("Verificando configura‡”es do Manager eDoc !")

        conteudodoarquivo="" 
        FileWrite        PrivDir()+"funcao.txt" From  "COP|"+PastaNfeManager+"ManagerEdoc.ini"+"|"+PrivDir()+"manager1.ini"+"\n"
        FileWrite Append PrivDir()+"funcao.txt" From  "COP|"+PastaNfeManager+"Plugins\\ManagerNFe\\"+CNPJ_Manager+".ini"+"|"+PrivDir()+"manager2.ini"+"\n"
        @ 22,00 Run NoRefresh "c:\\vise\\vexe "+PrivDir()+"funcao.txt"
      
        If Not LerConteudodoArquivo(PrivDir()+"manager1.ini") Or
           conteudodoarquivo=""
            Then MSG="Configura‡äes do Manager eDoc p/ verificar !// //"
             	  MSG=MSG+".ini do Manager eDoc, nÆo encontrado//" 
             	  MSG=MSG+"// Verifique com suporte vise !"
             		Mensagem(MSG)
             		QuitLoop
         EndIf	
        
        Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
        Pos2=SearchFrom("LoteAutomatico=",conteudodoarquivo,pos)
        LoteAutomaticoNFe=SubStr(conteudodoarquivo,pos2+15,1)

        ;--- Carregando paramentros .ini por CNPJ --------------------------------------
  
        Aguarde("Verificando configura‡”es do Manager eDoc CNPJ "+CNPJ_Manager+" !")
        conteudodoarquivo="" 
      
        If Not LerConteudodoArquivo(PrivDir()+"manager2.ini") Or
           conteudodoarquivo="" 
           Then MSG="Configura‡äes do Manager eDoc p/ verificar !// //"
            	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", nÆo encontrado//" 
             	  MSG=MSG+"// Verifique com suporte vise !"
             		Mensagem(MSG)
            		QuitLoop
        EndIf   
      
        Pos=SearchFrom("[NFE]",conteudodoarquivo,1)
        Pos2=SearchFrom("Ambiente=",conteudodoarquivo,pos)
        AmbienteNFe=SubStr(conteudodoarquivo,pos2+9,1)
        
        Pos=SearchFrom("[NFE]",conteudodoarquivo,1)
        Pos2=SearchFrom("VersaoManual=",conteudodoarquivo,pos)
        s=SubStr(conteudodoarquivo,pos2+13,3)
        If s="3.0" Then VersaoNFe="1.10"  Endif
        If s="4.0" Then VersaoNFe="2.00"  EndIf
        
        Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
        Pos2=SearchFrom("Modo=",conteudodoarquivo,pos)
        s=SubStr(conteudodoarquivo,pos2+5,1)
        If s="1" Then ModoNFe="Normal"  Endif
        If s="2" Then ModoNFe="DPEC"    EndIf
        If s="3" Then ModoNFe="SCAN"    EndIf
        If s="4" Then ModoNFe="FS"      EndIf
        If s="5" Then ModoNFe="FSDA"    EndIf
        
        Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
        Pos2=SearchFrom("VersaoEsquema=",conteudodoarquivo,pos)
        VersaoEsquema=Upper(SubStr(conteudodoarquivo,pos2+14,7))

      OtherWise : ;*** MANAGER ***

        Aguarde("Verificando configura‡”es do Manager !")
        conteudodoarquivo="" 
      
        FileWrite        PrivDir()+"funcao.txt" From  "COP|"+PastaNfeManager+"nfeconfig.ini"+"|"+PrivDir()+"manager0.ini"+"\n"
        @ 22,00 Run NoRefresh "c:\\vise\\vexe "+PrivDir()+"funcao.txt"
      
        If Not LerConteudodoArquivo(PrivDir()+"manager0.ini") Or
           conteudodoarquivo="" 
           Then MSG="Instala‡„o do Manager n„o encontrado !// //"
        	      MSG=MSG+"Pasta: "+PastaNfeManager+"//" 
        	      MSG=MSG+"// Verifique com suporte vise !"
        				Mensagem(MSG)
            		QuitLoop
        EndIf   
      
        Pos=SearchFrom("CNPJ=",conteudodoarquivo,1)
        CNPJ_Manager=SubStr(conteudodoarquivo,pos+5,14)

        Pos=SearchFrom("[NFE]",conteudodoarquivo,1)
        Pos2=SearchFrom("Ambiente=",conteudodoarquivo,pos)
        AmbienteNFe=SubStr(conteudodoarquivo,pos2+9,1)
        
        Pos=SearchFrom("[MANAGER]",conteudodoarquivo,1)
        Pos2=SearchFrom("LoteAutomatico=",conteudodoarquivo,pos)
        LoteAutomaticoNFe=SubStr(conteudodoarquivo,pos2+15,1)

        Pos=SearchFrom("[MANAGER]",conteudodoarquivo,1)
        Pos2=SearchFrom("Modo=",conteudodoarquivo,pos)
        s=SubStr(conteudodoarquivo,pos2+5,1)
        If s="1" Then ModoNFe="Normal"  Endif
        If s="2" Then ModoNFe="DPEC"    EndIf
        If s="3" Then ModoNFe="SCAN"    EndIf
        If s="4" Then ModoNFe="FS"      EndIf
        If s="5" Then ModoNFe="FSDA"    EndIf
        
        Pos=SearchFrom("[MANAGER]",conteudodoarquivo,1)
        Pos2=SearchFrom("VersaoManual=",conteudodoarquivo,pos)
        s=SubStr(conteudodoarquivo,pos2+13,3)
        If s="3.0" Then VersaoNFe="1.10"  Endif
        If s="4.0" Then VersaoNFe="2.00"  EndIf
        
        Pos=SearchFrom("[MANAGER]",conteudodoarquivo,1)
        Pos2=SearchFrom("VersaoEsquema=",conteudodoarquivo,pos)
        VersaoEsquema=Upper(SubStr(conteudodoarquivo,pos2+14,7))

        If CNPJ_Manager<>CNPJNF_e
           Then MSG="Configura‡äes do Manager p/ verificar !// //"
            	  MSG=MSG+"CNPJ "+CNPJNF_e+" da Empresa emitente, nÆo confere//" 
            	  MSG=MSG+"com o CNPJ "+CNPJ_Manager+" do Manager.//"
            	  MSG=MSG+"// Verifique com suporte vise !"
            		Mensagem(MSG)
            		QuitLoop
        EndIf   

    EndSwitch 

    release vars conteudodoarquivo

    If (VersaoNFe="2.00" And VersaoEsquema<>"PL_006J")   And
       AmbienteNFe="1"
       Then MSG="Configura‡äes do Manager/eDoc p/ ajustar !// //"
        	  MSG=MSG+"VersÆo Manual = 4.0 a VersÆo de Esquema = pl_006J//" 
        	  MSG=MSG+"// Corrigir ou Verifique com suporte vise !"
        		Mensagem(MSG)
            QuitLoop
    EndIf

    If ModoNFe="FS" 
       Then MSG="Configura‡äes do Manager p/ ajustar !// //"
        	  MSG=MSG+"Modo FS nÆo usar, escolha FSDA//" 
        	  MSG=MSG+"// Corrigir ou Verifique com suporte vise !"
        		Mensagem(MSG)
            QuitLoop
    EndIf



      
    ;--- Verificando se Manager/eDoc ativo -----------------------------------------
    Switch
      Case GrupoeDoc<>"": ;*** EDOC ***
        Aguarde("Verificando se Manager eDoc esta ativo, aguarde at‚ 30 segundos !")
      OtherWise         : ;*** MANAGER ***
        Aguarde("Verificando se Manager esta ativo, aguarde at‚ 30 segundos !")
    EndSwitch

    ArqNFE_Consulta  =PastaNfeManagerMonitorar+"Consulta\\Status.txt"
    ArqNFE_ConsultaR =PastaNfeManagerMonitorar+"Consulta\\Retorno\\Status.txt"

    FileWrite        PrivDir()+"managsta.txt" From "Campos=codnf\n"+"filtro=codnf=0\n"

    FileWrite        PrivDir()+"funcao.txt" From "DELT|"+ArqNFe_ConsultaR+"\n"
    FileWrite Append PrivDir()+"funcao.txt" From  "COP|"+PrivDir()+"managsta.txt"+"|"+ArqNFe_Consulta+"\n"
    @ 22,00 Run NoRefresh "c:\\vise\\vexe "+PrivDir()+"funcao.txt"
  
    If ExisteArquivo(ArqNFe_ConsultaR,30)
       Then nfeok=True
    EndIf   
  
    If Not nfeok 
       Then Mensagem("Manager/eDoc da Empresa ["+NOMENF_e+"],// n„o esta carregado/ocupado/inativo !// // Verifique o manager ou tente novamente !")
            If Tipo="Status"
               Then nfeok=False
               Else nfeok=True
            EndIf    
  
    EndIf
    If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf
  
  EndIf
  If Tipo="Status"
     Then QuitLoop
  EndIf   

  ;--- Verificando situa‡Æo da NFe -----------------------------------------------

  nfeok=False

  If Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>""
     Then If [FaturaC->Sistema Gerador]="n!" Or
             [FaturaC->Sistema Gerador]="s!" Or
             [FaturaC->Sistema Gerador]="d!" Or
             [FaturaC->Sistema Gerador]="f!"
             Then Mensagem("NF-e "+NOTAFISC+" j„ foi enviada e autorizada no SEFAZ !")
                  nfeok=true
                  QuitLoop
          EndIf        
  EndIf        

  ArqNFE           ="nf"+StrVal(NOTAFISC)+".TX2"
  ArqNFE_Consulta  =PastaNfeManagerMonitorar+"Consulta\\"+ArqNFe
  ArqNFE_ConsultaR =PastaNfeManagerMonitorar+"Consulta\\Retorno\\"+ArqNFe
  ArqNFE_Envia     =PastaNfeManagerMonitorar+"Envia\\"+ArqNFe

  Switch
    Case GrupoeDoc<>"": ;*** EDOC ***
      Aguarde("Consultando a NF-E "+NOTAFISC+" no Manager eDoc, aguarde at‚ 30 segundos !")
    OtherWise         : ;*** MANAGER ***
      Aguarde("Consultando a NF-E "+NOTAFISC+" no Manager, aguarde at‚ 30 segundos !")
  EndSwitch

  s=""
  nfeserie=SERIEFISC
  FileWrite PrivDir()+"managcon.txt" From "Campos=numero,serie,situacao\n"+
                                          "filtro=serie='"+nfeserie+"' AND "+
                                          "numero="+StrVal(NumVal(NOTAFISC))+"\n"

  FileWrite        PrivDir()+"funcao.txt" From "DELT|"+ARQNFE_ConsultaR+"\n"
  FileWrite Append PrivDir()+"funcao.txt" From "COP|" +PrivDir()+"managcon.txt"+"|"+ArqNFE_Consulta+"\n"
  FileWrite Append PrivDir()+"funcao.txt" From "DELT|"+PrivDir()+"managcon.txt"+"\n"
  @ 22,00 Run NoRefresh "c:\\vise\\vexe "+PrivDir()+"funcao.txt"

  If ExisteArquivo(ArqNFE_ConsultaR,30)
     Then 
          FileWrite        PrivDir()+"funcao.txt" From "COP|" +ArqNFE_ConsultaR+"|"+PrivDir()+"managcon.txt"+"\n"
          @ 22,00 Run NoRefresh "c:\\vise\\vexe "+PrivDir()+"funcao.txt"
          
          If ExisteArquivo(PrivDir()+"managcon.txt",30)
             Then s="1"
          EndIf
  EndIf   
  If s=""
     Then Mensagem("Manager/eDoc da Empresa ["+NOMENF_e+"],// n„o esta carregado/ocupado/inativo !// // Verifique o manager ou tente novamente !")
          nfeok=true
     Else FileRead PrivDir()+"managcon.txt" to conteudodoarquivo
    
          Switch
            Case Search("AUTORIZADA",conteudodoarquivo)>0 And IsBlank([Numero Nota Gerada]) And NOTAFISC<>"": 
                 MSG=    "NF-e "+NOTAFISC+" J  foi confirmada sua autoriza‡„o no SEFAZ !// //"
                 MSG=MSG+"Consulta a NF-e no Manager/eDoc !//"
                 MSG=MSG+"Verifique o controle de numera‡„o da nota se esta correta !"
                 Mensagem(MSG)
                 nfeok=true
            Case Search("AUTORIZADA",conteudodoarquivo)>0:
                 Mensagem("NF-e "+NOTAFISC+" foi confirmada sua autoriza‡„o no SEFAZ !")
                 nfeok=true
            Case Search("CANCELADA",conteudodoarquivo)>0:
                 Mensagem("NF-e "+NOTAFISC+" J  foi cancelada no SEFAZ !// //Confirme cancelamento no Sistema !")
                 nfeok=true
            Case (Search("ENVIADA",conteudodoarquivo)>0 Or Search("REGISTRADA",conteudodoarquivo)>0) And [FaturaC->Sistema Gerador]="d":
                 Mensagem("NF-e "+NOTAFISC+" DPEC j  foi registrada como enviada pelo Manager !//"+
                          "Confirme sua autoriza‡Æo alterando o Manager para modo NORMAL !")
                 nfeok=true
            Case (Search("ENVIADA",conteudodoarquivo)>0 Or Search("REGISTRADA",conteudodoarquivo)>0) And [FaturaC->Sistema Gerador]="f":
                 Mensagem("NF-e "+NOTAFISC+" FSDA j  foi registrada como enviada pelo Manager !//"+
                          "Confirme sua autoriza‡Æo alterando o Manager para modo NORMAL !")
                 nfeok=true
           EndSwitch

           Switch
             Case IsBlank([Numero Nota Gerada]) And NOTAFISC<>"":
    
               If not nfeok and Search(",",conteudodoarquivo)>0
                  Then MSG=    "NF-e "+SubStr(conteudodoarquivo,1,Len(conteudodoarquivo)-1)+"!// // Consulte a situa‡„o da NF-e no Manager/eDoc !// //"
                       MSG=MSG+"Deseja reenviar esta NF-e ?"
                       If ConfGeral(MSG)
                          Then nfeok=False
                          Else nfeok=true
                       Endif   
               EndIf   
    
             Case Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>"":
    
                   If nfeok And (Search("AUTORIZADA",conteudodoarquivo)>0 Or Search("CANCELADA",conteudodoarquivo)>0)
                      Then
                           Switch
                             Case [FaturaC->Sistema Gerador]="n" : [FaturaC->Sistema Gerador]="n!" 
                             Case [FaturaC->Sistema Gerador]="s" : [FaturaC->Sistema Gerador]="s!" 
                             Case [FaturaC->Sistema Gerador]="d" : [FaturaC->Sistema Gerador]="d!" 
                             Case [FaturaC->Sistema Gerador]="f" : [FaturaC->Sistema Gerador]="f!" 
                           EndSwitch
                           UnLockRecord

                            If IsFormView()
                               Then FormKey
                            EndIf   
          
                            Moveto "NotaC"
                            Moveto [Codigo da Empresa]
                            Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
                            If RetVal
                               Then [Sistema Gerador]=[FaturaC->Sistema Gerador]
                                    UnLockRecord
                            EndIf
                    
                            Moveto "FaturaC"
                            If Not IsFormView()
                               Then FormKey
                            EndIf   

                   EndIf
                      
                   If not nfeok and Search(",",conteudodoarquivo)>0
                      Then Mensagem("NF-e "+SubStr(conteudodoarquivo,1,Len(conteudodoarquivo)-1)+"!// // Consulte a situa‡„o da NF-e no Manager/eDoc !// //")
                   EndIf   
    
           EndSwitch
  EndIf

  If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf

  QuitLoop  
EndWhile

If AmbienteNFe="2"
   Then Mensagem("Utilizando NF-e em ambiente de [ HOMOLOGA€ŽO ] !")
EndIf   

LimpAguarde()
Return nfeok
Endproc

;*******************************************************************************
;* Rotina para Impressao Geral (NF)                                            *
;*******************************************************************************
Proc IMPRIGERAL()
Private OPCAOC,OPCAON,NUM_FATURA,EMP_FATURA,NF_FATURADA,FaturaOK, Cont_nof

cont_nof=0
IMPRIME_GERAL_INICIO=True

ModoNFe=""

Scan For IsBlank([Numero Nota Gerada])

 PegaPosForm()

 If IMPRIMIR_CARREGAMENTO
    Then If [Numero_Carregamento]<>PED_ORC_FATURAR
            Then Loop
         EndIf
 EndIf

 If Not Carrega_Parametros()
    Then Loop
 EndIf

 ORDFAT=[Numero da OF]
 cont_nof=cont_nof+1
 UnLockRecord
 Do_It!
 SaveTables

 CoEditKey
 FormKey

 If Not IMPRIME_GERAL_INICIO
    Then If PARAM_FATURA_IGUAL_OF="S"
            Then NOTAFISC=[FaturaC->Numero da OF]
            Else Moveto "NumeroNf"
                 While True
                   NOTAFISC = [Proximo Numero]
                   NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")

                   LockRecord
                   If RetVal
                      Then QuitLoop
                   EndIf
                   MSG="O usu rio "+Upper(ErrorUser())+", esta gerando:// //"
                   MSG=MSG+Opcaoc+" N§ "+NOTAFISC+" !// //"
                   MSG=MSG+"Efetuar uma nova tentativa para//"
                   MSG=MSG+"libera‡„o do pr¢ximo n£mero para "+Opcaoc+" ?"
                   ConfGeral(MSG)
                   If OK<>"S"
                      Then QuitLoop
                   EndIf
                 EndWhile
         EndIF
    Else Echo Normal
         Echo Off

         While True
           FaturaOk=True

           If PARAM_DOC_NF="NFE0" Or
              PARAM_DOC_NF="NFE1"
              Then
                   If PARAM_DOC_NF="NFE0" Or
                      PARAM_DOC_NF="NFE1"
                      Then
                           If Not Nfeautorizada("Status")
                              Then FaturaOk=False
                                   QuitLoop
                  
                           Endif   
                   EndIf
                    
                   titnfe="~N~ota Fiscal - "+ModoNFe
         
                   Echo Normal
                   Echo Off
                   ShowPopup " Gera‡„o NF-e " CENTERED
                     "~S~uspende"    : " N„o gera no momento         ":"Suspende",
                     titnfe          : " Gera Nota Fiscal eletronica em modo "+ModoNFe :"NF-e"
                   EndMenu To Opcaoc

              Else
                   If Not IsBlank(PARAM_RELAT_ROMA) And Not IsBlank(PARAM_RELAT_NF)
                      Then Echo Normal
                           Echo Off
                           ShowPopup " Impress„o " CENTERED
                               "~R~omaneio"    : " Imprime apartir da OF N§ "+[Numero da OF]:"Romaneio",
                               "~N~ota Fiscal" : " Imprime apartir da OF N§ "+[Numero da OF]:"Nota Fiscal",
                               "~C~ancela"     : " Cancelar Impress„o"                      :"Cancelar"
                           EndMenu
                           To Opcaoc
                      Else If Not IsBlank(PARAM_RELAT_ROMA)
                              Then Echo Normal
                                   Echo Off
                                   ShowPopup " Impress„o" CENTERED
                                     "~R~omaneio"    : " Imprime apartir da OF N§ "+[Numero da OF]:"Romaneio",
                                          "~C~ancela"     : " Cancelar Impress„o"                      :"Cancelar"
                                     EndMenu
                                     To Opcaoc
                              Else Echo Normal
                                   Echo Off
                                   ShowPopup " Impress„o" CENTERED
                                       "~N~ota Fiscal" : " Imprime apartir da OF N§ "+[Numero da OF]:"Nota Fiscal",
                                       "~C~ancela"     : " Cancelar Impress„o"                      :"Cancelar"
                                    EndMenu
                                    To Opcaoc
                           EndIf
                   EndIf
           EndIf

           echo off

           If Not Retval or Opcaoc="Esc" or Opcaoc="Cancelar"
              Then Opcaoc="Cancelar"
              Else If Not Datas_of()
                      Then Opcaoc="Cancelar"
                   EndIf
           EndIf

           If Opcaoc="Cancelar"
              Then FaturaOk=False
                   QuitLoop
           EndIf

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

          Switch
            Case Opcaoc="NF-e":
                 CODFISC  ="NFE1"  ; PadrÆo
                 SERIEFISC="1"
        
                ; CODFISC  =PARAM_DOC_NF
                ; SERIEFISC=PARAM_SER_NF
                 Switch
                   Case ModoNFe="SCAN"     : CODFISC  ="NFE9"  SERIEFISC="900"
                   OtherWise               : CODFISC  ="NFE1"  SERIEFISC="1" 
                 EndSwitch
            Case Opcaoc="Nota Fiscal":
                 CODFISC  ="NF1"  ; PadrÆo
                 SERIEFISC="M-1"

                 CODFISC  =PARAM_DOC_NF
                 SERIEFISC=PARAM_SER_NF

                 Switch
                   Case SYS_CODIGO_CLIENTE="0075" And
                        ([FaturaC->Codigo da Destinacao]="020" Or
                         [FaturaC->Codigo da Destinacao]="022"):
                        CODFISC  ="NF2"
                        SERIEFISC="S-1"
                 EndSwitch
            Case Opcaoc="Romaneio":
                 CODFISC  ="ROM"  ; PadrÆo
                 SERIEFISC="RO"
        
                 CODFISC  =PARAM_DOC_ROM
                 SERIEFISC=PARAM_SER_ROM
        
          EndSwitch

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

                            LockRecord
                            If RetVal
                               Then QuitLoop
                            EndIf
                            MSG="O usu rio "+Upper(ErrorUser())+", esta gerando:// //"
                            MSG=MSG+Opcaoc+" N§ "+NOTAFISC+" !// //"
                            MSG=MSG+"Efetuar uma nova tentativa para//"
                            MSG=MSG+"libera‡„o do pr¢ximo n£mero para "+Opcaoc+" ?"
                            ConfGeral(MSG)
                            If OK<>"S"
                               Then FaturaOk=False
                                    QuitLoop
                            EndIf
                          EndWhile
                          If VSDGDTEMI<[Data Ultima Emissao]
                             Then MSG=Opcaoc+" com Data de Emiss„o inferior a data da ultima emiss„o !// //"
                                  MSG=MSG+"Verificar no controle de numera‡„o !"
                                  Mensagem(MSG)
                                  FaturaOk=False
                                  QuitLoop
                          EndIf
                     Else Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                          FaturaOk=False
                          QuitLoop
                  EndIf
           EndIf

           Moveto "FaturaC"
           NUM_FATURA=[Numero da OF     ]
           EMP_FATURA=[Codigo da Empresa]

           Moveto [Numero Nota Gerada]
           Locate NOTAFISC
           If RetVal
              Then NF_FATURADA=False
                   While True
                     If [Codigo da Empresa]=EMP_FATURA
                        Then
                             Switch
                               Case SubStr([FaturaC->Sistema Gerador],1,1)="n" And ModoNfe="Normal": NF_FATURADA=True
                               Case SubStr([FaturaC->Sistema Gerador],1,1)="s" And ModoNfe="SCAN"  : NF_FATURADA=True
                               OtherWise                                                           : NF_FATURADA=True  
                             EndSwitch
                             
                             If NF_FATURADA
                                Then QuitLoop
                             EndIf   
                     EndIf   
                     Skip
                     If EOT() Then Quitloop EndIf
                     Locate Next NOTAFISC
                     If Not RetVal
                        Then QuitLoop
                     EndIf
                   EndWhile
                   If NF_FATURADA
                      Then MSG=    "O pr¢ximo n§ "+Opcaoc+" "+NOTAFISC+" J  foi gerado pela //"
                           MSG=MSG+"Ordem de Faturamento n§ "+[FaturaC->Numero da OF]+"// //"
                           MSG=MSG+"Verificar no controle da numera‡„o se //"
                           MSG=MSG+"a ordem esta correta ou//"
                           MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                           MSG=MSG+"Emiss„o n„o permitida !"
                           Mensagem(MSG)
                           FaturaOk=False
                           QuitLoop
                   EndIf
           EndIf

           Moveto [Numero da OF]
           Locate NUM_FATURA
           If Not RetVal
              Then Mensagem("Erro ao localizar Ordem de Fatura: "+NUM_FATURA)
                   FaturaOk=False
                   QuitLoop
              Else While True
                     If Not IsLockRecord()
                        Then QuitLoop
                     EndIf
                   EndWhile
           EndIf


           Moveto "NotaC"
           Moveto [Codigo da Empresa]
           Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
           If RetVal
              Then Moveto "FaturaC"
                   If [NotaC->Situacao]<>"C"
                      Then MSG=Opcaoc+" N§ "+NOTAFISC+" J  existe no Sistema !// //"
                           If IsBlank([FaturaC->Numero Nota Gerada])
                              Then MSG=MSG+"Verificar no controle da numera‡„o se //"
                                   MSG=MSG+"a ordem esta correta ou//"
                                   MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                                   MSG=MSG+"Emiss„o n„o permitida !"
                              Else If [NotaC->Numero da OF]<>[FaturaC->Numero da OF]
                                      Then MSG=MSG+"E esta foi gerada pela Ordem de Fatura "+[NotaC->Numero da OF]+".//"
                                           MSG=MSG+"Verificar no controle da numera‡„o se //"
                                           MSG=MSG+"a ordem esta correta ou Ordem de Faturamento e Registro de notas.// //"
                                           MSG=MSG+"Emiss„o n„o permitida !"
                                      Else MSG=MSG+"Emiss„o n„o permitida ! // Verificar !"
                                   EndIf
                           EndIf
                           Mensagem(MSG)
                           FaturaOk=False
                           QuitLoop
                      Else Mensagem(Opcaoc+" N§ "+NOTAFISC+" J  existe no Sistema !// // Situa‡„o [CANCELADA] !")
                           FaturaOk=False
                           QuitLoop
                   EndIf
              Else Moveto "FaturaC"
                   ConfGeral("Confirma a primeira Emiss„o "+Opcaoc+" N§ "+NOTAFISC+" ?")
                   If OK="N"
                      Then FaturaOk=False
                           QuitLoop
                   EndIf
           EndIf

           If Not FaturaOk
              Then Moveto "NumeroNF"
                   UnLockRecord

                   Moveto "FaturaC"
                   UnLockRecord
                   FormKey
                   Return
           EndIf

           Switch
             Case Opcaoc="Romaneio":
                  Echo Normal
                  Echo Off
                  ShowPopup " Romaneio " CENTERED
                      "~I~mpressora"    : "Imprime Romaneio"    :"Impressora",
                      "~L~ugar Nenhum"  : "N„o Imprime Romaneio":"Lugar Nenhum"
                  EndMenu
                  To Opcaon

                  Echo off
                  If Opcaon="Esc"
                     Then FaturaOk=False
                          QuitLoop
                  EndIf

                  If Not RetVal Then Opcaon="Lugar Nenhum" EndIf
                  If Opcaon="Impressora"
                     Then NUMCOPIA=PARAM_NVIAS_ROMANEIO
                          MSGDISPOSITIVO=OpcaoC
                          DispositivoI("FAT")
                          If OK=""
                             Then Faturaok=False
                                  QuitLoop
                          EndIf
                          N_COPIAS=NUMCOPIA
                  EndIf
             Case Opcaoc="Nota Fiscal":
                  DispositivoI("FAT")
                  If OK=""
                     Then Faturaok=False
                          QuitLoop
                  EndIf
           EndSwitch

           If Opcaoc<>"NF-e" Then
           
               ;;******  Emissao Nota Promissoria  *************
               Moveto "FaturaC"
               If Not IsBlank(PARAM_RELAT_NP)
                  Then Echo Normal
                       Echo Off
                       ShowPopup " Op‡”es " CENTERED
                        "Nota ~P~romissoria" : "Imprime Nota Promissoria"    :"Nota Promissoria",
                        "~C~ancelar"         : "N„o Imprime Nota Promissoria":"Cancelar"
                       EndMenu
                       To Opcaonp
    
                       Echo off
                       Switch
                         Case Opcaonp="Cancelar" or Opcaonp="Esc":
                              FaturaOk=False
                         Case Opcaonp="Nota Promissoria":
                              MSGDISPOSITIVO=OpcaoNP
                              DispositivoI("NP")
                              If OK=""
                                 Then FaturaOk=False
                              EndIf
                       EndSwitch
                 EndIf
    
           EndIf
           
           QuitLoop
         EndWhile
         IMPRIME_GERAL_INICIO=False
 EndIf

 Moveto "FaturaC"
 NOVO_PEDIDO    =False
 NOVA_DESTINACAO=False

 If Not FaturaOk  OR
    Not  Checagem_Pagina1() 
    Then Moveto "NumeroNF"
         UnLockRecord

         Moveto "FaturaC"
         UnLockRecord

         FormKey
         Return
 EndIf

 Aguarde("Ordem "+StrVal(cont_nof)+", OF "+ORDFAT+" gerando NF "+NOTAFISC)

 Moveto "FaturaC"
 [Data de Emissao]=VSDGDTEMI
 [Data de Saida  ]=VSDGDTSAI
 [Hora de Saida  ]=VSDGHRSAI

 tpform="UnLinked"
 Numero_Cartao=""
 Nome_Cartao  =""
 Calc_Venctos()

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

 DP_GERA_DUPLICATA="N"
 Moveto [Codigo da Destinacao]
 If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"")
    Then DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
 EndIf

 Switch
   Case Opcaoc="Romaneio":
        If Opcaon="Impressora"
           Then Play "FT_NOTA"
                Play PARAM_RELAT_ROMA
           Else Play "FT_NOTA"
        EndIf
   Case Opcaoc="Nota Fiscal":
        Play "FT_NOTA"
        Switch
            Case SYS_CODIGO_CLIENTE="0075":
                 If [FaturaC->Codigo da Destinacao]="020" Or
                    [FaturaC->Codigo da Destinacao]="022"
                    Then Play "NF_0075"
                    Else Play "NF_0075B"
                 EndIf
            Case SYS_CODIGO_CLIENTE="0057":
                 If [FaturaC->Codigo da Destinacao]="036"
                    Then Play "NF_0057B"
                    Else Play "NF_0057"
                 EndIf
            OtherWise: Play PARAM_RELAT_NF
        EndSwitch
    Case Opcaoc="NF-e":
         If Not nfeautorizada("")
            Then Play "NF_NFE"
                 Play "FT_NOTA"
         EndIf        
 EndSwitch

 ;;******  Emissao Nota Promissoria  *************
 Moveto "FaturaC"
 If Opcaoc<>"NF-e" Then
    
    If Not IsBlank(PARAM_RELAT_NP)
       Then If [FaturaC->Forma de Pagamento]="NP" Or
               (SYS_CODIGO_CLIENTE="0117" And
                ([FaturaC->Forma de Pagamento]="DN" Or
                 [FaturaC->Forma de Pagamento]="CH" Or
                 [FaturaC->Forma de Pagamento]="CP"))
                Then Play PARAM_RELAT_NP
            EndIf
    EndIf
    
 EndIf

 Moveto "FaturaC"
 UnLockRecord
 FormKey

 Echo Normal
 SetaPosForm()
 Echo Off

EndScan

Moveto "FaturaC"

If IMPRIME_GERAL_INICIO
   Then Mensagem("N„o existem O.F.'s a imprimir !")
   Else SaveTables
        LimpAguarde()
        Mensagem("Fim do processo !")
EndIf
EndProc    ;  (ImpriGeral)

;*******************************************************************************
;* Cria Registro de Nota Fiscal (cabeca e item)                                *
;*******************************************************************************
Proc Datas_Of()

INICIO_DIALOG=True
OP_SHOWD="DatasOF"

VSDGDTEMI=TodaY()
VSDGDTSAI=TodaY()
VSDGHRSAI=Time()

ShowDialog "Confirme Data/Hora p/ Fatura !" proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
  Key "ENTER","ESC","TAB"
   @ 09,15 height 04 width 50

  Label  @ 00,00 "Data de Emiss„o" For "TGI_DTEMI"
  Accept @ 01,02 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TGI_DTEMI" To VSDGDTEMI

  Label  @ 00,17 "Data de Saida" For "TGI_DTSAI"
  Accept @ 01,18 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TGI_DTSAI" To VSDGDTSAI

  Label  @ 00,32 "Hora de Saida" For "TGI_HRSAI"
  Accept @ 01,36 Width 08 "A5"  Picture "##:##" Tag "TGI_HRSAI" To VSDGHRSAI

Enddialog
If Not RetVal
   Then Return False
   Else If IsBlank(VSDGDTEMI)
           Then Mensagem("Data de Emiss„o Inv lida !")
                Return False
           Else Return True
        EndIf
EndIf

EndProc

;*******************************************************************************
;* Ordem de Compra P£blica                                                     *
;*******************************************************************************
Proc Ordem_Compra_Publica()
Private TabAnt

TabAnt=Table()

INICIO_DIALOG=True
OP_SHOWD="OCP"

UnLockRecord
FormKey
SaveTables

Moveto "FaturOCP"
Moveto [Numero da OF]
Locate ORDFAT
If RetVal 
   Then VSDGOCPEMPENHO  = [Nota de Empenho]
        VSDGOCPPEDIDO   = [Pedido         ]  
        VSDGOCPCONTRATO = [Contrato       ]
   Else VSDGOCPEMPENHO  = ""
        VSDGOCPPEDIDO   = ""
        VSDGOCPCONTRATO = ""
EndIf

Echo Normal
Echo Off

ShowDialog "Ordem de Compra P£blica" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
   Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
   @ 06,08 height 9 width 64

   Label  @ 00,00 "Nota de Empenho" for "TG_OCPEMPENHO"
   Accept @ 01,01  Width 25 "A22" picture "!*!" Tag "TG_OCPEMPENHO" to VSDGOCPEMPENHO

   Label  @ 02,00 "Pedido" for "TG_OCPPEDIDO"
   Accept @ 03,01  Width 60 "A60" picture "!*!" Tag "TG_OCPPEDIDO" to VSDGOCPPEDIDO

   Label  @ 04,00 "Contrato" for "TG_OCPCONTRATO"
   Accept @ 05,01  Width 60 "A60" picture "!*!" Tag "TG_OCPCONTRATO" to VSDGOCPCONTRATO

Enddialog                     
Mouse Show 

If VSDGOCPEMPENHO<>"" Or VSDGOCPPEDIDO<>""  Or VSDGOCPCONTRATO<>""
   Then Moveto "FaturOCP"
        Moveto [Numero da OF]
        Locate ORDFAT
        If RetVal 
           Then Del
        EndIf   
        End Down
        [Numero da OF   ]= ORDFAT 
        [Nota de Empenho]= VSDGOCPEMPENHO
        [Pedido         ]= VSDGOCPPEDIDO 
        [Contrato       ]= VSDGOCPCONTRATO
        
        SaveTables
EndIf

UnLockRecord
Moveto TabAnt
FormKey

EndProc    ;  Ordem_Compra_Publica()

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc LIMPA_OFS()

CONFGERAL("Confirma limpeza da NF Gerada para este Carregamento ?")
If OK<>"S"
   Then Return
EndIf

Scan For [Numero_Carregamento]=PED_ORC_FATURAR
  [Numero Nota Gerada]=""
  [Docto Nota Gerada ]=""
  [Serie Nota Gerada ]=""
EndScan


EndProc

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

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

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

UnLockRecord
KeyPress "F7"
IsLockRecord()

ParamF=False
Moveto "P_Fatura"
Moveto [Codigo_Empresa]
Locate [FaturaC->Codigo da Empresa]
If RetVal
   Then ParamF=True
   
        PARAM_EMPRESA                  =[Codigo_Empresa           ]
        PARAM_DESTINACAO               =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA              =[Codigo_Conta_Caixa       ]
        PARAM_DATAS_VENCTOS            =[Datas_Vencimentos        ]
        PARAM_COR_TECIDO               =[Cor_Tecido               ]
        PARAM_TAMANHO                  =[Tamanho                  ]
        PARAM_DESCUNIT                 =[Desconto Unitario        ]
        PARAM_VOLUMES                  =[Volumes                  ]
        PARAM_SUBSTICMS                =[Substituicao ICMS        ]
        PARAM_PEDIDO                   =[Utiliza_Pedido           ]
        PARAM_ORCAMENTO                =[Utiliza_Orcamento        ]
        PARAM_ORDEM_SERVICO            =[Utiliza_OS               ]
        PARAM_BLOQUEIA_NEG             =[Bloqueia_Estoque_Negativo]
        PARAM_MULT_BCICMS              =[Multiplas_BC_ICMS        ]
        PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
        PARAM_IMPOSTOS                 =[Impostos                 ]
        PARAM_TABELA_PRECO             =[Tabela_Preco             ]
        PARAM_TRANSPORTADORA           =[Codigo_Transportadora    ]
        PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto       ]
        PARAM_TRANSFERENCIA            =[Utiliza_Transferencia    ]
        PARAM_CONSIGNACAO              ="N"
        PARAM_CHEQUES                  =[Utiliza_Controle_Cheques ]
        PARAM_RELAT_NF                 =[Script_Impressao_NF      ]
        PARAM_RELAT_ROMA               =[Script_Impressao_Romaneio]
        PARAM_RELAT_NP                 =[Script_Impressao_NP      ]
        PARAM_RELAT_CARNE              =[Script_Carne             ]
        PARAM_CONTROLA_NITENS          =[Controla_Numero_Itens    ]
        PARAM_NITENS                   =[Numero_Itens             ] 
        PARAM_TAMANHO_DESCR            =[Tamanho_Descricao_Item   ]
        PARAM_NLINHAS_OBS              =[NLinhas_Obs_Campo_Itens  ]
        PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
        PARAM_NVIAS_ROMANEIO           =[NVias_Romaneio           ]
        PARAM_LIMITE_CREDITO           =[Utiliza_Limite_Credito   ]
        PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
        PARAM_DIAS_ATRASO              =[Utiliza_Dias_Atraso      ]
        PARAM_CUPOM_FISCAL             =[Utiliza_Cupom_Fiscal     ]
        PARAM_UTILIZACDBARRA           =[Utiliza_Codigo_Barras    ]
        PARAM_AVISTAAUTOMAT            =[Gera_VendasVista_Automat ]
        PARAM_APRAZOAUTOMAT            =[Gera_VendasPrazo_Automat ]
        PARAM_AVISTADUPLIC             =[Gera_Duplicatas_AVista   ]
        PARAM_TXJUROS                  =[Duplicata_TxJuros        ]
        PARAM_FORMA_TXJUROS            =[Duplicata_Forma_TxJuros  ]
        PARAM_DUPLIC_NUMERO            =[Gera_Duplicatas_Numero   ]
        PARAM_COMIS_ITEM               =[Comissao_Item            ]
        PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]
        PARAM_CPGTO_ITEM               =[Utiliza_Cond_Pagto_Item  ]
        PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
        PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
        PARAM_DATA_BASE                =[Informa_Data_CalcVenctos ]
        PARAM_VISITA                   =[Utiliza_Visita           ]
        PARAM_BLOQUEIA_AUTORI          =[Bloqueia_Autorizados     ]
        PARAM_EXIBECUSTO               =[Exibe_Custo_Item_Consulta]
        PARAM_BLOQUEIA_CANCEL          =[Bloqueia Cancelamento    ]
        PARAM_BLOQUEIA_REEMISSAO       =[Bloqueia_Reemissao_NF    ]
        PARAM_BLOQUEIA_ALTERA          =[Bloqueia_Alteracao_NF    ]
        
        If SYS_CODIGO_CLIENTE="0052" Or
           SYS_CODIGO_CLIENTE="0240" 
           Then PARAM_BLOQPED_NEG="N"
           Else PARAM_BLOQPED_NEG="S"
        EndIf
        
        If SYS_CODIGO_CLIENTE="0102" Or
           SYS_CODIGO_CLIENTE="0114"
           Then PARAM_CALC_COMIS_ITEM="S"
           Else PARAM_CALC_COMIS_ITEM="N"
        EndIf
        
        PARAM_UTILIZA_COMISSAO_VENDEDOR=[Utiliza_Comissao_Vendedor]
        PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
        PARAM_TRANSF_ULTCT             =[Utiliza_UltCust_Transfer ]
        PARAM_UTILIZA_COMISSAO_VENDREAL=[Utiliza_Comissao_VendReal]
        PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
        PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
        PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
        PARAM_BAIXA_PARCIAL            =[Utiliza_Baixa_Parcial_Ped]
        
        PARAM_BLOQ_DESCTO              =[Utiliza_Bloqueio_Descto  ]
        PARAM_BLOQ_TPDESCTO            =[Tipo_Bloqueio_Descto     ]
        PARAM_BLOQ_TXDESCTO            =[Taxa_Bloqueio_Descto     ]
        
        PARAM_BLOQ_DESCTOUNIT          =[Utiliza_Bloqueio_DesctoUn]
        PARAM_BLOQ_TPDESCTOUNIT        =[Tipo_Bloqueio_DesctoUn   ]
        PARAM_BLOQ_TXDESCTOUNIT        =[Taxa_Bloqueio_DesctoUn   ]
        
        PARAM_DOC_ROM                  =[Rom_Codigo do Documento  ]  
        PARAM_TIP_ROM                  =[Rom_Tipo do Documento    ]  
        PARAM_SER_ROM                  =[Rom_Serie do Documento   ]  
               
        PARAM_DOC_NF                   =[Not_Codigo do Documento  ]  
        PARAM_TIP_NF                   =[Not_Tipo do Documento    ]  
        PARAM_SER_NF                   =[Not_Serie do Documento   ]  
               
        PARAM_DOC_DUP                  =[Dup_Codigo do Documento  ]  
        PARAM_TIP_DUP                  =[Dup_Tipo do Documento    ]  
        PARAM_SER_DUP                  =[Dup_Serie do Documento   ]  
        
        PARAM_DOC_NFEN                 =[NFEN_Codigo do Docto     ]  
        PARAM_TIP_NFEN                 =[NFEN_Tipo do Docto       ]  
        PARAM_SER_NFEN                 =[NFEN_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFEN              =[NFEN Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFEN              =[NFEN Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFEN              =[NFEN Dup_Serie do Docto  ]  
        
        PARAM_DOC_NFES                 =[NFES_Codigo do Docto     ]  
        PARAM_TIP_NFES                 =[NFES_Tipo do Docto       ]  
        PARAM_SER_NFES                 =[NFES_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFES              =[NFES Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFES              =[NFES Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFES              =[NFES Dup_Serie do Docto  ]  
        
        PARAM_FATURA_IGUAL_OF          =[Gera_Fatura_Igual_OF     ]
        PARAM_GRUPO_EDOC               =[Grupo_eDoc               ]
        PARAM_CAMINHO_MANAGER          =[Caminho_NfeManager       ]
                    
        PARAM_NBLOQUEIO_SPC            =[NDias_Bloqueio_SPC       ]        
                    
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Fatura] !")
EndIf


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

Moveto "FaturaC"
KeyPress "F7"

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

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

View NOWINDOW "P_Fatura"
View NOWINDOW "P_Cartao"
View NOWINDOW "FaturaI"
View NOWINDOW "FaturaV"
View NOWINDOW "FaturaIC"
View NOWINDOW "FaturaR"
View NOWINDOW "FaturIDD"
View NOWINDOW "FaturIAD"
View NOWINDOW "FaturOCP"

View NOWINDOW "NotaC"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaV"
View NOWINDOW "NotaR"
View NOWINDOW "NotaIDD"
View NOWINDOW "NotaIAD"
View NOWINDOW "NotaOCP"
View NOWINDOW "NumeroNF"
View NOWINDOW "NumeroDP"
View NOWINDOW "DupC"
View NOWINDOW "DupI"
View NOWINDOW "DupNF"
View NOWINDOW "TbPrIte"
View NOWINDOW "TbPrCpg"

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

;If PARAM_CONSIGNACAO="S"
;   Then View NOWINDOW  "\\Sistemas\\Consigna\\CabMovim"
;        View NOWINDOW  "\\Sistemas\\Consigna\\IteMovim"
;        View NOWINDOW  "\\Sistemas\\Consigna\\CabSaldo"
;        View NOWINDOW  "\\Sistemas\\Consigna\\IteSaldo"
;EndIf
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeC"
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeI"

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

View NOWINDOW "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW "\\Sistemas\\Cadastro\\Feriados"
View NOWINDOW "\\Sistemas\\Cadastro\\Destmsg"
View NOWINDOW "\\Sistemas\\Cadastro\\End_Cob"
View NOWINDOW "\\Sistemas\\Cadastro\\Empriest"

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

EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
If CHAVEI<>9
   Then If CHAVEI<>8
           Then ESTOQUE()
                ATUA_PEDIDO_ORCAMENTO()
                If PARAM_RATEIO_COMISSAO="I"
                   Then APLIC_ORIGEM="FATURA"
                        Play "Ft_Comis"
                EndIf
        EndIf
EndIf
Moveto "FaturaI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoV()
DIGITAV()
Moveto "FaturaV"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC = 9 Then QuitLoop EndIf
  If CHAVEC = 1
     Then Controle_Dia()
  EndIf
  If Not IsAssigned(OPCHAVEI)
     Then If PARAM_UTILIZACDBARRA="S"
             Then OPCHAVEI="CDB"
             Else OPCHAVEI="CDC"
          EndIf
  EndIf

  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
    EndWhile

    While FACA_DIGITAF
      DIGITAF()
      Rateio_BC_Itens("FaturaC")
      If CHAVEF = 9 Then QuitLoop EndIf
      DIGITAD()
      If CHAVED = 0
         Then FACA_DIGITAC = False
              FACA_CHAVEI  = False
              QuitLoop
      EndIf
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Vendas\\Bib_Fat"

If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""          EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""  EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO ="S" EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  ="S" EndIf
If Not IsAssigned(APLIC_ORIGEM)        Then APLIC_ORIGEM      =""  EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO =""  EndIf
If Not IsAssigned(SYS_NCONEXAO)        Then SYS_NCONEXAO      =""  EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""  EndIf
If Not IsAssigned(SYS_VERSAO_SO)       Then SYS_VERSAO_SO="Windows"EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""  EndIf

Ler_Captura("")
                 
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

PARAM_RATEIO_COMISSAO= ""
PARAM_CONSIGNACAO    = "N"
PARAM_RELAT_NF       = ""
INICIO_IMPRESSAO     = True
VERIFICA_CONSULTA    = "FATURA"

Carrega_Tabelas()

Array dtvencto[12]
Array valorven[12]

Array Dt_Vencto[12]
Array Vr_Vencto[12]
Array ND_Vencto[12]
Array VC_Vencto[12]

CoEdit NoWindow "FaturaC"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

PickForm "1"
Moveto "PedidoC" SetHighLight Current Record 119 Field 119
Moveto "PedidoI" SetHighLight Current Record 119 Field 119
Moveto "OrcaC"   SetHighLight Current Record 119 Field 119
Moveto "OrcaI"   SetHighLight Current Record 119 Field 119
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetHighLight Current Record 51  Field 51
Moveto "FaturaC"
PickForm "F"

OPCAO_FORM = "F"
MES_EST    = ""
ANO_EST    = ""

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
