;** Troca **********************************************************************
;*  Digitacao de Ordem de Faturamento e Emissao Nota Fiscal - Troca            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/01/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 08/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Desconto Unitario Entretex
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 11/07/2008 por Anivel Augusto Rodrigues                     
;Motivo Alteracao: Inclusao Consulta Cliente selecao
;Ultima Alteracao: 05/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco()/Bib_Tro
;Ultima Alteracao: 26/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Paramentros
;Ultima Alteracao: 28/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 13/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Duplic
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 20/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Qtd/VrUni/Total
;Ultima Alteracao: 27/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao P_Cartao
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito
;Ultima Alteracao: 31/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Estorno Duplicatas
;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: 16/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Vencimento automat.             
;Ultima Alteracao: 04/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CFO Frete
;Ultima Alteracao: 18/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao FatuaC Docto/Serie Nota Gerada          
;Ultima Alteracao: 15/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem Nota Gera/Codigo/Serie          
;Ultima Alteracao: 07/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 17/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novos campos e ajustes layout
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;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: 25/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rotina C¢digo de Barra
;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 Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN  
;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: 13/04/2011 por Karina Andrade
;Motivo Alteracao: Ajustes ShowDialog CST_Item                                         
;Ultima Alteracao: 26/04/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout e Procedimentos "Digita‡Æo dos Itens" 
;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 ROM j  emitido  
;Ultima Alteracao: 16/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TECLAS nos itens
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BLOQUEIO_REIMPRESSAO c/ Supervisor
;Ultima Alteracao: 23/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowPopup                          
;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: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CST do Item
;Ultima Alteracao: 09/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Parametro de bloqueio para Altera‡Æo e ReemissÆo
;Ultima Alteracao: 19/03/2012 por Bruno Carvalho
;Motivo Alteracao: Add Variavel PARAM_RATEIO_COMISSAO="" (Gerava erro ao cancelar Nota)
;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: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 26/04/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo "Consulta SPC" conforme parƒmetro
;Ultima Alteracao: 04/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Consulta SPC"
;Ultima Alteracao: 08/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PIS/COFINS=99 Simples Nacional Layout=Fatura
;Ultima Alteracao: 24/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Consulta SPC"
;Ultima Alteracao: 20/06/2012 por Bruno Carvalho 
;Motivo Alteracao: Ajustes nova logica para calculo da nota/nota livre        
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 29/06/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes CDBarras() e Pega_Dados_Item()   
;Ultima Alteracao: 02/07/2012 por Bruno Carvalho
;Motivo Alteracao: Removido Proc Nota() e Add "FT_NOTA" e vari vel VERIFICA_CONSULTA   
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message ShowDialog    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar novo MVA e %ST ao trocar CST/CSON    
;Ultima Alteracao: 12/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao I_CF_ITEM /NBM                    
;Ultima Alteracao: 27/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes p/ Confec‡äes CSON=400 opera‡Æo diferente de venda
;Ultima Alteracao: 01/08/2012 por Bruno Carvalho
;Motivo Alteracao: Novos ajustes p/ BLOQUEIA_REEMISSAO e BLOQUEIA_ALTERA
;Ultima Alteracao: 17/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servico d lmeida                         
;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: 20/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao regime tributario DEBITO E CREDITO
;Ultima Alteracao: 24/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()
;Ultima Alteracao: 24/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes imprimir 2a via
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 13/11/2012 por Kamila Gomes                       
;Motivo Alteracao: Desabilitada verifica‡Æo UF_ALIQUOTA_ICMS_INTERNA linha 1201
;Ultima Alteracao: 19/12/2012 por Bruno Carvalho                       
;Motivo Alteracao: Novos ajustes para consulta de itens com o "F5"
;Ultima Alteracao: 03/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SYS_USUARIO_CODEMPR  
;Ultima Alteracao: 29/01/2013 por Kamila Gomes
;Motivo Alteracao: Ajuste ChaveC()              
;Ultima Alteracao: 04/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes op‡Æo "P" para LIMITE_CREDITO
;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: 26/03/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_CONDPAGTO
;Ultima Alteracao: 04/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem mensagem bloqueio para cancelamento 
;Ultima Alteracao: 15/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes dados Showdialog Frete                                         
;Ultima Alteracao: 25/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes checagem cfop item de entrada                                           
;Ultima Alteracao: 25/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes local disparo Rateio_bc_Itens()                                
;Ultima Alteracao: 26/04/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes na rotina de CANC. altera‡Æo de "ConfGeral" -> "ConfGeral_N"   
;Ultima Alteracao: 20/06/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes CODFISC e SERIEFISC quando [Numero Nota Gerada]<>""
;Ultima Alteracao: 28/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Permitir alterar Forma de Pagamento nos Vencimentos
;Ultima Alteracao: 30/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons                    
;Ultima Alteracao: 09/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons                    
;Ultima Alteracao: 11/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Abrir tabelas SDESTQ+EstqPrm                           
;Ultima Alteracao: 25/09/2013 por Karina Andrade
;Motivo Alteracao: Inclusao op‡Æo para ImpressÆo 2¦ via
;Ultima Alteracao: 01/10/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Utiliza Forma,Cond.Pgto, dia vencimento cadastro cliente
;Ultima Alteracao: 11/10/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao private NOVOSALDO, Checa_Estoque()
;Ultima Alteracao: 15/10/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Pega_Preco(OpcapP) e codigo de barras
;Ultima Alteracao: 12/11/2013 por Andrey Fillipe
;Motivo Alteracao: Inclusao rateio de comissao  
;Ultima Alteracao: 20/01/2014 por Bruno Carvalho
;Motivo Alteracao: Add rotina p/ verificar representante inativo 
;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: 09/04/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_NLancto() 
;Ultima Alteracao: 10/04/2014 por Bruno Carvalho
;Motivo Alteracao: Add Verifica_NRegistros() onde ir  informar limite de registros
;Ultima Alteracao: 23/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao informar o numero do lancamento
;Ultima Alteracao: 23/04/2014 por Andrey Fillipe
;Motivo Alteracao: Adicionado Cliente_Inativo()
;Ultima Alteracao: 24/04/2014 por Bruno Carvalho
;Motivo Alteracao: Comentado o novo procedimento de numero de lan‡amento at‚ finaliza‡Æo de testes
;Ultima Alteracao: 04/08/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST ?60 para CSOSN 500 
;Ultima Alteracao: 09/09/2014 por Bruno Carvalho
;Motivo Alteracao: Add PARAM_AGRUPA_ITEM = FALSE
;Ultima Alteracao: 06/10/2014 por Andrey Fillipe
;Motivo Alteracao: Habilitado novamente a proc Verifica_NLancto()
;Ultima Alteracao: 16/10/2014 por Bruno Carvalho
;Motivo Alteracao: Removido o processo Verifica_NLancto(), devido a erro em acesso simultaneo e ajustado nova rotina para verifica‡Æo do Lancto
;Ultima Alteracao: 07/11/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes na op‡Æo F4, quando a forma de pagamento for cartao, so vai buscar os cartoes referente aquela forma de pagamento
;Ultima Alteracao: 22/12/2014 por Luis Gustavo
;Motivo Alteracao: Ajustes na Proc Geral_Dialog, implementado F1 para os campos CIDADE e UF
;Ultima Alteracao: 23/01/2015 por Luis Gustavo
;Motivo Alteracao: Implementado para nao deixar lan‡ar o mesmo itens quando o SYS_CODIGO_CLIENTE for igual a "0318"
;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: 26/02/2015 por Luis Gustavo 
;Motivo Alteracao: Ajustes ao bloquear venda com a forma de pagamento CT. Nao vai checar a composi‡Æo de dias
;Ultima Alteracao: 09/03/2015 por Luis Gustavo 
;Motivo Alteracao: Adicionado a op‡Æo 1 (descri‡Æo) como padrao no SW_cons
;Ultima Alteracao: 17/03/2015 por Luis Gustavo 
;Motivo Alteracao: Implementado para ficar salvo a ultima op‡ao de busca no SW_CONS
;Ultima Alteracao: 27/03/2015 por Andrey Fillipe
;Motivo Alteracao: Corrigido Implementado para nao deixar lan‡ar o mesmo itens para SYS_CODIGO_CLIENTE = "0318"
;Ultima Alteracao: 30/03/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado Parametro para nÆo deixar incluir item Fracionado
;Ultima Alteracao: 17/07/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustado para o SYS_CODIGO_CLIENTE="0370" todo o processo que ‚ feito para SYS_CODIGO_CLIENTE = "0318"
;Ultima Alteracao: 08/10/2015 por Bruno Carvalho 
;Motivo Alteracao: Altera‡Æo no processo dos Numero do Lan‡amento - Numero_Lancamento()
;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: 23/11/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado View NOWINDOW  "NotaICom"
;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: 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 Calc_Venctos()                       
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_titulo() em Carrega_Parametros()
;Ultima Alteracao: 21/01/2016 por Kamila Gomes 
;Motivo Alteracao: Ajustes IE = NAOCONTRIBUINTE
;Ultima Alteracao: 23/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Impressao Titulo de Credito      
;Ultima Alteracao: 04/02/2016 por Kamila Gomes 
;Motivo Alteracao: Ajustes campo CMC7 na digita‡Æo do cheque
;Ultima Alteracao: 18/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LeiaINI cheque        
;Ultima Alteracao: 19/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowDialog Cheques    
;Ultima Alteracao: 20/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Inclusao FT_ECH para lancamentos de cheques Faturav
;Ultima Alteracao: 29/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UTILIZANDO_CP_FP_CLIENTE (condicao e Forma de Pagamento do cliente)
;Ultima Alteracao: 07/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FatICom e NotaICom nÆo Usa        
;Ultima Alteracao: 29/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSGCAMPO no FORM                           
;Ultima Alteracao: 30/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao ModoLocalizarItem()            
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao SomatoriaDosItensTroca()            
;Ultima Alteracao: 08/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F10 -> F6 Referenciar TC                  
;Ultima Alteracao: 18/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: InclusÆo campo Referencia no item
;Ultima Alteracao: 20/04/2016 por Kamila Gomes
;Motivo Alteracao: Alterada Faticom e Notaicom para FaturICM e  NotaICM
;Ultima Alteracao: 26/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pausa especie de volumes digitaf()                   
;Ultima Alteracao: 12/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Item_Dialog -> Item_Localizador
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Fracionado] e [Edita Descricao do Item]
;Ultima Alteracao: 07/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Libera_Bloqueio() 
;Ultima Alteracao: 08/06/2016 por Bruno Carvalho
;Motivo Alteracao: Verifica‡„o para quando item ‚ aplica‡Æo direta e possui GRADE -> bloquear #0322#
;Ultima Alteracao: 13/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao LiberaCondicaoeFormaPagamento() e ajustes PegaCondicaoeFormaPagamento()
;Ultima Alteracao: 13/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusÆo Informa_Data_CalcVenctos
;Ultima Alteracao: 17/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo para gera‡Æo de numero de lan‡amento  
;Ultima Alteracao: 11/07/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado verifica‡Æo de representante se inativo -> Verifica_Representante()
;Ultima Alteracao: 02/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reemprimir 2a via nÆo travar Checagem_Pagina1()                                        
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao GetP_Entra()
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes uso de getrecord substituicao de view em tabelas
;Ultima Alteracao: 23/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ignorar calculo st se nÆo calcula impostos no parametro
;Ultima Alteracao: 21/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle item showdialog, duplicidade e localizar
;Ultima Alteracao: 02/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculoa pecas/Kg pralum 
;Ultima Alteracao: 11/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item(), Ajusta_Dados_Item(), inclusÆo faturar expedi‡Æo
;Ultima Alteracao: 10/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado ALTERA_PRECO_TOTAL p/ permitir altera‡Æo no campo "I_PRECO_TOTAL" se CALCULO_NF_AUTOMATICO="L"
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 23/03/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao mover p/ o campo [CFO] -> Ser  posicionado no pr¢ximo campo dispon¡vel ap¢s o [CFO] a partir da destina‡Æo
;Ultima Alteracao: 23/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: Separa‡Æo do controle Geral_Dialog() p/ cada procedure com seus respectivos assuntos alojados no Bib_Vend
;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: 13/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo para bloquear vendas de produtos sem pre‡o *I_Quantidade
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo para bloquear vendas de produtos sem pre‡o *I_Preco_Unitario 
;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: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito] e [Valor INSS] -> [Valor TC]
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao calc_itens()
;Ultima Alteracao: 11/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes [Valor Servico] -> [Valor Devolucao]
;Ultima Alteracao: 17/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao executar CDBarras() na proc ChaveCdBar() -> Mover p/ tabela correta de acordo com OP_ITEM
;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: Ajustes Checa_MVA() e remo‡Æo do Troca p/ Bib_Vend -> Checa_MVA()
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog item      
;Ultima Alteracao: 09/01/2018 por Bruno Carvalho
;Motivo Alteracao: Removido alinhamento em 10 d¡gitos se codigo de barra menor que 10 d¡gitos -> Pega_Dados_Item() *Pesq precisa pelo cdbar
;Ultima Alteracao: 12/01/2018 por Kamila Gomes
;Motivo Alteracao: Implementa‡Æo de envio de romaneio de troca por e-mail para cliente #0278#
;Ultima Alteracao: 2/01/2018 por Bruno Carvalho
;Motivo Alteracao: Removido processos que destinavam … variavel de controle EDITA_DESCRICAO_ITEM
;Ultima Alteracao: 07/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo permitir entrar em OF de NF-e
;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: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem qtde fracionada    
;Ultima Alteracao: 04/07/2018 por Bruno Carvalho             
;Motivo Alteracao: Ajustes CD_BARRA ao localizar o item, p/ nÆo alinhar a 10 d¡gitos -> ITEM_FRACIONADO
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes IMPRIGERAL() -> FT_GNF
;Ultima Alteracao: 04/09/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Digita_Troco()
;Ultima Alteracao: 11/09/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes alteracao preco unitario
;Ultima Alteracao: 05/10/2018 por Kamila Gomes
;Motivo Alteracao: SYS_CODIGO_CLIENTE = "0274" seta CheckTG_OPEMAIL[1] = false
;Ultima Alteracao: 22/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado controle para destina‡äes inativas 
;Ultima Alteracao: 20/02/2019 por Kamila Gomes
;Motivo Alteracao: Ajuste quando ativa tecla F5 no item
;Ultima Alteracao: 11/04/2019 por Bruno Carvalho
;Motivo Alteracao: Verifica‡„o para quando item ‚ aplica‡Æo direta e possui GRADE -> Bloquear #0434# (*Mesmo processo p/ 0322) 

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

