;** NotaEC *********************************************************************
;*  Digitacao de Notas de Entrada                                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/01/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 18/09/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rotina F9
;Ultima Alteracao: 09/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Round() Calculo Fator de Conversao
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Mouse
;Ultima Alteracao: 13/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Alterar Item e Preco da Tabela - Conc.Vico
;Ultima Alteracao: 23/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Estorno Contas a Pagar                    
;Ultima Alteracao: 13/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Substituicao                          
;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 V_FORN                       
;Ultima Alteracao: 14/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lancto a Prazo
;Ultima Alteracao: 09/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cotacao
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 11/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 14/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 5 Casas decimais Ajustes Item
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 05/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Recolhimento Substituicao Tipos
;Ultima Alteracao: 30/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem UF/CFO
;Ultima Alteracao: 13/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pesquisa pelo Codigo do Item do Fornecedor
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 01/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem altera‡ao de valores p/ itens
;Ultima Alteracao: 14/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Calculo Substituicao MVA/UFO/UFD
;Ultima Alteracao: 28/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA_Interno/Itens
;Ultima Alteracao: 11/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VCU_BC_SUBST/VCU_VR_SUBST=BlankNum()
;Ultima Alteracao: 03/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta Codigo Empresa Auditoria
;Ultima Alteracao: 06/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Liberacao Digitacao Serie do Documento/ Frete 0=Sem Frete
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Interno->MVA_11 cadastro itens                          
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle de Pecas Brasil Textil, inclusao campo Lookup_OCV 
;Ultima Alteracao: 30/11/2009 por Bruno Carvalho
;Motivo Alteracao: Inclusao Parametro PIS/COFINS HF Tecidos  
;Ultima Alteracao: 18/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes visualizacao CST item   
;Ultima Alteracao: 22/12/2009 por Cleber Alves
;Motivo Alteracao: Ajustes campo Data Competencia
;Ultima Alteracao: 18/03/2010 por Cleber Alves
;Motivo Alteracao: Ajustes %Venda
;Ultima Alteracao: 26/03/2010 por Cleber Alves
;Motivo Alteracao: inclusao Data Competencia
;Ultima Alteracao: 16/04/2010 por Cleber Alves
;Motivo Alteracao: Opcao F5 Observacao
;Ultima Alteracao: 11/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Consulta Itens                         
;Ultima Alteracao: 16/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Msg tamanho numero documento max 6      
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 24/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item Fundi‡Æo SÆo Geraldo      
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 25/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes %Reducao BC IPI                     
;Ultima Alteracao: 17/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo BC IPI                     
;Ultima Alteracao: 25/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes %Reducao BCIPI FornProd, novos campo Cota‡Æo
;Ultima Alteracao: 02/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_NOTA BCIMCS-ST
;Ultima Alteracao: 07/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir NCM           
;Ultima Alteracao: 23/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas            
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 28/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Novos Campos/Layout/Modo de Trabalho
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN  
;Ultima Alteracao: 10/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes numero do documento livre            
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 28/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem VrBCST/VrST conforme codigo recolhimento
;Ultima Alteracao: 15/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina para formas de localizar o item e Ajustes "0296" 
;Ultima Alteracao: 13/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualizar TabPReco se blank                       
;Ultima Alteracao: 24/10/2011 por Karina Andrade
;Motivo Alteracao: Add Campo="I_CSOSN" ao Digitai()
;Ultima Alteracao: 26/10/2011 por Bruno Carvalho
;Motivo Alteracao: Add Natureza do Frete conforme Codigos de Documento 
;Ultima Alteracao: 27/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFSE Chave_Acesso_NF                             
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CST do Item
;Ultima Alteracao: 02/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSTICMS ?90 digitar ST e MVA                        
;Ultima Alteracao: 23/01/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas rotinas de vencimento "AVISTA" e "APRAZO"      
;Ultima Alteracao: 09/02/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes OC_VENCTOS()   
;Ultima Alteracao: 13/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Limpa_Campos()                                     
;Ultima Alteracao: 21/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F8 para copiar Base de Calculo e Calcular Impostos menos ICMS
;Ultima Alteracao: 22/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes op‡Æo sair dos showpoup
;Ultima Alteracao: 23/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes MSG para altera‡Æo da Data de Entrada
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IPI_CST OCI->NotaEI                                 
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Showdialog A Prazo                                  
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 24/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Item servi‡o pede ISSQN senÆo =N                        
;Ultima Alteracao: 26/04/2012 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes "Digita_AVista"  
;Ultima Alteracao: 27/04/2012 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes nas aliquota dos Itens, setado vari veis sem valores   
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F8 para Calcular BC e Vr do imposto conforme rateios            
;Ultima Alteracao: 07/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F8 para Calcular BC e Vr, PIS/COFINS=99 Simples Nacional    
;Ultima Alteracao: 17/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rotina para inclusÆo de novo resgitro(travar sequencia)     
;Ultima Alteracao: 13/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio proporcional no item PIS/COFINS                      
;Ultima Alteracao: 19/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo PIS/COFINS Base calculo com e sem IPI, Substituicao COTTA/PONTO CON
;Ultima Alteracao: 25/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro tipo de lancamento conforme tipo da conta /contas a pagar         
;Ultima Alteracao: 27/06/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Chave de acesso obrigatorio para NF-E, CT-E e NFSE
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_CSOSN2()     
;Ultima Alteracao: 10/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes campos=blank se for =0 nos itens(importa‡Æo xml)
;Ultima Alteracao: 16/08/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo Digitai() "VSD_I_Referencia"
;Ultima Alteracao: 21/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Ficha do Item" para informar o valor exato VSD_I_Referencia
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 04/10/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes fator ce conversao=1 para GM 0319                        
;Ultima Alteracao: 19/10/2012 por Kamila Gomes                       
;Motivo Alteracao: Corrigido problema com vari vel LANCTO 
;Ultima Alteracao: 22/10/2012 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado "CSOSN" na rotina do FornProd, e ajustado novo layout p/ Impostos  
;Ultima Alteracao: 24/10/2012 por Bruno Carvalho                           
;Motivo Alteracao: Ajuste na posi‡Æo do ShowDialog "Dados do Item"   
;Ultima Alteracao: 23/11/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes F1
;Ultima Alteracao: 27/11/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Items CST ?60 nÆo zerar valores de icms
;Ultima Alteracao: 04/12/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes aceitar valor nf zerada para complemento
;Ultima Alteracao: 06/12/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes calculo bc pis/cofins pontocon       
;Ultima Alteracao: 20/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar nf/serie/cgc da chave de acesso
;Ultima Alteracao: 20/12/2012 por Bruno Carvalho
;Motivo Alteracao: Add "VERIFICA_CONSULTA"
;Ultima Alteracao: 04/01/2013 por Bruno Carvalho
;Motivo Alteracao: Removido vari vel "VERIFICA_CONSULTA" onde estava sendo setada sem utiliza‡Æo
;Ultima Alteracao: 18/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem total da NF                 
;Ultima Alteracao: 28/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem item com ST usar cst ?60 ou CSOSN ?500 e NCM<>do cadastro
;Ultima Alteracao: 30/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes limpas cst pis/cofins/ipi item sem cotacao/historico              
;Ultima Alteracao: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo mercadoria->produtos              
;Ultima Alteracao: 13/02/2013 por Nikolas
;Motivo Alteracao: variavel lancto nome incorreto na linha 341 estava nvlancto
;Ultima Alteracao: 16/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F9 0334                                  
;Ultima Alteracao: 19/02/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes para calcular o fator de conversÆo independente se meno que 1  #0278#    
;Ultima Alteracao: 21/02/2013 por Bruno Carvalho
;Motivo Alteracao: Add CHECA_DUPLICIDADE()
;Ultima Alteracao: 21/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes mensagem invalida para origem do CST
;Ultima Alteracao: 25/02/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes CHECA_DUPLICIDADE()
;Ultima Alteracao: 15/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes checagem do NCM diferente do cadastro
;Ultima Alteracao: 18/03/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Cotacao() 
;Ultima Alteracao: 18/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes quantidade_convertida para 0,000
;Ultima Alteracao: 19/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Fornprod CST/Aliquota PIS/COFINS         
;Ultima Alteracao: 19/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes quantidade_convertida para 3 casas decimais 
;Ultima Alteracao: 22/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Rateio_Itens()                          
;Ultima Alteracao: 28/03/2013 por Bruno Carvalho
;Motivo Alteracao: I_Quantidade alterado p/ receber at‚ 5 casas decimais
;Ultima Alteracao: 15/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nota origem conhecimento de transporte, exclusao digita_frete()
;Ultima Alteracao: 28/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo bc/vr, pis/cofins feito automatico 
;Ultima Alteracao: 11/06/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pis/cofins 99 simples nacional
;Ultima Alteracao: 19/07/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes WS_SIT
;Ultima Alteracao: 08/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usa campo "ICMS sobre Total NF]" na tabela NOTAEC 
;Ultima Alteracao: 11/09/2013 por Karina Andrade
;Motivo Alteracao: Ajustes AVista_Dialog e Conta()
;Ultima Alteracao: 16/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes erro variavel VSD_I_TIIPI -> VSD_I_TIPI 
;Ultima Alteracao: 18/09/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes AVista_Dialog e Conta()
;Ultima Alteracao: 27/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas rotinas do Monta_Opcoes "BIB_SHOW" 
;Ultima Alteracao: 30/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando chamar o Sw_Cons (Rotina agora no ESTOQUE)
;Ultima Alteracao: 10/10/2013 por Bruno Carvalho
;Motivo Alteracao: Alterado Play Sw_Cons para Sw_Cons3 (Copia do Vendas)
;Ultima Alteracao: 25/10/2013 por Andrey Fillipe
;Motivo Alteracao: Ajustes p/ quando for notas eletronicas pedir chave de acesso
;Ultima Alteracao: 18/11/2013 por Andrey Fillipe
;Motivo Alteracao: Inclusao Tipo de NF
;Ultima Alteracao: 05/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo()
;Ultima Alteracao: 17/02/2014 por Karina Andrade
;Motivo Alteracao: Ajustes Nota Original para "CTR's"
;Ultima Alteracao: 24/02/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes "Digita_AVista"
;Ultima Alteracao: 14/03/2014 por Kamila Gomes
;Motivo Alteracao: InclusÆo de campos: "Inf_Rateio Itens" e "SubSerie do Documento"
;                  Exibe campos de totais frete, seguro, desconto e outras desp.
;Ultima Alteracao: 08/04/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_NLancto() 
;Ultima Alteracao: 10/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes round() calculo pis/cofins                
;Ultima Alteracao: 10/04/2014 por Bruno Carvalho
;Motivo Alteracao: Add Verifica_NRegistros() onde ir  informar limite de registros
;Ultima Alteracao: 23/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao informar o numero do lancamento
;Ultima Alteracao: 24/04/2014 por Bruno Carvalho
;Motivo Alteracao: Comentado o novo procedimento de numero de lan‡amento at‚ finaliza‡Æo de testes
;Ultima Alteracao: 09/05/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes Calc_Custo_Unitario(), valores rateados
;Ultima Alteracao: 21/05/2014 por Bruno Carvalho 
;Motivo Alteracao: Ajustes "UFEMP" - ICMS Calculo Diferencial de Aliquota
;Ultima Alteracao: 10/06/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes calculo do icmscr
;Ultima Alteracao: 02/07/2014 por Kamila Gomes 
;Motivo Alteracao: Ajustes calc de custos para itens de consumo
;Ultima Alteracao: 03/07/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calcular diferencial de Aliquoita ICMS s¢ compra fora do estado
;Ultima Alteracao: 16/09/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes Checagem da Chave de acesso e inclusÆo Nota Fiscal Avulsa Elet.
;Ultima Alteracao: 16/10/2014 por Bruno Carvalho
;Motivo Alteracao: Removido o processo Verifica_NLancto(), devido a erro em acesso simultaneo e ajustado nova rotina para verifica‡Æo do Lancto
;Ultima Alteracao: 24/10/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo calcula Diferencial de aliquota icms p/ ATACADISTA
;Ultima Alteracao: 29/10/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Base de Calculo PIS/COFINS + ICMS_ST para ConstruBase 0309
;Ultima Alteracao: 24/11/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes na Proc CONTA(), nota importada A VISTA, nao estava encontrando lan‡amento na tabela NOTAECV 
;Ultima Alteracao: 18/12/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes ao gravar data competencia movcont
;Ultima Alteracao: 07/01/2015 por Luis Gustavo
;Motivo Alteracao: Implementado filtro no Codigo do Documento. Apenas as op‡äes que podem ser utilizadas para a situa‡Æo de entrada.
;Ultima Alteracao: 08/01/2015 por Luis Gustavo
;Motivo Alteracao: Implementado para barrar item de servi‡o com CFOP que nao seja de servi‡o, e CFOP de servi‡o que nao seja com item de servi‡o 
;Ultima Alteracao: 14/01/2015 por Andrey Fillipe
;Motivo Alteracao: Implementado para verificar se o CST digitado for 010, 030 e 070, verificar o cadastro do item se o CST ‚ 060
;Ultima Alteracao: 06/02/2015 por Luis Gustavo
;Motivo Alteracao: Implementado para nao bloquear quando Destina‡Æo for servi‡o e o tipo do item for "F" (Frete).
;Ultima Alteracao: 12/02/2015 por Luis Gustavo
;Motivo Alteracao: Ajuste ao bloquear CFOP ou itens de servi‡o. Somente os CFOP = "1933" Or "2933" Or "1949" Or "2949"
;Ultima Alteracao: 25/02/2015 por Luis Gustavo
;Motivo Alteracao: Implementado para checar tambem o CFOP "1124"
;Ultima Alteracao: 04/03/2015 por Luis Gustavo
;Motivo Alteracao: Implementado na Proc Calc_Custo_Unitario(), pra checar nos parametros ao calcular o diferen‡ial de aliquota
;Ultima Alteracao: 10/03/2015 por Kamila Gomes
;Motivo Alteracao: Retirado bloqueio CFOP ou itens de servi‡o. Somente os CFOP = "1933" Or "2933" Or "1949" Or "2949"
;Ultima Alteracao: 19/03/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste diferencial de aliquota
;Ultima Alteracao: 12/05/2015 por Kamila Gomes
;Motivo Alteracao: Ajuste Calculo de credito/debito Pis/Cofins somente se no cadastro for creditado     
;Ultima Alteracao: 12/05/2015 por Kamila Gomes
;Motivo Alteracao: Retirado a obrigatoriedade de chave de acesso do tipos de documentos "CF-E,NFCE e NFSE"
;Ultima Alteracao: 25/05/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado rotina Calc_Custo_Unitario() para o script "FT_CUSTO" 
;Ultima Alteracao: 19/06/2015 por Kamila Gomes
;Motivo Alteracao: InclusÆo tabela NOTAEIA - Informa‡äes Adicionais da nota     
;Ultima Alteracao: 02/07/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes casas decimais das al¡quotas de PIS e COFINS
;Ultima Alteracao: 13/08/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes casas decimais das al¡quotas de PIS e COFINS "[#####]"  
;Ultima Alteracao: 01/09/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BC PIS/COFINS + VrST - PontoCon 0173
;Ultima Alteracao: 30/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Form MSGCAMPO display no FORM            
;Ultima Alteracao: 23/01/2016 por Bruno Carvalho 
;Motivo Alteracao: Altera‡Æo de algumas vari veis MSG_CAMPO para MSGCAMPO e ajustes p/ padronizar estas mensagens no ShowDialog
;Ultima Alteracao: 01/03/2016 por Kamila Gomes
;Motivo Alteracao: Grava Data de EmissÆo na tabela Cotacao, para consulta FORNPROD PRODFORN                
;Ultima Alteracao: 01/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Janela sem sombra
;Ultima Alteracao: 10/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Pralum pegar da cotacao o valor unitario da ultima compra, totalizar nota
;Ultima Alteracao: 16/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Tipo de Opera‡Æo
;Ultima Alteracao: 30/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao MontaRodapeSD()
;Ultima Alteracao: 14/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desabilitar particularidades PRALUM
;Ultima Alteracao: 11/05/2016 por Bruno Carvalho
;Motivo Alteracao: Inclusao ModoLocalizarItem() 
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Edita Descricao do Item] e [Indice Preco de Venda]
;Ultima Alteracao: 06/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Indice Preco de Venda]
;Ultima Alteracao: 08/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Indice Preco de Venda]
;Ultima Alteracao: 16/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Documentos Referenciados Entradas
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para gera‡Æo/verifica‡Æo do [Numero do Lancamento]
;Ultima Alteracao: 06/07/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado COMPLEMENTO_NOTA() p/ #0294# -> Gera Requisi‡Æo de Transferˆncia
;Ultima Alteracao: 15/07/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado PARAM_UTILIZA_TRANSFERENCIA PARAM_DATA_TRANSFERENCIA p/ #0294# -> Utiliza Requisi‡Æo de Transferˆncia
;Ultima Alteracao: 01/08/2016 por Bruno Carvalho 
;Motivo Alteracao: Ignorado [Tipo do Documento]="CT" -> COMPLEMENTO_NOTA()
;Ultima Alteracao: 05/09/2016 por Kamila Gomes 
;Motivo Alteracao: Ajuste ExclusÆo de NotaER 
;Ultima Alteracao: 11/10/2016 por Kamila Gomes 
;Motivo Alteracao: Ajuste InclusÆo de op‡Æo no tipo de NF = Complemento
;Ultima Alteracao: 19/10/2016 por Rafael Matos 
;Motivo Alteracao: Ajuste Tipo de Documento vinculado ao Documento
;Ultima Alteracao: 12/12/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado parƒmetro p/ digita‡Æo de cor -> PARAM_DIGITA_COR_TECIDO
;Ultima Alteracao: 12/12/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajustes SDCarrega_F1() UnLockRecord
;Ultima Alteracao: 20/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes se campo I_Codigo_Item for branco
;Ultima Alteracao: 22/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloquear preco total zerado! 
;Ultima Alteracao: 29/12/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Lookup_Iten_Cor e ajustado quando utilizado PARAM_DIGITA_COR_TECIDO
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Æo para Impostos 
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes importar lan‡amento xml para nota de entrada 
;Ultima Alteracao: 04/01/2017 por Kamila Gomes
;Motivo Alteracao: Ajustes Proc Pega_Dados(AUX_ITEM) Se origem do produto for estrangeira
;                  pega al¡quota de ICMS de 4%
;Ultima Alteracao: 11/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes eero tratamento de duplicidade de item gravando sobre outro registro
;Ultima Alteracao: 16/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes eero tratamento de duplicidade de item gravando sobre outro registro
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 04/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Numero Nota Original s¢ pra devolu‡Æo
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0396#
;Ultima Alteracao: 10/04/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo para edi‡Æo de quantidade nos itens "F9" -> Ajusta_Quantidade() #0377#
;Ultima Alteracao: 20/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST tratamento ipi/pis/cofins entrada/devolu‡Æo
;Ultima Alteracao: 25/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes na op‡Æo para edi‡Æo de quantidade nos itens "F9" -> Ajusta_Quantidade()
;                  Excluindo valor do registro ao posicionar o cursor para edi‡Æo da quantidade 
;Ultima Alteracao: 08/05/2017 por Bruno Carvalho
;Motivo Alteracao: Alterado o processo de edi‡Æo ao pressionar "F9" para edi‡Æo pelo showdialog ao chamar uma ordem de compra
;Ultima Alteracao: 26/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado p/ #0388# um nova tentativa ao localizar o item pelo tipo do item "P"
;Ultima Alteracao: 27/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Adiciona_Preco() 
;Ultima Alteracao: 17/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ATUA_SITUACAO_COMPRA() ao alterar o status da OC, independente do faturamento parcial, status dever  ser ENTREGUE Sol.30826
;Ultima Alteracao: 10/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado p/ #0388# um nova tentativa ao localizar o item pelo tipo do item "M"
;Ultima Alteracao: 12/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes undo, intervalo de datas
;Ultima Alteracao: 21/08/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Destinat" na proc Monta_Tabelas() *Saindo do sistema inesperadamente ao abortar processo
;Ultima Alteracao: 24/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mostrar dados tabela preco
;Ultima Alteracao: 31/08/2017 por Kamila Gomes
;Motivo Alteracao: Ajustes somar ipi para empresas Ind/Com e Comercio.
;Ultima Alteracao: 12/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Peso Liquido" no ShowDialog dos dados do item
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Monta_Opcoes_Cor() e Seleciona_Opcoes_Cor() p/ Bibliot
;Ultima Alteracao: 27/09/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SomatoriaDosItens(), getrecord fornprod
;Ultima Alteracao: 28/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo qtd entregue pendente 
;Ultima Alteracao: 09/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem desconto + descontont   
;Ultima Alteracao: 16/10/2017 por Kamila Gomes
;Motivo Alteracao: Ajustes variavel VSD_I_PRECO_TABELA         
;Ultima Alteracao: 02/02/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo "F8" para incluir Cidade de Origem e Destino p/ Doctos CT-E
;Ultima Alteracao: 14/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar itens da expedi‡Æo         
;Ultima Alteracao: 20/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar itens da nota de venda     
;Ultima Alteracao: 26/02/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes Nota conferˆncia com OCI
;Ultima Alteracao: 28/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes ATUA_COMPRA()
;Ultima Alteracao: 19/03/2018 por Kamila Gomes
;Motivo Alteracao: ajustes Titulos() Sistema Gerador "IX" - ImpNFe
;Ultima Alteracao: 27/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes Pega_Dados() regra icms=4%
;Ultima Alteracao: 10/04/2018 por Kamila Gomes
;Motivo Alteracao: Adicionadas as tags de aliquota e valor de credito do ICMS 
;Ultima Alteracao: 02/05/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado p/ ignorar itens do tipo "F" -> Estoque()  
;Ultima Alteracao: 25/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes calculo reducao bcicms f8 
;Ultima Alteracao: 30/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao executar Item_Localizador() onde nÆo h  a necessidade de 
;                  alinhamento VSD_I_Codigo_Item, pois esta proc j  realiza este processo
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros 
;Ultima Alteracao: 08/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes desabilitar transferencia divina panela
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0419#
;Ultima Alteracao: 23/07/2018 por Kamila Gomes
;Motivo Alteracao: Adicionado [Valor FCP_Ret_ST] no valor da nota fiscal
;Ultima Alteracao: 01/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes [Valor FCP_Ret_ST] [Valor Desconto NTributado] form, showdialg, custo
;Ultima Alteracao: 10/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes ShowPopup natureza do frete
;Ultima Alteracao: 10/10/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes verificar Sistema Gerador IX quando exclui nota a Vista
;Ultima Alteracao: 24/12/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes Chavei() conforme FATURA 
;Ultima Alteracao: 27/12/2018 por Bruno Carvalho
;Motivo Alteracao: Ajuste na proc Atualiza_Saldo_Conta() -> IsAssigned(VALORANT) = BlankNum()
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 03/01/2019 por Kamila Gomes                           
;Motivo Alteracao: Ajuste erro de sintaxe
;Ultima Alteracao: 11/01/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ 0358 -> CHECA_DUPLICIDADE para verificar al‚m do CGC pelo c¢digo da pessoa
;Ultima Alteracao: 21/02/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes cor nÆo localizada limpar variavel
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 19/03/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado "F5" -> Digita_Informacoes_Adicionais() na digita‡Æo do item 
;Ultima Alteracao: 20/03/2019 por Bruno Carvalho                           
;Motivo Alteracao: Alterado "F5" para "F8" ao chamar a digita‡Æo das informa‡äes adicionais na digita‡Æo do item **F8 estava sem utiliza‡Æo
;Ultima Alteracao: 29/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes carrega expedi‡Æo para compra tambem
;Ultima Alteracao: 30/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes F8=calcular F4=Calcular nosshowdialog item
;Ultima Alteracao: 30/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes diversos erro
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0429#
;Ultima Alteracao: 26/04/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bc pis/cofins #0173 sem vrst
;Ultima Alteracao: 09/05/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0377 entrega parcial sim
;Ultima Alteracao: 15/05/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes data de entrada titulos   
;Ultima Alteracao: 10/06/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes chave de acesso NFCE      
;Ultima Alteracao: 13/06/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0434 nÆo usar item aplica‡Æo direta em compra
;Ultima Alteracao: 25/06/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes casa decimais item        
;Ultima Alteracao: 26/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no plano de contas "SAIDA" ou "ENTRADA" -> Fun‡Æo PlContas() p/ verificar o plano de conta informado
;Ultima Alteracao: 05/07/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0388 OC =ENTREGUE        
;Ultima Alteracao: 18/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes data competencia via OCV  
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes checagem CFOP para CT-e   

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Faturamento                         *
;*******************************************************************************
Proc CHAVEC()
INC_COMPRA   =False
FACA_DIGITAC=True
INICIO_PAGINA=True

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

While True
  VSDGNATFRETE=""
  
  Moveto "NotaEC"
  End
  Moveto [Numero do Lancamento]
  LANCTO=[Numero do Lancamento]

  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn PgDn
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao() 

  If RetVal=-33
   Then 
        MSGCAMPO=""
        Echo Normal
        Echo Off
        
        ShowPopup " Fun‡”es " CENTERED
          "[F4] ~E~fetuar XML->NE    "      : " Efetuar XML tempor rio em Nota de Entrada"    : "F4",
          Separator,
          "~S~air"                          : " Ignorar op‡äes"                :"CANCELAR"
        EndMenu
        To MenuVar
        echo off
        If MenuVar="CANCELAR" or MenuVar="Esc"
           Then Loop
        EndIf

        RetVal=MenuVar
  EndIf

     Switch
       ;Case RetVal=-33 : SemFuncoes()
        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="F4":
             Del
        
             play "FT_XML"
             
             quitloop
             
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               INC_COMPRA   =False
               FACA_DIGITAC=True
               INICIO_PAGINA=True

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

               If OPCAO_FORM="F"
                  Then PAGINA("NotaEC","MR")
                  Else PAGINA("NotaEC","MT")
               EndIf
               LANCTO=[Numero do Lancamento]

               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
                         Checa_Supervisor()
                         Then If QuerExcluir("")
                                 Then CHAVEC=0
                                      If Carrega_Parametros()
                                         Then GRAVA_LOG = True
                                              EXCLUSAO_C()
                                         Else If Not IsBlank([Codigo da Empresa])
                                                 Then UnLockRecord
                                                 Else GRAVA_LOG = True
                                                      EXCLUSAO_C()
                                              EndIf
                                      EndIf
                                 Else UnLockRecord
                              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="ENTER": 
             registro_automatico=False
             If Numero_Lancamento("","F")
                Then LANCTO = PROXLANCTO_NLANC
                     Release Vars PROXLANCTO_NLANC  
                Else QuitLoop
             EndIf
             PickForm "1"    
             Moveto [Numero do Lancamento]
             If PROXIMO_LANCTO_REG_ACHOU
                Then CHAVEC=0
                     If Checa_Controle([Numero_Controle_Dia])
                        Then Return
                     EndIf
                Else CHAVEC=1
                     If Not Checa_Controle(SYS_CONTROLE_DIA)
                        Then OPCAO_FORM="F"
                        Else 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()

Moveto "NotaEC"
Moveto "NotaECP" SetaCorRegistro("Padrao")
Moveto "NotaEC"
DATAENT_ANT=[Data de Entrada]
If INICIO_PAGINA
   Then If [Sistema Gerador]="NF"
           Then MSG="Lan‡amento gerado automaticamente pelo Faturamento !"
                MSG=MSG+"// Cuidado com as modificacoes efetuadas !"
                Mensagem(MSG)
        EndIf
        If CHAVEC=1
           Then [Codigo da Empresa   ]=SYS_EMPRESA_DEFAULT
           Else If Not Carrega_Parametros()
                    Then CHAVEC=9
                         Return
                EndIf
        EndIf
EndIf

If CHAVEC=0 or Not INICIO_PAGINA
   Then If IsBlank([Data de Entrada])
           Then Moveto [Codigo da Empresa]
           Else Moveto [Valor BCICMS]
        EndIf
   Else Moveto [Codigo da Empresa]
EndIf

If [Tipo de Operacao]="D"
   Then Moveto [Numero Nota Original]
EndIf

FACA_CHAVEI=True
INICIO_PAGINA=False
CODREP=[Codigo do Representante]
V_FORN=[Codigo]
V_CGC =[CGC   ]
V_NOC =[Numero da OC]

;*** Variaveis Valores Anteriores *******
VANT_CFOP        =[CFO]
VANT_MERCDIG     =[VALOR MERCADORIA]
VANT_DESCTO      =[VALOR DESCONTO]
VANT_SERVDIG     =[VALOR SERVICO]

VANT_SEGURO      =[VALOR DO SEGURO]
VANT_DESPACES    =[VALOR DESPESAS ACESSORIAS]
VANT_ACRESDESC   =[VALOR ACRESCIMOS_DESCTOS]
VANT_INF_RATEIO_I=[INF_RATEIOS ITENS]
VANT_FRETE       =[VALOR DO FRETE]
VANT_RECSUBST    =[RECOLHIMENTO SUBSTITUICAO]
VANT_VSUBST      =[VALOR SUBSTITUICAO ICMS]
VANT_VSUBSTDEST  =[VR SUBSTITUICAO DESTINAT]
;****************************************

While True

      TECLA=" Esc=Retornar  "
      If CHAVEC=0
         Then TECLA=TECLA+"Del=Excluir  "
         Else TECLA=TECLA+"             "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgDn  "

      If Field()="Codigo da Conta"
         Then Monta_Opcoes("Codigo da Conta","")
      EndIf  
     
      If Field()="Codigo do Documento"
         Then Monta_Opcoes("Codigo do Documento","")
      EndIf
     
      If Field()="Codigo da Empresa"      
         Then Monta_Opcoes("Empresas","")     
      EndIf
      
      Prompt TECLA

      MSGCAMPO=Field()
      Switch
        Case Field()="CFO"                        : MSGCAMPO="CFOP principal da Nota"

        Case Field()="Tipo Pessoa"                : MSGCAMPO="Tipo de Pessoa = F¡sica, Jur¡dica"
        Case Field()="CGC"                        : MSGCAMPO="CNPJ/CPF"

        Case Field()="Codigo da Tabela"           : MSGCAMPO="C¢digo da Tabela de Pre‡o Referente"
        Case Field()="Numero Nota Original"       : MSGCAMPO="Nota origem da devolu‡Æo"
        Case Field()="Serie Nota Original"        : MSGCAMPO="Serie da nota origem da devolu‡Æo"
        Case Field()="Codigo do Representante"    : MSGCAMPO="C¢digo do representante para devolu‡Æo"
        Case Field()="Comissao do Representante"  : MSGCAMPO="ComissÆo do representante para devolu‡Æo"

        Case Field()="Valor Mercadoria"           : MSGCAMPO="Valor total dos produtos"
        Case Field()="Valor Desconto"             : MSGCAMPO="Desconto + Desconto nÆo tributado (ICMS Desonerado)"
        Case Field()="Valor Servico"              : MSGCAMPO="Valor dos servi‡os"

        Case Field()="Valor do Frete"             : MSGCAMPO="Frete"
        Case Field()="Natureza do Frete"          : MSGCAMPO="Informe a Natureza do Frete"
        Case Field()="Valor do Seguro"            : MSGCAMPO="Seguro"
        Case Field()="Valor Despesas Acessorias"  : MSGCAMPO="Despesas acess¢rias"

        Case Field()="Valor BCICMS"               : MSGCAMPO="Base de c lculo do ICMS"
        Case Field()="Valor ICMS"                 : MSGCAMPO="Valor do ICMS"
        Case Field()="Valor BCSubstituicao ICMS"  : MSGCAMPO="Base de c lculo do ICMS substitui‡„o"
        Case Field()="Valor Substituicao ICMS"    : MSGCAMPO="Valor do ICMS substitui‡„o"
        Case Field()="Valor BCISSQN"              : MSGCAMPO="Base de c lculo do ISSQN"
        Case Field()="Valor ISSQN"                : MSGCAMPO="Valor do ISSQN"

        Case Field()="Valor Acrescimos_Desctos"   : MSGCAMPO="Valor de outros acr‚scimos/descontos a ratear nos custos"
        Case Field()="Inf_Rateios Itens"          : MSGCAMPO="Forma de Rateio nos Itens"

        Case Field()="Valor IPI"                  : MSGCAMPO="IPI"

        Case Field()="Valor Desconto NTributado"  : MSGCAMPO="Valor Desconto NÆo Tributado (ICMS Desonerado)"
        Case Field()="Valor FCP_Ret_ST"           : MSGCAMPO="Valor FCP sobre ICMS ST"

        Case Field()="Valor Nota Fiscal"          : MSGCAMPO="Valor da nota fiscal"

        Case Field()="Recolhimento Substituicao"  : MSGCAMPO="Tipo recolhimento da substitui‡Æo"
        Case Field()="BC Substituicao Destinat"   : MSGCAMPO="Base de c lculo do ICMS substitui‡„o a pagar pelo destinat rio"
        Case Field()="Vr Substituicao Destinat"   : MSGCAMPO="Valor do ICMS substitui‡„o a pagar pelo destinat rio"        

        Case Field()="Tipo CTR"                   : MSGCAMPO="Frete por conta"
      
      EndSwitch
      
      If Field()="Codigo da Empresa"        Or
         Field()="Tipo de Operacao"         Or
         Field()="Tipo de NF"               Or
         Field()="Codigo do Documento"      Or
         Field()="CFO"                      Or
         Field()="Codigo"                   Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Numero_Carregamento"      Or
         Field()="Numero da OC"             Or
         Field()="Recolhimento Substituicao" Or
         Field()="Tipo CTR"                 Or
         Field()="Inf_Rateios Itens"        Or
         Field()="Natureza do Frete"
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      Wait Field
         Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F6","F8",-33,"F9","F7",-66
 
      If RetVal=-33
         Then 
              MSGCAMPO=""
              Echo Normal
              Echo Off
              
              ShowPopup " Fun‡”es " CENTERED
                "[F6] ~I~mprimir                    " : " Imprimir Pedido"                                 : "F6",
                "[F7] Documentos ~R~eferenciados    " : " Referenciar demais documentos"                   : "F7",
                "[F8] ~C~idade Origem e Destino CT-E" : " Cidade de Origem e Destino para Documentos CT-E" : "F8",
                "[F9] ~D~octo/Data Entrada          " : " Alterar Docto/Data de Entrada"                   : "F9",
                Separator,
                "~S~air"                              : " Ignorar op‡äes"                                  : "CANCELAR"
              EndMenu
              To MenuVar
              echo off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf

              RetVal=MenuVar
      EndIf

      Switch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="F1":
           If Field()="CFO"                      Or
              Field()="Codigo"                   Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Numero_Carregamento"      Or
              Field()="Numero da OC"
              Then CONSULTAF1()
           EndIf

           If Field()="Codigo da Conta"
              Then Seleciona_Opcoes("Codigo da Conta","CR")
                   [Codigo da Empresa]=COD_EMPRESA
           EndIf 
     
           If Field()="Codigo do Documento"
              Then Seleciona_Opcoes("Codigo do Documento","NE")
           EndIf 
            
           If Field()="Codigo da Empresa"         
              Then Seleciona_Opcoes("Empresas","CR")
           Endif        
           
           If Field()="Tipo de Operacao"
              Then
                   MSGCAMPO=""
                   Echo Normal
                   Echo Off

                   ShowPopup " Tipo de Opera‡Æo " CENTERED
                    "~A~plica‡„o Direta - Aquisi‡äes ou opera‡äes sem crˆdito de impostos " : " " : "A",
                    "                   e nÆo controlam estoque.                          " : " " : "A",
                    "                   (Ex: Uso e consumo, imobilizado)                  " : " " : "A",
                    "                                                                     " : " " : "",
                    "~C~ompras          - Compras ou aquisi‡äes que podem gerar crˆdito de" : " " : "C",
                    "                   impostos e que controlam estoque.                 " : " " : "C",
                    "                                                                     " : " " : "",
                    "~O~utras           - Outras entradas que podem gerar crˆdito de      " : " " : "O",
                    "                   impostos e que controlam estoque.                 " : " " : "O",
                    "                                                                     " : " " : "",
                    "~I~mpostos         - Notas complementares que podem gerar crˆdito de " : " " : "I",
                    "                   impostos e nÆo controlam estoque.                 " : " " : "I",
                    "                                                                     " : " " : "",
                    "~D~evolu‡„o        - Devolu‡„o de produtos de cliente."                : " " : "D",
                    "~T~ransferencia    - Transferˆncia entre Matriz/Filiais."              : " " : "T",
                    "~S~air            " : ""                                                     : "CANCELAR"

                   EndMenu
                    To MenuVar
                   Echo Off

                   If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                       Then []=MenuVar
                   EndIf
           EndIf
           
           If Field()="Inf_Rateios Itens"
              Then 
                   MSGCAMPO=""
                   Echo Normal
                   Echo Off
                   
                   ShowPopup "Rateio nos Itens [Apenas Valores Cont beis]" CENTERED
                   "~A~utom tico - Calcula os rateios cont beis de Frete, Seguro,  " : " " : "1",
                   "             Desconto e Despesas nos itens automaticamente.    " : " " : "1",
                   "~M~anual     - Permite digitar os rateios cont beis de Frete,  " : " " : "2",
                   "             Seguro, Desconto e Despesas nos itens manualmente." : " " : "2",
                   "~S~air        " : " " : "CANCELAR"
                   
                   EndMenu
                   To MenuVar
                   Echo Off
                   
                   If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                       Then []=MenuVar
                   EndIf                                                    
                   
           EndIf
           
           If Field()="Tipo de NF"
              Then If SubStr([Codigo do Documento],1,2)<>"CT"
                      Then 
                           MSGCAMPO=""
                           Echo Normal
                           Echo Off
                      
                           ShowPopup " Tipo " CENTERED
                           "~N~ormal       " : " Nota Fiscal Normal."       : "N",
                           "~E~xtemporanea " : " Nota Fiscal Extemporanea." : "E",
                           "~C~omplemento  " : " Nota Fiscal Complementar." : "C",
                           "~S~air         " : " Ignorar op‡äes"            : "CANCELAR"
                           
                           EndMenu
                           To MenuVar
                           Echo Off
                           
                           If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                               Then []=MenuVar
                           EndIf                                                    
                           
                           Switch
                             Case [Tipo de NF] = "N" : [Descricao Tipo NF]="NORMAL"  
                             Case [Tipo de NF] = "E" : [Descricao Tipo NF]="EXTEMPORANEA"
                             Case [Tipo de NF] = "C" : [Descricao Tipo NF]="COMPLEMENTO"
                           EndSwitch
                      Else 
                           MSGCAMPO=""
                           Echo Normal
                           Echo Off
                      
                           ShowPopup " Tipo " CENTERED
                           "~0~ - CT-e Normal            " : " CT-e Normal."                    : "0",
                           "~1~ - Complemento de Valores " : " CT-e de Complemento de Valores." : "1",
                           "~2~ - Anula‡Æo de Valores    " : " CT-e de Anula‡Æo de Valores."    : "2",
                           "~3~ - CT-e Substituto        " : " CT-e Substituto."                : "3",
                           "~S~air                       " : " Ignorar op‡äes"            : "CANCELAR"
                           
                           EndMenu
                           To MenuVar
                           Echo Off
                           
                           If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                               Then []=MenuVar
                           EndIf                                                    
                           
                           Switch
                             Case [Tipo de NF] = "0" : [Descricao Tipo NF]="NORMAL"  
                             Case [Tipo de NF] = "1" : [Descricao Tipo NF]="COMPLEMENTO"
                             Case [Tipo de NF] = "2" : [Descricao Tipo NF]="ANULACAO"
                             Case [Tipo de NF] = "3" : [Descricao Tipo NF]="SUBSTITUTO"
                           EndSwitch
                   EndIf
           EndIf        
           
           If Field()="Natureza do Frete"
              Then  
                   MSGCAMPO=""
                   Echo Normal
                   Echo Off
              
                   ShowPopup " Natureza do Frete " CENTERED
                    "~0~ : Vendas - com “nus suportado pelo estabelecimento vendedor.    " : " " : "0",  
                     Separator,             
                    "~1~ : Vendas - com “nus suportado pelo adquirente.                  " : " " : "1",
                     Separator,  
                    "~2~ : Compras - (bens p/ revenda, mat‚rias-prima, e outros,         " : " " : "2", 
                    "    geradores de cr‚dito.                                           " : " " : "2", 
                     Separator,
                    "~3~ : Compras - (bens p/ revenda, mat‚rias-prima, e outros,         " : " " : "3",
                    "    n„o geradores de cr‚dito                                        " : " " : "3",
                     Separator,
                    "~4~ : Transferˆncia de produtos acabados entre estabelecimentos     " : " " : "4",
                    "    da pessoa jur¡dica                                              " : " " : "4",
                     Separator,
                    "~5~ : Transferˆncia de produtos em elabora‡„o entre estabelecimentos" : " " : "5", 
                    "    da pessoa jur¡dica                                              " : " " : "5", 
                     Separator,
                    "~9~ : Outras                                                        " : " " : "9",
                     Separator,              
                    "~S~air                                                              " : " Ignorar op‡äes" : "CANCELAR"

                   EndMenu
                    To MenuVar
                   Echo Off

                   If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                       Then []=MenuVar                            
                   EndIf
                   
                   Verifica_Natureza_Frete()
                   
           EndIf
     
           If Field()="Tipo CTR"
              Then FreteporConta()
           EndIf   
             
           If Field()="Recolhimento Substituicao"
              Then
                     MSGCAMPO=""
                     Echo Normal
                     Echo Off
                     
                     ShowPopup " Op‡”es " Centered
                      " ~0~ Opera‡„o sem substitui‡Æo tribut ria.                            " : " " : "0",
                      " ~1~ Recolhimento substitui‡Æo tribut ria integral pelo Emitente.     " : " " : "1",
                       Separator,
                      " ~2~ Pagamento de substitui‡Æo tribut ria efetuada pelo Destinat rio, " : " " : "2",
                      "   quando nÆo efetuada ou efetuada a menor pelo substituto.           " : " " : "2",
                       Separator,
                      " ~3~ Antecipa‡Æo tribut ria efetuada pelo Destinat rio,               " : " " : "3",
                      "   apenas com complementa‡Æo do diferencial de al¡quota.              " : " " : "3",
                       Separator,
                      " ~4~ Antecipa‡Æo tribut ria com MVA (Margem de Valor Agregado),       " : " " : "4",
                      "   efetuada pelo Destinat rio,sem encerrar a fase de tributa‡Æo.      " : " " : "4",
                       Separator,
                      " ~5~ Antecipa‡Æo tribut ria com MVA (Margem de Valor Agregado),       " : " " : "5",
                      "   efetuada pelo Destinat rio encerrando a fase de tributa‡Æo.        " : " " : "5",
                       Separator,
                      "~S~air                                                                " : " Ignorar op‡äes " : "CANCELAR"
      
                     EndMenu
                     To MenuVar
                     Echo Off
                     If MenuVar<>"Esc"
                        Then [Recolhimento Substituicao]=MenuVar
                     EndIf
           EndIf
      Case Retval="F8" Or Retval=-66:     
           If SubStr([NotaEc->Tipo do Documento],1,2) = "CT"
              Then CT_CidOriDest()           
                   Loop
              Else FastMsg("Cidade de Origem e Destino para Conhecimento de Transporte")     
           EndIf        
      Case Retval="F7":
           Play "FT_NFER"
           Loop
           
      Case RetVal="PGDN":
           If Not IntervaloData([Data de Entrada])
              Then Loop
           EndIf

           If CHECA_DIGITAC()
              Then ALIQ_ICMS()
                   QuitLoop
           EndIf
      Case Retval="DEL":
           If CHAVEC=0 And Checa_Supervisor()
              Then If QuerExcluir("deste lan‡amento")
                      Then GRAVA_LOG = True
                           EXCLUSAO_C()
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="F9" And CHAVEC=0:
           If SYS_CODIGO_CLIENTE="0117" Or
              SYS_CODIGO_CLIENTE="0334"    
              Then Moveto [Codigo do Documento]
              Else If Checa_Supervisor()
                      Then Moveto [Codigo do Documento]
                   EndIf
           EndIf

      Case Retval="F6":
           If IMPRIME()
              Then CHAVEC=9
                   QuitLoop
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Empresa": 
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then EXCLUSAO_C()
                           else copyfromarray REG_NOTAEC
                        EndIf
                        CHAVEC=9
                        QuitLoop
                EndIf
           Case Field()="Numero da OC"        : Moveto [Codigo da Empresa]

           Case Field()="Data de Entrada":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then copyfromarray REG_NOTAEC
                                CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data de Emissao]
                EndIf
           ;Case Field()="Codigo do Documento"      : Moveto [Tipo de NF               ]
           Case Field()="Codigo do Documento"      : Moveto [Tipo de Operacao         ]
           Case Field()="Serie do Documento"       : Moveto [Codigo do Documento      ]
           ;Case Field()="Tipo de NF"               : Moveto 
           Case Field()="CFO":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then copyfromarray REG_NOTAEC
                                CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data de Entrada]
                EndIf
           Case Field()="Chave_Acesso_NFe"         : Moveto [Codigo do Documento      ]  
           Case Field()="Codigo"                   : Moveto [CFO                      ]
           Case Field()="CGC"                      : Moveto [Codigo                   ]
           Case Field()="Valor BCICMS"             : Moveto [Codigo                   ]
           Case Field()="Valor ICMS"               : Moveto [Valor BCICMS             ]
           Case Field()="Valor BCSubstituicao ICMS": Moveto [Valor ICMS               ]
           Case Field()="Valor Substituicao ICMS"  : Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Servico"            : Moveto [Valor Substituicao ICMS  ]
           Case Field()="Valor BCISSQN"            : Moveto [Valor Servico            ]
           Case Field()="Valor ISSQN"              : Moveto [Valor BCISSQN            ]
           Case Field()="Valor Mercadoria"         : Moveto [Valor ISSQN              ]
           Case Field()="Valor do Frete"           : Moveto [Valor Mercadoria         ]
           Case Field()="Valor do Seguro"          : Moveto [Valor do Frete           ]
           Case Field()="Valor Desconto"           : Moveto [Valor do Seguro          ]
           Case Field()="Valor Despesas Acessorias": Moveto [Valor Desconto           ]
           Case Field()="Valor IPI"                : Moveto [Valor Despesas Acessorias]
           Case Field()="Valor Desconto NTributado": Moveto [Valor IPI                ]
           Case Field()="Valor FCP_Ret_ST"         : Moveto [Valor Desconto NTributado]
           Case Field()="Valor Nota Fiscal"        : Moveto [Valor FCP_Ret_ST         ]
           Case Field()="Valor Acrescimos_Desctos" : Moveto [Valor Nota Fiscal        ]
           Case Field()="Inf_Rateios Itens"        : Moveto [Valor Acrescimos_Desctos ]
           Case Field()="Recolhimento Substituicao": Moveto [Inf_Rateios Itens        ]
           Case Field()="BC Substituicao Destinat" : Moveto [Recolhimento Substituicao]
           Case Field()="Vr Substituicao Destinat" : Moveto [Recolhimento Substituicao]
           Case Field()="Natureza do Frete"        : Moveto [Recolhimento Substituicao]
           Case Field()="Data de Emissao"          : Moveto [Tipo de NF               ]
           Case Field()="Tipo CTR"                 : If Verifica_Natureza_Frete()
                                                        Then Moveto [Natureza do Frete]
                                                        Else Moveto [Recolhimento Substituicao]
                                                     EndIf
           Case Field()="Numero Nota Original":
                If CHAVEC=1
                   Then [Sistema Gerador]=""
                EndIf
                Moveto [CFO]
           Case Field()="Comissao do Representante": Moveto [Codigo do Representante  ]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER": 
           If IsBlank([])
              Then If Field()="Codigo da Empresa"   Or
                      Field()="Tipo de Operacao"    Or
                      Field()="Codigo do Documento" Or
                      Field()="Numero do Documento" Or
                      Field()="Codigo"  Or
                      Field()="CFO"     Or
                      Field()="CGC"
                      Then Loop
                   EndIf
                   
                   Switch
                     Case Field()="Chave_Acesso_NFe" : FastMSg("Informe Chave de Acesso, OBRIGATORIO!")
                                                       Loop
                   EndSwitch 
           EndIf
           Switch
           Case Field()="Codigo da Empresa":
            If Not Checa_Opcoes("Empresas",[])
               Then Mensagem("Empresa inv lida !")
                    Loop     
               Else If Not Carrega_Parametros()
                       Then EXCLUSAO_C()
                            CHAVEC=9
                            QuitLoop
                       Else Moveto [Numero da OC]
                    EndIf
            EndIf
           Case Field()="Numero da OC": 
                If not IsBlank([])
                   Then If [Numero da OC]<>V_NOC
                           Then V_NOC=[Numero da OC]
                           
                                getrecord "\\sistemas\\compras\\occ" [NotaEC->Numero da OC    ] to regocc
                                if not retval
                                   then fastmsg("OC nÆo localizada !")
                                        loop
                                   else 
                                        [Codigo               ]=regocc["Codigo"]
                                        [CFO                  ]=regocc["CFO"]
                                        [Tipo de Pagamento    ]=regocc["Tipo de Pagamento"]
                                        [Frete Incluso na Nota]=regocc["Frete INcluso na Nota"]
                                        [Tipo de Operacao     ]="C"       

                                        If regocc["Situacao da OC"]<>"ABERTO"
                                           Then fastmsg("Verificar a Situa‡„o da Ordem de Compra !//Status="+regocc["Situacao da OC"])
                                                Loop
                                        EndIf
                                endif
                                release vars regocc
                        EndIf   
                EndIf
                Moveto [Tipo de Operacao]
           Case Field()="Tipo de Operacao": 
                Moveto [Codigo do Documento]     
           Case Field()="Codigo do Documento":
                If Not Checa_Opcoes("Codigo do Documento",[])
                   Then [Tipo do Documento    ]=""
                        [Serie do Documento   ]=""
                        [SubSerie do Documento]=""
                        [Numero do Documento  ]=""
                        Mensagem("Codigo do Documento Inv lido !")
                        Loop
                EndIf  
                Switch
                  Case [Codigo do Documento]="CT-E" Or
                       [Codigo do Documento]="NF-E" Or
                       [Codigo do Documento]="NFE0" Or
                       [Codigo do Documento]="NFE1" Or
                       [Codigo do Documento]="NFE2" Or
                       [Codigo do Documento]="NFE3" Or
                       [Codigo do Documento]="NFE9" Or
                       [Codigo do Documento]="NFAE" Or
                       [Codigo do Documento]="NFCE": Moveto [Chave_Acesso_NFe  ]
                  OtherWise                        : Moveto [Serie do Documento]
                EndSwitch
           Case Field()="Numero do Documento":
               ;; If Len([Numero do Documento])>6
               ;;    Then Mensagem("O Sintegra s¢ aceita os £ltimos 6 d¡gitos a direita de um documento! // //Corrigir !")
               ;;         Loop
               ;; EndIf   
                Moveto [Tipo de NF]
           Case Field()="Tipo de NF":
                If IsBlank([Tipo de NF])
                   Then If SubStr([Codigo do Documento],1,2)<>"CT"
                           Then [Tipo de NF]= "N"
                           Else [Tipo de NF]= "0"
                        EndIf
                  ; Else If SubStr([Codigo do Documento],1,2)<>"CT"
                  ;         Then If [Tipo de NF]<> "N" And [Tipo de NF]<> "E"
                  ;                 Then [Tipo de NF]= "N"
                  ;              EndIf
                  ;         Else [Tipo de NF]= "0"
                  ;      EndIf
                EndIf
                
                If (SubStr([Codigo do Documento],1,2)="CT" And Type(Numval([Tipo de NF]))<>"N") Or
                   (SubStr([Codigo do Documento],1,2)<>"CT" And Type(Numval([Tipo de NF]))="N")
                   Then Mensagem("Tipo de Documento inv lido")
                   Else MSG=""
                        Switch
                             Case [Tipo de NF] = "N" : [Descricao Tipo NF]="NORMAL"                  
                             Case [Tipo de NF] = "E" : [Descricao Tipo NF]="EXTEMPORANEA"
                             Case [Tipo de NF] = "C" : [Descricao Tipo NF]="COMPLEMENTO"
                             Case [Tipo de NF] = "0" : [Descricao Tipo NF]="NORMAL"  
                             Case [Tipo de NF] = "1" : [Descricao Tipo NF]="COMPLEMENTO"
                             Case [Tipo de NF] = "2" : [Descricao Tipo NF]="ANULACAO"
                             Case [Tipo de NF] = "3" : [Descricao Tipo NF]="SUBSTITUTO"
                             otherwise               : MSG = "Tipo de Documento inv lido"
                                          
                        EndSwitch
                        
                       IF MSG="" 
                          Then Moveto [Data de Emissao] 
                          Else Mensagem(MSG) 
                       EndIF
                EndIF 
                  
           Case Field()="Data de Emissao":
                If IsBlank([])
                   Then []=Today()
                EndIf
                Right
           Case Field()="Data de Entrada":
                If IsBlank([])
                   Then []=Today()
                EndIf
                If [Data de Entrada]<[Data de Emissao]
                   Then Mensagem("Data de Entrada menor que a de Emiss„o !")
                        Loop
                EndIf

                If Not IntervaloData([Data de Entrada])
                   Then Loop
                EndIf

                If Not IsBlank(DATAENT_ANT)
                   Then If [Data de Entrada]<>DATAENT_ANT
                           Then Moveto "NotaEI"
                                Moveto [Sequencia do Lancamento]
                                If RecordStatus("New")=False
                                   Then DATAOk=True
                                        If Year([NotaEC->Data de Entrada])<>Year(DATAENT_ANT)
                                           Then DATAOk=False
                                           Else If Month([NotaEC->Data de Entrada])<>Month(DATAENT_ANT)
                                                   Then DATAOk=False
                                                EndIf
                                        EndIf
                                        MSG="J  existem itens lan‡ados nesta nota !//"
                                        MSG=MSG+"Repass -los p/ corrigir esta data !"
                                        If Not DATAOk
                                           Then MSG=MSG+"// //O reprocessamento com transferencia //"
                                                MSG=MSG+"dever  ser executado p/ corrigir o Estoque !//"
                                        EndIf
                                        Mensagem(MSG)
                                EndIf
                                Moveto "NotaEC"
                                Moveto [Data de Entrada]
                        EndIf
                EndIf

                DATAENT_ANT=[Data de Entrada]
                Right
           Case Field()="CFO":
                If Chavec=1
                   Then If Cliente_Inativo()
                           Then Loop
                        EndIf   
                EndIf    
                
                If NumVAl(SubStr([CFO],1,1))>4
                   Then Mensagem("CFO Invalido !")
                        Loop
                EndIf

                If [Tipo de Operacao]="D"    
                   Then Moveto [Numero Nota Original]
                   Else If CHAVEC=1
                           Then If Not IsBlank([Numero da OC])
                                   Then If CHECA_DUPLICIDADE()
                                           Then Mensagem(MENS_DUPLICIDADE)
                                                Moveto [Codigo do Documento]
                                           Else Moveto [Valor BCICMS] 
                                        EndIf
                                   Else If Not IsBlank([Codigo])
                                           Then If CHECA_DUPLICIDADE()
                                                   Then Mensagem(MENS_DUPLICIDADE)
                                                        Moveto [Codigo do Documento]
                                                   Else Moveto [Valor BCICMS] 
                                                EndIf
                                           Else Moveto [CGC]
                                        EndIf
                                EndIf
                           Else Moveto [Codigo]
                        EndIf
                EndIf
           Case Field()="Chave_Acesso_NFe":
                
                Switch
                  Case [Codigo do Documento]="CT-E" Or
                       [Codigo do Documento]="NF-E" Or
                       [Codigo do Documento]="NFE0" Or
                       [Codigo do Documento]="NFE1" Or
                       [Codigo do Documento]="NFE2" Or
                       [Codigo do Documento]="NFE3" Or
                       [Codigo do Documento]="NFAE" Or
                       [Codigo do Documento]="NFE9" Or
                       [Codigo do Documento]="NFCE":
                       
                     If Len([Chave_Acesso_NFe])<44
                        Then Mensagem("A Chave de Acesso deve possuir 44 digitos! // //Corrigir !")
                             Loop
                     EndIf
                    [Numero do Documento]=StrVal(NumVal(SubStr([Chave_Acesso_NFe],26,09)))
                    If Len([Numero do Documento])<6
                       Then [Numero do Documento]=AlinhM([Numero do Documento],6)
                    EndIf
                    [Serie do Documento ]=StrVal(NumVal(SubStr([Chave_Acesso_NFe],23,03)))
                    
                    [CGC                ]=SubStr([Chave_Acesso_NFe],07,02)+"."+
                                          SubStr([Chave_Acesso_NFe],09,03)+"."+
                                          SubStr([Chave_Acesso_NFe],12,03)+"/"+
                                          SubStr([Chave_Acesso_NFe],15,04)+"-"+
                                          SubStr([Chave_Acesso_NFe],19,02)
                    If not Checa_CGC_CPF_Formatado([CGC])
                       Then [CGC]=""
                            loop
                    EndIf

                    If [Codigo do Documento]<>"NFAE" 
                       Then
                         CGC_OK=True
                         Moveto [Codigo]
                         Ativa_Lookup()
                         Moveto [CGC]
                         Locate IndexOrder by "CGC" [NotaEC->CGC]
                         If Not RetVal
                            Then CGC_OK=False
                            Else CODIGO_CLIENTE=[Codigo]
                         EndIf
                         KeyPress "ESC"
                         If CGC_OK
                            Then [Codigo]=CODIGO_CLIENTE
                                 [Codigo do Representante]=""
                                 [Nome Fantasia Represent]=""
                                 If [Tipo de Operacao]="D"
                                    Then [Codigo do Representante]=CODREP
                                 EndIf
                                 V_FORN=[Codigo]
                                 V_CGC =[CGC]
    
                                 If [Codigo do Documento]="NF-E"
                                    Then Moveto [Valor BCICMS]
                                 EndIf   
                            Else Mensagem("Emitente n„o encontrado pelo CGC !")
                         EndIf
                     EndIf
                     Moveto [Tipo de NF]
                  Case [Codigo do Documento]="NFAE" :
                       If Len([Chave_Acesso_NFe])<44
                          Then Mensagem("A Chave de Acesso deve possuir 44 digitos! // //Corrigir !")
                               Loop
                       EndIf   
                       Moveto [Serie do Documento]
                  OtherWise:
                    If [Tipo de Operacao]="D" Or
                       SubStr([Codigo do Documento],1,2)="CT"   
                       Then Moveto [Serie do Documento]
                       Else If CHAVEC=1
                               Then If Not IsBlank([Numero da OC])
                                       Then If CHECA_DUPLICIDADE()
                                                Then Mensagem(MENS_DUPLICIDADE)
                                                     Moveto [Codigo do Documento]
                                                Else Moveto [Valor BCICMS] 
                                            EndIf
                                       Else Moveto [Serie do Documento]
                                    EndIf   
                            EndIf
                    EndIf
                EndSwitch
                
           Case Field()="CGC":   
                If Not Checa_CGC_CPF_Formatado([CGC])
                   Then Loop
                EndIf
                If [CGC]<>V_CGC
                   Then V_CGC=[CGC]
                     CGC_OK=True
                     Moveto [Codigo]
                     Ativa_Lookup()
                     Moveto [CGC]
                     Locate IndexOrder by "CGC" [NotaEC->CGC]
                     If Not RetVal
                        Then CGC_OK=False
                        Else CODIGO_CLIENTE=[Codigo]
                     EndIf
                     KeyPress "ESC"
                     If CGC_OK
                        Then [Codigo]=CODIGO_CLIENTE
                             [Codigo do Representante]=""
                             [Nome Fantasia Represent]=""
                             If [Tipo de Operacao]="D"
                                Then [Codigo do Representante]=CODREP
                             EndIf
                             V_FORN=[Codigo]
                             If CHECA_DUPLICIDADE()
                                Then Mensagem(MENS_DUPLICIDADE)
                                     Moveto [Codigo do Documento]
                                Else Moveto [Valor BCICMS] 
                             EndIf
                        Else Mensagem("Emitente n„o encontrado pelo CGC !")
                             Moveto [Codigo]
                     EndIf
                   Else If CHECA_DUPLICIDADE()
                           Then Mensagem(MENS_DUPLICIDADE)
                                Moveto [Codigo do Documento]
                           Else Moveto [Valor BCICMS] 
                        EndIf
                EndIf
                If Chavec=1
                   Then If Cliente_Inativo()
                           Then Moveto [CGC] 
                                Loop
                        EndIf   
                EndIf 
           Case Field()="Codigo":
                If Chavec=1
                   Then If Cliente_Inativo()
                           Then Loop
                        EndIf   
                EndIf    
                If [Codigo]<>V_FORN
                   Then V_FORN=[Codigo]
                        [Codigo do Representante]=""
                        [Nome Fantasia Represent]=""
                        If [Tipo de Operacao]="D"
                           Then [Codigo do Representante]=CODREP
                        EndIf
                EndIf
                If CHECA_DUPLICIDADE()
                   Then Mensagem(MENS_DUPLICIDADE)
                        Moveto [Codigo do Documento]
                   Else Moveto [Valor BCICMS] 
                EndIf

           Case Field()="Valor BCICMS"             : Moveto [Valor ICMS               ]
           Case Field()="Valor ICMS"               : Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor BCSubstituicao ICMS": Moveto [Valor Substituicao ICMS  ]
           Case Field()="Valor Substituicao ICMS"  : Moveto [Valor Servico            ]
           Case Field()="Valor Servico"            : Moveto [Valor BCISSQN            ]
           Case Field()="Valor BCISSQN"            : Moveto [Valor ISSQN              ]
           Case Field()="Valor ISSQN"              : Moveto [Valor Mercadoria         ]
           Case Field()="Valor Mercadoria"         : Moveto [Valor do Frete           ]
           Case Field()="Valor do Frete"           : Moveto [Valor do Seguro          ]
                If [Valor do Frete]>0 
                   Then [Frete Incluso na Nota]="+"
                   Else [Frete Incluso na Nota]=""
                EndIf   
           Case Field()="Valor do Seguro"          : Moveto [Valor Desconto           ]
           Case Field()="Valor Desconto"           : Moveto [Valor Despesas Acessorias]
                [Valor Mercadoria Liquido ]=[Valor Mercadoria]-[Valor Desconto]
           Case Field()="Valor Despesas Acessorias": Moveto [Valor IPI                ]
           Case Field()="Valor IPI"                : Moveto [Valor Desconto NTributado]
           
           Case Field()="Valor Desconto NTributado": Moveto [Valor FCP_Ret_ST         ]
           Case Field()="Valor FCP_Ret_ST"         : Moveto [Valor Nota Fiscal        ]
           
           Case Field()="Valor Nota Fiscal"        : Moveto [Valor Acrescimos_Desctos ]
              VRNOTA      =[Valor Mercadoria Liquido]+[Valor IPI                ]+
                           [Valor Despesas Acessorias]+
                           [Valor Substituicao ICMS ]+[Valor do Seguro          ]+
                           [Valor do Frete          ]+[Valor Servico            ]+
                           [Valor FCP_Ret_ST        ]-[Valor Desconto NTributado]

              If IsBlank([Valor Nota Fiscal]) Then [Valor Nota Fiscal]=0 EndIf
              If IsBlank(VRNOTA)              Then VRNOTA=0              EndIf
             
              If Format("W12.2,EIC",[Valor Nota Fiscal])<>Format("W12.2,EIC",VRNOTA)
                 Then MSG="Valor nota fiscal digitada difere do calculado !// //"
                      MSG=MSG+"Digitado ="+Format("W12.2,EIC,AL",[Valor Nota Fiscal])+"//"
                      MSG=MSG+"Calculado="+Format("W12.2,EIC,AL",VRNOTA             )+"// //"
                      MSG=MSG+"Corrija os dados antes de processeguir !!"
                      Mensagem(MSG)
              EndIf

              If IsBlank([Recolhimento Substituicao])
                 Then If [Valor Substituicao ICMS  ]>0
                         Then [Recolhimento Substituicao]="1"
                      EndIf
              EndIf            

           Case Field()="Valor Acrescimos_Desctos" : 
                Moveto [Inf_Rateios Itens]
           Case Field()="Inf_Rateios Itens"        : 
                If IsBlank([])
                   Then []="1"
                EndIf
                Moveto [Recolhimento Substituicao]
                
           
           Case Field()="Recolhimento Substituicao":
                If IsBlank([])
                   Then []="0"
                EndIf
                If []="0" Or []="1"
                   Then 
                        [BC Substituicao Destinat ]=BlankNum()
                        [Vr Substituicao Destinat ]=BlankNum()
                        
                        If Verifica_Natureza_Frete()
                           Then Moveto [Natureza do Frete]
                           Else Moveto [Tipo CTR]
                        EndIf
                        
                   Else Moveto [BC Substituicao Destinat]
                EndIf        
           Case Field()="BC Substituicao Destinat" : Moveto [Vr Substituicao Destinat ]
           Case Field()="Vr Substituicao Destinat" : If Verifica_Natureza_Frete()
                                                        Then Moveto [Natureza do Frete]
                                                        Else Moveto [Tipo CTR]
                                                     EndIf
                                                     
            Case Field()="Natureza do Frete"       : 
                 If Verifica_Natureza_Frete()
                    Then If IsBlank([])
                            Then Loop
                            Else Moveto [Tipo CTR]      
                         EndIf
                    Else Moveto [Tipo CTR]      
                 EndIf                             
           Case Field()="Tipo CTR":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                
                switch
                  case sys_codigo_cliente="0377" and 
                      [Tipo de Operacao]="C"     
                                                 : moveto [Codigo da Tabela]
                                                 
                  otherwise                      : Moveto [Flag]
                endswitch
                
           Case Field()="Flag":
                If CHECA_DIGITAC()
                   Then ALIQ_ICMS()
                        QuitLoop
                EndIf

           Case Field()="Numero Nota Original":
                []=ALINH()
                Right
           Case Field()="Serie Nota Original":  

                If [Numero Nota Original]<>"000000"
                   Then
                        getrecord "\\sistemas\\vendas\\notac" [NotaEC->Codigo da Empresa   ],
                                                              [NotaEC->Numero Nota Original],
                                                              [NotaEC->Serie Nota Original ] to regnotac
                        if retval
                           then                                      
                                CODREP    =regnotac["Codigo do Representante"]
                                NEXPEDICAO=regnotac["Numero da Expedicao"    ]
                                
                                MSG="Nosso documento "+regnotac["Tipo do Documento"]+"/"+regnotac["Numero do Documento"]+"-"+regnotac["Serie do Documento"]+" //"+
                                         Completa(" Pessoa: "+regnotac["Razao Social"]                         ,50," ")+" //"+
                                         Completa("Emissao: "+Format("D13",regnotac["Data de Emissao"])        ,50," ")+" //"+
                                         Completa("  Valor: "+Format("W11.2,EIC",regnotac["Valor Nota Fiscal"]),50," ")
                                Mensagem(MSG) 
                                
                                If [Tipo de Operacao]="D"
                                   Then 
                                        [Codigo                   ]=regnotac["Codigo"]
                                        [Codigo do Representante  ]=regnotac["Codigo do Representante"]
                                        [Comissao do Representante]=regnotac["Comissao do Representante"]
                                        [Codigo da Tabela         ]=regnotac["Codigo da Tabela"]
                                        
                                        [Inf_Rateios Itens        ]="1"
                                        [Recolhimento Substituicao]="0"
                                        [Tipo CTR                 ]="0"
                                        [Tipo de Pagamento        ]="O"
                                EndIf
                                
                           Else fastmsg("Nosso documento nÆo encontrado !")
                        EndIf
                        release vars regnotac
                        
                EndIf   
                Moveto [Serie Nota Original]
                Right
                
           Case Field()="Numero_Carregamento":
                Right
                
           Case Field()="Codigo da Tabela":
                switch
                  case sys_codigo_cliente="0377" and 
                      [Tipo de Operacao]="C"     
                                                 : moveto [Flag]
                                                 
                  otherwise                      : Right
                endswitch
                
           Case Field()="Codigo do Representante":
                CODREP=[Codigo do Representante]
                If IsBlank(CODREP) and [Tipo de Operacao]="D"
                   Then Mensagem("C¢digo do Representante Obrigat¢rio")
                   Else Moveto [Comissao do Representante]
                EndIf
                
           Case Field()="Comissao do Representante":
                Moveto [Codigo]
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para checar digita‡Æo de duplicidade de notas                        *
;*******************************************************************************
Proc CHECA_DUPLICIDADE()
Private CONS_CGC, CONS_NDOC, CONS_CDOC, CONS_TDOC, CONS_SDOC, NAO_FAZ

NAO_FAZ=False

UnLockRecord
FormKey

CONS_CGC   =[CGC                ]
CONS_NDOC  =[Numero do Documento]
CONS_CDOC  =[Codigo do Documento]
CONS_TDOC  =[Tipo do Documento  ]
CONS_SDOC  =[Serie do Documento ]
CONS_PESSOA=[Codigo             ]

Home 
Moveto [CGC]
Locate IndexOrder by "Notaec02" CONS_CGC, CONS_NDOC, CONS_CDOC, CONS_TDOC, CONS_SDOC 
If RetVal
   Then MENS_DUPLICIDADE=""
        While CONS_CGC =[CGC                ] And 
              CONS_NDOC=[Numero do Documento] And
              CONS_CDOC=[Codigo do Documento] And
              CONS_TDOC=[Tipo do Documento  ] And
              CONS_SDOC=[Serie do Documento ] 
              If [Numero do Lancamento]<>LANCTO
                Then If SYS_CODIGO_CLIENTE="0358"
                       Then If CONS_PESSOA<>[Codigo]
                               Then QuitLoop
                            EndIf 
                     EndIf   
                     MENS_DUPLICIDADE="Documento "+CONS_CDOC+" "+CONS_TDOC+" "+CONS_SDOC+" "+CONS_NDOC+" j  esta lan‡ado no sistema !//"+
                                      "Numero do Lancamento: "+[Numero do Lancamento]
                     NAO_FAZ=True
                     QuitLoop
              EndIf
              Skip
              If Eot() Then QuitLoop EndIf
              Locate Next IndexOrder by "Notaec02" CONS_CGC, CONS_NDOC, CONS_CDOC, CONS_TDOC, CONS_SDOC 
              If Not RetVal Then QuitLoop EndIf
        EndWhile
EnDIf

Moveto [Numero do Lancamento]
Locate LANCTO

UnLockRecord
FormKey
LockRecord

If NAO_FAZ
   Then Return True
   Else Return False
EndIf    

EndProc ;CHECA_DUPLICIDADE()

;*******************************************************************************
;* Rotina para Checagem DigitaC                                                *
;*******************************************************************************
Proc CHECA_DIGITAC()
Private Checa_Validade

NCAMPO=Field()

Checa_Validade=False
Switch
  Case IsBlank([Codigo da Empresa])    : Mensagem("Empresa invalida !")
  Case IsBlank([Tipo de Operacao])     : Mensagem("Opera‡„o invalida !")
  Case IsBlank([Codigo do Documento])  : Mensagem("Tipo documento invalido !")
  Case IsBlank([Numero do Documento])  : Mensagem("Numero documento invalido !")
  Case IsBlank([Data de Emissao])      : Mensagem("Data de emissao invalida !")
  Case IsBlank([Data de Entrada])      : Mensagem("Data de entrada invalida !")
  Case IsBlank([CFO])                  : Mensagem("CFOP invalido !")
  Case IsBlank([Codigo])               : Mensagem("Emitente invalido !")
  Case IsBlank([CGC])                  : Mensagem("CGC/CPF invalido !")
  Case IsBlank([UF])                   : Mensagem("Estado invalido !")
;  Case IsBlank([Valor Mercadoria])     : Mensagem("Valor mercadoria invalida !")
;  Case IsBlank([Valor Nota Fiscal])    : Mensagem("Valor nota fiscal invalida !")
  Case IsBlank([Codigo do Representante]) And [Tipo de Operacao]="D":
       Mensagem("Representante invalido !")
  Case NumVal(SubStr([CFO],1,1))>4     : Mensagem("CFOP invalido !")
  Case IsBlank([Natureza do Frete]) And
       Verifica_Natureza_Frete()       : Mensagem("Natureza do Frete Inv lido !")                        
  Case IsBlank([Tipo CTR])             : Mensagem("Frete por conta invalido !")
  OtherWise: 
    Checa_Validade=True                          
    
    ;*** Checagem da Unidade Federativa c/ CFO ***
    UFD        =""
    TPEMPR     ="??"
    ATIVEMPRESA="??"
    empresa_regimetributario="??"
    AICMSUFD=BlankNum()

    Moveto [Codigo da Empresa]
    Ativa_Lookup()
    Moveto [Codigo da Empresa]
    Locate [NotaEC->Codigo da Empresa]
    If RetVal
       Then UFD        =[UF Empresa       ]
            TPEMPR     =[Tipo da Empresa  ]
            ATIVEMPRESA=[Atividade        ]
            empresa_regimetributario=[Tributacao_Regime]
            
            If SubStr([NotaEC->Codigo do Documento],1,2)<>"CT"
               then            
                    Switch
                      Case (SubStr([NotaEC->CFO],1,1)="1" And [NotaEC->UF]<>[UF Empresa]):
                           MSG="O estado \""+[NotaEC->UF]+"\" de origem usado p/ o CFOP \""+[NotaEC->CFO]+
                               "\"// ‚ diferente da sua Empresa \""+[UF Empresa]+"\" ! "
                           MSG=MSG+"// //Tenha certeza que esta situa‡„o ‚ realmente correta ou n„o !!"
                           Mensagem(MSG)
                      Case (SubStr([NotaEC->CFO],1,1)="2" And [NotaEC->UF]=[UF Empresa]):
                           MSG="O estado \""+[NotaEC->UF]+"\" de origem usado p/ o CFOP \""+[NotaEC->CFO]+
                               "\"// ‚ igual a sua Empresa \""+[UF Empresa]+"\" ! "
                           MSG=MSG+"// //Tenha certeza que esta situa‡„o ‚ realmente correta ou n„o !!"
                           Mensagem(MSG)
                    EndSwitch
            endif
    EndIf
    KeyPress "ESC"

    If Not Checa_CGC_CPF_Formatado([CGC])
       Then Checa_Validade=False
    EndIf

    If ([Valor BCSubstituicao ICMS]>0 Or
        [Valor Substituicao ICMS  ]>0) And                            
        [Recolhimento Substituicao]<"1"
       Then Checa_Validade=False
            Mensagem("Tipo recolhimento substitui‡Æo inv lido !//Valores substitui‡Æo maior que ZERO !")
    EndIf            

EndSwitch


If [Valor do Frete]>0 
  Then [Frete Incluso na Nota]="+"
  Else [Frete Incluso na Nota]=""
EndIf   

[Valor Mercadoria Liquido ]=[Valor Mercadoria]-[Valor Desconto]

VRNOTA      =[Valor Mercadoria Liquido ]+[Valor IPI                ]+
             [Valor Despesas Acessorias]+
             [Valor Substituicao ICMS  ]+[Valor do Seguro          ]+
             [Valor do Frete           ]+[Valor Servico            ]+
             [Valor FCP_Ret_ST         ]-[Valor Desconto NTributado]

If IsBlank([Valor Nota Fiscal]) Then [Valor Nota Fiscal]=0 EndIf
If IsBlank(VRNOTA)              Then VRNOTA=0              EndIf
             
If Format("W12.2,EIC",[Valor Nota Fiscal])<>Format("W12.2,EIC",VRNOTA)
   Then MSG="Valor nota fiscal digitada difere do calculado !// //"
        MSG=MSG+"Digitado ="+Format("W12.2,EIC,AL",[Valor Nota Fiscal])+"//"
        MSG=MSG+"Calculado="+Format("W12.2,EIC,AL",VRNOTA             )+"// //"
        MSG=MSG+"Corrija os dados antes de processeguir !!"
        Mensagem(MSG)
EndIf

Moveto Field NCAMPO

Carrega_Parametros()

Return Checa_Validade
EndProc  ; (Checa_DigitaC)

;*******************************************************************************
;* Verifica Codigo da Cidade de Origem e Destino dos Documentos CT             *
;*******************************************************************************
Proc Verifica_Cidade_CTOriDest(CODIGO_ORIGEM,CODIGO_DESTINO)
Private CODIGO_ORIGEM,CODIGO_DESTINO,ANT_CAMPO,ANT_CIDADE,ANT_UF

If Not IsBlank(CODIGO_ORIGEM) Or Not IsBlank(CODIGO_DESTINO)
   Then ANT_CAMPO  = Field()
        ANT_CIDADE = [Cidade         ]
        ANT_UF     = [UF             ]
        
        Moveto [Cidade]
        Ativa_Lookup()
        Moveto [Codigo_Cidade]
        If Not IsBlank(CODIGO_ORIGEM)
           Then CODIGO_ORIGEM = NumVal(CODIGO_ORIGEM)
                Locate CODIGO_ORIGEM
                If RetVal
                   Then VSD_O_Cidade = [Cidade]
                        VSD_O_UF     = [UF    ]
                EndIf
                Home
        EndIf
        If Not IsBlank(CODIGO_DESTINO)
           Then CODIGO_DESTINO = NumVal(CODIGO_DESTINO)
                Locate CODIGO_DESTINO         
                If RetVal
                   Then VSD_D_Cidade = [Cidade]
                        VSD_D_UF     = [UF    ]
                EndIf
        EndIf
        KeyPress "ESC"
        Moveto [Cidade]
        If ANT_CIDADE<>[Cidade]
           Then [Cidade] = ANT_CIDADE
        EndIf
        If ANT_UF<>[UF]
           Then [UF] = ANT_UF
        EndIf    
        Moveto Field ANT_CAMPO
        
        Return True
EndIf       
       
Return False

EndProc ;Verifica_Cidade_CTOriDest()        

;*******************************************************************************
;* Carrega C¢digo da Cidade                                                    *   
;*******************************************************************************   
Proc Carrega_CodCid_CTOriDest()

If VSD_O_Cidade<>"" And VSD_O_UF<>""
   Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_O_Cidade,VSD_O_UF To REG_CIDORIGEM
        If RetVal
           Then VSD_O_COD=REG_CIDORIGEM["Codigo_Cidade"]        
        EndIf
EndIf
If VSD_D_Cidade<>"" And VSD_D_UF<>"" 
   Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_D_Cidade,VSD_D_UF To REG_CIDORIGEM
        If RetVal
           Then VSD_D_COD= REG_CIDORIGEM["Codigo_Cidade"]   
        EndIf
EndIf 

EndProc ;Carrega_CodCid_CTOriDest()

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *   
;*******************************************************************************   
Proc CT_CidOriDest_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp, cidufok, REG_UF, REG_CIDADE  

TECLA   =""
MSGCAMPO=""
Temp=True

If Disparo="OPEN"
   Then INICIO_DIALOG=False
        Campo="O_Cidade" 
EndIf    

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9 Or
           Evento["KeyCode"] = -15:
           Temp=False
      Case Evento["KeyCode"] = -59:
           If Campo="O_Cidade" Or
              Campo="O_UF" Or
              Campo="D_Cidade" Or
              Campo="D_UF"
              Then ANT_CIDADE = [Cidade]
                   ANT_UF     = [UF    ]
                   Dynarray WinArray5[]
                   Window Handle Dialog to JANELA
                   Window GetAttributes JANELA To WinArray5
                   WinArray5["FLOATING"]=False
                   Window SetAttributes JANELA From WinArray5

                   If Campo="O_Cidade" Or Campo="D_Cidade" Then Moveto [Cidade] EndIf
                   If Campo="O_UF"     Or Campo="D_UF"     Then Moveto [UF    ] EndIf

                   if ConsultaF1()
                      then
                           Switch
                             Case Campo="O_Cidade": VSD_O_Cidade=Reg_ConsultaF1["Cidade"]
                                                    VSD_O_UF    =Reg_ConsultaF1["UF"    ]

                             Case Campo="O_UF"    : VSD_O_UF    =Reg_ConsultaF1["UF"    ]
                             
                             Case Campo="D_Cidade": VSD_D_Cidade=Reg_ConsultaF1["Cidade"]
                                                    VSD_D_UF    =Reg_ConsultaF1["UF"    ]
                                                    
                             Case Campo="D_UF"    : VSD_D_UF    =Reg_ConsultaF1["UF"    ]
                           EndSwitch
                           Carrega_CodCid_CTOriDest()
                   endif   

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

                   Echo Normal
                   Echo Off
                   If ANT_CIDADE<>[Cidade]
                      Then [Cidade] = ANT_CIDADE
                   EndIf
                   If ANT_UF<>[UF]
                      Then [UF] = ANT_UF
                   EndIf    
           EndIf
      Case Evento["KeyCode"] = -81:
           Switch
             Case Campo="O_COD"     :  VSD_O_COD     =ControlValue("O_COD")
             Case Campo="O_Cidade"  :  VSD_O_Cidade  =ControlValue("O_Cidade")
             Case Campo="O_UF"      :  VSD_O_UF      =ControlValue("O_UF")
             Case Campo="D_COD"     :  VSD_D_COD     =ControlValue("D_COD")
             Case Campo="D_Cidade"  :  VSD_D_Cidade  =ControlValue("D_Cidade")
             Case Campo="D_UF"      :  VSD_D_UF      =ControlValue("D_UF")
           EndSwitch
           AcceptDialog
           
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="O_Cidade"  : CancelDialog
             Case Campo="O_UF"      :   Campo="O_Cidade"
             Case Campo="O_COD"     :   Campo="O_Cidade"
             Case Campo="D_Cidade"  :   Campo="O_UF"
             Case Campo="D_UF"      :   Campo="D_Cidade"
             Case Campo="D_COD"     :   Campo="D_Cidade"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="O_Cidade": Campo="O_UF"
                  VSD_O_Cidade=ControlValue("O_Cidade")
             Case Campo="O_UF":
                  VSD_O_UF=ControlValue("O_UF")
                  
                  cidufok=true
                  If Not IsBlank(VSD_O_UF)
                     Then GetRecord "\\Sistemas\\Vendas\\Estados" VSD_O_UF To REG_UF
                          If Not RetVal
                             Then fastmsg("UF invalida !")
                                  cidufok=false
                             Else If Not IsBlank(VSD_O_Cidade)
                                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_O_Cidade,VSD_O_UF To REG_CIDADE 
                                          If Not RetVal
                                             Then fastmsg("Cidade/UF invalida!")
                                                  cidufok=false
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf
                  
                  if cidufok
                     then Carrega_CodCid_CTOriDest()
                          Campo="D_Cidade"      
                  EndIf

             Case Campo="D_Cidade":
                  VSD_D_Cidade=ControlValue("D_Cidade")
                  Campo="D_UF"
             Case Campo="D_UF":
                  VSD_D_UF=ControlValue("D_UF")
                  
                  cidufok=true
                  If Not IsBlank(VSD_D_UF)
                     Then GetRecord "\\Sistemas\\Vendas\\Estados" VSD_D_UF To REG_UF
                          If Not RetVal
                             Then fastmsg("UF invalida !")
                                  cidufok=false
                             Else If Not IsBlank(VSD_D_Cidade)
                                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_D_Cidade,VSD_D_UF To REG_CIDADE 
                                          If Not RetVal
                                             Then fastmsg("Cidade/UF invalida!")
                                                  cidufok=false
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf
                  
                  if cidufok
                     then Carrega_CodCid_CTOriDest()
                          AcceptDialog      
                  EndIf
           EndSwitch
   EndSwitch
EndIf
RefreshDialog
SelectControl Campo

MSGCAMPO=""
If Campo="OE_Cidade" Or
   Campo="O_UF"     Or
   Campo="D_Cidade" Or
   Campo="D_UF"
   Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
EndIf
TECLA = "PgDn=Finalizar   "

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp

EndProc ;CT_CidOriDest_Dialog()   
                  
;*******************************************************************************
;* Digitacao de Enderecos                                                      *
;*******************************************************************************
Proc CT_CidOriDest()
Private ANT_CIDADE,ANT_UF,ATUALIZA_ENDERECO, TabAnt, CampoAnt

MSGCAMPO=""

Echo Normal
Echo Off
Mouse Hide

TabAnt  =table()
CampoAnt=Field()

Moveto "NotaEc"

INICIO_DIALOG = True
VSD_O_COD     = [Cod_Mun_Origem ]
VSD_D_COD     = [Cod_Mun_Destino]
VSD_O_Cidade  = ""
VSD_O_UF      = ""
VSD_D_Cidade  = ""
VSD_D_UF      = ""

If IsBlank(VSD_O_COD) Or VSD_O_COD=0 Then VSD_O_COD=Blanknum() EndIf
If IsBlank(VSD_D_COD) Or VSD_D_COD=0 Then VSD_D_COD=Blanknum() EndIf

Verifica_Cidade_CTOriDest(VSD_O_COD,VSD_D_COD)

Switch
  Case Not IsBlank(VSD_O_COD) And IsBlank(VSD_D_COD) : Mensagem("Informe a Cidade de Destino!")
  Case IsBlank(VSD_O_COD) And Not IsBlank(VSD_D_COD) : Mensagem("Informe a Cidade de Origem!")
EndSwitch     
   
While True
Showdialog "Cidade de Origem e Destino p/ documentos CT-E" Proc "CT_CidOriDest_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","PGDN","F8"
   @ 08,08 height 10 width 63

   Frame Single From 0,0 to 3,60
   @ 0,1 ?? " Munic¡pio de Origem "
   paintcanvas attribute 26 0, 0, 3, 60
   
   Label  @ 1,01 "C¢digo" for "O_COD"
   Accept @ 2,02  Width 10 "A7" picture "#######" Tag "O_COD" to VSD_O_COD
   Label  @ 1,12 "Cidade" for "O_Cidade"
   Accept @ 2,13  Width 23 "A20" picture "!*!" Tag "O_Cidade" to VSD_O_Cidade
   Label  @ 1,36 "UF" for "O_UF"
   Accept @ 2,37  Width 05 "A2" picture "!*!" Tag "O_UF" to VSD_O_UF
   
   
   Frame Single From 04,0 to 7,60
   @ 04,1 ?? " Munic¡pio de Destino "
   paintcanvas attribute 30 6,0,7, 60
   
   Label  @ 5,01 "C¢digo" for "D_COD"
   Accept @ 6,02  Width 10 "A7" picture "#######" Tag "D_COD" to VSD_D_COD
   Label  @ 5,12 "Cidade" for "D_Cidade"
   Accept @ 6,13  Width 23 "A20" picture "!*!" Tag "D_Cidade" to VSD_D_Cidade
   Label  @ 5,36 "UF" for "D_UF"
   Accept @ 6,37  Width 05 "A2" picture "!*!" Tag "D_UF" to VSD_D_UF
Enddialog
If Retval
   Then Switch
          Case VSD_O_Cidade<>"" And VSD_O_UF="" : Mensagem("UF referente a cidade "+VSD_O_Cidade+" n„o foi informado!") Loop
          Case VSD_O_Cidade="" And VSD_O_UF<>"" : Mensagem("Cidade referente a UF "+VSD_O_UF+" n„o foi informada!")     Loop
          Case VSD_D_Cidade<>"" And VSD_D_UF="" : Mensagem("UF referente a cidade "+VSD_D_Cidade+" n„o foi informado!") Loop
          Case VSD_D_Cidade="" And VSD_D_UF<>"" : Mensagem("Cidade referente a UF "+VSD_D_UF+" n„o foi informada!")     Loop
        EndSwitch
        If VSD_O_Cidade<>"" And VSD_O_UF<>""
           Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_O_Cidade,VSD_O_UF To REG_CIDORIGEM
                If Not RetVal
                   Then Mensagem("Cidade "+VSD_O_Cidade+" referente ao estado de "+VSD_O_UF+" n„o foi localizada no cadastro de CIDADES!")
                        Loop
                   Else [Cod_Mun_Origem] = StrVal(REG_CIDORIGEM["Codigo_Cidade"]) 
                        VSD_O_COD        = REG_CIDORIGEM["Codigo_Cidade"]
                EndIf
        EndIf
        If VSD_D_Cidade<>"" And VSD_D_UF<>"" 
           Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_D_Cidade,VSD_D_UF To REG_CIDORIGEM
                If Not RetVal
                   Then Mensagem("Cidade "+VSD_D_Cidade+" referente ao estado de "+VSD_D_UF+" n„o foi localizada no cadastro de CIDADES!")
                        Loop
                   Else [Cod_Mun_Destino] = StrVal(REG_CIDORIGEM["Codigo_Cidade"])
                        VSD_D_COD         = REG_CIDORIGEM["Codigo_Cidade"]   
                EndIf
        EndIf 
        UnlockRecord
        Switch
          Case Not IsBlank(VSD_O_COD) And IsBlank(VSD_D_COD) : Mensagem("Informe a Cidade de Destino!") Loop
          Case IsBlank(VSD_O_COD) And Not IsBlank(VSD_D_COD) : Mensagem("Informe a Cidade de Origem!")  Loop
        EndSwitch
EndIf
QuitLoop
EndWhile
Echo Off
Mouse Show

Moveto TabAnt
Moveto Field CampoAnt

Release Procs Endereco_Dialog, Carrega_Endereco 

EndProc  ;CT_CidOriDest()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc Cliente_Inativo()

If Isblank([Codigo])
   Then Return False
EndIf   

GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] To CLIE_INATIVO 
If RetVal
   Then If CLIE_INATIVO["Inativo"]="S"
           Then Switch
                  Case CLIE_INATIVO["Tipo"]="F" : Mensagem("Fornecedor Inativo!") 
                  Case CLIE_INATIVO["Tipo"]="C" : Mensagem("Cliente Inativo!")
                  OtherWise                     : Mensagem("Cadasro Inativo!")            
                EndSwitch
                Return True     
        EndIf  
EndIf

Return False

EndProc ;Cliente_Inativo()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc Verifica_Natureza_Frete()

Switch
  Case [Natureza do Frete]="0" : VSDGNATFRETE="VEND/VENDEDOR"
  Case [Natureza do Frete]="1" : VSDGNATFRETE="VEND/ADQUIR."
  Case [Natureza do Frete]="2" : VSDGNATFRETE="COMP./C/CRED"
  Case [Natureza do Frete]="3" : VSDGNATFRETE="COMP./S/CRED"
  Case [Natureza do Frete]="4" : VSDGNATFRETE="T. ACABADOS"
  Case [Natureza do Frete]="5" : VSDGNATFRETE="T. SEMI-ACAB"
  Case [Natureza do Frete]="9" : VSDGNATFRETE="OUTRAS"
  OtherWise   : VSDGNATFRETE = ""
EndSwitch

If [Codigo do Documento]="CA"   Or 
   [Codigo do Documento]="CT-E" Or
   [Codigo do Documento]="CTA"  Or
   [Codigo do Documento]="CTAC" Or
   [Codigo do Documento]="CTFC" Or
   [Codigo do Documento]="CTRC" Or
   [Codigo do Documento]="NFST" Or
   [Codigo do Documento]="NFSF" 
   Then Return True
   Else Return False
EndIf                       

EndProc ;Verifica_Natureza_Frete()

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc ALIQ_ICMS()

UFO=[NotaEC->UF]
Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [NotaEC->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
   Else UF_ALIQUOTA_ICMS=BlankNum()
EndIf
AICMSUFO=UF_ALIQUOTA_ICMS

Locate UFD
If RetVal
   Then AICMSUFD=[Aliquota de ICMS]
EndIf

KeyPress "ESC"

Moveto [Codigo da Empresa]
Ativa_Lookup()
Moveto [Codigo da Empresa]
Locate [NotaEC->Codigo da Empresa]
If RetVal
   Then Tp_Empresa=[Tipo da Empresa]
   Else Tp_Empresa=""
EndIf
KeyPress "ESC"

EndProc  ; (Aliq_ICMS)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON
NE=[NotaEC->Numero do Lancamento]
Do_It!

DISPOSITIVO()
If OK<>""
   Then Play PARAM_RELATORIO
EndIf
ClearAll

Monta_Tabelas()
Return True
EndProc

;*******************************************************************************
;* Fun‡äes para Digita‡Æo do Item                                                 *
;*******************************************************************************
Proc Funcoes_Item(PARAM)
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  ~R~ecebe Compra       " : " Receber Ordem de Compra              " : "F8",
  Separator,
  "F6  ~E~xpedi‡„o           " : " Carregar itens da ordem de expedi‡„o " : "F6",
  "F7  ~N~ota de Venda       " : " Carregar itens da nota de venda      " : "F7",
  Separator,
  "~S~air                    " : " Ignorar op‡äes                   " : "CANCELAR"
EndMenu
To MenuVar

EndProc ;Funcoes_Item()   

;*******************************************************************************
;* Somatoria de valores dos itens para variaveis do FORM Fatura                *
;*******************************************************************************
Proc SomatoriaDosItens()

VSVRMERC = 0
VSQTDE   = 0
VCITENS  = 0

scan
  VSVRMERC = VSVRMERC + [Preco Total   ]
  VSQTDE   = VSQTDE   + [Quantidade    ]
  VCITENS  = VCITENS  + 1
endscan

endproc 

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
FACA_DIGITAF=True

Moveto "NotaEI"
While True
  Moveto "NotaEI"

  SomatoriaDosItens()

  Moveto [Sequencia do Lancamento]
  End
  NITEM = [Sequencia do Lancamento]
  Down
  [Numero do Lancamento]=LANCTO
  Moveto [Sequencia do Lancamento]

  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  PgDn/PgUp "                                                          
    
    MSGCAMPO=""
    Prompt TECLA

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

    If RetVal=-33
       Then If SYS_CODIGO_CLIENTE="0377" And Upper(SubStr(Directory(),1,2))="B:"
               Then Funcoes_Item(SYS_CODIGO_CLIENTE)
               Else Funcoes_Item("")
            EndIf     
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar       
    EndIf
  		
		Switch       		
    Case Retval="F8":
         Del
         If SYS_CODIGO_CLIENTE="0377" And Upper(SubStr(Directory(),1,2))="X:"
            Then EDITA_COMPRA()
            Else RECEBE_COMPRA()
         EndIf
         QuitLoop

    Case Retval="F6":
         Del
         If ([NotaEC->Tipo de Operacao]="D" Or [NotaEC->Tipo de Operacao]="C") and 
            SubStr(Directory(),1,2)<>"V:"
            then Play "FT_Expds" 
            else Mensagem("Fun‡Æo disponivel apenas para DEVOLU€¶O !")
         endif         
         QuitLoop

    Case Retval="F7":
         Del
         If [NotaEC->Tipo de Operacao]="D" and SubStr(Directory(),1,2)<>"V:"
            then Play "FT_DEV1" 
            else Mensagem("Fun‡Æo disponivel apenas para DEVOLU€¶O !")
         endif         
         QuitLoop

    Case RetVal="F3":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Sequencia do Lancamento]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")=True
            Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         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
           PAGINA("NotaEI","MR")
           SEQIT=[Sequencia do Lancamento]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then Ok=""
                           Switch
                             Case CHAVEC=1 : Ok="S"
                             OtherWise     :
                               If Checa_Supervisor()
                                  Then Ok="S"
                               EndIf   
                           EndSwitch
                           If Ok="S"
                              Then If QuerExcluir("")
                                      Then CHAVEI=8
                                           GRAVA_LOG=True 
                                           EXCLUSAO_I()
                                      Else UnLockRecord
                                   EndIf
                              Else UnLockRecord
                            EndIf
                      Else QuitLoop
                   EndIf
           EndIf

           SomatoriaDosItens()

           SetaPosForm()
         EndWhile
         QuitLoop
    Case RetVal="F5":
         VSDGEMPRESA=[NotaEC->Codigo da Empresa]
         VSDGTABELA =PARAM_TABELA_PRECO
         Del
         Moveto "NotaEC"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True
         If PARAM_EXIBECUSTO="N"
            Then Play "\\Sistemas\\Vendas\\SW_CONSS"
            Else Play "SW_CONS3" ;Alterado em 30.09.2013
         EndIF

         Moveto "NotaEC"
         Moveto [Numero do Lancamento]
         Locate LANCTO
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "NotaEI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

         While True
           Moveto [Sequencia do Lancamento]
           End
           NITEM= [Sequencia do Lancamento]
           Down
           Moveto [Sequencia do Lancamento]
           Seta_Sequencia(NITEM,False)
           If IsLockRecord()
              Then Del
                   Loop
           EndIf
           QuitLoop
         EndWhile
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf

         SEQIT=[Sequencia do Lancamento]
         CHAVEI=1
         [Numero do Lancamento   ]=LANCTO
         [Sequencia do Lancamento]=SEQIT
         [Codigo do Item         ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True
         Return
         
    Case Retval="ENTER":         
         SEQIT=[]
         If Not Seta_Sequencia(SEQIT,True)
            Then Del
                 QuitLoop
         EndIf
         If SEQIT>900
            Then Mensagem("N£mero m ximo de itens permitidos ‚ 900 !")
                 Del
                 QuitLoop
         EndIf
         Del
         Locate LANCTO,SEQIT    
         If Retval
            Then CHAVEI=0
                 SEQIT =[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero do Lancamento   ]=LANCTO
                 [Sequencia do Lancamento]=SEQIT
                 UnLockRecord
                 Locate LANCTO,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Ajustar Quatnidade na Edi‡Æo                                    *
;*******************************************************************************
Proc Ajusta_Quantidade()
Private REG_OCI,REG_NOTAEI,AUX_QTD

If QTD_ANT <> [Quantidade]
   Then If IsBlank([Quantidade])
           Then Mensagem("Informe a Quantidade!")
                [Quantidade] = QTD_ANT 
                Return False 
        EndIf 

        QTDCONV = [Quantidade Convertida]
        QUANT   = QTD_ANT
        CTTOTAL = NDecimal((QUANT*[Custo Medio Unitario]),2)
        CHAVEI  = 0 
        
        VSD_I_Fator_Conversao       = [Fator de Conversao   ]
        VSD_I_Quantidade            = [Quantidade           ]
        VSD_I_Custo_Unitario        = [Custo Medio Unitario ]
        VSD_I_Indice_PrVenda        = [Indice Preco de Venda]

        If [Quantidade]>0
           Then Divisor_Custo=[Quantidade]
           Else Divisor_Custo=1
        EndIf

        If VSD_I_Fator_Conversao <> 0
           Then If Not IsBlank(VSD_I_Fator_Conversao)
                   Then If SYS_CODIGO_CLIENTE = "0278"
                           Then VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                           Else If VSD_I_Fator_Conversao<1
                                   Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,3)
                                   Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                                EndIf
                        EndIf
                EndIf
       EndIf
       VSD_I_Ct_Unitario = NDecimal(((VSD_I_Custo_Unitario*Divisor_Custo)/VSD_I_Quantidade_Convertida),5)

       [Indice Preco de Venda     ]=VSD_I_Indice_PrVenda
       [Custo Medio Unitario      ]=VSD_I_Custo_Unitario
       [Quantidade                ]=VSD_I_Quantidade
       [Preco Total               ]=Round([Preco Unitario]*[Quantidade],2)
       [Fator de Conversao        ]=VSD_I_Fator_Conversao
       [Quantidade Convertida     ]=VSD_I_Quantidade_Convertida
       
       Play "FT_CUSTO"
       
       ESTOQUE()
       ATUA_COMPRA()
       Moveto "NotaEI"
       
       SaveTables
EndIf
Return True

EndProc ;Ajusta_Quantidade()

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

TECLA    = " Esc=Retornar  "
MSGCAMPO = ""
Temp     = True

If INICIO_DIALOG
   Then If Sw_Dialog="Custo"
           Then Campo="I_Flag2"
           Else If CHAVEI=0
                   Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP     
                        If ReTval
                           Then EDITA_DESCRICAO_ITEM = REG_ITEMCOMP["Edita Descricao do Item"]
                           Else EDITA_DESCRICAO_ITEM = "N"
                        EndIf    
                        If EDITA_DESCRICAO_ITEM = "S"
                           Then Campo="I_Descricao_Item"
                           Else Campo="I_Quantidade"
                        EndIf
                   Else If IsBlank(Sw_Item_Pesquisado)
                           Then Campo="I_OC"
                           Else 
        									      VSD_I_OC     =""
                                VSD_I_OC_Item=0
        									 
        												VSD_I_Codigo_Fornecedor=""
        												CODFORN_ITEM=""
        												CODFORN_OK  =False									 
        									 
        									      Campo="I_Codigo_Fornecedor"
                        EndIf   
                EndIf
        EndIf
        INICIO_DIALOG=False
EndIf
If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="OPEN"
   Then
        TiraSombraShowDialog()
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
           "[F6] ~V~er Custo              " : " Visualiza o custo 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     " : "F8",
           Separator, 
           "~S~air                        " : " Ignorar op‡äes                     " : "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=[Sequencia do Lancamento]
                       Inicia_Registro()
               EndIf
           EndSwitch
           
       Case Evento["KeyCode"] = -64 Or Evento["KeyCode"] = "F6" :
            Temp=False
            Ver_CalcCusto()
            
       Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
            ModoLocalizarItem("SELECAO","","NOTAEC")

       Case Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8" :
            Digita_Informacoes_Adicionais()
       
        Case Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4" :
             Switch
               Case Campo="I_BC_ICMS"      : 
                    If VSD_I_AICMS>0
                       Then VSD_I_BC_ICMS     = Round(([NotaEC->Valor Nota Fiscal]-([NotaEC->Valor IPI]+[NotaEC->Valor Substituicao ICMS]))*
                                                                                            (VSD_I_Preco_Total/[NotaEC->Valor Mercadoria]),2)
                            VSD_I_BC_ICMS     =VSD_I_BC_ICMS-((VSD_I_BC_ICMS*VSD_I_RBC_ICMS)/100)
                    EndIf   
               Case Campo="I_Valor_ICMS"   : VSD_I_Valor_ICMS  = Round(((VSD_I_BC_ICMS*VSD_I_AICMS)/100),2)
               
               Case Campo="I_BC_ST":
                    VSD_I_BC_ST  = Round([NotaEC->Valor BCSubstituicao ICMS]*(VSD_I_Preco_Total/[NotaEC->Valor Mercadoria]),2)
               Case Campo="I_Valor_ST":
                    VSD_I_Valor_ST  = Round([NotaEC->Valor Substituicao ICMS]*(VSD_I_Preco_Total/[NotaEC->Valor Mercadoria]),2)
        
               Case Campo="I_BC_IPI"       : VSD_I_BC_IPI      = VSD_I_Preco_Total
               Case Campo="I_Valor_IPI"    : VSD_I_Valor_IPI   = Round(((VSD_I_BC_IPI*VSD_I_AIPI)/100),2)  

               Case Campo="I_BC_ISSQN"     : VSD_I_BC_ISSQN    = VSD_I_Preco_Total
               Case Campo="I_Valor_ISSQN"  : VSD_I_Valor_ISSQN = Round(((VSD_I_BC_ISSQN*VSD_I_AISSQN)/100),2)

               Case Campo="I_BC_PIS"       : 
              
                    Mensagem("Calculo ser  feito autom tico, nÆo precisa mais informar !")
              
                    If VSD_I_APIS>0
                       Then VSD_I_BC_PIS      = VSD_I_Preco_Total
                            VSD_I_BC_PIS      = VSD_I_BC_PIS-Round((VSD_I_Preco_Total*(([NotaEC->Valor Desconto]/[NotaEC->Valor Mercadoria])*100))/100,2)
                            VSD_I_BC_PIS      = VSD_I_BC_PIS+Round((VSD_I_Preco_Total*((([NotaEC->Valor do Frete]+[NotaEC->Valor do Seguro]+
                                                                                         [NotaEC->Valor Despesas Acessorias])/[NotaEC->Valor Mercadoria])*100))/100,2)
                            If Search("COM",ATIVEMPRESA)>0
                               Then VSD_I_BC_PIS      = VSD_I_BC_PIS+VSD_I_Valor_IPI
                            EndIf
                    EndIf
          
               Case Campo="I_Valor_PIS"    : VSD_I_Valor_PIS   = Round(((VSD_I_BC_PIS*VSD_I_APIS)/100),2)

               Case Campo="I_BC_COFINS"    :

                    Mensagem("Calculo ser  feito autom tico, nÆo precisa mais informar !")

                    If VSD_I_ACOFINS>0
                       Then VSD_I_BC_COFINS   = VSD_I_Preco_Total
                            VSD_I_BC_COFINS   = VSD_I_BC_COFINS-Round((VSD_I_Preco_Total*(([NotaEC->Valor Desconto]/[NotaEC->Valor Mercadoria])*100))/100,2)
                            VSD_I_BC_COFINS   = VSD_I_BC_COFINS+Round((VSD_I_Preco_Total*((([NotaEC->Valor do Frete]+[NotaEC->Valor do Seguro]+
                                                                                            [NotaEC->Valor Despesas Acessorias])/[NotaEC->Valor Mercadoria])*100))/100,2)
                            If Search("COM",ATIVEMPRESA)>0
                               Then VSD_I_BC_COFINS   = VSD_I_BC_COFINS+VSD_I_Valor_IPI
                            EndIf
                    EndIf
               Case Campo="I_Valor_COFINS" : VSD_I_Valor_COFINS= Round(((VSD_I_BC_COFINS*VSD_I_ACOFINS)/100),2)
             EndSwitch

       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            Ok=""
            Switch
              Case CHAVEI=0 And CHAVEC=1 : Ok="S"
              Case CHAVEI=0 And CHAVEC=0 :
                If Checa_Supervisor()
                   Then Ok="S"
                EndIf   
            EndSwitch
            If Ok="S"
               Then If QuerEXcluir("")
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item"       Or
               Campo="I_Tipo_Item"         Or
               Campo="I_Tabela_Preco"      Or
               Campo="I_UN_Item"           Or
               (Campo="I_Codigo_Cor_Tecido" And PARAM_DIGITA_COR_TECIDO="N") Or
               Campo="I_CCusto"            Or 
               Campo="I_CFOP"              Or
               Campo="I_CST_IPI"           Or
               Campo="I_CST_Item"          Or           
               Campo="I_TISSQN"            Or      
               Campo="I_CST_PIS"           Or
               Campo="I_CST_COFINS"        Or
               Campo="I_MUNSERV"           Or
               Campo="I_CSOSN"
               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_Tabela_Preco"      Then Moveto [Lookup_Tabela_Preco]  EndIf
                    If Campo="I_UN_Item"           Then Moveto [Unidade Entrada]      EndIf
                    If Campo="I_Codigo_Cor_Tecido" Then Moveto [Codigo da Cor_Tecido] EndIf
                    If Campo="I_CCusto"            Then Moveto [Codigo CCusto       ] EndIf
                    If Campo="I_CFOP"              Then Moveto [CFO                 ] EndIf


                    If Campo="I_MUNSERV"             
                       Then FI_MUNSERVAnt=VSD_I_MUNSERV
                            FI_UFSERVAnt =VSD_I_UFSERV
                            FC_MUNSERVAnt=[NotaEC->Cidade]
                            FC_UFSERVAnt =[NotaEC->UF]
                            Moveto "NotaEC"
                            Moveto [Cidade]  
                    EndIf

                    Switch
                      Case Campo="I_CST_Item":          
                        CSTNew=VSD_I_CST_Item 
                        VSD_I_CST_Item=Checa_CST("ICMS","E","")
                        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","E","")
                        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","E","")
                        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","E","")
                        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 If Campo="I_Codigo_Item"
                                   Then VSD_I_MVA =Reg_ConsultaF1["MVA_1"]
                                EndIf
                                Switch
                                  Case Campo="I_MUNSERV":               
                                        [NotaEC->Cidade   ]=FC_MUNSERVAnt
                                        [NotaEC->UF       ]=FC_UFSERVAnt
                                        Moveto "NotaEI"
                                        [NotaEI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                        [NotaEI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                                EndSwitch
                                
                                If Campo="I_Codigo_Item" And SYS_CODIGO_CLIENTE="0319"
                                   Then [Fator de Conversao]=1
                                EndIf 
                                
                           Else If Campo="I_MUNSERV"
                                   Then Moveto "NotaEI"
                                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 Entrada      ]
                            VSD_I_Unidade_Interna=[Unidade Interna      ]
                            VSD_I_Tipo_Item      =[Tipo do Item         ]
                            VSD_I_Fator_Conversao=[Fator de Conversao   ]
                            VSD_I_CST_Item       =[Tipo Tributacao      ]
                    EndIf                                                
                    
                    If Campo="I_Tipo_Item"
                       Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                            Campo="I_Tipo_Item"
                    EndIf
                    If Campo="I_Tabela_Preco"
                       Then VSD_I_Tabela_Preco = [Lookup_Tabela_Preco]
                            Campo="I_Tabela_Preco"
                    EndIf
                    If Campo="I_UN_Item"
                       Then VSD_I_UN_Item     =[Unidade Entrada]
                            Campo="I_UN_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_CCusto"
                      Then VSD_I_CCusto          =[Codigo CCusto   ]
                           VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                           Campo="I_CCusto"
                   EndIf
                   If Campo="I_CFOP"
                      Then VSD_I_CFOP            =[CFO             ]
                           Campo="I_CFOP"
                   EndIf

                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[NotaEI->ISSQN_Municipio]
                           VSD_I_UFSERV =[NotaEI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf

                   Moveto "NotaeI"
                   RefreshDialog
           EndIf
           If Campo="I_Codigo_Cor_Tecido" And PARAM_DIGITA_COR_TECIDO="S" And LOCALIZA_CODIGO="LOC_CODREF" 
              Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                   Seleciona_Opcoes_Cor("Codigo da Cor_Tecido","")
                   Moveto [Codigo do Item]                   
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27: 
           Switch
             Case Campo="I_OC":
                  If QuerDesfazer("")
                     Then CHAVEI=9
                          Del
                          CancelDialog
                  Endif
             Case Campo="I_OC_Item": Campo="I_OC"

             Case Campo="I_Codigo_Fornecedor":
                  If Not IsBlank([Numero da OC])
                     Then Campo="I_OC_Item"
                     Else If QuerDesfazer("")
                             Then Del
                                  CHAVEI=9
                                  CancelDialog
                          EndIf
                  EndIf
             Case Campo="I_Codigo_Item":  Campo="I_Codigo_Fornecedor"
             
             Case Campo="I_Descricao_Item":
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  UnLockRecord
                                  CancelDialog
                          EndIf
                  EndIf

             Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
             Case Campo="I_Codigo_Cor_Tecido" : 
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  EndIf
                               
             Case Campo="I_Quantidade":
                  If CHAVEI=1
                     Then If IsBlank(VSD_I_Codigo_Item)
                             Then Campo="I_Tipo_Item"
                             Else Campo="I_Codigo_Item"
                          EndIf
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  EndIf
             Case Campo="I_UN_Item":
                  Campo="I_Quantidade"
             Case Campo="I_Preco_Unitario":  
                  If IsBlank(VSD_I_Codigo_Item)
                     Then Campo="I_UN_Item"
                     Else Campo="I_Quantidade"
                  EndIf
             Case Campo="I_Taxa_Desconto_Unitario" Or
                  Campo="I_Valor_Desconto_Unitario" Or
                  Campo="I_Preco_Total":        Campo="I_Preco_Unitario"

             Case Campo="I_CST_Item"          : Campo="I_Preco_Total"
     
             Case Campo="I_RBC_ICMS"   Or
                  Campo="I_BC_ICMS"    Or
                  Campo="I_AICMS"      Or
                  Campo="I_Valor_ICMS" Or
                  Campo="I_CSOSN"       : Campo="I_CST_Item"
                  
             Case Campo="I_ACSOSN"       Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"

             Case Campo="I_BC_ST" Or
                  Campo="I_Valor_ST"          : Campo="I_CSOSN"

             Case Campo="I_CST_IPI"           : Campo="I_CSOSN"

             Case Campo="I_MVA"               : Campo="I_CSOSN"
             
             Case Campo="I_BC_IPI" Or
                  Campo="I_AIPI"   Or
                  Campo="I_Valor_IPI"         : Campo="I_CST_IPI"

             Case Campo="I_TISSQN"             : Campo="I_CST_IPI"
             Case Campo="I_BC_ISSQN" Or
                  Campo="I_AISSQN" 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_BC_PIS" Or
                 Campo="I_APIS" Or
                 Campo="I_Valor_PIS"         : Campo="I_CST_PIS"
            
            Case Campo="I_CST_COFINS"        : Campo="I_CST_PIS"
            Case Campo="I_BC_COFINS" Or
                 Campo="I_ACOFINS"   Or
                 Campo="I_Valor_COFINS"      : Campo="I_CST_COFINS"
            
            Case Campo="I_CFOP"                  : Campo="I_CST_COFINS"         
            Case Campo="I_NCM"                Or
                 Campo="I_Acrescimos_Desctos"    : Campo="I_CFOP"

            Case Campo="I_CDSERV"                : Campo="I_NCM"
            Case Campo="I_MUNSERV"               : Campo="I_CDSERV"
            Case Campo="I_RAT_FRETE"             : Campo="I_NCM"
                 
            Case Campo="I_RAT_SEGURO"    Or
                 Campo="I_RAT_DESCONTO"  Or
                 Campo="I_RAT_OUTDESP"           : Campo="I_RAT_FRETE"

            Case Campo="I_VRICMSDESON"   Or
                 Campo="I_VRFCPST"               : Campo="I_NCM"
                  
            Case Campo="I_Fator_Conversao"       : Campo="I_Acrescimos_Desctos"
            Case Campo="I_Quantidade_Convertida" : Campo="I_Fator_Conversao"
            Case Campo="I_CCusto"                : Campo="I_Fator_Conversao"
            
            
            Case Campo="I_Tabela_Preco"   Or
                 Campo="I_Indice_PrVenda" Or
                 Campo="I_Preco_VendaOk"  Or
                 Campo="I_Flag"                  : Campo="I_CCusto"
            
            Case Campo="I_Flag2"                 : AcceptDialog
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_OC":
                  VSD_I_OC=AlinhM(ControlValue("I_OC"),6)
                  If VSD_I_OC="000000"
                     Then VSD_I_OC     =""
                          VSD_I_OC_Item=0
													Campo="I_Codigo_Fornecedor"
                     Else Campo="I_OC_Item"
                  EndIf
             Case Campo="I_OC_Item":
                  VSD_I_OC_Item=ControlValue("I_OC_Item")
                  If VSD_I_OC_Item=BlankNum()
                     Then VSD_I_OC_Item=0
                  EndIf
                  If Not (VSD_I_OC_Item=Blanknum())
                     Then Moveto "NotaEC"
                          [Numero da OC Link]=VSD_I_OC
                          Moveto "\\Sistemas\\Compras\\OCI"
                          Moveto [Item da OC]
                          Locate NumVal(VSD_I_OC_Item)
                          If Not RetVal
                             Then Mensagem("Item n„o Encontrado !")
                                  Moveto "NotaEI"
                             Else If ([Quantidade]-[Quantidade Entregue])<=0
                                     Then Mensagem("Item da OC c/ Saldo todo Entregue !")
                                  EndIf
                                  Moveto "NotaEI"
                                  Copia_COMPRA_LANCTO()
                                  Registro_Item("Ler")
                                  Campo="I_Quantidade"
                          EndIf
										 Else Campo="I_Codigo_Fornecedor"
                  EndIf
                     
             Case Campo="I_Codigo_Fornecedor":
                  VSD_I_Codigo_Fornecedor=ControlValue("I_Codigo_Fornecedor")
                  
                  CODFORN_ITEM=""
                  CODFORN_OK  =False
                  If Not IsBlank(VSD_I_Codigo_Fornecedor)
										 Then
                          getrecord "\\sistemas\\estoque\\fornprod" [NotaEC->Codigo], VSD_I_Codigo_Fornecedor to REG_CODFORN
                          if retval
                             then
																	VSD_I_Codigo_Item=REG_CODFORN["Codigo do Item"]
																	CODFORN_ITEM		 =REG_CODFORN["Codigo do Item"]
																	CODFORN_OK=True
                          endif    
                         
                          If CODFORN_OK
                             Then 
                                  Moveto [Codigo do Item]
                                  Ativa_Lookup()
                                  Moveto [Codigo do Item]
                                  Locate CODFORN_ITEM
                                  If RetVal
                                     Then VSD_I_Codigo_Item         =[Codigo do Item       ]
                                          KeyPress "ESC"

                                          Moveto "NotaeI"
                                          [Codigo do Item          ]=VSD_I_Codigo_Item
                                          GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item] To REG_ITEMCOMP
                                          If RetVal
                                             Then [Indice Preco de Venda] = REG_ITEMCOMP["Indice Preco de Venda"]
                                          EndIf
                                          
                                          VSD_I_Indice_PrVenda = [Indice Preco de Venda    ]
                                          VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS          ]
                                          VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]

                                          [Codigo_Fornecedor       ]=VSD_I_Codigo_Fornecedor
                                          [Unidade Entrada         ]=REG_CODFORN["Unidade Entrada"]
                                          [Tributacao de IPI       ]=REG_CODFORN["Tributacao de IPI"]
                                          [Aliquota de IPI         ]=REG_CODFORN["Aliquota de IPI"]
                                          [Tributacao de ICMS      ]=REG_CODFORN["Tributacao de ICMS"]
                                          [Aliquota Reduzida BCICMS]=REG_CODFORN["Aliquota Reduzida BCICMS"]
                                          [Aliquota de ICMS        ]=REG_CODFORN["Aliquota de ICMS"]
                                          [Fator de Conversao      ]=REG_CODFORN["Fator de Conversao"]
                                          [MVA                     ]=REG_CODFORN["MVA"]
                                          [ICMS UF_ORIGEM          ]=REG_CODFORN["ICMS UF_ORIGEM"]
                                          [Tipo Tributacao         ]=REG_CODFORN["Tipo Tributacao"]
                                          [IPI_CST                 ]=REG_CODFORN["IPI_CST"]
                                          [CFO                     ]=REG_CODFORN["CFO"]
                                          [PIS_CST                 ]=REG_CODFORN["PIS_CST"]
                                          [PIS_Aliquota            ]=REG_CODFORN["PIS_Aliquota"]
                                          [COFINS_CST              ]=REG_CODFORN["COFINS_CST"]
                                          [COFINS_Aliquota         ]=REG_CODFORN["COFINS_Aliquota"]

                                          If IsBlank([ICMS UF_ORIGEM ]) Or
                                             [ICMS UF_ORIGEM ]=0
                                             Then [ICMS UF_ORIGEM ]=AICMSUFO
                                          EndIf
                                          [ICMS UF_DESTINO]=AICMSUFD

                                          Registro_Item("Ler")
                                          VSD_I_Tabela_Preco = PARAM_TABELA_PRECO
                                          Tabela_Preco("Procura")

                                          If CHECA_ESTOQUE()
                                             Then If [NotaEC->Tipo de Operacao]="D" Or
                                                     [NotaEC->Tipo de Operacao]="T"
                                                     Then [Custo Medio Unitario]=NDecimal([SdEstq->Custo Total Atual]/[SdEstq->Saldo Atual],5)
                                                          If [Custo Medio Unitario]=0
                                                             Then [Custo Medio Unitario]=[SdEstq->Ultimo Custo Atual]
                                                          EndIf
                                                          VSD_I_Custo_Unitario=[Custo Medio Unitario]
                                                  EndIf

                                                  GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item] To REG_ITEMCOMP     
                                                  If ReTval
                                                     Then EDITA_DESCRICAO_ITEM = REG_ITEMCOMP["Edita Descricao do Item"]
                                                     Else EDITA_DESCRICAO_ITEM = "N"
                                                  EndIf    
                                                  If EDITA_DESCRICAO_ITEM = "S"
                                                     Then Campo="I_Descricao_Item"
                                                     Else If PARAM_DIGITA_COR_TECIDO="S" And LOCALIZA_CODIGO="LOC_CODREF"
                                                             Then Campo="I_Codigo_Cor_Tecido"
                                                             Else VSD_I_Codigo_Cor_Tecido    = ""
                                                                  VSD_I_Descricao_Cor_Tecido = ""
                                                                  Campo="I_Quantidade"
                                                          EndIf
                                                  EndIf
                                          EndIf            
                                     Else VSD_I_Codigo_Item=""
                                          KeyPress "ESC"
                                          Campo="I_Codigo_Item"
                                  EndIf
                             Else Campo="I_Codigo_Item"
                          EndIf
                     Else Campo="I_Codigo_Item"              
                  EndIf
                  Echo Off        
						 Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then FastMsg("Valor inv lido !")
                    Else MSG_NOTAE      = ""
                         VSD_I_Codigo_Item = Item_Localizador(VSD_I_Codigo_Item)
                         Moveto [Codigo do Item]
                         Ativa_Lookup()
                         ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
                         If RetVal
                            Then VSD_I_Referencia     = [Referencia                ]
                                 VSD_I_Peso_Liquido   = [Peso Liquido              ]
                                 VSD_I_Codigo_Item    = [Codigo do Item            ]
                                 VSD_I_TX_ICMS_SAIDA  = [Aliquota de ICMS          ]
                                 VSD_I_RD_ICMS_SAIDA  = [Aliquota Reduzida BCICMS  ]                  
                                 VSD_I_MVA            = [MVA_1                     ]
                                 VSD_I_Descricao_Item = [Descricao do Item         ]
                                 item_familia         = [Codigo da Familia         ]
                                 INATIVO              = [Inativo                   ]
                                 Codigo_Fornecedor    = [Codigo Fornecedor         ]
                                 KeyPress "ESC"

                                 itemok=false
                                 switch
                                   case INATIVO="S":
                                     MSG_NOTAE = "Item://"+VSD_I_Codigo_Item+" "+VSD_I_Descricao_Item+" est  inativo !"

                                   case [Tipo do Item]="A" and [NotaEC->Tipo de Operacao]="C" and sys_Codigo_Cliente="0434": 
                                     MSG_NOTAE = "Item://"+VSD_I_Codigo_Item+" "+VSD_I_Descricao_Item+"// // NÆo usar Item aplica‡Æo direta em Compra !"

                                   otherwise : itemok=true
                                 endswitch
                                                                   
                                 If itemok
                                    then
                                        If Pega_Dados(VSD_I_Codigo_Item)
                                           Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                                                Registro_Item("Ler")
                                                VSD_I_Tabela_Preco = PARAM_TABELA_PRECO                                                 
                                                Tabela_Preco("Procura")
                                               
                                                VSD_I_AIPI   =BlankNum() ; Al¡quota de IPI
                                                VSD_I_APIS   =BlankNum() ; Al¡quota de PIS
                                                VSD_I_ACOFINS=BlankNum() ; Al¡quota de COFIN
                                              
                                                If CHECA_ESTOQUE()
                                                   Then If [NotaEC->Tipo de Operacao]="D" Or
                                                           [NotaEC->Tipo de Operacao]="T"
                                                           Then [Custo Medio Unitario]=NDecimal([SdEstq->Custo Total Atual]/[SdEstq->Saldo Atual],5)
                                                                If [Custo Medio Unitario]=0
                                                                   Then [Custo Medio Unitario]=[SdEstq->Ultimo Custo Atual]
                                                                EndIf
                                                                VSD_I_Custo_Unitario=[Custo Medio Unitario]
                                                        EndIf
                                      
                                                        If EDITA_DESCRICAO_ITEM = "S"
                                                           Then Campo="I_Descricao_Item"
                                                           Else If PARAM_DIGITA_COR_TECIDO="S" And LOCALIZA_CODIGO="LOC_CODREF"
                                                                   Then Campo="I_Codigo_Cor_Tecido"
                                                                   Else VSD_I_Codigo_Cor_Tecido    = ""
                                                                        VSD_I_Descricao_Cor_Tecido = ""
                                                                        Campo="I_Quantidade"
                                                                EndIf
                                                        EndIf
                                                EndIf
                                           Else MSG_NOTAE="AUTOMATICA"
                                        EndIf
                                 EndIf
                                 Release Vars INATIVO,Codigo_Fornecedor     

                            Else KeyPress "ESC"
                                 MSG_NOTAE="Item/Referˆncia "+VSD_I_Codigo_Item+" n„o localizado!"
                         EndIf
                         
                         If MSG_NOTAE<>""
                            Then If MSG_NOTAE<>"AUTOMATICA" Then FastMsg(MSG_NOTAE) EndIf                                 
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                                 VSD_I_CST_Item      =""
                                 VSD_I_CST_IPI       =""
                                 
                                 Campo="I_Codigo_Item" 
                         EndIf
                         Release Vars MSG_NOTAE,ITEM_DUPLICADO,REGISTRO
                  EndIf              
                  Echo Off
             Case Campo="I_Descricao_Item":
                  VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                  Campo="I_Tipo_Item"
             Case Campo="I_Tipo_Item":
                  VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                  If Not IsBlank(VSD_I_Tipo_Item)
                     Then 
                          Moveto [Tipo do Item]
                          Ativa_Lookup()
                          Moveto [Tipo do Item]
                          Locate VSD_I_Tipo_Item
                          If RetVal
                             Then VSD_I_Tipo_Item=[Tipo do Item]
                                  KeyPress "ESC"
                                  Moveto "NotaeI"
                                  [Tipo do Item]=VSD_I_Tipo_Item

                                  If CHAVEI=1 and PARAM_DIGITA_COR_TECIDO="S" And LOCALIZA_CODIGO="LOC_CODREF"
                                     Then Campo="I_Codigo_Cor_Tecido"
                                     Else Campo="I_Quantidade"
                                  EndIf
                                           
                             Else Mensagem("Tipo do Item n„o Cadastrado !")
                                  VSD_I_Tipo_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             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 PROCESSA_COR = False
                          MSG_NOTAE    = ""
                          While True
                            ;---- Verifica se a Sigla foi inserida -------------
                            If Type(NumVal(Rtrim(VSD_I_Codigo_Cor_Tecido)))<>"N"
                               Then VSD_I_Sigla_Cor_Tecido = Rtrim(VSD_I_Codigo_Cor_Tecido)
                                    For i From 1 To DynArraySize(Opcoes)
                                      If VSD_I_Sigla_Cor_Tecido = Ltrim(RTrim(SubStr(Opcoes[i],29,05)))
                                         Then VSD_I_Codigo_Cor_Tecido    = AlinhM(RTrim(SubStr(Opcoes[i],23,04)),4)
                                              VSD_I_Descricao_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                              PROCESSA_COR=True
                                              QuitLoop
                                      EndIf
                                    EndFor
                                    If Not PROCESSA_COR
                                       Then MSG_NOTAE = "Sigla do Tecido n„o Localizada!"
                                            QuitLoop
                                    EndIf
                               Else PROCESSA_COR=True         
                            EndIf
                            If PROCESSA_COR
                               Then VSD_I_Codigo_Cor_Tecido = AlinhM(VSD_I_Codigo_Cor_Tecido,4)
                                    GetRecord "\\Sistemas\\Estoque\\Cores" VSD_I_Codigo_Cor_Tecido To REG_COR
                                    If RetVal
                                       Then VSD_I_Codigo_Cor_Tecido   =REG_COR["Codigo da Cor_Tecido"]
                                            VSD_I_Descricao_Cor_Tecido=REG_COR["Descricao da Cor_Tecido"]
                                                                                     
                                            Moveto [Codigo do Item]
                                            Ativa_Lookup()
                                            Moveto [Referencia]
                                            If SYS_CODIGO_CLIENTE="0388" Or 
                                               SYS_CODIGO_CLIENTE="0427" Or 
                                               SYS_CODIGO_CLIENTE="0390" Or 
                                               SYS_CODIGO_CLIENTE="0345" Or 
                                               SYS_CODIGO_CLIENTE="0396" Or
                                               SYS_CODIGO_CLIENTE="0419" Or
                                               SYS_CODIGO_CLIENTE="0429"  
                                               Then TIPO_ITEM = "T"
                                               Else TIPO_ITEM = "P"
                                            EndIf
                                            Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                            
                                            ;---- 2¦ Tentativa ao localizar o item pelo tipo do item ----------------
                                            If Not RetVal And (SYS_CODIGO_CLIENTE="0388"  Or SYS_CODIGO_CLIENTE="0427" Or 
                                                               SYS_CODIGO_CLIENTE="0419" Or SYS_CODIGO_CLIENTE="0429")  
                                               Then TIPO_ITEM = "P"
                                                    Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                            EndIf
                                            
                                            ;---- 3¦ Tentativa ao localizar o item pelo tipo do item ----------------
                                            If Not RetVal And (SYS_CODIGO_CLIENTE="0388"  Or SYS_CODIGO_CLIENTE="0427" Or 
                                                               SYS_CODIGO_CLIENTE="0419" Or SYS_CODIGO_CLIENTE="0429")  
                                               Then TIPO_ITEM = "M"
                                                    Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                            EndIf
                                            
                                            If RetVal
                                               Then GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
                                                    VSD_I_Referencia     = REG_ITEM["Referencia"              ]
                                                    VSD_I_Peso_Liquido   = REG_ITEM["Peso Liquido"            ]             
                                                    VSD_I_Codigo_Item    = REG_ITEM["Codigo do Item"          ]
                                                    VSD_I_TX_ICMS_SAIDA  = REG_ITEM["Aliquota de ICMS"        ]
                                                    VSD_I_RD_ICMS_SAIDA  = REG_ITEM["Aliquota Reduzida BCICMS"]
                                                    VSD_I_MVA            = REG_ITEM["MVA_1"                   ]
                                                    item_familia         = REG_ITEM["Codigo da Familia"       ]
                                                    INATIVO              = REG_ITEM["Inativo"                 ]
                                                    Codigo_Fornecedor    = REG_ITEM["Codigo Fornecedor"       ]
                                                    KeyPress "ESC"
                                                    
                                                    If INATIVO="S"
                                                       Then MSG_NOTAE = "Item://"+VSD_I_Codigo_Item+" "+VSD_I_Descricao_Item+" est  inativo !"
                                                            QuitLoop
                                                    EndIf                
                                             
                                                    If Pega_Dados(VSD_I_Codigo_Item)
                                                       Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                                                            Registro_Item("Ler")
                                                            VSD_I_Tabela_Preco = PARAM_TABELA_PRECO                                                    
                                                            Tabela_Preco("Procura")
                                                     
                                                            VSD_I_AIPI   =BlankNum() ; Al¡quota de IPI
                                                            VSD_I_APIS   =BlankNum() ; Al¡quota de PIS
                                                            VSD_I_ACOFINS=BlankNum() ; Al¡quota de COFIN
                                                    
                                                            If CHECA_ESTOQUE()
                                                               Then If [NotaEC->Tipo de Operacao]="D" Or
                                                                       [NotaEC->Tipo de Operacao]="T"
                                                                       Then [Custo Medio Unitario]=NDecimal([SdEstq->Custo Total Atual]/[SdEstq->Saldo Atual],5)
                                                                            If [Custo Medio Unitario]=0
                                                                               Then [Custo Medio Unitario]=[SdEstq->Ultimo Custo Atual]
                                                                            EndIf
                                                                            VSD_I_Custo_Unitario=[Custo Medio Unitario]
                                                                    EndIf
                                                                    Campo="I_Quantidade"
                                                            EndIf   
                                                       Else MSG_NOTAE="AUTOMATICA"     
                                                    EndIf           
                                               Else KeyPress "ESC"
                                                    MSG_NOTAE = "Item n„o foi localizado!"
                                            EndIf
                                        Else MSG_NOTAE = "A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!"
                                    EndIf
                            EndIf 
                            QuitLoop  
                          EndWhile  
                          If MSG_NOTAE<>""
                             Then If MSG_NOTAE<>"AUTOMATICA" Then FastMsg(MSG_NOTAE) EndIf                                 
                                  VSD_I_Codigo_Cor_Tecido    = ""
                                  VSD_I_Descricao_Cor_Tecido = ""
                          EndIf
                          Release Vars MSG_NOTAE
                       Else If PARAM_DIGITA_COR_TECIDO = "N" 
                               Then Campo="I_Quantidade"
                            EndIf   
                  EndIf      
                  Echo Off                              
             Case Campo="I_Quantidade":
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  [Quantidade]=VSD_I_Quantidade
                  If CHECA_ESTOQUE()
                     Then Campo="I_UN_Item"
                  EndIf
                  If VSD_I_Fator_Conversao<>0
                     Then If Not IsBlank(VSD_I_Fator_Conversao)
                             Then If SYS_CODIGO_CLIENTE="0278"
                                     Then VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao 
                                     Else If VSD_I_Fator_Conversao<1
                                             Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,3)
                                             Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf

             Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Entrada]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  Moveto "NotaEI"
                                  [Unidade Entrada]=VSD_I_UN_Item
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Preco_Unitario":
                  VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                  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 If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                 EndIf
                 Campo="I_Taxa_Desconto_Unitario"
             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=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,6)
                          Campo="I_Preco_Total"
                     Else Campo="I_Valor_Desconto_Unitario"
                  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 If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                 EndIf
             Case Campo="I_Valor_Desconto_Unitario":
                  VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                  Campo="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 If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                  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 and
                    ( VSD_I_Preco_Total=0 or isblank(VSD_I_Preco_Total) )
                    then fastmsg("Valor inv lido !")
                    else Campo="I_CST_Item"
                   endif 

             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","E",VSD_I_CST_Item)
                          If TribCST<>""
                             Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                  If TribCST="10" Or TribCST="30" Or TribCST="70"
                                     Then CSTITEM2=""
                                          GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To CSTITEM
                                          If RetVal
                                             Then CSTITEM2 = SubStr(CSTITEM["Tipo Tributacao"],2,2)
                                                  If CSTITEM2<>"60"
                                                     Then MSG="O Item: "+[Codigo do Item]+" "+[Descricao do Item]+", est  cadastrado com o CST: "+CSTITEM["Tipo Tributacao"]
                                                          MSG=MSG+",//alterar o cadastro do item para CST: "+SubStr(CSTITEM["Tipo Tributacao"],1,1)+"60."
                                                          MSG=MSG+"////Conferir se o lan‡amento est  sendo feito corretamente,"
                                                          MSG=MSG+"//e se o item lan‡ado ‚ realmente Substitui‡Æo Tribut ria !"
                                                          Mensagem(MSG)
                                                  EndIf
                                          EndIf
                                          Release Vars CSTITEM, CSTITEM2
                                  EndIf   
                                  Switch
                                    Case (TribCST="00")                  : 
                                         VSD_I_TICMS="D"
                                         VSD_I_RBC_ICMS  =BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         Campo="I_AICMS"

                                    Case (TribCST="10")                  : 
                                         VSD_I_TICMS="S"
                                         VSD_I_RBC_ICMS  =BlankNum()
                                         
                                         Campo="I_AICMS"

                                    Case (TribCST="20")                  : 
                                         VSD_I_TICMS="D"

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         Campo="I_RBC_ICMS"

                                    Case (TribCST="30")  : 
                                         VSD_I_TICMS="S"
                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         CalcImposto(Campo)
                                         ;Campo="I_BC_ST"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="40")                  :  
                                         VSD_I_TICMS="I"

                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         ;Campo="I_CST_IPI"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="41")                  : 
                                         VSD_I_TICMS="N"

                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         ;Campo="I_CST_IPI"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="50" Or TribCST="51")  : 
                                         VSD_I_TICMS="O"

                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         ;Campo="I_CST_IPI"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="60")                  :
                                         VSD_I_TICMS="S"

                                        ;VSD_I_RBC_ICMS  =BlankNum()
                                        ;VSD_I_BC_ICMS   =BlankNum()
                                        ;VSD_I_AICMS     =BlankNum()
                                        ;VSD_I_Valor_ICMS=BlankNum()

                                         CalcImposto(Campo)
                                         ;Campo="I_BC_ST"
                                         ;Campo="I_CSOSN"
                                         Campo="I_RBC_ICMS"

                                    Case (TribCST="70")                  : 
                                         VSD_I_TICMS="S"

                                         Campo="I_RBC_ICMS"

                                    Case (TribCST="90")                  : 
                                         VSD_I_TICMS="O"

                                         Campo="I_RBC_ICMS"           
                                          
                                  EndSwitch
                          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")
                 CalcImposto(Campo)
                 Campo="I_BC_ICMS"
            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")   
                 Campo="I_CSOSN"
            Case Campo="I_CSOSN":
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3)
                 If TribCST<>""
                    Then If (TribCST="101" Or TribCST="201" Or TribCST="900")
                            Then Campo="I_ACSOSN" 
                            Else VSD_I_ACSOSN     =BlankNum()
                                 VSD_I_Valor_CSOSN=BlankNum()
                                 
                                 TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 Switch
                                   Case TribCST="10"       Or 
                                        TribCST="30"       Or 
                                        TribCST="60"       Or 
                                        TribCST="70"       Or 
                                        TribCST="90"        : Campo="I_MVA"    
                                   OtherWise                : VSD_I_BC_ST   =BlankNum()
                                                              VSD_I_MVA     =BlankNum()
                                                              VSD_I_Valor_ST=BlankNum() 
                                                              Campo="I_CST_IPI"      
                                 EndSwitch 
                                 If IsBlank(VSD_I_CSOSN)
                                    Then If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                                            Then Campo="I_CSOSN"
                                            Else VSD_I_CSOSN="0900"
                                         EndIf    
                                 EndIf
                         EndIf
                 EndIf   
            Case Campo="I_ACSOSN":
                 VSD_I_ACSOSN=ControlValue("I_ACSOSN")
                 Campo="I_Valor_CSOSN"
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 TribCST=SubStr(VSD_I_CST_Item,2,2)
                 Switch
                   Case TribCST="10"       Or 
                        TribCST="30"       Or 
                        TribCST="60"       Or 
                        TribCST="70"       Or 
                        TribCST="90"        : Campo="I_MVA"    
                   OtherWise                : VSD_I_BC_ST   =BlankNum()
                                              VSD_I_MVA     =BlankNum()
                                              VSD_I_Valor_ST=BlankNum() 
                                              Campo="I_CST_IPI"      
                 EndSwitch        
                         
            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 TribCST=SubStr(VSD_I_CST_Item,2,2)
                 Campo="I_BC_ST"                 
            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 (VSD_I_BC_ST>0 Or VSD_I_Valor_ST>0) And
                     VSD_I_Tipo_Item<>"P"                    
                    Then 
                         If Search("10",VSD_I_CST_Item)>0 Or
                            Search("30",VSD_I_CST_Item)>0 Or
                            Search("70",VSD_I_CST_Item)>0
                            Then MSG=    "Item com substitui‡Æo tribut ria deve usar CST ICMS://" 
                                 MSG=MSG+"[60] COBRADO ANTERIORMENTE POR ST. // //Verificar o cadastro do produto com o supervisor!"
                                 Mensagem(MSG)
                         EndIf   

                         If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                            Then
                                 If Search("201",VSD_I_CSOSN)>0 Or
                                    Search("202",VSD_I_CSOSN)>0 Or
                                    Search("203",VSD_I_CSOSN)>0
                                    Then MSG=    "Item com substitui‡Æo tribut ria deve usar CSOSN ICMS://" 
                                         MSG=MSG+"[500] COBRADO ANTERIORMENTE POR ST. // //Verificar o cadastro do produto com o supervisor!"
                                         Mensagem(MSG)
                                 EndIf   
                         EndIf   
                 EndIf    

                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI","E",VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
								                 Switch
                                  Case (TribCST="00" Or TribCST="01"):
                                       VSD_I_TIPI="D" 

                                       Campo="I_AIPI"
                                       
                                  Case (TribCST="02")                : 
                                       VSD_I_TIPI="I"

                                       VSD_I_AIPI     =BlankNum()
                                       VSD_I_BC_IPI   =BlankNum()
                                       VSD_I_Valor_IPI=BlankNum()
                                       
                                       Campo="I_TISSQN"

                                  Case (TribCST="03")                : 
                                       VSD_I_TIPI="N"

                                       VSD_I_AIPI     =BlankNum()
                                       VSD_I_BC_IPI   =BlankNum()
                                       VSD_I_Valor_IPI=BlankNum()
                                       
                                       Campo="I_TISSQN"

                                  Case (TribCST="04" Or TribCST="05"): 
                                       VSD_I_TIPI="O"

                                       VSD_I_AIPI     =BlankNum()
                                       VSD_I_BC_IPI   =BlankNum()
                                       VSD_I_Valor_IPI=BlankNum()

                                       Campo="I_TISSQN"
                                       
                                  Case (TribCST="49")                :
                                       VSD_I_TIPI="O" 

                                       Campo="I_AIPI"
                                       
        											  EndSwitch
        											  
        											  If Campo="I_TISSQN" And VSD_I_Tipo_Item<>"C"
        											     Then VSD_I_TISSQN="N"
                                        VSD_I_BC_ISSQN   =BlankNum()
                                        VSD_I_AISSQN     =BlankNum()
                                        VSD_I_Valor_ISSQN=BlankNum()
                                        Campo="I_CST_PIS"

                                        If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                           Then
                                                 VSD_I_CST_PIS     ="74"
                                                 VSD_I_BC_PIS      =BlankNum()
                                                 VSD_I_APIS        =BlankNum()
                                                 VSD_I_Valor_PIS   =BlankNum()
        
                                                 VSD_I_CST_COFINS  ="74"
                                                 VSD_I_BC_COFINS   =BlankNum()
                                                 VSD_I_ACOFINS     =BlankNum()
                                                 VSD_I_Valor_COFINS=BlankNum()
        
                                                 Campo="I_CFOP"
                                        EndIf   
                                EndIf        
        											  
                            Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                         EndIf
                  EndIf
             Case Campo="I_AIPI":
                  VSD_I_AIPI=ControlValue("I_AIPI")
                  CalcImposto(Campo)
                  Campo="I_BC_IPI"
             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")
								  If VSD_I_Tipo_Item="C"
								     Then Campo="I_TISSQN"
								     Else VSD_I_TISSQN="N"
                          VSD_I_BC_ISSQN   =BlankNum()
                          VSD_I_AISSQN     =BlankNum()
                          VSD_I_Valor_ISSQN=BlankNum()
                          Campo="I_CST_PIS"

                          If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                             Then
                                   VSD_I_CST_PIS     ="74"
                                   VSD_I_BC_PIS      =BlankNum()
                                   VSD_I_APIS        =BlankNum()
                                   VSD_I_Valor_PIS   =BlankNum()
         
                                   VSD_I_CST_COFINS  ="74"
                                   VSD_I_BC_COFINS   =BlankNum()
                                   VSD_I_ACOFINS     =BlankNum()
                                   VSD_I_Valor_COFINS=BlankNum()
         
                                   Campo="I_CFOP"
                           EndIf
                  EndIf

            Case Campo="I_TISSQN":
                 VSD_I_TISSQN=ControlValue("I_TISSQN")
                 If IsBlank(VSD_I_TISSQN)
                    Then VSD_I_TISSQN="N"
                 EndIf        
                 If Not IsBlank(VSD_I_TISSQN)
                    Then TribCST=Checa_CST("ISSQN","",VSD_I_TISSQN)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_ISSQN   =BlankNum()
                                         VSD_I_AISSQN     =BlankNum()
                                         VSD_I_Valor_ISSQN=BlankNum()
                                         Campo="I_CST_PIS"
                                    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")
                 CalcImposto(Campo)
                 Campo="I_BC_ISSQN" 
            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")
                 Campo="I_CST_PIS"

            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 (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then
                          VSD_I_CST_PIS     ="99"
                          VSD_I_BC_PIS      =BlankNum()
                          VSD_I_APIS        =BlankNum()
                          VSD_I_Valor_PIS   =BlankNum()

                          VSD_I_CST_COFINS  ="99"
                          VSD_I_BC_COFINS   =BlankNum()
                          VSD_I_ACOFINS     =BlankNum()
                          VSD_I_Valor_COFINS=BlankNum()

                          Campo="I_CFOP"
                    Else
                           If Not IsBlank(VSD_I_CST_PIS)
                              Then TribCST=Checa_CST("PIS","E",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
                 EndIf   
            Case Campo="I_APIS":
                 VSD_I_APIS=ControlValue("I_APIS")
                 CalcImposto(Campo)
               ;;Campo="I_BC_PIS"
                 Campo="I_CST_COFINS"
                
            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","E",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")
                 CalcImposto(Campo)
               ;;Campo="I_BC_COFINS"
                 Campo="I_CFOP"
            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 [CFO]
                 Ativa_Lookup()
                 Moveto [Codigo Fiscal de Operacao]
                 Locate VSD_I_CFOP
                 If RetVal
                    Then VSD_I_DESCFOP = [Descricao do CFO]
                         KeyPress "ESC"
                         If SubStr(VSD_I_CFOP,1,1)<>SubStr([NotaEC->CFO],1,1)
                            Then Mensagem("CFOP "+VSD_I_CFOP+" difere da nota "+[NotaEC->CFO]+" !")
                            Else Campo="I_NCM"
                         EndIf
                    Else Mensagem("CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                         VSD_I_CFOP=""
                         KeyPress "ESC"
                 EndIf
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 VSD_I_CDSERV =BlankNum()
                 VSD_I_MUNSERV=BlankNum()     
                 VSD_I_UFSERV =""
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_CDSERV"
                    Else VSD_I_CDSERV =BlankNum()
                         VSD_I_MUNSERV=BlankNum()     
                         VSD_I_UFSERV =""
                         If [Notaec->Inf_Rateios Itens] = "2"
                            ;[Notaec->Tipo de Operacao ] = "C" And
                            ;[Notaec->Inf_Rateios Itens] = "2" And
                            ;[Tipo do Item             ] = "T"
                            Then Campo="I_RAT_FRETE"
                            Else Campo="I_VRICMSDESON"
                         EndIf 
                 EndIf
                 
             Case Campo="I_RAT_FRETE":
                  VSD_I_RAT_FRETE=ControlValue("I_RAT_FRETE")
                  Campo="I_RAT_SEGURO"
                  
             Case Campo="I_RAT_SEGURO": 
                  VSD_I_RAT_SEGURO=ControlValue("I_RAT_SEGURO")
                  Campo="I_RAT_DESCONTO" 
                  
             Case Campo="I_RAT_DESCONTO":
                  VSD_I_RAT_DESCONTO=ControlValue("I_RAT_DESCONTO")
                  Campo="I_RAT_OUTDESP"
                  
             Case Campo="I_RAT_OUTDESP": 
                  VSD_I_RAT_OUTDESP=ControlValue("I_RAT_OUTDESP")
                  Campo="I_VRICMSDESON"
                  
             Case Campo="I_VRICMSDESON": 
                  VSD_I_VRICMSDESON=ControlValue("I_VRICMSDESON")
                  Campo="I_VRFCPST"
                  
             Case Campo="I_VRFCPST": 
                  VSD_I_VRFCPST=ControlValue("I_VRFCPST")
                  Campo="I_Acrescimos_Desctos"
                  
             Case Campo="I_CDSERV":
                  VSD_I_CDSERV=ControlValue("I_CDSERV")
                  Campo="I_MUNSERV"

             Case Campo="I_MUNSERV":
                  VSD_I_MUNSERV=ControlValue("I_MUNSERV")
                  Campo="I_Acrescimos_Desctos"

             Case Campo="I_Acrescimos_Desctos":
                  VSD_I_Acrescimos_Desctos=ControlValue("I_Acrescimos_Desctos")
                  Campo="I_Fator_Conversao"

             Case Campo="I_Fator_Conversao":
                  VSD_I_Fator_Conversao=ControlValue("I_Fator_Conversao")

                  Campo="I_Quantidade_Convertida"
                  If VSD_I_Fator_Conversao<>0
                     Then If Not IsBlank(VSD_I_Fator_Conversao)
                             Then If SYS_CODIGO_CLIENTE="0278"
                                     Then VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao 
                                     Else If VSD_I_Fator_Conversao<1
                                             Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,3)
                                             Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                                          EndIf
                                  EndIf
                                  Campo="I_CCusto"
                          EndIf
                  EndIf

             Case Campo="I_Quantidade_Convertida":
                  VSD_I_Quantidade_Convertida=ControlValue("I_Quantidade_Convertida")
                  Campo="I_CCusto"

             Case Campo="I_CCusto"             : 
                  VSD_I_CCusto=ControlValue("I_CCusto")
                  If Not IsBlank(VSD_I_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_I_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_I_CCusto          =""
                                          VSD_I_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_I_CCusto          =[Codigo CCusto]
                                          VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          [Codigo CCusto]       =VSD_I_CCusto
                                          If PARAM_ATTAB_PRECO="S" And 
                                             VSD_I_Tipo_Item="T"   And
                                             [NotaEC->Tipo de Operacao]="C"
                                             Then Switch
                                                    Case CHAVEI=1 Or IsBlank(VSD_I_Tabela_Preco): Campo="I_Tabela_Preco"
                                                    Case CHAVEI=0 : Campo="I_Indice_PrVenda"
                                                  EndSwitch
                                             Else Campo="I_Flag"
                                          EndIf
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_I_CCusto          =""
                                  VSD_I_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_I_Descricao_CCusto=""

                          If PARAM_ATTAB_PRECO="S" And 
                             VSD_I_Tipo_Item="T"   And
                             [NotaEC->Tipo de Operacao]="C"
                             Then Switch
                                    Case CHAVEI=1 Or IsBlank(VSD_I_Tabela_Preco): Campo="I_Tabela_Preco"
                                    Case CHAVEI=0 : Campo="I_Indice_PrVenda"
                                  EndSwitch
                             Else Campo="I_Flag"
                          EndIf

                  EndIf

             Case Campo="I_Tabela_Preco":
                  VSD_I_Tabela_Preco=ControlValue("I_Tabela_Preco")

                  If IsBlank(VSD_I_Tabela_Preco)
                     then
                          VSD_I_Indice_PrVenda=BlankNum()
                          VSD_I_Preco_Tabela  =BlankNum()
                          VSD_I_Preco_VendaOk =BlankNum()
                          Campo="I_Flag"
                     else
                          getrecord "\\sistemas\\vendas\\tbprcab" VSD_I_Tabela_Preco to regtbprcab 
                          if retval
                             then
                                  [Lookup_Tabela_Preco]=VSD_I_Tabela_Preco
                                  Tabela_Preco("Procura")
                                  Campo="I_Indice_PrVenda"
                             else
                                  Mensagem("Tabela de Pre‡o n„o Cadastrada !")
                          endif
                  endif   
                        
             Case Campo="I_Indice_PrVenda":
                  VSD_I_Indice_PrVenda = ControlValue("I_Indice_PrVenda")
                  VSD_I_Preco_VendaOk=VSD_I_Preco_VendaI
                  Campo="I_Preco_VendaOk"

             Case Campo="I_Preco_VendaOk":
                  VSD_I_Preco_VendaOk=ControlValue("I_Preco_VendaOk")
                  Campo="I_Flag"

             Case Campo="I_Flag" : AcceptDialog
             Case Campo="I_Flag2": CancelDialog
           EndSwitch
           If CHAVEI<>9 Then Registro_Item("Gravar") EndIf
           Temp=False
   EndSwitch
EndIf

If Campo="I_Preco_VendaOk"
   Then VSD_I_Preco_VendaOk=VSD_I_Preco_VendaI
EndIf

If Not IsAssigned(LOCALIZAR_POR)
   Then Switch 
          Case SYS_CODIGO_CLIENTE="0296" : LOCALIZAR_POR="CodFor"
          OtherWise                      : LOCALIZAR_POR="CodItem"
        EndSwitch   
EndIf

SelectControl Campo

TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"       Or
   Campo="I_Tipo_Item"         Or
   Campo="I_Tabela_Preco"      Or
   Campo="I_UN_Item"           Or
   (Campo="I_Codigo_Cor_Tecido" And PARAM_DIGITA_COR_TECIDO="N") Or
   Campo="I_CCusto"            Or 
   Campo="I_CFOP"              Or
   Campo="I_CST_IPI"           Or
   Campo="I_CST_Item"          Or           
   Campo="I_TISSQN"            Or      
   Campo="I_CST_PIS"           Or
   Campo="I_CST_COFINS"        Or
   Campo="I_MUNSERV"           Or
   Campo="I_CSOSN"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="I_OC"                      : MSGCAMPO="Ordem de compra"
  Case Campo="I_OC_Item"                 : MSGCAMPO="Item da ordem de compra"
  Case Campo="I_Seq"                     : MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Fornecedor"       : MSGCAMPO="Informe o c¢digo do item do fornecedor (Conforme NF/Romaneio)"
  Case Campo="I_Codigo_Item"             : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F4]Alterar modo localizar"
  Case Campo="I_Descricao_Item"          : MSGCAMPO="Descri‡„o do item"
  Case Campo="I_Tipo_Item"               : MSGCAMPO="Tipo do item"
  Case Campo="I_Quantidade"              : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                 : MSGCAMPO="Unidade de entrada"
  Case Campo="I_Preco_Unitario"          : MSGCAMPO="Pre‡o unit rio"
  Case Campo="I_Taxa_Desconto_Unitario"  : MSGCAMPO="Taxa desconto unit rio"
  Case Campo="I_Valor_Desconto_Unitario" : MSGCAMPO="Valor desconto unit rio"
  Case Campo="I_Preco_Total"             : MSGCAMPO="Pre‡o total"

  Case Campo="I_CST_Item"                : MSGCAMPO="Codigo da situa‡„o tribut ria para o ICMS"
  Case Campo="I_RBC_ICMS"                : MSGCAMPO="Informe a aliquota de redu‡Æo na base de c lculo do ICMS"
  Case Campo="I_BC_ICMS"                 : MSGCAMPO="Informe a base de c lculo do ICMS com seus rateios, [F4]=Calcular"
  Case Campo="I_AICMS"                   : MSGCAMPO="Informe a al¡quota do ICMS"
  Case Campo="I_Valor_ICMS"              : MSGCAMPO="Informe o valor do ICMS, [F4]=Calcular"
  Case Campo="I_CSOSN"                   : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"
  
  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 ST"
  Case Campo="I_BC_ST"                   : MSGCAMPO="Informe a base de c lculo da substitui‡Æo tribut ria com seus rateios, [F4]=Calcular"
  Case Campo="I_Valor_ST"                : MSGCAMPO="Informe o valor da substitui‡Æo tribut ria, [F4]=Calcular"

  Case Campo="I_CST_IPI"                 : MSGCAMPO="Codigo da situa‡„o tribut ria para o IPI"
  Case Campo="I_BC_IPI"                  : MSGCAMPO="Informe a base de c lculo do IPI, [F4]=Calcular"
  Case Campo="I_AIPI"                    : MSGCAMPO="Informe a al¡quota do IPI"
  Case Campo="I_Valor_IPI"               : MSGCAMPO="Informe o valor do IPI, [F4]=Calcular"

  Case Campo="I_TISSQN"                  : MSGCAMPO="Codigo da situa‡„o tribut ria para o ISSQN"
  Case Campo="I_BC_ISSQN"                : MSGCAMPO="Informe a base de c lculo do ISSQN com seus rateios, [F4]=Calcular"
  Case Campo="I_AISSQN"                  : MSGCAMPO="Informe a al¡quota do ISSQN"
  Case Campo="I_Valor_ISSQN"             : MSGCAMPO="Informe o valor do ISSQN, [F4]=Calcular"

  Case Campo="I_CST_PIS"                 : MSGCAMPO="Codigo da situa‡„o tribut ria para o PIS"
  Case Campo="I_BC_PIS"                  : MSGCAMPO="Informe a base de c lculo do PIS com seus rateios, [F4]=Calcular"
  Case Campo="I_APIS"                    : MSGCAMPO="Informe a al¡quota do PIS"
  Case Campo="I_Valor_PIS"               : MSGCAMPO="Informe o valor do PIS, [F4]=Calcular"

  Case Campo="I_CST_COFINS"              : MSGCAMPO="Codigo da situa‡„o tribut ria para o COFINS"
  Case Campo="I_BC_COFINS"               : MSGCAMPO="Informe a base de c lculo do COFINS com seus rateios, [F4]=Calcular"
  Case Campo="I_ACOFINS"                 : MSGCAMPO="Informe a al¡quota do COFINS"
  Case Campo="I_Valor_COFINS"            : MSGCAMPO="Informe o valor do COFINS, [F4]=Calcular"

  Case Campo="I_CFOP"                    : MSGCAMPO="CFOP para este item"
  Case Campo="I_NCM"                     : MSGCAMPO="NCM"

  Case Campo="I_RAT_FRETE"               : MSGCAMPO="Valor Frete, rateio deste Item"
  Case Campo="I_RAT_SEGURO"              : MSGCAMPO="Valor Seguro, rateio deste Item"
  Case Campo="I_RAT_DESCONTO"            : MSGCAMPO="Valor Desconto, rateio deste Item"
  Case Campo="I_RAT_OUTDESP"             : MSGCAMPO="Valor Outras Despesas, rateio deste Item"

  Case Campo="I_VRICMSDESON"             : MSGCAMPO="Valor Desconto NÆo Tributado (ICMS Desonerado)"
  Case Campo="I_VRFCPST"                 : MSGCAMPO="Valor FCP sobre ST"

  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"

  Case Campo="I_Acrescimos_Desctos"      : MSGCAMPO="Valor de ajuste para o custo final !"
  Case Campo="I_Fator_Conversao"         : MSGCAMPO="Fator de convers„o de entrada"
  Case Campo="I_CCusto"                  : MSGCAMPO="Centro de custo"

  Case Campo="I_Tabela_Preco"            : MSGCAMPO="Informe a tabela de pre‡o"
  Case Campo="I_Indice_PrVenda"          : MSGCAMPO="Öndice p/ c lculo do pre‡o de venda"
  Case Campo="I_Preco_VendaOk"           : MSGCAMPO="Pre‡o de venda a praticar"
  Case Campo="I_Codigo_Cor_Tecido"       : MSGCAMPO="Codigo da cor/tecido"
  OtherWise                              : MSGCAMPO=""
EndSwitch

If Sw_Dialog="Item"
   Then                                          
        If CHAVEI=0
            Then TECLA=TECLA+"Ctrl+Del=Excluir  "
            Else TECLA=TECLA+"                  "
        EndIf
        TECLA=TECLA+"Alt+F=Fun‡”es  "
EndIf                
If Opcao_Ver=True           
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (Item_Dialog)

;*******************************************************************************
;* Digitacao da Justificativa de Cancelamento                                  *
;*******************************************************************************
Proc Digita_Informacoes_Adicionais()
Private CampAnt,ANT_SEQ

ANT_SEQ = [Sequencia do Lancamento]
CampAnt = Field()

Prompt " Esc=Cancelar  F2=Gravar "

Moveto "NotaEc"
FormKey

Moveto "NotaEI" 
Edita_Memo("Informacoes_Adicionais",08,01,15,76,"Informa‡äes Adicionais")
UnLockRecord

Moveto "NotaEc"
FormKey
Moveto [Numero do Lancamento]
Locate LANCTO
IsLockRecord()

Moveto "NotaEi"
Moveto [Sequencia do Lancamento]
Locate ANT_SEQ
Moveto Field CampAnt
           
EndProc ;Digita_Informacoes_Adicionais()

;*******************************************************************************
;* Rotina para Pegar Dados do Item                                             *
;*******************************************************************************                              
Proc Pega_Dados(AUX_ITEM)
Private AUX_ITEM,REG_ITEM

GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP
If RetVal
   Then EDITA_DESCRICAO_ITEM    = REG_ITEMCOMP["Edita Descricao do Item"]
        VSD_I_Indice_PrVenda    = REG_ITEMCOMP["Indice Preco de Venda"]
   Else FastMsg("Item n„o cadastrado nos complementos!")
        Return False
EndIf

Moveto "NotaeI"     
[Codigo do Item]=VSD_I_Codigo_Item
[MVA           ]=VSD_I_MVA

If ([Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10") and [NotaEC->UF]<>UFD And Not CODFORN_OK
   Then If SubStr([Tipo Tributacao],1,1)="1" Or
           SubStr([Tipo Tributacao],1,1)="2" Or
           SubStr([Tipo Tributacao],1,1)="8" Or
           SubStr([Tipo Tributacao],1,1)="3"
          Then [Aliquota de ICMS]= 4
          Else [Aliquota de ICMS]= UF_ALIQUOTA_ICMS
        EndIf
EndIf

[CFO                  ]=[NotaEC->CFO]
[ICMS UF_ORIGEM       ]=AICMSUFO
[ICMS UF_DESTINO      ]=AICMSUFD
[Indice Preco de Venda] = VSD_I_Indice_PrVenda

VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]

If SYS_CODIGO_CLIENTE="0319"
   Then [Fator de Conversao]=1
EndIf 

;--- tratando IPI/Entrada ------------------------------------------------------
if [NotaEC->Tipo de Operacao]="D"
   then 
        switch
          case [IPI_CST ]="50" : [IPI_CST ]="00"
          case [IPI_CST ]="51" : [IPI_CST ]="01"
          case [IPI_CST ]="52" : [IPI_CST ]="02"
          case [IPI_CST ]="53" : [IPI_CST ]="03"
          case [IPI_CST ]="54" : [IPI_CST ]="04"
          case [IPI_CST ]="55" : [IPI_CST ]="05"
        endswitch
   else [IPI_CST ]=""     
endif

;--- tratando PIS/COFINS -------------------------------------------------------
If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
    Then 
         [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
         [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
Endif
   
if TPEMPR="DEBITO/CREDITO" 
   then
        switch
          case empresa_regimetributario="LUCRO REAL" or [NotaEC->Tipo de Operacao]="D":
            switch
              case [PIS_CST ]="01" : [PIS_CST ]="50"   [COFINS_CST ]="50"
              case [PIS_CST ]="06" : [PIS_CST ]="73"   [COFINS_CST ]="73"
              case [PIS_CST ]="07" : [PIS_CST ]="71"   [COFINS_CST ]="71"
              case [PIS_CST ]="08" : [PIS_CST ]="74"   [COFINS_CST ]="74"
              case [PIS_CST ]="09" : [PIS_CST ]="72"   [COFINS_CST ]="72"
              case [PIS_CST ]="49" : [PIS_CST ]="98"   [COFINS_CST ]="98"
            endswitch
          
          otherwise:
                   if empresa_regimetributario="LUCRO PRESUMIDO" 
                     then [PIS_CST        ]  ="98"  [PIS_ALIQUOTA   ]=BlankNum() 
                          [COFINS_CST     ]  ="98"  [COFINS_ALIQUOTA]=BlankNum()
                     else [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
                          [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum()
                   endif
            
        endswitch
Endif
            
release vars item_familia
Echo Off

Return True

EnDProc ;Pega_Dados()        

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc CalcImposto(Campo)
Private Campo

; *** nÆo implementado !!

;--- ICMS/ICMS ST -------------------------------------------------------------- 
Switch
  Case Campo="I_CST_Item":

  Case Campo="I_AICMS"   :
EndSwitch

;--- IPI ----------------------------------------------------------------------- 
Switch
  Case Campo="I_AIPI" :
EndSwitch

;--- ISSQN --------------------------------------------------------------------- 
Switch
  Case Campo="I_AISSQN" :
EndSwitch

;--- PIS ----------------------------------------------------------------------- 
Switch
  Case Campo="I_APIS" :
EndSwitch

;--- COFINS -------------------------------------------------------------------- 
Switch
  Case Campo="I_ACOFINS" :
EndSwitch

EndPRoc

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()

INICIO_DIALOG=True
Moveto "NotaEI"
Moveto [Sequencia do Lancamento]
Locate [NotaEC->Numero do Lancamento],SEQIT
CopyToArray RegItem

QTDCONV =[Quantidade Convertida]
QUANT   =[Quantidade ]
CTTOTAL =NDecimal(([Quantidade ]*[Custo Medio Unitario]),2)
VSD_I_Flag=""

VSD_I_TX_ICMS_SAIDA=0
VSD_I_RD_ICMS_SAIDA=0
If Not IsBlank([Codigo do Item])
   Then VSD_I_Codigo_Item=[Codigo do Item]
        Moveto [Codigo do Item]
        Ativa_Lookup()
        Moveto [Codigo do Item]
        Locate VSD_I_Codigo_Item
        If RetVal
           Then VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS     ]
                VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]
        EndIf
        KeyPress "ESC"
EndIf

Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;***********************************************************
;** Rotina para elaboracao de historico lancamento        **
;***********************************************************
Proc HISTORICO()
HISTORICO = VSD_V_Descri_Hist
POS       = Search("*",HISTORICO)
NOVOHIST  = SubStr(HISTORICO,1,POS-1)
While True
      POSN = SearchFrom("*",HISTORICO,POS+1)
      If POSN = 0
         Then NOVOHIST = NOVOHIST + SubStr(HISTORICO,POS+1,70)
              QuitLoop
      EndIf

      COMP = SubStr(HISTORICO,POS,(POSN-POS)+1)

      Switch
      Case COMP = "*CHEQUE*":
           NOVOHIST = NOVOHIST + VSD_V_NoCheque
      Case COMP = "*CONTDEST*":
           NOVOHIST = NOVOHIST + VSD_V_Descricao_Conta
      Case COMP = "*CONTORIG*":
           NOVOHIST = NOVOHIST + VSD_V_Descricao_Conta               
      Case COMP = "*TPDOCTO*":
           NOVOHIST = NOVOHIST + [Notaec->Tipo do Documento] +"/"+ [Notaec->Serie do Documento]
      Case COMP = "*LIVRE*":
           COMPLEMENTO()
      Case COMP = "*DOCTO*":
           NOVOHIST = NOVOHIST + [Notaec->Numero do Documento]
      OtherWise:
           NOVOHIST = NOVOHIST + SubStr(COMP,2,SearchFrom("*",COMP,2)-2)
      EndSwitch
      POS = POSN
EndWhile
VSD_V_Descri_Hist = NOVOHIST
EndProc ; (HISTORICO)

;***********************************************************
;** Rotina para Digitacao de Complemento                  **
;***********************************************************
Proc COMPLEMENTO()
LIVRE=""
ShowDialog "[ Complemento ]" @ 13,12 height 06 width 53
  @ 0,1 ?? "Texto:"

  Accept @ 00,07 width 43 "A60" Picture "!*!" tag "LIVRE" to LIVRE

  Pushbutton @ 02,20 width 11 "OK"        OK default Value "Say Yes" Tag "YES" to BottonValue
  Pushbutton @ 07,20 width 11 "~C~ancela" CANCEL                     Tag "NO"  to BottonValue

Enddialog
Mouse Show
NOVOHIST = NOVOHIST + LIVRE
EndProc ; (COMPLEMENTO)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
Private TIT_COFINS1, TIT_CONFIS2

MSGCAMPO =""
ModoLocalizarItem("","","")

Sw_Dialog="Item"
Echo Normal
Echo Off
Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP",-33,"F6","F7","F8",-62
    @ 01,0 height 22 width 80

   Accept @ -01,43 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,08 "Compra" For "I_OC"
   Accept @ 01,08 Width 09 "A06" picture "#*#" Tag "I_OC" to VSD_I_OC
   Label  @ 00,16 "/Item" For "I_OC_Item"
   Accept @ 01,18 Width 05 "N" picture "!*!" Tag "I_OC_Item" to VSD_I_OC_Item
   Label  @ 00,27 "Codigo Item/Fornecedor" For "I_Codigo_Fornecedor"
   Accept @ 01,28 Width 23 "A20" picture "!*!" Tag "I_Codigo_Fornecedor" to VSD_I_Codigo_Fornecedor
   Label  @ 00,51 "Referˆncia" For "I_Referencia"
   Accept @ 01,52 Width 12 "A9" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia
   Label  @ 00,64 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 01,65 Width 13 "N" picture "#*#.[#####]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   
   @ 02,03 ?? LOCALIZAR_POR

   Label  @ 02,01 ">" For "I_Codigo_Item"
   Accept @ 03,01 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 02,18 "Descricao Item" For "I_Descricao_Item"
   Accept @ 03,18 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 02,51 "Tipo" For "I_Tipo_Item"
   Accept @ 03,52 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 02,57 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,57 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 03,65 Width 13 "A13" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido

   Label  @ 04,01 "Quantidade" For "I_Quantidade"
   Accept @ 05,01 Width 13 "N" picture "#*#.[#####]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 04,15 "UnC" For "I_UN_Item"
   Accept @ 05,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 04,21 "Pr.Unitario" For "I_Preco_Unitario"
   Accept @ 05,21 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario

   Label  @ 04,34 "%/" For "I_Taxa_Desconto_Unitario"
   Accept @ 05,34 Width 11 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 04,37 "Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 05,46 Width 12 "N" picture "#*#.[#####]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 04,59 "Pr.Total" For "I_Preco_Total"
   Accept @ 05,59 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total
   
   @ 06,00 ?? "Impostos CST  %Red     Aliq.  BC         Valor" 
   Label  @ 07,00 "  ICMS" For "I_CST_Item"
   Accept @ 07,80 Width 03 "A1" picture "!" Tag "I_TICMS" to VSD_I_TICMS ; Ficar invisivel
   Accept @ 07,08 Width 06 "A3" picture "###" Tag "I_CST_Item" to VSD_I_CST_Item
   Accept @ 07,13 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 07,22 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 07,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_ICMS" to VSD_I_BC_ICMS
   Accept @ 07,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 08,00 " CSOSN" For "I_CSOSN"
   Accept @ 08,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 08, 10, 08, 51
   Accept @ 08,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 08, 24, 08, 49
   Accept @ 08,40 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

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

   Label  @ 10,00 "   IPI" For "I_CST_IPI"
   Accept @ 10,80 Width 03 "A1" picture "!" Tag "I_TIPI" to VSD_I_TIPI ; Ficar invisivel
   Accept @ 10,08 Width 16 "A2" picture "##" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 10,22 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 10,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_IPI" to VSD_I_BC_IPI
   Accept @ 10,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 11,00 " ISSQN" For "I_TISSQN"
   Accept @ 11,08 Width 21 "A1" picture "D,N,I,S,R" Tag "I_TISSQN" to VSD_I_TISSQN
   Accept @ 11,22 Width 08 "N" picture "#*#.[##]"   Tag "I_AISSQN" to VSD_I_AISSQN
   Accept @ 11,29 Width 12 "$" picture "#*#.[##]"   Tag "I_BC_ISSQN" to VSD_I_BC_ISSQN
   Accept @ 11,40 Width 12 "$" picture "#*#.[##]"   Tag "I_Valor_ISSQN" to VSD_I_Valor_ISSQN

   Label  @ 12,00 "   PIS" For "I_CST_PIS"
   Accept @ 12,08 Width 16 "A2" picture "##" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 12,22 Width 08 "N" picture "#*#.[#####]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 12,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_PIS" to VSD_I_BC_PIS
   Accept @ 12,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 13,00 "COFINS" For "I_CST_COFINS"
   Accept @ 13,08 Width 16 "A2" picture "##" Tag "I_CST_COFINS" to VSD_I_CST_COFINS
   Accept @ 13,22 Width 08 "N" picture "#*#.[#####]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 13,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_COFINS" to VSD_I_BC_COFINS
   Accept @ 13,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

   Label  @ 06,56 "CFOP" For "I_CFOP"
   Accept @ 07,57 Width 07 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 06,64 "NCM" For "I_NCM"
   Accept @ 07,65 Width 11 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM
 
   Label  @ 08,52 "Frete"    For "I_RAT_FRETE"
   Accept @ 09,53 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_FRETE" to VSD_I_RAT_FRETE
   Label  @ 08,64 "Seguro"   For "I_RAT_SEGURO"
   Accept @ 09,65 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_SEGURO" to VSD_I_RAT_SEGURO

   Label  @ 10,52 "Desconto" For "I_RAT_DESCONTO"
   Accept @ 11,53 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_DESCONTO" to VSD_I_RAT_DESCONTO
   Label  @ 10,64 "OutDesp"  For "I_RAT_OUTDESP"
   Accept @ 11,65 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_OUTDESP" to VSD_I_RAT_OUTDESP

   Label  @ 12,52 "DescNTrib" For "I_VRICMSDESON"
   Accept @ 13,53 Width 11 "$" picture "#*#.[##]" Tag "I_VRICMSDESON" to VSD_I_VRICMSDESON
   Label  @ 12,64 "FCP ST"  For "I_VRFCPST"
   Accept @ 13,65 Width 11 "$" picture "#*#.[##]" Tag "I_VRFCPST" to VSD_I_VRFCPST

   Label  @ 14,53 "Servi‡o" For "I_CDSERV"
   Accept @ 15,53 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 14,63 "Munic¡pio" For "I_MUNSERV"
   Accept @ 15,63 Width 10 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 14,73 "UF" For "I_UFSERV"
   Accept @ 15,73 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 16,01 "Ajustes +/-" For "I_Acrescimos_Desctos"
   Accept @ 17,01 Width 13 "N" picture "[-]#*#.[#####]" Tag "I_Acrescimos_Desctos" to VSD_I_Acrescimos_Desctos
   @ 16,14 ?? "/"
   Accept @ 17,15 Width 05 "A2" picture "!*!" to VSD_I_UN_Item

   Label  @ 16,21 "Ft.Conversao=>" For "I_Fator_Conversao"
   Accept @ 17,22 Width 13 "N" picture "#*#.[#####]" Tag "I_Fator_Conversao" to VSD_I_Fator_Conversao
   Label  @ 16,36 "Quantidade" For "I_Quantidade_Convertida"
   Accept @ 17,36 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade_Convertida" to VSD_I_Quantidade_Convertida
   Label  @ 16,49 "UnI" For "I_Unidade_Interna"
   Accept @ 17,49 Width 05 "A2" picture "!!" Tag "I_Unidade_Interna" to VSD_I_Unidade_Interna
   Label  @ 16,55 "Custo" For "I_Ct_Unitario"
   Accept @ 17,55 Width 12 "N" picture "#*#.[#####]" Tag "I_Ct_Unitario" to VSD_I_Ct_Unitario
   @ 17,35 ?? "="
   @ 17,54 ?? "/"

   Label  @ 18,01 "Centro Custo" For "I_CCusto"
   Accept @ 19,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 19,10 Width 25 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto

   Label  @ 18,35 "Tabela=" For "I_Tabela_Preco"
   Accept @ 19,36 Width 08 "A5" picture "!*!" Tag "I_Tabela_Preco" to VSD_I_Tabela_Preco
   Label  @ 18,42 "Pre‡o/" For "I_Preco_Tabela"
   Accept @ 19,44 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   @ 18,49 ?? VSD_I_Unidade_Interna
   Label  @ 18,54 "%Venda" For "I_Indice_PrVenda"
   Accept @ 19,54 Width 09 "$" picture "#*#.[##]" Tag "I_Indice_PrVenda" to VSD_I_Indice_PrVenda
   Label  @ 18,63 "PrVenda/" For "I_Preco_VendaOk"
   Accept @ 19,63 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_VendaOk" to VSD_I_Preco_VendaOk
   @ 18,72 ?? VSD_I_Unidade_Interna

   Accept @ 19,75 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

EndDialog
Mouse Show
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc  ;  (DigitaI)


;*******************************************************************************
;* Rotina para Ver Calculo do Custo                                            *
;*******************************************************************************
Proc Ver_CalcCusto()
Private Tit

Sw_Dialog="Custo"
Tit=" C lculo custo unit rio por ["+VSD_I_UN_Item+"] "
INICIO_DIALOG=True
Showdialog Tit Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "ESC"
     @ 10,0 height 13 width 80

   @ 00,00 ?? "(=)Pre‡o..."+Format("W10.2,EIC",VCU_Preco_Unitario)+Spaces(3)
   @ 01,00 ?? "(-)Descto.."+Format("W13.5,EIC",VCU_Desconto)
   @ 02,00 ?? "(=)Liquido."+Format("W13.5,EIC",VCU_Preco_Unitario-VCU_Desconto)
   @ 03,00 ?? "(+)Frete..."+Format("W13.5,EIC",VCU_FRETE)
   @ 04,00 ?? "(+)Seguro.."+Format("W13.5,EIC",VCU_SEGURO)
   @ 05,00 ?? "(+)Desp.Acs"+Format("W13.5,EIC",VCU_OUTDESP)
   @ 06,00 ?? "(-)DesNTrib"+Format("W13.5,EIC",VCU_DNTRIB)
   @ 07,00 ?? "(+)FCP ST.."+Format("W13.5,EIC",VCU_FCPST)

   @ 08,00 ?? "("+VCU_SINAL_ACR_DESC+")+/-Rat.."     +Format("W13.5,EIC",VCU_ACRE_DESC)
   @ 09,00 ?? "(+)Servi‡o."                          +Format("W13.5,EIC",VCU_SERVICO)
   @ 10,00 ?? "("+VCU_SINAL_AJUSTES +")Ajustes."     +Format("W13.5,EIC",VCU_AJUSTES)
  
   @ 00,25 ?? "(+)Dif.ICMS"                          +Format("W14.5,EIC",VCU_DIF_ICMS)
   @ 01,25 ?? "("+VCU_SINAL_IPI     +")IPI....."     +Format("W14.5,EIC",VCU_IPI)
   @ 02,25 ?? "(+)ST......"                          +Format("W14.5,EIC",VCU_VR_Subst)
   @ 03,25 ?? "("+VCU_SINAL_COFINSCR+")"+TIT_COFINSCR+Format("W13.5,EIC",VCU_COFINSCR)
   @ 04,25 ?? "("+VCU_SINAL_COFINSDB+")"+TIT_COFINSDB+Format("W13.5,EIC",VCU_COFINSDB)
   @ 05,25 ?? "("+VCU_SINAL_ICMSCR  +")"+TIT_ICMSCR  +Format("W13.5,EIC",VCU_ICMSCR)
   @ 06,25 ?? "("+VCU_SINAL_ICMSDB  +")"+TIT_ICMSDB  +Format("W13.5,EIC",VCU_ICMSDB)
   @ 07,25 ?? "("+VCU_SINAL_PIS     +")"+TIT_PIS     +Format("W13.5,EIC",VCU_PIS)
              
   
   @ 00,52 ?? "(=)Custo."+Format("W14.5,EIC",VSD_I_Custo_Unitario)
   @ 01,52 ?? "(*)BC.PV."+Format("W14.5,EIC",VCU_BC_PrVenda)
   @ 02,52 ?? "(+)IC.PV."+Format("W14.5,EIC",VCU_VrIndice_PrVenda)
   @ 03,52 ?? "(=)Venda."+Format("W11.2,EIC",VSD_I_Preco_Venda)+"/"+VSD_I_UN_Item
   @ 04,52 ?? "         "+Format("W11.2,EIC",VSD_I_Preco_VendaI)+"/"+VSD_I_Unidade_Interna

   Accept @ 05,75 Width 1 "A1" picture "!" Tag "I_Flag2" to VSD_I_Flag2

   PaintCanvas Attribute 32  00, 00, 10, 77

   PaintCanvas Attribute 47  00, 12, 10, 23
   PaintCanvas Attribute 47  00, 37, 08, 50
   PaintCanvas Attribute 47  00, 61, 00, 77
   PaintCanvas Attribute 47  03, 61, 03, 77

EndDialog
Sw_Dialog="Item"
EndProc  ;  (DigitaI)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro, regitens

Switch
  Case Funcao_Registro="Gravar":
       [Numero da OC              ]=VSD_I_OC
       If Not IsBlank(VSD_I_OC_Item)
          Then [Item da OC                ]=NumVal(VSD_I_OC_Item)
       EndIf
       [Codigo da Empresa         ]=[NotaEC->Codigo da Empresa]
       [Codigo do Item            ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo_Fornecedor         ]=VSD_I_Codigo_Fornecedor
       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido

       [Lookup_Tabela_Preco       ]=VSD_I_Tabela_Preco
       [Indice Preco de Venda     ]=VSD_I_Indice_PrVenda

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Unidade Entrada           ]=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)

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

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

       [IPI_CST                   ]=VSD_I_CST_IPI  
       [Tributacao de IPI         ]=VSD_I_TIPI
       [IPI_BC                    ]=VSD_I_BC_IPI 
       [Aliquota de IPI           ]=VSD_I_AIPI
       [Valor do IPI              ]=VSD_I_Valor_IPI

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

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

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

       [Codigo CCusto             ]=VSD_I_CCusto
       [Descricao CCusto          ]=VSD_I_Descricao_CCusto

       [Fator de Conversao        ]=VSD_I_Fator_Conversao
       [Quantidade Convertida     ]=VSD_I_Quantidade_Convertida

       [Valor Acrescimos_Desctos  ]=VSD_I_Acrescimos_Desctos
       [Preco_Venda               ]=VSD_I_Preco_VendaOk

       [NCM                       ]=VSD_I_NCM                
       [CFO                       ]=VSD_I_CFOP                
       [MVA                       ]=VSD_I_MVA    
       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)
       [ICMS_CredSN_Aliquota      ]=VSD_I_ACSOSN
       [ICMS_CredSN_Valor         ]=VSD_I_Valor_CSOSN 
       
       [Valor Frete Total         ]=VSD_I_RAT_FRETE               
       [Valor Seguro Total        ]=VSD_I_RAT_SEGURO              
       [Valor Desconto Total      ]=VSD_I_RAT_DESCONTO            
       [Valor OutDesp Total       ]=VSD_I_RAT_OUTDESP                     

       [ICMS_Valor_Desonerado     ]=VSD_I_VRICMSDESON
       [FCP_ST_Valor              ]=VSD_I_VRFCPST      

       Play "FT_CUSTO"
       UnLockRecord
       SaveTables         
       
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia do Lancamento   ]
       VSD_I_OC                     =[Numero da OC              ]
       VSD_I_OC_Item                =[Item da OC                ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Tabela_Preco           =[Lookup_Tabela_Preco       ]
       VSD_I_Indice_PrVenda         =[Indice Preco de Venda     ]
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Entrada           ]
       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_Preco_Tabela           =[Preco Unitario Tabela     ]
       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]

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

       VSD_I_BC_ST                  =[ICMS_ST_BC                ]   
       VSD_I_AST                    =BlankNum()                       
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]   

       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_CST_IPI                =[IPI_CST                   ]  
       VSD_I_BC_IPI                 =[IPI_BC                    ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

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

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

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

       VSD_I_CCusto                 =[Codigo CCusto             ]
       VSD_I_Descricao_CCusto       =[Descricao CCusto          ]
       VSD_I_Fator_Conversao        =[Fator de Conversao        ]
       VSD_I_Acrescimos_Desctos     =[Valor Acrescimos_Desctos  ]
       VSD_I_Preco_Venda            =[Preco_Venda               ]
       VSD_I_Preco_VendaOk          =[Preco_Venda               ]
       VSD_I_Unidade_Interna        =[Unidade Interna           ]
       VSD_I_Quantidade_Convertida  =[Quantidade Convertida     ]
       VSD_I_Codigo_Fornecedor      =[Codigo_Fornecedor         ]

       VSD_I_Flag                   =""
       VSD_I_Ct_Unitario            =BlankNum()
       VSD_I_Preco_VendaI           =BlankNum()

       VSD_I_NCM                    =[NCM                       ]
       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_MVA                    =[MVA                       ]    
       VSD_I_CSOSN                  =SubStr([Tipo Tributacao],1,1)+[CSOSN]
       VSD_I_ACSOSN                 =[ICMS_CredSN_Aliquota      ]    
       VSD_I_Valor_CSOSN            =[ICMS_CredSN_Valor         ]
       
       VSD_I_RAT_FRETE              = [Valor Frete Total        ]
       VSD_I_RAT_SEGURO             = [Valor Seguro Total       ]
       VSD_I_RAT_DESCONTO           = [Valor Desconto Total     ]
       VSD_I_RAT_OUTDESP            = [Valor OutDesp Total      ]

       VSD_I_VRICMSDESON            = [ICMS_Valor_Desonerado     ]
       VSD_I_VRFCPST                = [FCP_ST_Valor              ]

       getrecord "\\sistemas\\estoque\\itens" VSD_I_Codigo_Item to regitens
       if retval
          then
               VSD_I_Peso_Liquido = regitens["Peso Liquido"]
               VSD_I_Referencia   = regitens["Referencia"  ]
          else     
               VSD_I_Peso_Liquido = blankNum()
               VSD_I_Referencia   = ""
       endif        


       Play "FT_CUSTO"   
EndSwitch   
EndProc  ; (Registro_Item)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
        Switch
          Case CHAVEI=1 or CHAVEI=0   : Tabela_Preco("IncAlt")
          
          Case VSD_I_OC>"000000" And
               VSD_I_OC_Item>0        : Tabela_Preco("IncAlt")
               
        EndSwitch
        ESTOQUE()
        ATUA_COMPRA()
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                Exclusao_I()
        EndIf
EndIf
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Atualiza Tabela Preco                                                       *
;*******************************************************************************
Proc Tabela_Preco(Acao)
Private Acao,Reajusta,regtbprite

If IsBlank(VSD_I_Tabela_Preco)     Or
   PARAM_ATTAB_PRECO         <>"S" Or
   [NotaEI->Tipo do Item    ]<>"T" Or
   [NotaEC->Tipo de Operacao]<>"C"
   Then Return
EndIf

Reajusta=True
Moveto "\\Sistemas\\Vendas\\TbprIte"
Switch
  Case Acao="Procura":
       Moveto [Codigo da Tabela]
       Locate VSD_I_Tabela_Preco,VSD_I_Codigo_Item
       If Not RetVal
          Then VSD_I_Preco_Tabela=BlankNum()
          Else VSD_I_Preco_Tabela=[Preco Unitario]
       EndIf
  Case Acao="IncAlt":
       Moveto [Codigo da Tabela]
       Locate VSD_I_Tabela_Preco,VSD_I_Codigo_Item
       If Not RetVal
          Then End
               Down
               [Codigo da Tabela ] = VSD_I_Tabela_Preco
               [Codigo do Item   ] = VSD_I_Codigo_Item
               [Lookup_Item      ] = VSD_I_Codigo_Item
               [Lookup_Item      ] = ""
       EndIf
       If VSD_I_Preco_VendaOk>0
          Then 
               MSG=    Completa("Item: "+[NotaEi->Codigo do Item]+" "+[Notaei->Descricao do Item],50," ")+"// //"
          
               MSG=MSG+Completa("Valor da Tabela: "+Format("W10.2,EIC",[Preco Unitario     ]),50," ")+"//"
               MSG=MSG+Completa("Data Referente.: "+Format("D13",[Data Ultimo Reajuste     ]),50," ")+"// //"
               MSG=MSG+Completa("Valor Calculado: "+Format("W10.2,EIC",VSD_I_Preco_VendaOk  ),50," ")
               MSG=MSG+"// //Atualiza Tabela de Pre‡o ?"
               ConfGeral(MSG)
               If OK="N" Then Reajusta=False EndIf
          Else Reajusta=False
       EndIf
       If Reajusta
          Then [Preco Unitario      ] = VSD_I_Preco_VendaOk
               [Data Ultimo Reajuste] = Today()
               [Taxa Ultimo Reajuste] = Round(((VSD_I_Preco_VendaOk*100)/VSD_I_Preco_Tabela)-100,2)
               UnLockRecord
       EndIf
EndSwitch
Moveto "NotaeI"
EndProc ; (Tabela_Preco)

;*******************************************************************************
;* Atualiza Quantidade Entregue da Ordem de Compra                             *
;*******************************************************************************
Proc ATUA_COMPRA()
private itemocOk

If Not IsBlank([NotaEI->Numero da OC])
   Then 
        itemocOk=false

        Moveto "NotaEC"
        [Numero da OC link]=[NotaEI->Numero da OC]
        
        Moveto "\\Sistemas\\Compras\\OCI"

        if not IsBlank([NotaEI->Item da OC])
           then
                Moveto [Item da OC]
                Locate [NotaEI->Item da OC]
                If RetVal and [Codigo do Item]=[NotaEI->Codigo do Item]
                   Then itemocOk=true
                EndIf
        endif

        if not itemocOk
           then
                scan
                  if [Codigo do Item]=[NotaEI->Codigo do Item]
                     then itemocOk=true
                          QuitLoop
                  endif
                endscan
        EndIf
        
        if itemocOk
           then 
                If CHAVEI<>8
                   Then [Quantidade Entregue]=([Quantidade Entregue]-QUANT)+[NotaEI->Quantidade]
                   Else [Quantidade Entregue]=[Quantidade Entregue]-[NotaEI->Quantidade]
                EndIf
                UnLockRecord
                
                ATUA_SITUACAO_COMPRA()
        endif   
EndIf
EndProc   ; (Atua_COMPRA)

;*******************************************************************************
;* Atualiza Situacao da Ordem de Compra                                        *
;*******************************************************************************
Proc ATUA_SITUACAO_COMPRA()
Private WC_NUMCOM, WC_COMENT

WC_NUMCOM=0
WC_COMENT=0
Scan
  WC_NUMCOM=WC_NUMCOM+1
  If ([Quantidade]-[Quantidade Entregue])<=0
     Then WC_COMENT=WC_COMENT+1
  EndIf
EndScan
If WC_NUMCOM>0
   Then Moveto "\\Sistemas\\Compras\\OCC"
        If WC_NUMCOM=WC_COMENT
           Then 
                [Situacao da OC]="ENTREGUE"
           Else 
                switch
                  case SYS_CODIGO_CLIENTE="xx0377" : [Situacao da OC]="ENTREGUE" ;Sol. 30826 ----- Mesmo que seja faturamento parcial, o status ser  ENTREGUE
                  case SYS_CODIGO_CLIENTE="0388"   : [Situacao da OC]="ENTREGUE" ;Sol. 45122 ----- Mesmo que seja faturamento parcial, o status ser  ENTREGUE
                  otherwise                        : [Situacao da OC]="ABERTO"
                endswitch
        EndIf
        UnLockRecord
EndIf
EndProc     ; (Atua_Situacao_COMPRA)

;*******************************************************************************
;* Rotina para Transferir DynArray para Array                                 *
;*******************************************************************************
Proc Transfere_DynArray_Array(NomeArray)
Private NomeArray

If DynArraySize(NomeArray)=0
   Then Array ARRAY_COMPRA_ITEM[1]
        ARRAY_COMPRA_ITEM[1]=""
   Else Array ARRAY_COMPRA_ITEM[DynArraySize(NomeArray)]
        For i From 1 To DynArraySize(NomeArray)
          ARRAY_COMPRA_ITEM[i] = NomeArray[i]
        Endfor      
EndIf

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Sd_DialgoPreco(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento
            
Temp=True
MSG_CAMPO=""        
TECLA=""

If Disparo="OPEN" Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_QTD"   : Release Vars ALTERA_TODOS
                                   CancelDialog
            Case Campo="TG_FLAG2" : Campo="TG_QTD"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:    
          Temp=False
          If Checa_TAG()
             Then Switch
                     Case Campo="TG_QTD" :
                          VSDGQTD=ControlValue("TG_QTD")
                          If IsBlank(VSDGQTD)
                             Then Campo="TG_QTD"
                             Else VSDGPRTOTAL = VSDGQTD*VSDGPRUNIT
                                  Campo="TG_FLAG2"                                                    
                          EndIf          
                     Case Campo="TG_FLAG2" :
                          VSDGFLAG2=ControlValue("TG_FLAG2")
                          AcceptDialog     
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_FLAG2" : MSG_CAMPO = "Pausa para Prosseguir"                                                
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;Sd_DialgoPreco()
                               
;*******************************************************************************
;* Rotina Principal De Reajuste de Preco                                       *
;*******************************************************************************
Proc Adiciona_Preco()                
Private POSI, Titulo, indice

indice = ControlValue("TG_ITENSOC")
If Ltrim(Rtrim(SubStr(ARRAY_COMPRA_ITEM[indice],50,10)))<>""
   Then VSDGQTD = NumVal(Ltrim(Rtrim(SubStr(ARRAY_COMPRA_ITEM[indice],50,10))))
   Else VSDGQTD = 0
EndIf   
If Ltrim(Rtrim(SubStr(ARRAY_COMPRA_ITEM[indice],61,12)))<>""
   Then VSDGPRUNIT = NumVal(Ltrim(Rtrim(SubStr(ARRAY_COMPRA_ITEM[indice],61,12))))
   Else VSDGPRUNIT = 0
EndIf
VSDGPRTOTAL = VSDGQTD*VSDGPRUNIT
ANT_VSDGQTD = VSDGQTD  
 
ShowDialog "Ajusta Quantidade" Proc "Sd_DialgoPreco"
  Trigger "OPEN","ARRIVE"                                                   
  Key "F1","ENTER","ESC","TAB",
    -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
    @ 00,01 Height 04 Width 48

   Label  @ 00,00 "Quantidade"  For "TG_QTD"
   Accept @ 01,01 Width 12 "N" Tag "TG_QTD" To VSDGQTD
   
   Label  @ 00,13 "Pr.Unit rio"  For "TG_PRUNIT"
   Accept @ 01,14 Width 15 "N" Tag "TG_PRUNIT" To VSDGPRUNIT
   
   Label  @ 00,29 "Pr.Total"  For "TG_PRTOTAL"
   Accept @ 01,30 Width 12 "N" Tag "TG_PRTOTAL" To VSDGPRTOTAL
   
   Label  @ 01,42 ""  For "TG_FLAG2"
   Accept @ 01,42 Width 1 "A3" Tag "TG_FLAG2" To VSDGFLAG2
   
EndDialog
If RetVal   
   Then AUX_ARRAY = ARRAY_COMPRA_ITEM[indice]
        If ANT_VSDGQTD<>VSDGQTD
           Then AUX_ARRAY = SubStr(AUX_ARRAY,1,49)+Format("W10.3",VSDGQTD)+Spaces(1)+SubStr(AUX_ARRAY,61,Len(AUX_ARRAY))
                ARRAY_COMPRA_ITEM[indice] = AUX_ARRAY 
                Release Vars AUX_ARRAY 
        EndIf
        Return True
   Else Return False
EndIf   

EndProc ;Adiciona_Preco()

;*******************************************************************************
;* Verifica Altera‡äes nos Itens da OC                                         *
;*******************************************************************************
Proc Verifica_Alteracao()
Private OCORREU_ALTERACAO
                     
OCORREU_ALTERACAO=False
For uy From 1 To ArraySize(ARRAY_COMPRA_ITEM)
  If ARRAY_COMPRA_ITEM[uy]<>AUX_ARRAY_COMPRA[uy]
     Then OCORREU_ALTERACAO = True
          QuitLoop
  EndIf   
EndFor

Return OCORREU_ALTERACAO

EndProc ;Verifica_Alteracao()

;*******************************************************************************
;* Controle do ShowDialog                                                      *
;*******************************************************************************
Proc SD_SDialogOC(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp      = True
MSG_CAMPO = ""
TECLA     = ""
                           
If INICIA_DIALOG
   Then Campo = "TG_FLAG"
        INICIA_DIALOG=False
EndIf     

If Disparo="OPEN" Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9 : Temp=False
     Case Evento["KeyCode"] =  27 :
          Temp=False
          Switch
            Case Campo="TG_OC"       : CancelDialog
            Case Campo="TG_FLAG"     : COR_MENSAGEM="ALERTA"
                                       If Verifica_Alteracao()
                                          Then MSG =        Completa("Foi detectado altera‡”es nos itens desta rela‡„o da OC "+VSDGOC+".",61," ")+"////"
                                               MSG =  MSG + Completa("Se  sair desta  opera‡„o,  todas as altera‡”es ser„o perdidas,",61," ")+"//"
                                               MSG =  MSG + Completa("e os itens n„o ser„o adicionados na Nota de Entrada.",61," ")+"//"
                                               MSG =  MSG + Completa("Deseja realmente sair desta opera‡„o?",61," ")    
                                          Else MSG = "Deseja sair sem adicionar os itens da OC "+VSDGOC+" na Nota de Entrada?"
                                       EndIf    
                                       ConfGeral(MSG)
                                       If Ok="S"
                                          Then CancelDialog
                                       EndIf   
            Case Campo="TG_ITENSOC"  : Campo="TG_FLAG"
          EndSwitch
     Case Evento["KeyCode"] = -67   : 
          If Verifica_Alteracao()
             Then MSG =        Completa("Foi detectado altera‡”es nos itens desta rela‡„o da OC "+VSDGOC+".",61," ")+"////"
                  MSG =  MSG + Completa("Estas  altera‡”es  ir„o  ser  aplicadas  nos  itens  e  ser„o,",61," ")+"//"
                  MSG =  MSG + Completa("adicionadas na rela‡„o dos itens da Nota de Entrada.",61," ")+"//"
                  MSG =  MSG + Completa("Confirma opera‡„o?",61," ")
             Else MSG =        Completa("N„o foi detectado altera‡”es nos itens desta rela‡„o da OC "+VSDGOC+".",65," ")+"//"
                  MSG =  MSG + Completa("e ser„o adicionados na rela‡„o dos itens da Nota de Entrada.",65," ")+"//"             
                  MSG =  MSG + Completa("Confirma opera‡„o?",65," ")
          EndIf
          ConfGeral(MSG)
          If Ok="S"
             Then AcceptDIalog
          EndIf
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
          Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140    :
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
     Case Evento["KeyCode"] = -83 And Campo="TG_ITENSOC" :
          Indice = ControlValue("TG_ITENSOC")
          ITEM = Rtrim(SubStr(ARRAY_COMPRA_ITEM[Indice],6,10))
          ConfGeral("Deseja excluir o item "+ITEM+" da rela‡„o da ordem de compra "+VSDGOC+"?")
          If Ok="S"  
             Then If ArraySize(ARRAY_COMPRA_ITEM)>1
                     Then CONTADOR = 0
                          TM = ArraySize(ARRAY_COMPRA_ITEM)-1
                          Array AUX_ARRAY_COMPRA_ITEM[TM]
                          For i From 1 To ArraySize(ARRAY_COMPRA_ITEM)
                            If ARRAY_COMPRA_ITEM[i] <> ARRAY_COMPRA_ITEM[Indice]
                               Then CONTADOR = CONTADOR + 1
                                    AUX_ARRAY_COMPRA_ITEM[CONTADOR] = ARRAY_COMPRA_ITEM[i]
                            EndIf
                          EndFor
                          Release Vars ARRAY_COMPRA_ITEM
                          Array ARRAY_COMPRA_ITEM[TM]
                          For i From 1 To TM
                            ARRAY_COMPRA_ITEM[i] = AUX_ARRAY_COMPRA_ITEM[i]
                          EndFor
                     Else Mensagem("Ser  retornado para a tela de itens da Nota de Entrada!")
                          CancelDialog     
                  EndIf   
          EndIf
          Release Vars AUX_ARRAY_COMPRA_ITEM,CONTADOR,TM,i,Indice,ITEM
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_OC"       : Campo="TG_ITENSOC"
                         If Not IsBlank(VSDGOC)
                            Then GetRecord "\\Sistemas\\Compras\\Occ" VSDGOC To REG_OC
                                 If Not RetVal
                                    Then FastMsg("Ordem de Compra "+VSDGOC+" n„o localizada!")
                                    Else VSDGNOMOC = REG_OC["Codigo"]+" "+REG_OC["Nome Fantasia EmitDest"]
                                 EndIf   
                         EndIf
                    Case Campo="TG_FLAG"     : Campo="TG_ITENSOC"    
                    Case Campo="TG_ITENSOC"  : Adiciona_Preco()
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch  
  Case Campo="TG_ITENSOC" : MSG_CAMPO = "F9=Atualizar  Enter=Quantidade  Del=Excluir  "
  OtherWise               : MSG_CAMPO = "F9=Atualizar" 
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog

;*******************************************************************************
;* Edi‡Æo do recebimento da Ordem de Compra                                    *
;*******************************************************************************
Proc EDITA_COMPRA()
Private it,CONT_ARRAY,ARRAY_COMPRA

EDITAR_COMPRA = "1"
RECEBE_COMPRA()

If EDITAR_COMPRA="0"
   Then Release Vars REG_OCI,VSDGITENSOC,AUX_ARRAY_COMPRA,ARRAY_COMPRA_ITEM, EDITAR_COMPRA,
                     VSDGOC,VSDGNOMOC,VSDGFLAG,VSDGFLAG2,indice,ANT_VSDGQTD,VSDGQTD,VSDGPRUNIT,VSDGPRTOTAL
        Return        
EndIf
            
;---- Array p/ Controle dos Itens da Ordem de Compra no ShowDIalog -------------
CONT_ARRAY_ITEM = 0
DynArray AUX_ARRAY_COMPRA_ITEM[]

GetRecord "\\Sistemas\\Compras\\Occ" OC_NUM To REG_OC
If Not RetVal
   Then FastMsg("Ordem de Compra "+OC_NUM+" n„o localizada!")
        EDITAR_COMPRA="0"
        Release Vars REG_OCI,VSDGITENSOC,AUX_ARRAY_COMPRA,ARRAY_COMPRA_ITEM, EDITAR_COMPRA,
                     VSDGOC,VSDGNOMOC,VSDGFLAG,VSDGFLAG2,indice,ANT_VSDGQTD,VSDGQTD,VSDGPRUNIT,VSDGPRTOTAL
        Return
   Else VSDGNOMOC = REG_OC["Codigo"]+" "+REG_OC["Nome Fantasia EmitDest"]
        VSDGOC=OC_NUM
EndIf

Moveto "NotaEC"
[Numero da OC link]=OC_NUM
Moveto "\\Sistemas\\Compras\\OCI"
INC_COMPRA=True
Scan For ([Quantidade]-[Quantidade Entregue])>0
  CopyToArray REG_OCI
  
  ; Seq Item       Descricao                      Un Quantidade  Pr.Unitario 
  ;1234 1234567890 123456789012345678901234567890 12 1234567890 123456789012

  CONT_ARRAY_ITEM = CONT_ARRAY_ITEM + 1
  AUX_ARRAY_COMPRA_ITEM[CONT_ARRAY_ITEM] = Format("W4",REG_OCI["Item da OC"        ])+Spaces(1)+
                                           Format("W10",REG_OCI["Codigo do Item"   ])+Spaces(1)+
                                           Format("W29",REG_OCI["Descricao do Item"])+Spaces(1)+
                                           Format("W2",REG_OCI["Unidade Fiscal"    ])+Spaces(1)+
                                           Format("W10.3",REG_OCI["Quantidade"]-REG_OCI["Quantidade Entregue"])+Spaces(1)+
                                           Format("W12.2",REG_OCI["Preco Unitario" ])
EndScan

If DynArraySize(AUX_ARRAY_COMPRA_ITEM)=0
   Then FastMsg("Ordem de Compra "+OC_NUM+" entregue!")
        EDITAR_COMPRA="0"
        Release Vars REG_OCI,VSDGITENSOC,AUX_ARRAY_COMPRA,ARRAY_COMPRA_ITEM, EDITAR_COMPRA,
                     VSDGOC,VSDGNOMOC,VSDGFLAG,VSDGFLAG2,indice,ANT_VSDGQTD,VSDGQTD,VSDGPRUNIT,VSDGPRTOTAL
        Return
   Else Transfere_DynArray_Array(AUX_ARRAY_COMPRA_ITEM)
EndIf   

;---- Array p/ verifica‡Æo de valores ajustados --------------------------------
Array AUX_ARRAY_COMPRA[ArraySize(ARRAY_COMPRA_ITEM)]     
For it From 1 To ArraySize(ARRAY_COMPRA_ITEM)
  AUX_ARRAY_COMPRA[it]=ARRAY_COMPRA_ITEM[it]
EndFor                                          

While True
  INICIA_DIALOG=True
  Echo Normal
  Echo Off
  ShowDialog "Itens da Ordem de Compra" Proc "SD_SDialogOC"
  Trigger "OPEN","ARRIVE","CLOSE","SELECT"
  Key "F1","ENTER","ESC","F9",-67,-83,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
       @ 01,01   Height 19 Width 80
  
      Label  @ 00,00 "Ordem de Compra" For "TG_OC"
      Accept @ 01,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_OC" To VSDGOC
      Accept @ 01,11 Width 33 "A30" Picture "!*!" Tag "TG_OC" To VSDGNOMOC
      
      Label  @ 00,43 "" For "TG_FLAG"
      Accept @ 01,44 Width 03 "A1" Picture "!*!" Tag "TG_FLAG" To VSDGFLAG

      Label @ 03,00 ""  For "TG_ITENSOC"
      Label @ 03,00 "  Seq Item       Descri‡„o                     Un Quantidade  Pr.Unitario"  For "TG_ITENSOC"
  
      PickArray @04,01 Height 10 width 76
        Columns 1
         ARRAY_COMPRA_ITEM
          Tag "TG_ITENSOC"
           To VSDGITENSOC
           
      Label @ 15,00 "F9=Atualizar"  For "TG_ITENSOC"     
                
  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  ;---- Array p/ Controle dos Itens a ser inseridos na Nota de Entrada ---------
  For it From 1 To ArraySize(ARRAY_COMPRA_ITEM)
    Barra(ArraySize(ARRAY_COMPRA_ITEM),it)
    Aguarde("Aguarde, inserindo itens da ordem de compra "+BARRA_STRING)
    
    OC_ITEM = NumVal(Ltrim(Rtrim(SubStr(ARRAY_COMPRA_ITEM[it],1,4))))
    OC_QTD  = NumVal(Ltrim(Rtrim(SubStr(ARRAY_COMPRA_ITEM[it],50,10))))
    
    Moveto "\\Sistemas\\Compras\\OCI"
    Moveto [Item da OC]
    Locate OC_ITEM
    If RetVal
       Then Moveto "NotaEI"
            End
            SEQI=[Sequencia do Lancamento]
            If Isblank(SEQI)
               Then SEQI=1
               Else SEQI=SEQI+1
            EndIf
            Down
            [Numero do Lancamento     ]=[NotaEC->Numero do Lancamento]
            [Sequencia do Lancamento  ]=SEQI
            
            COPIA_COMPRA_LANCTO()
          
            Play "FT_CUSTO"
          
            CHAVEI=1
            ESTOQUE()
          
            Moveto "\\Sistemas\\Compras\\OCI"
            Moveto [Item da OC]
            Locate OC_ITEM
            If RetVal
               Then [Quantidade Entregue]=[Quantidade Entregue]+[NotaEI->Quantidade]
            EndIf   
    EndIf
  EndFor
  UnlockRecord
  ATUA_SITUACAO_COMPRA()
  INC_COMPRA=False   
  
  QuitLoop
EndWhile
Release Vars REG_OCI,VSDGITENSOC,AUX_ARRAY_COMPRA,ARRAY_COMPRA_ITEM, EDITAR_COMPRA,
             VSDGOC,VSDGNOMOC,VSDGFLAG,VSDGFLAG2,indice,ANT_VSDGQTD,VSDGQTD,VSDGPRUNIT,VSDGPRTOTAL

EndProc ;EDITA_COMPRA()

;*******************************************************************************
;* Recebimento da Ordem de Compra                                              *
;*******************************************************************************
Proc RECEBE_COMPRA()
Private COMPRA_RECEBER, COMPRA_REC, OK, SEQI

If Not IsAssigned(EDITAR_COMPRA) Then EDITAR_COMPRA="" EndIf
If EDITAR_COMPRA="1"             Then OC_NUM = ""      EndIf 

COMPRA_REC=[NotaEC->Numero da OC]
OK=""
ShowDialog "" proc "OPCAO" @ 08,20 height 03 width 32
  @ 0,1 ?? "N§ Ordem de Compra"
   Accept @ 00,20 width 9 "A6" Picture "#*#" tag "COMPRA_RECEBER" to COMPRA_REC
   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
Mouse Show
If OK="N"
   Then If EDITAR_COMPRA="1"
           Then EDITAR_COMPRA="0"
        EndIf   
        Return
EndIf
COMPRA_RECEBER=AlinhM(COMPRA_RECEBER,6)

Moveto "NotaEC"
[Numero da OC link]=COMPRA_RECEBER
Moveto "\\Sistemas\\Compras\\OCC"
If RecordStatus("New")
   Then FastMsg("Ordem de Compra n„o Encontrada !")
        If EDITAR_COMPRA="1"
           Then EDITAR_COMPRA="0"
        EndIf
        Return
   Else If [Codigo]<>[NotaEC->Codigo]
           Then FastMsg("Ordem de Compra c/ Fornecedor diferente deste Lan‡amento !")
                If EDITAR_COMPRA="1"
                   Then EDITAR_COMPRA="0"
                EndIf
                Return
        EndIf
EndIf

If EDITAR_COMPRA="1"
   Then OC_NUM = COMPRA_RECEBER
        Return
EndIf   

Moveto "\\Sistemas\\Compras\\OCI"
INC_COMPRA=True
Scan For ([Quantidade]-[Quantidade Entregue])>0
  Moveto "NotaEI"
  End
  SEQI=[Sequencia do Lancamento]
  If Isblank(SEQI)
     Then SEQI=1
     Else SEQI=SEQI+1
  EndIf
  Down
  [Numero do Lancamento     ]=[NotaEC->Numero do Lancamento]
  [Sequencia do Lancamento  ]=SEQI
  COPIA_COMPRA_LANCTO()

  Play "FT_CUSTO"

  CHAVEI=1
  ESTOQUE()

  Moveto "\\Sistemas\\Compras\\OCI"
  [Quantidade Entregue]=[Quantidade Entregue]+[NotaEI->Quantidade]
EndScan
UnlockRecord
ATUA_SITUACAO_COMPRA()
INC_COMPRA=False
EndProc   ;  (RECEBE_COMPRA)

;*******************************************************************************
;* 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="COMPRA_RECEBER"
                   Then COMPRA_RECEBER=ControlValue("COMPRA_RECEBER")
                        SelectControl "Sim"
                        OK="S"
                   Else OK="N"
                EndIf
                CancelDialog
                Temp=False
        EndSwitch
Endif
Return Temp
EndProc   ;  (Opcao)

;*******************************************************************************
;* Copia Dados do Item da OC p/ Item do Lancamento                             *
;*******************************************************************************
Proc COPIA_COMPRA_LANCTO()
[Numero da OC            ]=[\Sistemas\Compras\OCi->Numero da OC            ]
[Item da OC              ]=[\Sistemas\Compras\OCi->Item da OC              ]
[Codigo da Empresa       ]=[NotaEC->Codigo da Empresa                      ]
[Codigo do Item          ]=[\Sistemas\Compras\OCi->Codigo do Item          ]
[Tipo do Item            ]=[\Sistemas\Compras\OCi->Tipo do Item            ]
[Descricao do Item       ]=[\Sistemas\Compras\OCi->Descricao do Item       ]
[Codigo da Cor_Tecido    ]=[\Sistemas\Compras\OCi->Codigo da Cor_Tecido    ]
[Descricao da Cor_Tecido ]=[\Sistemas\Compras\OCi->Descricao da Cor_Tecido ]
[Tamanho                 ]=[\Sistemas\Compras\OCi->Tamanho                 ]
[Unidade Fiscal          ]=[\Sistemas\Compras\OCi->Unidade Fiscal          ]
[Unidade Entrada         ]=[\Sistemas\Compras\OCi->Unidade Fiscal          ]
[Unidade Interna         ]=[\Sistemas\Compras\OCi->Unidade Interna         ]
[Preco Unitario          ]=[\Sistemas\Compras\OCi->Preco Unitario          ]
[Taxa Desconto Unitario  ]=[\Sistemas\Compras\OCi->Taxa Desconto Unitario  ]
[Valor Desconto Unitario ]=[\Sistemas\Compras\OCi->Valor Desconto Unitario ]
[IPI_CST                 ]=[\Sistemas\Compras\OCi->IPI_CST                 ]
[Tributacao de IPI       ]=[\Sistemas\Compras\OCi->Tributacao de IPI       ]
[Aliquota Reduzida BCIPI ]=[\Sistemas\Compras\OCi->Aliquota Reduzida BCIPI ]
[Aliquota de IPI         ]=[\Sistemas\Compras\OCi->Aliquota de IPI         ]
[Tributacao de ICMS      ]=[\Sistemas\Compras\OCi->Tributacao de ICMS      ]
[Aliquota Reduzida BCICMS]=[\Sistemas\Compras\OCi->Aliquota Reduzida BCICMS]
[Aliquota de ICMS        ]=[\Sistemas\Compras\OCi->Aliquota de ICMS        ]
[Fator de Conversao      ]=[\Sistemas\Compras\OCi->Fator de Conversao      ]

If IsAssigned(EDITAR_COMPRA) And EDITAR_COMPRA = "1"
   Then [Quantidade      ]=OC_QTD
   Else if [\Sistemas\Compras\OCi->Quantidade]>[\Sistemas\Compras\OCi->Quantidade Entregue]
           then [Quantidade      ]=[\Sistemas\Compras\OCi->Quantidade]-[\Sistemas\Compras\OCi->Quantidade Entregue]
           else [Quantidade      ]=0
        endif   
EndIf

[Quantidade Convertida   ]=[Quantidade]
If [Fator de Conversao]<>0
   Then If Not IsBlank([Fator de Conversao])
           Then
               If [Fator de Conversao]<1
                  Then [Quantidade Convertida]=Round([Quantidade]*[Fator de Conversao],0)
                  Else [Quantidade Convertida]=[Quantidade]*[Fator de Conversao]
               EndIf

        EndIf
EndIf

[Codigo CCusto           ]=[\Sistemas\Compras\OCi->Codigo CCusto           ]
[Descricao CCusto        ]=[\Sistemas\Compras\OCi->Descricao CCusto        ]

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

QTDCONV =0
QUANT   =0
CTTOTAL =0

VSD_I_TX_ICMS_SAIDA=0
VSD_I_RD_ICMS_SAIDA=0
If Not IsBlank([Codigo do Item])
   Then VSD_I_Codigo_Item=[Codigo do Item]
        Moveto [Codigo do Item]
        Ativa_Lookup()
        Moveto [Codigo do Item]
        Locate VSD_I_Codigo_Item
        If RetVal
           Then VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS     ]
                VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]
                VSD_I_MVA            =[MVA_1                     ]
        EndIf
        KeyPress "ESC"
EndIf

;* Seta Variaveis PegaCFOP
Checa_CFOP   ="E"
CFO_C        =[NotaEC->CFO       ]
CFOP_TPITEM  =[Tipo do Item      ]
CFOP_TRIBICMS=[Tributacao de ICMS]
Play "\\Sistemas\\Exporta\\PegaCFOP"
[CFO        ]=CFO_C

[MVA            ]=VSD_I_MVA
[ICMS UF_ORIGEM ]=AICMSUFO
[ICMS UF_DESTINO]=AICMSUFD

;--- tratando PIS/COFINS -------------------------------------------------------
If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
    Then 
         [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
         [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
Endif
   
if TPEMPR="DEBITO/CREDITO" 
   then
        switch
          case empresa_regimetributario="LUCRO REAL" or [NotaEC->Tipo de Operacao]="D":
            switch
              case [PIS_CST ]="01" : [PIS_CST ]="50"   [COFINS_CST ]="50"
              case [PIS_CST ]="06" : [PIS_CST ]="73"   [COFINS_CST ]="73"
              case [PIS_CST ]="07" : [PIS_CST ]="71"   [COFINS_CST ]="71"
              case [PIS_CST ]="08" : [PIS_CST ]="74"   [COFINS_CST ]="74"
              case [PIS_CST ]="09" : [PIS_CST ]="72"   [COFINS_CST ]="72"
              case [PIS_CST ]="49" : [PIS_CST ]="98"   [COFINS_CST ]="98"
            endswitch
          
          otherwise:
                   [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
                   [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum()
            
        endswitch
Endif

;; Incluido em 12/04/2005 Anivel
If PARAM_ATTAB_PRECO<>"S"
   Then Return
EndIf
VSD_I_Tabela_Preco=PARAM_TABELA_PRECO
VSD_I_Codigo_Item =[Codigo do Item]
Tabela_Preco("Procura")
If not IsAssigned(VSD_I_Preco_Tabela)
   then VSD_I_Preco_Tabela  =BlankNum()
EndIf
[Preco Unitario Tabela]=VSD_I_Preco_Tabela

EndProc    ; (Copia_COMPRA_LANCTO)

;*******************************************************************************
;* Rotina Montar Vencimentos pela Ordem de Compra                              *
;*******************************************************************************
Proc OC_VENCTOS()
Private SEQ,ncampo,executa,seq

Moveto "NotaEcp"
Exclusao_Cabeca=False
While RecordStatus("New")=False
  CopyToArray RegItem
  CHAVEAP=8
  TITULOS()
EndWhile

Moveto "NotaEC"
[Numero da OC Link]=[Numero da OC]

 ncampo=Field()
    seq=-1
Executa=True 

While Executa
  Moveto "NotaEC"
  Moveto [Lookup_OCV]
  Ativa_Lookup()
  Moveto [Numero da OC]
  Locate [NotaEC->Numero da OC Link]
  If Not RetVal
     Then QuitLoop
     Else Executa=False 
          While [Numero da OC]=[NotaEC->Numero da OC Link]
            If [sequencia do Lancamento]>Seq
               Then Seq=[sequencia do Lancamento]
  
                    CopyToArray REGOCV
                    REGOCV["Numero da OC"]       =[NotaEC->Numero do Lancamento]
                    REGOCV["Codigo do Documento"]=[NotaEC->Codigo do Documento ]
                    REGOCV["Tipo do Documento"]  =[NotaEC->Tipo do Documento   ]
                    REGOCV["Serie do Documento"] =[NotaEC->Serie do Documento  ]
                    REGOCV["Numero do Documento"]=[NotaEC->Numero do Documento ]
                    KeyPress "ESC"
          
                    Moveto "NotaEcp"
                    Moveto [Sequencia do Lancamento]
                    End
                    Down
                    CopyFromArray REGOCV
                    
                    [Data Competencia            ]=[NotaEC->Data de Emissao    ]
                    UnLockRecord
                    
                    Executa=True     
                    QuitLoop
            EndIf   
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
EndWhile
KeyPress "ESC"
Moveto Field ncampo

titoc=False
If PARAM_ATUA_CAPG="S"
   Then
        Moveto "NotaEC"
        UnLockRecord
        KeyPress "F7"

        Moveto "NotaECP"
        Moveto [Numero do Lancamento]
        Locate [NotaEC->Numero do Lancamento]
        If RetVal
           Then While [Numero do Lancamento]=[NotaEC->Numero do Lancamento] And
                      Not IsBlank([NotaEcp->Numero Lancamento Titulos])

                  oktit=False
                  Moveto "\\sistemas\\ctapag\\Titulos"
                  Moveto [Numero do Lancamento]
                  Locate [NotaEcp->Numero Lancamento Titulos]
                  If Not RetVal
                     Then MSG="O lan‡amento "+[NotaEcp->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                          MSG=MSG+"referente a OC ["+[NotaEC->Numero da OC]+"] n„o foi encontrado !//"
                          MSG=MSG+"Verificar dados da OC e no Contas a Pagar Ok !//"
                          MSG=MSG+"Esta altera‡„o no Contas a Pagar n„o ser  efetuada !"
                          Mensagem(MSG)
                     Else If [Sistema Gerador       ]="OC" And
                             [Lancamento Gerador    ]=[NotaEC->Numero da OC] And
                             [Sequencia Gerador     ]=[NotaEcp->Sequencia do Lancamento] And
                             [Documento Referente   ]=RTrim(("OC/"+[NotaEC->Numero da OC]))
                             Then oktit=True
                          EndIf

                          If Not OkTit
                             Then MSG="O lan‡amento no Contas a Pagar n„o corresponde a OC ["+[NotaEC->Numero da OC]+"] !//"
                                  MSG=MSG+"Verificar dados da OC e no Contas a Pagar Ok !//"
                                  MSG=MSG+"Esta alter‡„o no Contas a Pagar n„o ser  efetuado !//"
                                  MSG=MSG+"Talvez algum outro erro gerou este problema !"
                                  Mensagem(MSG)
                             Else If [Saldo do Documento]<>[Valor do Documento]
                                     Then Oktit=False
                                          MSG="A altera‡„o do lan‡amento no Contas a Pagar,//"
                                          MSG=MSG+"referente a este documento: "+
                                              [NotaEC->Codigo da Empresa]+" / "+
                                              [NotaEC->Tipo do Documento]+" / "+
                                              [NotaEC->Numero do Documento]+"//"
                                          MSG=MSG+"n„o ser  efetuado, pois o T¡tulo J  teve baixa ! // //"
                                          MSG=MSG+"Verificar !"
                                          Mensagem(MSG)
                                     Else [Codigo do Documento ]=[NotaEcp->Codigo do Documento ]
                                          [Numero do Documento ]=[NotaEcp->Numero do Documento ]
                                          Controle_Dia()
                                          [Sistema Gerador     ]="NE"
                                          [Lancamento Gerador  ]=[NotaEcp->Numero do Lancamento   ]
                                          [Sequencia Gerador   ]=[NotaEcp->Sequencia do Lancamento]
                                          [Documento Referente ]=RTrim([NotaEC->Tipo do Documento]+"/"+[NotaEC->Numero do Documento ])
                                          UnLockRecord
                                          titoc=True
                                  EndIf
                          EndIf
                  EndIf

                  Moveto "NotaEcp"
                  Skip
                  If EOT() Then QuitLoop EndIf
                EndWhile
        EndIf
        Moveto "NotaEC"
        KeyPress "F7"
EndIf

Moveto "NotaEcp"

MSG="N„o esqueca de completar e confirmar os dados dos Vencimentos !"
If titoc
   Then MSG=MSG+"// //Os vencimentos da OC "+[NotaEC->Numero da OC]+" programados no Contas a Pagar,//"
        MSG=MSG+"foram substituidos por este lancamento da Nota !"
EndIf
Mensagem(MSG)
EndProc    ; (OC_Vectos)

;*******************************************************************************
;* Rotina para campos=0 -> blankNum()                                         *
;*******************************************************************************
Proc Limpa_Campos()

If [Valor BCICMS              ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
If [Valor ICMS                ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
If [Valor BCSubstituicao ICMS ]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
If [Valor Substituicao ICMS   ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
If [Valor Servico             ]=0 Then [Valor Servico            ]=BlankNum() EndIf
If [Valor BCISSQN             ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN               ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf

If [Valor Mercadoria Liquido  ]=0 Then [Valor Mercadoria Liquido ]=BlankNum() EndIf
If [Valor do Frete            ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
If [Valor do Seguro           ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
If [Valor Desconto            ]=0 Then [Valor Desconto           ]=BlankNum() EndIf
If [Valor Despesas Acessorias ]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor IPI                 ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor Nota Fiscal         ]=0 Then [Valor Nota Fiscal        ]=BlankNum() EndIf

If [Valor Mercadoria          ]=0 Then [Valor Mercadoria         ]=BlankNum() EndIf
If [Valor Acrescimos_Desctos  ]=0 Then [Valor Acrescimos_Desctos ]=BlankNum() EndIf
If [BC Substituicao Destinat  ]=0 Then [BC Substituicao Destinat ]=BlankNum() EndIf
If [Vr Substituicao Destinat  ]=0 Then [Vr Substituicao Destinat ]=BlankNum() EndIf

If [Valor Desconto NTributado ]=0 Then [Valor Desconto NTributado]=BlankNum() EndIf
If [Valor FCP_Ret_ST          ]=0 Then [Valor FCP_Ret_ST         ]=BlankNum() EndIf

EndProc

;*******************************************************************************
;* Rotina para campos=0 -> blankNum()                                         *
;*******************************************************************************
Proc Rateio_Itens()
Private TXDESCTO_TOTAL, REG_TABELAREFC, nitens,
             It_tpitem, It_prtotal, 
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor, 
             DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor,
             Faz_Rotina, bc

Aguarde("Calculando rateios nos itens")

Release Vars It_tpitem, It_prtotal, 
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp

DynArray It_tpitem[]
DynArray It_prtotal[]

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

Moveto "NotaEI"
nitens=0
Scan

  nitens=nitens+1
  It_tpitem[nitens]        =[Tipo do Item            ] 
  It_prtotal[nitens]       =[Preco Total             ] 

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

EndScan

Moveto "NotaEC"
TXDESCTO_TOTAL=([Valor Desconto]/[Valor Mercadoria])*100

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

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

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else 
          OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/REG_TABELAREFC["Valor Mercadoria"])*100 
  EndIf

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

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

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

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

EndFor

;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,2)
DIF_Frete_Valor        =NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)

If DIF_Descto_Valor <>0 Or
   DIF_Frete_Valor  <>0 Or
   DIF_Seguro_Valor <>0 Or
   DIF_OutDesp_Valor<>0 
   Then 
        For wi From 1 to DynArraySize(It_prtotal) 
              
          Switch
            Case It_tpitem[wi]="C" :  ;Igual a Seri‡o
              OutrosRateioOk=False    ;nÆo rateia frete e outros
            OtherWise              :  ;Diferente de servi‡o
              OutrosRateioOk=True     ;rateia frete e outros 

            ;;If (It_cfop[wi]="1902" or It_cfop[wi]="1903") ;entrada industrializa‡Æo/Devolucao Industrializacao
            ;;   Then OutrosRateioOk=False
            ;;EndIf
          EndSwitch
          If OutrosRateioOk 
             Then 
                  If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                     Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                          DIF_Descto_Valor=0 
                  EndIf
                  If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                     Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                          DIF_Frete_Valor =0
                  EndIf
                  If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                     Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                          DIF_Seguro_Valor=0
                  EndIf   
                  If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                     Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                          DIF_OutDesp_Valor=0
                  EndIf   

                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
          
        EndFor
EndIf
          
Aguarde("Atualizando rateios nos itens")

Moveto "NotaEI"
nitens=0
Scan
  nitens=nitens+1    
  
  Faz_Rotina = True
  
  If [Notaec->Inf_Rateios Itens] = "2" Then Faz_Rotina=False EndIf 
   
  If Faz_Rotina           
     Then 
          [Valor Desconto Total     ]=It_descto[nitens]          
          [Valor Frete Total        ]=It_frete[nitens]         
          [Valor Seguro Total       ]=It_seguro[nitens]          
          [Valor OutDesp Total      ]=It_outdesp[nitens]         
  EndIf 

  ;--Calcula pis/Cofins --------------------------------------------------------

  bc=([Preco Total]-[Valor Desconto Total])+
                    [Valor Frete Total   ] +
                    [Valor Seguro Total  ] +
                    [Valor OutDesp Total ]  
  Switch
    Case SYS_CODIGO_CLIENTE="0309":
      bc=bc+[ICMS_ST_Valor]
          
    Case SYS_CODIGO_CLIENTE="0173":
      If [NotaEC->Data de Entrada]>=DateVal("01.08.2015") and
         [NotaEC->Data de Entrada]< DateVal("01.04.2019")
         Then bc=bc+[ICMS_ST_Valor]
      EndIf
      
    OtherWise                     :
      If Search("COM",ATIVEMPRESA)>0
         Then bc=bc+[Valor do IPI]
      EndIf
  EndSwitch

  If [PIS_Aliquota      ]>0
     Then [PIS_BC       ]=bc
          [PIS_Valor    ]=Round((bc*[PIS_Aliquota])/100,2)
  EndIf
  If [COFINS_Aliquota   ]>0
     Then [COFINS_BC    ]=bc
          [COFINS_Valor ]=Round((bc*[COFINS_Aliquota])/100,2)
  EndIf

EndScan
If RecordStatus("Locked") Then UnLockRecord EndIf         

Moveto "NotaEC"

LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc CALC_NOTA()
Private OkDifer,
        VRMERC, VRSERV, BCICMS, VICMS, BCST, VST, VIPI, VRNOTA, vdntrib, vfcpst

MSGCAMPO     = ""
Rateio_Itens()

Aguarde("Calculando Totais")
Limpa_Campos()

VRMERC =0.00
VRSERV =0.00
BCICMS =0.00
VICMS  =0.00
BCST   =0.00
VST    =0.00
VIPI   =0.00
BCISSQN=0.00
VISSQN =0.00
vdntrib=0.00
vfcpst =0.00
VRNOTA =0.00


DIF_VRMERC =BlankNum() 
DIF_VRSERV =BlankNum() 
DIF_BCICMS =BlankNum() 
DIF_ICMS   =BlankNum() 
DIF_BCST   =BlankNum() 
DIF_ST     =BlankNum() 
DIF_IPI    =BlankNum() 
DIF_BCISSQN=BlankNum() 
DIF_ISSQN  =BlankNum() 
DIF_DNTRIB =BlankNum() 
DIF_FCPST  =BlankNum() 
DIF_NOTA   =BlankNum() 

Moveto "NotaEI"
Scan

  If [IPI_BC              ]=0 Then [IPI_BC              ]=BlankNum() EndIf
  If [Aliquota de IPI     ]=0 Then [Aliquota de IPI     ]=BlankNum() EndIf
  If [Valor do IPI        ]=0 Then [Valor do IPI        ]=BlankNum() EndIf

  If [ICMS_BC             ]=0 Then [ICMS_BC             ]=BlankNum() EndIf
  If [Aliquota de ICMS    ]=0 Then [Aliquota de ICMS    ]=BlankNum() EndIf
  If [Valor do ICMS       ]=0 Then [Valor do ICMS       ]=BlankNum() EndIf

  If [Aliquota de ISSQN   ]=0 Then [Aliquota de ISSQN   ]=BlankNum() EndIf
  If [ISSQN_BC            ]=0 Then [ISSQN_BC            ]=BlankNum() EndIf
  If [Valor do ISSQN      ]=0 Then [Valor do ISSQN      ]=BlankNum() EndIf

  If [PIS_BC              ]=0 Then [PIS_BC              ]=BlankNum() EndIf
  If [PIS_Aliquota        ]=0 Then [PIS_Aliquota        ]=BlankNum() EndIf
  If [PIS_Valor           ]=0 Then [PIS_Valor           ]=BlankNum() EndIf

  If [Cofins_BC           ]=0 Then [Cofins_BC           ]=BlankNum() EndIf
  If [Cofins_Aliquota     ]=0 Then [Cofins_Aliquota     ]=BlankNum() EndIf
  If [Cofins_Valor        ]=0 Then [Cofins_Valor        ]=BlankNum() EndIf

  If [Codigo_Servico      ]=0 Then [Codigo_Servico      ]=BlankNum() EndIf
  If [ISSQN_Municipio     ]=0 Then [ISSQN_Municipio     ]=BlankNum() EndIf

  If [ICMS_ST_Aliquota    ]=0 Then [ICMS_ST_Aliquota    ]=BlankNum() EndIf
  If [ICMS_ST_Valor       ]=0 Then [ICMS_ST_Valor       ]=BlankNum() EndIf

  If [Valor Desconto Total]=0 Then [Valor Desconto Total]=BlankNum() EndIf
  If [Valor Frete Total   ]=0 Then [Valor Frete Total   ]=BlankNum() EndIf
  If [Valor Seguro Total  ]=0 Then [Valor Seguro Total  ]=BlankNum() EndIf
  If [Valor OutDesp Total ]=0 Then [Valor OutDesp Total ]=BlankNum() EndIf

  If [ICMS_Valor_Desonerado]=0 Then [ICMS_Valor_Desonerado]=BlankNum() EndIf
  If [FCP_ST_Valor         ]=0 Then [FCP_ST_Valor         ]=BlankNum() EndIf

  BCICMS =BCICMS +[ICMS_BC                ]
  VICMS  =VICMS  +[Valor do ICMS          ]

  BCST   =BCST   +[ICMS_ST_BC             ]
  VST    =VST    +[ICMS_ST_Valor          ]

  VIPI   =VIPI   +[Valor do IPI           ]
  BCISSQN=BCISSQN+[ISSQN_BC               ]
  VISSQN =VISSQN +[Valor do ISSQN         ]

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

  vdntrib=vdntrib +[ICMS_Valor_Desonerado]
  vfcpst =vfcpst  +[FCP_ST_Valor         ]

EndScan

Moveto "NotaEC"

VRNOTA      =(VRMERC-[Valor Desconto])+VRSERV+VIPI+VST+
             [Valor Despesas Acessorias]+[Valor do Seguro]+[Valor do Frete]+
             [Valor FCP_Ret_ST]-[Valor Desconto NTributado]


;if [NotaEC->Tipo de Operacao   ]="C"     And  ; compra
;   [NotaEC->Codigo do Documento]="ROM"   And  ; Romaneio
;   sys_Codigo_Cliente           ="0377"       ; pralum
;   then 
;        [Valor Mercadoria          ]=VRMERC   
;        [Valor Servico             ]=VRSERV   
;        [Valor BCICMS              ]=BCICMS   
;        [Valor ICMS                ]=VICMS    
;        [Valor BCSubstituicao ICMS ]=BCST     
;        [Valor Substituicao ICMS   ]=VST      
;        [Valor IPI                 ]=VIPI     
;        [Valor BCISSQN             ]=BCISSQN  
;        [Valor ISSQN               ]=VISSQN   
;        [Valor Nota Fiscal         ]=VRNOTA   
;
;endif   

If Format("W12.2,EIC",VRMERC*1 )<>Format("W12.2,EIC",[Valor Mercadoria          ]*1)       Then DIF_VRMERC  =VRMERC -[Valor Mercadoria ] EndIf
If Format("W12.2,EIC",VRSERV*1 )<>Format("W12.2,EIC",[Valor Servico             ]*1)       Then DIF_VRSERV  =VRSERV -[Valor Servico    ] EndIf
If Format("W12.2,EIC",BCICMS*1 )<>Format("W12.2,EIC",[Valor BCICMS              ]*1)       Then DIF_BCICMS  =BCICMS -[Valor BCICMS     ] EndIf
If Format("W12.2,EIC",VICMS*1  )<>Format("W12.2,EIC",[Valor ICMS                ]*1)       Then DIF_ICMS    =VICMS  -[Valor ICMS       ] EndIf
If Format("W12.2,EIC",BCST*1   )<>Format("W12.2,EIC",[Valor BCSubstituicao ICMS ]*1)       Then DIF_BCST    =BCST   -[Valor BCSubstituicao ICMS] EndIf
If Format("W12.2,EIC",VST*1    )<>Format("W12.2,EIC",[Valor Substituicao ICMS   ]*1)       Then DIF_ST      =VST    -[Valor Substituicao ICMS  ] EndIf
If Format("W12.2,EIC",VIPI*1   )<>Format("W12.2,EIC",[Valor IPI                 ]*1)       Then DIF_IPI     =VIPI   -[Valor IPI        ] EndIf
If Format("W12.2,EIC",BCISSQN*1)<>Format("W12.2,EIC",[Valor BCISSQN             ]*1)       Then DIF_BCISSQN =BCISSQN-[Valor BCISSQN    ] EndIf
If Format("W12.2,EIC",VISSQN*1 )<>Format("W12.2,EIC",[Valor ISSQN               ]*1)       Then DIF_ISSQN   =VISSQN -[Valor ISSQN      ] EndIf

If Format("W12.2,EIC",vdntrib*1 )<>Format("W12.2,EIC",[Valor Desconto NTributado]*1)       Then DIF_DNTRIB    =vdntrib -[Valor Desconto NTributado] EndIf
If Format("W12.2,EIC",vfcpst *1 )<>Format("W12.2,EIC",[Valor FCP_Ret_ST         ]*1)       Then DIF_FCPST     =vfcpst  -[Valor FCP_Ret_ST         ] EndIf

If Format("W12.2,EIC",VRNOTA*1 )<>Format("W12.2,EIC",[Valor Nota Fiscal         ]*1)       Then DIF_NOTA    =VRNOTA -[Valor Nota Fiscal] EndIf

OkDifer=False

If Not IsBlank(DIF_VRMERC ) Then OkDifer=True EndIf
If Not IsBlank(DIF_VRSERV ) Then OkDifer=True EndIf
If Not IsBlank(DIF_BCICMS ) Then OkDifer=True EndIf
If Not IsBlank(DIF_ICMS   ) Then OkDifer=True EndIf
If Not IsBlank(DIF_BCST   ) Then OkDifer=True EndIf
If Not IsBlank(DIF_ST     ) Then OkDifer=True EndIf
If Not IsBlank(DIF_IPI    ) Then OkDifer=True EndIf
If Not IsBlank(DIF_BCISSQN) Then OkDifer=True EndIf
If Not IsBlank(DIF_ISSQN  ) Then OkDifer=True EndIf
If Not IsBlank(DIF_DNTRIB ) Then OkDifer=True EndIf
If Not IsBlank(DIF_FCPST  ) Then OkDifer=True EndIf
If Not IsBlank(DIF_NOTA   ) Then OkDifer=True EndIf

Moveto [Tipo de Pagamento]

Echo Normal
Echo Off
LimpAguarde()

If OkDifer
   Then MSG=    "Detectada diferen‡a dos //totais DIGITADOS x CALCULADOS!// //"
        MSG=MSG+"Corrigir o erro !// //Fique atento aos valores //informados "
        MSG=MSG+"nos itens//para que os c lculos//dos custos fiquem corretos e"
        MSG=MSG+"//o registro de entrada!!"
        Mensagem(MSG)
EndIf
EndProc  ; (Calc_Nota)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
CHAVEF=0

Moveto "NotaEC"
CALC_NOTA()

Moveto "NotaECV"
SetaCorRegistro("Padrao")

Moveto "NotaEC"

Moveto [Tipo de Pagamento]
TPPAGTO=[Tipo de Pagamento]

While True

      TECLA=" Esc=Retornar  Alt+F=Fun‡”es  PgUp  PgDn=Finalizar  "

      MSGCAMPO=Field()
      If Field()="Tipo de Pagamento"
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      Prompt TECLA

      Wait Field
;;;;;;;;;;;Message MSGCAMPO
           Until "ESC","ENTER","PGDN","PGUP","F1","F5","F6","F7",-33
           
    If RetVal=-33
      Then 
           MSGCAMPO=""
           Echo Normal
           Echo Off

           ShowPopup " Fun‡”es " CENTERED
             "F5  ~O~bserva‡äes           " : " Observa‡äes                  " : "F5",
             "F6  ~I~mprimir              " : " Imprimir                     " : "F6",
             "F7  Informa‡äes ~A~dicionais" : " Informa‡äes Adicionais       " : "F7",
             "~S~air                      " : " Ignorar op‡äes               " : "CANCELAR"
           EndMenu
           To MenuVar
           echo off
           If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
           EndIf
   
           RetVal=MenuVar
    EndIf
           
    Switch
      Case RetVal="F1":
           If Field()="Tipo de Pagamento"
              Then CONSULTAF1()
            EndIf
      Case RetVal="PGUP":
           CHAVEF=9
           If Not CHECA_TPPAGTO() Then Loop EndIf
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If Not CHECA_TPPAGTO() Then Loop EndIf
           QuitLoop
      Case Retval="F5":
           CampoAnt=Field()
           Edita_Memo("Observacao",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      Case Retval="F6":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If Not CHECA_TPPAGTO() Then Loop EndIf
           If IMPRIME()
              Then QuitLoop
           EndIf
      Case Retval="F7":
           CampoAnt=Field()
           Moveto "NotaEIA"
           Edita_Memo("Informacoes_Adicionais",08,01,15,76,"Informacoes_Adicionais")
           Moveto "NotaEC"
           Moveto Field CampoAnt
           Prompt TECLA
      Case RetVal="ESC":
        Switch
           Case Field()="Tipo de Pagamento"         :  
                CHAVEF=9
                QuitLoop
           OtherWise:
                Left
        EndSwitch        
      Case RetVal="ENTER": 
        Switch
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If Not CHECA_TPPAGTO() Then Loop EndIf
                If []="V" Then Digita_AVista() EndIf
                If []="P"
                   Then SetaCorRegistro("Padrao")
                        Moveto "NotaEcp"
                        While True
                          CHAVEAP()
                          If CHAVEAP=9 Or                   
                             CHAVEAP=7 
                             Then SetaCorRegistro("Padrao") 
                                  QuitLoop 
                          EndIf
                          
                          Controla_EdicaoAP()
                        EndWhile
                        Moveto "NotaEC"
                        SetaCorRegistro("Editar")
                        Moveto [Tipo de Pagamento]
                        
                        If CHAVEAP=7
                           Then QuitLoop
                        EndIf   
                        
                EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

;*******************************************************************************
;* Rotina para Checagem do Tipo de Pagamento                                   *
;*******************************************************************************
Proc CHECA_TPPAGTO()
Private Valido_TpPagto

Valido_TpPagto=True
If [Tipo de Pagamento]<>TPPAGTO And
   Not IsBlank(TPPAGTO)
   Then If TPPAGTO="V"
           Then ConfGeral("Confirma exclus„o do lan‡amento a vista no Caixa/Banco ?")
                If OK="S"
                   Then Exclusao_Cabeca=False
                        CHAVEAV=8
                        CONTA()
                        Moveto "NotaEC"
                        TPPAGTO=[Tipo de Pagamento]
                   Else [Tipo de Pagamento]=TPPAGTO
                        Valido_TpPagto=False
                EndIf
        EndIf
        If TPPAGTO="P"
           Then ConfGeral("Confirma exclus„o do lan‡amento a prazo no Contas a Pagar ?")
                If OK="S"
                   Then Exclusao_Cabeca=False
                        Moveto "NotaEcp"
                        While RecordStatus("New")=False
                          CHAVEAP=8
                          CopyToArray RegItem
                          TITULOS()
                        EndWhile
                        Moveto "NotaEC"
                        TPPAGTO=[Tipo de Pagamento]
                   Else [Tipo de Pagamento]=TPPAGTO
                        Valido_TpPagto=False
                EndIf
        EndIf
EndIf
Moveto "NotaEC"
Moveto [Tipo de Pagamento]
Return Valido_TpPagto
EndProc ; (Checa_TpPagto)

;*******************************************************************************
;* Rotina para Lancamento a Vista                                              *
;*******************************************************************************
Proc Digita_AVista()
Private MSG_ATUA
MSGCAMPO     = ""

If PARAM_ATUA_CXBC="S"
   Then MSG_ATUA=" - ATUALIZANDO !"
   Else MSG_ATUA=" - NAO ATUALIZA !"
EndIf

Exclusao_Cabeca=False
Moveto "NotaECV"
VALORANT=[Valor]
If RecordStatus("New")
   Then CHAVEAV=1
        [Tipo do Lancamento ]="A"
        [Codigo do Documento]=[NotaEC->Codigo do Documento]
        [Numero do Documento]=[NotaEC->Numero do Documento]
        [Valor              ]=[NotaEC->Valor Nota Fiscal  ]
   Else CHAVEAV=0
EndIf

INICIO_DIALOG=True
CopyToArray RegItem

Registro_AVista("Ler")

Showdialog "Caixa/Banco"+MSG_ATUA Proc "AVista_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC","ClearArea"
     @ 04,02 height 18 width 74

   Label  @ 00,00 "Conta" For "V_Conta"
   Accept @ 01,01 Width 07 "A4" picture "#*#" Tag "V_Conta" to VSD_V_Conta
   Accept @ 01,07 Width 48 "A27" picture "!*!" Tag "V_Descricao_Conta" to VSD_V_Descricao_Conta

   Label  @ 00,56 "Lan‡to Cxa/Bco" For "V_Lancamento"
   Accept @ 01,62 Width 09 "A6" picture "#*#" Tag "V_Lancamento" to VSD_V_Lancamento

   Label  @ 02,00 "Tipo Opera‡„o" For "V_Tpoper"                    
   Accept @ 03,01 Width 05 "A2" picture "#*#" Tag "V_Tpoper" to VSD_V_Tpoper
   Accept @ 03,05 Width 22 "A20" picture "!*!" Tag "I_Descricao_Tpoper" to VSD_I_Descricao_Tpoper

   Label  @ 02,27 "Tipo Lan‡amento" For "V_TpLancto"
   Accept @ 03,28 Width 04 "A1" picture "!" Tag "V_TpLancto" to VSD_V_TpLancto
   Accept @ 03,32 Width 23 "A20" picture "!*!" Tag "V_Descricao_TpLancto" to VSD_V_Descricao_TpLancto

   Label  @ 04,00 "Codigo Documento" For "V_CdDocto"
   Accept @ 05,01 Width 07 "A4" picture "!*!" Tag "V_CdDocto" to VSD_V_CdDocto
   Accept @ 05,08 Width 07 "A4" picture "!*!" Tag "V_TpDocto" to VSD_V_TpDocto
   Accept @ 05,15 Width 07 "A4" picture "!*!" Tag "V_SrDocto" to VSD_V_SrDocto
   
   Label  @ 04,22 "N§ Documento" For "V_NoDocto"
   Accept @ 05,23 Width 16 "A10" picture "!*!" Tag "V_NoDocto" to VSD_V_NoDocto

   Label  @ 06,00 "Vr.Lan‡to" For "V_Vr_Lancto"
   Accept @ 07,01 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Lancto" to VSD_V_Vr_Lancto

   Label  @ 06,13 "Vr.Juros" For "V_Vr_Juros"
   Accept @ 07,14 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Juros" to VSD_V_Vr_Juros
   
   Label  @ 06,26 "Vr.Descto" For "V_Vr_Descto"
   Accept @ 07,27 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Descto" to VSD_V_Vr_Descto

   Label  @ 08,00 "N§ Cheque" For "V_NoCheque"                                                          
   Accept @ 09,01 Width 13 "A11" picture "!*!" Tag "V_NoCheque" to VSD_V_NoCheque

   Label  @ 08,14 "Dt   Pre-Datado" For "I_DtCPrDat"
   Accept @ 09,15 Width 04 "A1" picture "S,N" Tag "I_ChPreDat" to VSD_I_ChPreDat
   Accept @ 09,19 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_DtCPrDat" to VSD_I_DtCPrDat

   Label  @ 08,32 "Dt.Descto" For "V_DtDescto"
   Accept @ 09,33 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtDescto" to VSD_V_DtDescto

   Label  @ 10,00 "Plano Contas" For "V_PlContas"
   Accept @ 11,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 11,17 Width 38 "A35" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas

   Label  @ 12,00 "Centro Custo" For "V_CCusto"
   Accept @ 13,01 Width 10 "A7" picture "###.###" Tag "V_CCusto" to VSD_V_CCusto
   Accept @ 13,11 Width 28 "A25" picture "!*!" Tag "V_Descricao_CCusto" to VSD_V_Descricao_CCusto

   Label  @ 14,00 "Historico" For "V_Codigo_Hist"
   Accept @ 15,01 Width 07 "A4" picture "#*#" Tag "V_Codigo_Hist" to VSD_V_Codigo_Hist
   Accept @ 15,08 Width 63 "A70" picture "!*!" Tag "V_Descri_Hist" to VSD_V_Descri_Hist

Enddialog
Mouse Show
If CHAVEAV<>9
   Then CONTA()
EndIf
Moveto "NotaEC"
Moveto [Tipo de Pagamento]
EndProc  ; (Digita_AVista)

;*******************************************************************************
;* Rotina de Digitacao Dados a Vista                                           *
;*******************************************************************************
Proc AVista_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

CAIXA_BANCO=True
TECLA=" Esc=Retornar  "
MSGCAMPO=""

If INICIO_DIALOG
   Then TECLA=TECLA+"F1=Tabelas  "
        SelectControl "V_Conta"
        INICIO_DIALOG=False
EndIf

Temp=True

If Campo="V_Conta"
   Then Monta_Opcoes("Codigo da Conta",VSD_V_Conta)
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEAV=0
               Then If QuerExcluir("")
                       Then CopyFromArray RegItem
                            Exclusao_Cabeca=False
                            CHAVEAV=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="V_PlContas"  Or
               Campo="V_CCusto"    Or
               Campo="V_Codigo_Hist"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="V_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="V_CdDocto"     Then Moveto [Codigo do Documento] EndIf
                    If Campo="V_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="V_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    If Campo="V_Codigo_Hist" Then Moveto [Codigo do Historico] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off

                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                            SelectControl "V_PlContas"
                   EndIf
                   If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                            SelectControl "V_CCusto"
                   EndIf
                    If Campo="V_Codigo_Hist"
                       Then VSD_V_Codigo_Hist     =[Codigo do Historico]
                            VSD_V_Descri_Hist     =[Descricao do Historico]
                            Campo="V_Codigo_Hist"
                   EndIf
                   TECLA=TECLA+"F1=Tabelas  "
                   Moveto "NotaECV"
                   RefreshDialog
           EndIf

           If Campo="V_CdDocto"
              Then If SD_Seleciona_Opcoes("Codigo do Documento","CR",11,4)
                      Then VSD_V_CdDocto           =[Codigo do Documento]
                           VSD_V_TpDocto           =[Tipo do Documento  ]
                           VSD_V_SrDocto           =[Serie do Documento ]
                   EndIf 
                   SelectControl "V_CdDocto"
                   RefreshDialog
           EndIf

           If Campo="V_Conta"
              Then If SD_Seleciona_Opcoes("Codigo da Conta","CR",7,4)
                      Then VSD_V_Conta            = [Codigo da Conta   ]
                            VSD_V_Descricao_Conta = [Descricao da Conta]
                            VSD_V_Tipo_Conta      = [Tipo da Conta     ]
                   EndIf
                   SelectControl "V_Conta"
                   RefreshDialog
           Endif           

           If Campo="V_Tpoper"
              Then If SD_Seleciona_Opcoes("Tipo de Opera‡„o","CR",9,4)
                      Then VSD_V_Tpoper          =[Tipo de Operacao  ]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   SelectControl "V_Tpoper"
                   RefreshDialog
           Endif           
           
           If Campo="V_TpLancto" 
              Then If SD_Seleciona_Opcoes("Tipo do Lan‡amento","CR",9,31)
                      Then VSD_V_TpLancto          =[Tipo do Lancamento]
                           VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                   EndIf
                   SelectControl "V_TpLancto"
                   RefreshDialog
           Endif

           Temp=False
      Case Evento["KeyCode"] = 27: 
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAV = 1 ;Or RecordStatus("Modified")=True
                             Then Del
                          EndIf   
                          CHAVEAV=9
                          CancelDialog
                  EndIf
             Case Campo="V_Tpoper"               : 
                  Monta_Opcoes("Codigo da Conta",VSD_V_Conta)
                  SelectControl "V_Conta"
             Case Campo="V_TpLancto"             :
                  TECLA=TECLA+"F1=Tabelas  " 
                  Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
                  SelectControl "V_Tpoper"
             Case Campo="V_CdDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                  SelectControl "V_TpLancto" 
             Case Campo="V_NoDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Codigo do Documento","")
                  SelectControl "V_CdDocto"
             Case Campo="V_Vr_Lancto":
                  SelectControl "V_NoDocto"
             Case Campo="V_Vr_Juros":
                  SelectControl "V_Vr_Lancto"
             Case Campo="V_Vr_Descto":
                  SelectControl "V_Vr_Juros"  
             Case Campo="V_NoCheque":
                  SelectControl "V_Vr_Descto"
             Case Campo="I_ChPreDat":
                  SelectControl "V_NoCheque"
             Case Campo="I_DtCPrDat":
                  SelectControl "I_ChPreDat"
             Case Campo="V_DtDescto":
                  SelectControl "I_ChPreDat"
             Case Campo="V_PlContas":
                  If VSD_V_Tipo_Conta<>"C"
                     Then SelectControl "V_Vr_Descto"
                     Else SelectControl "V_DtDescto"
                  EndIf       
             Case Campo="V_PlContas":
                  SelectControl "V_Vr_Descto"
             Case Campo="V_CCusto":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_PlContas"
             Case Campo="V_Codigo_Hist":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_CCusto"
             Case Campo="V_Descri_Hist":
                  SelectControl "V_Codigo_Hist"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=AlinhM(ControlValue("V_Conta"),4)
                  TECLA=TECLA+"F1=Tabelas  "
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  VSD_V_Tipo_Conta     =[Tipo da Conta     ]
                                  KeyPress "ESC"
                                  Moveto "NotaECV"
                                  [Codigo da Conta]=VSD_V_Conta
                                  Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
                                  SelectControl "V_Tpoper"
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  VSD_V_Tipo_Conta     =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_Tpoper"             : 
                  VSD_V_Tpoper=AlinhM(ControlValue("V_Tpoper"),2)
                  If Checa_Opcoes("Tipo de Opera‡„o",VSD_V_Tpoper)
                     Then VSD_V_Tpoper          =Registro_F1["Tipo de Operacao"]
                          VSD_I_Descricao_Tpoper=Registro_F1["Descricao Operacao"]
                          [Tipo de Operacao    ]=VSD_V_Tpoper
                          Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                          SelectControl "V_TpLancto"
                     Else Mensagem("Tipo Opera‡„o n„o cadastrada !")
                          VSD_V_Tpoper=""
                          VSD_I_Descricao_Tpoper=""
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Checa_Opcoes("Tipo do Lan‡amento",VSD_V_TpLancto)
                     Then VSD_V_TpLancto          =Registro_F1["Tipo do Lancamento"]
                          VSD_V_Descricao_TpLancto=Registro_F1["Descricao do Lancamento"]
                          [Tipo do Lancamento]    =VSD_V_TpLancto
                          Monta_Opcoes("Codigo do Documento","")
                          SelectControl "V_CdDocto"
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_V_TpLancto=""
                          VSD_V_Descricao_TpLancto=""
                  EndIf             
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Checa_Opcoes("Codigo do Documento",VSD_V_CdDocto)
                     Then VSD_V_CdDocto          =[Codigo do Documento]
                          VSD_V_TpDocto          =[Tipo do Documento  ]
                          VSD_V_SrDocto          =[Serie do Documento ]
                          [Codigo do Documento]  =VSD_V_CdDocto
                          SelectControl "V_NoDocto"
                     Else Mensagem("Codigo Documento n„o Cadastrado !")
                          VSD_V_CdDocto          =""
                          VSD_V_TpDocto          =""
                          VSD_V_SrDocto          =""

                  EndIf
             Case Campo="V_NoDocto":
                  VSD_V_NoDocto=ControlValue("V_NoDocto")
                  SelectControl "V_Vr_Lancto"
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  SelectControl "V_Vr_Juros"
             Case Campo="V_Vr_Juros":
                  VSD_V_Vr_Juros=ControlValue("V_Vr_Juros")
                  SelectControl "V_Vr_Descto"
             Case Campo="V_Vr_Descto":
                  VSD_V_Vr_Descto=ControlValue("V_Vr_Descto")
                  TECLA=TECLA+"F1=Tabelas  "
                  If VSD_V_Tipo_Conta<>"C"
                     Then VSD_V_NoCheque=""
                          VSD_V_DtDescto=BlankDate()
                          VSD_I_ChPreDat=""
                          VSD_I_DtCPrDat=BlankDate()
                          SelectControl "V_PlContas"  
                     Else SelectControl "V_NoCheque"
                  EndIf  
             Case Campo="V_NoCheque":
                  VSD_V_NoCheque=ControlValue("V_NoCheque")
                  If Not IsBlank(VSD_V_NoCheque)
                     Then VSD_V_DtDescto=[NotaEC->Data de Entrada      ]
                          VSD_I_ChPreDat=""
                          VSD_I_DtCPrDat=BlankDate() 
                          SelectControl "V_PlContas"
                  EndIf
             Case Campo="I_ChPreDat":
                  VSD_I_ChPreDat=ControlValue("I_ChPreDat")
                  Switch
                    Case IsBlank(VSD_I_ChPreDat) Or 
                         VSD_I_ChPreDat="N"      : VSD_I_ChPreDat="N"
                                                   VSD_I_DtCPrDat=BlankDate()
                                                   SelectControl "V_DtDescto"
                    Otherwise                    : SelectControl "I_DtCPrDat"
                  EndSwitch    
             Case Campo="I_DtCPrDat"             :
                  VSD_I_DtCPrDat=ControlValue("I_DtCPrDat")
                  If IsBlank(VSD_I_DtCPrDat) And VSD_I_ChPreDat="S" 
                     Then SelectControl "I_DtCPrDat"
                     Else SelectControl "V_DtDescto"  
                  EndIf     
             Case Campo="V_DtDescto":
                  VSD_V_DtDescto=ControlValue("V_DtDescto")
                  SelectControl "V_PlContas"
;******* MODIFICADO P/ J.LUIS EM 24/06/04 **************************************
             Case Campo="V_PlContas"           :
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then If PlContas(VSD_V_PlContas,"S")
                             Then VSD_V_PlContas           = REG_PLCONTAS["Codigo Plano_Conta"]
                                  VSD_V_Descricao_PlContas = LTrim(REG_PLCONTAS["Descricao Plano_Conta"])
                                  Moveto "NotaECV"
                                  [Codigo Plano_Conta]     = VSD_V_PlContas
                                  SelectControl "V_CCusto"
                             Else VSD_V_PlContas           = ""
                                  VSD_V_Descricao_PlContas = ""
                          EndIf   
                     Else VSD_V_Descricao_PlContas = ""
                          SelectControl "V_CCusto"
                  EndIf
             Case Campo="V_CCusto"             :
                  VSD_V_CCusto=ControlValue("V_CCusto")
                  If Not IsBlank(VSD_V_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_V_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_CCusto          =""
                                          VSD_V_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_CCusto          =[Codigo CCusto]
                                          VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          Moveto "NotaECV"
                                          [Codigo CCusto]=VSD_V_CCusto
                                          SelectControl "V_Codigo_Hist"
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_V_CCusto          =""
                                  VSD_V_Descricao_CCusto=""
                                  TECLA=TECLA+"F1=Tabelas  "
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_CCusto=""
                          SelectControl "V_Codigo_Hist"
                  EndIf
;************** FIM MODIFICACAO **********************************************

             Case Campo="V_Codigo_Hist"        : SelectControl "V_Descri_Hist"
                  VSD_V_Codigo_Hist=ControlValue("V_Codigo_Hist")
                  If Not IsBlank(VSD_V_Codigo_Hist)
                     Then VSD_V_Codigo_Hist=AlinhM(VSD_V_Codigo_Hist,4)
                          Moveto [Codigo do Historico]
                          Ativa_Lookup()
													Moveto [Codigo do Historico]
                          Locate VSD_V_Codigo_Hist
                          If RetVal
                             Then If HIOLD<>VSD_V_Codigo_Hist
                                     Then VSD_V_Descri_Hist  =[Descricao do Historico]
                                  EndIf
                                  KeyPress "ESC"
                                  If HIOLD<>VSD_V_Codigo_Hist
                                     Then HISTORICO()
                                  EndIf
                                  HIOLD =VSD_V_Codigo_Hist
														 Else Mensagem("Historico n„o Cadastrado !")
                                  VSD_V_Codigo_Hist=""
                                  VSD_V_Descri_Hist=""
                                  KeyPress "ESC"
                                  SelectControl "V_Codigo_Hist"
                          EndIf
                          Echo Off
                     Else HIOLD =VSD_V_Codigo_Hist
                  EndIf
             Case Campo="V_Descri_Hist"     :
                  VSD_V_Descri_Hist=ControlValue("V_Descri_Hist")
                  CancelDialog
           EndSwitch
           RefreshDialog
           Registro_AVista("Gravar")
           Temp=False
   EndSwitch
EndIf

If CHAVEAV=0
   Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

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

Mouse Hide
Return TEMP
EndProc  ; (AVista_Dialog)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Vista                                  *
;*******************************************************************************
Proc Registro_AVista(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero do Lancamento CxBc]=VSD_V_Lancamento
       [Codigo da Conta          ]=VSD_V_Conta
       [Codigo da Empresa        ]=[NotaEC->Codigo da Empresa]
       [Tipo da Conta            ]=VSD_V_Tipo_Conta
       [Descricao da Conta       ]=VSD_V_Descricao_Conta
       [Valor                    ]=VSD_V_Vr_Lancto
       [Valor do Desconto        ]=VSD_V_Vr_Descto
       [Valor do Juros           ]=VSD_V_Vr_Juros
       [Numero do Cheque         ]=VSD_V_NoCheque
       [Cheque Pre-Datado        ]=VSD_I_ChPreDat
       [Data Cheque Pre-Datado   ]=VSD_I_DtCPrDat       
       [Codigo do Documento      ]=VSD_V_CdDocto
       [Tipo do Documento        ]=VSD_V_TpDocto
       [Serie do Documento       ]=VSD_V_SrDocto
       [Numero do Documento      ]=VSD_V_NoDocto
       [Tipo do Lancamento       ]=VSD_V_TpLancto
       [Descricao do Lancamento  ]=VSD_V_Descricao_TpLancto
       [Data Cheque Descontado   ]=VSD_V_DtDescto
       [Codigo Plano_Conta       ]=VSD_V_PlContas
       [Descricao Plano_Conta    ]=VSD_V_Descricao_PlContas
       [Tipo de Operacao         ]=VSD_V_Tpoper
       [Descricao Operacao       ]=VSD_I_Descricao_Tpoper
       [Codigo CCusto            ]=VSD_V_CCusto
       [Descricao CCusto         ]=VSD_V_Descricao_CCusto
       [Codigo do Historico      ]=VSD_V_Codigo_Hist
       [Descricao do Historico   ]=VSD_V_Descri_Hist
  Case Funcao_Registro="Ler":
       VSD_V_Lancamento           =[Numero do Lancamento CxBc]
       VSD_V_Conta                =[Codigo da Conta          ]
       VSD_V_Tipo_Conta           =[Tipo da Conta            ]
       VSD_V_Descricao_Conta      =[Descricao da Conta       ]
       VSD_V_Vr_Lancto            =[Valor                    ]
       VSD_V_Vr_Descto            =[Valor do Desconto        ]
       VSD_V_Vr_Juros             =[Valor do Juros           ]
       VSD_V_NoCheque             =[Numero do Cheque         ]
       VSD_I_ChPreDat             =[Cheque Pre-Datado        ]
       VSD_I_DtCPrDat             =[Data Cheque Pre-Datado   ]
       VSD_V_CdDocto              =[Codigo do Documento      ]
       VSD_V_TpDocto              =[Tipo do Documento        ]
       VSD_V_SrDocto              =[Serie do Documento       ]
       VSD_V_NoDocto              =[Numero do Documento      ]
       VSD_V_TpLancto             =[Tipo do Lancamento       ]  
       VSD_V_Descricao_TpLancto   =[Descricao do Lancamento  ]
       VSD_V_Tpoper               =[Tipo de Operacao         ]
       VSD_I_Descricao_Tpoper     =[Descricao Operacao       ]
       VSD_V_DtDescto             =[Data Cheque Descontado   ]
       VSD_V_PlContas             =[Codigo Plano_Conta       ]
       VSD_V_Descricao_PlContas   =[Descricao Plano_Conta    ]
       VSD_V_CCusto               =[Codigo CCusto            ]
       VSD_V_Descricao_CCusto     =[Descricao CCusto         ]
       VSD_V_Codigo_Hist          =[Codigo do Historico      ]
       VSD_V_Descri_Hist          =[Descricao do Historico   ]
       HIOLD                      =[Codigo do Historico      ]
       VSD_V_Flag                 =""

EndSwitch
EndProc  ; (Registro_AVista)

;*******************************************************************************
;** Inclusao, Alteracao de Caixa/Banco                                        **
;*******************************************************************************
Proc CONTA()
Private SEQMOV

If PARAM_ATUA_CXBC<>"S"
   Then If CHAVEAV=8
           Then Del
        EndIf
        Return
   Else Moveto "NotaECV"
        UnLockRecord

        Moveto "NotaEC"
        UnLockRecord
        KeyPress "F7"

        Caixa_Banco_Ok=True
        Moveto "\\sistemas\\ctacor\\MovCont"
        Moveto [Numero do Lancamento]
        If IsBlank([NotaECV->Numero do Lancamento CxBc])
           Then
                While True
                  End
                  Moveto [Numero do Lancamento]
                  If Numero_Lancamento("Interno","Locked_Down")
                     Then SEQMOV = PROXLANCTO_NLANC
                          Release Vars PROXLANCTO_NLANC
                          quitloop
                  EndIf    
                EndWhile

               ;While True
               ;  End
               ;  Moveto [Numero do Lancamento]
               ;  If Numero_Lancamento("Interno","")
               ;     Then SEQMOV = PROXLANCTO_NLANC
               ;          Release Vars PROXLANCTO_NLANC
               ;  EndIf
               ;  Down
               ;  [Numero do Lancamento]=SEQMOV
               ;  If Not IsLockRecord() Then QuitLoop EndIf
               ;EndWhile
               
                CHAVEAV=1
           Else  
             Locate [NotaECV->Numero do Lancamento CxBc]
             If Not RetVal
                Then Caixa_Banco_Ok=False
             EndIf
      
             ;*** Em Caso de Erro ***
             If Caixa_Banco_Ok
                Then MSG=    "Movimento no Caixa/Banco n„o corresponde a esta Nota !//"
                Else MSG=    "Lan‡amento no Caixa/Banco n„o encontrado p/ esta Nota !//"
             EndIf
             MSG=MSG+"Verificar no Caixa/Banco se o mes n„o foi fechado !//"
             MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efetuado !//"
             MSG=MSG+"Talvez algum outro erro gerou este problema !//"
             ;***********************
        EndIf     
EndIf

Switch
  Case CHAVEAV=1:
       If Not IsBlank([NotaECV->Numero do Lancamento CxBc])
          Then MSG=    "J  existe um Lan‡amento no Caixa/Banco p/ esta Nota !//"
               MSG=MSG+"Verificar no Caixa/Banco o Lan‡amento e Corrigi-lo !//"
               MSG=MSG+"Talvez algum erro gerou este problema !//"
               Mensagem()
       EndIf
  
       Caixa_Banco_Ok=True
  
       [Codigo da Conta       ]=[NotaECV->Codigo da Conta     ]
       [Codigo da Empresa     ]=[NotaEC->Codigo da Empresa    ]
       [Data                  ]=[NotaEC->Data de Entrada      ]
       [Data Competencia      ]=[NotaEC->Data de Emissao      ]
       [Valor                 ]=[NotaECV->Valor               ]
       [Valor do Desconto     ]=[NotaECV->Valor do Desconto   ]
       [Valor do Juros        ]=[NotaECV->Valor do Juros      ]
       [Numero do Cheque      ]=[NotaECV->Numero do Cheque    ]
       [Codigo do Documento   ]=[NotaECV->Codigo do Documento ]
       [Numero do Documento   ]=[NotaECV->Numero do Documento ]
       [Tipo de Operacao      ]=[NotaECV->Tipo de Operacao    ]      
       [Descricao do Historico]="PG "+[NotaECV->Tipo do Documento]+"/"+[NotaECV->Numero do Documento]
       [Sistema Gerador       ]="NE"
       [Empresa Gerador       ]=[NotaEC->Codigo da Empresa      ]
       [Lancamento Gerador    ]=[NotaEC->Numero do Lancamento   ]
       [Codigo do EmitDest    ]=[NotaEC->Codigo                 ]
       [Tipo do Lancamento    ]=[NotaECV->Tipo do Lancamento    ]
       [Data Cheque Descontado]=[NotaECV->Data Cheque Descontado]
       [Codigo CCusto         ]=[NotaECV->Codigo CCusto         ]
       [Cheque Pre-Datado     ]=[NotaECV->Cheque Pre-Datado     ]
       [Data Cheque Pre-Datado]=[NotaECV->Data Cheque Pre-Datado]
       [Codigo Plano_Conta    ]=[NotaECV->Codigo Plano_Conta    ]
       If Not IsBlank([NotaECV->Codigo do Historico])
          Then [Codigo do Historico   ]=[NotaECV->Codigo do Historico   ]
               [Descricao do Historico]=[NotaECV->Descricao do Historico]
          Else If Not IsBlanK([NotaECV->Descricao do Historico])
                  Then [Descricao do Historico]=[NotaECV->Descricao do Historico   ]
               EndIf
       EndIf
       Controle_Dia()
       UnLockRecord
  
       Moveto "NotaECV"
       [Numero do Lancamento CxBc]=SEQMOV
       UnLockRecord
  
       Atualiza_Saldo_Conta()
  Case CHAVEAV=0:
       If Not Caixa_Banco_Ok  Or
          (Caixa_Banco_Ok  And
           ([Sistema Gerador       ]<>"NE" Or
            [Empresa Gerador       ]<>[NotaEC->Codigo da Empresa   ] Or
            [Lancamento Gerador    ]<>[NotaEC->Numero do Lancamento] Or
            [Codigo do Documento   ]<>[NotaECV->Codigo do Documento] Or
            [Numero do Documento   ]<>[NotaECV->Numero do Documento]))
            Then UnLockRecord
                 Moveto "NotaECV"
                 CopyFromArray RegItem
                 UnLockRecord
                 MSG=MSG+"Se necess rio exclua este Lan‡amento a Vista e fa‡a-o novamente !"
                 Mensagem(MSG)
            Else [Codigo da Conta       ]=[NotaECV->Codigo da Conta     ]
                 [Codigo da Empresa     ]=[NotaEC->Codigo da Empresa    ]
                 [Data                  ]=[NotaEC->Data de Entrada      ]
                 [Valor                 ]=[NotaECV->Valor               ]
                 [Valor do Desconto     ]=[NotaECV->Valor do Desconto   ]
                 [Valor do Juros        ]=[NotaECV->Valor do Juros      ]
                 [Numero do Cheque      ]=[NotaECV->Numero do Cheque    ]
                 [Codigo do Documento   ]=[NotaECV->Codigo do Documento ]
                 [Numero do Documento   ]=[NotaECV->Numero do Documento ]
                 If [NotaECV->Tipo da Conta]="X"
                    Then [Tipo de Operacao]="06"
                    Else [Tipo de Operacao]="05"
                 EndIf
                 [Descricao do Historico]="PG "+[NotaECV->Tipo do Documento]+"/"+[NotaECV->Numero do Documento]
                 [Sistema Gerador       ]="NE"
                 [Empresa Gerador       ]=[NotaEC->Codigo da Empresa      ]
                 [Lancamento Gerador    ]=[NotaEC->Numero do Lancamento   ]
                 [Codigo do EmitDest    ]=[NotaEC->Codigo                 ]
                 [Tipo do Lancamento    ]=[NotaECV->Tipo do Lancamento    ]
                 [Data Cheque Descontado]=[NotaECV->Data Cheque Descontado]
                 [Codigo CCusto         ]=[NotaECV->Codigo CCusto         ]
                 [Cheque Pre-Datado     ]=[NotaECV->Cheque Pre-Datado     ]
                 [Data Cheque Pre-Datado]=[NotaECV->Data Cheque Pre-Datado]
                 [Codigo Plano_Conta    ]=[NotaECV->Codigo Plano_Conta    ]
                 [Codigo do Historico   ]=[NotaECV->Codigo do Historico   ]
                 If Not IsBlank([NotaECV->Codigo do Historico])
                    Then [Codigo do Historico   ]=[NotaECV->Codigo do Historico   ]
                         [Descricao do Historico]=[NotaECV->Descricao do Historico]
                    Else If Not IsBlanK([NotaECV->Descricao do Historico])
                            Then [Descricao do Historico]=[NotaECV->Descricao do Historico   ]
                         EndIf
                 EndIf
                 UnLockRecord
                 Moveto "NotaECV"
                 UnLockRecord
  
                 Atualiza_Saldo_Conta()
       EndIf
  Case CHAVEAV=8:
       If Not Caixa_Banco_Ok  Or
          (Caixa_Banco_Ok  And
           (([Sistema Gerador      ]<>"NE"  And
             [Sistema Gerador      ]<>"IX") Or
            [Empresa Gerador       ]<>[NotaEC->Codigo da Empresa   ] Or
            [Lancamento Gerador    ]<>[NotaEC->Numero do Lancamento] Or
            [Codigo do Documento   ]<>[NotaECV->Codigo do Documento] Or
            [Numero do Documento   ]<>[NotaECV->Numero do Documento]))
            Then UnLockRecord
                 Moveto "NotaECV"
                 If Exclusao_Cabeca
                    Then Mensagem(MSG)
                         OK="S"
                    Else MSG=MSG+"Deseja Excluir assim mesmo ?"
                         ConfGeral(MSG)
                 EndIf
                 If OK="S"
                    Then Del
                 EndIf
            Else Atualiza_Saldo_Conta()
                 Moveto "\\Sistemas\\CtaCor\\MovCont"
                 Del
                 Moveto "NotaECV"
                 Del
       EndIf
EndSwitch

Moveto "NotaEC"
KeyPress "F7"
Moveto "NotaECV"

EndProc  ; (Conta)

;*******************************************************************************
;* Rotina para Atualizar o Saldo da Conta                                      *
;*******************************************************************************
Proc Atualiza_Saldo_Conta()
private ANO, MES

If Not IsAssigned(VALORANT) Then VALORANT = Blanknum() EndIf

If Not IsBlank([NotaEC->Data de Entrada])
  Then MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
       ANO=ALINHM(StrVal( Year([NotaEC->Data de Entrada])),4)
  Else MES="00"
       ANO="0000"
EndIf

Moveto "\\Sistemas\\CtaCor\\SaldCont"
Moveto [Codigo da Conta]
Locate [NotaECV->Codigo da Conta],ANO,MES
If Not RetVal
   Then End
        Down
        [Codigo da Conta]=[NotaECV->Codigo da Conta]
        [Ano Referencia ]=ANO
        [Mes Referencia ]=MES
EndIf
If CHAVEAV<>8
   Then [Saidas]=([Saidas]-VALORANT)+[NotaECV->Valor]
   Else [Saidas]=[Saidas]-[NotaECV->Valor]
EndIf
UnLockRecord
EndProc  ; (Atualiza_Saldo_Conta)

;*******************************************************************************
;* Rotina para Localizar Item - Digitacao de Contas a Pagar                    *
;*******************************************************************************
Proc CHAVEAP()
MSGCAMPO     = ""
While True

  Moveto "NotaEcp"
  End
  SEQ = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]

  If IsBlank(SEQ)
     Then SEQ   = 1
     Else SEQ   = SEQ + 1
  EndIf
  []=SEQ
  LockRecord
  Locate SEQ

  Opcao_Ver    =False
  SetaCorRegistro("Editar")
  While True
    MSGCAMPO=""
    TECLA=" Esc=Retornar  F3=Ver Ficha  F7=Paginar  "
    If Not IsBlank([NotaEC->Numero da OC])
       Then TECLA=TECLA+"F8=Venctos_OC  "
       Else TECLA=TECLA+"               "
    EndIf
    TECLA=TECLA+"PgDn=Finalizar  "
    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGUP","PGDN","PGUP","F8"

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("NotaEcp","MR")
           If EDITAR="S"
              Then CHAVEAP=0
                   Controla_EdicaoAP()
              Else If EXCLUIR="S"
                      Then If Checa_Supervisor()
                              Then If QuerExcluir("")
                                      Then CopyToArray RegItem
                                           Exclusao_Cabeca=False
                                           CHAVEAP=8
                                           TITULOS()
                                      Else UnLockRecord
                                   EndIf
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case RetVal="F3":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEAP=0
         Home
         SEQ=[Sequencia do Lancamento]
         Inicia_Registro_Venctos()
         Digita_APrazo()
         QuitLoop
    Case Retval="F8" And Not IsBlank([NotaEC->Numero da OC]):
         Del
         OC_VENCTOS()
         QuitLoop
    Case Retval="ESC" Or Retval="PGDN":
         CHAVEAP=9
         If Retval="PGDN"
            Then CHAVEAP=7
         EndIf

         Moveto [Valor do Documento]
         TOTVENC=ImageCSum()

         If NumVal(StrVal(TOTVENC)) <> NumVal(StrVal([Notaec->Valor Nota Fiscal]))
            Then MSG="Total dos vencimentos difere do total da nota !//"
                 MSG=MSG+"   Nota = "+Format("W10.2,EIC",[Notaec->Valor Nota Fiscal])+"//"
                 MSG=MSG+"Venctos = "+Format("W10.2,EIC",TOTVENC)
                 Mensagem(MSG)
         Endif
     
         Del
         Return
    Case Retval="ENTER":
         If Isblank([])
            Then If IsBlank(SEQ)
                    Then SEQ=1
                    Else SEQ=SEQ+1
                 EndIf
                 []=SEQ
         EndIf
         SEQ=[]
         Del
         Locate LANCTO,SEQ
         If Retval
            Then CHAVEAP=0
            Else CHAVEAP=1
                 End Down
                 [Numero do Lancamento   ]=LANCTO
                 [Sequencia do Lancamento]=SEQ
                 UnLockRecord
                 Locate LANCTO,SEQ
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc  ; (ChaveaP)

;*******************************************************************************
;* Rotina de Digitacao Dados a Prazo                                           *
;*******************************************************************************
Proc APrazo_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

CAIXA_BANCO=False
TECLA=" Esc=Retornar  "
MSGCAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="V_Conta"
        INICIO_DIALOG=False
EndIf

If Opcao_Ver Then Campo="I_Seq" EndIf

If Campo="V_Conta"
   Then Monta_Opcoes("Codigo da Conta","")
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   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 SEQ=[Sequencia do Lancamento]
                      Inicia_Registro_Venctos()
              EndIf
          EndSwitch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEAP=0
               Then If QuerExcluir("")
                       Then CopyFromArray RegItem
                            CHAVEAP=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="V_TpPagto"     Or
               Campo="V_PlContas"    Or
               Campo="V_CCusto"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="V_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="V_CdDocto"     Then Moveto [Codigo do Documento] EndIf
                    If Campo="V_TpPagto"     Then Moveto [Tipo do Pagamento  ] EndIf
                    If Campo="V_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="V_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off
                    
                    If Campo="V_TpPagto"
                       Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                            VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                    EndIf
                    If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=[Descricao CCusto]
                   EndIf
                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                   EndIf
           EndIf
          
           
           If Campo="V_CdDocto"
              Then If SD_Seleciona_Opcoes("Codigo do Documento","CR",11,32)
                      Then VSD_V_CdDocto           =[Codigo do Documento]
                           VSD_V_TpDocto           =[Tipo do Documento  ]
                           VSD_V_SrDocto           =[Serie do Documento ]
                   EndIf 
                   SelectControl "V_CdDocto"
                   RefreshDialog
           EndIf

           If Campo="V_Conta"
              Then If SD_Seleciona_Opcoes("Codigo da Conta","CR",9,4)
                      Then VSD_V_Conta            = [Codigo da Conta   ]
                            VSD_V_Descricao_Conta = [Descricao da Conta]
                            VSD_V_Tipo_Conta      = [Tipo da Conta     ]
                   EndIf
                   SelectControl "V_Conta"
                   RefreshDialog
           Endif           

           If Campo="V_Tpoper"
              Then If SD_Seleciona_Opcoes("Tipo de Opera‡„o","CR",9,4)
                      Then VSD_V_Tpoper          =[Tipo de Operacao  ]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   SelectControl "V_Tpoper"
                   RefreshDialog
           Endif           
           
           If Campo="V_TpLancto" 
              Then If SD_Seleciona_Opcoes("Tipo do Lan‡amento","CR",11,4)
                      Then VSD_V_TpLancto          =[Tipo do Lancamento]
                           VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                   EndIf
                   SelectControl "V_TpLancto"
                   RefreshDialog
           Endif           
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAP=1
                             Then Del
                          EndIf
                          CHAVEAP=9
                          CancelDialog
                  EndIf
             Case Campo="V_TpLancto"    : 
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Codigo da Conta",VSD_V_Conta)
                  Campo="V_Conta"
             Case Campo="V_CdDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                  Campo="V_TpLancto"              
             Case Campo="V_NoDocto"     : 
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Codigo do Documento","")
                  Campo="V_CdDocto"
             Case Campo="V_DtVencto"    : Campo="V_NoDocto"
             Case Campo="V_DtaPagar"    : Campo="V_DtVencto"  
             Case Campo="V_Vr_Lancto"   : Campo="V_DtaPagar"
             Case Campo="V_TpPagto"     : Campo="V_Vr_Lancto"
             Case Campo="V_PlContas"    : Campo="V_TpPagto"
             Case Campo="V_CCusto"      : Campo="V_PlContas"
             Case Campo="V_DtCompet"    : Campo="V_CCusto"
             Case Campo="V_Vr_Descto"   : Campo="V_DtCompet"
             Case Campo="V_DtDescto"    : Campo="V_Vr_Descto"
             Case Campo="V_Multa"       : Campo="V_DtDescto"
             Case Campo="V_TxJuros"     : Campo="V_Multa"
             Case Campo="V_TpTxJuros"   : Campo="V_TxJuros"
             Case Campo="V_Observacoes" : Campo="V_TpTxJuros"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=ControlValue("V_Conta")
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  KeyPress "ESC"
                                  Moveto "NotaECP"
                                  [Codigo da Conta ]=VSD_V_Conta
                                  Switch
                                    Case [Tipo da Conta]="X" : VSD_V_Tpoper="06"
                                    Case [Tipo da Conta]="C" : VSD_V_Tpoper="05"
                                  EndSwitch
                                  [Tipo de Operacao]=VSD_V_Tpoper
                                  Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                                  Campo="V_TpLancto"
                                  
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Checa_Opcoes("Tipo do Lan‡amento",VSD_V_TpLancto)
                     Then VSD_V_TpLancto          =Registro_F1["Tipo do Lancamento"]
                          VSD_V_Descricao_TpLancto=Registro_F1["Descricao do Lancamento"]
                          [Tipo do Lancamento]    =VSD_V_TpLancto
                          Monta_Opcoes("Codigo do Documento","")
                          Campo="V_CdDocto"
                          SelectControl "V_CdDocto"
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_V_TpLancto=""
                          VSD_V_Descricao_TpLancto=""
                          KeyPress "ESC"
                  EndIf                     
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Checa_Opcoes("Codigo do Documento",VSD_V_CdDocto)
                     Then VSD_V_CdDocto          =[Codigo do Documento]
                          VSD_V_TpDocto          =[Tipo do Documento  ]
                          VSD_V_SrDocto          =[Serie do Documento ]
                          [Codigo do Documento]  =VSD_V_CdDocto
                          Campo="V_NoDocto"
                          SelectControl "V_NoDocto"
                     Else Mensagem("Codigo Documento n„o Cadastrado !")
                          VSD_V_CdDocto          =""
                          VSD_V_TpDocto          =""
                          VSD_V_SrDocto          =""
                          KeyPress "ESC"
                  EndIf
             Case Campo="V_NoDocto"   : Campo="V_DtVencto"
                  VSD_V_NoDocto=ControlValue("V_NoDocto")
             Case Campo="V_DtVencto":
                  VSD_V_DtVencto=ControlValue("V_DtVencto")
                  If Not IsBlank(VSD_V_DtVencto)
                     Then If VSD_V_DtVencto<[NotaEC->Data de Emissao]
                             Then MENSAGEM("Data de Vencimento Menor que a Emiss„o")
                             Else VSD_V_DtaPagar=VSD_V_DtVencto
                                  While True
                                    NDIAS=0
                                    If Dow(VSD_V_DtaPagar)="Sat"
                                       Then NDIAS=2
                                       Else If Dow(VSD_V_DtaPagar)="Sun"
                                               Then NDIAS=1
                                            EndIf
                                    EndIf
                                    DIA = VSD_V_DtaPagar

                                    ;Moveto [Lookup_Feriado]
                                    ;Ativa_Lookup()
                                    ;Moveto [Data do Feriado]
                                    ;Locate DIA
                                    ;If Retval
                                    ;   Then NDIAS=[Dias a Pagar]
                                    ;EndIf
                                    ;KeyPress "ESC"
                                    ;Echo Off

                                    VSD_V_DtaPagar=VSD_V_DtaPagar+NDIAS
                                    If NDIAS=0
                                       Then QuitLoop
                                    EndIf
                                  EndWhile
                                  Campo="V_DtaPagar"
                          EndIf
                  EndIf
             Case Campo="V_DtaPagar":
                  VSD_V_DtaPagar=ControlValue("V_DtaPagar")
                  If Not IsBlank(VSD_V_DtaPagar)
                     Then Campo="V_Vr_Lancto"
                  EndIf
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  If Not IsBlank(VSD_V_Vr_Lancto)
                     Then Campo="V_TpPagto"
                  EndIf
             Case Campo="V_TpPagto": 
                  VSD_V_TpPagto=ControlValue("V_TpPagto")
                  If Not IsBlank(VSD_V_TpPagto)
                     Then Moveto [Tipo do Pagamento]
                          Ativa_Lookup()
                          Moveto [Tipo do Pagamento]
                          Locate VSD_V_TpPagto
                          If RetVal
                             Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                                  VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                                  KeyPress "ESC"
                                  [Tipo do Pagamento]=VSD_V_TpPagto
                                  Campo="V_PlContas"
                             Else Mensagem("Forma Pagamento invalido !")
                                  VSD_V_TpPagto          =""
                                  VSD_V_Descricao_TpPagto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_PlContas"           : 
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then If PlContas(VSD_V_PlContas,"S")
                             Then VSD_V_PlContas           = REG_PLCONTAS["Codigo Plano_Conta"]
                                  VSD_V_Descricao_PlContas = LTrim(REG_PLCONTAS["Descricao Plano_Conta"])
                                  VSD_V_Codigo_Hist        = REG_PLCONTAS["Codigo do Historico"]
                                  Moveto "NotaECP"
                                  [Codigo Plano_Conta]     = VSD_V_PlContas
                                  Campo="V_CCusto"
                             Else VSD_V_PlContas           = ""
                                  VSD_V_Descricao_PlContas = ""
                          EndIf
                     Else VSD_V_Descricao_PlContas=""
                          Campo="V_CCusto"
                  EndIf   
             Case Campo="V_CCusto"             :
                  VSD_V_CCusto=ControlValue("V_CCusto")
                  If Not IsBlank(VSD_V_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_V_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_CCusto          =""
                                          VSD_V_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_CCusto          =[Codigo CCusto]
                                          VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"

                                          [Codigo CCusto]=VSD_V_CCusto
                                          Campo="V_DtCompet"
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_V_CCusto          =""
                                  VSD_V_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_CCusto=""
                          Campo="V_DtCompet"
                  EndIf
             Case Campo="V_DtCompet":                  
                  If VSD_V_DtCompet =BlankDate() and CHAVEAP=1 
                     then VSD_V_DtCompet = [Notaec->Data de Emissao]
                     Else VSD_V_DtCompet=ControlValue("V_DtCompet")
                  EndIf
                  Campo="V_Vr_Descto"                                  
             Case Campo="V_Vr_Descto":
                  VSD_V_Vr_Descto=ControlValue("V_Vr_Descto")
                  If VSD_V_Vr_Descto<=0 Or IsBlank(VSD_V_Vr_Descto)
                     Then VSD_V_DtDescto=BlankDate()
                          Campo="V_Multa"
                     Else Campo="V_DtDescto"
                  EndIf
             Case Campo="V_DtDescto":
                  VSD_V_DtDescto=ControlValue("V_DtDescto")
                  If IsBlank(VSD_V_DtDescto) And VSD_V_Vr_Descto>0
                     Then Campo="V_DtDescto"
                     Else If Not IsBlank(VSD_V_DtDescto) And VSD_V_Vr_Descto<=0
                             Then Campo="V_DtDescto"
                             Else Campo="V_Multa"
                          EndIf
									EndIf
             Case Campo="V_Multa"    : Campo="V_TxJuros"
                  VSD_V_Multa=ControlValue("V_Multa")
             Case Campo="V_TxJuros"  : Campo="V_TpTxJuros"
                  VSD_V_TxJuros=ControlValue("V_TxJuros")
             Case Campo="V_TpTxJuros":
                  VSD_V_TpTxJuros=ControlValue("V_TpTxJuros")
                  If VSD_V_TpTxJuros="D" Or VSD_V_TpTxJuros="M" Or VSD_V_TpTxJuros="A" Or VSD_V_TpTxJuros=""
                     Then Switch
                          Case VSD_V_TpTxJuros="":
                               VSD_V_NDTxJuros=0
                          Case VSD_V_TpTxJuros="D":
                               VSD_V_NDTxJuros=1
                          Case VSD_V_TpTxJuros="M":
                               VSD_V_NDTxJuros=30
                          Case VSD_V_TpTxJuros="A":
                               VSD_V_NDTxJuros=365
                          EndSwitch
                          Campo="V_Observacoes"
                  EndIf
             Case Campo="V_Observacoes":
                  VSD_V_Observacoes=ControlValue("V_Observacoes")
                  TPPAGTO=[NotaEC->Tipo de Pagamento]
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="V_Conta"    Or
   Campo="V_Tpoper"   Or
   Campo="V_TpLancto" Or
   Campo="V_CdDocto"  Or
   Campo="V_TpPagto"  Or
   Campo="V_CCusto"   Or
   Campo="V_PlContas"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="":
       MSGCAMPO=""
EndSwitch

If CHAVEAP=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

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

Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (APrazo_Dialog)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro_Venctos(ok)
Private ok
If Ok
   Then Registro_Item_Venctos("Gravar")
        Titulos()
   Else If CHAVEAP=0 or CHAVEAP=8
           Then CopyFromArray RegItem
        EndIf
        If CHAVEAP=8 Then Titulos() EndIf
EndIf
EndProc   ; (Finaliza_Registro_Venctos)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro_Venctos()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [NotaEC->Numero do Lancamento],SEQ
CopyToArray RegItem
Registro_Item_Venctos("Ler")
EndProc ; (Inicia_Registro_Venctos)

;*******************************************************************************
;* Rotina para Lancamento a Prazo                                              *
;*******************************************************************************
Proc Digita_APrazo()
Private MSG_ATUA,forok
MSGCAMPO     = ""

Moveto "NotaEcp"
If PARAM_ATUA_CAPG="S"
   Then MSG_ATUA=" - ATUALIZANDO !"
   Else MSG_ATUA=" - NAO ATUALIZA !"
EndIf

If CHAVEAP=1
   Then If [Sequencia do Lancamento]=1
           Then

                Moveto "NotaEC"
                Moveto [Codigo]
                If Busca_Lookup("Codigo",[NotaEC->Codigo],"SM")
                   Then Forok=True
                   Else Forok=False
                EndIf
                Moveto "NotaEcp"
                [Tipo do Lancamento ]="C"
                [Codigo do Documento]=[NotaEC->Codigo do Documento]
                [Numero do Documento]=[NotaEC->Numero do Documento]
                [Observacoes        ]="REF. "+[NotaEC->Tipo do Documento]+"/"+[NotaEC->Serie do Documento]+"/"+[NotaEC->Numero do Documento]
                If ForOk
                   Then [Codigo Plano_Conta    ]=Reg_Busca_Lookup["Codigo Plano_Conta"]
                        [Descricao Plano_Conta ]=LTrim([Descricao Plano_Conta])
                        [Codigo CCusto         ]=Reg_Busca_Lookup["Codigo CCusto"]
                        [Descricao CCusto      ]=LTrim([Descricao CCusto])
                EndIf

           Else UnLockRecord

                Moveto "NotaEC"
                UnLockRecord
                KeyPress "F7"

                Moveto "NotaEcp"
                Moveto [Sequencia do Lancamento]
                Locate LANCTO,SEQ

                Moveto [Codigo da Conta    ] Ditto
                Moveto [Tipo do Lancamento ] Ditto
                Moveto [Codigo do Documento] Ditto
                Moveto [Numero do Documento] Ditto
                Moveto [Valor do Documento ] Ditto
                Moveto [Tipo do Pagamento  ] Ditto
                Moveto [Codigo CCusto      ] Ditto
                Moveto [Codigo Plano_Conta ] Ditto
                Moveto [Multa              ] Ditto
                Moveto [Taxa de Juros      ] Ditto
                Moveto [Tipo Taxa de Juros ] Ditto
                Moveto [NDias Taxa de Juros] Ditto
                Moveto [Observacoes        ] Ditto
                Moveto [Data Competencia   ] Ditto
                UnLockRecord

                Moveto "NotaEC"
                KeyPress "F7"
                Moveto "NotaEcp"
                Moveto [Sequencia do Lancamento]
                Locate LANCTO,SEQ

        EndIf
EndIf

INICIO_DIALOG=True
CopyToArray RegItem

Registro_Item_Venctos("Ler")

Showdialog "Dados do Vencimento [     ] Contas a Pagar"+MSG_ATUA Proc "APrazo_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP"
     @ 06,2 height 16 width 74

   Accept @ -01,28 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 "Conta" For "V_Conta"
   Accept @ 01,01 Width 07 "A4" picture "#*#" Tag "V_Conta" to VSD_V_Conta
   Accept @ 01,07 Width 33 "A30" picture "!*!" Tag "V_Descricao_Conta" to VSD_V_Descricao_Conta

   Label  @ 00,57 "Lan‡to CtaPag" For "V_Lancamento"
   Accept @ 01,62 Width 09 "A6" picture "#*#" Tag "V_Lancamento" to VSD_V_Lancamento

   Label  @ 02,00 "Tipo Lan‡amento" For "V_TpLancto"
   Accept @ 03,01 Width 04 "A1" picture "!" Tag "V_TpLancto" to VSD_V_TpLancto
   Accept @ 03,05 Width 23 "A20" picture "!*!" Tag "V_Descricao_TpLancto" to VSD_V_Descricao_TpLancto

   Label  @ 02,28 "Codigo Documento" For "V_CdDocto"
   Accept @ 03,29 Width 07 "A4" picture "!*!" Tag "V_CdDocto" to VSD_V_CdDocto
   Accept @ 03,36 Width 07 "A4" picture "!*!" Tag "V_TpDocto" to VSD_V_TpDocto
   Accept @ 03,43 Width 07 "A4" picture "!*!" Tag "V_SrDocto" to VSD_V_SrDocto
   Label  @ 02,50 "N§ Documento" For "V_NoDocto"
   Accept @ 03,51 Width 13 "A10" picture "!*!" Tag "V_NoDocto" to VSD_V_NoDocto

   Label  @ 04,00 "Dt.Vencto" For "V_DtVencto"
   Accept @ 05,01 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtVencto" to VSD_V_DtVencto

   Label  @ 04,14 "Dt.a Pagar" For "V_DtaPagar"
   Accept @ 05,15 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtaPagar" to VSD_V_DtaPagar

   Label  @ 04,28 "Vr.Lan‡to" For "V_Vr_Lancto"
   Accept @ 05,29 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Lancto" to VSD_V_Vr_Lancto

   Label  @ 04,41 "Forma Pagamento" For "V_TpPagto"
   Accept @ 05,42 Width 05 "A2" picture "!*!" Tag "V_TpPagto" to VSD_V_TpPagto
   Accept @ 05,47 Width 24 "A20" picture "!*!" Tag "V_Descricao_TpPagto" to VSD_V_Descricao_TpPagto

   Label  @ 06,00 "Plano Contas" For "V_PlContas"
   Accept @ 07,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 07,17 Width 43 "A40" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas   
   
   Label  @ 08,00 "Centro Custo" For "V_CCusto"
   Accept @ 09,01 Width 10 "A7" picture "###.###" Tag "V_CCusto" to VSD_V_CCusto
   Accept @ 09,11 Width 28 "A25" picture "!*!" Tag "V_Descricao_CCusto" to VSD_V_Descricao_CCusto

   Label  @ 08,41 "Dt.Compet" For "V_DtCompet"
   Accept @ 09,42 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtCompet" to VSD_V_DtCompet

   Label  @ 10,00 "Vr.Descto" For "V_Vr_Descto"
   Accept @ 11,01 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Descto" to VSD_V_Vr_Descto

   Label  @ 11,13 "Ate" For "V_DtDescto"
   Accept @ 11,18 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtDescto" to VSD_V_DtDescto

   Label  @ 10,31 "Multa(%)" For "V_Multa"
   Accept @ 11,32 Width 09 "$" picture "#*#.[###]" Tag "V_Multa" to VSD_V_Multa

   Label  @ 10,41 "Taxa de Juros(%)" For "V_TxJuros"
   Accept @ 11,42 Width 09 "$" picture "#*#.[###]" Tag "V_TxJuros" to VSD_V_TxJuros

   Label  @ 11,56 "(Dia/Mes/Ano)" For "V_TpTxJuros"
   Accept @ 11,52 Width 4 "A1" picture "&" Tag "V_TpTxJuros" to VSD_V_TpTxJuros

   Label  @ 10,65 "Dias" For "V_TpTxJuros"
   Accept @ 10,59 Width 6 "S"  picture "###" Tag "V_NDTxJuros" to VSD_V_NDTxJuros

   Label  @ 12,00 "Observa‡oes" For "V_Observacoes"
   Accept @ 13,01 Width 70 "A100" picture "!*!" Tag "V_Observacoes" to VSD_V_Observacoes

Enddialog
Mouse Show
If RetVal
   Then Finaliza_Registro_Venctos(True)
   Else Finaliza_Registro_Venctos(False)
EndIf

EndProc  ; (Digita_APrazo)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Prazo                                  *
;*******************************************************************************
Proc Registro_Item_Venctos(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero Lancamento Titulos]=VSD_V_Lancamento
       [Codigo do Documento      ]=VSD_V_CdDocto
       [Tipo do Documento        ]=VSD_V_TpDocto
       [Serie do Documento       ]=VSD_V_SrDocto
       [Numero do Documento      ]=VSD_V_NoDocto
       [Tipo do Lancamento       ]=VSD_V_TpLancto
       [Descricao do Lancamento  ]=VSD_V_Descricao_TpLancto
       [Tipo de Operacao         ]=VSD_V_Tpoper
       [Descricao Operacao       ]=VSD_I_Descricao_Tpoper
       [Data de Vencimento       ]=VSD_V_DtVencto
       [Data a Pagar             ]=VSD_V_DtaPagar
       [Data Competencia         ]=VSD_V_DtCompet
       [Valor do Documento       ]=VSD_V_Vr_Lancto
       [Valor do Desconto        ]=VSD_V_Vr_Descto
       [Data Limite Desconto     ]=VSD_V_DtDescto
       [Taxa de Juros            ]=VSD_V_TxJuros
       [Tipo Taxa de Juros       ]=VSD_V_TpTxJuros
       [NDias Taxa de Juros      ]=VSD_V_NDTxJuros
       [Tipo do Pagamento        ]=VSD_V_TpPagto
       [Descricao Tipo Pagamento ]=VSD_V_Descricao_TpPagto
       [Codigo da Conta          ]=VSD_V_Conta
       [Codigo da Empresa        ]=[NotaEC->Codigo da Empresa]
       [Descricao da Conta       ]=VSD_V_Descricao_Conta
       [Observacoes              ]=VSD_V_Observacoes
       [Multa                    ]=VSD_V_Multa
       [Codigo CCusto            ]=VSD_V_CCusto
       [Descricao CCusto         ]=VSD_V_Descricao_CCusto
       [Codigo Plano_Conta       ]=VSD_V_PlContas
       [Descricao Plano_Conta    ]=VSD_V_Descricao_PlContas
       UnLockRecord
  Case Funcao_Registro="Ler":  
       VSD_I_Seq                  =[Sequencia do Lancamento  ]
       VSD_V_Lancamento           =[Numero Lancamento Titulos]
       VSD_V_CdDocto              =[Codigo do Documento      ]
       VSD_V_TpDocto              =[Tipo do Documento        ]
       VSD_V_SrDocto              =[Serie do Documento       ]
       VSD_V_NoDocto              =[Numero do Documento      ]
       VSD_V_TpLancto             =[Tipo do Lancamento       ]  
       VSD_V_Descricao_TpLancto   =[Descricao do Lancamento  ]
       VSD_V_Tpoper               =[Tipo de Operacao         ]
       VSD_I_Descricao_Tpoper     =[Descricao Operacao       ]
       VSD_V_DtVencto             =[Data de Vencimento       ]
       VSD_V_DtaPagar             =[Data a Pagar             ]       
       VSD_V_DtCompet             =[Data Competencia         ]
       VSD_V_Vr_Lancto            =[Valor do Documento       ]
       VSD_V_Vr_Descto            =[Valor do Desconto        ]
       VSD_V_DtDescto             =[Data Limite Desconto     ]
       VSD_V_TxJuros              =[Taxa de Juros            ]
       VSD_V_TpTxJuros            =[Tipo Taxa de Juros       ]
       VSD_V_NDTxJuros            =[NDias Taxa de Juros      ]
       VSD_V_TpPagto              =[Tipo do Pagamento        ]
       VSD_V_Descricao_TpPagto    =[Descricao Tipo Pagamento ]
       VSD_V_Conta                =[Codigo da Conta          ]
       VSD_V_Descricao_Conta      =[Descricao da Conta       ]
       If IsBlank(VSD_V_CONTA)
          Then VSD_V_CONTA          =PARAM_CONTA_CAIXA
               VSD_V_DESCRICAO_CONTA=PARAM_DESC_CONTA_CAIXA
       EndIf
       VSD_V_Observacoes          =[Observacoes              ]
       VSD_V_Multa                =[Multa                    ]
       VSD_V_CCusto               =[Codigo CCusto            ]
       VSD_V_Descricao_CCusto     =[Descricao CCusto         ]
       VSD_V_PlContas             =[Codigo Plano_Conta       ]
       VSD_V_Descricao_PlContas   =[Descricao Plano_Conta    ]
EndSwitch
EndProc  ; (Registro_APrazo)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc SD_Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO,NL,NC)
Private OPCAODIVERSAS, LJ, AJ, ncp, SEMRETORNO

If DynArraySize(Opcoes)=0
   Then Mensagem("Tabela sem Registros !")
        Return False
EndIf

AJ=DynArraySize(Opcoes)
If AJ>15
   Then AJ=15
   Else If AJ<3 Then AJ=3 EndIf
EndIf

Switch
  Case OPCAODIVERSAS="Codigo do Documento" : If AJ>8 Then AJ=8 EndIf 
                                             ncp=1 LJ=66
  Case OPCAODIVERSAS="Tipo de Opera‡„o"    : ncp=1 LJ=31
  Case OPCAODIVERSAS="Tipo do Lan‡amento"  : ncp=1 LJ=32
  Case OPCAODIVERSAS="Codigo da Conta"     : ncp=1 LJ=37
EndSwitch

ArrayElement=0
Showdialog "Consulta "+OPCAODIVERSAS Proc "Opcoes_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC"
     @ NL,NC height AJ+2 width LJ+5

   PickDynArray @0,01 Height AJ width LJ
   Columns ncp
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Codigo do Documento" : [Codigo do Documento]=Registro_F1["Codigo do Documento"]
                  Case OPCAODIVERSAS="Tipo de Opera‡„o"    : [Tipo de Operacao   ]=Registro_F1["Tipo de Operacao"   ]
                  Case OPCAODIVERSAS="Tipo do Lan‡amento"  : [Tipo do Lancamento ]=Registro_F1["Tipo do Lancamento" ]
                  Case OPCAODIVERSAS="Codigo da Conta"     : [Codigo da Conta    ]=Registro_F1["Codigo da Conta"    ]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (SD_Seleciona_Opcoes)

;*******************************************************************************
;** Inclusao, Alteracao de Titulos Contas a Pagar                             **
;*******************************************************************************
Proc TITULOS()
Private SEQ,ImpOC
If PARAM_ATUA_CAPG<>"S"
   Then If CHAVEAP=8
           Then Del
        EndIf
        Return
EndIf
ImpOC=False

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"

Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([NotaEcp->Numero Lancamento Titulos])
    Then
         While True
           End
           Moveto [Numero do Lancamento]
           If Numero_Lancamento("Interno","Locked_Down")
              Then SEQ = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC
                   quitloop
           EndIf    
         EndWhile
    Else
         SEQ=[NotaEcp->Numero Lancamento Titulos]
         Locate [NotaEcp->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[NotaEcp->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                 MSG=MSG+"Referente ao vencimento ["+StrVal([NotaEcp->Sequencia do Lancamento])+"] n„o foi encontrado !//"
                 MSG=MSG+"Verificar fechamento mensal no Contas a Pagar Ok !//"
                 MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efetuado !"
                 Mensagem(MSG)

                 Moveto "NotaEcp"
                 CopyFromArray RegItem
                 UnLockRecord
                 If CHAVEAP=8
                    Then If Exclusao_Cabeca
                            Then OK="S"
                            Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                         EndIf
                         If OK="S"
                            Then Del
                         EndIf
                 EndIf
                 Moveto "NotaEC"
                 KeyPress "F7"

                 Moveto "NotaEcp"
                 Return
            Else
                 Oktit=True
                 Switch
                   Case [Sistema Gerador       ]<>"NE" and 
                        [Sistema Gerador       ]<>"IX"    : oktit=False
                   Case [Lancamento Gerador    ]<>[NotaEcp->Numero do Lancamento   ]: oktit=False
                   Case [Sequencia Gerador     ]<>[NotaEcp->Sequencia do Lancamento]: oktit=False
                   Case [Documento Referente   ]<>RTrim(([NotaEC->Tipo do Documento ]+"/"+[NotaEC->Numero do Documento ])): oktit=False
                 EndSwitch

                 If Not OkTit
                    Then If [Sistema Gerador       ]="OC" And
                            [Lancamento Gerador    ]=[NotaEC->Numero da OC] And
                            [Sequencia Gerador     ]=[NotaEcp->Sequencia do Lancamento] And
                            [Documento Referente   ]=RTrim(("OC/"+[NotaEC->Numero da OC]))
                            Then oktit=True
                                 ImpOC=True
                         EndIf
                 EndIf

                 If Not OkTit
                    Then MSG=    "O lan‡amento no Contas a Pagar n„o corresponde a Sequencia ["+StrVal([NotaEcp->Sequencia do Lancamento])+"] !//"
                         MSG=MSG+"Verificar no Contas a Pagar se o mes n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efetuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !"
                         If CHAVEAP=0
                            Then MSG=MSG+"//Se necess rio exclua esta Sequencia e fa‡a-a novamente !"
                                 Mensagem(MSG)

                                 Moveto "NotaEC"
                                 KeyPress "F7"

                                 Moveto "NotaEcp"
                                 Return
                            Else Mensagem(MSG)
                                 Moveto "NotaEcp"
                                 If CHAVEAP=8
                                    Then If Exclusao_Cabeca
                                            Then OK="S"
                                            Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                                         EndIf
                                         If OK="S"
                                            Then Del
                                         EndIf

                                         Moveto "NotaEC"
                                         KeyPress "F7"

                                         Moveto "NotaEcp"
                                         Return
                                 EndIf
                         EndIf
                 EndIf
         EndIf
EndIf

Oktit=True
If CHAVEAP=8 Or CHAVEAP=0
   Then If [Saldo do Documento]<>[Valor do Documento]
           Then Oktit=False
                MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Pagar,//"
                MSG=MSG+"referente a este documento: "+
                    [NotaEC->Codigo da Empresa]+" / "+
                    [NotaEC->Tipo do Documento]+" / "+
                    [NotaEC->Numero do Documento]+"//"
                MSG=MSG+"n„o ser  efetuado, pois o T¡tulo J  teve baixa ! // //"
                MSG=MSG+"Verificar !"
                Mensagem(MSG)

                Moveto "NotaEcp"
                CopyFromArray RegItem
                UnLockRecord
                If CHAVEAP=8
                   Then If Exclusao_Cabeca
                           Then OK="S"
                           Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                        EndIf
                        If OK="S"
                           Then Del
                        EndIf
                EndIf
                Moveto "NotaEC"
                KeyPress "F7"

                Moveto "NotaEcp"
                Return

           Else If CHAVEAP=8
                   Then Del
                        Moveto "NotaEcp"
                        Del
                EndIf
        EndIf
EndIf

If (CHAVEAP=1) Or
   (CHAVEAP=0 and Oktit)
   Then
        [Codigo do Documento ]=[NotaEcp->Codigo do Documento ]
        [Numero do Documento ]=[NotaEcp->Numero do Documento ]
        [Codigo do Emitente  ]=[NotaEC->Codigo               ]
        [Tipo do Lancamento  ]=[NotaEcp->Tipo do Lancamento  ]        
        [Data de Emissao     ]=[NotaEC->Data de Emissao      ]
        [Data de Vencimento  ]=[NotaEcp->Data de Vencimento  ]
        [Data a Pagar        ]=[NotaEcp->Data a Pagar        ]
        [Data Competencia    ]=[NotaEcp->Data Competencia    ]
        [Data De Entrada     ]=[NotaEC->Data de Entrada      ]
        [Valor do Documento  ]=[NotaEcp->Valor do Documento  ]
        [Saldo do Documento  ]=[NotaEcp->Valor do Documento  ]
        [Valor do Desconto   ]=[NotaEcp->Valor do Desconto   ]
        [Data Limite Desconto]=[NotaEcp->Data Limite Desconto]
        [Multa               ]=[NotaEcp->Multa               ]
        [Taxa de Juros       ]=[NotaEcp->Taxa de Juros       ]
        [Tipo Taxa de Juros  ]=[NotaEcp->Tipo Taxa de Juros  ]
        [NDias Taxa de Juros ]=[NotaEcp->NDias Taxa de Juros ]
        [Tipo do Pagamento   ]=[NotaEcp->Tipo do Pagamento   ]
        [Codigo da Conta     ]=[NotaEcp->Codigo da Conta     ]
        [Codigo da Empresa   ]=[NotaEC->Codigo da Empresa    ]
        [Observacoes         ]=[NotaEcp->Observacoes         ]
        [Codigo CCusto       ]=[NotaEcp->Codigo CCusto       ]
        [Codigo Plano_Conta  ]=[NotaEcp->Codigo Plano_Conta  ]
        If (CHAVEAP=1) Or (IsBlank([Sistema Gerador])) Or
           (CHAVEAP=0 And ImpOC)
           Then Controle_Dia()
                [Sistema Gerador   ]="NE"
                [Lancamento Gerador]=[NotaEcp->Numero do Lancamento   ]
                [Sequencia Gerador ]=[NotaEcp->Sequencia do Lancamento]
        EndIf
        [Documento Referente ]=RTrim([NotaEC->Tipo do Documento]+"/"+[NotaEC->Numero do Documento ])
        UnLockRecord

        Moveto "NotaEcp"
        If IsBlank([NotaEcp->Numero Lancamento Titulos])
           Then [Numero Lancamento Titulos]=SEQ
        EndIf
        UnLockRecord
EndIf

If (CHAVEAP=8 Or CHAVEAP=0) and Not Oktit
   Then Moveto "NotaEcp"
        CopyFromArray RegItem
        UnLockRecord
EndIf

Moveto "NotaEC"
KeyPress "F7"

Moveto "NotaEcp"

EndProc  ; (Titulos)

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()
private ANO, MES

If [NotaEC->Tipo de Operacao]="A" Or
   [NotaEC->Tipo de Operacao]="I" Or
   IsBlank([NotaEI->Codigo do Item]) Or
   [NotaEI->Tipo do Item]="C" Or
   [NotaEI->Tipo do Item]="D" Or
   [NotaEI->Tipo do Item]="G" Or
   [NotaEI->Tipo do Item]="H" Or
   [NotaEI->Tipo do Item]="I" Or
   [NotaEI->Tipo do Item]="F" 
   Then Return
EndIf

If Not IsBlank([NotaEC->Data de Entrada])
  Then MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
       ANO=ALINHM(StrVal( Year([NotaEC->Data de Entrada])),4)
  Else MES="00"
       ANO="0000"
EndIf

While True
 Moveto "\\Sistemas\\Estoque\\SdEstq"
 Moveto [Codigo da Empresa]
 Locate [NotaEC->Codigo da Empresa], [NotaEI->Codigo do Item], ANO, MES
 If Not RetVal
    Then Cria_Ficha([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item],ANO,MES,False)
    Else If IsLockRecord()
            Then Loop
         EndIf
         Switch
           Case CHAVEI=8:
                [Saldo Atual      ]=NDecimal([Saldo Atual]-[NotaeI->Quantidade Convertida],3)
                [Custo Total Atual]=NDecimal([Custo Total Atual]-NDecimal(([NotaeI->Custo Medio Unitario]*[NotaeI->Quantidade]),2),2)
           Case CHAVEI=1 Or CHAVEI=0:
                [Saldo Atual      ]=NDecimal(([Saldo Atual]-(QTDCONV))+[NotaeI->Quantidade Convertida],3)
                [Custo Total Atual]=NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal(([NotaeI->Custo Medio Unitario]*[NotaeI->Quantidade]),2),2)

                If [NotaEC->Data de Entrada]>=[Data do Preco de Custo] And [NotaEC->Tipo de Operacao]="C"
                   Then [Data do Preco de Custo]=[NotaEC->Data de Entrada]
                        [Preco de Custo        ]=NDecimal(([NotaEI->Custo Medio Unitario]*[NotaeI->Quantidade])/[NotaeI->Quantidade Convertida],5)
                EndIf
         EndSwitch
         If ([Custo Total Atual]/[Saldo Atual])>0
            Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
         EndIf
         UnLockRecord
         QuitLoop
 EndIf
EndWhile

Moveto "NotaEI"
EndProc  ; (Estoque)

;*******************************************************************************
;* Rotina p/ Checagem de Estoque                                               *
;*******************************************************************************
Proc Checa_Estoque()
private ANo, MES

If [NotaEC->Tipo de Operacao]="A" Or
   [NotaEC->Tipo de Operacao]="I" Or
   IsBlank([NotaEI->Codigo do Item]) Or
   [NotaEI->Tipo do Item]="C" Or
   [NotaEI->Tipo do Item]="D" Or
   [NotaEI->Tipo do Item]="G" Or
   [NotaEI->Tipo do Item]="H" Or
   [NotaEI->Tipo do Item]="I" Or
   [NotaEI->Tipo do Item]="F"
   Then Return True
EndIf

If Not IsBlank([NotaEC->Data de Entrada])
  Then MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
       ANO=ALINHM(StrVal( Year([NotaEC->Data de Entrada])),4)
  Else MES="00"
       ANO="0000"
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
Locate [NotaEC->Codigo da Empresa], [NotaEI->Codigo do Item], ANO, MES
If RetVal
   Then Moveto "NotaEI"
        Return True
   Else If Cria_Ficha([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item   ],ANO,MES,False)
           Then Moveto "NotaEI"
                Return True
           Else Moveto "NotaEI"
                Return False
        EndIf
EndIf
EndProc   ; (Checa_Estoque)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(EMPRESA, ITEM, ANO, MES, CONFIRMA)
Private EMPRESA, ITEM, ANO, MES, CONFIRMA

ANO=ALINHM(StrVal(ANO),4)
MES=ALINHM(StrVal(MES),2)

If CONFIRMA
   Then MSG="N„o foi encontrada a ficha de estoque referente a "+MES+"/"+ANO+" !// //"
        MSG=MSG+Format("W08,AL","Empresa")+"| "+Format("W11,AL","Item")+"//"
        MSG=MSG+Format("W08,AL",EMPRESA  )+"| "+Format("W11,AL",ITEM  )+"//"
        MSG=MSG+"Observacoes:                                                            //"
        MSG=MSG+"1. Talvez n„o foi executado a transferˆncia de saldos do mˆs anterior;  //"
        MSG=MSG+"2. Talvez n„o houve entrada que criasse sua ficha de estoque;           //"
        MSG=MSG+"3. Se for criada agora, o saldo inicial deste item ser  igual a 0(zero).//"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cri -la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate EMPRESA, ITEM, ANO, MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=EMPRESA
          [Codigo do Item      ]=ITEM
          [Ano Referencia      ]=ANO
          [Mes Referencia      ]=MES
          If IsLockRecord()
             Then Del
                  Sleep 1000
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

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

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Moveto "NotaEC"
CopyToArray REG_NOTAEC   ;Utilizando no COMPLEMENTO_NOTA()

Moveto "NotaEI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "NotaER"
While RecordStatus("New")=False
  CHAVER=8
  Del
EndWhile
Moveto "NotaEIA"
While RecordStatus("New")=False
  CHAVEIA=8
  Del
EndWhile
Exclusao_Cabeca=True
Moveto "NotaEcp"
While RecordStatus("New")=False
  CHAVEAP=8
  CopyToArray RegItem
  TITULOS()
EndWhile
Moveto "NotaECV"
While RecordStatus("New")=False
  CHAVEAV=8
  CONTA()
EndWhile

If CHAVEC=0
   Then COMPLEMENTO_NOTA("DEVOLUCAO")
EndIf   
Release Vars REG_NOTAEC

Moveto "NotaEC"
If GRAVA_LOG Then Grava_LogEx("Nota de Entrada") EndIf
Del
EndProc  ; (Exclusao_C)

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

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

ESTOQUE()
ATUA_COMPRA()
Moveto "NotaEI"
If GRAVA_LOG Then Grava_LogEx("Item da Nota de Entrada") EndIf
Del

EndProc  ; (Exclusao_I)

;*******************************************************************************
;* Atualiza Cotacao de Preco                                                   *
;*******************************************************************************
Proc COTACAO()
Private Atualiza_Cotacao, itant

If [NotaEC->Tipo de Operacao]<>"C" And
   [NotaEC->Tipo de Operacao]<>"A"
   Then Return
EndIf

Switch
  Case SYS_CODIGO_CLIENTE="0052":
    If [NotaEC->Codigo da Empresa]="1000"
       Then Return
    EndIf
EndSwitch

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"

itant="???"
Moveto "NotaEI"
Moveto [Numero do Lancamento]
Locate LANCTO
While [Numero do Lancamento]=[NotaEC->Numero do Lancamento]
  If Not IsBlank([Codigo do Item]) And [Tipo do Item]<>"C"
     Then
          Atualiza_Cotacao=False

          Moveto "Cotacao"
          Moveto [Codigo do Item]
          Locate [NotaEI->Codigo do Item],[NotaEC->Codigo]
          If Not RetVal
             Then End Down
                  [Codigo do Item]=[NotaEI->Codigo do Item]
                  [Codigo        ]=[NotaEC->Codigo        ]
                  Atualiza_Cotacao=True
             Else Switch
                    Case [Numero do Lancamento]=[NotaEI->Numero do Lancamento]:
                         Atualiza_Cotacao=True
                    Case [NotaEC->Data de Entrada]>[Data de Compra]:
                         Atualiza_Cotacao=True
                    Case [NotaEC->Data de Entrada    ] =[Data de Compra] And
                         [NotaEC->Numero do Documento]>=[Numero do Documento]:
                         Atualiza_Cotacao=True
                  EndSwitch
          Endif

          If Atualiza_Cotacao
             Then [Razao Social            ]=[NotaEC->Razao Social            ]
                  [Data de Compra          ]=[NotaEC->Data de Entrada         ]
                  [Numero do Documento     ]=[NotaEC->Numero do Documento     ] 
                  [Tipo do Documento       ]=[NotaEC->Tipo do Documento       ]
                  [Data de Emissao         ]=[NotaEC->Data de Emissao         ]
                  [Quantidade              ]=[NotaEI->Quantidade              ] 
                  [Unidade Entrada         ]=[NotaEI->Unidade Entrada         ]
                  If [NotaEI->Valor Desconto Total]>0
                     Then [Valor Unitario  ]=([NotaEI->Preco Total]/[NotaEI->Quantidade])-([NotaEI->Valor Desconto Total]/[NotaEI->Quantidade])
                     Else [Valor Unitario  ]=[NotaEI->Preco Total]/[NotaEI->Quantidade]
                  EndIf
                  [Custo Medio Unitario    ]=[NotaEI->Custo Medio Unitario    ]
                  [Unidade Interna         ]=[NotaEI->Unidade Interna         ]
                  [Numero do Lancamento    ]=[NotaEI->Numero do Lancamento    ]
                  [MVA                     ]=[NotaEI->MVA                     ]
                  [ICMS UF_ORIGEM          ]=[NotaEI->ICMS UF_ORIGEM          ]
                  [Tributacao de IPI       ]=[NotaEI->Tributacao de IPI       ]
                  [Aliquota Reduzida BCIPI ]=[NotaEI->Aliquota Reduzida BCIPI ]
                  [Aliquota de IPI         ]=[NotaEI->Aliquota de IPI         ]
                  [Tributacao de ICMS      ]=[NotaEI->Tributacao de ICMS      ]
                  [Aliquota Reduzida BCICMS]=[NotaEI->Aliquota Reduzida BCICMS]
                  [Aliquota de ICMS        ]=[NotaEI->Aliquota de ICMS        ]
                  [Fator de Conversao      ]=[NotaEI->Fator de Conversao      ]
                  [Tipo Tributacao         ]=[NotaEI->Tipo Tributacao         ]
                  [IPI_CST                 ]=[NotaEI->IPI_CST                 ]
                  [CFO                     ]=[NotaEI->CFO                     ]
                  
                  UnLockRecord

                  Moveto "NotaEI"

                  If Not IsBlank([Codigo_Fornecedor])
                     Then Moveto "FornProd"
                          Moveto [Codigo]
                          Locate [NotaEC->Codigo],[NotaEI->Codigo_Fornecedor]
                          If Not RetVal
                             Then End Down
                                  [Codigo           ]=[NotaEC->Codigo           ]
                                  [Codigo_Fornecedor]=[NotaEI->Codigo_Fornecedor]
                          Endif
                          [Codigo do Item            ]=[NotaEI->Codigo do Item            ]
                          [Descricao do Item         ]=[NotaEI->Descricao do Item         ]
                          [Tributacao de IPI         ]=[NotaEI->Tributacao de IPI         ]
                          [Aliquota Reduzida BCIPI   ]=[NotaEI->Aliquota Reduzida BCIPI   ]
                          [Aliquota de IPI           ]=[NotaEI->Aliquota de IPI           ]
                          [Tributacao de ICMS        ]=[NotaEI->Tributacao de ICMS        ]
                          [Aliquota Reduzida BCICMS  ]=[NotaEI->Aliquota Reduzida BCICMS  ]
                          [Aliquota de ICMS          ]=[NotaEI->Aliquota de ICMS          ]
                          [CSOSN                     ]=[NotaEi->CSOSN                     ]
                          [Fator de Conversao        ]=[NotaEI->Fator de Conversao        ]
                          [Unidade Entrada           ]=[NotaEI->Unidade Entrada           ]
                          [Numero do Lancamento      ]=[NotaEI->Numero do Lancamento      ]
                          [MVA                       ]=[NotaEI->MVA                       ]
                          [ICMS UF_ORIGEM            ]=[NotaEI->ICMS UF_ORIGEM            ]
                          [Tipo Tributacao           ]=[NotaEI->Tipo Tributacao           ]
                          [IPI_CST                   ]=[NotaEI->IPI_CST                   ]
                          [CFO                       ]=[NotaEI->CFO                       ]
                          [PIS_CST                   ]=[NotaEI->PIS_CST                   ]
                          [PIS_Aliquota              ]=[NotaEI->PIS_Aliquota              ]
                          [COFINS_CST                ]=[NotaEI->COFINS_CST                ]
                          [COFINS_Aliquota           ]=[NotaEI->COFINS_Aliquota           ]
                          UnLockRecord
                  EndIf
          EndIf
  EndIf
  
  Moveto "NotaEI"
  If [NotaEI->Codigo do Item]<>itant And [Tipo do Item]<>"D" And [Tipo do Item]<>"F"
     Then itant=[NotaEI->Codigo do Item]
          Moveto "Itens"
          Moveto [Codigo do Item]
          Locate [NotaEI->Codigo do Item]
          If RetVal
             Then If (IsBlank([NCM]) or [NCM]="00000000" Or Len([NCM])<8) And [NCM]<>[NotaEI->NCM]
                     Then If Not IsBlank([NotaEI->NCM]) And [NotaEI->NCM]<>"00000000" Or Len([NotaEI->NCM])=8 Then                             
                           MSG=    Completa("Item ["+StrVal([NotaEI->Sequencia do Lancamento])+"] = "+[Codigo do Item]+" "+[Descricao do Item],71," ")+"// //"
                           MSG=MSG+Completa("            desta nota consta NCM="+[NotaEI->NCM],71," ")+"//"
                           MSG=MSG+Completa("e no cadastro do mesmo consta NCM="+[NCM        ],71," ")+"// //"                                                                                        
                           MSG=MSG+"Verificar o cadastro do produto com o supervisor!"
                           Mensagem(MSG)
                        Endif   
                  EndIf
          EndIf           
  EndIf           

  Moveto "NotaEI"
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"
Moveto [Numero do Lancamento]

EndProc ;COTACAO()

;*******************************************************************************
;* Atualiza Cotacao de Preco                                                   *
;*******************************************************************************
Proc COMPLEMENTO_NOTA(PARAM)
Private PARAM

return
;-- configurara cliente !! ----

;If SYS_CODIGO_CLIENTE<>"0294" ;Somente Divina Panela 
;   Then Return
;EndIf

;---- Ignora Requisi‡Æo de Conhecimento de Transporte --------------------------
If Upper(Substr([NotaEc->Tipo do Documento],1,2))="CT"
   Then Return
EndIf   

;---- A partir da utiliza‡Æo da tranferencia e data informada no DATAM ---------
If PARAM_UTILIZA_TRANSFERENCIA = "S"
   Then If IsBlank(PARAM_DATA_TRANSFERENCIA)                                                                                
           Then Mensagem("N„o foi informado nos parametros a data que ocorrer //a tranferˆncia do estoque para o almoxarifado!")
                Return
        EndIf       
        
        If [NotaEc->Data de Entrada] < PARAM_DATA_TRANSFERENCIA
           Then Return                                             
        EndIf
EndIf        

If [NotaEC->Tipo de Operacao]="A" Or                                                 
   [NotaEC->Tipo de Operacao]="I" Or 
   Upper(SubStr(Directory(),1,2)) <> "X:"                                                
   Then Return
EndIf

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"

TIPO_REQUISICAO = PARAM
Play "FT_RQNE"

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"
Moveto [Numero do Lancamento]

EndProc ;COMPLEMENTO_NOTA()

;*******************************************************************************
;* Rotina para zerar variaveis usadas no Form                                  *
;*******************************************************************************
Proc Limpa_VarsForm()

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

DIF_VRMERC =BlankNum() 
DIF_VRSERV =BlankNum() 
DIF_BCICMS =BlankNum() 
DIF_ICMS   =BlankNum() 
DIF_BCST   =BlankNum() 
DIF_ST     =BlankNum() 
DIF_IPI    =BlankNum() 
DIF_BCISSQN=BlankNum() 
DIF_ISSQN  =BlankNum() 
DIF_DNTRIB =BlankNum() 
DIF_FCPST  =BlankNum() 
DIF_NOTA   =BlankNum() 

EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()
Private Result

Result=GetP_Entra([NotaEC->Codigo da Empresa])

return Result
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Carrega Parametros P_Entra                                                  *
;*******************************************************************************
Proc GetP_Entra(EMPRESA)
private EMPRESA, MSG

If IsEmpty("\\Sistemas\\Estoque\\P_Entra")
   Then Mensagem("N„o est„o configurados os parametros para esta empresa [Entrada/NE] !")
        Return False
EndIf

GetRecord "\\Sistemas\\Estoque\\P_Entra" EMPRESA to REGP_ENTRA
If Not RetVal                                                   
   Then MSG =       "// Empresa ["+EMPRESA+"] sem configura‡Æo de parƒmetros !// //"
        MSG = MSG + " - Utilit rios / Parƒmetros //"
        MSG = MSG + " - P_Entra // //"
        MSG = MSG + "Verificar com Suporte da Vise !"
        Mensagem(MSG)

        Release Vars EMPRESA, REGP_BALCAO, MSG
        Return False
endif



PARAM_CONTA_CAIXA           = REGP_ENTRA["Codigo_Conta_Caixa"       ]
GetRecord "\\Sistemas\\Ctacor\\Conta" PARAM_CONTA_CAIXA to REGCONTA   
If RetVal
   then PARAM_DESC_CONTA_CAIXA=REGCONTA["Descricao da Conta"]
   else PARAM_DESC_CONTA_CAIXA=""
endif                                                      

PARAM_TABELA_PRECO          = REGP_ENTRA["Tabela_Preco"             ]
PARAM_ATTAB_PRECO           = REGP_ENTRA["Atualiza_Tabela_Preco"    ]
PARAM_CCE_SUBICMS           = REGP_ENTRA["SubTrai_ICMS_CustoEntrada"]
PARAM_BCPV_SUBICMS          = REGP_ENTRA["SubTrai_ICMS_BC_PrVenda"  ]
PARAM_RELATORIO             = REGP_ENTRA["Script_Impressao"         ]
PARAM_ATUA_CXBC             = REGP_ENTRA["Atualiza_Caixa_Banco"     ]
PARAM_ATUA_CAPG             = REGP_ENTRA["Atualiza_Contas_Pagar"    ]
PARAM_CALC_COFLUCR          = REGP_ENTRA["Calcular_COFINS_Lucrativ" ]
PARAM_TAXA_COFINS           = REGP_ENTRA["Taxa_COFINS"              ]
PARAM_TAXA_LUCRATIV         = REGP_ENTRA["Taxa_Lucratividade"       ]
PARAM_USA_COFINS_DBCR       = REGP_ENTRA["Utiliza_COFINS_DBCR"      ]


PARAM_PECAS_ITEM            = "N"                                ;[Controla_Pecas_Item]

PARAM_CCE_SUBCOFINS         = REGP_ENTRA["SubTrai_COFINS_CustoEntra"]
PARAM_CCE_SUBPIS            = REGP_ENTRA["SubTrai_PIS_CustoEntrada" ]
PARAM_TAXA_PIS              = REGP_ENTRA["Taxa_PIS"                 ]
PARAM_ACRES_DIF_ALIQ_CUST   = REGP_ENTRA["Acresce_DifAliq_Custo"    ]
PARAM_UTILIZA_TRANSFERENCIA = REGP_ENTRA["Utiliza_Transferencia"    ]
PARAM_DATA_TRANSFERENCIA    = REGP_ENTRA["Data_Transferencia"       ]
PARAM_DIGITA_COR_TECIDO     = REGP_ENTRA["Digita Cor_Tecido"        ]

If PARAM_DIGITA_COR_TECIDO="S"
   Then LOCALIZA_CODIGO="LOC_CODREF"
EndIf   




If ([Notaec->Codigo do Documento]="NE") And (SYS_CODIGO_CLIENTE="0117") And
   (SubStr(Directory(),1,1)="X")
   Then PARAM_CCE_SUBICMS    = "N"
        PARAM_BCPV_SUBICMS   = "N"
        PARAM_CALC_COFLUCR   = "N"
        PARAM_USA_COFINS_DBCR= "N"




EndIf

Release Vars EMPRESA, MSG
Return True

EndProc ; (GetP_Entra)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Monta_Tabelas()
MSGCAMPO     = ""

View NOWINDOW "NotaEI"
View NOWINDOW "NotaECV"
View NOWINDOW "NotaEcp"
View NOWINDOW "NotaER"
View NOWINDOW "NotaEIA"              

View NOWINDOW "Cotacao"
View NOWINDOW "FornProd"
View NOWINDOW "P_Entra" 

If SYS_CODIGO_CLIENTE = "0000"                            ;Somente Divina Panela
   Then View NOWINDOW "Requisit"
        View NOWINDOW "RqCabeca"
        View NOWINDOW "Rqitem"
EndIf

View NOWINDOW "Itens" ImageRights ReadOnlY
View NOWINDOW "SdEstq"
View NOWINDOW "EstqPrm"

View NOWINDOW "\\Sistemas\\Cadastro\\Destinat"
View NOWINDOW "\\Sistemas\\CtaCor\\MovCont"
View NOWINDOW "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW "\\Sistemas\\CtaPag\\Titulos"
View NOWINDOW "\\Sistemas\\Vendas\\TbPrIte" 

View NOWINDOW "NotaEC"

Moveto "NotaEC"
CoEditKey 

;************** Rotina para tratar o erro de tabela locada *********************
If ErrorCode()=4
   Then Return False
EndIf

PickForm "1"
Moveto "\\Sistemas\\Compras\\OCC" SetHighLight Current Record 119 Field 119
Moveto "\\Sistemas\\Compras\\OCI" SetHighLight Current Record 119 Field 119
Moveto "SdEstq"                   SetHighLight Current Record 51  Field 51
Moveto "NotaECV"                  SetHighLight Current Record 119 Field 119

Moveto "NotaEC"
PickForm "F"
Return True
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoAP()
Digita_APrazo()
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
Moveto "NotaEI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()

If CHAVEC=0
   Then Verifica_Natureza_Frete()
        Limpa_Campos()
   Else VSDGNATFRETE=""
EndIf
CopyToArray REG_NOTAEC

NEXPEDICAO=""

While FACA_DIGITAC
  MSGCAMPO     = ""
  DIGITAC()
  MSGCAMPO     = ""
  
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 
     Then Controle_Dia()
          [Modo_Sistema]="02" 
  EndIf

  If FACA_CHAVEI
     Then
          MSGCAMPO     = ""
          Moveto "NotaEC"
          Limpa_Campos()
          
          Moveto "NotaEI"
          If RecordStatus("New")=False
             Then VRALTERADO=False
                  MSG =""
                  MSG2=""
                  MSG3=""
                  If [NotaEC->CFO                      ]<>VANT_CFOP       Then VRALTERADO=True  MSG=MSG+"CFOP, "                               EndIf
                  If [NotaEC->VALOR MERCADORIA         ]<>VANT_MERCDIG    Then VRALTERADO=True  MSG=MSG+"Vr Produtos, "                     EndIf
                  If [NotaEC->VALOR SERVICO            ]<>VANT_SERVDIG    Then VRALTERADO=True  MSG=MSG+"Vr Servi‡o, "                         EndIf
                  If [NotaEC->VALOR DESCONTO           ]<>VANT_DESCTO     Then VRALTERADO=True  MSG=MSG+"Vr Desconto, "                        EndIf
                  If [NotaEC->VALOR DESPESAS ACESSORIAS]<>VANT_DESPACES   Then VRALTERADO=True  MSG=MSG+"Vr Despesas acess¢rias, "             EndIf
                  If [NotaEC->VALOR ACRESCIMOS_DESCTOS ]<>VANT_ACRESDESC  Then VRALTERADO=True  MSG=MSG+"Vr Acr‚scimo/Desconto, "              EndIf
                  If [NotaEC->VALOR DO FRETE           ]<>VANT_FRETE      Then VRALTERADO=True  MSG=MSG+"Vr ', "                           EndIf
                  If [NotaEC->VALOR DO SEGURO          ]<>VANT_SEGURO     Then VRALTERADO=True  MSG=MSG+"Vr Seguro, "                          EndIf
                  If [NotaEC->RECOLHIMENTO SUBSTITUICAO]<>VANT_RECSUBST   Then VRALTERADO=True  MSG=MSG+"Tipo recolhimento da substitui‡„o, "  EndIf
                  If [NotaEC->VALOR SUBSTITUICAO ICMS  ]<>VANT_VSUBST     Then VRALTERADO=True  MSG=MSG+"Vr substitui‡„o, "                    EndIf
                  If [NotaEC->VR SUBSTITUICAO DESTINAT ]<>VANT_VSUBSTDEST Then VRALTERADO=True  MSG=MSG+"Vr substitui‡„o Destinat rio, "       EndIf

                  If VRALTERADO
                     Then posini=1
                          While True
                            posatu=SearchFrom(", ",MSG,posini)
                            If posatu=0
                               Then MSG2=MSG2+MSG3+"."
                                    QuitLoop
                            EndIf
                            If Len(MSG3+SubStr(MSG,posini,posatu-posini))>75
                               Then MSG2=MSG2+MSG3+",//"
                                    MSG3=""
                            EndIf
                            If Not IsBlank(MSG3)
                               Then MSG3=MSG3+", "+SubStr(MSG,posini,posatu-posini)
                               Else MSG3=RTrim(SubStr(MSG,posini,posatu-posini))
                            EndIf
                            posini=posatu+2
                          EndWhile

                          MSG="Ocorreu altera‡„o no(s) campo(s) abaixo: // //"
                          MSG=MSG+MSG2+"// //"
                          MSG=MSG+"Alterar cada item desta nota para corrigir com os novos valores !"
                          Mensagem(MSG)
                  EndIf
          EndIf
  EndIf

  While FACA_CHAVEI
    While True
      MSGCAMPO     = ""
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      Controla_EdicaoI()
    EndWhile
    While FACA_DIGITAF
      MSGCAMPO     = ""
      DIGITAF()
      If CHAVEF=0 
         Then COTACAO()
              COMPLEMENTO_NOTA("TRANSFERENCIA")
              FACA_DIGITAC=False
              FACA_CHAVEI =False
      EndIf
      QuitLoop
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* Rotina Principal Notas de Entrada                                           *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
SYS_VALOR()
If Not IsAssigNed(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""    EndIf

;---- M‚todo p/ Localizar o Item ----------------------------------------------- 
If IsFile(PrivDir()+"NOTAEC.ini")
   Then LeiaINI(PrivDir()+"NOTAEC.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf
ModoLocalizarItem("","","")

Limpa_VarsForm()

PARAM_FTCUSTO     = "NOTAEC"
PARAM_EXIBECUSTO  = "S"
MSGCAMPO          = ""

If Not Monta_Tabelas()
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

If NRecords("NotaEC")>1
   Then Home
        If IsBlank([Numero do Lancamento])
           Then Echo Normal
                Echo Off
                MSG="Existe registro com Erro !// //"
                MSG=MSG+"Verificar numero lan‡amento em branco !// //"
                MSG=MSG+"Excluir o lan‡amento e verificar a origem do mesmo !"
                Mensagem(MSG)
        EndIf
EndIf

If Verifica_NRegistros("Notaei")
   Then COR_MENSAGEM="1"
        Mensagem(MSG_TABELA)
        Release Vars COR_MENSAGEM,MSG_TABELA
   Else Release Vars MSG_TABELA     
EndIf  

OPCAO_FORM="F"
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
