;** Nota ***********************************************************************
;*  Digitacao de Nota Fiscal                                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 08/09/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/08/2006 por Antonio Marcelo Alves
;Motivo Alteracao: Adicao da rotina Checa_Supervisor quando Excluir
;Motivo Alteracao: Ajustes MVA/CFOP  
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 20/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Comissao Item Vico
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 28/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cancelar NF quando Troca
;Ultima Alteracao: 26/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cliente 0209 Substituicao
;Ultima Alteracao: 13/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Duplic
;Ultima Alteracao: 22/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CTR
;Ultima Alteracao: 01/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Locate Referencia
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques em Cobranca
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Transferencia Custo Medio
;Ultima Alteracao: 19/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Subst. Credito ICMS
;Ultima Alteracao: 22/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCICMS_CREDSN, VRIPI_SUBST
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_Vendedor() ModaMil
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_Vendedor() ModaMil
;Ultima Alteracao: 06/05/2009 por
;Motivo Alteracao: Ajustes Cheques()
;Ultima Alteracao: 09/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UF<>UFEmpresa/CFOP
;Ultima Alteracao: 10/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Parametros
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete por conta 0_Sem Frete                                             
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Campo MVA s/Ajustado                                             
;Ultima Alteracao: 09/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao Sim/NÇo
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualizacao ESTQPRM            
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Pecas Brasil Textil            
;Ultima Alteracao: 02/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CalcICMS Adicicionais            
;Ultima Alteracao: 16/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Item/Pega_CFOP
;Ultima Alteracao: 22/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes BCSubstituicao/Valor DIGITADO/CALCULADO
;Ultima Alteracao: 23/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao e MVA Ajustado
;Ultima Alteracao: 23/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao e MVA Ajustado
;Ultima Alteracao: 06/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_vendedor A VISTA/A PRAZO/TODAS              
;Ultima Alteracao: 23/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Codigo de Barras                                          
;Ultima Alteracao: 15/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Cidades
;Ultima Alteracao: 23/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF-e                                       
;Ultima Alteracao: 13/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Exclusao_C(), Cancela_NF()                   
;Ultima Alteracao: 26/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Extorno Sistema Destino Etiqueta Brasil Textil            
;Ultima Alteracao: 04/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CFO Frete
;Ultima Alteracao: 13/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina1() UseVars DESTIN_ATUALIZA_PEDIDOS
;Ultima Alteracao: 18/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie NFe  
;Ultima Alteracao: 08/06/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Cheques Trocados        
;Ultima Alteracao: 02/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 05/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 07/07/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes na Variavel DP_GERA_DUPLICATA 
;Ultima Alteracao: 16/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Loop Exluir_Rateio_Comissao() 
;Ultima Alteracao: 16/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Loop Exluir_Rateio_Comissao() 
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS     
;Ultima Alteracao: 30/08/2010 por Karina Andrade
;Motivo Alteracao: Ajustes Novo Layout          
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN  
;Ultima Alteracao: 01/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes vari vel DP_GERA_DUPLICATA (Desfazer_NFE)                       
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 26/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Verifica_Caixa()
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajuste Rotina C¢digo de Barra
;Ultima Alteracao: 09/12/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Consulta de Itens
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 30/12/2010 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: 14/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Rateio_BC_Itens() Ajustes Novos Campos
;Ultima Alteracao: 28/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                           
;Ultima Alteracao: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                          
;Ultima Alteracao: 31/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rateio PIS/COFINS                              
;Ultima Alteracao: 13/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rateio PIS/COFINS                                           
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 03/05/2011 por Karina Andrade
;Motivo Alteracao: Retirado rotina Desfazer_NFe, add no Fatura.
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras   
;Ultima Alteracao: 24/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Altera‡Æo/Cancelamento com supervisor  
;Ultima Alteracao: 15/06/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout "Digita‡Æo dos Itens"                      
;Ultima Alteracao: 16/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TECLAS nos itens
;Ultima Alteracao: 07/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao/Ajustes dados para o SPED     
;Ultima Alteracao: 08/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ESC Exportado Caixa/Cupom Faturado
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CTRC
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IPI Outros                         
;Ultima Alteracao: 23/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowPopup                          
;Ultima Alteracao: 27/07/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina "informacoes adicionais" na digita‡Æo dos itens
;Ultima Alteracao: 28/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ST Devolcucao 60 rateio
;Ultima Alteracao: 03/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes bloqueio digita‡Æo CTR                        
;Ultima Alteracao: 03/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes bloqueio digita‡Æo CTR
;Ultima Alteracao: 03/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Valor II e ajustes na rotina Valores de Importa‡Æo
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFE pra todas as series
;Ultima Alteracao: 12/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio valores nos itens retorno industrializa‡Æo YVN                        
;Ultima Alteracao: 15/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina para formas de localizar o item e Ajustes "0296"
;Ultima Alteracao: 25/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Cancelamento
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CUSTO=0->CUSTO=[Ultimo Custo Total]
;Ultima Alteracao: 14/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Locate apos SW_CONS
;Ultima Alteracao: 25/10/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Ordem de Compra Publica
;Ultima Alteracao: 08/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Proc Transferencia()
;Ultima Alteracao: 09/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Parametro de bloqueio para Altera‡Æo e ReemissÆo
;Ultima Alteracao: 01/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Agrupamento PIS/COFINS
;Ultima Alteracao: 06/01/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCST1 idem OF
;Ultima Alteracao: 10/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 13/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes digita‡Æo da base de calculo lan‡amento manual
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo e Rateio PIS/COFINS               
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo venctos com instru‡Æo de desconto ModaMil
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 20/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sem desconto BCICMS_ST                             
;Ultima Alteracao: 20/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo PIS/COFINS achar BC                        
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo BCST sem Desconto                          
;Ultima Alteracao: 10/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio PIS/COFINS        
;Ultima Alteracao: 16/05/2012 por Bruno Carvalho
;Motivo Alteracao: Add USER VARS "TPEMPR" na Calc_Of()                          
;Ultima Alteracao: 30/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CREDITO ICMS SIMPLES NACIONAL = 101 E 201          
;Ultima Alteracao: 11/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nova logica para calculo da nota/nota livre        
;Ultima Alteracao: 15/06/2012 por Bruno Carvalho 
;Motivo Alteracao: Ajsutes Posi‡Æo da Rotina Rateio_BC_Itens()
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message ShowDialog    
;Ultima Alteracao: 11/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculando imposto de importa‡Æo                
;Ultima Alteracao: 12/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Imposto de Importa‡Æo          
;Ultima Alteracao: 16/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes vari vel OPCAOC nÆo estava sendo setada quando iniciava nota 
;Ultima Alteracao: 16/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Proc Valor_Importacao()    
;Ultima Alteracao: 24/07/2012 por Bruno Carvalho
;Motivo Alteracao: Use Vars ATIVEMPR na proc Transferencia()
;Ultima Alteracao: 27/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes p/ Confec‡äes CSON=400 opera‡Æo diferente de venda
;Ultima Alteracao: 10/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo NF - Valor II                              
;Ultima Alteracao: 13/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valor_importacao() - Valor Nota Fiscal Livre
;Ultima Alteracao: 17/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servico d lmeida                         
;Ultima Alteracao: 22/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes tratamento item de cupom cancelado      
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()                         
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;Ultima Alteracao: 24/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 20/12/2012 por Bruno Carvalho
;Motivo Alteracao: Add "VERIFICA_CONSULTA"
;Ultima Alteracao: 27/12/2012 por Kamila Gomes
;Motivo Alteracao: Ajustes label digitacao de cheques
;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/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calc_of ignorar item calcelado NOTAI             
;Ultima Alteracao: 18/02/2013 por Bruno Carvalho
;Motivo Alteracao: Add tabelas que fazem parte dos ajustes realizados no "Sw_Cons"
;Ultima Alteracao: 19/02/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes SetaCorRegistro(), Ajustes DigitaV()
;Ultima Alteracao: 25/02/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes PARAM_TRANSFERENICA="S" p/ Balcao    
;Ultima Alteracao: 02/03/2013 por Kamila Gomes                           
;Motivo Alteracao: Ajustes DigitaC()      
;Ultima Alteracao: 13/13/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Aliquota de reducao base de calculo substituicao tributaria                                        
;Ultima Alteracao: 15/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes dados Showdialog Frete                                         
;Ultima Alteracao: 26/04/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes na rotina de CANC. altera‡Æo de "ConfGeral" -> "ConfGeral_N"   
;Ultima Alteracao: 02/05/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes gravar notaec chave_acesso_nfe transferencia                   
;Ultima Alteracao: 27/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Calc_Vencto()
;Ultima Alteracao: 28/05/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CST PIS/COFINS/IPI nota de transferencia                       
;Ultima Alteracao: 03/07/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Atua_Dados() onde o while estava apenas verificando [Numero do Documento]
;Ultima Alteracao: 05/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo deduzir descto ICMS_ST_BC                            
;Ultima Alteracao: 09/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons
;Ultima Alteracao: 27/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas rotinas "Codigo do Documeto" e "Codigo da Empresa"                     
;Ultima Alteracao: 11/10/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao private NOVOSALDO, Checa_Estoque()
;Ultima Alteracao: 29/11/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Cancelar e inclusÆo Denegar documento
;Ultima Alteracao: 31/12/2013 por Andrey Fillipe
;Motivo Alteracao: Inclusao dos campos Tipo de NF e Descricao Tipo NF 
;Ultima Alteracao: 14/01/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo ICMS_ST_BC  
;Ultima Alteracao: 16/01/2014 por Kamila Gomes
;Motivo Alteracao: Data do Cancelamento Extemporƒneo                          
;Ultima Alteracao: 12/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Simples Nacional c/ calculo de ICMS, ST com redu‡Æo BC 
;Ultima Alteracao: 07/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_MVA() apos informar CST ICMS                      
;Ultima Alteracao: 10/04/2014 por Bruno Carvalho
;Motivo Alteracao: Add Verifica_NRegistros() onde ir  informar limite de registros
;Ultima Alteracao: 26/05/2014 por Kamila Gomes
;Motivo Alteracao: PARAM_PEDIDO recebe campo [Utiliza_Pedido] da P_Balcao
;Ultima Alteracao: 24/07/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Soma dos items que tem rateio do total das despesas                                     
;Ultima Alteracao: 04/08/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST ?60 para CSOSN 500 
;Ultima Alteracao: 19/08/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes na Exclusao NOTAIC
;Ultima Alteracao: 04/09/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_BLOQALT #0227#
;Ultima Alteracao: 05/12/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP "5903" rateio nos itens    
;Ultima Alteracao: 10/02/2015 por Andrey Fillipe 
;Motivo Alteracao: Ajustes se o mes da data de saida for diferente do mes da data de emissao, vai baixar o estoque na data de emissao      
;Ultima Alteracao: 04/03/2015 por Andrey Fillipe 
;Motivo Alteracao: Ajustes se a Forma de Pagamento]="DE" e SYS_CODIGO_CLIENTE="0227" gerar caixa e banco 
;Ultima Alteracao: 07/04/2015 por Andrey Fillipe 
;Motivo Alteracao: Add Play "FT_DNota", Descancelamento de Nota Fiscal
;Ultima Alteracao: 30/07/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado no evento "I_Preco_Unitario", bloqueio de desconto unitario quando "NFE"
;Ultima Alteracao: 18/09/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Forma Pagamento Calc_Venctos() 
;Ultima Alteracao: 04/11/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes para nao pegar aliquota do estado caso ICMS esteja em branco
;Ultima Alteracao: 09/11/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_Emissao_Saida() p/ controle do estoque                      
;Ultima Alteracao: 09/11/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado ajustes p/ controle de altera‡Æo da data de emissÆo
;Ultima Alteracao: 24/11/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes calcular e alterar vencimento "F4" e "F8" pedir senha supervisor #0227#
;Ultima Alteracao: 06/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Verifica_Caixa()                       
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo IR se nÆo for utilizado!
;Ultima Alteracao: 09/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TITULO de Credito
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes atualizacao a receber/pagar/caixa              
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven                  
;Ultima Alteracao: 14/12/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado ajustes p/ verificar se ANT_DTE est  setada
;Ultima Alteracao: 17/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atua_Dados()                       
;Ultima Alteracao: 28/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data_Entrada ChequeI = Data de Entrada ChequeC
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes procedimentos              
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_titulo() em Carrega_Parametros()
;Ultima Alteracao: 11/01/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo de entrada/saida do estoque quando mˆs/ano da data de emissÆo ‚ alterado
;Ultima Alteracao: 20/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALCULO_NF_AUTOMATICO="L" livre, informar por item descto, frete, seguro e despaces
;Ultima Alteracao: 27/01/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes CALCULO_NF_AUTOMATICO="L" livre se nota diferente de ROMANEIO
;Ultima Alteracao: 25/02/2016 por Bruno Carvalho
;Motivo Alteracao: Alterado Moveto "FaturaC" -> Moveto "NotaC" na proc RATEIO_COMISSAO_VENCTOS()
;Ultima Alteracao: 04/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALCULO_NF_AUTOMATICO="A" NFSE, temporariamente nÆo ir para importacoa de dados
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord                    
;Ultima Alteracao: 08/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F10 -> F6 Referenciar TC                  
;Ultima Alteracao: 12/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]
;Ultima Alteracao: 14/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes Ordem_Compra_Publica() onde foi alterado NotaOCP -> NotaCC
;Ultima Alteracao: 17/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 28/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS Desonerado
;Ultima Alteracao: 08/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CHEQUES()
;Ultima Alteracao: 12/07/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes Ordem_Compra_Publica() onde foi alterado NotaCC -> NotaOCP **N„o foi criado NotaCC 
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()
;Ultima Alteracao: 18/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes estorno/gera‡Æo financeiro
;Ultima Alteracao: 04/11/2016 por Bruno Carvalho
;Motivo Alteracao: Checagem_Pagina1() -> Verifica‡Æo [Tipo Pessoa]=FISICA e CPF inv lido
;Ultima Alteracao: 03/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao GetP_Balcao(), GetP_Entra()
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes uso de getrecord substituicao de view em tabelas
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SUFRAMA TN
;Ultima Alteracao: 23/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ignorar calculo st se nÆo calcula impostos no parametro
;Ultima Alteracao: 27/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes Carrega_Parametros_Fatura()
;Ultima Alteracao: 07/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Tag Data_Base no Geral_Dialog
;Ultima Alteracao: 10/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao controle_Dia() NotaEC                   
;Ultima Alteracao: 06/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel de controle REG_NOTAC p/ "FT_NOTA" e "FT_DESF" ao processar REQ_TRANSF_DEVOLUCAO()
;                  Processo o qual gera/desfaz requisi‡äes de devolu‡äes autom ticas #294# e SYS_VALOR() no inicio do script
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 20/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALCULO_NF_AUTOMATICO="L" livre se nota iguais a ROM,NFE,CF-E,CUP
;Ultima Alteracao: 20/03/2017 por Bruno Carvalh
;Motivo Alteracao: CALC_VENCTOS() -> Alterado GERDUP_CDESCTO="N" para GERDUP_CDESCTO="0"
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0396# -> PegaCodigoRaiz()
;Ultima Alteracao: 11/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desoneracao icms Poddium
;Ultima Alteracao: 15/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Valor Frete Cotado] ao calcular o valor do frete na nota (SHIFT + F)
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2()
;Ultima Alteracao: 29/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0345# -> icms desonerado              
;Ultima Alteracao: 30/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes icms desonerado da tabela Destin
;Ultima Alteracao: 08/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes base calculo pis/cofins 0051 modamil
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel de controle CALC_VENC_SIM -> Digita_Cartao()
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes nos venctos quando tipo for cartÆo ao chamar Digita_Cartao(), se nÆo informado e pressionado ESC -> Loop
;Ultima Alteracao: 23/06/2017 por Bruno Carvalho
;Motivo Alteracao: Movido p/ BIB_VEND todo o controle Geral_Dialog()
;Ultima Alteracao: 26/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes base calculo pis/cofins 0051 modamil
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 12/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_CHECA_ESTOQUE_SEMMENSSAGEM -> CHECA_ESTOQUE() *FT_EXPOF
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Alterado "NOTACF" p/ "NOTAR" -> Ajustes ao excluir "NOTAR" -> Exclusao_C()
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "Notaocp"
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 28/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar modelo no item 0003            
;Ultima Alteracao: 28/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout showdialog item                  
;Ultima Alteracao: 01/08/2017 por Bruno/An¡vel
;Motivo Alteracao: Removido Checa_Comissao_vendedor() e Checa_Comissao_Produto() -> Processo realizado no Fatura
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito] e [Valor INSS] -> [Valor TC]
;Ultima Alteracao: 11/08/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Soma_PrecoTotal() e ajustes no FORM p/ quando item for CANCELADO
;Ultima Alteracao: 28/08/2017 por Bruno Carvalho
;Motivo Alteracao: Verificando RecordStatus("New") ao chamar a proc Soma_PrecoTotal()
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 13/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes indicador de presen‡a
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Valor_Importacao() e Checa_MVA() p/ Bib_Vend 
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA()
;Ultima Alteracao: 26/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos calculos da nota
;Ultima Alteracao: 11/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pagina itens somaitens
;Ultima Alteracao: 25/10/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado na Digita‡Æo dos Itens Pedido_Compra e Item_Pedido_Compra *Apenas Visualiza‡Æo no ShowDialog
;Ultima Alteracao: 06/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes mensagem cancelamento
;Ultima Alteracao: 06/11/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao realizar o SCAN -> ATUA_SITUACAO_PEDIDO_ORCAMENTO() **[Quantidade Faturada]>=[Quantidade]
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: ajustes SYS_CHAPA_USUARIO
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog item      
;Ultima Alteracao: 27/01/2018 por Bruno Carvalho
;Motivo Alteracao: Removido processos que destinavam … variavel de controle EDITA_DESCRICAO_ITEM
;Ultima Alteracao: 27/02/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes liberado ipi devolvido                     
;Ultima Alteracao: 14/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes liberado ipi devolvido VersaoDaNFe         
;Ultima Alteracao: 19/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_Preco() pesquisa item e depois codigoraiz
;Ultima Alteracao: 14/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registro_Item("Ler")+CalcularPrecoTotal_Item()
;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: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ nÆo gerar log de itens excluidos quando for excluir a cabe‡a do registro
;Ultima Alteracao: 05/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SYS_APLICATIVO
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0419# -> PegaCodigoRaiz()
;Ultima Alteracao: 02/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes grava_logt altera‡Æo do registro
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao PARAM_VERSAODANFE
;Ultima Alteracao: 10/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NotaCC Ordem_Compra_Publica_Show()
;Ultima Alteracao: 17/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pedido faturado 0388         
;Motivo Alteracao: Ajustes no campo I_Tamanho p/ I_Tamanho_Variacao, onde est  sendo utilizado p/ varia‡äes #0388# -> VSD_I_Tamanho_Variacao
;                  ajustado para controle [DTamanho] e quando PARAM_UTILIZA_VARIACOES p/ a varia‡Æo que ‚ armazenada nas inf.adicionais como V[***]
;Ultima Alteracao: 01/11/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na vari vel p/ iniciar ITEM_DUPLICADO=False no campo "I_Tamanho_Variacao" 
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0429# -> PegaCodigoRaiz()
;Ultima Alteracao: 29/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0429# usar varia‡äes
;Ultima Alteracao: 30/05/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado processo para localizar codbar da proc CDBarras() e ajustado em Pega_Dados_Item()
;Ultima Alteracao: 22/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variacoes #0390          
;Ultima Alteracao: 23/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NCE nÆo calcular automatico na altera‡Æo
;Ultima Alteracao: 15/09/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado ajustes p/ quando [Forma de Pagamento]="RP"
;Ultima Alteracao: 06/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado processo p/ atualizar/estonar resgate de pontos -> "FT_GRP" 
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes closed desabilitado em rotina que usa direto
;Ultima Alteracao: 19/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RATEIO_COMISSAO_VENCTOS() bib_vend           
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 06/01/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo()
;Ultima Alteracao: 28/04/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado TipoItem_ControlaEstoque()
;Ultima Alteracao: 28/07/2020 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0112 controle lote
;Ultima Alteracao: 11/08/2020 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado Carrega_Parametros_Cliente() *Ordena Rela‡Æo

;*******************************************************************************
;* Rotina para Controlar Chave da Nota Fiscal                                  *
;*******************************************************************************
Proc CHAVEC()

COPIOU_REGISTRO=False
INICIO_PAGINA=True