EVCITENS =BlankNum()
EVSQTDE  =BlankNum()
EVSVRMERC=BlankNum()

SVCITENS =BlankNum()
SVSQTDE  =BlankNum()
SVSVRMERC=BlankNum()

VSVRVENCTOS=BlankNum()

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

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

  SetaCorRegistro("Editar")
  While True

  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()

  If RetVal=-33
     Then 
          SemFuncoes()
           
;         Echo Normal
;         Echo Off
;         ShowPopup " Fun‡”es " CENTERED
;          "F6 ~I~mprimir Todas       ": " Imprime Fatura                   " :"F6",
;          "~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=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="4"
            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
           FACA_DIGITAC=True
           PASS=0
           INICIO_PAGINA=True

           EVCITENS =BlankNum()
           EVSQTDE  =BlankNum()
           EVSVRMERC=BlankNum()
           
           SVCITENS =BlankNum()
           SVSQTDE  =BlankNum()
           SVSVRMERC=BlankNum()
           
           VSVRVENCTOS=BlankNum()
            
           If OPCAO_FORM="F"
              Then PAGINA("FaturaC","MR")
              Else PAGINA("FaturaC","MT")
           EndIf
           ORDFAT=[Numero da OF]
           Switch
             Case EDITAR="S":
                  PickForm "4"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then CHAVEC=0
                          CALC_VENCTO=False
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  PickForm "4"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) And
                     (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                     Then If Not IsBlank([Numero Nota Gerada])
                             Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !// J  Gerou Nota Fiscal N§ "+[Numero Nota Gerada])
                                  UnLockRecord
                             Else If QuerExcluir("")
                                     Then DESTIN_ATUALIZA_PEDIDOS=""
                                          Moveto [Codigo da Destinacao]
                                          Ativa_Lookup()
                                          Moveto [Codigo da Destinacao]
                                          Locate [FaturaC->Codigo da Destinacao]
                                          If RetVal
                                             Then DESTIN_ATUALIZA_PEDIDOS=[Atualiza Pedidos]
                                          EndIf
                                          KeyPress "ESC"
                                          GRAVA_LOG=True
                                          EXCLUSAO_C()
                                     Else UnLockRecord
                                  EndIf
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="4"
              Then PickForm "4"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
;   Case Retval="F6": 
;        Del
;        Play "FT_GNF"
;        QuitLoop
    Case Retval="ENTER":
         If Numero_Lancamento("","F")
            Then ORDFAT = PROXLANCTO_NLANC    
            Else QuitLoop
         EndIf
         If Not PROXIMO_LANCTO_REG_ACHOU
           Then GetRecord "\\Sistemas\\Vendas\\FaturaI" ORDFAT To REG_FATURAI
                If RetVal
                   Then Mensagem(Completa("A Ordem de Faturamento "+ORDFAT+" esta com erro, verificar empresa e/ou os",74," ")+
                                 Completa("itens j  existentes!                                                      ",74," ")+"//"+
                                 Completa("-> Recuperar a OF "+ORDFAT+" ou exclu¡-la!",74," "))
                        Del
                        QuitLoop         
                EndIf
         EndIf    
         PickForm "4"    
         Moveto [Numero da OF]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC      = 0
                 CALC_VENCTO = False
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf
            Else CHAVEC      = 1
                 CALC_VENCTO = True
                 If Not Checa_Controle(SYS_CONTROLE_DIA)
                    Then OPCAO_FORM="F"
                    Else Return         
                 EndIf                  
         EndIf                
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ;CHAVEC

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

REEMITIR    =False
SOIMPRIMIR  =False

FACA_CHAVEI =True
FACA_CHAVEDV =True

enviaEmail  =False

Moveto "FaturaC"

If INICIO_PAGINA
   Then ;---- Incluido em 09.11.2015 ----------------------------------
        ANT_DTE = [Data de Emissao]
        If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If CHAVEC=1 And SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR)
           Then [Codigo da Empresa]=SYS_USUARIO_CODEMPR
        EndIf

        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                If CHAVEC=1
                   Then [Codigo da Empresa       ]=PARAM_EMPRESA
                        [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Codigo                  ]=PARAM_CLIENTE
                        [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                        [Codigo do Representante ]=PARAM_VENDEDOR
                        [Condicao de Pagamento   ]=PARAM_COND_PAGTO
                        [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                EndIf
        EndIf
       
        If Not IsBlank([Numero Nota Gerada])
           Then 

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

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

                        While True

                          Echo Normal
                          Echo Off
                        
                          opcao1="."  dopcao1=""  ropcao1="Esc"
                        
                          If Not IsBlank(PARAM_DOC_ROM) And SubStr([Docto Nota Gerada],1,2)="RO"
                             Then opcao1="~I~mprimir 2¦ via"  dopcao1=" Imprime 2¦ via Romaneio "  ropcao1="Reimprimir"
                          EndIf     
                          
                          Echo Normal
                          Echo Off
                          ShowPopup " Op‡”es " CENTERED
                              "~R~eemissÆo do documento" : " ReemissÆo/Regera‡Æo da ordem de faturamento do documento "+DoctoGerado :"Imprimir",
                              "~A~lterar a O.F."         : " Altera‡Æo/ReemissÆo da ordem de faturamento do documento "+DoctoGerado :"Alterar",
                              "~E~nviar E-mail"          : " Enviar documento "+DoctoGerado+" para e-mail do cliente              " :"Email",
                              opcao1                     : dopcao1+DoctoGerado                                                      : ropcao1,
                              "~C~ancelar o documento"   : " Cancelamento do documento gerado "+DoctoGerado                         :"Cancelar",
                              Separator,
                              "~S~air"      : " Ignorar op‡äes"                                                        :"Cancela"
                          EndMenu
                          To Opcaoc
                          echo off
  
                          If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                             Then CHAVEC=9
                                  Return
                          EndIf
                     
                          Switch
                            Case Opcaoc="Alterar":
                              If PARAM_BLOQUEIA_ALTERA<>"N" 
                                Then Mensagem("BLOQUEADO, Altera‡Æo/Reemiss„o nÆo ‚ permitida !") 
                                     If PARAM_BLOQUEIA_ALTERA="P" 
                                        Then If Not CHECA_SUPERVISOR() 
                                                Then Loop
                                             EndIf
                                        Else Loop     
                                     EndIf      
                              EndIf
                              QuitLoop
                              
                            Case Opcaoc="Imprimir": 
                              If PARAM_BLOQUEIA_REEMISSAO<>"N"
                                 Then Mensagem("BLOQUEADO, Reemiss„o nÆo ‚ permitida !")
                                      If PARAM_BLOQUEIA_REEMISSAO="P"
                                         Then If Not CHECA_SUPERVISOR()
                                                 Then Loop
                                              EndIf   
                                         Else Loop       
                                      EndIf   
                              EndIf
                              If Not Checagem_Pagina1()
                                 Then Loop
                              EndIf   
                              Moveto "FaturaC"
                              REEMITIR=True
                              Return
                            
                            Case Opcaoc="Reimprimir":          
                              If PARAM_BLOQUEIA_IMPRESSAO2<>"N"
                                 Then Mensagem("BLOQUEADO, ImpressÆo 2¦ via nÆo ‚ permitida !")
                                      If PARAM_BLOQUEIA_IMPRESSAO2="P"
                                         Then If Not CHECA_SUPERVISOR()
                                                 Then Loop
                                              EndIf   
                                         Else Loop       
                                      EndIf   
                              EndIf          

                              REEMITIR  =True
                              SOIMPRIMIR=True
                              Checagem_Pagina1()
                              
                              Moveto "FaturaC"
                              Return

                            Case Opcaoc="Email":  
                              If PARAM_ENVIA_EMAIL<>"S"
                                 Then Mensagem("Fun‡Æo inativa !// //Contactar Suporte Vise caso queira utilizar !")
                                      If PARAM_ENVIA_EMAIL="P"
                                         Then If Not CHECA_SUPERVISOR()
                                                 Then Loop
                                              EndIf   
                                         Else Loop       
                                      EndIf   
                              EndIf
                              
                              REEMITIR  =True
                              SOIMPRIMIR=True
                              enviaEmail=True
                              Checagem_Pagina1()

                              Moveto "FaturaC"
                              Return
                            
                            Case Opcaoc="Cancelar":
                              If PARAM_BLOQUEIA_CANCEL<>"N" 
                                 Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !") 
                                      If PARAM_BLOQUEIA_CANCEL="P" 
                                         Then If Not CHECA_SUPERVISOR() 
                                                 Then Loop
                                              EndIf
                                         Else Loop     
                                      EndIf      
                              EndIf
                              MSG="Esta ordem de faturamento gerou o documento:// //"
                              MSG=MSG+DoctoGerado+"// //"
                              MSG=MSG+"Deseja CANCELAR este documento gerado ?" 
                              If ConfGeral_N(MSG)
                                 Then COR_MENSAGEM="ALERTA" 
                                      MSG="Deseja realmente CANCELAR este documento gerado ?"
                                      If ConfGeral_N(MSG)
                                         Then TIPO="CANCELAR"
                                              Play "FT_DESF"    
                                              CHAVEC=9
                                              Return
                                         Else Loop
                                      EndIf   
                                 Else Loop
                              EndIf              
                          EndSwitch
                        EndWhile
        EndIf
EndIf

If CHAVEC=0 Or Not INICIO_PAGINA                  
   Then Moveto [Codigo]
   
        UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("VERIFICAR", [FaturaC->Codigo])
   
   Else If CHAVEC=1 And SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR)
           Then Moveto [Codigo           ]
           Else Moveto [Codigo da Empresa]
        EndIf   
        [Data de Saida  ]=Today()
        [Data de Emissao]=Today()
        [Hora de Saida  ]=Time()
EndIf

FACA_CHAVEDV=True
FACA_CHAVEI=True
INICIO_PAGINA=False

V_DESTIN=[Codigo da Destinacao]
V_COD   =[Codigo]

While True

      TECLA=" Esc=Retornar  "
    
      If CHAVEC=0
         Then TECLA=TECLA + "Del=Excluir  "
         Else TECLA=TECLA + "             "
      EndIf
      TECLA=TECLA + "                                    PgDn"

      If CHAVEC=1 And IsBlank([])
         Then If Field()="Data de Saida" Or Field()="Data de Emissao"
                 Then []=Today()
              EndIf
              If Field()="Hora de Saida"
                 Then []=Time()
              Endif
      EndIf

      MSGCAMPO=Field()
      If Field()="Consumidor Final"
         Then MSGCAMPO="Consumidor Final (Sim/N„o) * Sim = Calculo ICMS sobre o Valor da Nota Fiscal"
      EndIf
      If Field()="Numero Nota Original"
         Then MSGCAMPO="Informe o Numero da Nota Original a que esta Emiss„o se Refere !"
      EndIf
      If Field()="Codigo da Tabela"
         Then MSGCAMPO="C¢digo da Tabela de Pre‡o"
      EndIf
      If Field()="Tipo Pessoa"
         Then MSGCAMPO=MSGCAMPO+": Fisica, Juridica"
      EndIf
      If Field()="CGC"
         Then MSGCAMPO="CNPJ/CPF"
      EndIf
      If Field()="IE"
         Then MSGCAMPO="Informe o N§, ISENTO ou NAOCONTRIBUINTE p/ Inscri‡„o Estadual"
      EndIf
      If Field()="Codigo"
         Then If [Tipo Movimento Estoque]="S"
                 Then MSGCAMPO="C¢digo do Destinatario"
                 Else MSGCAMPO="C¢digo do Emitente"
              EndIf
      EndIf
      If Field()="Data de Saida"
         Then If [Tipo Movimento Estoque]="S"
                 Then MSGCAMPO="Data de Saida"
                 Else MSGCAMPO="Data de Entrada"
              EndIf
      EndIf
      If Field()="Hora de Saida"
         Then If [Tipo Movimento Estoque]="S"
                 Then MSGCAMPO="Hora de Saida"
                 Else MSGCAMPO="Hora de Entrada"
              EndIf
      EndIf

      If Field()="Numero do Pedido"         Or
         Field()="Numero do Orcamento"      Or
         Field()="Codigo da Empresa"        Or
         Field()="Codigo da Destinacao"     Or
         Field()="Codigo"                   Or
         Field()="UF"                       Or
         Field()="Cidade"                   Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Condicao de Pagamento"    Or
        (Field()="Nome do Autorizado" And [Tipo]="C")
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      If Field()="Nome do Autorizado"
         Then Monta_Opcoes("Autorizado",[Codigo])
      EndIf

      Prompt TECLA
      Wait Field
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN"

      Switch
      Case RetVal="F1":
           If Field()="Numero do Pedido"         Or
              Field()="Numero do Orcamento"      Or
              Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
             (Field()="Codigo" And PARAM_TPC_CLIE<>"S") Or
              Field()="UF"                       Or
              Field()="Cidade"                   Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"
              Then CONSULTAF1()
            EndIf
            If Field()="Nome do Autorizado"
               Then Seleciona_Opcoes("Autorizado","CR")
            EndIf
            If (Field()="Codigo" And PARAM_TPC_CLIE="S")
              Then OP_INSERT_ITEM=True
                   Play "Sw_Clie"
                   If Sw_Cliente_Pesquisado<>""
                      Then [Codigo]=Sw_Cliente_Pesquisado
                   EndIf
            EndIf
      Case RetVal="PGDN":
           If Field()="Numero do Pedido" Or
              Field()="Numero do Orcamento"
              Then Loop
           EndIf

           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If Not IsBlank([Numero Nota Gerada])
                      Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !// J  Gerou Nota Fiscal N§ "+[Numero Nota Gerada])
                      Else If QuerExcluir("")
                              Then GRAVA_LOG=True
                                   EXCLUSAO_C()
                                   CHAVEC=9
                                   QuitLoop
                           EndIf
                   EndIf
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Tabela" :
                If PARAM_UTILIZAVENDEDOR="S"
                   Then Moveto [Comissao do Representante]
                   Else Moveto [Nome do Autorizado]
                EndIf               
           Case Field()="Comissao do Representante" :      
                Moveto [Codigo do Representante]
           Case Field()="Consumidor Final":
                Moveto [Codigo]
           Case Field()="CFO":
                Moveto [Codigo da Destinacao]
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("F")
                   Then EXCLUSAO_C()
                        CHAVEC=9
                        QuitLoop
                Endif
           Case Field()="Codigo" : 
                Moveto [Codigo da Destinacao]
           Case Field()="Codigo da Destinacao":
                If CHAVEC=1
                   Then If SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR)
                           Then If QuerDesfazer("F")
                                   Then EXCLUSAO_C()
                                        CHAVEC=9
                                        QuitLoop
                                Endif
                           Else Moveto [Codigo da Empresa]
                        EndIf   
                   Else If QuerDesfazer("F")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                EndIf
           Case Field()="Numero Nota Original":
                Moveto [Codigo da Destinacao]
           Case Field()="Razao Social":
                Moveto [Tipo Pessoa]
           Case Field()="Nome do Autorizado":
                Moveto [Razao Social]
           Case Field()="Data de Emissao":
                Moveto [Numero Nota Original]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           If IsBlank([])
              Then If Field()="Codigo da Empresa" Or
                      Field()="Codigo da Destinacao" Or
                      Field()="CFO" Or
                      Field()="Data de Emissao" Or
                      Field()="Codigo" Or
                      Field()="Codigo do Representante" Or
                      Field()="Condicao de Pagamento"
                      Then Loop
                   EndIf
           EndIf
           Switch
           Case Field()="Codigo da Empresa":
                If Carrega_Parametros()
                   Then If CHAVEC=1
                           Then [Codigo da Empresa       ]=PARAM_EMPRESA
                                [Codigo da Destinacao    ]=PARAM_DESTINACAO
                                [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                                [Codigo                  ]=PARAM_CLIENTE
                                [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                                [Codigo do Representante ]=PARAM_VENDEDOR
                                [Condicao de Pagamento   ]=PARAM_COND_PAGTO
                                [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                                If PASS=1
                                   Then Moveto [Codigo da Destinacao]
                                   Else Moveto [Codigo]
                                        PASS=1
                                EndIf
                        EndIf
                EndIf
           Case Field()="Codigo da Destinacao":
                GetRecord "Destin" [Codigo da Destinacao] To REG_DESTIN
                If Retval
                   Then If REG_DESTIN["Inativo Destin"]="S"
                           Then Mensagem("Destina‡Æo "+[Codigo da Destinacao]+" est  inativa!")
                                Loop  
                        EndIf
                EndIf  
                V_DESTIN=[]
                If Search("TROCA",[Descricao da Destinacao])>0
                   Then Moveto [Numero Nota Original]
                   Else Moveto [Data de Emissao]
                EndIf
                [IndPres]="9"
           Case Field()="CFO":
                If Search("TROCA",[Descricao da Destinacao])>0
                   Then Moveto [Numero Nota Original]
                   Else Moveto [Data de Emissao]
                EndIf
           Case Field()="Numero Nota Original":
                []=ALINH()
                Moveto [Data de Emissao]
           Case Field()="Data de Emissao":
                If CHAVEC=1 And Not IntervaloData([])
                   Then Loop
                EndIf
                ;---- Verifica a data de emissÆo antes da altera‡Æo e se mˆs diferente nÆo deixa 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)+"                                        ////"+
                                     "Opera‡„o n„o permitida.                                            //"+ 
                                     "Para  tal  situa‡„o  exclua  este lan‡amento e fa‡a um novo na data//"+
                                     "correta!                                                           "
                                     [Data de Emissao]=ANT_DTE
                                     Mensagem(MSG)
                                     Loop        
                        EndIf
                EndIf           
                Moveto [Data de Saida]
           Case Field()="Codigo":
                If Cliente_Inativo()
                   Then Loop
                EndIf
                
                GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] to REG_CLIE_PED  
                If not RetVal
                   Then Mensagem("Cliente Inv lido !")
                        Loop
                   Else If REG_CLIE_PED["Situacao do Cliente"]="RECADASTRO"
                           Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+REG_CLIE_PED["Situacao do Cliente"])
                                Loop
                        EndIf                            
                        If REG_CLIE_PED["Situacao do Cliente"]="PESSIMO"
                           Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
                                If SYS_CODIGO_CLIENTE = "0112"
                                   Then If Not Checa_Supervisor()
                                           Then Loop
                                        EndIf
                                EndIf    
                        EndIf
                EndIf
                
                    
                If CHAVEC=1
                   Then If Search("VEND",[Descricao da Destinacao])>0   And
                           [Nome Fantasia EmitDest]<>"DIVERSOS"         And
                           [Nome Fantasia EmitDest]<>"CONSUMIDOR FINAL" And
                           [Tipo]="C"                                   And
                           PARAM_NBLOQUEIO_SPC > 0
                           Then MSG_SPC="AVISO_SPC"
                                Checa_SPC()
                                Release Vars MSG_SPC
                        EndIf        
                EndIf 
                
                If PARAM_DIAS_ATRASO  ="S" And
                   [FaturaC->Tipo    ]="C" And
                   [Nome Fantasia EmitDest]<>"DIVERSOS" And
               ;;;;Search("VIST",[FaturaC->Descricao CondPagto])=0 And
                   Search("VEND",[FaturaC->Descricao da Destinacao])>0
                   Then If Not Dias_Atraso()
                           Then Moveto [Codigo]
                                Loop
                        EndIf
                EndIf

                If IsBlank([Codigo do Representante])
                   Then [Codigo do Representante]=PARAM_VENDEDOR
                EndIf

                If [Codigo]<>V_COD
                   Then V_REPRES =[Codigo do Representante]
                        [Codigo do Representante]=""
                        [Codigo do Representante]=V_REPRES
                    
                        V_COD=[Codigo]
                EndIf

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

                If CHAVEC=1
                   then UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("PEGAR", [FaturaC->Codigo])
                   else UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("VERIFICAR", [FaturaC->Codigo])
                endif   

                Moveto [Nome do Autorizado]
           Case Field()="Tipo Pessoa":
                Moveto [Razao Social]
           Case Field()="Nome do Autorizado":
                If PARAM_BLOQUEIA_AUTORI="S" And
                   [Nome Fantasia EmitDest]<>"DIVERSOS"
                   Then If Not Checa_Opcoes("Autorizados",[])
                           Then Mensagem("Autorizado n„o cadastrado !")
                                Loop
                        EndIf
                   Else If IsBlank([Nome do Autorizado])
                           Then [CPF do Autorizado  ]=""
                                [Data da Autorizacao]=BlankDate()

                        EndIf
                EndIf
              
                If PARAM_UTILIZAVENDEDOR="S"
                   Then Moveto [Codigo do Representante]
                   Else Moveto [Codigo da Tabela       ]
                EndIf
               
           Case Field()="CPF do Autorizado":
                If PARAM_UTILIZAVENDEDOR="S"
                   Then Moveto [Codigo do Representante]
                   Else Moveto [Codigo da Tabela       ]
                EndIf
           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()="IE":
                If IsBlank([]) Then []="ISENTO" EndIf
                Right
           Case Field()="Codigo do Representante":
                If Not Verifica_Representante([FaturaC->Codigo do Representante])
                   Then Mensagem("Representante/Vendedor Inativo !")
                        Loop
                EndIf          
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante" : 
                Moveto [Codigo da Tabela]
           Case Field()="Codigo da Tabela":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

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

If Isblank([Codigo])
   Then Return False
EndIf   

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

Return False

EndProc ;Cliente_Inativo()

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

If REEMITIR
   Then CHAVEI=9
        Return
EndIf

Item_Ins_Consulta=False

If OP_ITEM="SAI"
   Then Moveto "FaturaI"
   Else Moveto "FaturaID"
        FACA_CHAVEI =True
EndIf

While True
  SomatoriaDosItensTroca()

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

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

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

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

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

            RetVal=MenuVar
    EndIf

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

         Moveto "FaturaC"
         Moveto [Numero da OF]
         Locate ORDFAT
         KeyPress "F7"
         
         IsLockRecord()
   
         If OP_ITEM="SAI"
            Then Moveto "FaturaI"
            Else Moveto "FaturaID"
         EndIf

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

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

         Return
         
    Case Retval="F8":
         Del
                                        
         Echo Normal
         Echo Off
         
         if OP_ITEM="SAI"
            then
                 ShowPopup " Op‡”es " CENTERED
                   "Expedi‡„o ~s~/Pedido" : " Carregar itens da ordem de expedi‡„o sem Pedido":"EXPEDICAOS",
                   "Expedi‡„o c/~O~F  "   : " Carregar itens da ordem de expedi‡„o com OF"    :"EXPEDICAOOF",
                   "~C~ancela  " : " Cancelar"                            :"Cancela"
                 EndMenu
                 To Opcaoc
            else
                 ShowPopup " Op‡”es " CENTERED
                   "Expedi‡„o ~s~/Pedido" : " Carregar itens da ordem de expedi‡„o sem Pedido":"EXPEDICAOS",
                   "~C~ancela  " : " Cancelar"                            :"Cancela"
                 EndMenu
                 To Opcaoc
         endif

         If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
            Then QuitLoop
         EndIf
         Switch
           Case Opcaoc="EXPEDICAOS"  and  OP_ITEM="ENT" : Play("Ft_Expdd") Moveto "FaturaID"
           Case Opcaoc="EXPEDICAOOF" and  OP_ITEM="SAI" : Play("Ft_ExpOF") Moveto "FaturaI"
           Case Opcaoc="EXPEDICAOS"  and  OP_ITEM="SAI" : Play("Ft_Expds") Moveto "FaturaI"
         EndSwitch
         QuitLoop
         
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="PGDN":
         Del
         Moveto [Item da Of]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Faturamento deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         CHAVEI=9

         If OP_ITEM="SAI"
            Then FACA_DIGITAF=True
            Else FACA_CHAVEI =True
         EndIf
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         If OP_ITEM="SAI"
            Then FACA_CHAVEI =False
                 FACA_DIGITAF=False
            Else FACA_CHAVEDV=False
                 FACA_CHAVEI =False
                 FACA_DIGITAF=False
         EndIf
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           If OP_ITEM="SAI"
              Then PAGINA("FaturaI","MR")
              Else PAGINA("FaturaID","MR")
           EndIf   
           
           SEQIT=[Item da OF]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   GRAVA_LOG=True
                                   EXCLUSAO_I()
                                   Release Vars GRAVA_LOG
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf

           SomatoriaDosItensTroca()

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

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