FACA_DIGITAC =True
NF_Cancelada =False
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True
  Moveto "Notac"
  Switch
    Case ORDENARPOR="EMPRESA" :
      Moveto [Codigo da Empresa]
      Menu {Image} {OrderTable} Enter {Codigo da empresa}  
  EndSwitch
  End
  Moveto [Codigo da Empresa]
  
  If OPCAO_FORM="F"
     Then Down
     Else CtrlPgDn ;PgDn PgDn PgDn PgDn
  EndIf
  Moveto [Codigo da Empresa]

  If Not IsBlank(ANT_EMPRESA)
     Then [Codigo da Empresa  ]=ANT_EMPRESA
          [Codigo do Documento]=ANT_CDDOCTO
     Else [Codigo da Empresa  ]=PARAM_EMPRESA
  EndIf
  SetaCorRegistro("Editar")
  While True
  
  MSGCAMPO=Field()
  
  If Field()="Codigo da Empresa" And Not IsBlank([Codigo da Empresa])
     Then MSGCAMPO="Empresa: "+[Nome Fantasia Empresa]
  EndIf
  
  If Field()="Codigo do Documento" Or
     Field()="Codigo da Empresa"
     Then TECLA="F1=Tabelas "
     Else TECLA="           " 
  Endif
  
  If Field()="Codigo da Empresa"
     Then Monta_Opcoes("Empresas","")
  EndIf

  If Field()="Codigo do Documento"
     Then Monta_Opcoes("Codigo do Documento","")
  EndIf
  
  AguardaTeclasPadrao()
  
  If RetVal=-33
     Then Echo Normal
          Echo Off  
          
          ShowPopup " Fun‡”es " CENTERED
           "Ordenar Empresa/Codigo Docto/Numero Docto/Serie Docto" : " Ordenar por Empresa/Codigo Docto/Numero Docto/Serie Docto    " : "ORD_EMPRESA",
           Separator,
           "~C~ancelar                                           " : " Cancelar a Opera‡„o                                          " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off

          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
          EndIf                                         
          
          Switch
            Case MenuVar="ORD_EMPRESA"  : ORDENARPOR="EMPRESA"  
          EndSwitch
          
          FileWrite PrivDir()+"ORD_NOTA.ini" From GravaExpressao("VSDGORDEM","S",ORDENARPOR)
          RetVal=MenuVar
          
          If MenuVar="ORD_EMPRESA" 
             Then If IsBlank([Codigo da Empresa])
                     Then Del
                  EndIf
                  QuitLoop
          EndIf
  EndIf    

  Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F1":
           If Field()="Codigo do Documento"
              Then Seleciona_Opcoes("Codigo do Documento","CR")
           EndIf 
           
           If Field()="Codigo da Empresa"         
              Then Seleciona_Opcoes("Empresas","CR")
           Endif
             
        Case RetVal="F3":
             If OPCAO_FORM="F"
                Then OPCAO_FORM="1"
                Else OPCAO_FORM="F"
             EndIf
             Del
             CHAVEC=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               COPIOU_REGISTRO=False
               INICIO_PAGINA=True

               FACA_DIGITAC =True
               NF_Cancelada =False
               VCITENS =BlankNum()
               VSQTDE  =BlankNum()
               VSVRMERC=BlankNum()

               If OPCAO_FORM="F"
                  Then PAGINA("NotaC","MR")
                  Else PAGINA("NotaC","MT")
               EndIf
               EMPRESA=[Codigo da Empresa  ]
               NUMDOC =[Numero do Documento]
               SERIE  =[Serie do Documento ]
               CODDOC =[Codigo do Documento]               
               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])
                         Then CARREG_ACERTADO=False
                              If Not IsBlank([Numero_Carregamento])
                                 Then Moveto [Numero_Carregamento]
                                      If Busca_Lookup("Numero_Carregamento",[NotaC->Numero_Carregamento],"SM")
                                         Then If REG_BUSCA_LOOKUP["Situacao"]="ACERTADO"
                                                 Then Mensagem("Carregamento j  foi ACERTADO !")
                                                      UnLockRecord
                                                      CARREG_ACERTADO=True
                                              EndIf
                                      EndIf
                              EndIf
                              If Not CARREG_ACERTADO
                                 Then If (IsBlank([Codigo da Empresa]) Or Carrega_Parametros()) And
                                         IsBlank([Situacao])
                                         Then If Checa_Supervisor() 
                                                 Then GRAVA_LOG=True
                                                      EXCLUSAO_C()
                                                 Else UnLockRecord
                                              EndIf
                                         Else UnLockRecord
                                      EndIf
                              EndIf
                         Else UnLockRecord
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="1"
                  Then PickForm "1"
                  Else PickForm "F"
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             If Field()="Codigo da Empresa"
                Then CHAVEC=9
                     Del
                     Return
                Else Left
             EndIf
        Case Retval="ENTER":
             If IsBlank([])
                Then Loop
             EndIf
             Switch
                  Case Field()="Codigo da Empresa":
                       If Not Checa_Opcoes("Empresas",[])
                          Then Mensagem("Empresa inv lida !")
                               Loop     
                          Else EMPRESA=[Codigo da Empresa]
                               Moveto [Numero do Documento]
                       EndIf                       
                  Case Field()="Numero do Documento":
                       []=ALINH()
                       NUMDOC=[Numero do Documento]
                       Moveto [Codigo do Documento]
                  Case Field()="Codigo do Documento": 
                       If Not Checa_Opcoes("Codigo do Documento",[])
                          Then Mensagem("C¢digo do documento inv lido !")
                               Loop
                       EndIf             
                       If Search("CT",[Codigo do Documento])>0 Or Search("CA",[Codigo do Documento])>0
                        Then MSG="Lan‡amento ‚ referente //a CONHECIMENTO DE TRANSPORTE, //"
                             MSG=MSG+"utilizar Digita‡Æo de CTR !"
                             Mensagem(MSG)
                             Loop
                       EndIf
                                         
                       SERIE =[Serie do Documento]
                       CODDOC=[Codigo do Documento]

                       ANT_EMPRESA=[Codigo da Empresa]
                       ANT_CDDOCTO=[Codigo do Documento]

                       Del
                       PickForm "1"
                       Moveto [Codigo da Empresa]
                       Locate EMPRESA,NUMDOC,SERIE
                       If Retval
                          Then CHAVEC=0
                          Else CHAVEC=1
                               PgDn PgDn PgDn PgDn
                               [Codigo da Empresa       ] = EMPRESA
                               [Numero do Documento     ] = NUMDOC
                               [Codigo do Documento     ] = CODDOC
                       EndIf
                       If Not IsLockRecord()
                          Then Echo Normal
                               Echo Off
                               If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                                  (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                                  Then Return
                               EndIf
                       EndIf
                       If CHAVEC=1
                          Then Del
                       EndIf
                       If OPCAO_FORM="F"
                          Then PickForm "F"
                       EndIf
                       QuitLoop
             EndSwitch
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
Moveto "NotaC"

;-- carrega parametros antes de qualquer coisa !
If Not Carrega_Parametros()
   then  
         If CHAVEC=1
            Then Del
         EndIf
         CHAVEC=9
         Return
endif       

Switch
  Case Search("CT",CODDOC)>0 Or Search("CA",CODDOC)>0:
       MSG="Lan‡amento ‚ referente //a CONHECIMENTO DE TRANSPORTE, //utilizar Digita‡Æo de CTR !"
       Mensagem(MSG)
       CHAVEC=9
       Return
  Case CHAVEC=0 And [Situacao]="C" And [Descricao da Destinacao]="INUTILIZADA":
       Mensagem("NF-e INUTILIZADA !")
       CHAVEC=9
       Return
  Case CHAVEC=0 And [Situacao]="C" And [Sistema Gerador]="DN":
       Mensagem("NF-e DENEGADA !")
       CHAVEC=9
       Return 
  Case CHAVEC=0 And [Situacao]="C" And [Sistema Gerador]="EX": 
       MSG="NF-e CANCELADA EXTEMPOR¶NEO !//"
       MSG=MSG+"Deseja DESCANCELAR este documento ?"
       If ConfGeral_N(MSG)
          Then COR_MENSAGEM="ALERTA" 
               MSG="Deseja realmente DESCANCELAR este documento ?"
               If ConfGeral_N(MSG)           
                  Then If Carrega_Parametros()
                          Then Play "FT_DNOTA"  
                       EndIf  
               EndIf                           
       EndIf
       CHAVEC=9
       Return     
  Case CHAVEC=0 And [Situacao]="C": 
       MSG="Documento CANCELADO !//"
       MSG=MSG+"Deseja DESCANCELAR este documento ?"
       If ConfGeral_N(MSG)
          Then COR_MENSAGEM="ALERTA" 
               MSG="Deseja realmente DESCANCELAR este documento ?"
               If ConfGeral_N(MSG)           
                  Then If Carrega_Parametros()
                          Then Play "FT_DNOTA"  
                       EndIf  
               EndIf                           
       EndIf 
       CHAVEC=9
       Return
EndSwitch

FACA_CHAVEI=True
If Not IsAssigned(OpcaoC) Then OpcaoC=""  EndIf

If CHAVEC=1
  Then If INICIO_PAGINA
          Then
              [Codigo da Destinacao    ] = PARAM_DESTINACAO
              [Codigo da Transportadora] = PARAM_TRANSPORTADORA
              [Codigo da Tabela        ] = PARAM_TABELA_PRECO
              [Sistema Gerador         ] = "MA"

       EndIf
          
       If ANT_DEST   <>"" And
          ANT_DTEMI  <>BlankDate() And
          ANT_DTSAI  <>BlankDate() And
          ANT_DTACE  <>BlankDate() And
          ANT_CDTAB  <>""
          Then
               [Codigo da Destinacao]=ANT_DEST
               [Numero_Carregamento ]=ANT_NCARREG
               [Data de Emissao     ]=ANT_DTEMI
               [Data de Saida       ]=ANT_DTSAI
               [Data de Acerto      ]=ANT_DTACE
               [Codigo da Tabela    ]=ANT_CDTAB

               Moveto [Codigo]
          Else Moveto [Codigo da Destinacao]
       EndIf
  Else If INICIO_PAGINA
          Then ;---- Incluido em 09.11.2015 ----------------------------------
               ANT_DTE = [Data de Emissao]  
               DoctoGerado=[Tipo do Documento]+"/"+[Numero do Documento]+"-"+[Serie do Documento]
               While True
            
                 Echo Normal
                 Echo Off
                 ShowPopup " Op‡”es " CENTERED
                     "~A~lterar o documento"    : " Altera‡Æo do documento "+DoctoGerado    :"Alterar",
                     "~C~ancelar o documento"   : " Cancelamento do documento "+DoctoGerado :"Cancelar",
                     "~D~enegar o documento"    : " Denega‡Æo do documento "+DoctoGerado    :"Denegar",
                     Separator,
                     "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
                 EndMenu
                 To Opcaoc
                 echo off
         
                 If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                    Then CHAVEC=9
                         Return
                 EndIf
            
                 Switch
                    Case Opcaoc="Cancelar":
                      MSG=    "Acesso supervisionado !// //"
                      MSG=MSG+"* O cancelamento deste documento implica em estornos//"
                      MSG=MSG+"  nos controles integrados ao documento.            // //"
                     
                      If ConfGeral_N(MSG+"Deseja CANCELAR este documento ?")
                         Then COR_MENSAGEM="ALERTA" 
                              MSG="Deseja realmente CANCELAR este documento ?"
                              If ConfGeral_N(MSG)           
                                 Then Echo Normal
                                      Echo Off
                                      ShowPopup " Op‡”es " CENTERED
                                         "~C~ancelamento Normal"      : " Cancelamento dentro do prazo 24 horas" :"NORMAL",
                                         "Cancelamento ~E~xtemporƒneo": " Cancelamento fora do prazo de 24 horas":"EXTEMPORANEO",
                                         Separator,
                                         "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
                                      EndMenu
                                      To Opcaoc
                                      echo off
                             
                                      If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                                        Then CHAVEC=9
                                             Return
                                      EndIf
                                 
                                      If Not CHECA_SUPERVISOR()
                                         Then Loop
                                      EndIf
                                      
                                      If Opcaoc = "EXTEMPORANEO"
                                         Then GRAVA_OK=False
                                              Play "FT_DTCAN"
                                              If Not GRAVA_OK
                                                 Then CHAVEC=9
                                                      Return
                                              EndIf
                                      EndIf
                                      SITUACAO=Opcaoc
                                      TIPO="CANCELAR"
                                      Play "FT_DESF"   
                              EndIf        
                      EndIf
                      CHAVEC=9
                      Return      

                   Case Opcaoc="Denegar":
                      MSG=    "Acesso supervisionado !// //"
                      MSG=MSG+"* A denega‡Æo deste documento implica em estornos//"
                      MSG=MSG+"  nos controles integrados ao documento.            // //"
                     
                      If ConfGeral_N(MSG+"Deseja DENEGAR este documento ?")
                         Then COR_MENSAGEM="ALERTA" 
                              MSG="Deseja realmente DENEGAR este documento ?"
                              If ConfGeral_N(MSG)           
                                 Then If Not CHECA_SUPERVISOR()
                                         Then Loop
                                      EndIf
                                      TIPO="CANCELAR"
                                      SITUACAO="DENEGAR"
                                      Play "FT_DESF"
                              EndIf        
                      EndIf
                      CHAVEC=9
                      Return  

                   Case Opcaoc="Alterar":
                     If [Sistema Gerador]="TR"
                       Then Mensagem("Documento gerado por TROCA/VENDA, altera‡Æo n„o permitida !// //Permiss„o apenas para Cancelamento !")
                            Loop
                     EndIf       
                     If Not IsBlank([Numero_Carregamento])
                        Then Moveto [Numero_Carregamento]
                             If Busca_Lookup("Numero_Carregamento",[NotaC->Numero_Carregamento],"SM")
                                Then If REG_BUSCA_LOOKUP["Situacao"]="ACERTADO"
                                        Then Mensagem("Carregamento j  foi ACERTADO !")
                                             Loop
                                     EndIf
                                Else Mensagem("Carregamento n„o encontrado !")
                                     Loop
                             EndIf
                     EndIf
        
                     MSG=""
                     If [Sistema Gerador]="FT" Or
                        [Sistema Gerador]="CF" Or
                        [Sistema Gerador]="BA"   
                        Then MSG=MSG+"Documento gerado automaticamente por outro processo !// //"
                     EndIf
                     MSG=MSG+"Acesso supervisionado !// //"
                     MSG=MSG+"* N„o ‚ recomendado efetuar altera‡”es neste documento;          //"
                     MSG=MSG+"* As altera‡äes efetudas implicam em estornos e novos lan‡amentos//"
                     MSG=MSG+"  nos controles integrados a este documento.                     "
                     Mensagem(Msg)
                     If Not Checa_Supervisor()
                        Then Loop
                     EndIf   
                     QuitLoop
                  EndSwitch
        
               EndWhile
       EndIf
       If [Sistema Gerador]="CF"
          Then Moveto [Codigo do Representante]
          Else If [Tipo de Pagamento]="V"
                Then Moveto [Exportado_Caixa]
                Else If [Tipo do Documento]="CUP"
                        Then Moveto [Cupom Fiscal Faturado]
                        Else Moveto [Codigo da Destinacao ]
                     EndIf
               EndIf      
       EndIf
EndIf

INICIO_PAGINA=False

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo da Empresa"        Or
         Field()="Codigo da Destinacao"     Or
         Field()="Codigo"                   Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Condicao de Pagamento"    Or
         Field()="Numero_Carregamento"      Or
         Field()="IndPres"                  Or
         Field()="Cidade"                   Or
         Field()="UF"
         Then TECLA=TECLA + "F1=Tabelas  "
         Else TECLA=TECLA + "            "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA + "Del=Excluir  "
         Else TECLA=TECLA + "             "
      EndIf
      TECLA=TECLA + "Alt+F=Fun‡”es  PgDn  "

      Prompt TECLA

      MSGCAMPO=Field()

      Switch
        Case Field()="Exportado_Caixa"       : MSGCAMPO="Nota Exportada p/ o Caixa (Sim/N„o) ? "
        Case Field()="Consumidor Final"      : MSGCAMPO="Consumidor Final (Sim/N„o) * Sim = Calculo ICMS sobre o Valor da Nota Fiscal"
        Case Field()="Codigo da Tabela"      : MSGCAMPO="C¢digo da Tabela de Pre‡o"
        Case Field()="Origem do Pedido"      : MSGCAMPO="Visita, Fone, Balc„o"
        Case Field()="CGC"                   : MSGCAMPO="CNPJ/CPF"
        Case Field()="Cupom Fiscal Faturado" : MSGCAMPO="Cupom Fiscal Faturado (Sim/N„o) ? "
        Case Field()="Tipo Pessoa"           : MSGCAMPO="Fisica, Juridica"
        Case Field()="Codigo"                :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="C¢digo do Destinatario"
                Else MSGCAMPO="C¢digo do Emitente"
             EndIf
        Case Field()="Data de Saida"         :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="Data de Saida"
                Else MSGCAMPO="Data de Entrada"
             EndIf
        Case Field()="Hora de Saida"         :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="Hora de Saida"
                Else MSGCAMPO="Hora de Entrada"
             EndIf
        Case Field()="IndPres"               : MSGCAMPO="Indicador de Presen‡a"
        OtherWise:
             pos_p=SearchFrom("Transp",Field(),1)
             If pos_p>0 And Field()<>"Codigo da Transportadora"
                Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
             EndIf
      EndSwitch

      Wait Field
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7",-33

      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F4] ~O~rdem de Compra P£blica " : " Ordem de Compra P£blica         " : "F4",
                "[F7] Documentos ~R~eferenciados" : " Referenciar demais documentos   " : "F7",
                Separator,
                "~S~air"                     : " Ignorar op‡äes"                   :"Cancela"
              EndMenu
              To MenuVar
              echo off
              If MenuVar="Cancela" or MenuVar="Esc"
                 Then Loop
              EndIf
    
              RetVal=MenuVar
      EndIf
    
      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
              Field()="Codigo"                   Or
              Field()="CFO"                      Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"    Or
              Field()="Numero_Carregamento"      Or
              Field()="Cidade"                   Or
              Field()="UF"
              Then If CONSULTAF1()
                      Then If Field()="Cidade"
                              Then [UF  ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf        
            EndIf
           If Field()="IndPres"
              Then IndicadorPresenca()
           EndIf
              
      Case RetVal="PGDN":
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If Checa_Supervisor() 
                       Then GRAVA_LOG=True
                            If EXCLUSAO_C()
                              Then CHAVEC=9
                                   QuitLoop
                            EndIf
                   EndIf
           EndIf
      Case Retval="F4":
           Ordem_Compra_Publica()           
      Case Retval="F7":
           Play "FT_NFER"
           Loop
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Destinacao" :

                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVEC=9
                        QuitLoop
                Endif
           Case Field()="Exportado_Caixa"      :
                If [Sistema Gerador]="CF"
                  Then Moveto [Codigo do Representante]
                  Else If QuerDesfazer("")
                       Then If CHAVEC=1
                               Then Del
                               Else Undo
                            EndIf
                            CHAVEC=9
                            QuitLoop
                    Endif   
               EndIf
           Case Field()="IndPres"                  : Moveto [Codigo da Destinacao]
           Case Field()="CFO"                      : Moveto [Codigo da Destinacao]
           Case Field()="Data de Emissao"          : Moveto [CFO]
           Case Field()="Razao Social"             : Moveto [Tipo Pessoa]
           Case Field()="Consumidor Final"         : Moveto [Codigo]

           Case Field()="Codigo do Representante"  : 
                If [Sistema Gerador]="CF"
                    Then If QuerDesfazer("")
                           Then If CHAVEC=1
                                   Then Del
                                   Else Undo
                                EndIf
                                CHAVEC=9
                                QuitLoop
                        Endif 
                 Else  Moveto [Data da Autorizacao]
               EndIf 
           Case Field()="Comissao do Representante": Moveto [Codigo do Representante]
           Case Field()="Origem do Pedido"         : Moveto [Codigo do Representante]
           Case Field()="Condicao de Pagamento"    : Moveto [Origem do Pedido]
           Case Field()="Codigo da Tabela"         : Moveto [Condicao de Pagamento]

           Case Field()="Numero_Carregamento"      : Moveto [Codigo da Tabela]
           Case Field()="Chave_Acesso_NFe"         : Moveto [Codigo da Tabela]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           If IsBlank([])
              Then If Field()="Codigo da Empresa" Or
                      Field()="Codigo da Destinacao" Or
                      Field()="CFO" Or
                      Field()="Codigo" Or
                      Field()="Codigo do Representante" Or
                      Field()="Condicao de Pagamento"
                      Then Loop
                   EndIf
           EndIf
           Switch
           Case Field()="Exportado_Caixa":
                If [Tipo do Documento]="CUP"
                   Then Moveto [Cupom Fiscal Faturado]
                   Else Moveto [Codigo da Destinacao ]
                EndIf
           Case Field()="Codigo da Destinacao" : Moveto [IndPres]
           Case Field()="IndPres":
              if isblank([])
                 then fastmsg("Valor inv lido !")
                      loop
              endif
              Moveto [CFO]
           Case Field()="CFO"                  : Moveto [Data de Emissao]
           Case Field()="Data de Emissao"      :
                If IsBlank([]) Then []=Today() EndIf
                ;---- Verifica a data de emissÆo antes da altera‡Æo e se mˆs diferente pergunta se deseja prosseguir ----
                If IsAssigned(ANT_DTE) And ANT_DTE<>BlankDate() And ANT_DTE<>[Data de Emissao]
                   Then If CHAVEC=0 And (Month(ANT_DTE)<>Month([Data de Emissao]) Or Year(ANT_DTE)<>Year([Data de Emissao]))
                           Then MSG = "O  mˆs/ano da nova data informada "+AlinhM(StrVal([Data de Emissao]),10)+" ‚ diferente do mˆs/ano//"+
                                      "da data anterior "+AlinhM(StrVal(ANT_DTE),10)+"                                        ////"+
                                      "Deseja continuar com a altera‡„o?                                  "
                                      ConfGeral(MSG)
                                      If OK<>"S"
                                         Then [Data de Emissao]=ANT_DTE
                                              Loop
                                         Else If Checagem_Pagina1()
                                                 Then ATU_DTE = [Data de Emissao]
                                                      ATU_TME = [Tipo Movimento Estoque]
                                                      
                                                      [Data de Emissao] = ANT_DTE
                                                      If ATU_TME="S"
                                                         Then [Tipo Movimento Estoque] = "E"
                                                         Else [Tipo Movimento Estoque] = "S"
                                                      EndIf   
                                                     
                                                      CHAVEI=1
                                                      Moveto "NotaI"
                                                      Scan
                                                        ESTOQUE()
                                                      EndScan
                                                      
                                                      Moveto "NotaC"
                                                      [Data de Emissao        ] = ATU_DTE
                                                      [Data de Saida          ] = ATU_DTE
                                                      [Tipo Movimento Estoque ] = ATU_TME
                                                      
                                                      Moveto "NotaI"
                                                      Scan
                                                        ESTOQUE()
                                                      EndScan
                                          
                                                      Moveto "NotaC"
                                                      ANT_DTE = [Data de Emissao]
                                                      
                                                      Release Vars ATU_DTE, ATU_TME
                                              EndIf
                                      EndIf
                        EndIf   
                EndIf
                Moveto [Data de Saida]  
           Case (Field()="Data de Saida" Or Field()="Data de Acerto"):
                If IsBlank([])
                   Then []=Today()
                EndIf

                If (Field()="Data de Emissao" Or Field()="Data de Acerto")
                   Then If Not IntervaloData([])
                           Then Loop
                        EndIf
                EndIf

                Right
           Case Field()="Hora de Saida" And IsBlank([]):
                []=Time()
                Right
           Case Field()="Codigo" :
                If CHAVEC=1 And [Codigo]<>""
                   Then If Cliente_Inativo([Codigo])
                           Then Loop
                        EndIf   
                EndIf
                If IsBlank([Codigo da Transportadora])
                   Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                EndIf
                Moveto [Consumidor Final]
           Case Field()="Consumidor Final":
                If IsBlank([])
                   Then []="N"
                EndIf
                If [Nome Fantasia EmitDest]="DIVERSOS"
                   Then Moveto [Razao Social]
                   Else Moveto [Codigo do Representante]
                EndIf
           Case Field()="CGC":
                If IsBlank([]) Then Loop EndIf
                If Not Checa_CGC_CPF_Formatado([]) Then Loop EndIf
                Switch
                  Case Search(".",[CGC])=4:
                       [Tipo Pessoa]="FISICA"
                  Case Search(".",[CGC])=3:
                       [Tipo Pessoa]="JURIDICA"
                EndSwitch
                Right
           Case Field()="IE":
                If IsBlank([])
                   Then Loop
                EndIf
                Right
           Case Field()="Data da Autorizacao":
                Moveto [Codigo do Representante]
           Case Field()="Codigo do Representante":
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante": 
                If [Sistema Gerador]="CF" 
                   Then Moveto [Exportado_Caixa]
                   Else Moveto [Condicao de Pagamento]       
                EndIf   
           Case Field()="Condicao de Pagamento":
                Moveto [Codigo da Tabela]
           Case Field()="Codigo da Tabela":
                Moveto [Numero_Carregamento]
           Case Field()="Numero_Carregamento":
                If Not IsBlank([]) And []<>"000000" And SYS_CODIGO_CLIENTE="0117"
                   Then If Busca_Lookup("Numero_Carregamento",[NotaC->Numero_Carregamento],"SM")
                           Then If REG_BUSCA_LOOKUP["Codigo do Representante"]<>[NotaC->Codigo do Representante]
                                   Then MSG=    "O Representante informado neste documento,//"
                                        MSG=MSG+"difere do Representante informado no Carregamento !// //"
                                        MSG=MSG+"Verificar, e se preciso anotar poss¡vel erro no Cadastro !"
                                        Mensagem(MSG)
                                EndIf
                        EndIf
                EndIf
                If SubStr([Codigo do Documento],1,3)="NFE" And        
                   [Sistema Gerador    ]="MA"
                   Then Moveto [Chave_Acesso_NFe]
                   Else If Checagem_Pagina1() Then QuitLoop EndIf
                EndIf   
            Case Field()="Chave_Acesso_NFe":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, KM_FRETE,
        TAXA_FRETE, VRMINIMO_FRETE, CHAVEC, OPCAO_RED_BCICMS,
        TRIB_ICMS, TRIB_IPI, UF_EMPRESA,
        UFEMPRESA_ALIQUOTA_ICMS,
        ALIQUOTA_CREDITO_ICMS_NOSN, UF_ALIQUOTA_ICMS_INTERNA,
        DESTIN_ATUALIZA_PEDIDOS,
        DP_GERA_DUPLICATA,TPEMPR, ATIVEMPR, CALCULO_NF_AUTOMATICO, CHAVEC,
        Aliquota_ICMS_Desonerado, Motivo_Desoneracao_ICMS

Private CAMPOS_OK, NCAMPO, CDDESTIN

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Invalida !")
  Case Upper([Tipo Pessoa])="FISICA" And Len(Tira_CharNum([CGC]))<>11 : Mensagem("CPF inv lido!")
;;Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
  OtherWise: CAMPOS_OK=True
EndSwitch

;*** Pega UF/Tipo Empresa Controle ***
GetRecord "\\Sistemas\\Cadastro\\Empresas" [NotaC->Codigo da Empresa] To REG_BUSCA_LOOKUP
If RetVal
   Then UF_EMPRESA=REG_BUSCA_LOOKUP["UF Empresa"]
        TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
        ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
        Mensagem("Empresa: "+[NotaC->Codigo da Empresa]+" sem UF !")
EndIf

;*** Checagem da Unidade Federativa c/ CFO ***
If CAMPOS_Ok And UF_EMPRESA<>"??"
   Then Switch
          Case SubStr([NotaC->CFO],1,1)="1" And [NotaC->UF]<>UF_Empresa:
               Mensagem("O estado \""+[NotaC->UF]+"\" de origem usado p/ o CFOP \""+
                        [NotaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                        "Verifique se a informa‡„o esta correta para continuar !")
          Case SubStr([NotaC->CFO],1,1)="5" And [NotaC->UF]<>UF_Empresa:
               Mensagem("O estado \""+[NotaC->UF]+"\" de destino usado p/ o CFOP \""+
                        [NotaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                        "Verifique se a informa‡„o esta correta para continuar !")
          Case SubStr([NotaC->CFO],1,1)="2" And [NotaC->UF]=UF_Empresa:
               Mensagem("O estado \""+[NotaC->UF]+"\" de origem usado p/ o CFOP \""+
                        [NotaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                        "Verifique se a informa‡„o esta correta para continuar !")
          Case SubStr([NotaC->CFO],1,1)="6" And [NotaC->UF]=UF_Empresa:
               Mensagem("O estado \""+[NotaC->UF]+"\" de destino usado p/ o CFOP \""+
                        [NotaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                        "Verifique se a informa‡„o esta correta para continuar !")
        EndSwitch
EndIf

If Not IsBlank([Numero_Carregamento])
   Then Moveto [Numero_Carregamento]
        If Busca_Lookup("Numero_Carregamento",[NotaC->Numero_Carregamento],"SM")
           Then If REG_BUSCA_LOOKUP["Situacao"]="ACERTADO"
                   Then Mensagem("Carregamento j  foi ACERTADO !")
                        CAMPOS_OK=False
                EndIf
           Else Mensagem("Carregamento n„o encontrado !")
                CAMPOS_OK=False
        EndIf
EndIf

If SubStr([Codigo do Documento],1,2)="CT"
   Then If [Tipo Movimento Estoque]<>"S"
           Then Mensagem("Destina‡Æo nÆo ‚ de saida de documento !")
                CAMPOS_OK=False
        EndIf   
        If [Frete por Conta]<>"1" And [Frete por Conta]<>"2"
           Then Mensagem("Frete por conta: 1-CIF ou 2-FOB !")
                CAMPOS_OK=False
        EndIf        
        
        If SYS_CODIGO_CLIENTE="0000"
           Then Switch
                  Case [Frete por Conta]="1" And ([Codigo da Empresa]<>[Codigo]):
                        Mensagem("Frete por conta: 1-CIF, c¢digo do tomador difere do c¢digo da empresa !")
                        CAMPOS_OK=False
                  Case [Frete por Conta]="2" And ([Codigo da Empresa] =[Codigo]):
                        Mensagem("Frete por conta: 2-FOB, c¢digo do tomador igual ao c¢digo da empresa !")
                        CAMPOS_OK=False
                EndSwitch
        EndIf
EndIf

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

;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[NotaC->UF],"")
   Then UF_ALIQUOTA_ICMS         =REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        UF_ALIQUOTA_ICMS_INTERNA =REG_BUSCA_LOOKUP["Aliquota de ICMS_INTERNA"]
   Else UF_ALIQUOTA_ICMS         =BlankNum()
        UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
EndIf

If Busca_Lookup("UF",UF_EMPRESA,"")
   Then UFEMPRESA_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
   Else UFEMPRESA_ALIQUOTA_ICMS=BlankNum()
EndIf

;*** Aliquota/Tributacao/Observacao da Destinacao ***
TRIB_ICMS=""
TRIB_IPI =""
OPCAO_RED_BCICMS="1"


CDDESTIN=[Codigo da Destinacao]
[Codigo da Destinacao]=""
[Codigo da Destinacao]=CDDESTIN

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

Aliquota_ICMS_Desonerado=0
Motivo_Desoneracao_ICMS =""

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

        OBS = OBS+REG_BUSCA_LOOKUP["Observacao_Destinacao"]

        If Not IsBlank(REG_BUSCA_LOOKUP["Conta Caixa Padrao"])
           Then PARAM_CONTA_CAIXA=REG_BUSCA_LOOKUP["Conta Caixa Padrao"]
        EndIf
        OPCAO_RED_BCICMS=REG_BUSCA_LOOKUP["Sem Reducao BCICMS"]
        DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
        
        Aliquota_ICMS_Desonerado=REG_BUSCA_LOOKUP["Aliquota ICMS Desonerado"]
        Motivo_Desoneracao_ICMS =REG_BUSCA_LOOKUP["Motivo Desoneracao ICMS" ]
EndIf

;*** Faz calculo automatico quando for apenas ROMANEIO  
If Search("ROM", Upper([Tipo do Documento  ]))> 0 or
   Search("NFE", Upper([Tipo do Documento  ]))> 0 or 
   Search("CF-E",Upper([Tipo do Documento  ]))> 0 or 
   Search("NFCE",Upper([Tipo do Documento  ]))> 0 or 
   Search("CUP", Upper([Tipo do Documento  ]))> 0  
   Then If CHAVEC=0 And CALCULO_NF_AUTOMATICO="A"  
           Then CALCULO_NF_AUTOMATICO="L"
        EndIf    
EndIf   

;*** Tabela de Kilometragem ***
Moveto [Codigo]
If Busca_Lookup("Codigo",[NotaC->Codigo],"SM")
   Then If IsBlank(REG_BUSCA_LOOKUP["Km Frete"])
           Then KM_FRETE=0
           Else KM_FRETE=REG_BUSCA_LOOKUP["Km Frete"]
        EndIf
   Else KM_Frete=0
EndIf

TAXA_FRETE=0
VRMINIMO_FRETE=0

Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc Soma_PrecoTotal()

VSVRMERC = 0
VCITENS  = 0
VSQTDE   = 0

Moveto "NotaI"
If RecordStatus("New")
   Then Return
EndIf   
Home
Scan
  If [Situacao_Item]<>"C"
     Then VCITENS  = VCITENS + 1
          VSVRMERC = VSVRMERC + [Preco Total]
          VSQTDE   = VSQTDE +   [Quantidade ]  
  EndIf
EndScan

EndProc ;Soma_PrecoTotal()

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()

Moveto "NotaI"
FACA_DIGITAF  = True
While True
  Soma_PrecoTotal()
  Moveto [Item do Documento]
  End
  NITEM = [Item do Documento]
  Down
  Moveto [Item do Documento]

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

  Opcao_Ver     = False
  SetaCorRegistro("Editar")
  While True                                      

    TECLA= " Esc=Retornar  F7=Paginar  Alt+F=Fun‡”es  PgDn/PgUp "
    Prompt TECLA
    MSGCAMPO=""
    Wait Field
         Until "ESC","ENTER","F3", "F5","F7","HOME","UP","PGUP","PGDN","PGUP","F9",-33

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
              "F9  ~M~odo                " : " Ativa/Desativa Modo Codigo de Barras" : "F9",
              "~C~ancelar                " : " Cancelar a Opera‡„o              " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf

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

         If PARAM_EXIBECUSTO="N"
            Then Play "SW_CONSS"
            Else Play "SW_CONS"
         EndIF

         Moveto "NotaC"
         Moveto [Codigo da Empresa]
         Locate EMPRESA,NUMDOC,SERIE
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "NotaI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

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

         SEQIT=[Item do Documento]
         CHAVEI=1

         [Numero do Documento] = NUMDOC
         [Item do Documento  ] = SEQIT
         [Codigo do Item     ] = Sw_Item_Pesquisado
         [Codigo da Tabela   ] = VSDGTABELA
         Item_Ins_Consulta     = True

         Return
    Case Retval="PGDN":
         Del
         Moveto [Item do Documento]
         If RecordStatus("New")=True
            Then MENSAGEM("A Nota Fiscal deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_DIGITAF  = True
           PAGINA("NotaI","MR")
           SEQIT=[Item do Documento]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If Upper([Situacao_Item])="C"
                              Then Mensagem("Exclus„o n„o permitida, item cancelado no CUPOM !")
                                   UnlockRecord
                                   Loop
                           EndIf
                           If QuerExcluir("")
                              Then CHAVEI=8
                                   GRAVA_LOG=True
                                   EXCLUSAO_I()
                                   Release Vars GRAVA_LOG
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf

           Soma_PrecoTotal()

           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate EMPRESA,NUMDOC,SERIE,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Codigo da Empresa  ]=EMPRESA
                 [Numero do Documento]=NUMDOC
                 [Serie do Documento ]=SERIE
                 [Item do Documento  ]=NumVal(SEQIT)
                 UnLockRecord
                 Locate EMPRESA,NUMDOC,SERIE,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Moveto "NotaI"
FACA_DIGITAF=True

While True
  Soma_PrecoTotal()
  Moveto [Item do Documento]
  End
  NITEM = [Item do Documento]
  Down
  Moveto [Item do Documento]
  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

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

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

If Not Pega_Dados_Item("Codigo_Barras") Or Not CHECA_ESTOQUE()
   Then Del
        Return
EndIf
   
Registro_Item("Ler")
CalcularPrecoTotal_Item()
Registro_Item("Gravar")

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

Estoque()

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

Sound 400 400
EndProc   ; (ChaveCdBar)

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

Item_ok=False
Switch
  Case Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog" :
       If Origem="Codigo_Barras_ShowDialog"
          Then Dados_Item = VSD_I_Codigo_Item
               Dados_QTD  = BlankNum()
       EndIf
          
       Moveto [Codigo do Item]
       Ativa_Lookup()
       Moveto [Codigo de Barras]
       Locate Dados_Item
       If RetVal
          Then Moveto [Codigo do Item]
          Else If Codigo_Barras2(Dados_Item,"")
                  Then PEGA_DADOS_CODITEM = CODIGO_BARRA2
                  Else PEGA_DADOS_CODITEM = Dados_Item
               EndIf
               Moveto [Codigo do Item]
               Locate PEGA_DADOS_CODITEM
               Release Vars PEGA_DADOS_CODITEM
       EndIf
  OtherWise: 
       Moveto [Codigo do Item]
       Ativa_Lookup()
       ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")         
EndSwitch
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"

       While True
         VSD_I_Codigo_Item =REG_BUSCA_LOOKUP["Codigo do Item"]

         ;---- C¢digo de Barras ------------------------------------------------
         If Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOM
                 If RetVal
                    Then If REG_ITEMCOM["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                 QuitLoop
                         EndIf
                         ITOK=True
                         [Quantidade]=Dados_QTD            
                    Else Mensagem("Item n„o Cadastrado !")
                         QuitLoop
                 EndIf
         EndIf   

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

         [Codigo do Item]  =VSD_I_Codigo_Item
         Pega_Preco("Novo")
         If Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog" 
            Then If [Preco Unitario]<=0
                   Then Mensagem("Item sem tabela de pre‡o !")
                        QuitLoop
                 EndIf
         EndIf               

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

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

                        [COFINS_CST     ]="99"
                        [COFINS_Aliquota]=BlankNum()
                 EndIf        
                         
            Else
                 ;;alterado 12/02/2014 
                 ;;pega dados primeiro como "DEBITO/CREDITO"

                 TribCST=SubStr([Tipo Tributacao],2,2)
                 Switch
                   Case (TribCST="00" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="10" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="20" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="70" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0):
                        [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                         If OPCAO_RED_BCICMS="1"
                            Then [Aliquota Reduzida BCICMS]=BlankNum()
                         EndIf
        
                   Case (TribCST="10" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="70" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0):
                        [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                         If OPCAO_RED_BCICMS="1"
                            Then [Aliquota Reduzida BCICMS]=BlankNum()
                         EndIf
        
                   Case (TribCST="00" Or TribCST="10" Or TribCST="20" Or TribCST="70") And
                        TRIB_ICMS<>"D" And TRIB_ICMS<>"S":
                        [Tributacao de Icms]=TRIB_ICMS
                        [Aliquota de ICMS  ]=BlankNum()
                        Switch
                         Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
                         Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
                         Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
        							 EndSwitch
                 EndSwitch
                 VSD_I_CST_Item=[Tipo Tributacao]

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

                 ;;alterado 12/02/2014 
                 ;;e se for "SIMPLES.." pega novos dados 
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         Switch
                           Case (Search("MOSTR",[NotaC->Descricao da Destinacao])>0  Or
                                 Search("DEVOL",[NotaC->Descricao da Destinacao])>0  Or
                                 Search("BRIND",[NotaC->Descricao da Destinacao])>0) And
                                SYS_CLIENTE_CONFEC<>"":
                                [CSOSN]="400"

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

                         EndSwitch
                         VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]
        
                         Switch
                           Case [CSOSN]="101" Or [CSOSN]="900":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                [MVA                      ]=BlankNum()
                                [ICMS_ST_Aliquota Reduzida]=BlankNum()
                                [ICMS_ST_Aliquota         ]=BlankNum()
        
                           Case [CSOSN]="201":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 Checa_MVA("NOTA",[Tributacao de ICMS],"")
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
        
                           Case [CSOSN]="202" Or [CSOSN]="203":
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 Checa_MVA("NOTA",[Tributacao de ICMS],"")
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                           Case [CSOSN]="500":
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 if Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And 
                                    [NotaC->Tipo Movimento Estoque]="E"
                                    then
                                         [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                         Checa_MVA("NOTA",[Tributacao de ICMS],"")
                                 endif
        
                           OtherWise:
                                [ICMS_CREDSN_Aliquota     ]=BlankNum()
                                [MVA                      ]=BlankNum()
                                [ICMS_ST_Aliquota Reduzida]=BlankNum()
                                [ICMS_ST_Aliquota         ]=BlankNum()
                         EndSwitch

                         [Tributacao de Icms      ]=Pega_TipoTributacao("CSOSN",[CSOSN])
                         [Aliquota Reduzida BCICMS]=BlankNum()
                         [Aliquota de ICMS        ]=BlankNum()                         
                         
                   OtherWise: ;-- DEBITRO/CREDITO -----
        
                         Switch
                           Case (TribCST="10" Or TribCST="30" Or TribCST="70"):
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA("NOTA",[Tributacao de ICMS],[Codigo MVA])
                           Case TribCST="60" And Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And [NotaC->Tipo Movimento Estoque]="E":
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA("NOTA",[Tributacao de ICMS],[Codigo MVA])
                           OtherWise:     
                                [MVA             ]=BlankNum()
                                [ICMS_ST_Aliquota]=BlankNum()
                         EndSwitch

                         [CSOSN               ]="900"
                         [ICMS_CREDSN_Aliquota]=BlankNum()
                         [ICMS_CredSN_Valor   ]=BlankNum()
               
                 EndSwitch
                 
         EndIf   

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

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

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

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

Echo Off
Return Item_ok
EndProc

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

TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True   

Mouse Show
If INICIO_DIALOG
   Then If CHAVEI=0
           Then Switch                 
                  Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"             : Campo="I_Tamanho_Variacao"
                  Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                  OtherWise                          : Campo="I_Quantidade"
                EndSwitch
           Else If PARAM_PEDIDO="S" Or PARAM_ORCAMENTO="S"
                   Then If IsBlank([NotaC->Numero do Pedido]) And
                           IsBlank([NotaC->Numero do Orcamento])
                           Then Campo="I_Codigo_Item"
                           Else Campo="I_Pedido"
                        EndIf
                   Else Campo="I_Codigo_Item"
                EndIf
        EndIf
        INICIO_DIALOG=False
EndIf

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

        VSD_I_BC_ICMS     =BlankNum()
        VSD_I_Valor_ICMS  =BlankNum()

        VSD_I_Valor_CSOSN =BlankNum() 

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

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

If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="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
           "F3 Alterar Desconto         ": " Alterar Desconto do Item           " :"F3",
           "F4 ~D~escri‡„o              ": " Descri‡„o do Item                  " :"F4",
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma de localizar o item   " :"F7", 
           "F8 ~I~nforma‡”es Adicionais ": " Informa‡”es Adicionais do Item NFe " :"F8", 
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
          EndIf                                         
          Evento["KeyCode"]=MenuVar
   EndIf 
    
   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73: 
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf 
                Case Evento["KeyCode"] = -81: 
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item do Documento]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -61 Or Evento["KeyCode"] = "F3"):
          DigitaDescto_Item()
                
     Case (Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4"):
          Campo="I_Descricao_Item"
                              
     Case (Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7"):
          ModoLocalizarItem("SELECAO","","NOTA")
                                        
     Case (Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8"):    
          Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item NFe")
          VSD_I_InfAdic=[Informacoes_Adicionais]
          
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"            
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"        Then Moveto [Codigo do Item]         EndIf
                  If Campo="I_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido]   EndIf
                  
                  If Campo="I_Tabela"             
                     Then FI_TABELAAnt=VSD_I_Tabela
                          FC_TABELAAnt=[NotaC->Codigo da Tabela]
                          Moveto "NotaC"
                          Moveto [Codigo da Tabela]  
                  EndIf
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[NotaC->CFO]
                          Moveto "NotaC"
                          Moveto [CFO]
                  EndIf
                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[NotaC->Cidade]
                          FC_UFSERVAnt =[NotaC->UF]
                          Moveto "NotaC"
                          Moveto [Cidade]  
                  EndIf

                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      VSD_I_CST_Item=Checa_CST("ICMS",[NotaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_Item)
                         Then VSD_I_CST_Item=CSTNew
                         Else [Tipo Tributacao]=VSD_I_CST_Item
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_IPI":          
                      CSTNew=VSD_I_CST_IPI 
                      VSD_I_CST_IPI=Checa_CST("IPI",[NotaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_IPI)
                         Then VSD_I_CST_IPI=CSTNew
                         Else [IPI_CST]=VSD_I_CST_IPI
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_PIS":          
                      CSTNew=VSD_I_CST_PIS 
                      VSD_I_CST_PIS=Checa_CST("PIS",[NotaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_PIS)
                         Then VSD_I_CST_PIS=CSTNew
                         Else [PIS_CST]=VSD_I_CST_PIS
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_COFINS":          
                      CSTNew=VSD_I_CST_COFINS 
                      VSD_I_CST_COFINS=Checa_CST("COFINS",[NotaC->Tipo Movimento Estoque],"")
                      If IsBlank(VSD_I_CST_COFINS)
                         Then VSD_I_CST_COFINS=CSTNew
                         Else [COFINS_CST]=VSD_I_CST_COFINS
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CSOSN":          
                      CSTNew=VSD_I_CSOSN 
                      VSD_I_CSOSN=Checa_CSOSN2("","")
                      If IsBlank(VSD_I_CSOSN)
                         Then VSD_I_CSOSN=CSTNew
                         Else [CSOSN    ]=VSD_I_CSOSN
                      EndIf
                      Release Vars CSTNew
                    OtherWise:         
                      If ConsultaF1()
                         Then Switch
                                Case Campo="I_CFOP":               
                                      FI_CFOAnt     =[NotaC->CFO] 
                                      [NotaC->CFO]=FC_CFOAnt
                                      Moveto "NotaI"
                                      [NotaI->CFO]=FI_CFOAnt
                                Case Campo="I_Tabela":               
                                      FI_TABELAAnt     =[NotaC->Codigo da Tabela] 
                                      [NotaC->Codigo da Tabela]=FC_TABELAAnt
                                      Moveto "NotaI"
                                      [NotaI->Codigo da Tabela]=FI_TABELAAnt
                                Case Campo="I_MUNSERV":               
                                      [NotaC->Cidade   ]=FC_MUNSERVAnt
                                      [NotaC->UF       ]=FC_UFSERVAnt
                                      Moveto "NotaI"
                                      [NotaI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [NotaI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                              EndSwitch
                         Else If Campo="I_CFOP" Or Campo="I_Tabela" Or Campo="I_MUNSERV"  
                                 Then Moveto "NotaI"
                              EndIf        
                      EndIf                          
                  EndSwitch                          

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

                  echo Normal
                  echo off

                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]
                  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_Tabela"
                     Then VSD_I_Tabela              =[Codigo da Tabela       ]
                          Release Vars FI_TABELAAnt,FC_TABELAAnt
                  EndIf
                  If Campo="I_CFOP"
                     Then VSD_I_CFOP            =[CFO             ]
                          Campo="I_CFOP"
                          Release Vars FI_CFOAnt,FC_CFOAnt
                  EndIf
                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[NotaI->ISSQN_Municipio]
                           VSD_I_UFSERV =[NotaI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf
                  If Campo="I_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf
                  
                  Moveto "NotaI"
         EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Pedido":
                 If QuerDesfazer("")
                    Then CHAVEI=9
                         Del
                         CancelDialog
                 Endif
            Case Campo="I_Pedido_Item"       : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"       : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"       : Campo="I_Pedido_Item"
            Case Campo="I_Descricao_Item":
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else If QuerDesfazer("")
                            Then CHAVEI=9
                                 CopyFromArray RegItem
                                 CancelDialog
                         Endif
                 EndIf
            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_Tamanho_Variacao":
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If CHAVEI=1
                            Then Campo="I_Codigo_Item"
                            Else If QuerDesfazer("")
                                    Then CHAVEI=9
                                         CopyFromArray RegItem
                                         CancelDialog
                                 Endif
                         EndIf
                 EndIf
           Case Campo="I_Tabela":
                If CHAVEI=1
                   Then If PARAM_COR_TECIDO="S"
                           Then Campo="I_Codigo_Cor_Tecido"
                           Else If PARAM_TAMANHO="S"
                                   Then Campo="I_Tamanho_Variacao"
                                   Else Campo="I_Codigo_Item"
                                EndIf
                        EndIf
                   Else CHAVEI=9
                        CopyFromArray RegItem
                        CancelDialog
                EndIf
           Case Campo="I_Quantidade" Or (Campo="I_Tamanho_Variacao" And PARAM_UTILIZA_VARIACOES) :
                If PARAM_TABPR_ITEM="S"
                   Then Campo="I_Tabela"
                   Else If CHAVEI=1
                           Then If PARAM_COR_TECIDO="S"
                                   Then Campo="I_Codigo_Cor_Tecido"
                                   Else If PARAM_TAMANHO="S"
                                           Then Campo="I_Tamanho_Variacao"
                                           Else Campo="I_Codigo_Item"
                                        EndIf
                                EndIf
                           Else CHAVEI=9
                                CopyFromArray RegItem
                                CancelDialog
                        EndIf
                EndIf
            Case Campo="I_UN_Item"                  Or
                 Campo="I_Preco_Unitario"           Or
                 Campo="I_Tipo_Desconto_Item"       Or
                 Campo="I_Preco_Total"              Or
                 Campo="I_CSOSN"                    Or              
                 Campo="I_Comissao_Item"     : Campo="I_Quantidade"

            Case Campo="I_CST_Item"          :                       
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_Quantidade"
                 EndIf

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

            Case Campo="I_RBC_ST"       Or
                 Campo="I_AST"          Or
                 Campo="I_BC_ST"        Or
                 Campo="I_Valor_ST"          : Campo="I_MVA"

            Case Campo="I_CST_IPI"           : Campo="I_CST_Item"
                   
            Case Campo="I_AIPI"         Or
                 Campo="I_Valor_IPI"    Or  
                 Campo="I_BC_IPI"            : Campo="I_CST_IPI"
            
            Case Campo="I_TISSQN"            :
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_Quantidade"
                    Else Campo="I_CST_IPI"
                 EndIf
        
            Case Campo="I_AISSQN"       Or
                 Campo="I_BC_ISSQN"     Or
                 Campo="I_Valor_ISSQN"       : Campo="I_TISSQN"

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

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

            Case Campo="I_ACOFINS"      Or
                 Campo="I_BC_COFINS"    Or 
                 Campo="I_Valor_COFINS"      : Campo="I_CST_COFINS"
            
            Case Campo="I_CFOP"              : 
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_CST_Item"
                 EndIf

            Case Campo="I_NCM"      Or         
                 Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_CFOP"
                   
            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_Vr_IPI_Devolvido"  : Campo="I_CFOP"
            Case Campo="I_Porc_IPI_Devolvido": Campo="I_Vr_IPI_Devolvido"
                   
            Case Campo="I_Numero_Volumes"    : Campo="I_CFOP"
            Case Campo="I_Peso_Liquido"      : Campo="I_Numero_Volumes"
            Case Campo="I_Peso_Embalagem"    : Campo="I_Peso_Liquido"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Pedido":
                 VSD_I_Pedido=AlinhM(ControlValue("I_Pedido"),6)
                 If VSD_I_Pedido="000000"
                    Then VSD_I_Pedido     =""
                         VSD_I_Pedido_Item=""
                         Campo="I_Codigo_Item"
                    Else Campo="I_Pedido_Item"
                 EndIf
            Case Campo="I_Pedido_Item":
                 VSD_I_Pedido_Item=ControlValue("I_Pedido_Item")
                 If VSD_I_Pedido_Item=""
                    Then VSD_I_Pedido_Item=0
                 EndIf
                 If Not IsBlank(VSD_I_Pedido_Item)
                    Then Moveto "NotaC"
                         [Numero Pedido_Orcamento]=VSD_I_Pedido
                         If PARAM_PEDIDO="S"
                            Then Moveto "PedidoI"
                                 Moveto [Item do Pedido]
                            Else Moveto "OrcaI"
                                 Moveto [Item do Orcamento]
                         EndIf
                         Locate NumVal(VSD_I_Pedido_Item)
                         If Not RetVal
                            Then Mensagem("Item do Pedido n„o Encontrado !")
                         EndIf
                         Moveto "NotaI"
                 EndIf
                 Campo="I_Codigo_Item"
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Mensagem("Item n„o cadastrado !")
                    Else VSD_I_Codigo_Item = Item_Localizador(VSD_I_Codigo_Item)
                         If LOCALIZA_CODIGO = "LOC_CODBAR"
                            Then ORIGEM = "Codigo_Barras_ShowDialog"
                            Else ORIGEM = ""
                         EndIf
                         If Pega_Dados_Item(ORIGEM)
                            Then Registro_Item("Ler")
                                 Switch
                                   Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                                   Case PARAM_TAMANHO="S"             : Campo="I_Tamanho_Variacao"
                                   Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                                   OtherWise                          : If PARAM_UTILIZA_VARIACOES
                                                                           Then Campo="I_Tamanho_Variacao" 
                                                                           Else Campo="I_Quantidade"
                                                                        EndIf
                                 EndSwitch
                            Else     
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf   
                         Release Vars ORIGEM     
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")                
                 Switch  
                   Case PARAM_COR_TECIDO="S"        : Campo="I_Codigo_Cor_Tecido"
                   Case PARAM_TAMANHO="S"           : Campo="I_Tamanho_Variacao"
                   Case PARAM_TABPR_ITEM="S"        : Campo="I_Tabela"
                   OtherWise                        : If PARAM_UTILIZA_VARIACOES
                                                         Then Campo="I_Tamanho_Variacao" 
                                                         Else Campo="I_Quantidade"
                                                      EndIf
                 EndSwitch
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then Moveto [Codigo da Cor_Tecido]
                         If Busca_Lookup("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido,"SM")
                            Then [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=REG_BUSCA_LOOKUP["Descricao da Cor_Tecido"]
                                 Campo="I_Descricao_Cor_Tecido"
                            Else Mensagem("Cor/Tecido n„o Cadastrado !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                         EndIf
                    Else Campo="I_Descricao_Cor_Tecido"
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 If PARAM_TAMANHO="S"
                    Then Campo="I_Tamanho_Variacao"
                    Else If PARAM_TABPR_ITEM="S"
                            Then Campo="I_Tabela"
                            Else If PARAM_UTILIZA_VARIACOES
                                    Then Campo="I_Tamanho_Variacao" 
                                    Else Campo="I_Quantidade"
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Tamanho_Variacao":
                 VSD_I_Tamanho_Variacao=ControlValue("I_Tamanho_Variacao")
                 If Not PARAM_UTILIZA_VARIACOES
                    Then If PARAM_TABPR_ITEM="S"
                            Then Campo="I_Tabela"
                            Else Campo="I_Quantidade"
                         EndIf
                    Else ITEM_DUPLICADO=False
                         If PARAM_DUPLICIDADE_ITEM And PARAM_UTILIZA_VARIACOES  
                            Then MSG=""
                                 Moveto [Codigo do Item]
                                 Locate VSD_I_Codigo_Item
                                 while retval
                                   If [Item do Documento]<>SEQIT 
                                      Then ITEM_DUPLICADO=True
                                           If PARAM_UTILIZA_VARIACOES    
                                              Then AUX_VSD_I_Variacoes = ""
                                                   ITEM_DUPLICADO      = False
                                                   GetRecord "NotaI" [NotaC->Codigo da Empresa  ],
                                                                     [NotaC->Numero do Documento],
                                                                     [NotaC->Serie do Documento ],
                                                                     [Item do Documento         ] To REG_NOTI 
                                                   If RetVal
                                                      Then If REG_NOTI["Informacoes_Adicionais"]<>""
                                                              Then PosI=Search("V[",Upper(REG_NOTI["Informacoes_Adicionais"]))
                                                                   If PosI>0 
                                                                      Then 
                                  PosF = Search("]",SubStr(Upper(REG_NOTI["Informacoes_Adicionais"]),PosI+2,Len(REG_NOTI["Informacoes_Adicionais"])))                             
                                  AUX_VSD_I_Variacoes = SubStr(REG_NOTI["Informacoes_Adicionais"],PosI+2,PosF-1)         
                                                                   EndIf
                                                                                                                                      
                                                                   If Rtrim(AUX_VSD_I_Variacoes)=Rtrim(VSD_I_Tamanho_Variacao)
                                                                      Then ITEM_DUPLICADO=True
                                                                           QuitLoop
                                                                   EndIf                                                  
                                                                   Release Vars PosI,PosF
                                                              Else If VSD_I_Tamanho_Variacao = AUX_VSD_I_Variacoes
                                                                      Then ITEM_DUPLICADO=True
                                  MSG = "Item "+VSD_I_Codigo_Item+" referente a cor "+VSD_I_Codigo_Cor_Tecido+" sem varia‡Æo "+
                                        "informada j  est  lan‡ado na sequˆncia "+StrVal([Item do Documento])+"!"
                                               QuitLoop
                                                                   EndIf
                                                           EndIf
                                                   EndIf
                                              Else quitloop
                                           EndIf
                                   EndIf
                                   skip
                                   if eot() then quitloop endif
                                   Locate Next VSD_I_Codigo_Item
                                   if not Retval then quitloop endif
                                 EndWhile
                                 If MSG=""            
                                    Then MSG = "Item "+VSD_I_Codigo_Item+" referente a cor "+VSD_I_Codigo_Cor_Tecido+" com a varia‡Æo "+
                                               Rtrim(Ltrim(VSD_I_Tamanho_Variacao))+" j  est  lan‡ado na sequˆncia "+StrVal([Item do Documento])+"!"
                                 EndIf                                                                            
                                 Moveto [Item do Documento]
                                 Locate [NotaC->Codigo da Empresa  ],
                                        [NotaC->Numero do Documento],
                                        [NotaC->Serie do Documento ],
                                        SEQIT
                                 Release Vars VARIACOES,REG_NOTI 
                         EndIf
                         If ITEM_DUPLICADO
                           Then Mensagem(MSG)
                                Campo="I_Tamanho_Variacao"
                                VSD_I_Tamanho_Variacao=""
                           Else If VSD_I_Tamanho_Variacao<>"" Then AUX_I_Tamanho_Variacao = "V["+VSD_I_Tamanho_Variacao+"]" EndIf                 
                                If VSD_I_Tamanho_Variacao<>""
                                   Then PosI=Search("V[",Upper(VSD_I_InfAdic))
                                        If PosI>0 
                                           Then PosF= Search("]",SubStr(Upper(VSD_I_InfAdic),PosI+2,Len(VSD_I_InfAdic)))
                        INFADIC_A = Rtrim(Ltrim(SubStr(VSD_I_InfAdic,1,PosI-2)))
                        INFADIC_B = Rtrim(Ltrim(SubStr(VSD_I_InfAdic,PosI+Len(VSD_I_Tamanho_Variacao),Len(VSD_I_InfAdic))))
                        Switch
                          Case INFADIC_A<>"" And INFADIC_B<>"" : VSD_I_InfAdic = INFADIC_A+" "+AUX_I_Tamanho_Variacao+" "+INFADIC_B
                          Case INFADIC_A=""  And INFADIC_B<>"" : VSD_I_InfAdic = AUX_I_Tamanho_Variacao+" "+INFADIC_B
                          Case INFADIC_B=""  And INFADIC_A<>"" : VSD_I_InfAdic = INFADIC_A+" "+AUX_I_Tamanho_Variacao
                          Case INFADIC_B=""  And INFADIC_A=""  : VSD_I_InfAdic = AUX_I_Tamanho_Variacao
                        EndSwitch
                                           Else VSD_I_InfAdic = AUX_I_Tamanho_Variacao
                                        EndIf
                                        Release Vars PosI,PosF,INFADIC_A,INFADIC_B,AUX_I_Tamanho_Variacao
                                EndIf
                                Campo="I_Quantidade"            
                        EndIf
                 EndIf
            Case Campo="I_Tabela" :
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then Moveto [Codigo da Tabela]
                         If Busca_Lookup("Codigo da Tabela",VSD_I_Tabela,"SM")
                            Then [Codigo da Tabela]=VSD_I_Tabela
                                 Pega_Preco("Novo")
                                 If PARAM_UTILIZA_VARIACOES
                                    Then Campo="I_Tamanho_Variacao" 
                                    Else Campo="I_Quantidade"
                                 EndIf
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 VSD_I_Tabela=""
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 [Quantidade]=VSD_I_Quantidade
                 If Checa_Estoque()
                    Then
                         CalcularPrecoTotal_Item()
                    
                         If IsBlank(VSD_I_Codigo_Item)
                            Then Campo="I_UN_Item"
                            Else Campo="I_Preco_Unitario"
                         EndIf
                 EndIf
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Campo="I_Preco_Unitario"
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")

                 CalcularPrecoTotal_Item()

                If PARAM_DESCUNIT="S" and CHAVEI=1
                   Then GetRecord "\\Sistemas\\Vendas\\NotaC" [Codigo da Empresa],[Numero do Documento],[Serie do Documento] To REG_TPDOC
                        If RetVal And REG_TPDOC["Tipo do Documento"]="NFE"
                           Then PARAM_DESCUNIT="N"
                                Campo="I_Preco_Total"
                           Else Campo="I_Tipo_Desconto_Item"
                        EndIf
                   Else Campo="I_Preco_Total"
                EndIf
                

            Case Campo="I_Tipo_Desconto_Item":
                 VSD_I_Tipo_Desconto_Item    =ControlValue("I_Tipo_Desconto_Item")

                 desctoitemok=true
                 if isblank(VSD_I_Tipo_Desconto_Item)
                    then 
                         CalcularPrecoTotal_Item()
                    else 
                         if CHAVEI=1
                            then if not DigitaDescto_Item()
                                    then desctoitemok=false
                                 endif
                         endif
                 endif
                  
                 if desctoitemok
                    then Campo="I_Preco_Total"
                 endif

            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")

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

            Case Campo="I_CSOSN": 
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 If Not IsBlank(VSD_I_CSOSN)
                    Then TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3)
                         If TribCST<>""
                            Then
                                 If (TribCST="500" And Search("DEVOL",[NotaC->Descricao da Destinacao])>0) ;se for devolu‡Æo
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"90"
                                 EndIf
                                 If (TribCST="500" And Search("DEVOL",[NotaC->Descricao da Destinacao])=0) ; se nÆo for devolu‡Æo
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"60"
                                 EndIf
                            
                                 If TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"90"
                                         VSD_I_BC_ICMS    =BlankNum()
                                         VSD_I_RBC_ICMS   =BlankNum()
                                         VSD_I_AICMS      =BlankNum()
                                         VSD_I_Valor_ICMS =BlankNum()
                                 EndIf          
                                 If TribCST="101" Or TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"     
                                    Then VSD_I_MVA        =BlankNum()
                                         VSD_I_RBC_ST     =BlankNum()
                                         VSD_I_AST        =BlankNum()
                                         VSD_I_Valor_ST   =BlankNum()
                                         VSD_I_BC_ST      =BlankNum()
                                 EndIf                                     
                                 If TribCST<>"101" And TribCST<>"201" And TribCST<>"900" 
                                    Then VSD_I_ACSOSN     =BlankNum()
                                         VSD_I_Valor_CSOSN=BlankNum()
                                 EndIf 

                                 Switch
                                  Case (TribCST="101" Or TribCST="201" Or TribCST="900"): 
                                       Campo="I_ACSOSN" 
                                  Case (TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"):    
                                       Campo="I_CST_IPI"
                                  OtherWise:
                                       Campo="I_CST_Item"
                                 EndSwitch

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

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

                            Else Mensagem("CSOSN inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACSOSN":
                 VSD_I_ACSOSN=ControlValue("I_ACSOSN")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                          Case TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400":    
                               Campo="I_CST_IPI"
                          OtherWise:
                               Campo="I_CST_Item"
                         EndSwitch
                    Else Campo="I_Valor_CSOSN"
                 EndIf                 
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 Campo="I_CST_Item"

            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",[NotaC->Tipo Movimento Estoque],VSD_I_CST_Item)
                         If TribCST<>""
                            Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 
                                 VSD_I_TICMS=Pega_TipoTributacao("ICMS",VSD_I_CST_Item) 

                                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                    Then
                                         CONTINUA=False
                                         Switch

                                           Case (SubStr(VSD_I_CSOSN,2,3)="101" Or SubStr(VSD_I_CSOSN,2,3)="102") And 
                                                (TribCST="00" Or TribCST="20" Or TribCST="90")                       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="103" And 
                                                (TribCST="40" Or TribCST="41" Or TribCST="50" Or TribCST="51")       : CONTINUA=True 

                                           Case (SubStr(VSD_I_CSOSN,2,3)="201" Or SubStr(VSD_I_CSOSN,2,3)="202" Or 
                                                 SubStr(VSD_I_CSOSN,2,3)="203" Or SubStr(VSD_I_CSOSN,2,3)="500") And 
                                                (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or                  
                                                 TribCST="90")                                                       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="300" And 
                                                TribCST<>"??"                                                        : CONTINUA=True ;?verificar qual

                                           Case SubStr(VSD_I_CSOSN,2,3)="400" And 
                                                (TribCST="40" Or TribCST="41" Or TribCST="50" Or TribCST="51")       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="900" And 
                                                TribCST<>"??"                                                        : CONTINUA=True ;?qualquer

                                         EndSwitch
                                    Else CONTINUA=True
                                         VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900"
                                         VSD_I_ACSOSN     =BlankNum()
                                         VSD_I_Valor_CSOSN=BlankNum()
                                 EndIf
                                 
                                 If Not CONTINUA 
                                    Then Mensagem("CST ICMS difere da regra para o CSOSN informado.//Verifique !")
                                    Else
                                         If TribCST="00" Or TribCST="20" Or TribCST="40" Or TribCST="41" Or
                                            TribCST="50" Or TribCST="51" Or
                                            (TribCST="60" And Search("DEVOL",[NotaC->Descricao da Destinacao])=0)
                                            Then VSD_I_MVA        =BlankNum()
                                                 VSD_I_RBC_ST     =BlankNum()
                                                 VSD_I_AST        =BlankNum()
                                                 VSD_I_Valor_ST   =BlankNum()
                                                 VSD_I_BC_ST      =BlankNum()
                                         EndIf        
                                         If TribCST<>"20" And TribCST<>"70" And TribCST<>"90"       
                                            Then VSD_I_RBC_ICMS   =BlankNum()
                                         EndIf 
                                         If TribCST="30" Or TribCST="40" Or TribCST="41" Or 
                                            TribCST="50" Or TribCST="51" Or                    
                                            (TribCST="60" And Search("DEVOL",[NotaC->Descricao da Destinacao])=0)
                                            Then VSD_I_RBC_ICMS  =BlankNum()
                                                 VSD_I_AICMS     =BlankNum()
                                                 VSD_I_BC_ICMS   =BlankNum()
                                                 VSD_I_Valor_ICMS=BlankNum()
                                         EndIf 
    
                                         Switch
                                          Case TribCST="00" Or TribCST="10"                         : Campo="I_AICMS"         
                                          Case TribCST="20" Or TribCST="70" Or TribCST="90"         : Campo="I_RBC_ICMS"
                                          Case TribCST="60" And 
                                               Search("DEVOL",[NotaC->Descricao da Destinacao])>0 : Campo="I_MVA"
                                          OtherWise                                                 : Campo="I_CST_IPI"
               												  EndSwitch
                       												  
                                        If (TribCST="10" Or TribCST="30" Or TribCST="70") And
                                           VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                           Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                                Checa_MVA("NOTA",VSD_I_TICMS,[Codigo MVA])
                                        EndIf                                                 
        
                                 EndIf

                           Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
                 
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And TribCST="60"           : Campo="I_MVA"
                           Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                           OtherWise                                                                          : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_BC_ICMS"
                 EndIf                 
            Case Campo="I_BC_ICMS":
                 VSD_I_BC_ICMS=ControlValue("I_BC_ICMS")
                 Campo="I_Valor_ICMS"                 
            Case Campo="I_Valor_ICMS": 
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                 Switch
                   Case Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                   Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                   OtherWise                                                                          : Campo="I_CST_IPI"
                 EndSwitch  

            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 Campo="I_RBC_ST"
            Case Campo="I_RBC_ST":
                 VSD_I_RBC_ST=ControlValue("I_RBC_ST")
                 Campo="I_AST"
            Case Campo="I_AST":
                 VSD_I_AST=ControlValue("I_AST")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_IPI"
                    Else Campo="I_BC_ST"
                 EndIf             
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"               
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI",[NotaC->Tipo Movimento Estoque],VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
                                 
                                 VSD_I_TIPI=Pega_TipoTributacao("IPI",VSD_I_CST_IPI) 

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

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

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

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

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

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

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

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

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

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If Len(VSD_I_NCM) <> 8
                    Then MENSAGEM("O NCM est  incorreto ! //Verifique ! ")
                 EndIf   
                 
                 If CALCULO_NF_AUTOMATICO="L"
                    then 
                         Campo="I_RAT_FRETE"
                    else
                         If substr([NotaC->Codigo do Documento],1,3)="NFE"     and
                            [NotaC->Tipo Movimento Estoque]="S"                and
                            search("DEVOL",[NotaC->Descricao da Destinacao])>0 and
                            search("IND",TPEMPR)=0
                            then 
                                 Campo="I_Vr_IPI_Devolvido"
                            else
                                 VSD_Vr_IPI_Devolvido  =blankNum()
                                 VSD_Porc_IPI_Devolvido=blankNum()
                            
                                 If PARAM_VOLUMES="S"
                                    Then Campo="I_Numero_Volumes"
                                    Else Valor_Importacao()
                                 EndIf
                         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")

                 If substr([NotaC->Codigo do Documento],1,3)="NFE"     and
                    [NotaC->Tipo Movimento Estoque]="S"                and
                    search("DEVOL",[NotaC->Descricao da Destinacao])>0 and
                    search("IND",TPEMPR)=0
                    then 
                         Campo="I_Vr_IPI_Devolvido"
                    else
                         VSD_Vr_IPI_Devolvido  =blankNum()
                         VSD_Porc_IPI_Devolvido=blankNum()
                         
                         If PARAM_VOLUMES="S"
                            Then Campo="I_Numero_Volumes"
                            Else Valor_Importacao()
                         EndIf
                 EndIf

            Case Campo="I_Vr_IPI_Devolvido":
                 VSD_Vr_IPI_Devolvido=ControlValue("I_Vr_IPI_Devolvido")
                 Campo="I_Porc_IPI_Devolvido"
            Case Campo="I_Porc_IPI_Devolvido":
                 VSD_Porc_IPI_Devolvido=ControlValue("I_Porc_IPI_Devolvido")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else Valor_Importacao()
                 EndIf

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

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

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Pedido":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Numero do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Numero do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Numero da Ordem de Servi‡o"
       EndSwitch
  Case Campo="I_Pedido_Item":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Sequencia do Item do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Sequencia do Item do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Sequencia do Item da Ordem de Servi‡o"
       EndSwitch
  Case Campo="I_Codigo_Item"            : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
  Case Campo="I_Descricao_Item"         : MSGCAMPO="Descri‡„o do item"

  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"   : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tamanho_Variacao"       : If PARAM_UTILIZA_VARIACOES
                                             Then MSGCAMPO="Varia‡Æo do item" 
                                             Else MSGCAMPO="Tamanho"
                                          EndIf 
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"
  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Tipo_Desconto_Item"     : MSGCAMPO="Tipo Desconto no Item: U=Pre‡o Unit rio  T=Total Bruto"
  Case Campo="I_Preco_Total"            : MSGCAMPO="Pre‡o Total"
  Case Campo="I_Custo_Unitario"         : MSGCAMPO="Custo Unitario"
  Case Campo="I_Preco_Tabela"           : MSGCAMPO="Pre‡o da Tabela de Pre‡o"
  Case Campo="I_Comissao_Item"          : MSGCAMPO="Comiss„o do Item"

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

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

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

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

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

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

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

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

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

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

  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_Vr_IPI_Devolvido"       : MSGCAMPO="Valor do IPI Devolvido, deste Item"
  Case Campo="I_Porc_IPI_Devolvido"     : MSGCAMPO="Porcentagem do IPI Devolvido, deste Item"

  OtherWise                             : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  " 
EndIf       

MontaRodapeSD(MSGCAMPO, TECLA)
Mouse Hide
RefreshDialog
Return TEMP
EndProc     ;  (Item_Dialog)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
If [Situacao_Item]="C" 
   Then ITEM_CANCELADO = "*CANCELADO*"
   Else ITEM_CANCELADO = ""
EndIf
Switch
  Case Not IsBlank([NotaC->Numero do Pedido]) Or PARAM_PEDIDO="S":
       MSG_Pedido_Orcamento="Pedido"
  Case Not IsBlank([NotaC->Numero do Orcamento]) Or PARAM_ORCAMENTO="S":
       MSG_Pedido_Orcamento="Orcam."
  OtherWise:
       MSG_Pedido_Orcamento="......"
EndSwitch

If PARAM_UTILIZA_VARIACOES
   Then TIT_TM_VARIACO = "Varia‡oes"
   Else TIT_TM_VARIACO = "TM"
EndIf

MSGCAMPO=""
ModoLocalizarItem("","","")
Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP","F3","F4","F7","F8","F9",-33,-6,-147
     @ 01,0 height 22 width 80

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

   Label  @ 00,02 MSG_Pedido_Orcamento For "I_Pedido"
   Accept @ 00,17 Width 09 "A06" picture "#*#" Tag "I_Pedido" to VSD_I_Pedido
   Label  @ 00,10 "/Item" For "I_Pedido_Item"
   Accept @ 00,27 Width 06 "N" picture "#*#" Tag "I_Pedido_Item" to VSD_I_Pedido_Item

   Label  @ 01,00 ">" For "I_Codigo_Item"
   Accept @ 02,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   
   @ 01,02 ?? LOCALIZAR_POR
   
   Label  @ 01,17 "Descricao Item" For "I_Descricao_Item"
   Accept @ 02,17 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   
   Label  @ 01,57 "TI" For "I_Tipo_Item"
   Accept @ 02,58 Width 03 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   @ 01,63 ?? ITEM_CANCELADO
   PaintCanvas Attribute 30 01, 63, 01, 75
   
   Label  @ 03,00 "[F8]Inf.Adic->" For "I_InfAdic"
   Accept @ 03,17 Width 44 "A100" picture "!*!" Tag "I_InfAdic" to VSD_I_InfAdic

   Label  @ 04,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,00 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 05,06 Width 23 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   Label  @ 04,29 TIT_TM_VARIACO For "I_Tamanho_Variacao"
   Accept @ 05,30 Width 11 "A6" picture "!*!" Tag "I_Tamanho_Variacao" to VSD_I_Tamanho_Variacao
   
   Label  @ 04,42 "Tabela" For "I_Tabela"
   Accept @ 05,42 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   
   Label  @ 04,53 "Pedido Compra" For "I_Pedido_Compra"
   Accept @ 05,54 Width 16 "A15" picture "!*!" Tag "I_Pedido_Compra" to VSD_I_Pedido_Compra
   Label  @ 04,70 "Item PC" For "I_Item_Pedido_Compra"
   Accept @ 05,70 Width 08 "S"               Tag "I_Item_Pedido_Compra" to VSD_I_Item_Pedido_Compra
 
   Label  @ 06,00 "Quantidade" For "I_Quantidade"
   Accept @ 07,00 Width 11 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 06,11 "UN" For "I_UN_Item"
   Accept @ 07,11 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item                               
   Label  @ 06,16 "Pr.Unit rio" For "I_Preco_Unitario"
	 Accept @ 07,17 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 06,30 "Pr.Bruto" For "I_Preco_Bruto"
   Accept @ 07,30 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Bruto" to VSD_I_Preco_Bruto
   Label  @ 06,42 "?Desconto" For "I_Tipo_Desconto_Item"
   Accept @ 07,42 Width  4 "A1"  picture "U,T" Tag "I_Tipo_Desconto_Item" to VSD_I_Tipo_Desconto_Item          
   Accept @ 07,45 Width 11 "A08" picture "!*!" Tag "I_Desconto_Descricao" to VSD_I_Desconto_Descricao
   Label  @ 06,54 "Vr.Desconto" For "I_Valor_Desconto_Item"
   Accept @ 07,56 Width 10 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Item" to VSD_I_Valor_Desconto_Item
   Label  @ 06,67 "Pr.L¡quido" For "I_Preco_Total"
   Accept @ 07,67 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 08,00 "CtUnit rio" For "I_Custo_Unitario"
   Accept @ 09,00 Width 11 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 08,16 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 09,17 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 08,42 "%Comiss„o" For "I_Comissao_Item"
   Accept @ 09,42 Width 11 "N" picture "#*#.[###]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   PaintCanvas Attribute 124 02, 61, 03, 77

   @ 11,00 ?? "Impostos CST    %Red    Aliq.  BC        Valor"
                                 
   Label  @ 12,00 " CSOSN" For "I_CSOSN"
   Accept @ 12,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 12, 15, 12, 22
   Accept @ 12,23 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 12, 29, 12, 49
   Accept @ 12,40 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

   Label  @ 13,00 "  ICMS" For "I_CST_Item"
   Accept @ 13,08 Width 07 "A3" picture "!*!"        Tag "I_CST_Item"    to VSD_I_CST_Item   
   Accept @ 13,15 Width 10 "N"  picture "#*#.[####]" Tag "I_RBC_ICMS"    to VSD_I_RBC_ICMS
   Accept @ 13,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AICMS"       to VSD_I_AICMS
   Accept @ 13,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ICMS"     to VSD_I_BC_ICMS     
   Accept @ 13,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_ICMS"  to VSD_I_Valor_ICMS

   Label  @ 14,00 "MVA/ST" For "I_AST"
   Accept @ 14,08 Width 08 "N"  picture "#*#.[##]"   Tag "I_MVA"         to VSD_I_MVA
   Accept @ 14,15 Width 10 "N"  picture "#*#.[####]" Tag "I_RBC_ST"      to VSD_I_RBC_ST
   Accept @ 14,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AST"         to VSD_I_AST     
   Accept @ 14,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ST"       to VSD_I_BC_ST  
   Accept @ 14,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_ST"    to VSD_I_Valor_ST

   Label  @ 15,00 "   IPI" For "I_CST_IPI"
   Accept @ 15,08 Width 07 "A2" picture "!*!"        Tag "I_CST_IPI"     to VSD_I_CST_IPI  
   Accept @ 15,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI"     to VSD_I_RBC_IPI
   Accept @ 15,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AIPI"        to VSD_I_AIPI
   Accept @ 15,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_IPI"      to VSD_I_BC_IPI  
   Accept @ 15,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_IPI"   to VSD_I_Valor_IPI

   Label  @ 16,00 " ISSQN" For "I_TISSQN"
   Accept @ 16,08 Width 07 "A1" picture "D,N,I,S,R"  Tag "I_TISSQN"       to VSD_I_TISSQN 
   Accept @ 16,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_ISSQN"    to VSD_I_RBC_ISSQN
   Accept @ 16,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AISSQN"       to VSD_I_AISSQN
   Accept @ 16,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ISSQN"     to VSD_I_BC_ISSQN  
   Accept @ 16,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_ISSQN"  to VSD_I_Valor_ISSQN

   Label  @ 17,00 "   PIS" For "I_CST_PIS"    
   Accept @ 17,08 Width 07 "A2" picture "!*!"        Tag "I_CST_PIS"      to VSD_I_CST_PIS  
   Accept @ 17,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS"      to VSD_I_RBC_PIS
   Accept @ 17,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_APIS"         to VSD_I_APIS
   Accept @ 17,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_PIS"       to VSD_I_BC_PIS  
   Accept @ 17,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_PIS"    to VSD_I_Valor_PIS

   Label  @ 18,00 "COFINS" For "I_CST_COFINS"   
   Accept @ 18,08 Width 07 "A2" picture "!*!"        Tag "I_CST_COFINS"   to VSD_I_CST_COFINS 
   Accept @ 18,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS"   to VSD_I_RBC_COFINS
   Accept @ 18,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_ACOFINS"      to VSD_I_ACOFINS
   Accept @ 18,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_COFINS"    to VSD_I_BC_COFINS  
   Accept @ 18,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

   Label  @ 08,58 "CFOP" For "I_CFOP"
   Accept @ 09,58 Width 08 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 08,67 "NCM" For "I_NCM"
   Accept @ 09,67 Width 11 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM

   Label  @ 10,54 "Frete"    For "I_RAT_FRETE"
   Accept @ 11,55 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_FRETE" to VSD_I_RAT_FRETE
   Label  @ 10,66 "Seguro"   For "I_RAT_SEGURO"
   Accept @ 11,67 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_SEGURO" to VSD_I_RAT_SEGURO

   Label  @ 12,54 "Desconto" For "I_RAT_DESCONTO"
   Accept @ 13,55 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_DESCONTO" to VSD_I_RAT_DESCONTO
   Label  @ 12,66 "OutDesp"  For "I_RAT_OUTDESP"
   Accept @ 13,67 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_OUTDESP" to VSD_I_RAT_OUTDESP
   
   Label  @ 14,51 "VrIPIDevolvido"  For "I_Vr_IPI_Devolvido"
   Accept @ 15,52 width 15 "$" picture "#*#.[##]" Tag "I_Vr_IPI_Devolvido" to VSD_Vr_IPI_Devolvido
   Label  @ 14,67 "%IPIDevolv"  For "I_Porc_IPI_Devolvido"
   Accept @ 15,67 Width 11 "N" picture "#*#.[##]" Tag "I_Porc_IPI_Devolvido" to VSD_Porc_IPI_Devolvido

   Label  @ 16,52 "Servi‡o" For "I_CDSERV"
   Accept @ 17,52 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 16,62 "Munic¡pio" For "I_MUNSERV"
   Accept @ 17,62 Width 12 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 16,73 "UF" For "I_UFSERV"
   Accept @ 17,73 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 18,51 "QtdVol" For "I_Numero_Volumes"
   Accept @ 19,52 Width 07 "S" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 18,58 "PesoLiq" For "I_Peso_Liquido"
   Accept @ 19,58 Width 10 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 18,68 "PesoEmb" For "I_Peso_Embalagem"
   Accept @ 19,68 Width 10 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

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



EndProc    ;  (DigitaI)

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

Switch
  Case Funcao_Registro="Gravar":
       [Numero Pedido_Orcamento   ]=VSD_I_Pedido
       [Item Pedido_Orcamento     ]=VSD_I_Pedido_Item

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

       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
       
       If Not PARAM_UTILIZA_VARIACOES
          Then [Tamanho           ]=VSD_I_Tamanho_Variacao
       EndIf

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Tipo Desconto Item        ]=VSD_I_Tipo_Desconto_Item
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Valor Desconto Item       ]=VSD_I_Valor_Desconto_Item    
       [Preco Total               ]=VSD_I_Preco_Total

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

       [CFO                       ]=VSD_I_CFOP                
       [NCM                       ]=VSD_I_NCM                

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

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

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

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

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [Aliquota de ISSQN         ]=VSD_I_AISSQN
       [ISSQN_BC                  ]=VSD_I_BC_ISSQN
       [Valor do ISSQN            ]=VSD_I_Valor_ISSQN
       [Codigo_Servico            ]=VSD_I_CDSERV   
       [ISSQN_UF                  ]=VSD_I_UFSERV   
       [ISSQN_Municipio           ]=VSD_I_MUNSERV   
                          
       [IPI_CST                   ]=VSD_I_CST_IPI                
       [PIS_CST                   ]=VSD_I_CST_PIS                
       [PIS_Aliquota              ]=VSD_I_APIS     
       [PIS_BC                    ]=VSD_I_BC_PIS             
       [PIS_Valor                 ]=VSD_I_Valor_PIS              

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

       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Codigo da Tabela          ]=VSD_I_Tabela
       [Informacoes_Adicionais    ]=VSD_I_InfAdic
       
       If PARAM_UTILIZA_VARIACOES
          Then If VSD_I_Tamanho_Variacao<>"" Then VSD_I_Tamanho_Variacao = "V["+VSD_I_Tamanho_Variacao+"]" EndIf                 
               If VSD_I_Tamanho_Variacao<>""
                  Then PosI=Search("V[",Upper([Informacoes_Adicionais]))
                       If PosI>0 
                          Then PosF= Search("]",SubStr(Upper([Informacoes_Adicionais]),PosI+2,Len([Informacoes_Adicionais]))) 
       
       INFADIC_A = Rtrim(Ltrim(SubStr([Informacoes_Adicionais],1,PosI-2)))
       INFADIC_B = Rtrim(Ltrim(SubStr([Informacoes_Adicionais],PosI+Len(VSD_I_Tamanho_Variacao),Len([Informacoes_Adicionais]))))
       Switch
         Case INFADIC_A<>"" And INFADIC_B<>"" : [Informacoes_Adicionais] = INFADIC_A+" "+VSD_I_Tamanho_Variacao+" "+INFADIC_B
         Case INFADIC_A=""  And INFADIC_B<>"" : [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao+" "+INFADIC_B
         Case INFADIC_B=""  And INFADIC_A<>"" : [Informacoes_Adicionais] = INFADIC_A+" "+VSD_I_Tamanho_Variacao
         Case INFADIC_B=""  And INFADIC_A=""  : [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao
       EndSwitch  
                          Else [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao           
                       EndIf
                       Release Vars PosI,PosF,INFADIC_A,INFADIC_B
                  Else [Informacoes_Adicionais]=Rtrim(Ltrim(VSD_I_InfAdic)) 
               EndIf            
       EndIf
       
       [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                     

       [IPI Devolvido_Porcentagem ]=VSD_Porc_IPI_Devolvido
       [IPI Devolvido_Valor       ]=VSD_Vr_IPI_Devolvido

       UnLockRecord
       SaveTables
       
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item do Documento         ]

       VSD_I_Pedido                 =[Numero Pedido_Orcamento   ]
       VSD_I_Pedido_Item            =[Item Pedido_Orcamento     ]

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

       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]
       
       If Not PARAM_UTILIZA_VARIACOES
          Then VSD_I_Tamanho_Variacao=[Tamanho                   ]
       EndIf

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]
       VSD_I_Preco_Total            =[Preco Total               ]

       VSD_I_Tipo_Desconto_Item     =[Tipo Desconto Item        ]
       VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Valor_Desconto_Item    =[Valor Desconto Item       ]

       CalcularPrecoTotal_Item()           

       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_NCM                    =[NCM                       ]

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

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

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

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

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

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

       VSD_I_Numero_Volumes         =[Volumes                   ]
       VSD_I_Peso_Liquido           =[Peso Liquido              ]
       VSD_I_Peso_Embalagem         =[Peso Embalagem            ]
       VSD_I_Comissao_Item          =[Comissao do Item          ]
       VSD_I_Tabela                 =[Codigo da Tabela          ]
       VSD_I_InfAdic                =[Informacoes_Adicionais    ]
       
       If PARAM_UTILIZA_VARIACOES
          Then VSD_I_Tamanho_Variacao=""
               If PARAM_UTILIZA_VARIACOES
                  Then VSD_I_Tamanho_Variacao=""
                       If VSD_I_InfAdic<>""
                          Then PosI=Search("V[",Upper(VSD_I_InfAdic))
                               If PosI>0
                                  Then PosF = Search("]",SubStr(Upper(VSD_I_InfAdic),PosI+2,Len(VSD_I_InfAdic)))
                                       VSD_I_Tamanho_Variacao = SubStr(VSD_I_InfAdic,PosI+2,PosF-1)
                               EndIf
                               Release Vars PosI,PosF 
                       EndIf
                       
                       If PARAM_DADOS_ITEM_RESUMO<>"S"
                          Then VSD_I_Tamanho_Variacao = VSD_I_Tamanho_Variacao 
                       EndIf   
               EndIf
          Else VSD_I_Tamanho_Variacao=""
       EndIf   
              
       VSD_I_Pedido_Compra          =[Numero_Pedido_Compra      ]
       VSD_I_Item_Pedido_Compra     =[Item_Pedido_Compra        ]
       
       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_Porc_IPI_Devolvido       =[IPI Devolvido_Porcentagem ]
       VSD_Vr_IPI_Devolvido         =[IPI Devolvido_Valor       ]

EndSwitch
EndProc   ; (Registro_Item)

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

INICIO_DIALOG=True
Moveto [Item do Documento]
Locate [NotaC->Codigo da Empresa],[NotaC->Numero do Documento],
       [NotaC->Serie do Documento],SEQIT
CopyToArray RegItem
If RegItem["Situacao_Item"]="C" 
   Then ITEM_CANCELADO = "*CANCELADO*"
   Else ITEM_CANCELADO = ""
EndIf  
QUANT   = [Quantidade          ]
CTTOTAL = NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ]=[NotaC->Codigo da Tabela     ]
EndIf
Registro_Item("Ler")  

If Search("CUP",[NotaC->Tipo do Documento])>0 And Upper(RegItem["Situacao_Item"])="C"
   Then VSD_I_InfAdic = "** ITEM CANCELADO NO CUPOM **"
EndIf          
                
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok

If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                Exclusao_I()
        EndIf
EndIf

EndProc   ; (Finaliza_Registro)

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

Moveto "NotaC"

PARAM_FT_GRUP = "ITENS"
Play "FT_GRUP"

CHAVEF=0
CHAVEV=1
COPIOU_REGISTRO=False

CALC_OF()

If CALCULO_NF_AUTOMATICO="L"
  Then 
       Moveto [Valor Nota Fiscal]
  else
       Moveto [Valor Despesas Acessorias]
Endif

While True

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

      If Field()="Condicao de Pagamento" Or
         Field()="Forma de Pagamento"
         Then TECLA=" Esc=Retornar  F1=Tabelas  "
         Else TECLA=" Esc=Retornar              "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgUp/PgDn "

      Prompt TECLA

      Wait Field
           Until "ESC","ENTER","PGDN","F8","DOWN","PGUP",-33,"F1","F4","F","D","F6","F9","F7"
           
    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F4  ~C~alcula Vencimentos  ": " Calcula os Vencimentos           " :"F4",
             "F8  ~V~encimentos          ": " Vencimentos                      " :"F8",
             "F6  T¡tulo de Crˆdito      ": " Referenciar T¡tulo de Crˆdito    " :"F6",
             "F7  Gerar T¡tulo de Crˆdito": " Gerar T¡tulo de Crˆdito          " :"F7",
             "~C~ancelar                 ": " Cancelar a Opera‡„o              " : "CANCELAR"
            EndMenu
            
            To MenuVar
            Echo Off
            
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf                                         
            RetVal=MenuVar
    EndIf

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

           Nome_Cartao=""
           Numero_Cartao=""
           If [Forma de Pagamento]="CT" Or
              [Forma de Pagamento]="CD" Or
              [Forma de Pagamento]="CL"
              Then CHAVEV=1
                   If Not Digita_Cartao()
                      Then UnLockRecord
                           Moveto "NotaC"
                           Loop
                   EndIf
           EndIf
           Calc_Venctos()
           Moveto [Tipo de Pagamento ]

      Case RetVal="F7":
           VrTCCredito_Digita()

      Case RetVal="F6":
           Play "FT_LTC"

      Case RetVal="F8" or RetVal="DOWN":    
           If Not Checa_Supervisor()
              Then Loop
           EndIf

           Moveto "NotaV"
           While True
               CHAVEV()
               If CHAVEV=9 Then QuitLoop EndIf
               Controla_EdicaoV()
           EndWhile
           Moveto "NotaC"
           Moveto [Tipo de Pagamento]
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento]) Then Mensagem("Tipo Pagto Invalido !") Loop EndIf
           If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
              Then Mensagem("Forma Pagto Invalido !")
                   Loop
           EndIf
           If Search("VEND",[NotaC->Descricao da Destinacao])>0
              Then If [Tipo de Pagamento]<>"O"
                      Then Moveto "NotaV"
                           TOT_VECTOS=0
                           CHAVEV=0
                           Scan
                             If [Data]<[NotaC->Data de Emissao]
                                Then CHAVEV=1
                                     MSG="Vencimento invalido !// //"
                                     MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                                     MSG=MSG+" inferior a data de emiss„o !"
                                     Mensagem(MSG)
                             EndIf
                             TOT_VECTOS=TOT_VECTOS+[Valor]
                           EndScan
                           Moveto "NotaC"
                           If CHAVEV=1
                              Then Loop
                           EndIf
                           
                           msg=""
                           Switch
                             case PARAM_TITCRED="T":
                                if StrVal(TOT_VECTOS-[Valor TC])<>StrVal([Valor Nota Fiscal])
                                   then msg="O valor total dos vencimentos menos t¡tulo de cr‚dito,// difere do valor da nota fiscal !" 
                                endif   
                             
                             otherwise                                : 
                               If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                                  Then msg="O valor total dos vencimentos difere do valor da nota fiscal !"
                               EndIf
                               
                           endSwitch
                           if msg<>""
                              then mensagem(msg)
                           endif   
                   EndIf
           EndIf
           
           CHAVEF=5
           QuitLoop

      Case RetVal="F":
           If CALCULO_NF_AUTOMATICO="L"
              then Mensagem("Calculo nÆo ‚ autom tico, informe o frete em cada item !")
                   loop
              
              else
                   CHAVEV=4
                   DIGITA_FRETE()
                   CALC_OF()
           endif
                   
      Case RetVal="D":
           If CALCULO_NF_AUTOMATICO="L"
              then Mensagem("Calculo nÆo ‚ autom tico, informe o desconto em cada item !")
                   loop
              else
                   CHAVEV=4
                   If Not Field()="Forma de Pagamento"
                          Then DIGITA_DESCTO()
                               CALC_OF()
                          Else KeyPress "D"
                   EndIf
           EndIf

      Case RetVal="ESC":
        Switch
           Case Field()="Valor Despesas Acessorias":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]

           Case Field()="Valor Nota Fiscal":
                If CALCULO_NF_AUTOMATICO="L"
                   Then CHAVEF=9
                        QuitLoop
                   Else Moveto [Valor do Seguro  ]
                EndIf   

           Case Field()="Tipo de Pagamento":
                If CALCULO_NF_AUTOMATICO="L"
                   Then Moveto [Valor Nota Fiscal]
                   Else Moveto [Valor do Seguro  ]
                EndIf   

           Case Field()="Forma de Pagamento":
                Moveto [Tipo de Pagamento]
                
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
          Case  Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor Despesas Acessorias": Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro"          : 
                       If CALCULO_NF_AUTOMATICO="L"
                          Then Moveto [Valor Nota Fiscal]
                          Else Moveto [Tipo de Pagamento ]
                       EndIf   
                EndSwitch
                CALC_OF()
           Case Field()="Valor Nota Fiscal":
                Moveto [Tipo de Pagamento ]
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then [Numero de Parcelas]=BlankNum()
                        [Composicao de Dias]=""
                        [Forma de Pagamento]=""
                   Else Moveto [Numero de Parcelas]
                EndIf
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

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

Moveto "NotaC"
Moveto [Codigo da Transportadora]

While True

      TECLA=" Esc=Retornar  "
      If Field()="Codigo da Transportadora" Or
         Field()="UF Transport"
         Then TECLA=TECLA + "F1=Tabelas  "
         Else TECLA=TECLA + "            "
      EndIf
      TECLA=TECLA+"F8=Observa‡„o  Pgup/PgDn=Finalizar  "

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

      Prompt TECLA

      Wait Field
           Until "F1","ESC","ENTER","PGDN","PGUP","F8"

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Transportadora" Or
              Field()="UF Transport"
              Then CONSULTAF1()
           EndIf
           If Field()="Frete por Conta"
              Then FreteporConta()
           EndIf   
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Transportadora":
                CHAVED=9
                QuitLoop
           Case Field()="Placa do Veiculo":
                Moveto [Codigo da Transportadora]
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGUP":
           CHAVED=9
           QuitLoop
      Case Retval="PGDN":
           If IsBlank([Codigo da Transportadora]) Then Mensagem("Transportador Inv lido !")   Loop EndIf
           If IsBlank([Frete por Conta])          Then Mensagem("Frete por conta Inv lido !") Loop EndIf

           If PARAM_COMIS_VENCTO="S"
              Then RATEIO_COMISSAO_VENCTOS()
           EndIf

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

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

           ATUA_DADOS()

           QuitLoop
      Case Retval="F8":
           CampoAnt=Field()
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo da Transportadora":
                If IsBlank([]) Then Loop EndIf
                Moveto [Placa do Veiculo]
           Case Field()="Frete por Conta":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                Moveto [Numero de Volumes]
           Case Field()="Peso Liquido":
                Moveto [Numero de Volumes]
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaD)

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


If Not Checa_CompDias([NotaC->Composicao de Dias])
   Then Return
EndIf

If not IsAssigned(PARAM_DATA_BASE) then PARAM_DATA_BASE=""  endif
If not IsAssigned(PARAM_UTILIZA_ENTRADA) then PARAM_UTILIZA_ENTRADA=""  endif

GERDUP_CDESCTO="0"
If SYS_CODIGO_CLIENTE="0051" And [NotaC->Valor Desconto]>0 
   Then Moveto [Condicao de Pagamento]
        If Busca_Lookup("Condicao de Pagamento",[NotaC->Condicao de Pagamento],"SM")
           Then GERDUP_CDESCTO=REG_BUSCA_LOOKUP["GerDup_InstrucaoDescto"]
        EndIf
EndIf           



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

temcredito=false
vrtitcred =0

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

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

endwhile

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

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

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

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

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

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

;-- Verifica Novo VR_NF para parcelamentos -------------------------------------
If tementrada
   Then VR_NF = VR_NF-VRENTRADA
EndIf
if temcredito
   then VR_NF = VR_NF-vrtitcred
endif
If PARAM_TITCRED="T" 
   then VR_NF = VR_NF+[NotaC->Valor TC]
endif
 
If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
   [NotaC->Frete Incluso na Nota]="+"
   Then VR_NF = VR_NF-[NotaC->Valor do Frete]
EndIf

if VR_NF<=0  ; creditos > vrnf
   then Moveto "NotaC"
        return
endif

;-- Calcula valor da parcela e diferen‡a ---------------------------------------
AUX_NP=NP
If tementrada
   Then AUX_NP=NP-1
EndIf

VRVENCTO = NDecimal(((VR_NF)/AUX_NP),2)

if SYS_CODIGO_CLIENTE="0222" Or
   SYS_CODIGO_CLIENTE="0232"  
   then VRVENCTO = int(VRVENCTO)
endif   
VRDIFERE = VR_NF-(VRVENCTO*AUX_NP)

If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
   [NotaC->Frete Incluso na Nota]="+"
   Then VRDIFERE = VRDIFERE + [NotaC->Valor do Frete]
EndIf

;-- Regra gera duplicata com ou sem instrucao de desconto ----------------------
GERDUP_VRDESCTO=0
Switch
  Case GERDUP_CDESCTO="1": GERDUP_VRDESCTO = [NotaC->Valor Desconto]
  Case GERDUP_CDESCTO="2": GERDUP_VRDESCTO = Round(([NotaC->Valor Mercadoria]*GERDUP_TXDESCTO)/100,2)
EndSwitch
VRORIGDESCTO   =NDecimal(GERDUP_VRDESCTO/AUX_NP,2)
VRORIGDIFDESCTO=GERDUP_VRDESCTO-(VRORIGDESCTO*AUX_NP)

Switch
  Case GERDUP_CDESCTO="1": vrbaseoperacao = VR_NF + GERDUP_VRDESCTO
                           VRORIGVENCTO   = NDecimal((vrbaseoperacao/AUX_NP),2)
                           VRORIGDIFERE   = (vrbaseoperacao)-(VRORIGVENCTO*AUX_NP)
                           If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
                              [NotaC->Frete Incluso na Nota]="+"
                              then VRORIGDIFERE = VRORIGDIFERE + [NotaC->Valor do Frete]
                           endif    

  OtherWise              : VRORIGVENCTO   = VRVENCTO
                           VRORIGDIFERE   = VRDIFERE
EndSwitch  

;-- Gerar parcelas -------------------------------------------------------------
j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[NotaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,(Len([NotaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([NotaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,Len([NotaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf
  DTVENCTO=DTBASE
  
  While True
    Moveto [Sequencia]
    End
    SEQ = [Sequencia]
    Down

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

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

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

  ;-- verifica valores ---------------------------------------------------------
  [Duplicata_VrOriginal   ]=BlankNum()
  [Duplicata_VrDesconto   ]=BlankNum()
  [Duplicata_DtLimDesconto]=BlankDate()

  Switch
    Case i=1 And tementrada  : [Valor            ]=VRENTRADA
                                                   
    Case i<>NP               : [Valor            ]=VRVENCTO
                               If GERDUP_CDESCTO>"0" 
                                  Then [Duplicata_VrOriginal   ]=VRORIGVENCTO
                                       [Duplicata_VrDesconto   ]=VRORIGDESCTO
                                       [Duplicata_DtLimDesconto]=[Data] 
                               EndIf

    Case i=NP                : [Valor            ]=VRVENCTO+VRDIFERE
                               If GERDUP_CDESCTO>"0" 
                                  Then [Duplicata_VrOriginal   ]=VRORIGVENCTO+VRORIGDIFERE
                                       [Duplicata_VrDesconto   ]=VRORIGDESCTO+VRORIGDIFDESCTO
                                       [Duplicata_DtLimDesconto]=[Data] 
                               EndIf
  EndSwitch

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

  UnLockRecord

  i=i+1
EndWhile

Moveto "NotaC"
Sleep 500

LimpAguarde()

EndProc

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Closed Checa_CompDias(Texto)
UseVars AutoLib, ErrorProc

Private Texto,Contador_Repeticao,ncc

Contador_Repeticao=0
For ncc From 1 To Len(Texto)
    If Asc(SubStr(Texto,ncc,1))<47 Or
       Asc(SubStr(Texto,ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
            Return False
       Else If SubStr(Texto,ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr(Texto,1,1)="/" Or
               SubStr(Texto,Len(Texto),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return False
            EndIf
    EndIf
EndFor
Return True
EndProc

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

If PARAM_TABPR_ITEM="S"
   Then TABPR=[NotaI->Codigo da Tabela]
   Else TABPR=[NotaC->Codigo da Tabela]
EndIf
CPGTO=[NotaC->Condicao de Pagamento  ]

TX_DESCTO_CLIE=0

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

CodItem         =VSD_I_Codigo_Item
ITEM_PROMOCIONAL="N"
PesqOk          =False

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

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

        If OpcaoP="Checa"
           Then Return True
        EndIf

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

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

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

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

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

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

EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Data_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf      

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9   :
           Temp=False
      Case Evento["KeyCode"] = -59 :
      Case Evento["KeyCode"] = 27  :
      ;;;***** Data Calculo Vencto****
           Switch
             Case Campo="Data_Base"      : CancelDialog
           EndSwitch
      Case Evento["KeyCode"] = 13  : 
      ;;;***** Data Calculo Vencto****
           Switch
             Case Campo="Data_Base":
                  VSD_Data_Base=ControlValue("Data_Base")
                  AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "

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

If OP_SHOWD="Cheque" And CHAVEV=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
Mouse Hide
RefreshDialog
Return TEMP
EndProc

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

  SetaCorRegistro("Editar")
  While True

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

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

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("NotaV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then If [Forma de Pagamento]="RP" And [Observacao]<>""
                                  Then Mensagem("NÆo ‚ poss¡vel excluir um lan‡amento ("+[Observacao]+") resgatado!")
                                       UnLockRecord
                                  Else If QuerExcluir("")
                                          Then Del
                                          Else UnLockRecord
                                       EndIf   
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             while true
               if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
                  (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" )) Or
                  [Forma de Pagamento]="RP"  
                  then skip
                       if eot() then quitloop endif
                  else unlockrecord
                       del
               endif        
             
               if RecordStatus("New")
                  then quitloop
               endif   
             endwhile
             QuitLoop
              
        Case Retval="ESC":
             CHAVEV=9
             Del
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVEV=0
                Else CHAVEV=1
                     End Down
                     [Sequencia]=SEQ
                     UnLockRecord
                     Locate SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc   ;  (ChaveV)

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DigitaV()
If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else
        if (PARAM_TITCRED="T" and [Forma de Pagamento]="TC") Or [Forma de Pagamento]="RP" 
           then Mensagem("Edi‡Æo para '"+[Forma de Pagamento]+"' nÆo permitida!")
                return
        EndIf   
     
        Moveto [Forma de Pagamento]
EndIf
FPAGTO=[Forma de Pagamento]
While True

  TECLA= " Esc=Retornar  "
  If Field()="Forma de Pagamento"
     Then TECLA=TECLA+"F1=Tabelas  "
     Else TECLA=TECLA+"            "
  EndIf
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field
       Message Field()
       Until "ESC","ENTER","DEL","F1"

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

;*******************************************************************************
;* Atualiza Demais Dados                                                       *
;*******************************************************************************
Proc Atua_Dados()

Moveto "NotaC"
UnLockRecord
KeyPress "F7"

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa  ],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento ]
If RetVal
   Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
              [Numero do Documento]=[NotaC->Numero do Documento] And
              [Serie do Documento ]=[NotaC->Serie do Documento ]
              
          If [NotaC->Tipo Movimento Estoque]="S"
             Then While True
                    Moveto "\\Sistemas\\Estoque\\EstqPrm"
                    Moveto [Codigo da Empresa]
                    Locate [NotaC->Codigo da Empresa],
                           [NotaI->Codigo do Item]
                    If Not RetVal
                       Then End Down
                            [Codigo da Empresa   ]=[NotaC->Codigo da Empresa]
                            [Codigo do Item      ]=[NotaI->Codigo do Item   ]
                            If IsLockRecord()
                               Then Del
                               Else QuitLoop
                            EndIf
                       Else If Not IsLockRecord()
                               Then QuitLoop
                            EndIf
                    EndIf        
                  EndWhile
                  If Not IsBlank([NotaC->Data de Saida]) And 
                     (AlinhM(StrVal(Month([NotaC->Data de Emissao])),2) = AlinhM(StrVal(Month([NotaC->Data de Saida])),2))  
                     Then If [NotaC->Data de Saida]>[Data da Ultima Saida]
                             Then [Data da Ultima Saida]=[NotaC->Data de Saida]
                           EndIf
                     Else If [NotaC->Data de Emissao]>[Data da Ultima Saida]
                             Then [Data da Ultima Saida]=[NotaC->Data de Emissao]
                           EndIf
                  EndIf
                  UnLockRecord
          EndIf

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

Moveto "NotaC"
;*********** Atualiza Ficha Financeira do Cliente ***********
If [NotaC->Tipo]="C" And
   [NotaC->Tipo Movimento Estoque]="S" And
   ( (Search("VEND",[NotaC->Descricao da Destinacao])>0) Or
     (Search("SERV",[NotaC->Descricao da Destinacao])>0) )
   Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
        Moveto [Codigo]
        Locate [NotaC->Codigo]
        If Not RetVal
           Then End Down
                [Codigo                  ]=[NotaC->Codigo]
                [Data da Primeira Compra ]=[NotaC->Data de Emissao]
                [Valor da Primeira Compra]=[NotaC->Valor Nota Fiscal]
        EndIf
        If IsBlank([Data da Primeira Compra ])
           Then [Data da Primeira Compra ]=[NotaC->Data de Emissao  ]
                [Valor da Primeira Compra]=[NotaC->Valor Nota Fiscal]
        EndIf
        If [NotaC->Valor Nota Fiscal]>=[Maior Fatura]
           Then [Maior Fatura        ]=[NotaC->Valor Nota Fiscal]
                [Data da Maior Fatura]=[NotaC->Data de Emissao  ]
        EndIf
        If [Data da Ultima Compra ]<=[NotaC->Data de Emissao  ]
           Then [Data da Ultima Compra ]=[NotaC->Data de Emissao  ]
                [Valor da Ultima Compra]=[NotaC->Valor Nota Fiscal]
        EndIf
        UnLockRecord
EndIf
Moveto "NotaC"

APLIC_ORIGEM="NOTA"

EMPRESAFISC=[NotaC->Codigo da Empresa  ]
NOTAFISC   =[NotaC->Numero do Documento]
SERIEFISC  =[NotaC->Serie do Documento ]

CANCELA_DUP     =False
CX_CONTA_CAIXA  =PARAM_CONTA_CAIXA
DP_NUMERO_GERADO=""

;-- Estorno de Movimenta‡Æo Financeira -----------------------------------------
If DP_GERA_DUPLICATA="S"
   then

       Do_It!
       SaveTables
        
       View NOWINDOW "\\Sistemas\\Ctapag\\Titulos"  
       View NOWINDOW "\\Sistemas\\Ctapag\\Titbaixa" 
   
       View NOWINDOW "\\Sistemas\\CtaRec\\Duplic"
       View NOWINDOW "\\Sistemas\\CtaRec\\Dupbaixa"

       View NOWINDOW "\\Sistemas\\CtaCor\\SaldCont"
       View NOWINDOW "\\Sistemas\\CtaCor\\MovCont"
   
       View NOWINDOW "DupC"
       View NOWINDOW "DupI"
       View NOWINDOW "DupNF"
       
       CoEditKey
       
        OP_MOVCX        ="ESTORNAR"
        OP_MOVDP        ="ESTORNAR"

        ;-- saidas -------------------------------------------------------------
        Estorno_CR_Ok   =True
        Estorno_CPTC_Ok =True
        Estorno_CPRP_Ok =True
        
        If PARAM_AVISTAAUTOMAT="S"
           Then Play("FT_CAIXA")
        EndIf
        If PARAM_APRAZOAUTOMAT="S"
           Then If PARAM_AVISTADUPLIC="S"
                   Then Play("FT_CAIXA")
                EndIf
                Play("FT_DUPLI")
        EndIf
        Play("FT_GTCS")  ;Titulo de Cr‚dito
        Play("FT_GRP")   ;Resgate de Pontos
                      
        ;-- Entradas -----------------------------------------------------------
        Estorno_CP_Ok  =True
        Estorno_CRTC_Ok=True
        
        If PARAM_AVISTAAUTOMAT="S"
           Then Play("FT_CXAS")
        EndIf
        If PARAM_APRAZOAUTOMAT="S"
           Then If PARAM_AVISTADUPLIC="S"
                   Then Play("FT_CXAS")
                EndIf
                Play("FT_TITUL")
        EndIf
        Play("FT_GTCS")  ;Titulo de Cr‚dito
        Play("FT_GRP")   ;Resgate de Pontos

        ;-- Gera‡Æo de Movimenta‡Æo Financeira -----------------------------------------
        OP_MOVCX="ATUALIZAR"
        OP_MOVDP="ATUALIZAR"

        ;-- saidas -------------------------------------------------------------
        If [NotaC->Tipo Movimento Estoque]="S" And [NotaC->Valor DebitoCredito]<=0 ;todas saidas e troca com d‚bito
           Then 
                if [NotaC->Tipo de Pagamento]<>"O" ; Not outros
                   then
                        if PARAM_AVISTAAUTOMAT="S"
                           then 
                               CX_VRLANC=0 ; zerar para acumular saidas
                               Moveto "NotaV"
                               Moveto [Codigo da Empresa]
                               Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                               If RetVal
                                  Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
                                             [Numero do Documento]=[NotaC->Numero do Documento] and
                                             [Serie do Documento ]=[NotaC->Serie do Documento ]
                                  
                                         If [Data                       ]<=[NotaC->Data de Emissao] And
                                            [Forma de Pagamento]<>"NP" And
                                            [Forma de Pagamento]<>"CD" And
                                            [Forma de Pagamento]<>"CT" And 
                                            [Forma de Pagamento]<>"CL" And 
                                          ( [Forma de Pagamento]<>"DE" Or SYS_CODIGO_CLIENTE="0227" )
                                            Then 
                                                 If ((PARAM_TITCRED="T" And [Forma de Pagamento]="TC") Or [Forma de Pagamento]="RP") And [Numero do Cartao]<>"" 
                                                    then ;nÆo soma, utilizando TC selecionado
                                                    else CX_VRLANC=CX_VRLANC+[Valor]
                                                 endif
                                         EndIf
                                         
                                         Skip
                                         If EOT() Then QuitLoop EndIf
                                       EndWhile
                                       
                                       If CX_VRLANC>0 And Verifica_Caixa([NotaC->Codigo da Empresa])
                                          Then Play("FT_CAIXA")
                                       EndIf
                               EndIf
                        endif
                        if PARAM_APRAZOAUTOMAT="S"
                           then If Estorno_CR_Ok
                                   Then Play("FT_DUPLI")
                                EndIf
         
                        EndIf
                endif           
                
                If Estorno_CPTC_Ok
                   then Play("FT_GTCS")
                endif
                
                If Estorno_CPRP_Ok =True
                   Then Play("FT_GRP")
                EndIf   
        endif


        ;-- Entradas -----------------------------------------------------------
        If [NotaC->Tipo Movimento Estoque]="E" or
           ( [NotaC->Tipo Movimento Estoque]="S" And [NotaC->Valor DebitoCredito]>0 ) ;entradas e troca com cr‚dito
           Then 
                if [NotaC->Tipo de Pagamento]<>"O" ; not outros
                   then if PARAM_AVISTAAUTOMAT="S"
                           then
                               CX_VRLANC=0 ; zerar para acumular entradas
                               Moveto "NotaV"
                               Moveto [Codigo da Empresa]
                               Locate EMPRESAFISC, NOTAFISC, SERIEFISC
                               If RetVal
                                  Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
                                             [Numero do Documento]=[NotaC->Numero do Documento] and
                                             [Serie do Documento ]=[NotaC->Serie do Documento ]
                                  
                                           If ((PARAM_TITCRED="T" And [Forma de Pagamento]="TC") Or [Forma de Pagamento]="RP") And [Numero do Cartao]<>"" 
                                              then
                                                   ;nÆo soma, utilizando TC selecionado
                                              else 
                                                   CX_VRLANC=CX_VRLANC+[Valor]
                                           endif
                                         
                                         Skip
                                         If EOT() Then QuitLoop EndIf
                                       EndWhile
                                       
                                       If CX_VRLANC>0 And Verifica_Caixa([NotaC->Codigo da Empresa])
                                          Then Play("FT_CXAS")
                                       EndIf
                               EndIf
                        endif
                        
                        if PARAM_APRAZOAUTOMAT="S"
                           then If Estorno_CP_Ok
                                   Then Play("FT_TITUL")
                                EndIf
                        Endif
                endif        
                        
                If Estorno_CPTC_Ok
                   then Play("FT_GTCS")
                endif   
                
                If Estorno_CPRP_Ok =True
                   Then Play("FT_GRP")
                EndIf
                   
        endif
        
       
       Do_It!
       SaveTables
        
       Moveto "\\Sistemas\\Ctapag\\Titulos"   ClearImage
       Moveto "\\Sistemas\\Ctapag\\Titbaixa"  ClearImage
   
       Moveto "\\Sistemas\\CtaRec\\Duplic"    ClearImage
       Moveto "\\Sistemas\\CtaRec\\Dupbaixa"  ClearImage

       Moveto "\\Sistemas\\CtaCor\\SaldCont"  ClearImage
       Moveto "\\Sistemas\\CtaCor\\MovCont"   ClearImage
       
       Moveto "DupC"  ClearImage
       Moveto "DupI"  ClearImage
       Moveto "DupNF" ClearImage
   
       Moveto "NotaC"
       CoEditKey  
        
endif
;-------------------------------------------------------------------------------

;-- Estorno de Movimenta‡Æo Financeira -----------------------------------------
Tab_Ref="NotaC"
If REQ_TRANSF_DEVOLUCAO("VERIFICA")  
   Then Do_It!
        SaveTables
        
        View NOWINDOW "\\Sistemas\\Estoque\\Requisit"
        View NOWINDOW "\\Sistemas\\Estoque\\RqCabeca"
        View NOWINDOW "\\Sistemas\\Estoque\\Rqitem"
        CoEditKey
        
        REQ_TRANSF_DEVOLUCAO("TRANSFERENCIA")
        
        Do_It!
        SaveTables 
        
        Moveto "\\Sistemas\\Estoque\\Requisit" ClearImage
        Moveto "\\Sistemas\\Estoque\\RqCabeca" ClearImage
        Moveto "\\Sistemas\\Estoque\\Rqitem"   ClearImage
        CoEditKey
EndIf

Moveto "NotaC"

If PARAM_CHEQUES       = "S" Then CHEQUES()        EndIf
;;;If PARAM_CONSIGNACAO   = "S" Then CONSIGNACAO()    EndIf
If PARAM_TRANSFERENCIA = "S" Then TRANSFERENCIA()  EndIf

Moveto "NotaC"
UnLockRecord
KeyPress "F7"
EndProc     ; (Atua_Dados)

;*******************************************************************************
;* Rotina p/ Estornar Movimenta‡Æo                                             *
;*******************************************************************************
Proc REQ_TRANSF_DEVOLUCAO(PARAM)
Private TEMP

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

;If SYS_CODIGO_CLIENTE<>"0294" Or Upper(SubStr(Directory(),1,2))<>"X:"
;   Then Return False
;EndIf   

If PARAM="VERIFICA"
   Then TEMP=False
        Switch     
           Case Upper(Tab_Ref)="NOTAC" And ([NotaC->Codigo da Empresa]="0001"   And 
                                            [NotaC->Tipo Movimento Estoque]="E" And 
                                            Search("DEVOL",Upper([NotaC->Descricao da Destinacao]))>0)   :
                TEMP=True
           Case Upper(Tab_Ref) = "FATURAC" And ([FaturaC->Codigo da Empresa]="0001"   And 
                                                [FaturaC->Tipo Movimento Estoque]="E" And
                                                Search("DEVOL",Upper([FaturaC->Descricao da Destinacao]))>0) :
                TEMP=True      
        EndSwitch
        Return TEMP
EndIf   

TIPO_REQUISICAO = PARAM
Play "FT_RQNC"

Release Vars TIPO_REQUISICAO

EndProc ;REQ_TRANSF_DEVOLUCAO()

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()
CUSTO=BlankNum()

If [NotaC->Atualiza Estoque]<>"S" Or IsBlank([NotaI->Codigo do Item]) 
   Then Return
EndIf

If Not TipoItem_ControlaEstoque([NotaI->Tipo do Item])
   Then Return
EndIf

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([NotaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [NotaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[NotaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [NotaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))

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

  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

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

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

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

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

If [NotaC->Atualiza Estoque]<>"S" Or [NotaC->Tipo Movimento Estoque]="E" Or IsBlank([NotaI->Codigo do Item])
   Then Moveto "NotaI"
        Return True
EndIf

If Not TipoItem_ControlaEstoque([NotaI->Tipo do Item])
   Then Moveto "NotaI"
        Return True
EndIf

If Not IsAssigned(PARAM_CHECA_ESTOQUE_SEMMENSSAGEM) Then PARAM_CHECA_ESTOQUE_SEMMENSSAGEM = True EndIf

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([NotaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [NotaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[NotaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [NotaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))                  

Moveto "\\Sistemas\\Estoque\\SdEstq"
Locate [NotaC->Codigo da Empresa],
       [NotaI->Codigo do Item   ], ANO_EST, MES_EST
If Not RetVal
   Then If Not Cria_Ficha([NotaC->Codigo da Empresa],[NotaI->Codigo do Item],False)
           Then Moveto "NotaI"
                Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
                Return False
        EndIf
EndIf

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

Moveto "NotaI"
If NOVOSALDO>=0
   Then Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
        Return True
   Else If PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
           Then Mensagem("Estoque Insuficiente em "+StrVal(Format("W11.3,EIC",NOVOSALDO))+", Verificar !")
        EndIf   
        Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc   ; (Checa_Estoque)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([NotaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [NotaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[NotaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [NotaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
ESTQ_MES = AlinhM(StrVal(Month(AUX_DATA)),2)
ESTQ_ANO = StrVal(Year(AUX_DATA))         

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

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

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc Exclusao_C()
Private dtdocto, ANT_GRAVA_LOG

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
;NÆo vai ocorrer LOG de itens exclu¡dos se cabe‡a for exclu¡da
ANT_GRAVA_LOG = GRAVA_LOG
GRAVA_LOG     = False

MSG="A exclus„o desta Nota Fiscal n„o estorna os //"
MSG=MSG+"poss¡veis lan‡amentos gerados no //"
MSG=MSG+"Contas a Receber ou no Caixa ! // //"
MSG=MSG+"Se necess rio o estorno, o fa‡a manualmente ! // //"
MSG=MSG+"Confirma a Exclus„o desta Nota Fiscal ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

Moveto "NotaC"
CopyToArray EXCLUSAO_NOTAC
dtdocto=[Data de Emissao]

DESTIN_ATUALIZA_PEDIDOS=""
Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[NotaC->Codigo da Destinacao],"")
   Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
EndIf

Moveto "NotaI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "NotaV"
While RecordStatus("New")=False
  Del
EndWhile



Moveto "NotaC"
[Numero Pedido_Orcamento]=""
UnLockRecord
KeyPress "F7"

Moveto "NotaCC"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile          

Moveto "NotaIAD"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile          

Moveto "NotaIC"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile          

Moveto "NotaICM"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile          

Moveto "NotaIDD"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile          

Moveto "NotaIDV"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile          

if sys_codigo_cliente="0112"
   then
        Moveto "NotaIL"
        Moveto [Codigo da Empresa]
        Locate [NotaC->Codigo da Empresa],
               [NotaC->Numero do Documento],
               [NotaC->Serie do Documento]
        While  [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
               [Numero do Documento]=[NotaC->Numero do Documento] And
               [Serie do Documento ]=[NotaC->Serie do Documento ]
               Del
               If EOT() Then QuitLoop EndIf
        EndWhile
endif

Moveto "NotaR"            
Moveto [Codigo da Empresa]
Locate EXCLUSAO_NOTAC["Codigo da Empresa"  ],
       EXCLUSAO_NOTAC["Numero do Documento"],
       EXCLUSAO_NOTAC["Serie do Documento" ]
If RetVal
    Then  
         While [Codigo da Empresa  ]=EXCLUSAO_NOTAC["Codigo da Empresa"  ] And
               [Numero do Documento]=EXCLUSAO_NOTAC["Numero do Documento"] And
               [Serie do Documento ]=EXCLUSAO_NOTAC["Serie do Documento" ]

               If [Modelo_Documento]="2C"
                  Then Estorna_Cupom()
                       moveto "NotaR"
               EndIf

               Del
               If EOT() Then QuitLoop EndIf
         EndWhile
         Moveto "NotaC"
         Moveto [Codigo da Empresa]
         Locate EXCLUSAO_NOTAC["Codigo da Empresa"  ],
                EXCLUSAO_NOTAC["Numero do Documento"],
                EXCLUSAO_NOTAC["Serie do Documento" ]
EndIf
Release Vars EXCLUSAO_NOTAC

Moveto "NotaC"
CHAVEC=8
CHEQUES()
;;CONSIGNACAO()
TRANSFERENCIA()
TROCA() 

Moveto "NotaC"
KeyPress "F7"
GRAVA_LOG = ANT_GRAVA_LOG
If GRAVA_LOG Then Grava_LogEx("NotaC") EndIf
Del

if year(dtdocto)<year(today()) or
   ( month(dtdocto)<month(today()) and year(dtdocto)=year(today()) )
   then msg=    "Opera‡Æo Finalizada!// //"
        msg=msg+"* Devido a data deste documento ser referente a mˆs anterior,//"
        msg=msg+"  ser  necess rio que vocˆ reprocesse  o  estoque  at‚  hoje,//"
        msg=msg+"  para que o saldos dos mesmos fiquem corretos !             "
        Mensagem(msg)
   else 
        Mensagem("Opera‡Æo Finalizada!")
endif

Return True
EndProc    ;  (Exclusao_C)

;*******************************************************************************
;* Atualizacao Troca                                                           *
;*******************************************************************************
Proc Estorna_Cupom()

Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate [NotaR->Codigo da Empresa ],
       [NotaR->Numero_Documento  ],
       [NotaR->Serie_Documento   ]
If RetVal
   Then [Cupom Fiscal Faturado]=""
        UnLockRecord
EndIf
        
EndProc

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Exclusao_I()
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
CHAVEI=8

ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()

Moveto "NotaI"
SEQIT=[Item do Documento]

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

If Not NF_Cancelada
   Then If GRAVA_LOG Then Grava_LogEx("Item da Nota") EndIf
        Del
EndIf

;APLIC_ORIGEM="NOTA"
;Play "FT_IMP"

EndProc     ;  (Exclusao_I)

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

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

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

;*******************************************************************************
;* Atualiza Situacao do Pedido ou Orcamento                                    *
;*******************************************************************************
Proc ATUA_SITUACAO_PEDIDO_ORCAMENTO()
Private WC_NUMPED, WC_PEDFAT,TemItemFaturado

TemItemFaturado=False
 
WC_NUMPED=0
WC_PEDFAT=0
Scan
  WC_NUMPED=WC_NUMPED+1
  If [Quantidade Faturada]>=[Quantidade]
     Then WC_PEDFAT=WC_PEDFAT+1
  EndIf
  If [Quantidade Faturada]>0
     Then TemItemFaturado=True
  EndIf
EndScan
If WC_NUMPED>0
   Then If PARAM_PEDIDO="S"
           Then Moveto "PedidoC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Pedido   ]="FATURADO"
                   Else [Situacao do Pedido   ]="ABERTO"
                        If TemItemFaturado And 
                           (SYS_CODIGO_CLIENTE = "0377" Or
                            SYS_CODIGO_CLIENTE = "0345" Or
                            SYS_CODIGO_CLIENTE = "0388" Or
                            SYS_CODIGO_CLIENTE = "0427" Or
                            SYS_CODIGO_CLIENTE = "0419" Or
                            SYS_CODIGO_CLIENTE = "0429") 
                           Then [Situacao do Pedido   ]="FATURADO"
                        EndIf
                EndIf
           Else Moveto "OrcaC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Orcamento]="FATURADO"
                   Else [Situacao do Orcamento]="ABERTO"
                EndIf
        EndIf
        UnLockRecord
        SaveTables
EndIf
EndProc    ;  (Atua_Situacao_Pedido_Orcamento)

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

  Aguarde("Efetuando Estorno CHEQUES TERCEIROS ")

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

  If CHAVEC=8
     Then quitloop
  EndIf

  Aguarde("Atualizando CHEQUES TERCEIROS ")

  primeiravez=true

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

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

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

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

  quitloop
endwhile

Moveto "NotaC"

EndProc   ; (Cheques)

;*******************************************************************************
;* Atualizacao Transferencias                                                  *
;*******************************************************************************
Proc Closed Transferencia()
UseVars AutoLib, ErrorProc, CHAVEC, TXDESCTO_TOTAL, ATIVEMPR, TPEMPR

Private NUMEROL, NE_ENCONTRADA, MES_EST, ANO_EST

If Search("TRANSF",[NotaC->Descricao da Destinacao])=0
   Then Return
EndIf
If [NotaC->Tipo]<>"E"
   Then Return
EndIf
If [NotaC->Tipo Movimento Estoque]<>"S"
   Then Return
EndIf

If [Codigo da Empresa]=[Codigo]
   Then Return
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
Moveto [Codigo]
Locate IndexOrder By "NotaEC01" [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento], [NotaC->Serie do Documento]
If RetVal
   Then NE_ENCONTRADA=True
   Else NE_ENCONTRADA=False
EndIf

If NE_ENCONTRADA
   Then NUMEROL=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]

        Moveto "\\Sistemas\\Estoque\\NotaEI"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While True
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\NotaEC->Data de Entrada])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\NotaEC->Data de Entrada]))

                  Moveto "\\Sistemas\\Estoque\\SdEstq"
                  Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa],
                         [\Sistemas\Estoque\NotaEI->Codigo do Item], ANO_EST, MES_EST
                  If RetVal
                     Then While True
                            If Not IsLockRecord()
                               Then QuitLoop
                            EndIf
                          EndWhile

                          [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[\Sistemas\Estoque\NotaEI->Quantidade ],3)
                          [Custo Total Atual]=NDecimal([Custo Total Atual]-([\Sistemas\Estoque\NotaEI->Custo Medio Unitario]*[\Sistemas\Estoque\NotaEI->Quantidade ]),2)
                          If ([Custo Total Atual]/[Saldo Atual])>0
                             Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                          EndIf
                          UnLockRecord
                  EndIf

                  Moveto "\\Sistemas\\Estoque\\NotaEI"
                  Del
                  If [Numero do Lancamento]<>NUMEROL
                     Then QuitLoop
                  EndIf
                EndWhile
        EndIf
        Moveto "\\Sistemas\\Estoque\\NotaEC"
        Del
EndIf
If CHAVEC=8
   Then Moveto "NotaC"
        Return
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
End
If [Numero do Lancamento]=""
   Then NUMEROL="000001"
   Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
EndIf
Down
[Numero do Lancamento     ]=NUMEROL
[Codigo da Empresa        ]=[NotaC->Codigo]
[Codigo                   ]=[NotaC->Codigo da Empresa]
[Tipo de NF               ]="N"
[Descricao Tipo NF        ]="NORMAL"
[UF                       ]=[NotaC->UF]
[Numero do Documento      ]=[NotaC->Numero do Documento]
[Codigo do Documento      ]=[NotaC->Codigo do Documento]
[Tipo de Operacao         ]="T"
If SubStr([NotaC->CFO],1,1)="5"
   Then [CFO]="1152"
   Else [CFO]="2152"
EndIf
[Data de Emissao          ]=[NotaC->Data de Emissao               ]
[Data de Entrada          ]=[NotaC->Data de Saida                 ]
[Tipo de Pagamento        ]="O"
[Codigo do Representante  ]=""
[Nome Fantasia Represent  ]=""
[Valor Mercadoria         ]=[NotaC->Valor Mercadoria              ]
[Valor Servico            ]=[NotaC->Valor Servico                 ]
[Valor Desconto           ]=[NotaC->Valor Desconto                ]
[Valor Mercadoria Liquido ]=[NotaC->Valor Mercadoria Liquido      ]
[Valor BCICMS             ]=[NotaC->Valor BCICMS                  ]
[Valor ICMS               ]=[NotaC->Valor ICMS                    ]
[Valor IPI                ]=[NotaC->Valor IPI                     ]
[Valor Nota Fiscal        ]=[NotaC->Valor Nota Fiscal             ]
[Valor Despesas Acessorias  ]=[NotaC->Valor Despesas Acessorias   ]
[Valor BCSubstituicao ICMS  ]=[NotaC->Valor BCSubstituicao ICMS   ]
[Valor Substituicao ICMS    ]=[NotaC->Valor Substituicao ICMS     ]
[Recolhimento Substituicao  ]="0"
[Tipo CTR                   ]=[NotaC->Frete por Conta             ]
[Frete Incluso na Nota      ]=[NotaC->Frete Incluso na Nota       ]
[Valor do Frete             ]=[NotaC->Valor do Frete              ]
If [NotaC->Aliquota BCICMS Frete]>0
   Then [Valor ICMS Frete]=Round((([NotaC->Valor do Frete]-(([NotaC->Valor do Frete]*[NotaC->Aliquota BCICMS Frete])/100))*[NotaC->Aliquota de ICMS Frete])/100,2)
   Else [Valor ICMS Frete]=Round(([NotaC->Valor do Frete]*[NotaC->Aliquota de ICMS Frete])/100,2)
EndIf
[Valor do Seguro          ]=[NotaC->Valor do Seguro               ]
[Chave_Acesso_NFe         ]=[NotaC->Chave_Acesso_NFe              ]
[Sistema Gerador          ]="NF"

Controle_Dia()
UnLockrecord

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]

  Moveto "\\Sistemas\\Estoque\\NotaEI"
  End
  Down
  
  [Numero do Lancamento    ]=NUMEROL
  [Sequencia do Lancamento ]=[NotaI->Item do Documento]
  [Codigo da Empresa       ]=[NotaC->Codigo]
  [Codigo do Item          ]=[NotaI->Codigo do Item]
  [Tipo do Item            ]=[NotaI->Tipo do Item]
  [Descricao do Item       ]=[NotaI->Descricao do Item]
  [Codigo da Cor_Tecido    ]=[NotaI->Codigo da Cor_Tecido]
  [Descricao da Cor_Tecido ]=[NotaI->Descricao da Cor_Tecido]
  [Tamanho                 ]=[NotaI->Tamanho]

  [Quantidade              ]=[NotaI->Quantidade             ]
  [Unidade Fiscal          ]=[NotaI->Unidade Fiscal         ]
  [Preco Unitario          ]=[NotaI->Preco Unitario         ]
  [Preco Unitario Tabela   ]=[NotaI->Preco Unitario Tabela  ]
  [Custo Medio Unitario    ]=[NotaI->Preco Unitario         ]
  [Preco Total             ]=[NotaI->Preco Total            ]

  if [NotaI->Tipo Desconto Item     ]="U"
     then [Taxa Desconto Unitario  ]=[NotaI->Taxa Desconto Unitario ]
          [Valor Desconto Unitario ]=[NotaI->Valor Desconto Unitario]
  endif        

  [Valor Desconto Total    ]=Round((([Preco Total]*TXDESCTO_TOTAL)/100),5)

;;; Falta Valor Acrescimo Total
  [Tributacao de IPI       ]=[NotaI->Tributacao de IPI       ]
  [Aliquota Reduzida BCIPI ]=[NotaI->Aliquota Reduzida BCIPI ]
  [Aliquota de IPI         ]=[NotaI->Aliquota de IPI         ]
  [Valor do IPI            ]=[NotaI->Valor do IPI            ]
  [IPI_CST                 ]=[NotaI->IPI_CST                 ]
  [IPI_BC                  ]=[NotaI->IPI_BC                  ]

  [Tributacao de ICMS      ]=[NotaI->Tributacao de ICMS      ]
  [Aliquota Reduzida BCICMS]=[NotaI->Aliquota Reduzida BCICMS]
  [Aliquota de ICMS        ]=[NotaI->Aliquota de ICMS        ]
  [Valor do ICMS           ]=[NotaI->Valor do ICMS           ]
  [ICMS_BC                 ]=[NotaI->ICMS_BC                 ]
  [ICMS_ST_BC              ]=[NotaI->ICMS_ST_BC              ]
  [ICMS_ST_Valor           ]=[NotaI->ICMS_ST_Valor           ]
  [Tipo Tributacao         ]=[NotaI->Tipo Tributacao         ]  
  [CSOSN                   ]=[NotaI->CSOSN                   ]

  [Fator de Conversao      ]=1
  [Quantidade Convertida   ]=[NotaI->Quantidade]
  [Comissao do Item        ]=[NotaI->Comissao do Item]
  
  ;* Seta Variaveis PegaCFOP
  Checa_CFOP      ="E"
  CFO_C           =[\Sistemas\Estoque\NotaEC->CFO       ]
  CFOP_TPITEM     =[Tipo do Item      ]
  CFOP_TRIBICMS   =[Tributacao de ICMS]
  CFOP_EMPRESA    =[\Sistemas\Estoque\NotaEC->Codigo da Empresa ]
  CFOP_ATIVEMPRESA=ATIVEMPR
  Play "\\Sistemas\\Exporta\\PegaCFOP"
  [CFO        ]=CFO_C

  Switch
    Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
      [PIS_CST        ]="74"
      [PIS_Aliquota   ]=BlankNum()
      [PIS_BC         ]=BlankNum()
      [PIS_Valor      ]=BlankNum()
    
      [COFINS_CST     ]="74"
      [COFINS_Aliquota]=BlankNum()
      [COFINS_BC      ]=BlankNum()
      [COFINS_Valor   ]=BlankNum()
    OtherWise:
      Switch
        Case SYS_CODIGO_CLIENTE="0000":
        
        OtherWise:
          [PIS_CST        ]="74"
          [PIS_Aliquota   ]=BlankNum()
          [PIS_BC         ]=BlankNum()
          [PIS_Valor      ]=BlankNum()
        
          [COFINS_CST     ]="74"
          [COFINS_Aliquota]=BlankNum()
          [COFINS_BC      ]=BlankNum()
          [COFINS_Valor   ]=BlankNum()
      EndSwitch
  EndSwitch
  
  Switch
    Case [NotaI->IPI_CST]="50" : [IPI_CST]="00"
    Case [NotaI->IPI_CST]="51" : [IPI_CST]="01"
    Case [NotaI->IPI_CST]="52" : [IPI_CST]="02"
    Case [NotaI->IPI_CST]="53" : [IPI_CST]="03"
    Case [NotaI->IPI_CST]="54" : [IPI_CST]="04"
    Case [NotaI->IPI_CST]="55" : [IPI_CST]="05"
    Case [NotaI->IPI_CST]="99" : [IPI_CST]="49"
  EndSwitch
  UnLockrecord

  ;---- Processo p/ utiliza‡Æo de REGRA ----------------------------------------
  Verifica_Emissao_Saida([NotaC->Data de Emissao])
  Switch
    Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [NotaC->Data de Saida  ]
                                         If IsBlank(AUX_DATA) Then AUX_DATA=[NotaC->Data de Emissao] EndIf
    OtherWise                          : AUX_DATA = [NotaC->Data de Emissao]
  EndSwitch
  ;-----------------------------------------------------------------------------
  MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
  ANO_EST = StrVal(Year(AUX_DATA))

  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [NotaC->Codigo],
         [NotaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then Cria_Ficha([NotaC->Codigo],[NotaI->Codigo do Item],False)
  EndIf
  While True
    If Not IsLockRecord()
       Then QuitLoop
    EndIf
  EndWhile
  [Saldo Atual      ]=NDecimal([Saldo Atual]+[NotaI->Quantidade],3)
  [Custo Total Atual]=NDecimal([Custo Total Atual]+([NotaI->Quantidade]*[NotaI->Preco Unitario]),2)
  If ([Custo Total Atual]/[Saldo Atual])>0
     Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  EndIf
	If [NotaC->Data de Emissao]>=[Data do Preco de Custo]
     Then [Data do Preco de Custo]=[NotaC->Data de Emissao     ]
          [Preco de Custo        ]=[NotaI->Preco Unitario      ]
	EndIf
  UnLockRecord

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

Moveto "NotaC"
EndProc   ; (Transferencia)

;*******************************************************************************
;* Atualizacao Troca                                                           *
;*******************************************************************************
Proc Troca()
Private NUMEROL,  NE_ENCONTRADA, MES_EST, ANO_EST, CUSTO

If Search("TROCA",[Descricao da Destinacao])=0
   Then Return
EndIf
If [NotaC->Tipo]<>"C"
   Then Return
EndIf
If [NotaC->Tipo Movimento Estoque]<>"S"
   Then Return
EndIf

If [Codigo da Empresa]=[Codigo]
   Then Return
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
Moveto [Codigo]
Locate IndexOrder By "NotaEC01" [NotaC->Codigo],
       [NotaC->Numero do Documento], [NotaC->Serie do Documento]
If RetVal
   then If [Codigo da Empresa]=[NotaC->Codigo da Empresa]
           Then NE_ENCONTRADA=True
           Else NE_ENCONTRADA=False
        EndIf
   Else NE_ENCONTRADA=False
EndIf

If NE_ENCONTRADA
   Then NUMEROL=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]

        Moveto "\\Sistemas\\Estoque\\NotaEI"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While True
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\NotaEC->Data de Entrada])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\NotaEC->Data de Entrada]))

                  While True
                    Moveto "\\Sistemas\\Estoque\\SdEstq"
                    Moveto [Codigo da Empresa]
                    Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa],
                           [\Sistemas\Estoque\NotaEI->Codigo do Item], ANO_EST, MES_EST
                    If RetVal
                       Then While True
                              If Not IsLockRecord()
                                 Then QuitLoop
                              EndIf
                            EndWhile
  
                            CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                            If CUSTO=0 Or IsBlank(CUSTO)
                               Then CUSTO=[Ultimo Custo Atual]
                            EndIf
                            [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[\Sistemas\Estoque\NotaEI->Quantidade ],3)
                            [Custo Total Atual]=NDecimal([Custo Total Atual]-(CUSTO*[\Sistemas\Estoque\NotaEI->Quantidade ]),2)
                            If ([Custo Total Atual]/[Saldo Atual])>0
                               Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                            EndIf
                            UnLockRecord
                            QuitLoop
                       Else Cria_FichaTrf([\Sistemas\Estoque\NotaEI->Codigo da Empresa],[\Sistemas\Estoque\NotaEI->Codigo do Item],False)
                            QuitLoop
                    EndIf
                  EndWhile

                  Moveto "\\Sistemas\\Estoque\\NotaEI"
                  Del
                  If [Numero do Lancamento]<>NUMEROL
                     Then QuitLoop
                  EndIf
                EndWhile
        EndIf
        Moveto "\\Sistemas\\Estoque\\NotaEC"
        Del
EndIf
Moveto "NotaC"
EndProc   ; (Troca)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_FichaTrf(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
ESTQ_MES = AlinhM(StrVal(Month(AUX_DATA)),2)
ESTQ_ANO = StrVal(Year(AUX_DATA))

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

Moveto "\\Sistemas\\Estoque\\EstqPrm"
Moveto [Codigo da Empresa]
Locate ESTQ_EMPRESA, ESTQ_ITEM
If Not RetVal
   Then End Down
        [Codigo da Empresa   ]=ESTQ_EMPRESA
        [Codigo do Item      ]=ESTQ_ITEM
        UnLockRecord
EndIf

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

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Rotina para exclusao do rateio da comissao                                  *
;*******************************************************************************
Proc Closed Excluir_Rateio_Comissao()
UseVars AutoLib, ErrorProc, EMPRESA,NUMDOC,SERIE,SEQIT
Moveto "NotaC"
UnLockRecord
FormKey

Moveto "NotaIC"
Moveto [Codigo da Empresa]
Locate EMPRESA,NUMDOC,SERIE,SEQIT
If RetVal
   Then While [Codigo da Empresa  ]=EMPRESA And
              [Numero do Documento]=NUMDOC  And
              [Serie do Documento ]=SERIE   And
              [Item do Documento  ]=SEQIT
          Del
        EndWhile
EndIf

Moveto "NotaC"
UnLockRecord
FormKey

Moveto "NotaI"
Moveto [Item do Documento]
Locate EMPRESA,NUMDOC,SERIE,SEQIT

EndProc  ; (Excluir_Rateio_Comissao)

;*******************************************************************************
;* Rotina para Carregar Parametros_                                            *
;*******************************************************************************
Proc Carrega_Parametros()

Switch
  Case [NotaC->Sistema Gerador]="BA" :  Return Carrega_Parametros_Balcao()
  OtherWise                          :  Return Carrega_Parametros_Fatura()
EndSwitch
EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros_Fatura                                      *
;*******************************************************************************
Proc Carrega_Parametros_Fatura()

If not GetP_Entra([NotaC->Codigo da Empresa])
   then Return False
EndIf

If not GetP_Fatura([NotaC->Codigo da Empresa])
   then Return False
EndIf

return true
EndProc ; (Carrega_Parametros)


;*******************************************************************************
;* Rotina para Carregar Parametros Balcao                                      *
;*******************************************************************************
Proc Carrega_Parametros_Balcao()

If not GetP_Balcao([NotaC->Codigo da Empresa])
   then Return False
EndIf

If not GetP_Entra([NotaC->Codigo da Empresa])
   then Return False
EndIf

return true
EndProc ; (Carrega_Parametros)

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

View NOWINDOW "FaturaC"
View NOWINDOW "NotaCC"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIAD"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaICM"
View NOWINDOW "NotaIDD"
View NOWINDOW "NotaIDV"
View NOWINDOW "NotaIG"
if sys_codigo_cliente="0112"
   then View NOWINDOW "NotaIL"
endif
View NOWINDOW "NotaR"
View NOWINDOW "NotaV"

View NOWINDOW "NumeroDP"

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

View NOWINDOW "\\Sistemas\\Cadastro\\Destinat"
View NOWINDOW "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW "\\Sistemas\\Cadastro\\Feriados"

View NOWINDOW "\\Sistemas\\CheqRec\\ChequeC"
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeI"

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

EndProc  ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina p/ Carregar Parƒmetros do Cliente                                    *
;*******************************************************************************
Proc Carrega_Parametros_Cliente()

If IsFile(PrivDir()+"ORD_NOTA.ini")
   Then LeiaINI(PrivDir()+"ORD_NOTA.ini","VSDGORDEM.S.1")
        Switch
          Case VSDGORDEM="EMPRESA" : ORDENARPOR="EMPRESA"
        EndSwitch   
   Else ORDENARPOR="EMPRESA"      
EndIf

If IsFile(PrivDir()+"NOTA.ini")
   Then LeiaINI(PrivDir()+"NOTA.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) 
   Then Switch 
          Case SYS_CODIGO_CLIENTE="0296" : LOCALIZA_CODIGO="LOC_CODFOR"
          Case SYS_CODIGO_CLIENTE="0046" : LOCALIZA_CODIGO="LOC_CODBAR"
          OtherWise                      : LOCALIZA_CODIGO="LOC_CODITE"
        EndSwitch   
EndIf

EndProc ;Carrega_Parametros_Cliente()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
                  
If CHAVEI=0
   Then If Upper(RegItem["Situacao_Item"])="C" And Search("CUP",[NotaC->Tipo do Documento])>0
           Then Mensagem("Altera‡„o n„o permitida, item cancelado no CUPOM !")
                Return
        EndIf  
EndIf

DIGITAI()
If CHAVEI<>9
   Then If CHAVEI<>8
           Then ESTOQUE()
                ATUA_PEDIDO_ORCAMENTO()
                If PARAM_RATEIO_COMISSAO="I" And VSD_I_Tipo_Item="C"
                   Then APLIC_ORIGEM="NOTA"
                        Play "Ft_Comis"
                EndIf
        EndIf
EndIf
Moveto "NotaI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

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

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

CopyToArray REG_NOTAC
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 Then Controle_Dia() EndIf

  ANT_DEST   =[Codigo da Destinacao]
  ANT_NCARREG=[Numero_Carregamento ]
  ANT_DTEMI  =[Data de Emissao     ]
  ANT_DTSAI  =[Data de Saida       ]
  ANT_DTACE  =[Data de Acerto      ]
  ANT_CDTAB  =[Codigo da Tabela    ]

  If Not IsAssigned(OPCHAVEI)
     Then If PARAM_UTILIZACDBARRA="S"
             Then OPCHAVEI="CDB"
             Else OPCHAVEI="CDC"
          EndIf
  EndIf
  
  If FACA_CHAVEI And CALCULO_NF_AUTOMATICO<>"A"
     Then 
        COR_MENSAGEM="1"
        Switch 
          Case [Sistema Gerador]="MA":
               MSG=    "Este documento foi lan‡ado manualmente no sistema !// //"
          OtherWise:
               MSG=""
        EndSwitch 
        MSG=MSG+"- Os valores dos impostos nÆo serÆo calculados automaticamente;       // //"
        MSG=MSG+"- Os valores totais deste documento ser  resultante da soma dos itens;// //"
        MSG=MSG+"- Informar a base de calculo com seus rateios proporcionais  e  o seu //"
        MSG=MSG+"  valor do imposto correspondente.                                    //"
        Mensagem(MSG)
        Release Vars COR_MENSAGEM
  EndIf   
  
  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
    EndWhile

    While FACA_DIGITAF
      DIGITAF()

      Moveto "NotaC"
      PARAM_FT_GRUP = "RATEIOS"
      Play "FT_GRUP"

      If CHAVEF = 9 Then QuitLoop EndIf
      DIGITAD()
      If CHAVED = 0
         Then FACA_DIGITAF = False
              FACA_CHAVEI  = False
              FACA_DIGITAC = False
      EndIf
    EndWhile
  EndWhile
EndWhile
Moveto "NotaC"
If RecordStatus("Locked") Then UnLockRecord EndIf

CopyToArray REG_NOTACNew
if RegistroFoiAlterado(REG_NOTAC,REG_NOTACNew)
   then Grava_Logt("#","AltNotC","Alterou Notac: "+[Codigo da Empresa]+" "+[Tipo do Documento]+"/"+[Numero do Documento]+"/"+[Serie do Documento])
endif   

If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\Vendas\\Bib_Vend,"+
        "\\Sistemas\\Vendas\\Bib_Fat"

SYS_VALOR()

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO=""   EndIf

PARAM_EMPRESA         = SYS_EMPRESA_DEFAULT
PARAM_CONSIGNACAO     = "N"
PARAM_RATEIO_COMISSAO = ""

SYS_APLICATIVO        = "NOTA"

;---- Particularidades ---------------------------------------------------------
Switch
  Case SYS_CODIGO_CLIENTE = "0388" or
       SYS_CODIGO_CLIENTE = "0427" or
       SYS_CODIGO_CLIENTE = "0390" or
       SYS_CODIGO_CLIENTE = "0429"  : PARAM_UTILIZA_VARIACOES = True
                                      PARAM_DUPLICIDADE_ITEM  = True
                                      
  OtherWise                         : PARAM_UTILIZA_VARIACOES = False
                                      PARAM_DUPLICIDADE_ITEM  = False
EndSwitch

Carrega_Parametros_Cliente()
ModoLocalizarItem("","","")

Carrega_Tabelas()

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

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

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

PickForm "1"
Moveto "PedidoC" SetHighLight Current Record 51 Field 51
Moveto "PedidoI" SetHighLight Current Record 51 Field 51
Moveto "OrcaC"   SetHighLight Current Record 51 Field 51
Moveto "OrcaI"   SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetHighLight Current Record 51  Field 51
Moveto "NotaC"
PickForm "F"
OPCAO_FORM="F"

ANT_EMPRESA=""
ANT_CDDOCTO=""
ANT_DEST   =""
ANT_NCARREG=""
ANT_CDTAB  =""
ANT_DTEMI  =BlankDate()
ANT_DTSAI  =BlankDate()
ANT_DTACE  =BlankDate()

;**** Em 09.04.2014 aplicado para verificar n£mero de registros ********
If Verifica_NRegistros("Notai")
   Then COR_MENSAGEM="1"
        Mensagem(MSG_TABELA)
        Release Vars COR_MENSAGEM,MSG_TABELA
   Else Release Vars MSG_TABELA     
EndIf  

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