If REEMITIR
   Then CHAVEI=9
        Return
EndIf

Item_Ins_Consulta=False

If OP_ITEM="SAI"
   Then Moveto "FaturaI"
   Else Moveto "FaturaID"
        FACA_CHAVEI =True
EndIf

While True
  SomatoriaDosItensTroca()

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

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

  SEQIT=[]
  CHAVEI=1

  OP_CDBAR=True
  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()
                    If OP_ITEM="SAI"
                       Then Moveto "FaturaI"
                       Else Moveto "FaturaID"
                    EndIf
                    QuitLoop
            EndIf
    EndIf    
  EndWhile  
EndWhile    
                  
EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private NITEMOF,FRACIONADO,ITEM_FRACIONADO

Moveto [Codigo do Item]
Ativa_Lookup()
Moveto [Codigo de Barras ]
Locate Dados_Item
If RetVal
   Then Moveto [Codigo do Item]
        ITEM_FRACIONADO = [Codigo do Item]
   Else Moveto [Codigo do Item]
        ;If Len(Dados_Item) < 10
        ;   Then ITEM_FRACIONADO = AlinhM(Dados_Item,10)
        ;   Else ITEM_FRACIONADO = Dados_Item
        ;EndIf
        ITEM_FRACIONADO = Dados_Item   
        Locate ITEM_FRACIONADO
        If Not RetVal
           Then KeyPress "ESC"
                Del
                Mensagem("Item n„o Cadastrado !")
                Release Vars ITEM_FRACIONADO
                Return
        EndIf   
EndIf   
KeyPress "ESC"

GetRecord "\\Sistemas\\Estoque\\Iten_Com" ITEM_FRACIONADO To FRACIONADO   
If RetVal
   Then If FRACIONADO["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
           Then Mensagem("A Quantidade do Item ["+ITEM_FRACIONADO+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                Del
                Release Vars FRACIONADO,ITEM_FRACIONADO
                Return
        EndIf        
   Else Mensagem("Item n„o Cadastrado !")
        Del
        Release Vars FRACIONADO,ITEM_FRACIONADO
        Return
EndIf
Release Vars FRACIONADO

If PARAM_DUPLICIDADE_ITEM And Not IsBlank(ITEM_FRACIONADO)
   Then NITEMOF=[Item da OF]
        Del
        Moveto [Codigo do Item]
        Locate ITEM_FRACIONADO
        If RetVal
           Then End
                Mensagem("O Item ["+ITEM_FRACIONADO+"], j  est  lan‡ado nesta OF !")
                Release Vars NITEMOF,ITEM_FRACIONADO
                Return
        EndIf
        End Down
        Moveto [Item da OF]
        [Item da OF]=NITEMOF
        
        Release Vars NITEMOF
EndIf
Release Vars ITEM_FRACIONADO
  
ITOK=True
[Quantidade]=Dados_QTD             
CODIGO_BARRA=Dados_Item                

If Not Pega_Dados_Item("Codigo_Barras") Or
   Not CHECA_ESTOQUE()
   Then Del
        Return
EndIf

Registro_Item("Ler")
CalcularPrecoTotal_Item()
Registro_Item("Gravar")

If OP_ITEM="SAI"
   Then SVSVRMERC=SVSVRMERC+[Preco Total   ]
        SVSQTDE  =SVSQTDE  +[Quantidade    ]
        SVCITENS =SVCITENS +1
   Else EVSVRMERC=EVSVRMERC+[Preco Total   ]
        EVSQTDE  =EVSQTDE  +[Quantidade    ]
        EVCITENS =EVCITENS +1
EndIf   

Estoque()

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

Sound 400 400
EndProc   ; (ChaveCdBar)  

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

Item_ok=False

Moveto [Codigo do Item]
Ativa_Lookup()

Switch
  Case Origem="Codigo_Barras":
       Switch
         Case SYS_CODIGO_CLIENTE="0304":
               Moveto [Codigo de Barras]
               Locate IndexOrder by "cod_barras" CODIGO_BARRA
         OtherWise:        
               Moveto [Codigo de Barras]
               Locate IndexOrder by "cod_barras" CODIGO_BARRA
       EndSwitch  
  OtherWise : 
    ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
EndSwitch
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"
       
       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 !")
              return false
       EndIf    
               
       ;---- Verifica se item ‚ aplica‡Æo direta e codigo da grade ‚ vazio ---
       If (SYS_CODIGO_CLIENTE="0322" Or SYS_CODIGO_CLIENTE="0434") And (REG_BUSCA_LOOKUP["Tipo do Item"]="D" And REG_BUSCA_LOOKUP["Codigo da Grade"]<>"")
          Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+
                        "Referˆncia: "+REG_BUSCA_LOOKUP["Referencia"]+"//"+
                         "‚ aplica‡„o direta !")
               return false
       EndIf    
      
       CODIGO_BARRA=REG_BUSCA_LOOKUP["Codigo do Item"]
       VSD_I_Codigo_Item =CODIGO_BARRA
      
       If Origem="Codigo_Barras"
         Then Pega_Preco("Cod_Barras")
         Else Pega_Preco("Novo")
       EndIf
      
       [Codigo do Item]  =CODIGO_BARRA
      
       If Origem="Codigo_Barras"
         Then If [Preco Unitario]<=0
                Then Mensagem("Item sem tabela de pre‡o !")
                     return false
              EndIf
       EndIf               
       
       Ajusta_Dados_Item()
       
       Item_Ok=True

  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf

Echo Off
Return Item_ok
EndProc

;*******************************************************************************
;* Rotina Ajustar Dados do Item                                                *
;*******************************************************************************
Proc Ajusta_Dados_Item()
private Origem, regitens

;;FAMILIA=regitens["Codigo da Familia"] de onde ? 

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

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

              [COFINS_CST     ]="99"
              [COFINS_Aliquota]=BlankNum()
       EndIf        
               
  Else
       ;;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",[FaturaC->Descricao da Destinacao])>0  Or
                       Search("DEVOL",[FaturaC->Descricao da Destinacao])>0  Or
                       Search("BRIND",[FaturaC->Descricao da Destinacao])>0) And
                      SYS_CLIENTE_CONFEC<>"":
                      [CSOSN]="400"

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

               EndSwitch
               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    ]=BlankNum()

                 Case [CSOSN]="201":
                      [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                       If OPCAO_RED_BCICMS="1"
                          Then [Aliquota Reduzida BCICMS]=BlankNum()
                       EndIf
                       [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                       Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])

                 Case [CSOSN]="202" Or [CSOSN]="203":
                      [ICMS_CREDSN_Aliquota]=BlankNum()
                       If OPCAO_RED_BCICMS="1"
                          Then [Aliquota Reduzida BCICMS]=BlankNum()
                       EndIf
                       [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                       Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])

                 Case [CSOSN]="500": 
                      [ICMS_CREDSN_Aliquota]=BlankNum()
                       If OPCAO_RED_BCICMS="1"
                          Then [Aliquota Reduzida BCICMS]=BlankNum()
                       EndIf
                       if Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And 
                          [FaturaC->Tipo Movimento Estoque]="E"
                          then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                               Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                       endif        

                 OtherWise:                          
                      [ICMS_CREDSN_Aliquota]=BlankNum()
                      [MVA                 ]=BlankNum()
                      [ICMS_ST_Aliquota    ]=BlankNum()                  
               EndSwitch

         OtherWise: ;-- DEBITRO/CREDITO -----

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

               Switch
                 Case (TribCST="10" Or TribCST="30" Or TribCST="70"):
                      [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                      Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                 Case TribCST="60" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="E":
                      [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                      Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                 OtherWise:     
                      [MVA             ]=BlankNum()
                      [ICMS_ST_Aliquota]=BlankNum()
               EndSwitch

       EndSwitch
       
EndIf   

If OP_ITEM="ENT"
  Then [Tributacao de IPI]="N"
       [IPI_CST          ]="03"
       [Aliquota de IPI  ]=BlankNum()
       [PIS_CST          ]="99"
       [PIS_Aliquota     ]=BlankNum()
       [COFINS_CST       ]="99"
       [COFINS_Aliquota  ]=BlankNum()
EndIf   

;* Seta Variaveis PegaCFOP
If OP_ITEM="SAI"            
  Then Checa_CFOP      ="S"
       CFO_C           =[FaturaC->CFO      ]
  Else Checa_CFOP      ="E"
       Switch
         Case [Tipo do Item]="P" And [Tributacao de ICMS]="S" : CFO_C="1410"  
         Case [Tipo do Item]="P"                              : CFO_C="1201"
         Case [Tipo do Item]="T" And [Tributacao de ICMS]="S" : CFO_C="1411"  
         Case [Tipo do Item]="T"                              : CFO_C="1202"  
         OtherWise                                            : CFO_C=[FaturaC->CFO]
       EndSwitch
EndIf   
CFOP_TPITEM     =[Tipo do Item      ]
CFOP_TRIBICMS   =[Tributacao de ICMS]
CFOP_TPTRIB     =[Tipo Tributacao   ]
CFOP_EMPRESA    =[FaturaC->Codigo da Empresa ]
CFOP_ATIVEMPRESA=ATIVEMPR
Play "\\Sistemas\\Exporta\\PegaCFOP"        
[CFO            ]=CFO_C
[Tipo Tributacao]=CFOP_TPTRIB

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

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

endproc

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

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

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"
                  OtherWise                          : Campo="I_Quantidade"
                EndSwitch
           Else Campo="I_Codigo_Item"
        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
   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item da OF]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then Confirma()
                  If OK="S"
                     Then CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -61 Or Evento["KeyCode"] = "F3"):
          DigitaDescto_Item()
          
     Case Evento["KeyCode"] = -63  And Not F5_ATIVADO And OP_ITEM="SAI":
          If PARAM_ALTERA_PRECO="P"
             Then If Checa_Supervisor()
                     Then F5_ATIVADO=True
                          Campo_Ant=Campo
                          Campo="I_Preco_Unitario"
                  EndIf
          EndIf
     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"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","TROCA")

     Case Evento["KeyCode"] = 3 and Campo="I_Quantidade" and sys_Codigo_Cliente="0377"and VSD_I_UN_Item="KG" : 
          Play "CalcPCKG"
          Campo="I_Quantidade"
          
     Case Evento["KeyCode"] = -59 : 
          If Campo="I_Codigo_Item"        Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"                        
             Then Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"       Then Moveto [Codigo do Item]       EndIf
                  If Campo="I_Codigo_Cor_Tecido" Then Moveto [Codigo da Cor_Tecido] EndIf
      
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[FaturaC->CFO]
                          Moveto "FaturaC"
                          Moveto [CFO]
                  EndIf
                  
                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[FaturaC->Cidade]
                          FC_UFSERVAnt =[FaturaC->UF]
                          Moveto "FaturaC"
                          Moveto [Cidade]  
                  EndIf      
      
                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      If OP_ITEM="SAI"
                         Then VSD_I_CST_Item=Checa_CST("ICMS","S","")
                         Else VSD_I_CST_Item=Checa_CST("ICMS","E","")
                      EndIf
                      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 
                      If OP_ITEM="SAI"
                         Then VSD_I_CST_IPI=Checa_CST("IPI","S","")
                         Else VSD_I_CST_IPI=Checa_CST("IPI","E","")
                      EndIf
                      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 
                      If OP_ITEM="SAI"
                         Then VSD_I_CST_PIS=Checa_CST("PIS","S","")
                         Else VSD_I_CST_PIS=Checa_CST("PIS","E","")
                      EndIf
                      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 
                      If OP_ITEM="SAI"
                         Then VSD_I_CST_COFINS=Checa_CST("COFINS","S","")
                         Else VSD_I_CST_COFINS=Checa_CST("COFINS","E","")
                      EndIf   
                      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_CSOSN("","")
                      If IsBlank(VSD_I_CSOSN)
                         Then VSD_I_CSOSN=CSTNew
                         Else [CSOSN    ]=VSD_I_CSOSN
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_TISSQN":          
                      CSTNew=VSD_I_TISSQN 
                      VSD_I_TISSQN=Checa_CST("ISSQN","","")
                      If IsBlank(VSD_I_TISSQN)
                         Then VSD_I_TISSQN         =CSTNew
                         Else [Tributacao de ISSQN]=VSD_I_TISSQN        
                      EndIf
                      Release Vars CSTNew
                   OtherWise:         
                     If ConsultaF1()
                        Then Switch            
                                Case Campo="I_CFOP":
                                      FI_CFOAnt     =[FaturaC->CFO] 
                                      [FaturaC->CFO]=FC_CFOAnt
                                      Moveto "FaturaI"
                                      [FaturaI->CFO]=FI_CFOAnt
                                Case Campo="I_MUNSERV":               
                                      [FaturaC->Cidade   ]=FC_MUNSERVAnt
                                      [FaturaC->UF       ]=FC_UFSERVAnt
                                      Moveto "FaturaI"
                                      [FaturaI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [FaturaI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                             EndSwitch
                     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     ]
                          VSD_I_CST_Item      =[Tipo Tributacao  ]
                  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_CFOP"
                     Then VSD_I_CFOP            =[CFO             ]
                          Campo="I_CFOP"
                          Release Vars FI_CFOAnt,FC_CFOAnt
                  EndIf
                  
                  If Campo="I_MUNSERV"
                     Then VSD_I_MUNSERV=[FaturaI->ISSQN_Municipio]
                          VSD_I_UFSERV =[FaturaI->ISSQN_UF       ] 
                          Campo="I_MUNSERV"
                          Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                  EndIf                            
                            
                  If Campo="I_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf

                  If OP_ITEM="SAI"
                     Then Moveto "FaturaI"
                     Else Moveto "FaturaID"
                  EndIf
          EndIf
          Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"               : CancelDialog
            Case Campo="I_Codigo_Item"               : Campo="I_Pedido_Item"
            Case Campo="I_Codigo_Cor_Tecido"         : If CHAVEI=1
                                                          Then Campo="I_Codigo_Item"
                                                          Else CancelDialog
                                                       EndIf
            Case Campo="I_Tamanho":
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If CHAVEI=1
                            Then Campo="I_Codigo_Item"
                            Else CancelDialog
                         EndIf
                 EndIf                                  
            Case Campo="I_Descricao_Item"            : If CHAVEI=1
                                                          Then Campo="I_Codigo_Item"
                                                          Else CancelDialog
                                                       EndIf                                    
            Case Campo="I_Quantidade":
                 If CHAVEI=1
                    Then If Not IsBlank([Numero Pedido_Orcamento])
                            Then Campo="I_Pedido_Item"
                            Else Switch
                                   Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                                   Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                                   OtherWise                          : Campo="I_Codigo_Item" 
                                 EndSwitch                                       
                         EndIf
                    Else CancelDialog
                 EndIf
                 
            Case Campo="I_UN_Item"                  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_Preco_Unitario"    :
                 If F5_ATIVADO
                    Then Campo=Campo_Ant
                         F5_ATIVADO=False
                 EndIf
                 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_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:
          Temp=False
          Switch
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then 
                         FastMsg("Valor inv lido !")
                    Else 
                         if Pega_Dados_Item("")
                            then
                                 ITEM_DUPLICADO = False
                                 
                                 If PARAM_DUPLICIDADE_ITEM
                                    then
                                         Moveto [Codigo do Item]
                                         Locate VSD_I_Codigo_Item
                                         while retval
                                           If [Item da OF]<>SEQIT 
                                              Then ITEM_DUPLICADO=True
                                                   quitloop
                                           EndIf
                                           skip
                                           if eot() then quitloop endif
                                           Locate Next VSD_I_Codigo_Item
                                         endwhile
                                         
                                         Moveto [Item da OF]
                                         Locate [FaturaC->Numero da OF],SEQIT
                                 EndIf
                            
                                 If ITEM_DUPLICADO
                                    Then
                                         fastMSg("O Item ["+VSD_I_Codigo_Item+"] j  existe neste Pedido !")
                                    else
                                         Registro_Item("Ler")
                                         
                                         switch
                                            Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                                            Case PARAM_TAMANHO="S"               : Campo="I_Tamanho"
                                            Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                                            OtherWise                            : Campo="I_Quantidade"
                                         endswitch
                                 endif   
                         endif     
                 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"
                    OtherWise                 : Campo="I_Quantidade" 
                 EndSwitch                
                 
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then Moveto [Codigo da Cor_Tecido]
                         Ativa_Lookup()
                         Moveto [Codigo da Cor_Tecido]
                         Locate VSD_I_Codigo_Cor_Tecido
                         If RetVal
                            Then KeyPress "ESC"
                                 If OP_ITEM="SAI"
                                    Then Moveto "FaturaI"
                                    Else Moveto "FaturaID"
                                 EndIf
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                                 Campo="I_Tamanho"
                            Else Mensagem("Cor/Tecido n„o Cadastrado !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                                 KeyPress "ESC"
                         EndIf
                    Else VSD_I_Descricao_Cor_Tecido=""
                         Campo="I_Tamanho"
                 EndIf
                 Echo Off
                 
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 Switch
                    Case PARAM_TAMANHO="S"    : Campo="I_Tamanho"
                    OtherWise                 : Campo="I_Quantidade" 
                 EndSwitch  
                 
            Case Campo="I_Tamanho":
                 VSD_I_Tamanho=ControlValue("I_Tamanho")
                 Campo="I_Quantidade"

            Case Campo="I_Quantidade" :
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To FRACIONADO
                 If RetVal
                    Then If FRACIONADO["Fracionado"]="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                            Else [Quantidade]=VSD_I_Quantidade
                                 
                                 If [Quantidade]>0 And CHECA_ESTOQUE()
                                    Then 
                                         CalcularPrecoTotal_Item()
                                         
                                         Switch
                                           Case PARAM_ALTERA_PRECO="N" And
                                                Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
                                                VSD_I_Preco_Unitario<=0       : Campo="I_Quantidade"  
                                                                                Mensagem("Item sem tabela de pre‡o !")
                                           Case PARAM_ALTERA_PRECO="S"        : Campo="I_Preco_Unitario"
                                           Case PARAM_ALTERA_PRECO="N" And Search("VEND",[FaturaC->Descricao da Destinacao])=0 
                                                                              : Campo="I_Preco_Unitario"
                                           Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                                           OtherWise                          : 
                                                If ALTERA_PRECO_TOTAL="S"
                                                   Then Campo="I_Preco_Total"
                                                   Else Switch
                                                         Case PARAM_IMPOSTOS="S" : Switch
                                                                                     Case VSD_I_Tipo_Item="C"         : Campo="I_TISSQN"
                                                                                     Case TPEMPR="SIMPLES NACIONAL" Or 
                                                                                          TPEMPR="SIMPLES NAC. ESRB"  : Campo="I_CSOSN"
                                                                                     OtherWise                        : Campo="I_CST_Item"
                                                                                   EndSwitch  
                                                         Case PARAM_VOLUMES="S"  : Campo="I_Numero_Volumes"
                                                         OtherWise               : AcceptDialog
                                                       EndSwitch      
                                                EndIf   
                                         EndSwitch
                                 EndIf
                         EndIf
                 EndIf                
                 Release Vars FRACIONADO
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Switch
                   Case PARAM_ALTERA_PRECO="S"  : Campo="I_Preco_Unitario"
                   Case PARAM_ALTERA_PRECO="N" And Search("VEND",[FaturaC->Descricao da Destinacao])=0 
                                                : Campo="I_Preco_Unitario"
                   Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                   OtherWise                    : If ALTERA_PRECO_TOTAL="S"
                                                     Then Campo="I_Preco_Total"
                                                     Else Switch
                                                           Case PARAM_IMPOSTOS="S" : Switch
                                                                                       Case VSD_I_Tipo_Item="C"         : Campo="I_TISSQN"
                                                                                       Case TPEMPR="SIMPLES NACIONAL" Or 
                                                                                            TPEMPR="SIMPLES NAC. ESRB"  : Campo="I_CSOSN"
                                                                                       OtherWise                        : Campo="I_CST_Item"
                                                                                     EndSwitch  
                                                           Case PARAM_VOLUMES="S"  : Campo="I_Numero_Volumes"
                                                           OtherWise               : AcceptDialog
                                                         EndSwitch      
                                                  EndIf
                 EndSwitch 
  
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 
                 CalcularPrecoTotal_Item()

                 CONTINUA=True
                 
                 If [FaturaC->Tipo Movimento Estoque]="S" And Search("VEND",[FaturaC->Descricao da Destinacao])>0 And VSD_I_Preco_Unitario<=0        
                    Then CONTINUA=False
                         Mensagem("Informe o pre‡o para prosseguir!")
                 EndIf
                 
                 If CONTINUA
                    Then 
                         If F5_ATIVADO=True  And OP_ITEM="SAI"
                            Then F5_ATIVADO=False
                                 Campo=Campo_Ant

                                 Grava_LogEx("Troca AltPreco")
                            else     
                                 Switch
                                   Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                                   Case PARAM_IMPOSTOS="S"     : Switch
                                                                   Case VSD_I_Tipo_Item="C"         : Campo="I_TISSQN"
                                                                   Case TPEMPR="SIMPLES NACIONAL"  Or 
                                                                        TPEMPR="SIMPLES NAC. ESRB"  : Campo="I_CSOSN"
                                                                   OtherWise                        : Campo="I_CST_Item"
                                                                 Endswitch  
                                   Case PARAM_VOLUMES="S"      : Campo="I_NUMERO_VOLUMES"
                                   OtherWise                   : AcceptDialog
                                 EndSwitch    
                         EndIf
                 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          
                         If ALTERA_PRECO_TOTAL="S"
                            Then Campo="I_Preco_Total"
                            Else Switch
                                   Case PARAM_IMPOSTOS="S"       : If VSD_I_Tipo_Item="C"
                                                                      Then Campo="I_TISSQN"
                                                                      Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                                              Then Campo="I_CSOSN"
                                                                              Else Campo="I_CST_Item"
                                                                           EndIf
                                                                  EndIf           
                                   Case PARAM_VOLUMES="S"        : Campo="I_NUMERO_VOLUMES"
                                   OtherWise                     : AcceptDialog
                                 EndSwitch  
                         EndIf
                 EndIf         
                 
                
            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 
                 CalcularPrecoTotal_Item()

                 Switch
                   Case PARAM_IMPOSTOS="S" : Switch
                                               Case VSD_I_Tipo_Item="C"         : Campo="I_TISSQN"
                                               Case TPEMPR="SIMPLES NACIONAL" Or 
                                                    TPEMPR="SIMPLES NAC. ESRB"  : Campo="I_CSOSN"
                                               OtherWise                        : Campo="I_CST_Item"
                                             EndSwitch  
                   Case PARAM_VOLUMES="S"  : Campo="I_Numero_Volumes"
                   OtherWise               : AcceptDialog
                 EndSwitch       

            Case Campo="I_CSOSN": 
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 If Not IsBlank(VSD_I_CSOSN)
                    Then TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3)
                         If TribCST<>""
                            Then
                                 If (TribCST="500" And Search("DEVOL",[FaturaC->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",[FaturaC->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("FATURA",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 If OP_ITEM="SAI"
                            Then TribCST=Checa_CST("ICMS","S",VSD_I_CST_Item)
                            Else TribCST=Checa_CST("ICMS","E",VSD_I_CST_Item)
                         EndIf
                         ;;;;;;TribCST=Checa_CST("ICMS",[FaturaC->Tipo Movimento Estoque],VSD_I_CST_Item)
                         If TribCST<>""
                            Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 
                                 VSD_I_TICMS=Pega_TipoTributacao("ICMS",VSD_I_CST_Item) 

                                 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",[FaturaC->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",[FaturaC->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",[FaturaC->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("FATURA",VSD_I_TICMS,[Codigo MVA])
                                        EndIf                                                 
        
                                 EndIf

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

            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
                 
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"
                                
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)
                    Then If OP_ITEM="SAI"
                            Then TribCST=Checa_CST("IPI","S",VSD_I_CST_IPI)
                            Else TribCST=Checa_CST("IPI","E",VSD_I_CST_IPI)
                         EndIf
                         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 If OP_ITEM="SAI"
                            Then TribCST=Checa_CST("PIS","S",VSD_I_CST_PIS)
                            Else TribCST=Checa_CST("PIS","E",VSD_I_CST_PIS)
                         EndIf
                         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 If OP_ITEM="SAI"
                            Then TribCST=Checa_CST("COFINS","S",VSD_I_CST_COFINS)
                            Else TribCST=Checa_CST("COFINS","E",VSD_I_CST_COFINS)
                         EndIf 
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_COFINS   =BlankNum()
                                         VSD_I_ACOFINS     =BlankNum()
                                         VSD_I_Valor_COFINS=BlankNum()
                                         Campo="I_CFOP"
                                    Else Campo="I_ACOFINS"
                                EndIf
                            Else Mensagem("CST COFINS inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf

            Case Campo="I_ACOFINS":
                 VSD_I_ACOFINS=ControlValue("I_ACOFINS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CFOP"
                    Else Campo="I_BC_COFINS"
                 EndIf  

            Case Campo="I_BC_COFINS":
                 VSD_I_BC_COFINS=ControlValue("I_BC_COFINS")
                 Campo="I_Valor_COFINS"   
                               
            Case Campo="I_Valor_COFINS":
                 VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
                 Campo="I_CFOP"

            Case Campo="I_CFOP":
                 VSD_I_CFOP=ControlValue("I_CFOP")
                 Moveto "FaturaC"
                 Moveto [CFO]
                 If Busca_Lookup("Codigo Fiscal de Operacao",VSD_I_CFOP,"CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                    Then Switch
                            Case OP_ITEM="SAI" And SubStr(VSD_I_CFOP,1,1)<>SubStr([FaturaC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[FaturaC->CFO]+" !")
                            Case OP_ITEM="ENT" And SubStr(VSD_I_CFOP,1,1)>="5"                       :
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere cfop de entrada !")
                            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
                 If OP_ITEM="SAI"
                    Then Moveto "FaturaI"
                    Else Moveto "FaturaID"
                 EndIf
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else AcceptDialog
                 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 AcceptDialog
                 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")
                 AcceptDialog
                 
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"        Or
   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_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"                : MSGCAMPO="Tamanho"
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"

  Case Campo="I_Quantidade"             : 
    switch
      case sys_Codigo_Cliente="0377" and
           VSD_I_UN_Item="KG"           : MSGCAMPO="Quantidade, Ctrl+C = Calcular Pe‡as->Kg"
      otherwise                         : MSGCAMPO="Quantidade"
    endswitch
    
  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_AST"                    : MSGCAMPO="Aliquota da Subst.Tribut ria"
  Case Campo="I_BC_ST"                  : MSGCAMPO="Base de c lculo da Subst.Tribut ria com seus rateios proporcionais"  
  Case Campo="I_Valor_ST"               : MSGCAMPO="Valor da Subst.Tribut ria"

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

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

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

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

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

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

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

  OtherWise                             : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else If PARAM_ALTERA_PRECO="P" And OP_ITEM="SAI"
           Then TECLA=TECLA+"F5=Altera Pre‡o  "
        EndIf
EndIf

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp
EndProc   ; (Item_Dialog)

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

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
       [Tamanho                   ]=VSD_I_Tamanho

       [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          ]=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
       [Informacoes_Adicionais    ]=VSD_I_InfAdic

       [Referencia                ]=VSD_I_Referencia
       UnLockRecord
       SaveTables
       
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item da OF                ]
       If CHAVEI=1
          Then VSD_I_Pedido=[FaturaC->Numero do Orcamento       ]
          Else VSD_I_Pedido=[Numero Pedido_Orcamento            ]
       EndIf
       
       VSD_I_Pedido_Item            =[Item Pedido_Orcamento     ]

       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       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   ]
       VSD_I_Tamanho                =[Tamanho                   ]

       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                =BlankNum()
     ;;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_InfAdic                =[Informacoes_Adicionais    ]
       
       VSD_I_Referencia             =[Referencia                ]
      
EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item da OF]
Locate [FaturaC->Numero da OF],SEQIT
CopyToArray RegItem
QUANT   =[Quantidade        ]
CTTOTAL =NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
Registro_Item("Ler")
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
Private TitShow
F5_ATIVADO=False

MSG_Pedido_Orcamento="......"
MSG_NUMERO_LINHAS=""
MSGCAMPO=""

If OP_ITEM="SAI"
   Then TitShow="SAIDA  "
   Else TitShow="ENTRADA"
EndIf   

ModoLocalizarItem("","","")

Showdialog "Dados do Item [      ] "+TitShow Proc "Item_Dialog"
   Trigger "OPEN"
   Key "F1","TAB","ReverseTab","ENTER","ESC","F3","F4","F5","F6","F7","F8","F9","ClearArea","HOME","END","PGDN","PGUP",3
   @ 01,0 height 22 width 80

   Accept @ -01,39 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  @ 00,50 "Referˆncia" For "I_Referencia"
   Accept @ 00,62 Width 16 "A14" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia  

   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

   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,30 "TM" For "I_Tamanho"
   Accept @ 05,30 Width 05 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho

   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,41 "%Comiss„o" For "I_Comissao_Item"
   Accept @ 09,42 Width 09 "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  @ 10,58 "CFOP" For "I_CFOP"
   Accept @ 11,58 Width 08 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 10,67 "NCM" For "I_NCM"
   Accept @ 11,67 Width 11 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM

   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 Finalizar o Registro                                            *
; *******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI=1
           Then Del
           Else CopyFromArray RegItem
                UnLockRecord
                If CHAVEI=8
                   Then Exclusao_I()
                EndIf
                CHAVEI=9
        EndIf
EndIf
EndProc   ; (Finaliza_Registro)

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

TabelaRefC="FaturaC"  TabelaRefI="FaturaI"

Aguarde("Somando itens")

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

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

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

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

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

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

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

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

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

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

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

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

Monta_Devolucao()

Moveto TabelaRefI
nitens=0
Scan 
  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
     Else VRSERV=VRSERV+[Preco Total]
  EndIf

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

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

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

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

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

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

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

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

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

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

  It_vr_ii[nitens]         =[II_Valor Imposto        ]

  If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
     SubStr(Directory(),1,1)<>"X"                              And
     (It_csosn_icms[nitens]="101" Or It_csosn_icms[nitens]="201")
     Then VRBCICMS_CREDSN  =VRBCICMS_CREDSN+It_prtotal[nitens]
  EndIf   

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

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

          It_vr_icmscred[nitens]   =BlankNum()

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

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

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

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

  EndIf   

EndScan
LimpAguarde()

Moveto "FaturaC"
CHAVEF=0

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

If CHAVEF=9
   Then Return   
EndIf

CALC_OF()

[Codigo da Transportadora]=PARAM_TRANSPORTADORA
[Frete por Conta         ]="2"

Moveto [Condicao de Pagamento]

If REEMITIR
   Then CONFIMPRIME()
        FACA_DIGITAF=False
        FACA_DIGITAC=False
        FACA_CHAVEI =False
        FACA_CHAVEDV=False
        Return
EndIf

SomaVenctos("FaturaC","FaturaV")
        
While True

      MSGCAMPO=Field()
      TECLA=" Esc=Retornar               Alt+F=Fun‡”es                 PgUp  PgDn=Finalizar"
      
      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()="Especie de Volumes"           Then MSGCAMPO="pausa"                                              EndIf
  
      If Field()="Condicao de Pagamento" Or
         Field()="Forma de Pagamento"
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf
  
      Prompt TECLA

      Wait Field
           Until "ESC","ENTER","PGDN","F8","DOWN","PGUP",-33, "F1","F4","F","D","F6","F9","F7","F5"

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F4  ~C~alcula Vencimentos  ": " Calcula os Vencimentos           " :"F4",
             "F5  ~O~bservacao           ": " Observacao da Nota Fiscal        " :"F5",
             "F8  ~V~encimentos          ": " Vencimentos                      " :"F8",
             "F9  ~T~roco                ": " Valor para Troco                 " :"F9", 
             "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()="Condicao de Pagamento" Or
              Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4":
           If IsBlank([Composicao de Dias])
              Then Mensagem("Informe a Composi‡„o de Dias para se calcular os Vencimentos!")
                   Loop
           EndIf      
           
           VrEntrada_Digita()
           
           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 "FaturaC"
                           Loop
                   EndIf
                   
                   UnLockRecord
           EndIf
           
           CALC_VENCTOS()
           SomaVenctos("FaturaC","FaturaV")
                                
      Case RetVal="F5":
           CampoAnt=Field()         
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
                      
      Case RetVal="F8" Or RetVal="DOWN":     
           If UTILIZANDO_CP_FP_CLIENTE and [Valor DebitoCredito]<0
              Then Mensagem ("Edi‡„o de Vencimentos n„o dispon¡vel!//Verificar com o Supervisor!")
              Else Moveto "FaturaV"    
                   While True
                     CHAVEV()
                     If CHAVEV=9
                        Then QuitLoop
                     EndIf
                     Controla_EdicaoV()
                   EndWhile
                   SetaCorRegistro("Padrao")

                   Moveto "FaturaC"
                   Moveto [Tipo de Pagamento]
           EndIf          
           
      Case RetVal="F9":            
           If [FaturaC->Valor DebitoCredito]<0
              Then DIGITA_TROCO() 
              Else FastMsg("N„o foi localizado d‚bito neste lan‡amento!")
           EndIf
      Case RetVal="F7":
           VrTCCredito_Digita()

      Case RetVal="F6":
           Play "FT_LTC"

      Case RetVal="PGUP":
           CHAVEF=9
           FACA_DIGITAF=False
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])  Then fastmsg("Tipo Pagto Invalido !")  Loop EndIf
           If IsBlank([Forma de Pagamento]) 
              And [Tipo de Pagamento]<>"O"  Then fastmsg("Forma Pagto Invalida !") Loop EndIf

           If UTILIZANDO_CP_FP_CLIENTE and [Valor DebitoCredito]<0 and Not LiberaCondicaoeFormaPagamento()
              then Loop
           endif
           
           If Search("TROCA",[FaturaC->Descricao da Destinacao])>0
              Then If [Tipo de Pagamento]<>"O" And
                      [Valor DebitoCredito]<0
                      Then Moveto "FaturaV"
                           TOT_VECTOS=0
                           CHAVEV=0
                           Scan
                             If [Data]<[FaturaC->Data de Emissao]
                                Then CHAVEV=1
                                     MSG="Vencimento invalido !// //"
                                     MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                                     MSG=MSG+" inferior a data de emiss„o !"
                                     Mensagem(MSG)
                             EndIf
                             TOT_VECTOS=TOT_VECTOS+[Valor]
                           EndScan
                           Moveto "FaturaC"
                           If CHAVEV=1
                              Then Loop
                           EndIf
                           
                           msg=""
                           Switch
                             case PARAM_TITCRED="T":
                               if [Tipo Movimento Estoque]="S"
                                  then If StrVal(TOT_VECTOS-[Valor TC])<>StrVal([Valor DebitoCredito]*-1)
                                          Then msg="O valor total dos vencimentos menos t¡tulo de cr‚dito,// difere do valor da opera‡Æo !"
                                       EndIf
                               endif
                               if [Tipo Movimento Estoque]="E"
                                  then If StrVal(TOT_VECTOS-[Valor TC])<>StrVal([Valor DebitoCredito])
                                          Then msg="O valor total dos vencimentos menos t¡tulo de cr‚dito,// difere do valor da opera‡Æo !"
                                       EndIf
                               endif
                             
                             otherwise                                :
                               if [Tipo Movimento Estoque]="S"
                                  then If StrVal(TOT_VECTOS)<>StrVal([Valor DebitoCredito]*-1)
                                          Then msg="O valor total dos vencimentos difere do valor da oper‡a !"
                                       EndIf
                               endif
                               if [Tipo Movimento Estoque]="E"
                                  then If StrVal(TOT_VECTOS)<>StrVal([Valor DebitoCredito])
                                          Then msg="O valor total dos vencimentos difere do valor da oper‡a !"
                                       EndIf
                               endif
                               
                           endSwitch
                           if msg<>""
                              then mensagem(msg)
                           endif   
                   Endif
           EndIf
           CONFIMPRIME()
           FACA_DIGITAF=False
           FACA_DIGITAC=False
           FACA_CHAVEI =False
           FACA_CHAVEDV=False
           QuitLoop
      Case RetVal="F":
           Campo_Ant=Field()
           DIGITA_FRETE()
           CALC_OF()
           Moveto Field Campo_Ant
      Case RetVal="D":
           If Not Field()="Forma de Pagamento"
              Then DIGITA_DESCTO()
                   CALC_OF()
              Else KeyPress "D"
           EndIf
      Case RetVal="ESC":
        Switch
           Case Field()="Especie de Volumes"       Or
                Field()="Condicao de Pagamento":
                CHAVEF=9
                FACA_DIGITAF=False
                QuitLoop
           Case Field()="Tipo de Pagamento":
                Moveto [Condicao de Pagamento]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Condicao de Pagamento":          
                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]="OU"
                        Moveto [Forma de Pagamento]
                   Else Moveto [Numero de Parcelas]               
                EndIf   
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
                Moveto [Tipo de Pagamento]
           Case Field()="Especie de Volumes":
                ;nÆo faz nada
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile

EndProc

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc Monta_Devolucao()
private VRDEV

VRDEV=0
Moveto "FaturaID"
Scan
  VRDEV=VRDEV+[Preco Total]
EndScan

Moveto "FaturaC"
[Valor Devolucao]=VRDEV

EndProc

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc CHAVEV()
While True
  Moveto "FaturaV"

  SomaVenctos("FaturaV","FaturaV")

  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

        MSGCAMPO=""
        TECLA= " Esc=Retornar  F7=Paginar  F9=LimpaVenctos  F6=TC"

        Prompt TECLA

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

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               SomaVenctos("FaturaV","FaturaV")
             
               PAGINA("FaturaV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             while true
               if RecordStatus("New")
                  then quitloop
               endif   

               if PARAM_TITCRED="T" And 
                  [Forma de Pagamento]="TC" and
                  ( substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" ) 
                  then skip    
                       if eot() then quitloop endif   
                  else unlockrecord
                       del
               endif        
             endwhile
             QuitLoop
              
        Case RetVal="F6":
             del
             Play "FT_LTC"
             quitloop

        Case Retval="ESC":
             CHAVEV=9
             Del
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVEV=0
                Else CHAVEV=1
                     End Down
                     [Sequencia]=SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DIGITAV()
private fpold

If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else 
        if PARAM_TITCRED="T" and [Forma de Pagamento]="TC"
           then Mensagem("Edi‡Æo para 'TC' nÆo permitida!")
                return
        ENdIf   
        
        Moveto [Data]
EndIf
FPAGTO=[Forma de Pagamento]
While True
  TECLA= " Esc=Retornar  "
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
     Else TECLA=TECLA+"             "
  EndIf
  
  fpold=[Forma de Pagamento]
  
  MSGCAMPO=field()
  If Field()="Forma de Pagamento"
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait 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":
       If QuerExcluir("")
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER":
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[FaturaC->Data de Emissao]+ND
               Else Right
            EndIf
       Case Field()="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 PARAM_TITCRED="T" and []="TC"
               then
                    Mensagem("Forma Pagamento nÆo permitida aqui, usea fun‡Æo [F6]=TC !")
                    []=fpold
                    
                    Loop
            endif   
            
            If PARAM_ALTERA_FP="S"
               Then If []<>FPAGTO And (FPAGTO="CT" Or FPAGTO="CD" Or FPAGTO="CH" Or FPAGTO="CP" Or FPAGTO="CL")
                       Then Switch
                              Case FPAGTO="CH" or FPAGTO="CP" :
                                   Moveto "FaturaV"
                                   If [Codigo_Banco  ]<>"" Or   
                                      [Nome_Banco    ]<>"" Or   
                                      [Agencia       ]<>"" Or   
                                      [Numero_Cheque ]<>"" Or   
                                      [Titular_Cheque]<>""  
                                      Then ConfGeral("Se continuar a fazer essa altera‡Æo os dados//"+
                                                     "armazenados serÆo perdidos.////"+
                                                     "Deseja continuar o processo ?")
                                           If OK<>"S"
                                              Then []=FPAGTO
                                                   Loop
                                              Else [Codigo_Banco  ]=""
                                                   [Nome_Banco    ]=""
                                                   [Agencia       ]=""
                                                   [Numero_Conta  ]=""
                                                   [Numero_Cheque ]=""
                                                   [Tipo_Emitente ]=""
                                                   [Titular_Cheque]=""
                                                   [Cidade        ]=""
                                                   [UF            ]=""
                                                   [Observacao    ]=""
                                                   [CPF           ]=""
                                           EndIf
                                   EndIf
                              Case FPAGTO="CT" Or FPAGTO="CD" Or FPAGTO="CL":
                                   Moveto "FaturaV"   
                                   If [Numero do Cartao]<>"" Or
                                      [Nome do Cartao  ]<>""
                                      Then ConfGeral("Se continuar a fazer essa altera‡Æo os dados//"+
                                                     "armazenados serÆo perdidos.////"+
                                                     "Deseja continuar o processo ?")
                                           If OK<>"S"
                                              Then []=FPAGTO
                                                   Loop
                                              Else [Numero do Cartao]=""
                                                   [Nome do Cartao  ]=""
                                           EndIf
                                   EndIf   
                            EndSwitch  
                    EndIf     
               Else If []<>FPAGTO And Not IsBlank(FPAGTO)
                       Then Mensagem("Para mudar forma de Pagto exclua e inclua novamente este Vencimento Ok !")
                            []=FPAGTO
                            Loop
                    EndIf         
            EndIf        
            FPAGTO=[]
            If []="CH" or []="CP"
               Then Play "FT_ECH"
               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

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

If OP_ITEM="ENT"
   Then Return
EndIf
If [FaturaC->Atualiza Estoque]<>"S" Or
   IsBlank([FaturaI->Codigo do Item]) Or
   [FaturaI->Tipo do Item]="C" Or [FaturaI->Tipo do Item]="D" Or [FaturaI->Tipo do Item]="F" Or
   [FaturaI->Tipo do Item]="G" Or [FaturaI->Tipo do Item]="H" Or [FaturaI->Tipo do Item]="I"
   Then Return
EndIf

;---- 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
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))   

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [FaturaC->Codigo da Empresa],
         [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
             Then Moveto "FaturaI"
                  Return False
             Else Loop
          EndIf
  EndIf
  While IsLockRecord() EndWhile
  QuitLoop
EndWhile
CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
If CUSTO=0 Or IsBlank(CUSTO)
   Then CUSTO=[Ultimo Custo Atual]
EndIf

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

Moveto "FaturaI"
[Custo Medio Unitario]=CUSTO
EndProc

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

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

If Not IsAssigned(PARAM_CHECA_ESTOQUE_SEMMENSSAGEM) Then PARAM_CHECA_ESTOQUE_SEMMENSSAGEM = True EndIf

;---- 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
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))   

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

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

UnLockRecord

Moveto "FaturaI"
If NOVOSALDO>=0
   Then Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
        Return True
   Else If PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
           Then Mensagem("Estoque Insuficiente em "+LTrim(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

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

OP_ITEM="SAI"
Moveto "FaturaI"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  EXCLUSAO_I()
EndWhile

Moveto "FaturaID"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile

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

Moveto "FaturaC"
If GRAVA_LOG Then Grava_LogEx("Troca") EndIf
Del
EndProc   ;  (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
CHAVEI=8
ESTOQUE()
If OP_ITEM="SAI"
   Then Moveto "FaturaI"
   Else Moveto "FaturaID"
EndIf
If GRAVA_LOG Then Grava_LogEx("Item da Troca") EndIf
Del

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

EndProc  ;  (Exclusao_I)

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

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

MSGCAMPO=""
LimpaRodape(0)

VSD_TG_EDest = "***Indefinido***"  
GetRecord "\\Sistemas\\Cadastro\\Destmail" [FaturaC->Codigo],"C" To REG_DestE
If not RetVal
  Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To REG_DestinatE
       If RetVal
          Then VSD_TG_EDest = REG_DestinatE["Endereco_Eletronico"]
               If VSD_TG_EDest = "" then VSD_TG_EDest = "***Indefinido***"  endIf
       EndIf 
  Else VSD_TG_EDest = REG_DestE["Email"] 
EndIf

Rateio_BC_Itens("FaturaC")

;***** Apenas reimprir romaneio *********************
If REEMITIR And SOIMPRIMIR
   Then Moveto "FaturaC"
        UnLockRecord
        Do_It!
        SaveTables
        
        CoEditKey                            
        FormKey
        
        While True
          If IsBlank(PARAM_RELAT_ROMA)
            Then Mensagem("Romaneio n„o configurado, ver parƒmetros !")
                 QuitLoop
          EndIf        
          
          CODFISC  ="ROM"  ; PadrÆo
          SERIEFISC="RO"
          
          NOTAFISC=[FaturaC->Numero Nota Gerada]
          If IsBlank([FaturaC->Numero Nota Gerada])
             Then CODFISC  =PARAM_DOC_ROM
                  SERIEFISC=PARAM_SER_ROM
             Else CODFISC  =[FaturaC->Docto Nota Gerada ]
                  SERIEFISC=[FaturaC->Serie Nota Gerada ]
          EndIf     
          
          NUMCOPIA=PARAM_NVIAS_ROMANEIO
          MSGDISPOSITIVO="Romaneio"
          If enviaEmail 
            Then DISPOSITIVO_OPCAO="V"
                 N_COPIAS=1
                 array CheckTG_OPEMAIL[1]
                 CheckTG_OPEMAIL[1] = true
                 PDFZEBRA = false
                 ARQ_EMAIL= PrivDir()+[FaturaC->Numero Nota Gerada]+".txt"
                 Play PARAM_RELAT_ROMA
            Else DispositivoI("FAT")
                 If OK=""
                   Then QuitLoop
                 EndIf
                 N_COPIAS=NUMCOPIA
                 Play PARAM_RELAT_ROMA
          EndIf
          
          QuitLoop
        EndWhile

        Moveto "FaturaC"
        UnLockRecord
        FormKey
        
        SaveTables

        Return
EndIf

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

UnLockRecord
Do_It!

Echo Off
SaveTables

CoEditKey                            
FormKey

If (PARAM_LIMITE_CREDITO="S" Or PARAM_LIMITE_CREDITO="P") And
   [FaturaC->Tipo     ]="C" And
   [Nome Fantasia EmitDest]<>"DIVERSOS" And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
   Search("VIST",[FaturaC->Descricao CondPagto])=0
   Then If Not Limite_Credito()
           Then Moveto "FaturaC"
                UnLockRecord
                FormKey
                Return
        EndIf
EndIf

While True

  If Not IsBlank(PARAM_RELAT_ROMA) And Not IsBlank(PARAM_RELAT_NF)
     Then
         ;Echo Normal
          Echo Off
          ShowPopup " Impress„o " CENTERED
              "~S~uspende"    : " N„o Imprime no momento":"Suspende",
              "~R~omaneio"    : " Imprime Romaneio"      :"Romaneio",
              "~N~ota Fiscal" : " Imprime Nota Fiscal"   :"Nota Fiscal"
          EndMenu To Opcaoc

          echo off

          If Opcaoc="Esc" Or Not Retval Or Opcaoc="Suspende"
             Then QuitLoop
          EndIf

     Else If Not IsBlank(PARAM_RELAT_ROMA)
             Then Opcaoc="Romaneio"
             Else Opcaoc="Nota Fiscal"
          EndIf
  EndIf

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

  Switch
    Case Opcaoc="Nota Fiscal":
         CODFISC  ="NF1"  ; PadrÆo
         SERIEFISC="M-1"

         If IsBlank([FaturaC->Numero Nota Gerada])
            Then CODFISC  =PARAM_DOC_NF
                 SERIEFISC=PARAM_SER_NF
            Else NOTAFISC =[FaturaC->Numero Nota Gerada]
                 CODFISC  =[FaturaC->Docto Nota Gerada ]
                 SERIEFISC=[FaturaC->Serie Nota Gerada ]
         EndIf  

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

         If IsBlank([FaturaC->Numero Nota Gerada])
            Then CODFISC  =PARAM_DOC_ROM
                 SERIEFISC=PARAM_SER_ROM
            Else NOTAFISC =[FaturaC->Numero Nota Gerada]
                 CODFISC  =[FaturaC->Docto Nota Gerada ]
                 SERIEFISC=[FaturaC->Serie Nota Gerada ]
         EndIf  

  EndSwitch

  If IsBlank([FaturaC->Numero Nota Gerada])
     Then Moveto "NumeroNf"
          Moveto [Codigo da Empresa]
          Locate [FaturaC->Codigo da Empresa],CODFISC
          If RetVal
             Then While True
                    NOTAFISC = [Proximo Numero]
                    NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")

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

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

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

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

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

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

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

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

     Else Moveto "FaturaC"
          ConfGeral("Confirma Emiss„o "+Opcaoc+" N§ "+NOTAFISC+" ?")
          If OK="N"
             Then If IsBlank([FaturaC->Numero Nota Gerada])
                     Then Moveto "NumeroNF"
                          UnLockRecord
                  EndIf
                  QuitLoop
          EndIf
  EndIf

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

         Echo off
         If Opcaon="Esc"
            Then If IsBlank([FaturaC->Numero Nota Gerada])
                    Then Moveto "NumeroNF"
                         UnLockRecord
                 EndIf
                 Loop
         EndIf

         If Not RetVal Then Opcaon="Lugar Nenhum" EndIf
         If Opcaon="Impressora"
            Then NUMCOPIA=PARAM_NVIAS_ROMANEIO
                 DispositivoI("FAT")
                 If OK=""
                    Then If IsBlank([FaturaC->Numero Nota Gerada])
                            Then Moveto "NumeroNF"
                                 UnLockRecord
                         EndIf
                         QuitLoop
                 EndIf
                 Play "FT_NOTA"
                 N_COPIAS=NUMCOPIA
                 ARQ_EMAIL= PrivDir()+[FaturaC->Numero Nota Gerada]+".txt"
                 Play PARAM_RELAT_ROMA
            Else Play "FT_NOTA"
         EndIf
    Case Opcaoc="Nota Fiscal":
         DispositivoI("FAT")
         If OK=""
            Then If IsBlank([FaturaC->Numero Nota Gerada])
                    Then Moveto "NumeroNF"
                         UnLockRecord
                 EndIf
                 QuitLoop
         EndIf
         Play "FT_NOTA"
         Switch
             Case SYS_CODIGO_CLIENTE="0075":
                  If [FaturaC->Codigo da Destinacao]="020" Or
                     [FaturaC->Codigo da Destinacao]="022"
                     Then Play "NF_0075"
                     Else Play "NF_0075B"
                  EndIf
             Case SYS_CODIGO_CLIENTE="0057":
                  If [FaturaC->Codigo da Destinacao]="036"
                     Then Play "NF_0057B"
                     Else Play "NF_0057"
                  EndIf
             OtherWise: Play PARAM_RELAT_NF
         EndSwitch
  EndSwitch

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

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

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


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

          Echo off

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

  ;;******  Emissao de Titulo de Credito ************
  Moveto "FaturaC"
  If PARAM_TITCRED="T"
     then Play "FT_IVALE"
  endif   
     
  QuitLoop
EndWhile

Moveto "FaturaC"
UnLockRecord
FormKey

Echo Normal
Echo Off

SaveTables
EndProc   ; (ConfImprime )

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

ParamE=False
If not GetP_Entra([FaturaC->Codigo da Empresa])
   then Return False
   else ParamE=True
EndIf


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

If Not IsAssigned(PARAM_RATEIO_COMISSAO) ;Parƒmetro Balcao / Erro ao cancelar Nota
   Then PARAM_RATEIO_COMISSAO=""
EndIf   

UnLockRecord
KeyPress "F7"
While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

ParamF=False
Moveto "P_Troca"
Moveto [Codigo_Empresa]
Locate [FaturaC->Codigo da Empresa]
If RetVal
   Then ParamF=True
   
        PARAM_ALTERA_FP="S"
   
        PARAM_EMPRESA            =[Codigo_Empresa           ]
        PARAM_DESTINACAO         =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA        =[Codigo_Conta_Caixa       ]
        PARAM_DATAS_VENCTOS      =[Datas_Vencimentos        ]
        PARAM_COR_TECIDO         =[Cor_Tecido               ]
        PARAM_TAMANHO            =[Tamanho                  ]
        PARAM_DESCUNIT           =[Desconto Unitario        ]
        PARAM_VOLUMES            =[Volumes                  ]
        PARAM_SUBSTICMS          =[Substituicao ICMS        ]
        PARAM_PEDIDO             ="N"
        PARAM_ORCAMENTO          =[Utiliza_Orcamento        ]
        PARAM_ORDEM_SERVICO      =[Utiliza_OS               ]
        PARAM_BLOQUEIA_NEG       =[Bloqueia_Estoque_Negativo]
        PARAM_MULT_BCICMS        =[Multiplas_BC_ICMS        ]
        PARAM_NLCHQ_IGUAL_NF     =[NLCheque_Igual_NF        ]
        PARAM_IMPOSTOS           =[Impostos                 ]
        PARAM_TABELA_PRECO       =[Tabela_Preco             ]
        PARAM_TRANSPORTADORA     =[Codigo_Transportadora    ]
        PARAM_TRANSFERENCIA      ="N"
        PARAM_CONSIGNACAO        ="N"
        PARAM_CHEQUES            =[Utiliza_Controle_Cheques ]
        PARAM_RELAT_NF           =[Script_Impressao_NF      ]
        PARAM_RELAT_ROMA         =[Script_Impressao_Romaneio]
        PARAM_RELAT_NP           =[Script_Impressao_NP      ]
        PARAM_RELAT_CARNE        =[Script_Carne             ]
        PARAM_NITENS             =[Numero_Itens             ]
        PARAM_TAMANHO_DESCR      =[Tamanho_Descricao_Item   ]
        PARAM_NLINHAS_OBS        =[NLinhas_Obs_Campo_Itens  ]
        PARAM_NLCHQ_IGUAL_NF     =[NLCheque_Igual_NF        ]
        PARAM_NVIAS_ROMANEIO     =[NVias_Romaneio           ]
        PARAM_LIMITE_CREDITO     =[Utiliza_Limite_Credito   ]
        PARAM_ALTERA_PRECO       =[Utiliza_Alteracao_Preco  ]
        PARAM_DIAS_ATRASO        =[Utiliza_Dias_Atraso      ]
        PARAM_CUPOM_FISCAL       =[Utiliza_Cupom_Fiscal     ]
        PARAM_CLIENTE            =[Codigo_Cliente           ]
        PARAM_VENDEDOR           =[Codigo_Vendedor          ]
        PARAM_COND_PAGTO         =[Codigo_Cond_Pagto        ]
        PARAM_FORMA_PAGTO        =[Codigo_Forma_Pagto       ]
        PARAM_UTILIZAVENDEDOR    =[Utiliza_Vendedor         ]
        PARAM_UTILIZACDBARRA     =[Utiliza_Codigo_Barras    ]
        PARAM_BLOQUEIA_AUTORI    =[Bloqueia_Autorizados     ]
        PARAM_BLOQUEIA_REEMISSAO =[Bloqueia_Reemissao_NF    ]
        PARAM_BLOQUEIA_IMPRESSAO2=[Bloqueia_Impressao_2via  ]
        PARAM_AVISTAAUTOMAT      =[Gera_VendasVista_Automat ]
        PARAM_APRAZOAUTOMAT      =[Gera_VendasPrazo_Automat ]
        PARAM_AVISTADUPLIC       =[Gera_Duplicatas_AVista   ]
        PARAM_TXJUROS            =[Duplicata_TxJuros        ]
        PARAM_FORMA_TXJUROS      =[Duplicata_Forma_TxJuros  ]
        PARAM_DUPLIC_NUMERO      =[Gera_Duplicatas_Numero   ]
        PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
        PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres]
        PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
        
        PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
        
        PARAM_DOC_NF  = [Not_Codigo do Documento  ]  
        PARAM_TIP_NF  = [Not_Tipo do Documento    ]  
        PARAM_SER_NF  = [Not_Serie do Documento   ]  
               
        PARAM_DOC_ROM = [Rom_Codigo do Documento  ]  
        PARAM_TIP_ROM = [Rom_Tipo do Documento    ]  
        PARAM_SER_ROM = [Rom_Serie do Documento   ]  
               
        PARAM_DOC_DUP = [Dup_Codigo do Documento  ]  
        PARAM_TIP_DUP = [Dup_Tipo do Documento    ]  
        PARAM_SER_DUP = [Dup_Serie do Documento   ]  
        PARAM_TPC_CLIE= [Tipo_Consulta_Cliente    ]
        
        PARAM_EXIBECUSTO="N" 
        PARAM_TABPR_ITEM="N"
                                  
        PARAM_BLOQUEIA_CANCEL=[Bloqueia Cancelamento]
        PARAM_BLOQUEIA_ALTERA=[Bloqueia_Alteracao_NF]
        
        PARAM_NBLOQUEIO_SPC   =[NDias_Bloqueio_SPC  ]
        PARAM_CONDPAGTO       =[Utiliza CP e FP Cliente  ]
        PARAM_TITCRED         =[Utiliza_Titulo_Credito   ] 
        PARAM_DATA_BASE       =[Informa_Data_CalcVenctos ]
        
        Switch
          Case SYS_CODIGO_CLIENTE="0278" : PARAM_ENVIA_EMAIL     = "S"
          OtherWise                      : PARAM_ENVIA_EMAIL     = "N"
        EndSwitch
        
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa !")
EndIf


Moveto "FaturaC"
KeyPress "F7"

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

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

View "P_Troca"
View NOWINDOW  "FaturaI"
View NOWINDOW  "FaturaID"
View NOWINDOW  "FaturaV"
View NOWINDOW  "FaturaIC"
              
View NOWINDOW  "NotaC"
View NOWINDOW  "NotaI"
View NOWINDOW  "NotaIC"
View NOWINDOW  "NotaV"
View NOWINDOW  "NotaICM"
View NOWINDOW  "NumeroNF"
View NOWINDOW  "NumeroDP"
                                    
View NOWINDOW  "\\Sistemas\\Estoque\\SdEstq"
View NOWINDOW  "\\Sistemas\\Estoque\\EstqPrm"

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

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

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

EndProc   ; (Carrega_Tabelas)

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

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

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
  EndIf

  If Not IsAssigned(OPCHAVEI)
     Then If PARAM_UTILIZACDBARRA="S"
             Then OPCHAVEI="CDB"
             Else OPCHAVEI="CDC"
          EndIf
  EndIf        

  While FACA_CHAVEDV
    While True
      OP_ITEM="ENT"
      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_CHAVEI
      While True
        OP_ITEM="SAI"
        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()
        If CHAVEF=9 Then QuitLoop EndIf
        FACA_DIGITAC=False
        FACA_CHAVEI =False
        QuitLoop
      EndWhile
    EndWhile
  EndWhile
EndWhile
Moveto "FaturaC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq,"+
        "\\Sistemas\\Vendas\\Bib_Tro,"+
        "\\Sistemas\\Vendas\\Bib_Vend"

sys_valor()

Fatura_Troca=True
If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""          EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""  EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO ="S" EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  ="S" EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""  EndIf
If Not IsAssigned(SYS_USUARIO_BALCAO)  Then SYS_USUARIO_BALCAO=""  EndIf
If Not IsAssigned(SYS_USUARIO_CODEMPR) Then SYS_USUARIO_CODEMPR="" EndIf

If SYS_CODIGO_CLIENTE <> "0334" And
   SYS_CODIGO_CLIENTE <> "0022"
   Then Ler_Captura("")
EndIf   
LeiaINI(PrivDir()+"LER_CHQ.ini","VSD_LEITORCHQ.S.1")

If IsFile(PrivDir()+"TROCA.ini")
   Then LeiaINI(PrivDir()+"TROCA.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf
ModoLocalizarItem("","","")

If SYS_CODIGO_CLIENTE = "0318" Or SYS_CODIGO_CLIENTE = "0370"
   Then PARAM_DUPLICIDADE_ITEM = True
   Else PARAM_DUPLICIDADE_ITEM = False
EndIf

PARAM_RATEIO_COMISSAO = ""
INICIO_IMPRESSAO      = True
PARAM_AGRUPA_ITEM     = False
VERIFICA_CONSULTA     = "TROCA"
SYS_APLICATIVO        = "TROCA"

Carrega_Tabelas()

Array AICMS[10]
Array AIPI[10]
Array AISSQN[10]

Array VIICMS[10]
Array VIIPI[10]
Array VIISSQN[10]

Array BCICMS[10]
Array BCIPI[10]
Array BCISSQN[10]

Array RICMS[10]
Array RIPI[10]

Array dtvencto[12]
Array valorven[12]

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

PickForm "1"
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetaCorRegistro("Padrao")
Moveto "FaturaV" SetaCorRegistro("Padrao")

Moveto "FaturaC"
PickForm "F"
OPCAO_FORM = "F"
MES_EST    = ""
ANO_EST    = ""
PASS       = 0

EVCITENS =BlankNum()
EVSQTDE  =BlankNum()
EVSVRMERC=BlankNum()

SVCITENS =BlankNum()
SVSQTDE  =BlankNum()
SVSVRMERC=BlankNum()

VSVRVENCTOS=BlankNum()

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

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 "4"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
