;* Fatura **********************************************************************
;*  Digitacao de Ordem de Faturamento e Emissao Nota Fiscal                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 08/09/1997 por Anivel Augusto Rodrigues 
;Ultima Alteracao: 02/01/2017 por Kamila Gomes 
;Motivo Alteracao: Ajustes sys_codigo_cliente = "0345"   Vit¢ria Textil
;Ultima Alteracao: 06/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0390 usando composicao+simbologiaImpresso em infadic
;Ultima Alteracao: 21/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle item showdialog, duplicidade e localizar
;Ultima Alteracao: 30/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes faturar expedi‡Æo of
;Ultima Alteracao: 02/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculoa pecas/Kg pralum 
;Ultima Alteracao: 03/02/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Ft_Expiq" para quando chamar expedi‡Æo com pedido para clientes que utilizam a expedi‡Æo de etiqueta
;Ultima Alteracao: 07/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo permitir qtd zerada
;Ultima Alteracao: 07/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mostruario Podium           
;Ultima Alteracao: 10/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pessoa inativa e comissao do pedido 
;Ultima Alteracao: 16/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes finalidade da destinacao           
;Ultima Alteracao: 06/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel de controle REG_FATURAC p/ "FT_NOTA" e "FT_DESF" ao processar REQ_TRANSF_DEVOLUCAO()
;                  Processo o qual gera/desfaz requisi‡äes de devolu‡äes autom ticas #294#
;Ultima Alteracao: 09/03/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado "I_Comissao_Item" quando utilizado PARAM_DADOS_ITEM_RESUMO
;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: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes JC_Digita - Justificativa Contingencia 
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Enderecos 
;Ultima Alteracao: 16/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ #0345# ComissÆo do Item do Cadastro se item promocional ou da 
;                  comissÆo do representante se informado caso o item nÆo seja de promo‡Æo. 
;Ultima Alteracao: 20/03/2017 por Bruno Carvalho
;Motivo Alteracao: Para #0388# ao carregar o pedido a [Condicao de Pagamento] nÆo ser  apagada, mantendo assim o que est  no pedido
;Ultima Alteracao: 21/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicioando processo p/ agrupar itens do pedido se codigo e pre‡o unit rio for igual -> Agrupa_Pedido() #0382#
;Ultima Alteracao: 21/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes EXCLUSAO_C()
;Ultima Alteracao: 23/03/2017 por Kamila Gomes
;Motivo Alteracao: Para #0390# ao carregar o pedido a [Condicao de Pagamento] nÆo ser  apagada, mantendo assim o que est  no pedido
;Ultima Alteracao: 28/03/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Agrupa_Pedido()
;Ultima Alteracao: 29/03/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Busca_Item_Agrupado()
;Ultima Alteracao: 31/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ controle da altera‡Æo/inclusÆo se expedi‡Æo informada -> Verifica_InclusaoAlteracao_Item() #0377#
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0396# 
;Ultima Alteracao: 11/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desoneracao icms Podium
;Ultima Alteracao: 18/04/2017 por Kamila Gomes
;Motivo Alteracao: InclusÆo da tabela FaturaR na rotina Exclusao_C
;Ultima Alteracao: 18/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST tratamento ipi/pis/cofins entrada/devolu‡Æo
;Ultima Alteracao: 20/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Metal Minas                                
;Ultima Alteracao: 25/04/2017 por Bruno Carvalho
;Motivo Alteracao: Bloqueio ao incluir novo item se itens da expedi‡Æo j  informados - controle PARAM_BLOQ_ITEM_EXPED 
;Ultima Alteracao: 26/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao faturar uma expedi‡Æo com pedido #0377# -> Utiliza processo da expdi‡Æo com of
;Ultima Alteracao: 03/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_BLOQ_ITEM_EXPED nos parƒmetros do P_FATURA 
;Ultima Alteracao: 09/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Situacao_Expedicao() p/ ajustar situa‡Æo quando nÆo ocorrer faturamento
;Ultima Alteracao: 15/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST tratamento icms/pis/cofins 6923 - #0274#
;Ultima Alteracao: 15/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Valor Frete Cotado] ao calcular o valor do frete na nota (SHIFT + F)
;Ultima Alteracao: 23/05/2017 por Bruno Carvalho
;Motivo Alteracao: Ajsutes p/ permitir ir no campo Valor_Cotacao independente se valor do frete informado
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2()
;Ultima Alteracao: 29/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0345# -> icms desonerado              
;Ultima Alteracao: 30/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes icms desonerado da tabela Destin
;Ultima Alteracao: 09/06/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_APENAS_EXPEDOF #0377# -> Faturamento apenas com expedi‡Æo envolvida
;Ultima Alteracao: 13/06/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Fatura_Somente_ComExpedicao() ao faturar "Romaneio" #0377#
;Ultima Alteracao: 16/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo de expedi‡Æo s/ pedido p/ #0377# -> Ft_ExpOF
;Ultima Alteracao: 22/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nos venctos quando tipo for cartÆo ao chamar Digita_Cartao(), se nÆo informado e pressionado ESC -> Loop
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Removido Campo="Data_Base" no controle Geral_Dialog() -> Controle j  ‚ realizado no Bib_Fat
;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: 26/06/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado p/ #0388# um nova tentativa ao localizar o item pelo tipo do item "P"
;Ultima Alteracao: 04/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado NUMVAL ao verificar pre‡o unitario e pre‡o da tabela, quando ‚ exibido a mensagem "Pre‡o unit rio n„o permitido..."
;Ultima Alteracao: 04/07/2017 por Bruno Carvalho
;Motivo Alteracao: Incomplet Field no ShowDialog dos Itens Resumidos, setando a vari vel LOCALIZAR_POR
;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: 12/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VENDA TROCA bloqueio
;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: Removido View "NotaOcp"
;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: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Particularidades #0377# onde ‚ verifica se cliente possui tabela de pre‡o espec¡fica e se item espec¡fico est  com pre‡o    
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item, pedido compra
;Ultima Alteracao: 28/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout showdialog item
;Ultima Alteracao: 31/07/2017 por Bruno Carvalho
;Motivo Alteracao: Foi removido o campo [Composicao de Dias] onde amarzenava um controlador p/ estornar pedidos agrupados -> [*AGRUPADO*]
;                  Adicionado um campo [Item do Pedido Agrupado] onde se tornou este controlador, substituindo o controlador citado
;Ultima Alteracao: 02/08/2017 por Bruno Carvalho
;Motivo Alteracao: Removido [Condicao de Pagamento] e [Composicao de Dias] do processo Inicia_Registro()
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor INSS] -> [Valor TC]                  
;Ultima Alteracao: 14/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item() para 0388       
;Ultima Alteracao: 16/08/2017 por Bruno Carvalho
;Motivo Alteracao: Add controle ANT_REP p/ qd cliente alterado na nota e rep inserido anteriormente, nÆo excluir o rep informado se rep="" na destinat
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 05/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PARAM_PEDIDO_ORCAMENTO_ITEM nÆo usa mais composi‡Æo de dias
;Ultima Alteracao: 06/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS ST FEM
;Ultima Alteracao: 13/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes indicador de presen‡a
;Ultima Alteracao: 19/09/2017 por Kamila Gomes
;Motivo Alteracao: Implementado envio de romaneio por email
;Ultima Alteracao: 21/09/2017 por Bruno/Anivel
;Motivo Alteracao:  Pega_Dados_Item() -> [Tributacao de Icms]="D" ou [Tributacao de Icms]="S", entÆo [Aliquota de ICMS]=4
;Ultima Alteracao: 22/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado SYS_APLICATIVO *Verifica envio de email no dispositivo
;Ultima Alteracao: 22/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Situacao_Expedicao() p/ Bib_Fat
;Ultima Alteracao: 22/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Valor_Importacao() p/ Bib_Vend 
;Ultima Alteracao: 22/09/2017 por Bruno Carvalho
;Motivo Alteracao: Removido Verifica_InclusaoAlteracao_Item() e ajustado codigo onde estava sendo chamado, LOC_TAB_PRECO()
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA() e movido Checa_MVA() p/ Bib_Vend 
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Removido Fatura_Somente_ComExpedicao() e ajustado codigo onde h  controle do PARAM_APENAS_EXPEDOF
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Busca_Item_Agrupado(), Agrupa_Pedido() e LIMPA_OFS() p/ Bib_Fat   
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Monta_Opcoes_Cor() e Seleciona_Opcoes_Cor() p/ Bibliot
;Ultima Alteracao: 26/09/2017 por Kamila Gomes
;Motivo Alteracao: Ajustes vari vel CheckTG_OPEMAIL[1]
;Ultima Alteracao: 26/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos calculos da nota
;Ultima Alteracao: 26/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado fun‡Æo p/ quando for DEVOLUCAO -> IPI Devolucao de Compra [Alt+Y] nos itens
;Ultima Alteracao: 28/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0112 item sem ST pessoa fisica
;Ultima Alteracao: 29/09/2017 por Kamila Gomes
;Motivo Alteracao: Ajustes pegar endere‡o de email
;Ultima Alteracao: 31/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calcula itens agrupados          
;Ultima Alteracao: 04/11/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes saber versao nfe          
;Ultima Alteracao: 06/11/2017 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes CHAVEI() -> Add GetRecord ao verificar a situa‡Æo do pedido
;Ultima Alteracao: 06/11/2017 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes na vari vel de controle "s", onde foi add UPPER p/ realizar a verifica‡Æo de versÆo
;Ultima Alteracao: 10/11/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes agrupamento de itens               
;Ultima Alteracao: 10/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem cliente pessimo            
;Ultima Alteracao: 13/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0112 aliquota icms pessoa juridica
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog item , ipi devolvido e outros
;Ultima Alteracao: 07/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cst item para suframa 0388                
;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: 22/01/2018 por Kamila Gomes
;Motivo Alteracao: InclusÆo de autorizados a obter xml da nota
;Ultima Alteracao: 2/01/2018 por Bruno Carvalho
;Motivo Alteracao: Removido processos que destinavam … variavel de controle EDITA_DESCRICAO_ITEM
;Ultima Alteracao: 05/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes codigo barras informacoes adicionai 0294  
;Ultima Alteracao: 07/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes descri‡Æo complementar 0410  
;Ultima Alteracao: 22/02/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes codigo barras informacoes adicionais 0227 e 0294                                 
;Ultima Alteracao: 27/02/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes liberado ipi devolvido                     
;Ultima Alteracao: 27/02/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes expedic‡Æo pralum                          
;Ultima Alteracao: 02/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SIRI nÆo agrupar Itens                     
;Ultima Alteracao: 02/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Edita Descricao s¢ unidade para aplica‡Æo direta
;Ultima Alteracao: 06/03/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0408#
;Ultima Alteracao: 14/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes liberado ipi devolvido VersaoDaNFe         
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem excluindo         
;Ultima Alteracao: 14/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registro_Item("Ler")+CalcularPrecoTotal_Item()
;Ultima Alteracao: 04/06/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes Tributa‡Æo SUFRAMA para a Podium
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 15/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST/ICMS PIS/COFINS 0274
;Ultima Alteracao: 18/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes faturar requisi‡Æo
;Ultima Alteracao: 19/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exportar arquivo excel vise
;Ultima Alteracao: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem qtde fracionada    
;Ultima Alteracao: 25/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes csosn bonificacao           
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ nÆo gerar log de itens excluidos quando for excluir a cabe‡a do registro
;Ultima Alteracao: 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: 05/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes status nfe ENVIADA/REGISTRADA
;Ultima Alteracao: 11/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nfe
;Ultima Alteracao: 12/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST/ICMS PIS/COFINS 0274
;Ultima Alteracao: 16/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFSe
;Ultima Alteracao: 17/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes consulta nfe origem e cnpj
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0419#
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na mensagem ao verificar complementos do item -> CDBarras()
;Ultima Alteracao: 19/07/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes para nÆo pegar Aliquota 4% quando CST = #60 (substitui‡Æo)
;Ultima Alteracao: 19/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nfe rps/retorno
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustesesc/enter/pgdn issqn     
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes IMPRIGERAL() -> FT_GNF
;Ultima Alteracao: 01/08/2018 por Kamila Gomes                           
;Motivo Alteracao: Ajustes cfop 6912 para cliente 0294 (Podium)
;Ultima Alteracao: 01/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes 0227 retorno mostruario
;Ultima Alteracao: 15/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem nfse
;Ultima Alteracao: 15/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Imprimir todos/carregamento romaneio
;Ultima Alteracao: 16/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ISSQN_Municipio 0121
;Ultima Alteracao: 17/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes 0092 
;Ultima Alteracao: 28/08/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes ao pressionar ENTER no [Codigo da Destinacao] -> DIGITAC() 
;Ultima Alteracao: 28/08/2018 por Bruno Carvalho                           
;Motivo Alteracao: Removido origem ao gerar o arquivo "managcon.txt" -> nfeautorizada()
;Ultima Alteracao: 30/08/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes CONFIMPRIME() -> PARAM_DOC_DUPNFEN="DP0.." p/ "NF-e" e "NFS-e"
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao PARAM_VERSAODANFE
;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: 12/09/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes preco unitario obrigatorio venda/normal
;Ultima Alteracao: 05/10/2018 por Kamila Gomes
;Motivo Alteracao: SYS_CODIGO_CLIENTE = "0274" seta CheckTG_OPEMAIL[1] = false
;Ultima Alteracao: 11/10/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CHAVEI()
;Ultima Alteracao: 18/10/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ISSQN_Municipio 0034
;Ultima Alteracao: 19/10/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes [Informacoes Adicionais] est  sendo esvaziado antes de executar Pega_Dados_Item() ao inserir CODIGO DO ITEM
;Ultima Alteracao: 22/10/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes cancelamento nfse    
;Ultima Alteracao: 25/10/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes no campo I_Tamanho p/ I_Tamanho_Variacao, onde est  sendo utilizado p/ varia‡äes #0388# -> VSD_I_Tamanho_Variacao
;                  ajustado para controle [DTamanho] e quando PARAM_UTILIZA_VARIACOES p/ a varia‡Æo que ‚ armazenada nas inf.adicionais como V[***]
;Ultima Alteracao: 06/11/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes frete por conta s¢ em servico
;Ultima Alteracao: 08/11/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes %ISSQN 5 casas decimais           
;Ultima Alteracao: 26/11/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes pegar cfop servi‡o da destina‡Æo           
;Ultima Alteracao: 04/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes desfazer RPS                               
;Ultima Alteracao: 05/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem cancelamento NFSe   
;Ultima Alteracao: 13/12/2018 por Kamila Gomes                           
;Motivo Alteracao: Ajustes cfop 6912 para cliente 0294, zerando valores de ICMS     
;Ultima Alteracao: 13/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Ajusta_Dados_Item() bcicms.%icms=0
;Ultima Alteracao: 14/12/2018 por Kamila Gomes                           
;Motivo Alteracao: Fun‡Æo para pegar Fuso Horario do computador
;Ultima Alteracao: 22/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado controle para destina‡äes inativas 
;Ultima Alteracao: 24/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes posicionamento campo codigo da destinaca‡o
;Ultima Alteracao: 26/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado SaveTables e UnLockRecord ao criar registro -> Fatura_Pedido_Orcamento()
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 10/01/2019 por Kamila Gomes                           
;Motivo Alteracao: Ajusta_Dados_item() Se CST = 60 e devolu‡Æo de venda, MVA e Aliq ST ‚ branco 
;Ultima Alteracao: 22/01/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes processos de #0112#
;Ultima Alteracao: 23/01/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado mensagem automatica #0388#
;Ultima Alteracao: 25/01/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado fatura programa‡Æo fac‡Æo SIRI
;Ultima Alteracao: 28/01/2019 por Bruno Carvalho                           
;Motivo Alteracao: Add dados autom ticos para CST, IPI, PIS e COFINS quando Remessa p/ Industrializa‡Æo -> Ajusta_Dados_Item() #0227#
;Ultima Alteracao: 29/01/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes unidade exterior PC->UN
;Ultima Alteracao: 04/02/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado processo de Nota de Venda para Devolu‡Æo
;Ultima Alteracao: 04/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pedido de compra              
;Ultima Alteracao: 16/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes antes ShowPopup
;Ultima Alteracao: 20/02/2019 por Kamila Gomes
;Motivo Alteracao: Ajuste quando ativa tecla F5 no item              
;Ultima Alteracao: 25/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0167 ST E FCP
;Ultima Alteracao: 26/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NCMUF
;Ultima Alteracao: 18/03/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem maximo 500 itens
;Ultima Alteracao: 26/03/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes nas informa‡äes adicionais quando utilizado VARIA€åES -> Registro_Item()     
;Ultima Alteracao: 29/03/2019 por Kamila Gomes                           
;Motivo Alteracao: Ajustes no tamanho da descri‡Æo do item no item_dialog           
;Ultima Alteracao: 30/03/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes localizar cor >4 digitos, RESUMO
;Ultima Alteracao: 09/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item #0388, LOGICA E ORGANIZA€ÇO
;Ultima Alteracao: 11/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0431# p/ nÆo ser direcionado para o campo="I_Pedido_Compra" como ‚ de padrÆo p/ outras empresas
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0429#
;Ultima Alteracao: 24/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes industrializacao #0377 preco entrada/saida
;Ultima Alteracao: 26/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Estoque()
;Ultima Alteracao: 29/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Enderecos
;Ultima Alteracao: 30/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0429# usar varia‡äes           
;Ultima Alteracao: 30/04/2019 por Bruno Carvalho
;Motivo Alteracao: Foi alterado de REG_BUSCA_LOOKUP para regitens conforme vari vel no GetRecord
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes processo de expedi‡Æo p/ #0429#
;Ultima Alteracao: 09/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0377 romaneio s¢ com expedi‡Æo
;Ultima Alteracao: 13/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0431 item duplicado sem travar 
;Ultima Alteracao: 14/05/2019 por Kamila Gomes
;Motivo Alteracao: Ajustes #0404 item duplicado  
;Ultima Alteracao: 22/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FATURA_PEDIDO_ORCAMENTO
;Ultima Alteracao: 28/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustado p/ #0427# um nova tentativa ao localizar o item pelo tipo do item "D"
;Ultima Alteracao: 30/05/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado ITEM_FRACIONADO p/ PEGA_DADOS_CODITEM e processo para localizar codbar da proc CDBarras() implementado em Pega_Dados_Item()
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho
;Motivo Alteracao: Movido CALC_VOLUMES() p/ Bib_Vend com passagem de parƒmetro
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho
;Motivo Alteracao: NÆo pedir cor quando utilizado PARAM_DADOS_ITEM_RESUMO="S" p/ #0418#
;Ultima Alteracao: 12/06/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado FATURA_NLancto() onde ‚ verificado o n£mero do lan‡amento, permitindo numero da OF nÆo sequencial p/ #0436#
;Ultima Alteracao: 26/06/2019 por Anivel Augusto Rodrigues/Kamila Gomes
;Motivo Alteracao: Ajustes ExisteArquivo()
;Ultima Alteracao: 04/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel IMP_ROM_EXPED p/ controlar impressÆo de romaneio/expedi‡Æo
;Ultima Alteracao: 22/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado filtro MODOFILTRAR onde ‚ verificado a SYS_CHAPA_USUARIO e a empresa cadastrada para este usu rio #0435# 
;Ultima Alteracao: 25/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado "FT_CUP" p/ faturamento de cupom fiscal *desde que nÆo controla estoque e nÆo atualiza financeiro
;Ultima Alteracao: 31/07/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes informar forma de pagamento para calcular vencimentos solicitacao 45430, #0435
;Ultima Alteracao: 09/08/2019 por Kamila Gomes                           
;Motivo Alteracao: Ajustes Consulta status e documento no EDOC
;Ultima Alteracao: 09/08/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes ao verificar codigo da empresa no cadastro de usu rios, se empres em branco, nÆo tem valida‡Æo 
;Ultima Alteracao: 15/08/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao localizar o [item da OF] pela vari vel SEQIT -> Inicia_Registro() *Se SEQIT for igual ao [] desprezar o locate
;Ultima Alteracao: 22/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variacoes #0390          
;Ultima Alteracao: 23/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes duplicidade item #0388 false    
;Ultima Alteracao: 03/09/2019 por Anivel Bruno Carvalho
;Motivo Alteracao: Ajustes FATURA_PEDIDO_ORCAMENTO() Pedido_Empresa e Pedido_Destin nÆo estavam sendo setados ao utilizar o ORCAMENTO
;Ultima Alteracao: 15/09/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado ajustes p/ quando [Forma de Pagamento]="RP" 
;Ultima Alteracao: 10/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes faturar or‡amento forma de pagamento #0102
;Ultima Alteracao: 17/09/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo p/ Resgate de Pontos/Adi‡Æo de Pontos p/ Clientes -> [Forma de Pagamento]="RP"
;Ultima Alteracao: 30/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes obs orcamento #0102
;Ultima Alteracao: 14/10/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes #0121 FATURA_PEDIDO_ORCAMENTO() pegar item servico ou terceiros
;Ultima Alteracao: 15/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes suframa #0390          
;Ultima Alteracao: 15/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ao localizar o [item da OF] pela vari vel SEQIT -> Inicia_Registro() voltou ao que era
;Ultima Alteracao: 21/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo travar item com quantidade zerada e valor zerado
;Ultima Alteracao: 21/10/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_UTILIZA_QTD_SOLICITADA
;Ultima Alteracao: 07/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes comissao item #0418

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Faturamento                         *
;*******************************************************************************
Proc ChaveC()
private locregistro

PARAM_CUPOM_FISCAL=""

FACA_DIGITAC=True
INICIO_PAGINA=True
PRIMEIRA_VEZ =True

NFEJA_AUTORIZADA=False
CHAVE_ACESSO_NFE=""

CHECANFE_AUT=False

IMPRIMIR_CARREGAMENTO=False

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

VSDGENDENT    =""
VSDGENDCOB    =""

While True
  Moveto TabelaControle ; FILTRO
  End
  Moveto [Numero da OF]
  ORDFAT  = [Numero da OF]
  If OPCAO_FORM="F"
    Then Down
    Else CtrlPgDn
  EndIf
  Moveto [Numero da OF]

  SetaCorRegistro("Editar")
  While True

  COPIOU_REGISTRO=False
  
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()

  If RetVal=-33
     Then MSGCAMPO=""
          TECLA=""
     
          Echo Normal
          Echo Off

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

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

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

           IMPRIMIR_CARREGAMENTO=False

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

           If OPCAO_FORM="F"
              Then PAGINA(TabelaControle,"MR")
              Else PAGINA(TabelaControle,"MT")
           EndIf
           ORDFAT=[Numero da OF]
           locregistro=recno()
           Switch
             Case EDITAR="S":
                  If PegaRegistroControle("Numero da OF",ORDFAT) ;FILTRO
                     Then PickForm "1"
                          Echo Normal
                          Echo Off
                          If Checa_Controle([Numero_Controle_Dia])
                             Then CHAVEC=0
                             
                                  Controla_EdicaoC()
                             Else UnLockRecord
                          EndIf
                  EndIf   
             Case EXCLUIR="S":
                  If PegaRegistroControle("Numero da OF",ORDFAT) ;FILTRO
                     Then PickForm "1"
                          Echo Normal
                          Echo Off
                          If Checa_Controle([Numero_Controle_Dia]) And
                             (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                             Then If Not IsBlank([Numero Nota Gerada])
                                     Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !// J  Gerou Nota Fiscal N§ "+[Numero Nota Gerada])
                                          UnLockRecord
                                     Else Ok=True 
                                          If Search("VENDA",[Descricao da Destinacao])>0 And Search("TROCA",[Descricao da Destinacao])>0
                                             Then Mensagem("Opera‡Æo de TROCA, utilizar rotina TROCA/VENDA !")
                                                  Ok=False
                                          EndIf
                                          If SYS_CODIGO_CLIENTE="0217" And [Sistema Gerador]="BA"
                                             Then Mensagem("Opera‡Æo de BALC¶O, utilizar rotina BALC¶O !")
                                                  Ok=False
                                          EndIf
                                          
                                          If Search("CUPOM ELETR",[Descricao da Destinacao])>0
                                             Then Mensagem("Opera‡Æo de CF-e, utilizar rotina CUPOM FISCAL ELETRâNICO !")
                                                  Ok=False
                                          EndIf
                                          
                                          If Ok And QuerExcluir("")
                                             Then DESTIN_ATUALIZA_PEDIDOS=""
                                                  Moveto [Codigo da Destinacao]
                                                  If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"SM")
                                                     Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
                                                  EndIf
                                                  GRAVA_LOG=True
                                                  EXCLUSAO_C()
                                                  AtualizaRegistroControle("Numero da OF",ORDFAT,MODOPAGINA)
                                             Else UnLockRecord
                                          EndIf
                                  EndIf
                             Else UnLockRecord
                          EndIf
                  EndIf                     
             OtherWise: QuitLoop
           EndSwitch
           
           FormKey
           Moveto TabelaControle
                                      
           If OPCAO_FORM="1"
              Then PickForm "1"
                   moveto record locregistro        
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
         
    Case Retval="F6":
         If Not MODOFILTRAR
            Then Del
                 Play "FT_GNF"
                 QuitLoop
         EndIf        

    Case Retval="F8":
         If Not MODOFILTRAR
            Then Del
                 IMPRIMIR_CARREGAMENTO=True
                  
                 FATURA_PEDIDO_ORCAMENTO() ;** Apenas Showdialog !!
                 If PED_ORC_FATURAR<>"000000" And
                    PED_ORC_FATURAR<>""
                    Then Play "FT_GNF"
                 EndIf
                 IMPRIMIR_CARREGAMENTO=False
                 CHAVEC=5
                 Return
         EndIf

    Case Retval="F9" And SYS_CODIGO_CLIENTE="0092":
         If Not MODOFILTRAR
            Then Del
                 IMPRIMIR_CARREGAMENTO=True
                 FATURA_PEDIDO_ORCAMENTO() ;** Apenas Showdialog !!
                 If PED_ORC_FATURAR<>"000000" And
                    PED_ORC_FATURAR<>""
                    Then LIMPA_OFS()
                 EndIf
                 IMPRIMIR_CARREGAMENTO=False
                 CHAVEC=5
                 Return
         EndIf
    Case Retval="F5" And SYS_CODIGO_CLIENTE="0092":
         If Not MODOFILTRAR
            Then Del
                 IMPRIMIR_CARREGAMENTO=True
                 Play "gamdbnfe"
                 Carrega_Tabelas()
                 IMPRIMIR_CARREGAMENTO=False
                 CHAVEC=5
                 Return
         EndIf
    Case Retval="ENTER": 
         If MODOFILTRAR  
            Then If TabelaControle<>TabelaPrincipal
                    Then ORDFAT = [Numero da OF] 
                         FormKey Moveto TabelaPrincipal End Down FormKey
                         [Numero da OF] = ORDFAT 
                         SetaCorRegistro("Editar")
                 EndIf
         EndIf
         MODOPAGINA = False
         If Not FATURA_NLancto()
            Then If MODOFILTRAR
                    Then If TabelaControle<>TabelaPrincipal
                            Then FormKey Moveto TabelaControle 
                                 Del Down
                                 If OPCAO_FORM="1"
                                    Then PickForm "1"
                                    Else PickForm "F"
                                 EndIf
                         EndIf
                 EndIf
                 QuitLoop
            Else If MODOFILTRAR
                    Then If CHAVEC=0
                            Then STATUSFILTRO = "UPDATE"
                            Else STATUSFILTRO = "INSERT"
                         EndIf
                 EndIf
                 Return
         EndIf          
         If CHAVEC=1
            Then Del
         EndIf
         If TabelaControle<>TabelaPrincipal
            Then FormKey
                 Moveto TabelaControle
         EndIf
         
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc   ;ChaveC()

;*******************************************************************************
;* Seta Numero do Lan‡amento                                                   *
;*******************************************************************************
Proc FATURA_NLancto()
        
Switch
   Case SYS_CODIGO_CLIENTE = "0436" : ;** Em 12/06/2019 -> NÆo verifica se n£mero ‚ sequencial
     If IsBlank([])
        Then If ORDFAT = "999999"
                Then Mensagem("Faixa de c¢digo livre excedida !////"+
                              "Ser  necess rio executar a rotina de exclus„o de ordem de faturamento.//"+
                              "D£vidas, verifique com o suporte vise.")
                     Del
                     Return False
             EndIf
             If IsBlank(ORDFAT)
                Then ORDFAT="1"
                Else ORDFAT=StrVal(NumVal(ORDFAT)+1)
             EndIf
             []=ORDFAT
     EndIf
     
 

     []=ALINH()
     ORDFAT=[]
     Del
     PickForm "1"
     Moveto [Numero da OF]
     Locate ORDFAT
     If Retval
        Then CHAVEC=0
        Else CHAVEC=1
             End
             If Not IsBlank([Numero da OF])
                Then CtrlPgDn
             EndIf
             Moveto [Numero da OF]
             [Numero da OF]=ORDFAT
     EndIf
     If Not IsLockRecord()
        Then Echo Normal
             Echo Off
             If CHAVEC=1
                Then Moveto "FaturaI"
                     Moveto [Item da Of]
                     If Not RecordStatus("New")=True
                        Then MENSAGEM("N§ OF com erro, verificar empresa e os itens j  existentes !// Recuperar a OF ou exclui-la !")
                             Moveto "FaturaC"
                             CHAVEC=1
                             Controle_Dia()
                             UnLockRecord
                             IsLockRecord()
                             Return True
                     EndIf
                     Moveto "FaturaC"
             EndIf
             If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                Then Return True
             EndIf
     EndIf
   OtherWise                        :
     If Numero_Lancamento("","F")
        Then ORDFAT = PROXLANCTO_NLANC
             Release Vars PROXLANCTO_NLANC  
        Else Return False
     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
                     Return False         
             EndIf
             If MODOFILTRAR
                Then FormKey Moveto TabelaControle If Not IsBlank([]) Then CtrlBackSpace []=ORDFAT UnLockRecord EndIf Moveto TabelaPrincipal FormKey
             EndIf    
      EndIf
      
      If PROXIMO_LANCTO_REG_ACHOU And MODOFILTRAR And SYS_CODIGO_CLIENTE="0435"
         Then GetRecord "\\Sistemas\\Cadastro\\Usuarios" SYS_CHAPA_USUARIO To REG_USUARIO
              If ReTval
                 Then If [Codigo da Empresa]<>REG_USUARIO["Cod_Empresa"]
                         Then Mensagem("Ordem de Faturamento "+ORDFAT+" foi realizada pela empresa "+[Codigo da Empresa]+"!")
                              Return False
                      EndIf
              EndIf
              FormKey Moveto TabelaControle Del Down Moveto TabelaPrincipal FormKey
      EndIf
      
      PickForm "1"    
      Moveto [Numero da OF]
      If PROXIMO_LANCTO_REG_ACHOU 
          Then CHAVEC=0
               If Checa_Controle([Numero_Controle_Dia])
                  Then Return True
               EndIf
          Else CHAVEC=1
               If Not Checa_Controle(SYS_CONTROLE_DIA)
                  Then OPCAO_FORM="F"
                  Else Return True
               EndIf                  
      EndIf
      Return False
EndSwitch
 
EndProc ;FATURA_NLancto()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
TX_DESCTO_CLIE=0
        
REEMITIR        = False
IMP_ROM_EXPED   = False
SOIMPRIMIR      = False
enviaEmail      = False

FACA_CHAVEI     = True
NOVA_DESTINACAO = False
NOVO_PEDIDO     = False
NOVO_CLIENTE    = False
                  
Moveto "FaturaC"
Moveto [Codigo]

If INICIO_PAGINA
   Then ;---- Incluido em 09.11.2015 ----------------------------------
        ANT_DTE = [Data de Emissao        ]
        ANT_REP = [Codigo do Representante]   
 
        If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                CD_EMPRESA=[Codigo da Empresa]
                If CHAVEC=1
                   Then [Codigo da Empresa       ]=PARAM_EMPRESA
                        [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                        [Forma de Pagamento      ]=PARAM_FORMA_PAGTO

                        NOVA_DESTINACAO= True
                        NOVO_PEDIDO    = True
                        NOVO_CLIENTE   = True

                EndIf
        EndIf
        
        If CHAVEC=0
           Then Carrega_Endereco("CARREGA")
                Carrega_Endereco("ATUALIZA")
           Else VSDGENDENT = ""
                VSDGENDCOB = ""
        EndIf

        If CHAVEC=0 And Search("VENDA",[Descricao da Destinacao])>0 And Search("TROCA",[Descricao da Destinacao])>0
           Then Mensagem("Opera‡Æo de TROCA, utilizar rotina TROCA/VENDA !")
                CHAVEC=9
                Return
        EndIf
        If CHAVEC=0 And SYS_CODIGO_CLIENTE="0217" And [Sistema Gerador]="BA"
           Then Mensagem("Opera‡Æo de BALC¶O, utilizar rotina BALC¶O !")
                CHAVEC=9
                Return
        EndIf

        If CHAVEC=0 And Search("CUPOM ELETR",[Descricao da Destinacao])>0
           Then Mensagem("Opera‡Æo de CF-e, utilizar rotina CUPOM FISCAL ELETRâNICO !")
                CHAVEC=9
                Return
        EndIf

        If Not IsBlank([Numero Nota Gerada])
           Then
                Switch 
                  ;-- Tratando NF-e ----------------------------------------------------------
                  Case Search("NFE",[FaturaC->Docto Nota Gerada ])>0 and 
                       (SubStr([FaturaC->Sistema Gerador],1,1)="n" Or  
                        SubStr([FaturaC->Sistema Gerador],1,1)="s" Or
                        SubStr([FaturaC->Sistema Gerador],1,1)="d" Or
                        SubStr([FaturaC->Sistema Gerador],1,1)="f") :

                       NOTAFISC =[Numero Nota Gerada]
                       CODFISC  =[Docto Nota Gerada ]
                       SERIEFISC=[Serie Nota Gerada ]
                          
                       If [FaturaC->Sistema Gerador]="n!" Or ; NF-e j  emitida e autorizada
                          [FaturaC->Sistema Gerador]="s!" Or
                          [FaturaC->Sistema Gerador]="d!" Or
                          [FaturaC->Sistema Gerador]="f!"
                          Then 
                               MSG="NF-e "+NOTAFISC+" j„ foi enviada e autorizada no SEFAZ !"
                               MSG=MSG+"// //Deseja CANCELAR a Nota Fiscal?"
                               If Not ConfGeral_N(MSG)
                                 Then CHAVEC=9
                                      Return
                               EndIf        

                               COR_MENSAGEM="ALERTA" 
                               MSG="Deseja realmente CANCELAR essa Nota Fiscal?"
                               If Not ConfGeral_N(MSG)
                                  Then CHAVEC=9
                                       Return
                               EndIf        
                               Release Vars COR_MENSAGEM

                               If PARAM_BLOQUEIA_CANCEL<>"N" 
                                  Then If Not CHECA_SUPERVISOR()
                                          Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !")
                                               CHAVEC=9
                                               Return
                                       EndIf
                               EndIf      
                               
                               OpcaoC="NF-e"
                               CHECANFE_AUT=True
                               CANC=True
                               If Checagem_Pagina1() And doceautorizado("Consulta")
                                  Then 
                                       If Not cancelada
                                          Then Mensagem("Nota AUTORIZADA no SEFAZ. Primeiro, efetue o Cancelamento no eDOC !")
                                          Else Echo Normal
                                               Echo Off
                                               ShowPopup " Op‡”es " CENTERED
                                                   "Cancelamento ~N~ormal"      : " Cancelamento dentro do prazo 24 horas" :"NORMAL",
                                                   "Cancelamento ~E~xtemporƒneo": " Cancelamento fora do prazo de 24 horas":"EXTEMPORANEO",
                                                   Separator,
                                                   "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
                                               EndMenu
                                               To Opcaoc
                                               echo off
                                       
                                               If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                                                  Then CHAVEC=9
                                                       Return
                                               EndIf
                                             
                                               If Opcaoc = "EXTEMPORANEO"
                                                  Then GRAVA_OK=False
                                                       Play "FT_DTCAN"
                                                       If Not GRAVA_OK
                                                          Then CHAVEC=9
                                                               Return
                                                       EndIf
                                               EndIf
                                               SITUACAO=Opcaoc  
                                               TIPO="CANCELAR"
                                               Play "FT_DESF"
                                       EndIf
                              EndIf       
                              CHAVEC=9
                              Return
                       EndIf

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

                       If doceautorizado("Consulta")
                          Then 
                               Switch
                                 Case denegada:
                                  
                                   OpcaoC="NF-e"

                                   TIPO    ="CANCELAR"
                                   SITUACAO="DENEGAR"
                                   Play "FT_DESF"
                                   
                                   COR_MENSAGEM="ALERTA" 
                                   MSG="NF-e foi DENEGADA pelo Sefaz !"
                                   Mensagem(MSG)

                                 case cancelada:
                                   Echo Normal
                                   Echo Off
                                   ShowPopup " Op‡”es " CENTERED
                                       "Cancelamento ~N~ormal"      : " Cancelamento dentro do prazo 24 horas" :"NORMAL",
                                       "Cancelamento ~E~xtemporƒneo": " Cancelamento fora do prazo de 24 horas":"EXTEMPORANEO",
                                       Separator,
                                       "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
                                   EndMenu
                                   To Opcaoc
                                   echo off
                           
                                   If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                                      Then CHAVEC=9
                                           Return
                                   EndIf
                                   
                                   If Opcaoc = "EXTEMPORANEO"
                                      Then GRAVA_OK=False
                                           Play "FT_DTCAN"
                                           If Not GRAVA_OK
                                              Then CHAVEC=9
                                                   Return
                                           EndIf
                                   EndIf
                                 
                                   TIPO    ="CANCELAR"
                                   SITUACAO=Opcaoc  
                                   Play "FT_DESF"
                               EndSwitch
                               CHAVEC=9
                               Return

                      Else
                       
                      Echo Normal
                      Echo Off
                      OpcaoC="Reenviar"

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

                      EndMenu
                      To Opcaoc

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

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

                  ;-- Tratando NFS-e ----------------------------------------------------------
                  Case Search("NSE",[FaturaC->Docto Nota Gerada ])>0 and [FaturaC->Sistema Gerador]="n!" : 
                       NOTAFISC =[Numero Nota Gerada]
                       CODFISC  =[Docto Nota Gerada ]
                       SERIEFISC=[Serie Nota Gerada ]
                          
                       MSG="NFS-e "+NOTAFISC+" j„ foi enviada e autorizada na Prefeitura !"
                       MSG=MSG+"// //Para cancelamento efetue primeiramente no Site da Prefeitura,"
                       MSG=MSG+"//e atualizar [RESOLVER] status no eDOC !"
                       MSG=MSG+"// //Deseja CANCELAR a Nota Fiscal?"
                       If Not ConfGeral_N(MSG)
                         Then CHAVEC=9
                              Return
                       EndIf        

                       COR_MENSAGEM="ALERTA" 
                       MSG="Deseja realmente CANCELAR essa Nota Fiscal?"
                       If Not ConfGeral_N(MSG)
                          Then CHAVEC=9
                               Return
                       EndIf        
                       Release Vars COR_MENSAGEM

                       If PARAM_BLOQUEIA_CANCEL<>"N" 
                          Then If Not CHECA_SUPERVISOR()
                                  Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !")
                                       CHAVEC=9
                                       Return
                               EndIf
                       EndIf      
                       
                       OpcaoC="NFS-e"
                       CHECANFE_AUT=True
                       CANC=True
                       If Checagem_Pagina1() And doceautorizado("Consulta")
                          Then 
                               If Not cancelada
                                  Then Mensagem("Nota AUTORIZADA na Prefeitura. Verifcar Status no eDOC !")
                                  Else Echo Normal
                                       Echo Off
                                       ShowPopup " Op‡”es " CENTERED
                                           "Cancelamento ~N~ormal"      : " Cancelamento da NFSe                 " :"NORMAL",
                                           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
                                     
                                       SITUACAO=Opcaoc  
                                       TIPO="CANCELAR"
                                       Play "FT_DESF"
                               EndIf
                      EndIf       
                      CHAVEC=9
                      Return

                  Case Search("RPS",[FaturaC->Docto Nota Gerada ])>0 and [FaturaC->Sistema Gerador]="n" : 
                       NOTAFISC   =[Numero Nota Gerada]
                       CODFISC    =[Docto Nota Gerada ]
                       SERIEFISC  =[Serie Nota Gerada ]
                                                 
                       CHECANFE_AUT=True
                       If Not Checagem_Pagina1()
                          Then CHAVEC=9
                               Return
                       EndIf
                       CHECANFE_AUT=False

                        if doceautorizado("Consulta") and nfsefoiautorizada                           
                           then
                                UnLockRecord
                                Do_It!
        
                                CoEditKey                            
                                FormKey

                                Opcaoc="NFse"                           
                                play "FT_NOTA"
                                
                                Moveto "FaturaC"
                                [Numero Nota Gerada]=NOTAFISC
                                [Docto Nota Gerada ]="NSEA"
                                [Serie Nota Gerada ]="A"
                                Switch
                                  Case [FaturaC->Sistema Gerador]="n" : [FaturaC->Sistema Gerador]="n!" 
                                EndSwitch
                                UnLockRecord
        
                                Moveto "NotaC"
                                Moveto [Codigo da Empresa]
                                Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
                                If RetVal
                                   Then [Sistema Gerador]=[FaturaC->Sistema Gerador]
                                        UnLockRecord
                                EndIf
                                
                                Moveto "FaturaC"
                                UnLockRecord
                                formkey
                                
                                Echo Normal
                                Echo Off
                                
                                SaveTables
        
                                CHAVEC=9
                                Return
                        endif

                      Echo Normal
                      Echo Off
                      OpcaoC="Reenviar"

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

                      EndMenu
                      To Opcaoc

                      echo off
                           
                        If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                           Then CHAVEC=9
                                Return
                        EndIf
                        
                        If Opcaoc="Desfazer" 
                           Then
                              MSG="Para desfazer esta RPS "+NOTAFISC
                              MSG=MSG+",// voce deve primeiramente:// //"
                              MSG=MSG+"- RESOLVER a situa‡„o da RPS no eDOC;          //"
                              MSG=MSG+"- Se poss¡vel DESFAZER a RPS no eDOC;          // //"
                              MSG=MSG+"- Verificar/Corrigir o n£mero da pr¢xima RPS a ser//"
                              MSG=MSG+"  gerada, conforme necess rio. // //"
                              If ConfGeral_N(MSG+"Deseja realmente desfazer ?")
                                Then COR_MENSAGEM="ALERTA" 
                                     MSG="Deseja realmente DESFAZER essa RPS ?"
                                     If ConfGeral_N(MSG)
                                        Then 
                                             Moveto "FaturaC"
                                             [Docto Nota Gerada ]=""
                                             [Serie Nota Gerada ]=""
                                             [Numero Nota Gerada]=""
                                             [Sistema Gerador   ]=""
                                             unlockrecord
                                     EndIf
                              EndIf               
                              CHAVEC=9
                              Return
                        EndIf   

                        If Opcaoc="Reenviar"
                           Then Moveto "FaturaC"
                                REEMITIR=True
                                Return
                        EndIf


                  OtherWise:                          
                    ;-- Tratando outros documentos ----------------------------------------------------------
                    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 [FaturaC->Sistema Gerador]="DN"
                       Then MSG="Esta ordem de faturamento gerou o documento:// //"
                            MSG=MSG+DoctoGerado+"// //"
                            MSG=MSG+"Documento com situa‡Æo: DENEGADO !"
                            Mensagem(MSG)
                            CHAVEC=9
                            Return
                    EndIf
                    If Search("VENDA",[Descricao da Destinacao])>0 And Search("TROCA",[Descricao da Destinacao])>0
                       Then Mensagem("Opera‡Æo de TROCA, utilizar rotina TROCA/VENDA !")
                            CHAVEC=9
                            Return
                    EndIf
                    
                    While True                                                
                      Echo Normal
                      Echo Off
                    
                      opcao1="."  dopcao1=""  ropcao1="Esc"
                      opcao5="."  dopcao5=""  ropcao5="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"
                              opcao5="Im~p~rimir 2¦ via/expedi‡Æo"  dopcao5=" Imprime 2¦ via Romaneio/Expedi‡Æo SEM VALOR "  ropcao5="ROM_EXPED"
                      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,
                          opcao5                        : dopcao5+DoctoGerado                                                      : ropcao5,
                          "~C~ancelar o documento     " : " Cancelamento do documento gerado "+DoctoGerado                         :"Cancelar",
                          Separator,
                          "[ESC]=~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="ROM_EXPED" :
                          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          


                          IMP_ROM_EXPED = True
                          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
                          array CheckTG_OPEMAIL[1]
                          CheckTG_OPEMAIL[1] = 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

                EndSwitch 
        EndIf
EndIf

If CHAVEC=0 Or Not INICIO_PAGINA
   Then Switch
           Case IsBlank([Codigo da Empresa]): Moveto [Codigo da Empresa   ]
           OtherWise                        : Moveto [Codigo]
        EndSwitch
        
        UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("VERIFICAR", [FaturaC->Codigo])
        
   Else [Data de Saida  ]=Today()
        [Data de Emissao]=Today()
        [Hora de Saida  ]=Time()
        If Not IsBlank([Codigo da Empresa]) And Not MODOFILTRAR  
           Then If PARAM_PEDIDO="S"
                   Then Moveto [Numero do Pedido]
                   Else If PARAM_ORCAMENTO="S"
                           Then Moveto [Numero do Orcamento]
                           Else If IsBlank([Codigo da Destinacao])
                                   Then Moveto [Codigo da Destinacao]
                                   Else If PARAM_FATURA_IGUAL_OF="S"
                                           Then Moveto [Data de Emissao     ]
                                           Else Moveto [Codigo              ]
                                        EndIf
                                EndIf
                        EndIf
                EndIf
           Else Moveto [Codigo da Empresa]
        EndIf                        
EndIf

FACA_CHAVEDV=True
FACA_CHAVEI=True
INICIO_PAGINA=False

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

While True

  TECLA=" Esc=Retornar  "

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

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

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

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

  ;If (Field()="Endereco de Cobranca" Or Field()="Endereco de Entrega")
  ;   Then MSGCAMPO=MSGCAMPO+", [F9]Cob/Entr=Cadastro  "
  ;EndIf
    
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7","F8","F9",-33

  If RetVal=-33 And
     Field()<>"Codigo da Empresa"    And
     Field()<>"Numero do Pedido"     And
     Field()<>"Numero do Orcamento"  And
     Field()<>"Numero_Carregamento"  And
     Field()<>"Codigo da Destinacao" And
     Field()<>"CFO"                  And
     Field()<>"Numero Nota Original" And
     Field()<>"Data de Emissao"      And
     Field()<>"Data de Saida"        And
     Field()<>"Hora de Saida"        And
     Field()<>"Codigo"
     Then 
          MSGCAMPO=""
          TECLA=""
     
          Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
            "[F4] ~O~rdem de Compra P£blica " : " Ordem de Compra P£blica         " : "F4",
            "[F7] Documentos ~R~eferenciados" : " Referenciar demais documentos   " : "F7",
            "[F8] ~E~ndere‡os          " : " Endere‡os Entrega/Retirada/Cobranca  " : "F8",
            Separator,
            "~S~air"                     : " Ignorar op‡äes"                   :"Cancela"
          EndMenu
          To MenuVar
          echo off
          If MenuVar="Cancela" or MenuVar="Esc"
             Then Loop
          EndIf

          RetVal=MenuVar
  EndIf

  Switch
  Case RetVal="F1":
       If Field()="Numero do Pedido"         Or
          Field()="Numero do Orcamento"      Or
          Field()="CFO"                      Or
          Field()="Codigo da Empresa"        Or
          Field()="Codigo da Destinacao"     Or
         (Field()="Codigo" 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"    Or 
          Field()="Numero_Carregamento"     
          Then If CONSULTAF1()
                  Then If Field()="Cidade"
                          Then [UF  ]=Reg_ConsultaF1["UF"]
                       EndIf
               EndIf
       EndIf
       
       If Field()="IndPres"
          Then IndicadorPresenca()
       EndIf
                                                                
       ;If Field()="Nome do Autorizado" And [Tipo]="C"
       ;   Then Seleciona_Opcoes("Autorizado","CR")
       ;EndIf    
       If Field()="Codigo"
         Then If PARAM_TPC_CLIE="S" 
                 Then OP_INSERT_ITEM=True
                      Play "Sw_Clie"
                      If Sw_Cliente_Pesquisado<>""
                         Then [Codigo]=Sw_Cliente_Pesquisado
                      EndIf
              EndIf
              If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                 Then [Codigo do Representante] = V_REPRES 
              EndIf
       EndIf
       
;;  Case RetVal="F2" Or RetVal="F4" And CHAVEC=1 And PARAM_CUPOM_FISCAL="S":
;;       If IsBlank([Codigo da Destinacao])
;;          Then Mensagem("Informe o Codigo da Destina‡„o")
;;               Loop
;;       EndIf
;;       Tecla_Dig=RetVal
;;       Campo_Ant=Field()
;;       Moveto [Codigo da Destinacao]
;;       Ativa_Lookup()
;;       Moveto [Codigo da Destinacao]
;;       Locate [FaturaC->Codigo da Destinacao]
;;       If [Atualiza Estoque]="S"
;;          Then Mensagem("Aten‡„o! Codigo da Destina‡„o Inv lida-> Atualiza Estoque=Sim")
;;               KeyPress "ESC"
;;               Loop
;;       EndIf
;;       KeyPress "ESC"
;;
;;       Switch
;;        Case Tecla_Dig="F2":
;;             Entra_Numero_Cupom()
;;        Case Tecla_Dig="F4":
;;             Do_It!     
;;             Play "FT_CF"
;;             Carrega_Tabelas()
;;             CoEdit "FaturaC"
;;             PickForm "1"
;;             Moveto [Numero da OF]
;;             Locate ORDFAT
;;
;;             NOVA_DESTINACAO=False
;;       EndSwitch
;;       Moveto Field(Campo_Ant)
;;       Loop

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

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

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

       If [Codigo]<>CODCLIANT
          Then NOVO_CLIENTE = True
               CODCLIANT = [Codigo]
       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 DESTIN_ATUALIZA_PEDIDOS=""
                               Moveto [Codigo da Destinacao]
                               If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"SM")
                                   Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
                               EndIf
                               GRAVA_LOG=True
                               EXCLUSAO_C()
                               CHAVEC=9
                               QuitLoop
                       EndIf
               EndIf
       EndIf
  Case Retval="F4":
       Ordem_Compra_Publica()       
  Case Retval="F7":
       Play "FT_NFER"
       Loop
  Case Retval="F8":
       ShowDialog_Endereco()
  Case Retval="ESC":  
       Switch
       Case Field()="Razao Social"             : Moveto [Tipo Pessoa]
       Case Field()="Nome do Autorizado"       : Moveto [Razao Social]
       Case Field()="Condicao de Pagamento"    : Moveto [Origem do Pedido]
       Case Field()="Origem do Pedido" or
            Field()="Comissao do Representante": Moveto [Codigo do Representante]
       Case Field()="Consumidor Final"         : Moveto [Codigo]
       Case Field()="IndPres"                  : Moveto [Codigo da Destinacao]
       Case Field()="CFO"                      : Moveto [Codigo da Destinacao]
       Case Field()="Codigo da Tabela"         : Moveto [Condicao de Pagamento] 
       Case Field()="Codigo da Empresa"        :
            If ConfGeral("Confirma desfazer as altera‡äes para este registro e //a exclusÆo de seus itens")
               Then If Rtrim([FaturaC->Numero da Expedicao])<>""
                       Then Situacao_Expedicao()
                    EndIf
                    DESTIN_ATUALIZA_PEDIDOS=""
                    GetRecord "\\Sistemas\\Vendas\\Destin" [Codigo da Destinacao] To REG_BUSCA_LOOKUP
                    If RetVal
                       Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
                    EndIf
                    EXCLUSAO_C()   
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Numero_Carregamento" And SYS_CODIGO_CLIENTE="0092":
            Moveto "FaturaI"
            NAOTEMREG = RecordStatus("New")
            Moveto "FaturaC"
            Moveto [Numero_Carregamento]
            If CHAVEC=1
               Then If NAOTEMREG
                       Then Moveto [Codigo da Empresa]
                       Else If ConfGeral("Confirma desfazer as altera‡äes para este registro e //a exclusÆo de seus itens")
                               Then If Rtrim([FaturaC->Numero da Expedicao])<>""
                                       Then Situacao_Expedicao()
                                    EndIf
                                    DESTIN_ATUALIZA_PEDIDOS=""
                                    Moveto [Codigo da Destinacao]
                                    If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"SM")
                                       Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
                                    EndIf
                                    EXCLUSAO_C()
                                    CHAVEC=9
                                    QuitLoop
                            EndIf
                    EndIf        
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf 
            EndIf                   
       Case Field()="Codigo da Destinacao":  
            Moveto "FaturaI"
            NAOTEMREG = RecordStatus("New")
            Moveto "FaturaC"
            Moveto [Codigo da Destinacao]                        
            If CHAVEC=1
               Then If NAOTEMREG
                       Then Moveto [Codigo da Empresa]
                       Else If SYS_CODIGO_CLIENTE="0092"
                               Then Moveto [Numero_Carregamento]
                                    Loop
                            EndIf
                            If ConfGeral("Confirma desfazer as altera‡äes para este registro e //a exclusÆo de seus itens")
                               Then If Rtrim([FaturaC->Numero da Expedicao])<>""
                                       Then Situacao_Expedicao()
                                    EndIf
                                    DESTIN_ATUALIZA_PEDIDOS=""
                                    Moveto [Codigo da Destinacao]
                                    If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"SM")
                                       Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
                                    EndIf
                                    EXCLUSAO_C()
                                    CHAVEC=9
                                    QuitLoop
                            EndIf
                    EndIf        
               Else If SYS_CODIGO_CLIENTE="0092"
                       Then Moveto [Numero_Carregamento]
                            Loop
                    EndIf
                    
                    If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf             
            EndIf
       Case Field()="Data de Emissao" Or 
            Field()="Numero Nota Original":
            Switch
              Case SYS_CODIGO_CLIENTE="0217": Moveto [Codigo da Destinacao]
              OtherWise                     : Moveto [CFO]
            EndSwitch
       Case Field()="Codigo" :
            If Not IsBlank([Data de Saida]) And Not IsBlank([Hora de Saida])
               Then Moveto [Hora de Saida] 
               Else Moveto [Data de Saida]
            EndIf   
       Case Field()="Numero do Pedido" Or Field()="Numero do Orcamento":
            Moveto [Codigo da Empresa]
       OtherWise:
            Left
       EndSwitch
       
  Case Retval="ENTER":
       If IsBlank([])
          Then If Field()="Codigo da Empresa" Or
                  Field()="Codigo da Destinacao" Or
                  Field()="CFO" Or
                  Field()="Data de Emissao" Or
                  Field()="Codigo" Or
                  Field()="Codigo do Representante" Or
                  Field()="Condicao de Pagamento"
                  Then Loop
               EndIf
       EndIf
       Switch
       Case Field()="Codigo da Empresa":
            If Carrega_Parametros()
               Then If [Codigo da Empresa   ]<>V_EMPRES
                       Then V_EMPRES_ATU = [Codigo da Empresa]
                            [Codigo da Empresa] = V_EMPRES
                            Moveto "FaturaI"
                            Moveto [Item da Of]
                            If RecordStatus("New")= False
                               Then Moveto "FaturaC" 
                                    Mensagem("A Empresa n„o pode ser alterada !// J  existe itens lan‡ados para esta OF. ")
                               Else Moveto "FaturaC"
                                    [Codigo da Empresa]=V_EMPRES_ATU
                                    V_EMPRES=[Codigo da Empresa]
                                    If CHAVEC=1
                                       Then [Codigo da Empresa       ]=PARAM_EMPRESA
                                            [Codigo da Destinacao    ]=PARAM_DESTINACAO
                                            [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                                            [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                                            [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                                    EndIf
                            EndIf
                    EndIf                      
                    CD_EMPRESA=[Codigo da Empresa]
                    If PARAM_PEDIDO="S"
                       Then Moveto [Numero do Pedido]
                       Else If PARAM_ORCAMENTO="S"
                               Then Moveto [Numero do Orcamento]
                               Else Moveto [Numero_Carregamento]
                            EndIf
                    EndIf
                    
                    If MODOFILTRAR And SYS_CODIGO_CLIENTE="0435"
                       Then GetRecord "\\Sistemas\\Cadastro\\Usuarios" SYS_CHAPA_USUARIO To REG_USUARIO
                            If ReTval
                               Then If REG_USUARIO["Cod_Empresa"]<>"" And [Codigo da Empresa]<>REG_USUARIO["Cod_Empresa"]
                                       Then Mensagem("A empresa informada difere da empresa cadastrada para o usu rio!")
                                            Moveto [Codigo da Empresa]
                                    EndIf
                            EndIf
                    EndIf
            EndIf
       Case Field()="Numero do Pedido": 
            If Not IsBlank([])            
               Then  If Not Carrega_Parametros()
                        Then Loop
                     EndIf

                     V_PEDIDO =[Numero do Pedido         ]
                     V_COD    =[CODIGO                   ]
                     V_REPRES =[Codigo do Representante  ]
                     V_REPRCOM=[Comissao do Representante]
                     V_DESTIN2=[Codigo da Destinacao     ]
                     V_CONDPG =[Condicao de Pagamento    ]
                     V_TRANSP =[Codigo da Transportadora ]
                     V_VEICU  =[Codigo do Veiculo        ]

                     CODIGO_FATURA = [Codigo   ]
                     
                     [Codigo                   ]=""
                     [CODIGO                   ]=V_COD
                     ENDERECOS()
                     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 !// //Verificar se poss¡vel venda … vista !")
                                     If SYS_CODIGO_CLIENTE = "0112"
                                        Then If Not Checa_Supervisor()
                                                Then Loop
                                             EndIf
                                     EndIf    
                             EndIf
                     EndIf
                     
                     If SYS_CODIGO_CLIENTE<>"0388" And
                        SYS_CODIGO_CLIENTE<>"0427" And 
                        SYS_CODIGO_CLIENTE<>"0390" And 
                        SYS_CODIGO_CLIENTE<>"0396" And
                        SYS_CODIGO_CLIENTE<>"0419"And
                        SYS_CODIGO_CLIENTE<>"0429"
                        Then [Condicao de Pagamento    ]=""
                             [Condicao de Pagamento    ]=V_CONDPG    
                     EndIf
                     
                     [Codigo da Destinacao     ]=""
                     [Codigo da Destinacao     ]=V_DESTIN2

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

                     [Codigo do Veiculo        ]=""
                     [Codigo do Veiculo        ]=V_VEICU
                                         
                     [Codigo da Transportadora ]=""
                     [Codigo da Transportadora ]=V_TRANSP

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

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

                     PED_VECTOS()
                     
                     If CD_EMPRESA<>[Codigo da Empresa]
                        Then GetRecord "\\Sistemas\\Vendas\\PedidoC" [Numero do Pedido] to REGPEDC
                             MSG =       "EMPRESA:   "+Format("W35",REGPEDC["Codigo da Empresa"]+" "+REGPEDC["Nome Fantasia Empresa"])+"          //" 
                             MSG = MSG + " PEDIDO: "+Format("W37",REGPEDC["Numero do Pedido"]+" "+REGPEDC["Razao Social"])+"          ////"
                             MSG = MSG + "Ser  alterado a empresa "+[Codigo da Empresa]+" do pedido pela empresa "+CD_EMPRESA+"//"
                             MSG = MSG + "do faturamento.                                         //"
                             MSG = MSG + "Continuar com esta altera‡„o?"
                             COR_MENSAGEM="ALERTA"
                             ConfGeral(MSG)
                             If OK="S" 
                                Then [Codigo da Empresa]=CD_EMPRESA
                                     If Not Carrega_Parametros()
                                        Then Moveto [Codigo da Empresa]
                                             Loop
                                     EndIf
                             EndIf
                     EndIf       

                     Moveto [Numero_Carregamento]
                     If Search("VEND",[Descricao da Destinacao])>0 Or 
                        (SYS_CODIGO_CLIENTE="0204" And Search("MANIF",[Descricao da Destinacao])>0)
                        Then Mensagem_Venda()
                             
                     EndIf

                     UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("PEGAR", [FaturaC->Codigo])
                     
            EndIf
            Moveto [Numero_Carregamento]
       Case Field()="Numero do Orcamento":
            If Not IsBlank([])
               Then If CHAVEC=1
                       Then GetRecord "\\Sistemas\\Vendas\\OrcaC" [Numero do Orcamento] to REGOCC
                            If RetVal 
                               Then If REGOCC["Situacao do Orcamento"]<>"ABERTO" 
                                       Then Mensagem("Verificar a Situa‡„o do Or‡amento !//Status="+REGOCC["Situacao do Orcamento"])
        						                        Loop
                                    EndIf
                            EndIf

                            If Not Carrega_Parametros()
                               Then Loop
                            EndIf

                            V_ORCAME =[Numero do Orcamento     ]
                            V_COD    =[CODIGO                  ]
                            V_REPRES =[Codigo do Representante ]
                            V_DESTIN2=[Codigo da Destinacao    ]
                            V_CONDPG =[Condicao de Pagamento   ]
                            V_TRANSP =[Codigo da Transportadora]

                            CODIGO_FATURA = [Codigo  ]

                            [Codigo                  ]=""
                            [CODIGO                  ]=V_COD
                            ENDERECOS()
                             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 !// //Verificar se poss¡vel venda … vista !")
                                             If SYS_CODIGO_CLIENTE = "0112"
                                                Then If Not Checa_Supervisor()
                                                        Then Loop
                                                     EndIf
                                             EndIf    
                                     EndIf
                             EndIf

                            [Codigo da Destinacao    ]=""
                            [Codigo da Destinacao    ]=V_DESTIN2
                                    
                            [Codigo do Representante ]=""
                            [Codigo do Representante ]=V_REPRES

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

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

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

                            UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("PEGAR", [FaturaC->Codigo])

                            If Isblank([Forma de Pagamento])
                               then [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                            endif
                    EndIf
            EndIf
            Moveto [Numero_Carregamento]
       Case Field()="Numero_Carregamento":

            UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("PEGAR", [FaturaC->Codigo])

            Moveto [Codigo da Destinacao]
       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   
            If [Codigo da Destinacao]<>DEST_ANT And DEST_ANT<>""
               Then DEST_ATU = [Codigo da Destinacao]
                    [Codigo da Destinacao] = DEST_ANT
                    Moveto "FaturaI"
                    Moveto [Item da Of]
                    Switch
                      Case SYS_CODIGO_CLIENTE = "0258" And Checa_Supervisor() :
                           Moveto "FaturaC"
                           [Codigo da Destinacao] = DEST_ATU
                      Case RecordStatus("New")= False  :
                           Moveto "FaturaC" 
                           Mensagem("A Destina‡„o n„o pode ser alterada !// J  existe itens lan‡ados para esta OF. ")
                      OtherWise   : Moveto "FaturaC"
                                    [Codigo da Destinacao] = DEST_ATU
                                
                    EndSwitch
            EndIf
            Moveto "FaturaC"               
            Moveto [Codigo da Destinacao]                        
            
            If IsBlank([Numero Nota Gerada])
               Then GetRecord "\\Sistemas\\Vendas\\PedidoC" [Numero do Pedido] to REGPEDC
                    If RetVal 
                       Then If [Numero do Pedido   ]<>"" And [Tipo Movimento Estoque]="S" And REGPEDC["Situacao do Pedido"]<>"ABERTO"
        						           Then Mensagem("Verificar a Situa‡„o do Pedido !//Status="+REGPEDC["Situacao do Pedido"])
        						                Loop
                            EndIf
          					EndIf
          	        GetRecord "\\Sistemas\\Vendas\\OrcaC" [Numero do Orcamento] to REGOCC
                    If RetVal 
                       Then If [Numero do Orcamento]<>"" And [Tipo Movimento Estoque]="S" And REGOCC["Situacao do Orcamento"]<>"ABERTO" 
                               Then Mensagem("Verificar a Situa‡„o do Or‡amento !//Status="+REGOCC["Situacao do Orcamento"])
        						                Loop
                            EndIf
                     EndIf				
  					EndIf

            Switch
              Case SYS_CODIGO_CLIENTE="0217":
                If Search("REMES",[Descricao da Destinacao])>0 Or
                   Search("COMPLEM",[Descricao da Destinacao])>0 Or
                   Search("BONIF",[Descricao da Destinacao])>0 Or
                   Search("TROCA",[Descricao da Destinacao])>0 Or
                   (Search("RETOR",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0) Or
                   (Search("VENDA",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0)
                   Then Moveto [Numero Nota Original]
                   Else Moveto [Data de Emissao]
                EndIf
              OtherWise:
                Moveto [IndPres]
            EndSwitch
            DEST_ANT=[Codigo da Destinacao]
            
       Case Field()="IndPres":
            if isblank([])
               then fastmsg("Valor inv lido !")
                    loop
            endif
            Moveto [CFO]
            
       Case Field()="CFO":
            If Search("REMES",[Descricao da Destinacao])>0 Or
               Search("COMPLEM",[Descricao da Destinacao])>0 Or
               Search("BONIF",[Descricao da Destinacao])>0 Or
               Search("TROCA",[Descricao da Destinacao])>0 Or
               (Search("RETOR",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0) Or
               (Search("VENDA",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0)
               Then Moveto [Numero Nota Original]
               Else Moveto [Data de Emissao]
            EndIf
       Case Field()="Numero Nota Original":
            []=ALINH()
            Right
       Case Field()="Data de Emissao":  
            If CHAVEC=1 And Not IntervaloData([])
               Then Loop
            EndIf
            ;---- Verifica a data de emissÆo antes da altera‡Æo e se mˆs diferente pergunta se deseja prosseguir ----
            If IsAssigned(ANT_DTE) And ANT_DTE<>BlankDate() And ANT_DTE<>[Data de Emissao]
               Then If CHAVEC=0 And (Month(ANT_DTE)<>Month([Data de Emissao]) Or Year(ANT_DTE)<>Year([Data de Emissao]))
                       Then MSG = "O  mˆs/ano da nova data informada "+AlinhM(StrVal([Data de Emissao]),10)+" ‚ diferente do mˆs/ano//"+
                                  "da data anterior "+AlinhM(StrVal(ANT_DTE),10)+"                                        ////"+
                                  "Deseja continuar com a altera‡„o?                                  "
                                  ConfGeral(MSG)
                                  If OK<>"S"
                                     Then [Data de Emissao]=ANT_DTE
                                          Loop
                                     Else If Checagem_Pagina1()
                                             Then ATU_DTE = [Data de Emissao]
                                                  ATU_TME = [Tipo Movimento Estoque]
                                                  
                                                  [Data de Emissao] = ANT_DTE
                                                  If ATU_TME="S"
                                                     Then [Tipo Movimento Estoque] = "E"
                                                     Else [Tipo Movimento Estoque] = "S"
                                                  EndIf   
                                                 
                                                  CHAVEI=1
                                                  Moveto "FaturaI"
                                                  Scan
                                                    ESTOQUE()
                                                  EndScan
                                                  
                                                  Moveto "FaturaC"
                                                  [Data de Emissao        ] = ATU_DTE
                                                  [Data de Saida          ] = ATU_DTE
                                                  [Tipo Movimento Estoque ] = ATU_TME
                                                  
                                                  Moveto "FaturaI"
                                                  Scan
                                                    ESTOQUE()
                                                  EndScan
                                                  
                                                  If [FaturaC->Numero Nota Gerada]<>""
                                                     Then ALTERA_DTEMISSAO = True
                                                          REEMITIR         = True
                                                          Mensagem("Data de Emiss„o alterada com sucesso!")
                                                          Return
                                                  EndIf
                                                   
                                                  Moveto "FaturaC"
                                                  ANT_DTE = [Data de Emissao]
                                                  
                                                  Release Vars ATU_DTE, ATU_TME
                                          EndIf
                                  EndIf
                    EndIf   
            EndIf           
            Moveto [Data de Saida]                                                
       Case Field()="Data de Saida":  
            If [Data de Saida]<[Data de Emissao] And Not IsBlank([Data de Saida])
               Then Mensagem("Data de Sa¡da n„o pode ser menor que a data de emiss„o !")
                    Loop
               Else If Not IsBlank([Data de Saida])
                       Then Moveto [Hora de Saida]
                       Else [Hora de Saida]=""
                            Moveto [Codigo]
                    EndIf      
            EndIf
       Case Field()="Hora de Saida":
            If Not IsBlank([Data de Saida]) And Not IsBlank([Hora de Saida])
               Then Right
               Else Mensagem("A Hora de sa¡da ‚ obrigat¢ria !")
                    Loop
            EndIf                                                           
       Case Field()="Codigo" :
            CODIGO_FATURA = [Codigo]
            
            If CHAVEC=0 And IsAssigned(ANT_REP) And ANT_REP<>"" And [Codigo do Representante]=""
               Then [Codigo do Representante ]=ANT_REP
            EndIf

            If SYS_CODIGO_CLIENTE="0334" Or
               SYS_CODIGO_CLIENTE="0344" Or
               SYS_CODIGO_CLIENTE="0102"
               Then Play "sw_ped"
            EndIf 

            GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] to REG_CLIE_PED  
            If not RetVal
               Then 
                    Mensagem("Pessoa Inv lida !")
                    Loop
               Else 
                    If REG_CLIE_PED["Inativo"]="S"
                       Then Mensagem("Pessoa Inativa !")
                            Loop
                    EndIf  
                    If REG_CLIE_PED["Situacao do Cliente"]="RECADASTRO"
                       Then Mensagem("Verificar a Situa‡„o da Pessoa !//Status="+REG_CLIE_PED["Situacao do Cliente"])
                            Loop
                    EndIf
                    If REG_CLIE_PED["Situacao do Cliente"]="PESSIMO"
                       Then Mensagem("Verificar a Situa‡„o da Pessoa com a Gerencia !// //Verificar se poss¡vel venda … vista !")
                            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 CODIGO_FATURA<>V_COD Or (CHAVEC=1 and isblank([Numero do Pedido]))
               Then ENDERECOS() 
                    
                    If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                       Then 
                       Else V_REPRES = [Codigo do Representante]
                            [Codigo do Representante] = ""
                            [Codigo do Representante] = V_REPRES
                    EndIf
                    
                    V_TRANSP =[Codigo da Transportadora]
                    [Codigo da Transportadora]=""
                    [Codigo da Transportadora]=V_TRANSP

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

                    V_COD=CODIGO_FATURA
            EndIf

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

            If Search("VEND",[Descricao da Destinacao])>0 Or 
               (SYS_CODIGO_CLIENTE="0204" And Search("MANIF",[Descricao da Destinacao])>0)
               Then Mensagem_Venda()
            EndIf

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

            If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
               Then [Codigo do Representante] = V_REPRES 
            EndIf
            
            Moveto [Consumidor Final]
       Case Field()="Consumidor Final":
            If IsBlank([]) Then []="N" EndIf
            If [Nome Fantasia EmitDest]="DIVERSOS"
               Then Moveto [Razao Social]
               Else Moveto [Nome do Autorizado]
            EndIf
       Case Field()="Tipo Pessoa":
            Moveto [Razao Social]
       Case Field()="Nome do Autorizado": 
            If IsBlank([Nome do Autorizado])
               Then [CPF do Autorizado  ]=""
                    [Data da Autorizacao]=BlankDate()
               Else If PARAM_BLOQUEIA_AUTORI="S" And
                       [Nome Fantasia EmitDest]<>"DIVERSOS" And [Tipo]="C"
                       Then ;If Not Checa_Opcoes("Autorizado",[])
                            ;   Then Mensagem("Autorizado n„o cadastrado !")
                            ;        Loop
                            ;   Else [Nome do Autorizado  ]=Registro_F1["Nome"]
                            ;        [CPF do Autorizado   ]=Registro_F1["CGC/CPF"]
                            ;        [Data da Autorizacao ]=Registro_F1["Data da Autorizacao"]
                            ;        Moveto [CPF do Autorizado]
                            ;EndIf
                            Moveto [CPF do Autorizado]
                       Else Moveto [CPF do Autorizado]
                    EndIf   
            EndIf            
            Moveto [CPF do Autorizado]            
            
       Case Field()="CPF do Autorizado":
            Moveto [Codigo do Representante]
       Case Field()="Codigo do Representante" :
            If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
               Then If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                       Then If [Codigo do Representante]<>V_REPRES 
                               Then Mensagem("Verificar a permiss„o para altera‡„o do representante !")
                                    [Codigo do Representante] = V_REPRES
                            EndIf      
                    EndIf
                    Moveto [Comissao do Representante] 
               Else If Not Verifica_Representante([FaturaC->Codigo do Representante])
                       Then Mensagem("Representante/Vendedor Inativo !")
                            Loop
                    EndIf                                   
                    If [Codigo do Representante]<>V_REPRES
                       Then V_REPRES =[Codigo do Representante]
                            [Codigo do Representante]=""
                            [Codigo do Representante]=V_REPRES
                    EndIf
                    Moveto [Comissao do Representante]        
            EndIf
       Case Field()="Comissao do Representante":
            Moveto [Condicao de Pagamento]
       Case Field()="Origem do Pedido":
            If PARAM_VISITA="S" And IsBlank([])
               Then Loop
            EndIf
            Moveto [Condicao de Pagamento]
       Case Field()="Condicao de Pagamento": 
            If SYS_CODIGO_CLIENTE="0322"
               Then LOC_TAB_PRECO("A VISTA")
            EndIf 
            If SYS_CODIGO_CLIENTE="0343" and Search("OUTR",[Descricao CondPagto])>0
               then [Forma de Pagamento] = "OU" 
            EndIf   
            Moveto [Codigo da Tabela]
       Case Field()="Codigo da Tabela":
            ;*** Coloquei a tabela de pre‡o como obrigatoriedade, se for o caso, retirar ***
            If IsBlank([Codigo da Tabela]) Then Loop EndIf  
            If [Codigo da Destinacao]<>V_DESTIN
               Then NOVA_DESTINACAO=True
            EndIf
            V_DESTIN=[Codigo da Destinacao]

            If [Numero do Pedido]<>V_PEDIDO
               Then NOVO_PEDIDO    =True
            EndIf
            V_PEDIDO=[Numero do Pedido]
            
            If [Codigo]<>CODCLIANT
               Then NOVO_CLIENTE = True
            EndIf
            CODCLIANT=[Codigo]
            
            If Checagem_Pagina1() Then QuitLoop EndIf
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

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

If REEMITIR
   Then CHAVEI=9
        Return
EndIf

Moveto "FaturaI"
While True
  Moveto "FaturaI"
  Usando_Expedicao =False
  
  SomatoriaDosItens()
  
  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

  if []>500
     then Echo Normal
          Mensagem("NÆo informar mais de 500 itens no documento ROM/NFe !// //Verificar !")
          Echo Off 
  endif

  Sw_Item_Pesquisado=""
  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","F8","F9",-33

    If RetVal=-33
       Then 
            MSGCAMPO=""
            TECLA=""
       
            Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha                        " : " Ver itens modo ficha             " : "F3",
              "F5  C~o~nsulta                         " : " Consultar tabela pre‡o           " : "F5",
              "F8  ~F~atura Pedido/Or‡amento/Expedi‡Æo/Requisi‡Æo/Programa‡Æo/Devol" : " Faturar Pedido/Or‡amento/Expedi‡Æo/Requisi‡Æo/Programa‡Æo/Devolu‡Æ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()
         If PARAM_DADOS_ITEM_RESUMO="S"
            Then DigitaI_Resumo()
            Else DigitaI()
         EndIf   
         QuitLoop
         
    Case RetVal="F5":
         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
             Then Del
                  FastMsg("Fun‡„o desabilitada, expedi‡„o j  foi informada!")
                  QuitLoop
         EndIf 
         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()
         Moveto "FaturaI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

         If Existe_Pedido()
            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="F9":
         Del
         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
            Then FastMsg("Fun‡„o desabilitada, expedi‡„o j  foi informada!")
                 QuitLoop
         EndIf
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="F8":
         Del
         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
            Then FastMsg("Fun‡„o desabilitada, expedi‡„o j  foi informada!")
                 QuitLoop
         EndIf
         
         MSGCAMPO=""
         TECLA=""
     
         Echo Normal
         Echo Off
         If PARAM_APENAS_EXPEDOF
            Then ShowPopup " Op‡”es " CENTERED
                   "~E~xpedi‡„o c/Pedido" : " Carregar itens da ordem de expedi‡„o com Pedido":"EXPEDICAO",       ;Origem da Expedi‡Æo = "OF"
                   "Expedi‡„o ~s~/Pedido" : " Carregar itens da ordem de expedi‡„o sem Pedido":"EXPEDICAOS",      ;Origem da Expedi‡Æo = "OF"
                   "Expedi‡„o c/~O~F  "   : " Carregar itens da ordem de expedi‡„o com OF"    :"EXPEDICAOOF",     ;Origem da Expedi‡Æo = "OF"
                   Separator,
                   "~C~ancela  " : " Cancelar"                            :"Cancela"
                 EndMenu
                 To Opcaoc
            Else ShowPopup " Op‡”es " CENTERED
                   "~P~edido                      " : " Carregar itens do pedido                       ":"PEDIDO",
                   separator,
                   "~E~xpedi‡„o c/Pedido          " : " Carregar itens da ordem de expedi‡„o com Pedido":"EXPEDICAO",       ;Origem da Expedi‡Æo = "IC"  e "IQ"
                   "Expedi‡„o ~s~/Pedido          " : " Carregar itens da ordem de expedi‡„o sem Pedido":"EXPEDICAOS",      ;Origem da Expedi‡Æo = "ES"  , "EC e "ER"
                   "Expedi‡„o c/~O~F              " : " Carregar itens da ordem de expedi‡„o com OF"    :"EXPEDICAOOF",     ;Origem da Expedi‡Æo = "OF"
                   separator,
                   "~C~upom Fiscal                " : " Carregar itens do cupom fiscal"                 :"CUPOMFISCAL",
                   "Nota de Venda -> ~D~evolu‡Æo  " : " Carregar itens da nota de venda para devolu‡Æo" :"NOTAVENDADEVOL",
                   "~R~equisi‡Æo                  " : " Carregar itens da requisi‡Æo"                   :"EXPEDICAOREQ",    
                   "Programa‡Æo/Externa[Confec‡Æo]" : " Carregar itens da programa‡Æo"                  :"EXPEDICAOPROG",   
                   Separator,
                   "~C~ancela                     " : " Cancelar"                                       :"Cancela"
                 EndMenu
                 To Opcaoc
         EndIf          

         If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
            Then QuitLoop
         EndIf  
         
         Switch
           Case Opcaoc="PEDIDO"      : FATURA_PEDIDO_ORCAMENTO()

           Case Opcaoc="EXPEDICAO"   :
             switch
               case SYS_CODIGO_CLIENTE="0345" Or 
                    SYS_CODIGO_CLIENTE="0388" Or 
                    SYS_CODIGO_CLIENTE="0427" Or 
                    SYS_CODIGO_CLIENTE="0390" Or 
                    SYS_CODIGO_CLIENTE="0396" Or 
                    SYS_CODIGO_CLIENTE="0408" Or
                    SYS_CODIGO_CLIENTE="0419" Or
                    SYS_CODIGO_CLIENTE="0429"    :
                 ROTINA_EXPEDICAO="ETIQ"
                 Play("Ft_Expiq")

               case SYS_CODIGO_CLIENTE="0377"    :
                 ROTINA_EXPEDICAO="PED"
                 Play("Ft_ExpOF")
               
               otherwise                         :
                 ROTINA_EXPEDICAO=""
                 Play("Ft_Exped")
                
             endswitch

           Case Opcaoc="EXPEDICAOS"  :    
                If not isblank([FaturaC->Numero do Pedido])
                   then 
                        Mensagem("O pedido "+[FaturaC-> Numero do Pedido]+" est  informado na nota !") 
                        QuitLoop     
                   else 
                        Switch
                          Case SYS_CODIGO_CLIENTE="0377" : ROTINA_EXPEDICAO="SEM_PED"
                                                           Play("Ft_ExpOF")

                          Case PARAM_EXPED_TIPO="C"      : Play("Ft_ExpdC")

                          Case PARAM_EXPED_TIPO="R" and
                               PARAM_EXPED_AGRUPA ="S"   : Play("Ft_ExpdC") ;Clientes [0361] e [0343]

                          Case PARAM_EXPED_TIPO="R" and
                               PARAM_EXPED_AGRUPA<>"S"   : Play("Ft_ExpdR") 

                          OtherWise                      : Play("Ft_Expds")
                          
                        EndSwitch
                EndIf        

           Case Opcaoc="EXPEDICAOOF"    : ROTINA_EXPEDICAO="OF"
                                          Play("Ft_ExpOF")

           Case Opcaoc="EXPEDICAOREQ"   : Play("Ft_REQ")

           Case Opcaoc="EXPEDICAOPROG"  : 
             if sys_cliente_confec<>""
                then Play("Ft_PROG")
                else fastmsg("Op‡Æo nÆo diponivel!")
                     quitloop 
             endif

           Case Opcaoc="CUPOMFISCAL" :
             If SYS_CODIGO_CLIENTE<>"0294" 
                Then Mensagem("Op‡„o n„o liberada !//Verificar com o Suporte Vise !")
                     QuitLoop 
                Else GetRecord "Destin" [FaturaC->Codigo da Destinacao] To REG_DESTIN
                     If Not RetVal
                        Then QuitLoop
                        Else Switch 
                               Case REG_DESTIN["CFO"]<>"5929"                                                 : 
                                    Mensagem("Processo liberado apenas para o CFOP 5929!")
                                    QuitLoop 
                               Case REG_DESTIN["Atualiza Estoque"]<>"S" And REG_DESTIN["Gera Duplicata"]<>"S" :  
                                    Mensagem("Destina‡Æo que ATUALIZA ESTOQUE e ATUALIZA FINANCEIRO nÆo ‚ permitido neste processo!")
                                    QuitLoop 
                               OtherWise                                                                      :
                                    Play("FT_CUP")
                             EndSwitch
                     EndIf        
             EndIf             
           
           Case Opcaoc="NOTAVENDADEVOL" : 
             If Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque] = "E"
                Then Play("FT_NVDEV")
                Else FastMsg("Op‡Æo nÆo diponivel!")
                     QuitLoop   
             EndIf           

         EndSwitch
         If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
            Then If [FaturaC->Numero da Expedicao]<>"" And OPCHAVEI="CDB" Then OPCHAVEI="CDC" EndIf
         EndIf
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Item da Of]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Faturamento deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         
        ;If SYS_CODIGO_CLIENTE="0204" And  [Codigo da Tabela]="00002"
        ;    Then If [Item da Of]<6 And SYS_NIVEL_USUARIO ="P" 
        ;           Then MENSAGEM("A Ordem de Faturamento deve ter pelo menos 6(seis) Itens Ok !")
        ;                 QuitLoop
        ;         EndIf
        ;EndIf
        
        If [Tipo do Item]<>"C"
           Then Home
                Moveto [Codigo do Item]  
                While True
                  If Len([NCM]) <> 8    
                     Then MENSAGEM("O NCM do Item ["+[Codigo do Item]+"], est  incorreto!// Verifique ! ")
                          QuitLoop
                     Else If AtLast()
                             Then QuitLoop
                             Else Skip
                          EndIf   
                  EndIf        
                EndWhile
        EndIf
        Moveto [Item da OF]
                   
        If Not ISBlank([FaturaC->Numero do Pedido]) And DESTIN_ATUALIZA_PEDIDOS="S" And [FaturaC->Tipo Movimento Estoque]="S" 
           Then GetRecord "\\Sistemas\\Vendas\\PedidoC" [FaturaC->Numero do Pedido] To REG_BUSCA_LOOKUP
                If Retval
                   Then If REG_BUSCA_LOOKUP["Situacao do Pedido"]="ABERTO" 
                           Then Mensagem("O Pedido "+[FaturaC->Numero do Pedido]+" continua em "+REG_BUSCA_LOOKUP["Situacao do Pedido"]+", faturado parcial !")                                                                                                                                                            
                        EndIf
                EndIf
                Moveto "FaturaI"   
        EndIf

         ;---- Verifica ocorrˆncias de falhas de itens do(s) pedido(s) --------- 
         If Not Agrupa_Pedido("VALIDA")
            Then If (PARAM_BLOQ_ITEM="S" And (CHAVEC=1 Or [FaturaC->Numero Nota Gerada]="") And [FaturaC->Numero do Pedido]<>"") 
                    Then PED_ERRO = False
                         Home
                         Scan
                           If Rtrim([Numero Pedido_Orcamento])="" Or Rtrim([Item Pedido_Orcamento])=""
                              Then If Not PED_ERRO Then PED_ERRO = True EndIf 
                                   MSG = Completa("Sequˆncia "+Rtrim([Item da OF])+" do Item "+Format("W10",[Codigo do Item])+
                                                  " est  com dados incorretos.",72," ")+"////"+
                                         Completa("Numero do Pedido: "+Format("W6",[Numero Pedido_Orcamento]),72," ")+"//"+
                                         Completa("Item do Pedido  : "+Format("W3",[Item Pedido_Orcamento]),72," ")+"////"+
                                         Completa("Recarregue o pedido para a inclus„o correta dos itens!",72," ")
                                   Mensagem(MSG)
                           EndIf
                         EndScan
                         If PED_ERRO 
                            Then Release Vars PED_ERRO
                                 QuitLoop
                            Else Release Vars PED_ERRO     
                         EndIf
                 EndIf
         EndIf 
         ;----------------------------------------------------------------------
         CHAVEI=9
         Return
    Case RetVal="ESC" Or Retval="PGUP":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_DIGITAF=True
           
           PAGINA("FaturaI","MR")

           SEQIT=[Item da OF]
           If EDITAR="S"
              Then If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
                      Then FastMsg("Edi‡„o n„o permitida!")
                      Else CHAVEI=0
                           Controla_EdicaoI()
                   EndIf
              Else If EXCLUIR="S"
                      Then If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
                              Then FastMsg("Exclus„o n„o permitida!")
                              Else If QuerExcluir("")
                                      Then CHAVEI=8
                                           GRAVA_LOG=True
                                           EXCLUSAO_I()
                                           Release Vars GRAVA_LOG
                                      Else UnLockRecord
                                   EndIf
                           EndIf        
                      Else QuitLoop
                   EndIf
           EndIf
           
           SomatoriaDosItens()
           
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":  
         If Existe_Pedido()
            Then Del
                 QuitLoop
         EndIf

         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
            Then FastMsg("N„o ‚ poss¡vel incluir itens a partir desta tecla/op‡„o.")
                 Del
                 QuitLoop
         EndIf
         
         SEQIT=[]
         If Isblank(SEQIT) 
             Then Del 
                  QuitLoop 
         EndIf
         If SEQIT>(NITEM+1)
            Then NITEM=NITEM+1
                 SEQIT=NITEM
         EndIf   
         If Not Seta_Sequencia(SEQIT,True)
            Then Del
                 QuitLoop
         EndIf
         
         If SEQIT>900
            Then Mensagem("N£mero m ximo de itens permitidos ‚ 900 !")
                 Del
                 QuitLoop
         EndIf

         Del
         Locate 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

Moveto "FaturaI"
CODBAR_ANT="*****"

SomatoriaDosItens()

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
  SEQIT=[]
  CHAVEI=1

  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 If Not Existe_Pedido()
                       Then CDBarras()
                            QuitLoop
                    EndIf
            EndIf
    EndIf        
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()          

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

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

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

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

Estoque()

Moveto "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, PEGA_DADOS_CODITEM,NITEMOF,REG_ITEMCOM

Item_ok=False
Switch
  Case Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog" :
       If Origem="Codigo_Barras_ShowDialog"
          Then Dados_Item = VSD_I_Codigo_Item
               Dados_QTD  = BlankNum()
         Else CODIGO_BARRA = Dados_Item     
       EndIf
       
       If IsAssigned(CODBAR_ANT)  And 
          IsAssigned(Dados_Item)  And 
          IsAssigned(Dados_QTD)   And 
          CODIGO_BARRA=Dados_Item And 
          Dados_Item=CODBAR_ANT   And 
          SYS_CODIGO_CLIENTE<>"0239"
          Then REG_ITEMOF["Item da OF"]=[Item da OF]
               REG_ITEMOF["Quantidade"]=Dados_QTD
               CopyFromArray REG_ITEMOF
       
               Echo Off 
               Return True
       EndIf
       
       Moveto [Codigo do Item]
       Ativa_Lookup()
       Moveto [Codigo de Barras]
       Locate Dados_Item
       If RetVal
          Then Moveto [Codigo do Item]
          Else If Codigo_Barras2(Dados_Item,"")
                  Then PEGA_DADOS_CODITEM = CODIGO_BARRA2
                  Else PEGA_DADOS_CODITEM = Dados_Item
               EndIf
               Moveto [Codigo do Item]
               Locate PEGA_DADOS_CODITEM
               Release Vars PEGA_DADOS_CODITEM
       EndIf
             
  Case Origem="Cor_Tecido" :                                                     
       Moveto [Codigo do Item]
       Ativa_Lookup()
       Moveto [Referencia]
       If SYS_CODIGO_CLIENTE="0388" Or 
          SYS_CODIGO_CLIENTE="0427" Or
          SYS_CODIGO_CLIENTE="0390" Or
          SYS_CODIGO_CLIENTE="0345" Or 
          SYS_CODIGO_CLIENTE="0396" Or
          SYS_CODIGO_CLIENTE="0408" Or
          SYS_CODIGO_CLIENTE="0419" Or
          SYS_CODIGO_CLIENTE="0429" 
          Then TIPO_ITEM = "T"
          Else TIPO_ITEM = "P"
       EndIf   
       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
       
       ;---- 2¦ Tentativa ao localizar o item pelo tipo do item ----------------
       If Not RetVal And (SYS_CODIGO_CLIENTE="0388" Or SYS_CODIGO_CLIENTE="0427" Or SYS_CODIGO_CLIENTE="0419" Or SYS_CODIGO_CLIENTE="0429")  
          Then TIPO_ITEM = "P"
               Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido

               ;---- 3¦ Tentativa: Materia Prima -------------------------------
               If Not RetVal And (SYS_CODIGO_CLIENTE="0388")  
                  Then TIPO_ITEM = "M"
                       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
               EndIf
               
               ;---- 4¦ Tentativa: Aplica‡Æo Direta ----------------------------
               If Not RetVal And (SYS_CODIGO_CLIENTE="0427")  
                  Then TIPO_ITEM = "D"
                       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
               EndIf
       EndIf
       
       ;---- Verifica Codigo do Item de acordo com o Tamanho -------------------
       If RetVal                             And 
          PARAM_TAMANHO="S"                  And 
          SYS_CODIGO_CLIENTE="0391"          And 
          IsAssigned(VSD_I_Tamanho_Variacao) And 
          Not IsBlank(VSD_I_Tamanho_Variacao)
          Then Retval=False 
               While VSD_I_REFERENCIA         = [Referencia          ] And 
                      TIPO_ITEM               = [Tipo do Item        ] And
                      VSD_I_Codigo_Cor_Tecido = [Codigo da Cor_Tecido]
                 If [DTamanho]=VSD_I_Tamanho_Variacao
                    Then Retval = True
                         QuitLoop
                 EndIf 
                 Skip
                 If Eot() Then QuitLoop EndIf
               EndWhile 
       EndIf
  OtherWise:
       Moveto [Codigo do Item]
       Ativa_Lookup()
       ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
      
EndSwitch
If RetVal
   Then CopyToArray regItens           
        KeyPress "ESC"

        While True
         VSD_I_Codigo_Item=regItens["Codigo do Item"]
        
         ;---- C¢digo de Barras ------------------------------------------------
         If Origem = "Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOM
                 If RetVal
                    Then If REG_ITEMCOM["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                 QuitLoop
                         EndIf        
                    Else Mensagem("Item n„o Cadastrado !")
                         QuitLoop
                 EndIf
                  
                 If PARAM_DUPLICIDADE_ITEM And Not IsBlank(VSD_I_Codigo_Item)
                    Then NITEMOF=[Item da OF]
                         Del
                         Moveto [Codigo do Item]
                         Locate VSD_I_Codigo_Item
                         If RetVal
                            Then End Down
                                 Mensagem("O Item ["+VSD_I_Codigo_Item+"], j  est  lan‡ado nesta OF !")
                                 QuitLoop
                         EndIf
                         End Down
                         Moveto [Item da OF]
                         [Item da OF]=NITEMOF
                 EndIf
                 
                 ITOK=True
                 [Quantidade]=Dados_QTD             
                 CODIGO_BARRA=Dados_Item      
         EndIf

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

         CAMPO_ANT = Field()
         ITEM_OF   = [Item da OF]
         
         If Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then Pega_Preco("Cod_Barras")
            Else Pega_Preco("Novo")
         EndIf
         
         Moveto [Item da OF]
         Locate ITEM_OF
         Moveto Field CAMPO_ANT
         Release Vars CAMPO_ANT,ITEM_OF
         
         If Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then If [Preco Unitario]<=0
                   Then Mensagem("Item sem tabela de pre‡o !")
                        QuitLoop
                 EndIf
         EndIf               

         Ajusta_Dados_Item() 

         Item_Ok=True

         If (Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog") And Isassigned(Dados_Item)
            Then CODBAR_ANT=Dados_Item
                 CopyToArray REG_ITEMOF
         EndIf

         QuitLoop
       EndWhile
       
  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 sFCI, sSIMBOLOGIA, regdestinat, pessoa_regimetributario, pessoacontribuinte

;--- tratando ICMS -------------------------------------------------------------
switch
 case [Tipo do Item]="C": ; Servi‡o

   [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        

   If SYS_CODIGO_CLIENTE="0121" or 
      SYS_CODIGO_CLIENTE="0034" or    
      SYS_CODIGO_CLIENTE="0092"    
      Then [ISSQN_Municipio]=3122306
           [ISSQN_UF       ]="MG"
         ;;Switch
         ;;  Case Substr([FaturaC->CFO],1,1)="5" : [CFO]="5949"
         ;;  Case Substr([FaturaC->CFO],1,1)="6" : [CFO]="6949"
         ;;EndSwitch  
   EndIf
   
 otherwise:
   [Tributacao de ISSQN     ]="N"
   [Aliquota de ISSQN       ]=BlankNum()
   
   ;-- Remessa p/ Industrializa‡Æo ------------------------------- 
   If SYS_CODIGO_CLIENTE="0227" And [CFO]="5901" And Search("INDUST",[FaturaC->Descricao da Destinacao])>0
      Then [Tipo Tributacao        ]=substr([Tipo Tributacao],1,1)+"50"
           [Tributacao de Icms     ]=TRIB_ICMS
           [Tributacao de IPI      ]="N"
           [IPI_CST                ]="99"
           [Aliquota de IPI        ]=BlankNum()
           [PIS_CST                ]="99"
           [PIS_ALIQUOTA           ]=BlankNum()
           [COFINS_CST             ]="99"
           [COFINS_ALIQUOTA        ]=BlankNum()
    EndIf   

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

   Switch
     Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):

       getrecord "\\sistemas\\cadastro\\destinat" [FaturaC->Codigo] to regdestinat
       if retval
          then pessoa_regimetributario=regdestinat["Regime_Tributario"]
          else pessoa_regimetributario=""
       endif
       pessoacontribuinte=true 
       switch
         case [FaturaC->Tipo Pessoa]="FISICA"             : pessoacontribuinte=false
         case [FaturaC->IE         ]="ISENTO"             : pessoacontribuinte=false
         case [FaturaC->IE         ]="NAOCONTRIBUINTE"    : pessoacontribuinte=false
         case Search("SIMPLES",pessoa_regimetributario)>0 : pessoacontribuinte=false
       endswitch

       Switch
         Case [FaturaC->Tipo Movimento Estoque]="S": ; Saida    
       
           if Search("DEVOL",[FaturaC->Descricao da Destinacao])>0  
              then [CSOSN]="900"
           endif

           if Search("MOSTR",[FaturaC->Descricao da Destinacao])>0  Or
              Search("BRIND",[FaturaC->Descricao da Destinacao])>0  Or
              Search("BONIF",[FaturaC->Descricao da Destinacao])>0 
              then [CSOSN]="400"
           endif   

           if Search("VEND",[FaturaC->Descricao da Destinacao])>0 and
              not pessoacontribuinte
              then
                   Switch
                     Case [CSOSN]="101": [CSOSN]="102" 
                     Case [CSOSN]="201": [CSOSN]="202" 
                   EndSwitch
           endif        

         Case [FaturaC->Tipo Movimento Estoque]="E": ; Entrada    
       
           [CSOSN]="400"

       EndSwitch

       Switch
         Case [CSOSN]="101" Or [CSOSN]="900":
              [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
              [MVA                 ]=BlankNum()
              [ICMS_ST_Aliquota    ]=BlankNum()

         Case [CSOSN]="201":
              [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
               [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("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 -----

       Switch
         Case (TribCST="10" Or TribCST="30" Or TribCST="70"):

               switch
                 case [FaturaC->Tipo Pessoa]="FISICA":
                   [Tipo Tributacao   ]=SubStr([Tipo Tributacao],1,1)+"00"                
                   [Tributacao de Icms]="D"
                   [MVA               ]=BlankNum()
                   [ICMS_ST_Aliquota  ]=BlankNum()

                 case sys_Codigo_Cliente="0112" and [FaturaC->Tipo Pessoa]="JURIDICA" :
                 ;;     and ([FaturaC->IE]<>"ISENTO" And [FaturaC->IE]<>"NAOCONTRIBUINTE")
                   [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                   Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                   [Aliquota de ICMS]=18
                 
                 otherwise                     :
                   [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                   Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                 
               endswitch

         Case TribCST="60" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S":
              [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
              Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])    

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

       EndSwitch

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

   EndSwitch
 
endswitch

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

[CFO            ]=CFO_C
[Tipo Tributacao]=CFOP_TPTRIB
;-------------------------------------------------------------------------------

;--- tratando IPI/Entrada ------------------------------------------------------
if [FaturaC->Tipo Movimento Estoque]="E" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0
   then
        switch
          case [IPI_CST ]="50" : [IPI_CST ]="00"
          case [IPI_CST ]="51" : [IPI_CST ]="01"
          case [IPI_CST ]="52" : [IPI_CST ]="02"
          case [IPI_CST ]="53" : [IPI_CST ]="03"
          case [IPI_CST ]="54" : [IPI_CST ]="04"
          case [IPI_CST ]="55" : [IPI_CST ]="05"
        endswitch
endif

;--- tratando PIS/COFINS -------------------------------------------------------
If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
    Then 
         [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
         [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
Endif
   
if TPEMPR="DEBITO/CREDITO" 
   then
        if [FaturaC->Tipo Movimento Estoque]="E"
           then
                switch
                  case Search("DEVOL",[FaturaC->Descricao da Destinacao])>0:
                    switch
                      case [PIS_CST ]="01" : [PIS_CST ]="50"   [COFINS_CST ]="50"
                      case [PIS_CST ]="06" : [PIS_CST ]="73"   [COFINS_CST ]="73"
                      case [PIS_CST ]="07" : [PIS_CST ]="71"   [COFINS_CST ]="71"
                      case [PIS_CST ]="08" : [PIS_CST ]="74"   [COFINS_CST ]="74"
                      case [PIS_CST ]="09" : [PIS_CST ]="72"   [COFINS_CST ]="72"
                      case [PIS_CST ]="49" : [PIS_CST ]="98"   [COFINS_CST ]="98"
                    endswitch
                  
                  otherwise:
                   [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
                   [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
                    
                endswitch
        endif
Endif
        
;-------------------------------------------------------------------------------
If SYS_CODIGO_CLIENTE = "0388" or
   SYS_CODIGO_CLIENTE = "0427"  
  Then 
       if Search("VEND",[FaturaC->Descricao da Destinacao])>0  And  
          SubStr([CFO],1,1)="6"                                And 
          [FaturaC->Consumidor Final]="S"                      And
          ( [FaturaC->Tipo Pessoa]="FISICA"  or [FaturaC->IE]="NAOCONTRIBUINTE" ) 
          then if [Tipo do Item]="P" and [CFO]<>"6107" then [CFO]="6107" endif
               if [Tipo do Item]="T" and [CFO]<>"6108" then [CFO]="6108" endif
       endif
endif
         
;--- tratando zona franca manaus -- 21/10/2016 -------------------------------
if TPEMPR="DEBITO/CREDITO" and
   Motivo_Desoneracao_ICMS<>"" And Aliquota_ICMS_Desonerado>0 and
   not IsBlank([FaturaC->ISUFRAMA])
   Then 
        if ( search([CFO],"6109,6110,6120,6122,6123,6151,6152")>0 or 
             search([CFO],"6651,6652,6654,6655,6658,6659,6910")>0 )
             then

                  if sys_codigo_cliente="0388" Or   ; Manutex
                     sys_codigo_cliente="0427" Or   ; Primetex
                     sys_codigo_cliente="0274" Or   ; Podium
                     sys_codigo_cliente="0390"      ; Polar  
                     then if substr([Tipo Tributacao],1,1)="0" or
                             substr([Tipo Tributacao],1,1)="5"   
                             then 
                                  [Tipo Tributacao   ]=substr([Tipo Tributacao],1,1)+"40"
                                  [Tributacao de Icms]="I"
                                  [Aliquota de ICMS  ]=BlankNum()                                
                          endif
                  endif   
                 
                  if search(SubStr([Tipo Tributacao],2,2),"20,30,40,70,90")>0 
                     then
                          [PIS_CST        ]="06"  [PIS_ALIQUOTA   ]=0 
                          [COFINS_CST     ]="06"  [COFINS_ALIQUOTA]=0
                  endif         
        endif
EndIf

;---- Rotina aplicada em 27.03.2014 -----------------         
If ( TPEMPR="DEBITO/CREDITO" And [FaturaC->Tipo Movimento Estoque]="S" And
     Search("VEND",[FaturaC->Descricao da Destinacao])>0  And SubStr([CFO],1,1)="6" ) or             
   ( TPEMPR="DEBITO/CREDITO" And [FaturaC->Tipo Movimento Estoque]="E" And
     Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And SubStr([CFO],1,1)="2" )                
   Then 
        If SubStr([Tipo Tributacao],2,2) = "00" Or
           SubStr([Tipo Tributacao],2,2) = "10" Or
           SubStr([Tipo Tributacao],2,2) = "20" Or
           SubStr([Tipo Tributacao],2,2) = "70" Or
           SubStr([Tipo Tributacao],2,2) = "90" 
           Then If SubStr([Tipo Tributacao],1,1)="1" Or
                   SubStr([Tipo Tributacao],1,1)="2" Or
                   SubStr([Tipo Tributacao],1,1)="8" Or
                   SubStr([Tipo Tributacao],1,1)="3"
                   Then 
                        [Aliquota de ICMS] = 4
                        
                        if sys_codigo_cliente="0345" ; vitoria textil
                           then
                               If regItens["Codigo da Marca"]="100" ;;;xxxxxxxxx a definir
                                  Then [Aliquota de ICMS] = UF_ALIQUOTA_ICMS
                               EndIf
                        endif       
                EndIf
        EndIf         
EndIf 
                                   
;----  Aplicado p/ Empresa #0373# e #0352# em 09.09.2015 ------
If ( SYS_CODIGO_CLIENTE="0318" Or SYS_CODIGO_CLIENTE="0370" Or SYS_CODIGO_CLIENTE="0373" Or 
     SYS_CODIGO_CLIENTE="0352" Or SYS_CODIGO_CLIENTE="0376" Or SYS_CODIGO_CLIENTE="0374" )  
   And Search("VEND",[FaturaC->Descricao da Destinacao]) > 0 And [FaturaC->UF]="MG"
  Then
       If [Tributacao de Icms]="D" Or [Tributacao de Icms]="S" 
          Then If SubStr([Tipo Tributacao],1,1)<>"1" And
                  SubStr([Tipo Tributacao],1,1)<>"2" And
                  SubStr([Tipo Tributacao],1,1)<>"8" 
                  Then 
                       If [Tipo Tributacao]="300" Or (SYS_CODIGO_CLIENTE="0376" And [Tipo Tributacao]="500")
                          Then [Aliquota de ICMS] = 18
                          Else [Aliquota de ICMS] = regItens["Aliquota de ICMS"]
                       EndIf   
               EndIf
               
               If SubStr([Tipo Tributacao],1,1)="2" Or 
                  (SYS_CODIGO_CLIENTE="0352" And Search("VEND",[FaturaC->Descricao da Destinacao]) > 0 And [FaturaC->UF]="MG")
                  Then If regItens["Codigo da Marca"]="001" ;;;Pl sticos
                          Then [Aliquota de ICMS] = 18
                       EndIf
              EndIf
       EndIf    
EndIf 

If SYS_CODIGO_CLIENTE="0227" And ([CFO]="5912" Or [CFO]="6912") ;Remessa para Mostru rio
  Then 
       [Tributacao de IPI      ]="N"
       [IPI_CST                ]="99"
       [Aliquota de IPI        ]=BlankNum()
       [PIS_CST                ]="99"
       [PIS_ALIQUOTA           ]=BlankNum()
       [COFINS_CST             ]="99"
       [COFINS_ALIQUOTA        ]=BlankNum()
EndIf            
If SYS_CODIGO_CLIENTE="0227" And ([CFO]="1913" Or [CFO]="2913") ;Retorno de Mostru rio
  Then 
       [Tributacao de IPI      ]="N"
       [IPI_CST                ]="49"
       [Aliquota de IPI        ]=BlankNum()
       [PIS_CST                ]="99"
       [PIS_ALIQUOTA           ]=BlankNum()
       [COFINS_CST             ]="99"
       [COFINS_ALIQUOTA        ]=BlankNum()
EndIf            

If SYS_CODIGO_CLIENTE = "0274"  ; mostruario, demonstra‡Æo
  Then 
       If [CFO]="1913"
          Then [Tipo Tributacao           ]="090"
               [Tributacao de ICMS        ]="N"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [IPI_CST                   ]="03"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf

       If [CFO]="5912"
          Then [Tipo Tributacao           ]="050"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [IPI_CST                   ]="53"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
       
        If [CFO]="6912"
          Then [Tipo Tributacao           ]="041"
               [Tributacao de ICMS        ]="N"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [Aliquota de ICMS          ]=0
               [ICMS_BC                   ]=0
               [Valor do ICMS             ]=0
               [IPI_CST                   ]="53"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
       
       If [CFO]="6923" or [CFO]="5923"
          Then [Tipo Tributacao           ]="090"
               [Tributacao de ICMS        ]="O"
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
       
EndIf  

;-- Ajusta Descricao -----------------------------------------------------------
If SYS_CODIGO_CLIENTE = "0319"
  Then If len([Descricao do Item])<=30
          Then [Descricao do Item]=Completa([Descricao do Item],31," ")+regItens["Codigo Fornecedor"]
       EndIf
EndIf  

;-- Descricao Complementar ---------------------------------------------------
If SYS_CODIGO_CLIENTE = "0410" or
   SYS_CODIGO_CLIENTE = "0000"   
   then If regItens["Descricao Complementar"]<>""
           Then sDESCRCOMPL=regItens["Descricao Complementar"]
                If Not IsBlank([Informacoes_Adicionais])
                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sDESCRCOMPL   
                   Else [Informacoes_Adicionais] = sDESCRCOMPL
                EndIf   
        EndIf
endif   

;----- Ajustes Informa‡äes Adicionais em 05.12.2016 ------------------
GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item] To REG_ITEMCOMP
If RetVal
   Then 
        ;-- Informac‡äes Adicionais --------------------------------------------------
        If REG_ITEMCOMP["Informacoes_Adicionais"] <> ""
           Then if Not isblank([Informacoes_Adicionais])
                   then [Informacoes_Adicionais] = [Informacoes_Adicionais]  + "-" + REG_ITEMCOMP["Informacoes_Adicionais"]
                   Else [Informacoes_Adicionais] = REG_ITEMCOMP["Informacoes_Adicionais"]
                endif   
        EndIf
        
        ;-- FCI ----------------------------------------------------------------------
        If REG_ITEMCOMP["FCI"] <> ""
          Then sFCI="RESOLUCAO DO SENADO FEDERAL N. 13/12 FCI " + REG_ITEMCOMP["FCI"]
          
               If Search("RESOLUCAO DO SENADO",[Informacoes_Adicionais])=0
                  Then 
                       If Not IsBlank([Informacoes_Adicionais])
                          then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - "  + sFCI
                          Else [Informacoes_Adicionais] = sFCI 
                       EndIf    
               EndIf               
        EndIf
        
EndIf

;-- Simbologia ---------------------------------------------------------------
If SYS_CODIGO_CLIENTE="0236" Or SYS_CODIGO_CLIENTE="0260" Or SYS_CODIGO_CLIENTE="0298" Or
   SYS_CODIGO_CLIENTE="0051" Or SYS_CODIGO_CLIENTE="0228"  
   Then 
        If regItens["Descricao da Simbologia"] <> ""
           Then sSIMBOLOGIA="Simbol: "+regItens["Descricao da Simbologia"]    
                If regItens["Pais"]<>""
                   Then sSIMBOLOGIA = sSIMBOLOGIA + " - " + regItens["Pais"]
                EndIf
                If Not IsBlank([Informacoes_Adicionais])
                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sSIMBOLOGIA   
                   Else [Informacoes_Adicionais] = sSIMBOLOGIA
                EndIf   
        EndIf
EndIf

;-- Composi‡Æo + Simbologia_Impressao ------------------------------------------
If SYS_CODIGO_CLIENTE="0390"
   Then 
        GetRecord "\\Sistemas\\Estoque\\Iten_tec" [Codigo do Item] To regiten_tec 
        If RetVal
           Then 
                If regiten_tec["Composicao"] <> ""
                   Then If Not IsBlank([Informacoes_Adicionais])
                           Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + regiten_tec["Composicao"]
                           Else [Informacoes_Adicionais] = regiten_tec["Composicao"]
                        EndIf   
                EndIf
                If regiten_tec["Simbologia_Impressao"] <> ""
                   Then If Not IsBlank([Informacoes_Adicionais])
                           Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + regiten_tec["Simbologia_Impressao"]
                           Else [Informacoes_Adicionais] = regiten_tec["Simbologia_Impressao"]
                        EndIf   
                EndIf
        EndIf
EndIf

;-- Codigo de Barras ---------------------------------------------------------
If SYS_CODIGO_CLIENTE="0227" Or
   SYS_CODIGO_CLIENTE="0294"
   Then 
        If regItens["Codigo de Barras"]<>"" and regItens["Tipo Codigo_Barras"]<>"A-EAN13"
           Then sCDBARRA="EAN13 "+regItens["Codigo de Barras"]
                If Not IsBlank([Informacoes_Adicionais])
                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sCDBARRA          
                   Else [Informacoes_Adicionais] = sCDBARRA
                EndIf   
        EndIf
EndIf

Release Vars sFCI,sSIMBOLOGIA,regiten_tec,sCDBARRA,sDESCRCOMPL

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

if [FaturaC->UF]="EX" and substr([CFO],1,1)="7" and [Unidade Fiscal]="PC"
   then [Unidade Fiscal]="UN"
endif   

If SYS_CODIGO_CLIENTE="0418" and (PARAM_COMIS_ITEM="S" or PARAM_COMIS_ITEM="P")
   then [Comissao do Item]=[Faturac->Comissao do Representante]
endif   

endproc

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

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

Mouse Show
If INICIO_DIALOG
   Then If CHAVEI=0
           Then Switch                
                  Case PARAM_DADOS_ITEM_RESUMO="S"     : Campo="I_Quantidade"
                  Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                  Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                  OtherWise                            : Campo="I_Quantidade"
                EndSwitch
                
                TABANT=VSD_I_TABELA
           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

   If PARAM_DADOS_ITEM_RESUMO="S"
      Then If Evento["KeyCode"] = -33
              Then Echo Normal
                   Echo Off
                   ShowPopup " Fun‡”es " CENTERED
                   "[F4] Alterar ~D~escri‡„o      ": " Alterar Descri‡„o do Item          " :"F4",
                   "[F5] Alterar ~P~re‡o          ": " Alterar Pre‡o do Item              " :"F5", 
                   "[F7] Alterar Modo ~L~ocalizar ": " Alterar Modo de Localizar o Item   " :"F7",
                   Separator, 
                   "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
                  EndMenu
                  To MenuVar
                  Echo Off  
                  If MenuVar<>"CANCELAR" and MenuVar<>"Esc"
                     Then Evento["KeyCode"]=MenuVar
                  EndIf 
           EndIf
      Else If Evento["KeyCode"] = -33
              Then Echo Normal
                   Echo Off
                   ShowPopup " Fun‡”es " CENTERED
                   "[F3]    Alterar Desconto          ": " Alterar Desconto do Item            " :"F3",
                   "[F4]    Alterar ~D~escri‡„o       ": " Alterar Descri‡„o do Item           " :"F4",
                   "[F5]    Alterar ~P~re‡o           ": " Alterar Pre‡o do Item               " :"F5",
                   "[F6]    Alterar ~C~omiss„o        ": " Alterar Comiss„o do Item            " :"F6", 
                   "[F7]    Alterar Modo ~L~ocalizar  ": " Alterar Modo de Localizar o Item    " :"F7", 
                   "[F8]    ~I~nforma‡”es Adicionais  ": " Informa‡”es Adicionais do Item NFe  " :"F8",
                   "[F9]    Dados de ~I~mporta‡„o     ": " Dados de Importa‡„o                 " :"F9",
                   Separator,
                   "~C~ancelar                       ": " Cancelar a Opera‡„o                  " : "CANCELAR"
                  EndMenu
                  To MenuVar
                  Echo Off  
                  If MenuVar<>"CANCELAR" and MenuVar<>"Esc"
                     Then Evento["KeyCode"]=MenuVar
                  EndIf 
           EndIf
   EndIf 
    
   Switch
     Case Opcao_Ver=True:
          Temp=False   
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch               
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item da OF]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -61 Or Evento["KeyCode"] = "F3"):
           if PARAM_DADOS_ITEM_RESUMO<>"S"
              then DigitaDescto_Item()
           endif   
                
     Case (Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4") And Not F4_ATIVADO:
          F4_ATIVADO=True
          Campo_Ant=Campo
          Campo="I_Descricao_Item"
          
     Case (Evento["KeyCode"] = -63 Or Evento["KeyCode"] = "F5")  And Not F5_ATIVADO:
          If PARAM_ALTERA_PRECO<>"P"
             Then FastMsg("Fun‡„o n„o configurada para essa op‡„o")
             Else If PARAM_ALTERA_PRECO="P"
                     Then If Checa_Supervisor()
                             Then F5_ATIVADO=True
                                  Campo_Ant=Campo
                                  Campo="I_Preco_Unitario"
                          EndIf
                  EndIf                
          EndIf        
     Case (Evento["KeyCode"] = -64 Or Evento["KeyCode"] = "F6") And Not F6_ATIVADO:
          If PARAM_DADOS_ITEM_RESUMO="N"
             Then If PARAM_COMIS_ITEM<>"P"
                     Then FastMsg("Fun‡„o n„o configurada para essa op‡„o")
                     Else If Not IsBlank(VSD_I_Codigo_Item)
                             Then If PARAM_COMIS_ITEM="P"
                                     Then Libera_Bloqueio("")
                                          If Ok="S"
                                             Then F6_ATIVADO=True
                                                  Campo="I_Comissao_Item"     
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf
          EndIf
          
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","FATURA")
          
     Case (Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8"):    
          If PARAM_DADOS_ITEM_RESUMO="N"
             Then Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item NFe")
                  VSD_I_InfAdic=[Informacoes_Adicionais]
          EndIf
     Case Evento["KeyCode"] = -81 : ; PGDN
          If PARAM_DADOS_ITEM_RESUMO="N"
             Then If Campo="I_CSOSN"    Or
                     Campo="I_CST_Item" Or
                     Campo="I_Pedido_Compra" Or
                     (Campo="I_TISSQN" and VSD_I_Tipo_Item="C")
                     Then AcceptDialog
                  EndIf   
          EndIf                    
      Case (Evento["KeyCode"] = -67 Or Evento["KeyCode"] = "F9"):    
           If PARAM_DADOS_ITEM_RESUMO="N"
              Then If Not IsAssigned(VSD_I_CST_Item) Or VSD_I_CST_Item=""
                      Then Mensagem("Informe o CST do Item para habilitar essa fun‡„o!")
                      Else If SubStr(VSD_I_CST_Item,1,1)<>"1"
                              Then FastMsg("Op‡„o Inv lida para CST do Item !")
                              Else Valor_Importacao()   
                           EndIf        
                   EndIf
           EndIf  
     Case Evento["KeyCode"] = 3 and sys_Codigo_Cliente="0377"and VSD_I_UN_Item="KG" And 
          (Campo="I_Quantidade" Or Campo="I_Quantidade_Solicitada"): 
          Campo_Ant = Campo 
          Play "CalcPCKG"
          Campo=Campo_Ant
          Release Vars Campo_Ant
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             (Campo="I_Codigo_Cor_Tecido" And PARAM_DADOS_ITEM_RESUMO<>"S") Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"            
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

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

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

                  echo Normal
                  echo off
                  
                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item    = [Codigo do Item   ]
                          VSD_I_Descricao_Item = [Descricao do Item]
                          VSD_I_UN_Item        = [Unidade Fiscal   ]
                          VSD_I_Tipo_Item      = [Tipo do Item     ]
                          
                  EndIf 
                  If Campo="I_Codigo_Cor_Tecido"
                     Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                          VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                          Campo="I_Codigo_Cor_Tecido"
                 EndIf

                  If Campo="I_Tabela"
                     Then VSD_I_Tabela              =[Codigo da Tabela       ]
                          Release Vars FI_TABELAAnt,FC_TABELAAnt
                  EndIf
                  If Campo="I_CFOP"
                     Then VSD_I_CFOP            =[CFO             ]
                          Campo="I_CFOP"
                          Release Vars FI_CFOAnt,FC_CFOAnt
                  EndIf
                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[FaturaI->ISSQN_Municipio]
                           VSD_I_UFSERV =[FaturaI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf
                  If Campo="I_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf
                  
                  Moveto "FaturaI"
         EndIf
         If Campo="I_Codigo_Cor_Tecido" And PARAM_DADOS_ITEM_RESUMO="S" And LOCALIZA_CODIGO="LOC_CODREF" 
            Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                 Seleciona_Opcoes_Cor("Codigo da Cor_Tecido","")
                 Moveto [Codigo do Item]                   
         EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
            Case Campo="I_Codigo_Item"      :
                 CancelDialog
            Case Campo="I_Descricao_Item"    :
                 If F4_ATIVADO
                    Then Campo=Campo_Ant
                         F4_ATIVADO=False
                    else     
                         If CHAVEI=1
                            Then Campo="I_Codigo_Item"
                            Else CancelDialog
                         EndIf
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido" :
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else CancelDialog
                 EndIf
            Case Campo="I_Tamanho_Variacao":
                 Switch
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Tabela":
                 Switch
                   Case PARAM_TAMANHO="S"          : Campo="I_Tamanho_Variacao"
                   Case PARAM_COR_TECIDO="S"       : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Quantidade_Solicitada" : 
                 Switch
                   Case PARAM_DADOS_ITEM_RESUMO="S"     : If CHAVEI=1
                                                             Then Campo="I_Codigo_Cor_Tecido"
                                                             Else CancelDialog
                                                          EndIf                             
                   Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                   Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                   Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Quantidade" Or
                 (Campo="I_Tamanho_Variacao" And PARAM_UTILIZA_VARIACOES):
                 Switch
                   Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                   Case PARAM_DADOS_ITEM_RESUMO="S"     : If CHAVEI=1
                                                             Then Campo="I_Codigo_Cor_Tecido"
                                                             Else CancelDialog
                                                          EndIf                             
                   Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                   Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                   Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_UN_Item"                  Or
                 Campo="I_Tipo_Desconto_Item"       Or
                 Campo="I_Preco_Total"              Or
                 Campo="I_CSOSN"                    Or              
                 Campo="I_Pedido_Compra"          : 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_Item_Pedido_Compra"     : Campo="I_Pedido_Compra"


            Case Campo="I_CSOSN"              : Campo="I_Pedido_Compra"              

            Case Campo="I_Comissao_Item"    :
                 If F6_ATIVADO
                    Then Campo=Campo_Ant
                         F6_ATIVADO=False
                 EndIf
                 Campo="I_Pedido_Compra"
                 
            Case Campo="I_ACSOSN"       Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"

            Case Campo="I_CST_Item"          :                       
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_Pedido_Compra"
                 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_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_Peidido_Compra"
                    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"              : Campo="I_Pedido_Compra"

            Case Campo="I_NCM"      Or         
                 Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_CFOP"

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

            Case Campo="I_Vr_IPI_Devolvido"  : Campo="I_CFOP"
            Case Campo="I_Porc_IPI_Devolvido": Campo="I_Vr_IPI_Devolvido"
                   
            Case Campo="I_Numero_Volumes"    : Campo="I_CFOP"
            Case Campo="I_Peso_Liquido"      : Campo="I_Numero_Volumes"
            Case Campo="I_Peso_Embalagem"    : Campo="I_Peso_Liquido"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          
          Switch
            Case Campo="I_Codigo_Item" :  
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then FastMsg("Valor inv lido !")
                    Else If LOCALIZA_CODIGO = "LOC_CODBAR"
                            Then CODIGO_BARRA = VSD_I_Codigo_Item
                                 ORIGEM = "Codigo_Barras_ShowDialog"
                            Else ORIGEM = ""
                         EndIf
                         [Informacoes_Adicionais]=""
                         If Pega_Dados_Item(ORIGEM)
                            Then ITEM_DUPLICADO = False
                                 If PARAM_DUPLICIDADE_ITEM And Not PARAM_UTILIZA_VARIACOES
                                    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 
                                         switch
                                           case sys_Codigo_cliente="0431":
                                             Mensagem("O Item ["+VSD_I_Codigo_Item+"] j  existe nesta fatura !")
                                             ITEM_DUPLICADO=false
                                           
                                           otherwise :
                                             fastMSg("O Item ["+VSD_I_Codigo_Item+"] j  existe nesta fatura !")

                                         endswitch
                                 endif        
                                 If not ITEM_DUPLICADO
                                    Then 
                                         Registro_Item("Ler")
                                         
                                         Ver_Saldo=True
                                         checa_estoque()
                                         
                                         switch
                                            case PARAM_DADOS_ITEM_RESUMO="S"     : If SYS_CODIGO_CLIENTE="0418"
                                                                                      Then ;Cliente nÆo utiliza cor 
                                                                                           If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                                              Then Campo="I_Quantidade_Solicitada" 
                                                                                              Else Campo="I_Quantidade"
                                                                                           EndIf 
                                                                                      Else Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                                                                                           Campo="I_Codigo_Cor_Tecido"
                                                                                   EndIf        
                                            Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                                            Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                                            Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                                            OtherWise                            : If PARAM_UTILIZA_VARIACOES  
                                                                                      Then Campo="I_Tamanho_Variacao" 
                                                                                      Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                                              Then Campo="I_Quantidade_Solicitada" 
                                                                                              Else Campo="I_Quantidade"
                                                                                           EndIf 
                                                                                   EndIf
                                         endswitch                                                        
                                 endif   
                                 
                                 ;---- Particularidades #0377# ----------------------------------------------------------------
                                 If SYS_CODIGO_CLIENTE="0377" And Campo<>"I_Codigo_Item" And Not IsBlank(VSD_I_Codigo_Item) 
                                    Then If Search("DISCO",Upper(VSD_I_Descricao_Item))>0
                                            Then If PARAM_UTILIZA_TABPR_CLIENTE="S"
                                                    Then If IsAssigned(LOCALIZA_CODIGO) And LOCALIZA_CODIGO = "LOC_CODBAR"
                                                            Then TABPR=[FaturaC->Codigo da Tabela]
                                                            Else TABPR=[FaturaI->Codigo da Tabela]
                                                         EndIf
                                                         ;** Verifica se cliente possui tabela de pre‡o espec¡fica e se item est  com pre‡o  
                                                         GetRecord "\\Sistemas\\Vendas\\Tbprcli" TABPR,[FaturaC->Codigo] To REG_TBPRECO
                                                         If RetVal
                                                            Then GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, [FaturaC->Codigo], VSD_I_Codigo_Item To REG_TBPRECO
                                                                 If Not RetVal
                                                                    Then Mensagem("Item "+VSD_I_Codigo_Item+" "+Rtrim(VSD_I_Descricao_Item)+
                                                                                  " sem tabela de pre‡o por cliente ["+[FaturaC->Codigo]+"]!")
                                                                         VSD_I_Preco_Tabela=""
                                                                         Campo="I_Codigo_Item" 
                                                                 EndIf
                                                         EndIf        
                                                 EndIf    
                                         EndIf
                                 EndIf   
                         endif     
                 EndIf        
                 
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 
                 If F4_ATIVADO
                    Then Campo=Campo_Ant
                         F4_ATIVADO=False
                    else
                         Switch  
                           Case SYS_CODIGO_CLIENTE = "0251" or
                                SYS_CODIGO_CLIENTE = "0247" : 
                                Moveto [Codigo do Item]                                              
                                Ativa_Lookup()                   
                                Locate [Faturai->Codigo do Item] 
                                If [Codigo da Familia]="005"
                                    Then Play "Calc_Ma" 
                                EndIf   
                                KeyPress "ESC"
                                If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                   Then Campo="I_Quantidade_Solicitada" 
                                   Else Campo="I_Quantidade"
                                EndIf                              
                           Case PARAM_DADOS_ITEM_RESUMO="S"     : If PARAM_UTILIZA_VARIACOES
                                                                     Then Campo="I_Tamanho_Variacao" 
                                                                     Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                             Then Campo="I_Quantidade_Solicitada" 
                                                                             Else Campo="I_Quantidade"
                                                                          EndIf 
                                                                  EndIf                         
                           Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                           Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                           Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                           OtherWise                            : If PARAM_UTILIZA_VARIACOES
                                                                     Then Campo="I_Tamanho_Variacao" 
                                                                     Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                             Then Campo="I_Quantidade_Solicitada" 
                                                                             Else Campo="I_Quantidade"
                                                                          EndIf 
                                                                  EndIf
                         EndSwitch
                 endif
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 
                 switch
                   Case PARAM_DADOS_ITEM_RESUMO="S":
                     If IsBlank(VSD_I_Codigo_Cor_Tecido)
                        then FastMsg("Informe a Cor do Tecido!")        
                        Else PROCESSA_COR       = False
                             PROCESSA_CORTECIDO = False

                             switch
                               case len(VSD_I_Codigo_Cor_Tecido)>4:
                                 VSD_I_Sigla_Cor_Tecido = Rtrim(VSD_I_Codigo_Cor_Tecido)
                                 For i From 1 To DynArraySize(Opcoes)
                                   If VSD_I_Sigla_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                      Then VSD_I_Codigo_Cor_Tecido    = AlinhM(RTrim(SubStr(Opcoes[i],23,04)),4)
                                           VSD_I_Descricao_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                           PROCESSA_COR=True
                                           QuitLoop
                                   EndIf
                                 EndFor 
                                 If Not PROCESSA_COR
                                    Then FastMsg("Valor n„o Localizado!")
                                         VSD_I_Descricao_Cor_Tecido = ""
                                    Else PROCESSA_CORTECIDO = True     
                                 EndIf
                               
                               case Type(NumVal(Rtrim(VSD_I_Codigo_Cor_Tecido)))<>"N":
                                 VSD_I_Sigla_Cor_Tecido = Rtrim(VSD_I_Codigo_Cor_Tecido)
                                 For i From 1 To DynArraySize(Opcoes)
                                   If VSD_I_Sigla_Cor_Tecido = Ltrim(RTrim(SubStr(Opcoes[i],29,05)))
                                      Then VSD_I_Codigo_Cor_Tecido    = AlinhM(RTrim(SubStr(Opcoes[i],23,04)),4)
                                           VSD_I_Descricao_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                           PROCESSA_COR=True
                                           QuitLoop
                                   EndIf
                                 EndFor
                                 If Not PROCESSA_COR
                                    Then FastMsg("Sigla do Tecido n„o Localizada!")
                                         VSD_I_Descricao_Cor_Tecido = ""
                                    Else PROCESSA_CORTECIDO = True     
                                 EndIf
                               
                               otherwise:
                                 PROCESSA_COR       = True
                                 PROCESSA_CORTECIDO = True     
                             
                             endswitch

                             If PROCESSA_COR 
                                Then VSD_I_Codigo_Cor_Tecido = AlinhM(VSD_I_Codigo_Cor_Tecido,4)
                                     GetRecord "\\Sistemas\\Estoque\\Cores" VSD_I_Codigo_Cor_Tecido To REG_COR
                                     If not RetVal
                                         then FastMsg("A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!")
                                              VSD_I_Descricao_Cor_Tecido = ""
                                              PROCESSA_CORTECIDO=False
                                          
                                         else VSD_I_Codigo_Cor_Tecido   =REG_COR["Codigo da Cor_Tecido"]
                                              VSD_I_Descricao_Cor_Tecido=REG_COR["Descricao da Cor_Tecido"]                                         
                                     
                                              If Pega_Dados_Item("Cor_Tecido")
                                                 Then Registro_Item("Ler")
                                                      If PARAM_UTILIZA_VARIACOES
                                                         Then Campo="I_Tamanho_Variacao" 
                                                         Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                 Then Campo="I_Quantidade_Solicitada" 
                                                                 Else Campo="I_Quantidade"
                                                              EndIf 
                                                      EndIf    
                                                 Else VSD_I_Codigo_Cor_Tecido   =""
                                                      VSD_I_Descricao_Cor_Tecido=""
                                                      PROCESSA_CORTECIDO=False
                                              EndIf
                                     
                                      ;        Moveto [Codigo do Item]
                                      ;        Ativa_Lookup()
                                      ;        Moveto [Referencia]
                                      ;        If SYS_CODIGO_CLIENTE="0388" Or 
                                      ;           SYS_CODIGO_CLIENTE="0427" Or 
                                      ;           SYS_CODIGO_CLIENTE="0390" Or 
                                      ;           SYS_CODIGO_CLIENTE="0345" Or 
                                      ;           SYS_CODIGO_CLIENTE="0396" Or 
                                      ;           SYS_CODIGO_CLIENTE="0408" Or
                                      ;           SYS_CODIGO_CLIENTE="0419" Or
                                      ;           SYS_CODIGO_CLIENTE="0429" 
                                      ;           Then TIPO_ITEM = "T"
                                      ;           Else TIPO_ITEM = "P"
                                      ;        EndIf   
                                      ;        Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                      ;        ;---- 2¦ Tentativa ao localizar o item pelo tipo do item ----------------
                                      ;        
                                      ;        If Not RetVal And (SYS_CODIGO_CLIENTE="0388" Or SYS_CODIGO_CLIENTE="0427" Or 
                                      ;                           SYS_CODIGO_CLIENTE="0419" Or SYS_CODIGO_CLIENTE="0429")  
                                      ;           Then TIPO_ITEM = "P"
                                      ;                Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                                      ;        EndIf
                                      ;        
                                      ;        If RetVal
                                      ;           Then CopyToArray REG_ITEM
                                      ;                VSD_I_Codigo_Item    = REG_ITEM["Codigo do Item"]
                                      ;                VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                      ;                KeyPress "ESC"
                                      ;                
                                      ;                If Pega_Dados_Item("Cor_Tecido")
                                      ;                   Then Registro_Item("Ler")
                                      ;                        If PARAM_UTILIZA_VARIACOES
                                      ;                           Then Campo="I_Tamanho_Variacao" 
                                      ;                           Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                      ;                                   Then Campo="I_Quantidade_Solicitada" 
                                      ;                                   Else Campo="I_Quantidade"
                                      ;                                EndIf 
                                      ;                        EndIf    
                                      ;                   Else VSD_I_Codigo_Cor_Tecido   =""
                                      ;                        VSD_I_Descricao_Cor_Tecido=""
                                      ;                EndIf
                                      ;           Else KeyPress "ESC"
                                      ;                FastMsg("Item n„o foi localizado!")
                                      ;                VSD_I_Descricao_Cor_Tecido = ""                     
                                      ;        EndIf
                                      ;        
                                      ;    Else FastMsg("A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!")
                                      ;         VSD_I_Descricao_Cor_Tecido = ""
                                      ;         PROCESSA_CORTECIDO=False
                                      ;EndIf

                                      endif


                                      If PROCESSA_CORTECIDO
                                         Then 
                                              ITEM_DUPLICADO = False
                                              If PARAM_DUPLICIDADE_ITEM and 
                                                 not PARAM_UTILIZA_VARIACOES    
                                                 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
                                                        if not Retval then quitloop endif
                                                      endwhile
                                                      
                                                      MSG = "Item "+VSD_I_Codigo_Item+" referente a cor "+VSD_I_Codigo_Cor_Tecido+
                                                            " j  est  lan‡ado na sequˆncia "+StrVal([Item da OF])+"!"                                                
                                                      
                                                      Moveto [Item da OF]
                                                      Locate [FaturaC->Numero da OF],SEQIT
                                              EndIf

                                              If ITEM_DUPLICADO
                                                 Then 
                                                      switch
                                                        case sys_Codigo_cliente="0431":
                                                          Mensagem(MSG)
                                                          ITEM_DUPLICADO=false
                                                         
                                                        otherwise :
                                                          fastMSg(MSG)
                                                          VSD_I_Codigo_Cor_Tecido   =""
                                                          VSD_I_Descricao_Cor_Tecido=""
                                                          Campo="I_Codigo_Cor_Tecido"
              
                                                      endswitch
                                              endif        
                                              If Not ITEM_DUPLICADO
                                                 Then 
                                                      If PARAM_UTILIZA_VARIACOES
                                                         Then Campo="I_Tamanho_Variacao" 
                                                         Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                 Then Campo="I_Quantidade_Solicitada" 
                                                                 Else Campo="I_Quantidade"
                                                              EndIf 
                                                      EndIf
                                              EndIf
                                      EndIf         
                             EndIf
                                                           
                     EndIf
                     Echo Off    
                   otherwise:
                     If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                        Then VSD_I_Codigo_Cor_Tecido = AlinhM(VSD_I_Codigo_Cor_Tecido,4) 
                             GetRecord "\\Sistemas\\Estoque\\Cores" VSD_I_Codigo_Cor_Tecido To REG_COR
                             If not RetVal
                                 then 
                                      FastMsg("A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!")
                                      VSD_I_Descricao_Cor_Tecido = ""
                                 else 
                                      VSD_I_Codigo_Cor_Tecido   =REG_COR["Codigo da Cor_Tecido"]
                                      VSD_I_Descricao_Cor_Tecido=REG_COR["Descricao da Cor_Tecido"]
                             endif                                             
                        Else Campo="I_Descricao_Cor_Tecido"
                     EndIf
                     Echo Off
                 endswitch
                 
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 Switch
                   case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                   case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                   OtherWise                            : If PARAM_UTILIZA_VARIACOES
                                                             Then Campo="I_Tamanho_Variacao" 
                                                             Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                     Then Campo="I_Quantidade_Solicitada" 
                                                                     Else Campo="I_Quantidade"
                                                                  EndIf 
                                                          EndIf
                 EndSwitch

            Case Campo="I_Tamanho_Variacao":
                 VSD_I_Tamanho_Variacao=ControlValue("I_Tamanho_Variacao")

                 switch
                   case Not PARAM_UTILIZA_VARIACOES:
                     If PARAM_TABPR_ITEM="S"
                        Then Campo="I_Tabela"
                        Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                Then Campo="I_Quantidade_Solicitada" 
                                Else Campo="I_Quantidade"
                             EndIf 
                     EndIf
                     
                     If SYS_CODIGO_CLIENTE="0391" and Not IsBlank(VSD_I_Tamanho_Variacao)
                        Then 
                              Moveto [Codigo do Item]
                              Ativa_Lookup()
                              Moveto [Referencia]
                              TIPO_ITEM = "P"
                              Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                              If RetVal
                                 Then Processa_Item=False 
                                      While VSD_I_REFERENCIA         = [Referencia          ] And 
                                             TIPO_ITEM               = [Tipo do Item        ] And
                                             VSD_I_Codigo_Cor_Tecido = [Codigo da Cor_Tecido]
                     
                                        If [DTamanho]=VSD_I_Tamanho_Variacao
                                           Then Processa_Item = True
                                                QuitLoop
                                        EndIf 
                                        Skip
                                        If Eot() Then QuitLoop EndIf
                                      EndWhile
                                      If Processa_Item
                                         Then 
                                              CopyToArray REG_ITEM
                                              VSD_I_Codigo_Item    = REG_ITEM["Codigo do Item"]
                                              VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                              KeyPress "ESC"
                                              If Pega_Dados_Item("")
                                                 Then Registro_Item("Ler")

                                                      VSD_I_Tamanho_Variacao = REG_ITEM["DTamanho"]                                                         
                                                      If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                         Then Campo="I_Quantidade_Solicitada" 
                                                         Else Campo="I_Quantidade"
                                                      EndIf
                                              EndIf
                                         Else 
                                              KeyPress "ESC"
                                              FastMsg("Tamanho "+StrVal(VSD_I_Tamanho_Variacao)+" da referˆncia "+
                                                       VSD_I_REFERENCIA+" n„o foi localizado!")
                                      EndIf                                          
                                 Else 
                                      KeyPress "ESC"
                                      FastMsg("Item n„o foi localizado!")
                              EndIf
                     EndIf
                     Echo Off
                   
                   otherwise:
                     ITEM_DUPLICADO=False
                     If PARAM_DUPLICIDADE_ITEM And PARAM_UTILIZA_VARIACOES  
                        Then
                             MSG=""
                             Moveto [Codigo do Item]
                             Locate VSD_I_Codigo_Item
                             while retval
                               If [Item da OF]<>SEQIT 
                                  Then 
                                       AUX_VSD_I_Variacoes = ""
                                       If [Informacoes_Adicionais]<>""
                                          Then PosI=Search("V[",Upper([Informacoes_Adicionais]))
                                               If PosI>0 
                                                  Then 
                                                       PosF = Search("]",SubStr(Upper([Informacoes_Adicionais]),PosI+2,Len([Informacoes_Adicionais])))                             
                                                       AUX_VSD_I_Variacoes = SubStr([Informacoes_Adicionais],PosI+2,PosF-1)         
                                               EndIf
                                                                                                                  
                                               If Rtrim(AUX_VSD_I_Variacoes)=Rtrim(VSD_I_Tamanho_Variacao)
                                                  Then ITEM_DUPLICADO=True
                                                       QuitLoop
                                               EndIf                                                  
                                               Release Vars PosI,PosF
                                          Else 
                                               If VSD_I_Tamanho_Variacao = AUX_VSD_I_Variacoes
                                                  Then ITEM_DUPLICADO=True
                                                       QuitLoop
                                               EndIf
                                       EndIf
                               EndIf
                               skip
                               if eot() then quitloop endif
                               Locate Next VSD_I_Codigo_Item
                               if not Retval then quitloop endif
                             EndWhile
                             If ITEM_DUPLICADO
                                Then MSG = "Item "+VSD_I_Codigo_Item+" referente a cor "+VSD_I_Codigo_Cor_Tecido+" com a varia‡Æo "+
                                           Rtrim(Ltrim(VSD_I_Tamanho_Variacao))+" j  est  lan‡ado na sequˆncia "+StrVal([Item da OF])+"!"
                             EndIf                                                                            

                             Moveto [Item da OF]
                             Locate [FaturaC->Numero da OF],SEQIT
                     EndIf
                     
                     If ITEM_DUPLICADO
                        Then 
                             switch
                               case sys_Codigo_cliente="0431":
                                 Mensagem(MSG)
                                 ITEM_DUPLICADO=false
                                 
                               otherwise :
                                 Mensagem(MSG)

                             endswitch
                     endif        
                     If ITEM_DUPLICADO
                        Then Campo="I_Tamanho_Variacao"
                        Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                Then Campo="I_Quantidade_Solicitada" 
                                Else Campo="I_Quantidade"
                             EndIf 
                     EndIf

                 endswitch

            Case Campo="I_Tabela":
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then 
                         Moveto "FaturaC"
                         Moveto [Codigo da Tabela]
                         Ativa_Lookup()
                         Moveto [Codigo da Tabela]
                         Locate VSD_I_Tabela
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "FaturaI"
                                 [Codigo da Tabela]=VSD_I_Tabela
                                  If CHAVEI=1
                                     Then Pega_Preco("Novo")
                                     Else If VSD_I_TABELA<>TABANT
                                             Then Pega_Preco("Novo")
                                             Else Pega_Preco("Checa")
                                          EndIf
                                  EndIf
                                  TABANT=VSD_I_TABELA
                                  If PARAM_UTILIZA_VARIACOES
                                     Then Campo="I_Tamanho_Variacao" 
                                     Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                             Then Campo="I_Quantidade_Solicitada" 
                                             Else Campo="I_Quantidade"
                                          EndIf 
                                  EndIf
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 KeyPress "ESC"
                                 Moveto "FaturaI"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade_Solicitada" :
                 VSD_I_Quantidade_Solicitada=ControlValue("I_Quantidade_Solicitada")
                 If VSD_I_Quantidade_Solicitada>0 
                    Then If CHAVEI=1
                            Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOM
                                 If RetVal
                                    Then If REG_ITEMCOM["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_Solicitada
                                                 VERIFICA_SALDO_DISPONIVEL=True
                                                 If CHECA_ESTOQUE()  
                                                    Then [Quantidade]=SALDO_DISPONIVEL            
                                                    Else [Quantidade]=BlankNum()  
                                                 EndIf
                                                 VSD_I_Quantidade = [Quantidade] 
                                                 Release Vars VERIFICA_SALDO_DISPONIVEL
                                                 Campo="I_Quantidade"
                                         EndIf
                                    Else FastMsg("N„o foi localizado a tabela de complemento deste item!")
                                 EndIf
                            Else Campo="I_Quantidade"
                         EndIf
                    Else Campo="I_Quantidade"      
                 EndIf           
            Case Campo="I_Quantidade" :   
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                
                 okqtd=true
                 If ITEM_CONTROLA_ESTOQUE="SIM" And IsAssigned(FINALIDADE_DESTINACAO) And (FINALIDADE_DESTINACAO="1" or FINALIDADE_DESTINACAO="4")
                    then if VSD_I_Quantidade<=0
                            then okqtd=false
                         endif
                         
                         if not okqtd
                            then If PARAM_UTILIZA_QTD_SOLICITADA<>"S" 
                                    Then fastmsg("Quantidade inv lida !") 
                                 EndIf
                         endif
                 endif      
                 
                 If VSD_I_Quantidade=0
                    Then If PARAM_UTILIZA_QTD_SOLICITADA="S" 
                            Then If VSD_I_Quantidade_Solicitada>0
                                    Then VSD_I_Preco_Bruto            =blanknum()
                                         VSD_I_Tipo_Desconto_Item     =""
                                         VSD_I_Desconto_Descricao     ="" 
                                         VSD_I_Taxa_Desconto_Unitario =blanknum()
                                         VSD_I_Valor_Desconto_Unitario=blanknum()
                                         VSD_I_Valor_Desconto_Item    =blanknum()
                                         VSD_I_Preco_Total            =0
                                         AcceptDialog
                                 EndIf
                         EndIf 
                 EndIf       
                 
                 while okqtd
                   If QTD_FRACIONADA="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 !")
                           quitloop
                   endif

                   [Quantidade]=VSD_I_Quantidade
                   
                   Release Vars ver_saldo
                   
                   FAZ_PROCESSO=False
                   If Agrupa_Pedido("VALIDA")
                      Then If CHECA_ESTOQUE()                    Then FAZ_PROCESSO=True EndIf 
                      Else If CHECA_ESTOQUE() and CHECA_PEDIDO() Then FAZ_PROCESSO=True EndIf
                   EndIf   
                   
                   If FAZ_PROCESSO 
                      then
                           If PARAM_TRANSF_ULTCT="S"
                              Then If Search("TRANSF",[FaturaC->Descricao da Destinacao])>0 And
                                      (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T") And
                                      CHAVEI=1
                                      Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                   EndIf
                           EndIf
                           
                           If sys_Codigo_Cliente="0377"
                              Then If Search("INDUSTR",[FaturaC->Descricao da Destinacao])>0 And
                                      (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="S" Or VSD_I_Tipo_Item="T") And
                                      CHAVEI=1
                                      Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                   EndIf
                           EndIf
                           If sys_Codigo_Cliente="0294" and [FaturaC->Tipo Movimento Estoque]="S"
                              Then If Search("PERDA",[FaturaC->Descricao da Destinacao])>0 And
                                      (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="S" Or VSD_I_Tipo_Item="T") And
                                      CHAVEI=1
                                      Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                   EndIf
                           EndIf
        
                           CalcularPrecoTotal_Item()
        
                           Switch
                             Case EDITA_DESCRICAO_ITEM ="S" and
                                  VSD_I_Tipo_Item      ="D"       : Campo="I_UN_Item"
        
                             Case PARAM_ALTERA_PRECO="S"          : Campo="I_Preco_Unitario"
                             Case PARAM_ALTERA_PRECO="N" And
                                  Search("VEND",[FaturaC->Descricao da Destinacao])=0:  
                                                                  Campo="I_Preco_Unitario"   
                             Case PARAM_ALTERA_PRECO="N" And
                                  Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
                                  VSD_I_Preco_Unitario<=0         : Campo="I_Preco_Unitario"  
                                                                    Mensagem("Item sem tabela de pre‡o !")
                             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_DADOS_ITEM_RESUMO="S" : If PARAM_COMIS_ITEM="S" 
                                                                                  Then Campo="I_Comissao_Item"
                                                                                  Else AcceptDialog
                                                                               EndIf
                                                                               
                                            Otherwise                        : Campo="I_Pedido_Compra"                                      
                                          EndSwitch            
                                  EndIf
                           EndSwitch  
                   EndIf       
                   
                   quitloop
                 endwhile
                          
            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_DADOS_ITEM_RESUMO="S" : If PARAM_COMIS_ITEM="S" 
                                                                        Then Campo="I_Comissao_Item"
                                                                        Else AcceptDialog
                                                                     EndIf   
                                  Otherwise                        : Campo="I_Pedido_Compra"                                      
                                EndSwitch            
                        EndIf
                 EndSwitch
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 
                 CalcularPrecoTotal_Item()

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

                 If SYS_CODIGO_CLIENTE<>"0376" And
                    SYS_CODIGO_CLIENTE<>"0377"
                    Then If (PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P") And
                            Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                            PARAM_COMIS_MARCA="N"
                            Then If VSD_I_Preco_Tabela>0 And NumVal(VSD_I_Preco_Unitario)<NumVal(VSD_I_Preco_Tabela)
                                    Then CONTINUA=False
                                         Mensagem("Pre‡o unit rio n„o permitido, menor que pre‡o da Tabela !")
                                 EndIf
                         EndIf
                 EndIf
                 
                 If [FaturaC->Tipo Movimento Estoque]="S"               And 
                    FINALIDADE_DESTINACAO="1"                           And
                    Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
                    VSD_I_Preco_Unitario<=0                             And
                    VSD_I_Quantidade>0        
                    Then CONTINUA=False
                         Mensagem("Informe o pre‡o para prosseguir!")
                 EndIf
                    
                 If CONTINUA
                    Then 
                         If F5_ATIVADO=True
                            Then F5_ATIVADO=False
                                 Campo=Campo_Ant

                                 Grava_LogEx("Fatura AltPreco")
                            else     
                                 Switch                    
        													 Case PARAM_DADOS_ITEM_RESUMO="S" : 
                                        If ALTERA_PRECO_TOTAL="S"
                                           Then Campo="I_Preco_Total" 
                                           Else If PARAM_COMIS_ITEM="S" 
                                                   Then Campo="I_Comissao_Item"
                                                   Else AcceptDialog
                                                EndIf  
                                        EndIf
                                   Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                                   Otherwise                             : 
                                   If SYS_CODIGO_CLIENTE="0431"
                                      Then Switch
                                             Case PARAM_COMIS_ITEM="S"        : Campo="I_Comissao_Item"
                                             Case PARAM_IMPOSTOS="S"          :
                                                  If VSD_I_Tipo_Item="C"
                                                     Then Campo="I_TISSQN"
                                                     Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                             Then Campo="I_CSOSN"
                                                             Else Campo="I_CST_Item"
                                                          EndIf
                                                   EndIf   
                                             Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                                             OtherWise                : Valor_Importacao()
                                           EndSwitch
                                           ;Campo="I_Pedido_Compra"   
                                      Else Campo="I_Pedido_Compra"
                                    EndIf                                                                        
                                 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_DADOS_ITEM_RESUMO="S" : If PARAM_COMIS_ITEM="S" 
                                                                          Then Campo="I_Comissao_Item"
                                                                          Else AcceptDialog
                                                                       EndIf   
                                    Otherwise                        : 
                                    If SYS_CODIGO_CLIENTE="0431"
                                       Then Switch
                                              Case PARAM_COMIS_ITEM="S"        : Campo="I_Comissao_Item"
                                              Case PARAM_IMPOSTOS="S"          :
                                                   If VSD_I_Tipo_Item="C"
                                                      Then Campo="I_TISSQN"
                                                      Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                              Then Campo="I_CSOSN"
                                                              Else Campo="I_CST_Item"
                                                           EndIf
                                                    EndIf   
                                              Case PARAM_VOLUMES="S"   : Campo="I_Numero_Volumes"
                                              OtherWise                : Valor_Importacao()
                                            EndSwitch
                                            ;Campo="I_Pedido_Compra"   
                                       Else Campo="I_Pedido_Compra"
                                    EndIf                                                      
                                  EndSwitch            
                          EndIf
                  endif

            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 
                 CalcularPrecoTotal_Item()
                 Switch
                   Case PARAM_DADOS_ITEM_RESUMO="S" : If PARAM_COMIS_ITEM="S" 
                                                         Then Campo="I_Comissao_Item"
                                                         Else AcceptDialog
                                                      EndIf   
                   Otherwise                        : Campo="I_Pedido_Compra"                                      
                 EndSwitch

            Case Campo="I_Pedido_Compra"     Or
                 Campo="I_Item_Pedido_Compra":

                 I_Pedido_CompraOk=False
                 switch
                   Case Campo="I_Pedido_Compra"     :
                     VSD_I_Pedido_Compra = ControlValue("I_Pedido_Compra")
                     If Not IsBlank(VSD_I_Pedido_Compra)
                        Then Campo="I_Item_Pedido_Compra"
                        Else VSD_I_Item_Pedido_Compra = BlankNum()
                             I_Pedido_CompraOk=True
                     EndIf
                   
                   Case Campo="I_Item_Pedido_Compra":
                     VSD_I_Item_Pedido_Compra=ControlValue("I_Item_Pedido_Compra")
                     If Isblank(VSD_I_Item_Pedido_Compra)
                        Then fastmsg("Informe a sequˆncia do item do Pedido de Compra!")
                        else I_Pedido_CompraOk=True
                     EndIf                      
                   
                 endswitch

                 if I_Pedido_CompraOk
                    then Switch
                           Case PARAM_COMIS_ITEM="S"        : Campo="I_Comissao_Item"
                           Case PARAM_IMPOSTOS="S"          :
                                If VSD_I_Tipo_Item="C"
                                   Then Campo="I_TISSQN"
                                   Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                           Then Campo="I_CSOSN"
                                           Else Campo="I_CST_Item"
                                        EndIf
                                 EndIf   
                           Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                           OtherWise                : Valor_Importacao()
                         EndSwitch
                 endif
                 release vars I_Pedido_CompraOk                 
                 
                              
            Case Campo="I_Comissao_Item":        
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")
                 If F6_ATIVADO=True
                    Then F6_ATIVADO=False
                         Grava_LogEx("Fatura AltPreco")
                 EndIf
                 Switch
                   Case PARAM_DADOS_ITEM_RESUMO="S" : AcceptDialog
                   Case PARAM_IMPOSTOS="S"   :
                        If VSD_I_Tipo_Item="C"
                           Then Campo="I_TISSQN"
                           Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                   Then Campo="I_CSOSN"
                                   Else Campo="I_CST_Item"
                                EndIf
                         EndIf   
                    Case PARAM_VOLUMES="S"   : Campo="I_NUMERO_VOLUMES"
                    OtherWise                : Valor_Importacao()
                 EndSwitch
                             
            Case Campo="I_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 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
                                        
                                        ;---- Rotina aplicada em 27.03.2014 ---------         
                                       If (TPEMPR<>"SIMPLES NACIONAL" And TPEMPR<>"SIMPLES NAC. ESRB") And
                                          [FaturaC->Tipo Movimento Estoque] ="S"  And
                                           Search("VEND",[FaturaC->Descricao da Destinacao])>0  and
                                           SubStr([CFO],1,1)="6"
                                           Then If TribCST="00" Or TribCST="10" Or TribCST="20" Or
                                                   TribCST="70" Or TribCST="90"
                                                   Then If (SubStr(VSD_I_CST_Item,1,1)="1" Or
                                                            SubStr(VSD_I_CST_Item,1,1)="2" Or
                                                            SubStr(VSD_I_CST_Item,1,1)="3" )
                                                            Then VSD_I_AICMS = 4 
                                                        EndIf
                                                Endif
                                        EndIf
        
                                 EndIf

                           Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
                 
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case Search("DEVOL",[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_RBC_ST"
            Case Campo="I_RBC_ST":
                 VSD_I_RBC_ST=ControlValue("I_RBC_ST")
                 Campo="I_AST"
            Case Campo="I_AST":
                 VSD_I_AST=ControlValue("I_AST")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_IPI"
                    Else Campo="I_BC_ST"
                 EndIf             
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"               
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI",[FaturaC->Tipo Movimento Estoque],VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
                                 
                                 VSD_I_TIPI=Pega_TipoTributacao("IPI",VSD_I_CST_IPI) 

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

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

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

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

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

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

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

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

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

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If Len(VSD_I_NCM) <> 8
                    Then MENSAGEM("O NCM est  incorreto ! //Verifique ! ")
                 EndIf   
                 
                 If CALCULO_NF_AUTOMATICO="L"
                    then 
                         Campo="I_RAT_FRETE"
                    else
                         If [FaturaC->Tipo Movimento Estoque]="S"                and
                            search("DEVOL",[FaturaC->Descricao da Destinacao])>0 and
                            search("IND",TPEMPR)=0
                            then 
                                 Campo="I_Vr_IPI_Devolvido"
                            else
                                 VSD_Vr_IPI_Devolvido  =blankNum()
                                 VSD_Porc_IPI_Devolvido=blankNum()
                            
                                 If PARAM_VOLUMES="S"
                                    Then Campo="I_Numero_Volumes"
                                    Else Valor_Importacao()
                                 EndIf
                         EndIf
                 endif        
                 
                 
            Case Campo="I_RAT_FRETE":
                 VSD_I_RAT_FRETE=ControlValue("I_RAT_FRETE")
                 Campo="I_RAT_SEGURO"
            Case Campo="I_RAT_SEGURO": 
                 VSD_I_RAT_SEGURO=ControlValue("I_RAT_SEGURO")
                 Campo="I_RAT_DESCONTO" 
            Case Campo="I_RAT_DESCONTO":
                 VSD_I_RAT_DESCONTO=ControlValue("I_RAT_DESCONTO")
                 Campo="I_RAT_OUTDESP"
            Case Campo="I_RAT_OUTDESP": 
                 VSD_I_RAT_OUTDESP=ControlValue("I_RAT_OUTDESP")

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

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

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

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

Switch
  Case Campo="I_Seq"                    : MSGCAMPO="Sequencia"
  
  Case Campo="I_Codigo_Item"            : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"

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

  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"   : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tamanho_Variacao"       : If PARAM_UTILIZA_VARIACOES
                                             Then MSGCAMPO="Varia‡Æo do item" 
                                             Else MSGCAMPO="Tamanho"
                                          EndIf    
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"
  
  Case Campo="I_Quantidade"             : 
    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_Quantidade_Solicitada"  : MSGCAMPO="Quantidade Solicitada"
       Switch
         Case sys_Codigo_Cliente="0377" and
              VSD_I_UN_Item="KG"           : MSGCAMPO="Quantidade Solicitada, Ctrl+C = Calcular Pe‡as->Kg"
         Otherwise                         : MSGCAMPO="Quantidade Solicitada"
       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_Pedido_Compra"          : MSGCAMPO="Numero do Pedido de Compra"
  Case Campo="I_Item_Pedido_Compra"     : MSGCAMPO="Sequˆncia do Item do Pedido de Compra"
  Case Campo="I_Comissao_Item"          : MSGCAMPO="Comiss„o do Item"

  Case Campo="I_CSOSN"                  : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"

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

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

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

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

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

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

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

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

  Case Campo="I_NCM"                    : MSGCAMPO="NCM"
  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ este Item"

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

  Case Campo="I_Vr_IPI_Devolvido"       : MSGCAMPO="Valor do IPI Devolvido, deste Item"
  Case Campo="I_Porc_IPI_Devolvido"     : MSGCAMPO="Porcentagem do IPI Devolvido, deste Item"

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

  OtherWise                             : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  "
   
        If campo="I_CSOSN"         or
           campo="I_CST_Item"      Or
           campo="I_Pedido_Compra" Or
          (Campo="I_TISSQN" and VSD_I_Tipo_Item="C")
           then TECLA=TECLA+"PgDn=Finalizar  "
        endif           
    
EndIf

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp
EndProc   ;  (Item_Dialog)
                          
;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI_Resumo()

PARAM_DESCUNIT   = "N"
Liberou_Bloqueio = False
                       
F4_ATIVADO=False
F5_ATIVADO=False
F6_ATIVADO=False                            

MSGCAMPO=""

ModoLocalizarItem("","","")

Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F3","F4","F5","F6","F7","F8","F9",-33,-147,"ClearArea",
    "HOME","END","PGDN","PGUP",3,-61
     @ 00,00 height 06 width 80
     
   Accept @ -01,43 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 ">" For "I_Codigo_Item"
   Accept @ 01,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   
   @ 00,02 ?? LOCALIZAR_POR
   
   Label  @ 00,17 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,17 Width 33 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,50 "TI" For "I_Tipo_Item"
   Accept @ 01,51 Width 03 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   
   Label  @ 00,55 "UN" For "I_UN_Item"
   Accept @ 01,55 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item                               
   
   Label  @ 00,69 "Tabela" For "I_Tabela"
   Accept @ 01,70 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   
   Label  @ 02,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,00 Width 07 "A5" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 03,06 Width 16 "A10" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   
   Label  @ 02,22 "Varia‡oes" For "I_Tamanho_Variacao"
   Accept @ 03,23 Width 09 "A6" picture "!*!" Tag "I_Tamanho_Variacao" to VSD_I_Tamanho_Variacao
   
   Label  @ 02,32 "Quantidade" For "I_Quantidade"
   Accept @ 03,33 Width 12 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   
   Label  @ 02,45 "Pr.Unitario" For "I_Preco_Unitario"
	 Accept @ 03,46 Width 11 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,57 "Pr.Total" For "I_Preco_Total"
   Accept @ 03,58 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total
   Label  @ 02,69 "%Comis" For "I_Comissao_Item"
   Accept @ 03,70 Width 8 "N" picture "#*#.[###]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item
   
EndDialog
Mouse Show
If RetVal
   Then Registro_Item("Gravar")
   Else If CHAVEI=1
           Then Del
           Else CopyFromArray RegItem
                UnLockRecord
                If CHAVEI=8
                   Then Exclusao_I()
                EndIf
        EndIf
        CHAVEI=9
EndIf
EndProc  ;  (DigitaI_Resumo)

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

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

MSGCAMPO=""

titulo_estoque=""
saldo_estoque =""
MSGCAMPO     =""

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

ModoLocalizarItem("","","")

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

   Accept @ -01,33 Width 6  "A3"  Tag "I_Seq"        To VSD_I_SEQ
   Accept @ -01,39 Width 20 "A20" Tag "I_SeqTitShow" To VSD_IseqTitShow

   Label  @ 00,00 ">" For "I_Codigo_Item"
   Accept @ 01,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
          @ 00,03 ?? LOCALIZAR_POR
 
   Label  @ 00,17 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,17 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,58 "TI" For "I_Tipo_Item"
   Accept @ 01,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 00,62 "Referˆncia" For "I_Referencia"
   Accept @ 01,62 Width 16 "A13" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia

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

   @ 08,01 ?? titulo_estoque
   @ 09,01 ?? saldo_estoque
   PaintCanvas Attribute 124 08, 00, 09, 15


   Label  @ 04,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,00 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 05,06 Width 23 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   
   Label  @ 04,29 TIT_TM_VARIACO For "I_Tamanho_Variacao"
   Accept @ 05,30 Width 11 "A6" picture "!*!" Tag "I_Tamanho_Variacao" to VSD_I_Tamanho_Variacao
   
   Label  @ 04,42 "Tabela" For "I_Tabela"
   Accept @ 05,42 Width 09 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   
   Label  @ 04,67 "Qtd.Solic." For "I_Quantidade_Solicitada"
   Accept @ 05,67 Width 11 "N" picture "#*#.[###]" Tag "I_Quantidade_Solicitada" to VSD_I_Quantidade_Solicitada
 
   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,16 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 09,17 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 08,30 "PrUni/Tab" For "I_Taxa_PrUni_PrTab"
   Accept @ 09,30 Width 11 "A7" picture "!*!" Tag "I_Taxa_PrUni_PrTab" to VSD_I_Taxa_PrUni_PrTab

   Label  @ 08,42 "Pedido Compra" For "I_Pedido_Compra"
   Accept @ 09,42 Width 17 "A15" picture "!*!" Tag "I_Pedido_Compra" to VSD_I_Pedido_Compra
   Label  @ 08,58 "Item PC" For "I_Item_Pedido_Compra"
   Accept @ 09,59 Width 07 "S"               Tag "I_Item_Pedido_Compra" to VSD_I_Item_Pedido_Compra

   Label  @ 08,67 "%ComissÆo" For "I_Comissao_Item"
   Accept @ 09,67 Width 11 "N" picture "#*#.[###]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   Label  @ 10,16 "CtUnit rio" For "I_Custo_Unitario"
   Accept @ 11,17 Width 12 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   
   Label  @ 10,30 "Frete"    For "I_RAT_FRETE"
   Accept @ 11,30 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_FRETE" to VSD_I_RAT_FRETE
   Label  @ 10,42 "Seguro"   For "I_RAT_SEGURO"
   Accept @ 11,42 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_SEGURO" to VSD_I_RAT_SEGURO

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

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

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

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

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

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

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

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

   Label  @ 14,51 "VrIPIDevolvido"  For "I_Vr_IPI_Devolvido"
   Accept @ 15,52 width 15 "$" picture "#*#.[##]" Tag "I_Vr_IPI_Devolvido" to VSD_Vr_IPI_Devolvido
   Label  @ 14,67 "%IPIDevolv"  For "I_Porc_IPI_Devolvido"
   Accept @ 15,67 Width 11 "N" picture "#*#.[##]" Tag "I_Porc_IPI_Devolvido" to VSD_Porc_IPI_Devolvido

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

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

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

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

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

       [Descricao do Item         ]=VSD_I_Descricao_Item

       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
       
       If Not PARAM_UTILIZA_VARIACOES
          Then [Tamanho           ]=VSD_I_Tamanho_Variacao
       EndIf   
       
       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Tipo Desconto Item        ]=VSD_I_Tipo_Desconto_Item
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Valor Desconto Item       ]=VSD_I_Valor_Desconto_Item    
       [Preco Total               ]=VSD_I_Preco_Total

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

       [CFO                       ]=VSD_I_CFOP                
       [NCM                       ]=VSD_I_NCM                

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

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

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

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

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

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

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

       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Codigo da Tabela          ]=VSD_I_Tabela
       
       If PARAM_UTILIZA_QTD_SOLICITADA="S"
         Then [Quantidade Solicitada]=VSD_I_Quantidade_Solicitada
       EndIf  

       [Valor Frete Total         ]=VSD_I_RAT_FRETE               
       [Valor Seguro Total        ]=VSD_I_RAT_SEGURO              
       [Valor Desconto Total      ]=VSD_I_RAT_DESCONTO            
       [Valor OutDesp Total       ]=VSD_I_RAT_OUTDESP
       
       If PARAM_UTILIZA_VARIACOES
          Then If VSD_I_Tamanho_Variacao<>"" Then VSD_I_Tamanho_Variacao = "V["+VSD_I_Tamanho_Variacao+"]" EndIf                 
               If VSD_I_Tamanho_Variacao<>""
                  Then PosI=Search("V[",Upper([Informacoes_Adicionais]))
                       If PosI>0 
                          Then PosF= Search("]",SubStr(Upper([Informacoes_Adicionais]),PosI+2,Len([Informacoes_Adicionais]))) 
       
       INFADIC_A = Rtrim(Ltrim(SubStr([Informacoes_Adicionais],1,PosI-2)))
       INFADIC_B = Rtrim(Ltrim(SubStr([Informacoes_Adicionais],PosI+Len(VSD_I_Tamanho_Variacao),Len([Informacoes_Adicionais]))))
       Switch
         Case INFADIC_A<>"" And INFADIC_B<>"" : [Informacoes_Adicionais] = INFADIC_A+" "+VSD_I_Tamanho_Variacao+" "+INFADIC_B
         Case INFADIC_A=""  And INFADIC_B<>"" : [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao+" "+INFADIC_B
         Case INFADIC_B=""  And INFADIC_A<>"" : [Informacoes_Adicionais] = INFADIC_A+" "+VSD_I_Tamanho_Variacao
         Case INFADIC_B=""  And INFADIC_A=""  : [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao
       EndSwitch  
                          Else If [Informacoes_Adicionais]<>""
                                  Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " " + VSD_I_Tamanho_Variacao                                                   
                                  Else [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao
                               EndIf              
                       EndIf
                       Release Vars PosI,PosF,INFADIC_A,INFADIC_B
                  Else [Informacoes_Adicionais]=Rtrim(Ltrim(VSD_I_InfAdic)) 
               EndIf            
       EndIf
       
       [Referencia                ]=VSD_I_Referencia
       
       [IPI Devolvido_Porcentagem ]=VSD_Porc_IPI_Devolvido
       [IPI Devolvido_Valor       ]=VSD_Vr_IPI_Devolvido

       [Numero_Pedido_Compra      ]=VSD_I_Pedido_Compra
       [Item_Pedido_Compra        ]=VSD_I_Item_Pedido_Compra
       If CHAVEI=1
          Then OldI_Pedido_Compra=VSD_I_Pedido_Compra
       EndIf

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

       If CHAVEI=1
          Then VSD_I_Pedido      = ""
               VSD_I_Pedido_Item = BlankNum()
          Else VSD_I_Pedido      = [Numero Pedido_Orcamento     ]
               VSD_I_Pedido_Item = [Item Pedido_Orcamento       ]
       EndIf
       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_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_Tabela                 =[Codigo da Tabela          ]
       VSD_I_Quantidade_Solicitada  =[Quantidade Solicitada     ] 
       
       VSD_I_RAT_FRETE              = [Valor Frete Total        ]
       VSD_I_RAT_SEGURO             = [Valor Seguro Total       ]
       VSD_I_RAT_DESCONTO           = [Valor Desconto Total     ]
       VSD_I_RAT_OUTDESP            = [Valor OutDesp Total      ]
  
       If Not PARAM_UTILIZA_VARIACOES
          Then VSD_I_Tamanho_Variacao = [Tamanho]
       EndIf
  
       VSD_I_InfAdic                = [Informacoes_Adicionais   ]
       
       If PARAM_UTILIZA_VARIACOES
          Then VSD_I_Tamanho_Variacao=""
               If PARAM_UTILIZA_VARIACOES
                  Then VSD_I_Tamanho_Variacao=""
                       If VSD_I_InfAdic<>""
                          Then PosI=Search("V[",Upper(VSD_I_InfAdic))
                               If PosI>0
                                  Then PosF = Search("]",SubStr(Upper(VSD_I_InfAdic),PosI+2,Len(VSD_I_InfAdic)))
                                       VSD_I_Tamanho_Variacao = SubStr(VSD_I_InfAdic,PosI+2,PosF-1)
                               EndIf
                               Release Vars PosI,PosF 
                       EndIf
                       
                       If PARAM_DADOS_ITEM_RESUMO<>"S"
                          Then VSD_I_Tamanho_Variacao = VSD_I_Tamanho_Variacao 
                       EndIf   
               EndIf
          Else VSD_I_Tamanho_Variacao=""
       EndIf    
       
       VSD_I_Referencia             =[Referencia                ]
       
       VSD_Porc_IPI_Devolvido       =[IPI Devolvido_Porcentagem ]
       VSD_Vr_IPI_Devolvido         =[IPI Devolvido_Valor       ]

       VSD_I_Pedido_Compra          =[Numero_Pedido_Compra      ]
       VSD_I_Item_Pedido_Compra     =[Item_Pedido_Compra        ]
       If CHAVEI=1
          Then VSD_I_Pedido_Compra=OldI_Pedido_Compra
       EndIf
       

       GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP        
       If RetVal
          Then EDITA_DESCRICAO_ITEM=REG_ITEMCOMP["Edita Descricao do Item"]
               QTD_FRACIONADA      =REG_ITEMCOMP["Fracionado"             ]
          Else EDITA_DESCRICAO_ITEM="N"
               QTD_FRACIONADA      ="S"
       EndIf

       GetRecord "\\Sistemas\\Estoque\\TpItem"   VSD_I_Tipo_Item   To regtpitem           
       If RetVal
          Then ITEM_CONTROLA_ESTOQUE =regtpitem["Controla Estoque"]
          Else ITEM_CONTROLA_ESTOQUE=""
       EndIf
       
       ;---- ComissÆo cadastrada no item apenas quando item for de promo‡Æo diante a tabela de pre‡o, caso contr rio,
       ;     a coimssÆo ser  referente ao informado no representante desde que haja tabela de pre‡o incluida
       If CHAVEI=1 And SYS_CODIGO_CLIENTE = "0345" And Len(Rtrim(VSD_I_Codigo_Item))=10 And VSD_I_Codigo_Cor_Tecido<>"" 
          Then AUX_VSD_I_Comissao_Item = VSD_I_Comissao_Item
               VSD_I_Comissao_Item     = ""
               If Rtrim(VSD_I_Tabela)<>""     
                  Then AUX_CODITEM = PegaCodigoRaiz(VSD_I_Codigo_Item)
                       GetRecord "\\Sistemas\\Vendas\\Tbprite" VSD_I_Tabela,AUX_CODITEM To REG_TABPRECO
                       If Retval
                          Then Switch
                                 Case REG_TABPRECO["Em Promocao"]<>"S" : VSD_I_Comissao_Item = [FaturaC->Comissao do Representante]
                                 Case REG_TABPRECO["Em Promocao"]="S"  : VSD_I_Comissao_Item = AUX_VSD_I_Comissao_Item
                               EndSwitch
                       EndIf
               EndIf
               Release Vars AUX_VSD_I_Comissao_Item,AUX_CODITEM
       EndIf
       
       If IsAssigned(LOCALIZA_CODIGO)
          Then Switch
                 Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="C¢d item Fornecedor"
                 Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Referˆncia"
                 Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="C¢digo Barras"
                 otherwise:
                      LOCALIZA_CODIGO="LOC_CODITE"   LOCALIZAR_POR="C¢digo Item"
               EndSwitch
       EndIf
       
       ;-- titulo showdialog
       Switch
         Case Not IsBlank([FaturaC->Numero do Pedido])    and not isblank(VSD_I_Pedido): VSD_IseqTitShow="Pedido"
         Case Not IsBlank([FaturaC->Numero do Orcamento]) and not isblank(VSD_I_Pedido): VSD_IseqTitShow="Or‡amento"
         otherwise                                                                     : VSD_IseqTitShow=""
       EndSwitch
       if not isblank(VSD_IseqTitShow) then VSD_IseqTitShow=VSD_IseqTitShow+" "+VSD_I_Pedido+"/"+Strval(VSD_I_Pedido_Item) endif
               
EndSwitch
EndProc   ;  (Registro_Item)

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

INICIO_DIALOG=True
Moveto [Item da OF]
Locate [FaturaC->Numero da OF],SEQIT
CopyToArray RegItem
QUANT   =[Quantidade        ]
CTTOTAL =NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ] = [FaturaC->Codigo da Tabela     ]
EndIf
Registro_Item("Ler")

EndProc ; (Inicia_Registro)
 
;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
Private VRBCICMS_CREDSN 
               
Moveto "FaturaC"
If PARAM_AGRUPA_ITEM
   Then PARAM_FT_GRUP = "ITENS AGRUPADOS"
   Else PARAM_FT_GRUP = "ITENS"
endif
Play "FT_GRUP"

Moveto "FaturaC"
CHAVEF=0

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

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

Calc_Of()
If REEMITIR
   Then Return
EndIf

;*** Rotina p/ permitir instru‡Æo de descto apenas p/ certa gerˆncia ***
GERDUP_GERENCIA=True 
;*** Comentado pois eles nao estao utilizando mais este recurso 10.04.2015 ***
;*** Neste caso tera que usar a opcao "0" ***
;If SYS_CODIGO_CLIENTE="0051" Or SYS_CODIGO_CLIENTE="0228"
;   Then GetRecord "\\Sistemas\\Cadastro\\Represen" [FaturaC->Codigo do Representante] To GERDUP_GERENCIA
;        If RetVal
;           Then GERDUP_GERENCIA = GERDUP_GERENCIA["Descricao Gerencia"]
;                If Upper(GERDUP_GERENCIA)="INTERNO"
;                   Then GERDUP_GERENCIA=True
;                   Else GERDUP_GERENCIA=False
;                EndIf
;           Else GERDUP_GERENCIA=False
;        EndIf 
;EndIf

switch
  case [FaturaC->Valor Servico]>0 and [FaturaC->Valor Mercadoria]<=0 and Not IsBlank(PARAM_DOC_NSEN):
    [Frete por Conta]="0" 

endswitch 

SomaVenctos("FaturaC","FaturaV")

While True


    MSGCAMPO=Field()
    TECLA=" Esc=Retornar               Alt+F=Fun‡”es                 PgUp  PgDn"
    
    If Field()="Valor BCSubstituicao ICMS" Then MSGCAMPO="Valor Base Calculo da Substituicao ICMS"            EndIf
    If Field()="Tipo de Pagamento"         Then MSGCAMPO="Tipo de Pagamento=> V=A Vista  P=A Prazo  O=Outros" EndIf
    If Field()="Composicao de Dias"        Then MSGCAMPO=MSGCAMPO+", Exemplo: 0/30/60/ "                      EndIf


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

    Prompt TECLA

    Wait Field
           Until "ESC","ENTER","PGDN","F3","F8","DOWN","PGUP",-33,"F1","F4","F","D","F6","F9","F7",-61
           
    If RetVal=-33
       Then 
            MSGCAMPO=""
            TECLA=""
       
            Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F3  ~P~ontua‡Æo de Cliente ": " Consulta/Resgate de pontua‡Æo de clientes" :"F3",
             "F4  ~C~alcula Vencimentos  ": " Calcula os Vencimentos           " :"F4",
             "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",
             "F8  ~V~encimentos          ": " Vencimentos                      " :"F8",
             "F9  ~T~roco                ": " Valor para Troco                 " :"F9",
             Separator,
             "~C~ancelar                 ": " Cancelar a Opera‡„o              " : "CANCELAR"
            EndMenu
            
            To MenuVar
            Echo Off
            
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf                                         
            RetVal=MenuVar
    EndIf
    
    Switch               
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F3" Or RetVal=-61 :
           PARAM_PONTOS_ROTINA="CONSULTA"
           Play "FT_PONTO"           
      Case RetVal="F4":
           If IsBlank([Composicao de Dias])
              Then Mensagem("Informe a Composi‡„o de Dias para se calcular os Vencimentos!")
                   Loop
           EndIf      
           If IsBlank([Forma de Pagamento])
              Then Mensagem("Informe a Forma de Pagamento 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="F8" Or RetVal="DOWN":
           If UTILIZANDO_CP_FP_CLIENTE    
              Then Mensagem ("Edi‡„o de Vencimentos n„o dispon¡vel!//Verificar com o Supervisor!")
              Else ncampo=field()
                   If GERDUP_CDESCTO>"0" And GERDUP_GERENCIA
                      Then MSG="Fun‡Æo nÆo disponivel !// //"+
                               "Calculo autom tico, para condi‡Æo pagto com instru‡Æo de desconto !"
                           Mensagem(MSG)    
                           Moveto field ncampo
                           Loop
                   EndIf                    
                   Moveto "FaturaV"
                   While True
                     CHAVEV()
                     If CHAVEV=9
                        Then QuitLoop
                     EndIf
                     Controla_EdicaoV()
                   EndWhile
                   SetaCorRegistro("Padrao")
                   
                   Moveto "FaturaC"
                   Moveto field ncampo
           EndIf   
      Case RetVal="F9":
           DIGITA_TROCO()
                
      Case RetVal="F7":
           VrTCCredito_Digita()

      Case RetVal="F6":
           Play "FT_LTC"

      Case RetVal="PGUP":
           CHAVEF=9
           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 Not LiberaCondicaoeFormaPagamento()
              then Loop
           endif
           
           If SYS_CODIGO_CLIENTE<>"0112"
              Then 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"]="PESSIMO"
                                Then If ([Tipo de Pagamento ]="V" And [Forma de Pagamento]="DN")  Or
                                        ([Tipo de Pagamento ]="P" And ([Forma de Pagamento]="CT"  Or [Forma de Pagamento]="CD" Or [Forma de Pagamento]="CL"))
                                        Then 
                                        Else Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !// //Verificar se poss¡vel venda … vista !") 
                                             Loop
                                     EndIf        
                             EndIf
                    EndIf
           EndIf               

           If Search("VEND",[FaturaC->Descricao da Destinacao])>0
              Then If [Tipo de Pagamento]<>"O"
                      Then 
                           Moveto "FaturaV"
                           TOT_VECTOS=0
                           CHAVEV=0
                           Scan
                             If [Data]<[FaturaC->Data de Emissao]
                                Then CHAVEV=1
                                     MSG="Vencimento invalido !// //"
                                     MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                                     MSG=MSG+" inferior a data de emiss„o !"
                                     Mensagem(MSG)
                             EndIf
                             
                             if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
                                (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" )) Or 
                                [Forma de Pagamento]="RP" 
                                then 
                                    ; nÆo checa 
                                else     
                                     If (GERDUP_CDESCTO>"0" And GERDUP_TXDESCTO>0 And [Duplicata_VrDesconto]<=0 And GERDUP_GERENCIA) Or
                                        (GERDUP_CDESCTO="0" And                       [Duplicata_VrDesconto]>0  And GERDUP_GERENCIA) 
                                        Then CHAVEV=1
                                             MSG="Valor de desconto na duplicata incorreto para cond. pagamento !// //"
                                             MSG=MSG+"Verifique os vencimentos, e recalcule novamente para corrigir !"
                                             Mensagem(MSG)
                                             QuitLoop
                                     EndIf
                             endif
                             TOT_VECTOS=TOT_VECTOS+[Valor]
                           EndScan
                           
                           Moveto "FaturaC"
                           If CHAVEV=1
                              Then Loop
                           EndIf

                           msg=""
                           Switch
                             case PARAM_TITCRED="T":
                                if StrVal(TOT_VECTOS-[Valor TC])<>StrVal([Valor Nota Fiscal])
                                   then msg="O valor total dos vencimentos menos t¡tulo de cr‚dito,// difere do valor da nota fiscal !" 
                                endif   
                             
                             otherwise                                : 
                               If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                                  Then msg="O valor total dos vencimentos difere do valor da nota fiscal !"
                               EndIf
                               
                           endSwitch
                           if msg<>""
                              then mensagem(msg)
                           endif   
                   Endif

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

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

           QuitLoop
      Case RetVal="F":
           If CALCULO_NF_AUTOMATICO="L"
              then Mensagem("Calculo nÆo ‚ autom tico, informe o frete em cada item !")
                   loop
              
              else Campo_Ant=Field()
                   DIGITA_FRETE()
                   Calc_Of()
                   Moveto Field Campo_Ant
           endif
      Case RetVal="D":
           If Not Field()="Forma de Pagamento"
              Then
                   If CALCULO_NF_AUTOMATICO="L"
                      then Mensagem("Calculo nÆo ‚ autom tico, informe o desconto em cada item !")
                           loop
                   endif
               
                   If GERDUP_CDESCTO>"0" And GERDUP_GERENCIA
                      Then MSG="Fun‡Æo nÆo disponivel !// //"+
                               "Calculo autom tico, para condi‡Æo pagto com instru‡Æo de desconto !"
                           Mensagem(MSG)    
                           Loop
                   EndIf                    
                   
                   Campo_Ant=Field()
                   DIGITA_DESCTO()
                   Calc_Of()
                   Moveto Field Campo_Ant
              Else KeyPress "D"
           EndIf
      Case RetVal="ESC":
        Switch
           Case Field()="Valor Despesas Acessorias":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]

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

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

           Case Field()="Forma de Pagamento":
                Moveto [Tipo de Pagamento]

           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor Despesas Acessorias": Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro"          : Moveto [Tipo de Pagamento ]
                EndSwitch
                Calc_Of()
           Case Field()="Valor Nota Fiscal"               : Moveto [Tipo de Pagamento ]
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then [Numero de Parcelas] = BlankNum()
                        [Composicao de Dias] = ""
                        [Forma de Pagamento] = "OU"
                        Moveto [Forma de Pagamento]
                   Else Moveto [Numero de Parcelas]               
                EndIf   
           Case Field()="Numero de Parcelas":
                If SYS_CODIGO_CLIENTE="0272" 
                   Then If [Numero de Parcelas]>10 And [Forma de Pagamento]="CR"
                           Then Mensagem("M ximo de 10 parcelas permitido para esta forma de pagamento!")
                           Else Moveto [Composicao de Dias]
                        EndIf
                   Else Moveto [Composicao de Dias]     
                EndIf
           Case Field()="Forma de Pagamento": 
                If IsBlank([]) Then Loop EndIf      
                
                If SYS_CODIGO_CLIENTE<>"0112"
                   Then 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"]="PESSIMO"
                                   Then If ([Tipo de Pagamento ]="V" And [Forma de Pagamento]="DN") Or
                                           ([Tipo de Pagamento ]="P" And ([Forma de Pagamento]="CT" Or [Forma de Pagamento]="CD" Or [Forma de Pagamento]="CL"))
                                           Then 
                                           Else Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !// //Verificar se poss¡vel venda … vista !") 
                                                Loop
                                        EndIf         
                               EndIf
                       EndIf                          
                EndIf                       

                If SYS_CODIGO_CLIENTE="0272" 
                   Then If [Numero de Parcelas]>10 And [Forma de Pagamento]="CR"
                           Then Mensagem("M ximo de 10 parcelas permitido para esta forma de pagamento!")
                           Else Moveto [Tipo de Pagamento]
                        EndIf
                EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc    ;  (DigitaF)


;*******************************************************************************
;* 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 EXCLUIR_VENCTO=False
                               If [Forma de Pagamento]="RP" And [Observacao]<>""
                                  Then LANCTO_RESGATE = [Observacao]
                                       PARAM_PONTOS_ROTINA="EXCLUI_RESGATE_PONTOS"
                                       Play "FT_PONTO"
                                  Else If QuerExcluir("")
                                          Then EXCLUIR_VENCTO=True
                                       EndIf   
                               EndIf
                               If EXCLUIR_VENCTO
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                               Release Vars EXCLUIR_VENCTO,LANCTO_RESGATE,PARAM_PONTOS_ROTINA
                          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-" )) Or
                  [Forma de Pagamento]="RP" 
                  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
                     UnLockRecord
                     Locate SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ;  (ChaveV)

;*******************************************************************************
;* 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" Or [Forma de Pagamento]="RP") 
           then Mensagem("Edi‡Æo para '"+[Forma de Pagamento]+"' 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") Or []="RP"
               then Switch
                      Case []="TC" : Mensagem("Forma Pagamento nÆo permitida aqui, use a fun‡Æo [F6]=TC !")
                                     []=fpold
                                     Loop
                      Case []="RP" : Mensagem("Forma Pagamento nÆo permitida nessa rotina!")
                                     []=fpold
                                     Loop
                    EndSwitch  
                    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   ;  (DigitaV)

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

If REEMITIR
   Then If Not IsAssigned(ALTERA_DTEMISSAO)
           Then CONFIMPRIME()
        EndIf
        Release Vars ALTERA_DTEMISSAO
        Return
EndIf

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

if sys_Codigo_Cliente="0388"
   then TirarMensagemObs("[*CC ", " *]")
   
        MSG_AUTOMATICA=MSG_AUTOMATICA+"[*CC "+[FaturaC->Codigo]+" - "+[FaturaC->Razao Social]
   
        if [FaturaC->Tipo de Pagamento]="V"
           then MSG_AUTOMATICA=MSG_AUTOMATICA+", CONDICAO DE PAGAMENTO A VISTA R$ "+LTrim(Format("W12.2,EIC",[FaturaC->Valor Nota Fiscal]))
        endif    
        MSG_AUTOMATICA=MSG_AUTOMATICA+" *] "
        
        [Observacao na Nota Fiscal]=MSG_AUTOMATICA+[Observacao na Nota Fiscal]
        MSG_AUTOMATICA=""
endif   
          
While True

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

      MSGCAMPO = Field()
      pos_p=SearchFrom("Transp",Field(),1)
      If pos_p>0 And Field()<>"Codigo da Transportadora"
         Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
      EndIf
      If Field()="RNTC Veiculo"
         Then MSGCAMPO="Registro Nacional de Transportador de Carga (ANTT)"
      EndIf         

      If Field()="Codigo da Transportadora" Or
         Field()="Codigo do Veiculo"        Or
         Field()="Cidade Transport"         Or
         Field()="UF Transport"             Or
         Field()="Frete por Conta"    
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      Prompt TECLA

      Wait Field
           Until "F1","ESC","ENTER","PGDN","PGUP","F8","F4",-33

      If RetVal=-33 
         Then 
         
              MSGCAMPO=""
              TECLA=""
         
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F4] ~C~alcular Volumes   " : " Calcular Volumes                " : "F4",
                "[F8] ~O~bserva‡äes        " : " Observa‡äes                     " : "F8",
                Separator,
                "~S~air"                     : " Ignorar op‡äes"                   :"Cancela"
              EndMenu
              To MenuVar
              echo off
              If MenuVar="Cancela" or MenuVar="Esc"
                 Then Loop
              EndIf
    
              RetVal=MenuVar
      EndIf

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

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

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

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

;---- 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 CHAVEI<>8
            Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
                    Then Moveto "FaturaI"
                         Return False
                    Else Loop
                 EndIf
            Else Moveto "FaturaI"
                 Return False
         EndIf
 EndIf
 While IsLockRecord() EndWhile
 QuitLoop
EndWhile

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

;-- Opera‡Æo s¢ para Compra ----------------------------------------------------
If ( sys_codigo_Cliente="0377" or sys_codigo_Cliente="0395" ) and
   [FaturaC->Tipo Movimento Estoque]="E" And
   Search("COMPRA",[FaturaC->Descricao da Destinacao])>0 and
   Search("SUCATA",[FaturaC->Descricao da Destinacao])>0
   then CUSTO=[FaturaI->Preco Unitario]
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
SaveTables

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

;*******************************************************************************
;* Rotina p/ Checagem de Estoque Negativo                                     **
;*******************************************************************************
Proc Checa_Estoque()
Private ItemRef, ItemCodFor, regitens
    
ULTIMO_CTENTRADA=0
SALDO_DISPONIVEL=0

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

If Not IsAssigned(PARAM_CHECA_ESTOQUE_SEMMENSSAGEM) Then PARAM_CHECA_ESTOQUE_SEMMENSSAGEM = True EndIf
If Not IsAssigned(VERIFICA_SALDO_DISPONIVEL)        Then VERIFICA_SALDO_DISPONIVEL=False         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
  QuitLoop
EndWhile

SALDOATUAL=[Saldo Atual]
If IsBlank(SALDOATUAL)
   Then SALDOATUAL=0
EndIf

NOVOSALDO=-1
Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)

  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANT)-[FaturaI->Quantidade]),3)

EndSwitch

If VERIFICA_SALDO_DISPONIVEL
   Then If NOVOSALDO>=0
           Then If [Saldo Atual]>[FaturaI->Quantidade]
                   Then SALDO_DISPONIVEL=[FaturaI->Quantidade]
                   Else SALDO_DISPONIVEL=[Saldo Atual]
                EndIF 
           Else SALDO_DISPONIVEL=[Saldo Atual]
        EndIf   
        Moveto "FaturaI"
        Return True
EndIf   
     

VSD_I_Custo_Unitario=NDecimal(([Custo Total Atual]/[Saldo Atual]),5)
If VSD_I_Custo_Unitario=0 Or IsBlank(VSD_I_Custo_Unitario)
   Then VSD_I_Custo_Unitario=[Ultimo Custo Atual]
EndIf
ULTIMO_CTENTRADA    =NDecimal([Preco de Custo],2)
;-------------------------------------------------------------------------------


If IsAssigned(ver_saldo) And ver_saldo And CHAVEI=1
   Then titulo_estoque="Saldo "+MES_EST+"/"+ANO_EST
        saldo_Estoque =ltrim(Format("W13.3,EIC",NDecimal([Saldo Atual],3)))
   
        Release vars ver_saldo,PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
        
        Moveto "FaturaI"
        Return True 
Endif

Moveto "FaturaI"
If NOVOSALDO>=0
   Then 
        Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
        Return True
   Else ItemRef   =""
        ItemCodFor=""

        getrecord "\\sistemas\\estoque\\itens" [Codigo do Item] to regitens
        if retval
           Then ItemRef   =regitens["Referencia"]
                ItemCodFor=regitens["Codigo Fornecedor"]
        EndIf    
      
        MSG=    "Estoque Insuficiente em "+LTrim(StrVal(Format("W11.3,EIC",NOVOSALDO)))+", Verificar !// //"
        MSG=MSG+Completa("Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30),60," ")+"//"
        MSG=MSG+Completa(" Ref: "+ItemRef,60," ")+"//"
        MSG=MSG+Completa("  CF: "+ItemCodFor,60," ")

        If PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
           Then Mensagem(MSG)
        EndIf
        Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM,ItemRef, ItemCodFor
         
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc    ; (Checa_Estoque)

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

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

LimpaRodape(0)
Aguarde("Excluindo lan‡amento")                                                           
Moveto "FaturaC"
CopyToArray REG_FATURAC  

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

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

Moveto "FaturaC"
UnLockRecord
KeyPress "F7"

Moveto "FaturaCC"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
If RetVal
   then Del
Endif    

Moveto "FaturICM"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While  [Numero da OF]=[FaturaC->Numero da OF]
       Del
       If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaIC"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While  [Numero da OF]=[FaturaC->Numero da OF]
       Del
       If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaIG"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While  [Numero da OF]=[FaturaC->Numero da OF]
       Del
       If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaR"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While  [Numero da OF]=[FaturaC->Numero da OF]
       Del
       If EOT() Then QuitLoop EndIf
EndWhile

If Rtrim([FaturaC->Numero da Expedicao])<>""
   Then Situacao_Expedicao()
EndIf
Release Vars REG_FATURAC

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

If MODOFILTRAR Then STATUSFILTRO="DEL" EndIf

Release Vars GRAVA_LOG
LimpaRodape(0)                                                           

EndProc   ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
private tipo
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf                 
SEQIT =[Item da OF]
CHAVEI=8

ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

Moveto "FaturaI"
Moveto [Item da OF]
Locate SEQIT
If GRAVA_LOG Then Grava_LogEx("Item do Fatura") EndIf
Del
          
if [Faturac->Tipo Movimento Estoque]="E" And
   substr([Faturac->CFO],1,1)="3"                          
   then
        APLIC_ORIGEM="FATURA"
        Play "FT_IMPE"
endif

EndProc   ; (Exclusao_I)

;*******************************************************************************
;* Atualiza Quantidade Faturada do Pedido ou Orcamento                         *
;*******************************************************************************
Proc ATUA_PEDIDO_ORCAMENTO()

If (PARAM_ORCAMENTO="S") Or
   (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
   Then If Not IsBlank([FaturaI->Numero Pedido_Orcamento]) And
           (Not IsBlank([FaturaI->Item Pedido_Orcamento]) Or [FaturaI->Item do Pedido Agrupado]="S")
           Then Moveto "FaturaC"
                [Numero Pedido_Orcamento]=[FaturaI->Numero Pedido_Orcamento]
                If PARAM_PEDIDO="S"
                   Then Moveto "PedidoI"
                        Moveto [Item do Pedido]
                   Else Moveto "OrcaI"
                        Moveto [Item do Orcamento]
                EndIf                    
                If Not Agrupa_Pedido("VALIDA")
                   Then Locate [FaturaI->Item Pedido_Orcamento]
                        If RetVal
                           Then If CHAVEI<>8
                                   Then [Quantidade Faturada]=([Quantidade Faturada]-QUANT)+[FaturaI->Quantidade]
                                        UnLockRecord
                                        SaveTables
                                   Else If [Quantidade Faturada]>0
                                           Then [Quantidade Faturada]=[Quantidade Faturada]-[FaturaI->Quantidade]
                                                UnLockRecord
                                                SaveTables
                                        EndIf        
                                EndIf
                        EndIf
                   Else Busca_Item_Agrupado()
                        If PARAM_PEDIDO="S"
                           Then Moveto "PedidoI"               
                           Else Moveto "OrcaI"
                        EndIf
                EndIf
                ATUA_SITUACAO_PEDIDO_ORCAMENTO()        
        EndIf
EndIf
EndProc   ; (Atua_Pedido_Orcamento)     

;*******************************************************************************
;* Faturamento de Pedido ou Orcamento Automatico                               *
;*******************************************************************************
Proc FATURA_PEDIDO_ORCAMENTO()
Private PED_ORC_TITULO, OK, PED_ORC_FAT, SEQI, Atualiza, ItemRef, ItemCodFor, linha1, linha2, linha3,
        TipoCopia

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

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

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

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

PEDANT="***"

If ([FaturaC->Codigo da Empresa]<>Pedido_Empresa And
   ([FaturaC->Codigo da Destinacao]+[FaturaC->Descricao da Destinacao])<>Pedido_Destin And
    TPEMPR="DEBITO/CREDITO") Or
   (([FaturaC->Codigo da Destinacao]+[FaturaC->Descricao da Destinacao])<>Pedido_Destin And
    TPEMPR="DEBITO/CREDITO") 
    Then Mensagem("A Empresa/Destina‡Æo foram alteradas, //a tributa‡Æo dos itens ser  alterado de acordo com a nova destina‡Æo !")
EndIf 

Scan

  If Not IsBlank([Quantidade Faturada]) And
     [Quantidade Faturada]<0                 Then Loop EndIf
  If ([Quantidade]-[Quantidade Faturada])<=0 Then Loop EndIf


  if sys_codigo_cliente="0121"
     then
           switch
             case search("VEND",[FaturaC->Descricao da Destinacao])>0 and [Tipo do Item] ="C" : Loop
             case search("SERV",[FaturaC->Descricao da Destinacao])>0 and [Tipo do Item]<>"C" : Loop
           endswitch
  endif

  Moveto "FaturaI"
  End
  SEQI=[Item da Of]
  If Isblank(SEQI)
     Then SEQI="1"
     Else SEQI=StrVal(NumVal(SEQI)+1)
  EndIf
  If NumVal(SEQI)>900
     Then Mensagem("N£mero m ximo de itens permitidos ‚ 900 !")
          QuitLoop
  EndIf
  Down
  [Numero da Of]=[FaturaC->Numero da Of]
  [Item da Of  ]=NumVal(SEQI)
  UnLockRecord
  Locate [FaturaC->Numero da Of],NumVal(SEQI)
  
  TipoCopia="Normal"
 
  if sys_codigo_cliente="0294"
     then
          if [FaturaC->Tipo Movimento Estoque]="S" And 
             ( Search("DEVOL"   ,[FaturaC->Descricao da Destinacao])>0 or
               Search("CONCERTO",[FaturaC->Descricao da Destinacao])>0 or 
               Search("REMESSA" ,[FaturaC->Descricao da Destinacao])>0 ) 
             then TipoCopia="SoCopia"
          endif   
  endif
  
  switch
    case TipoCopia="SoCopia":
      SoCopiaPedidoFatura()
      CHAVEI=1
      ATUALIZA=True
  
    case TipoCopia="Normal":
    
      COPIA_PED_ORC_FATURA()
      Echo Normal
      Echo Off
    
      CHAVEI=1
      ATUALIZA=True
      If Not Checa_Estoque() 
         Then
              ItemRef   =""
              ItemCodFor=""
              Moveto [Codigo do Item]
              If Busca_Lookup("Codigo do Item",[Codigo do Item],"SM")
                 Then ItemRef   =REG_BUSCA_LOOKUP["Referencia"]
                      ItemCodFor=REG_BUSCA_LOOKUP["Codigo Fornecedor"]
              EndIf    
          
              MSG=    "N£mero do Pedido: "+[Numero Pedido_Orcamento]+"    Item do Pedido: "+StrVal([Item Pedido_Orcamento])+"// //"
    
              MSG=MSG+Completa("Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30),60," ")+"//"
              MSG=MSG+Completa(" Ref: "+ItemRef,60," ")+"//"
              MSG=MSG+Completa("  CF: "+ItemCodFor,60," ")+"// //"
    
             ; MSG=MSG+"Quantidade pedida: "+StrVal(Format("W11.3,EICB",[Quantidade]))+"//"
             ; MSG=MSG+"- Estoque atual  : "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
             ; MSG=MSG+"                   -------------"                             +"//"
             ; MSG=MSG+"Falta em estoque : "+StrVal(Format("W11.3,EICB",NOVOSALDO*-1))+"// //"
    
              Linha1=Chr(179)+"   Quantidade"+Chr(179)+"      Estoque"+Chr(179)+"     Falta em"+Chr(179)+"     Faturado"+Chr(179)
              Linha2=Chr(179)+"       pedida"+Chr(179)+"        atual"+Chr(179)+"      estoque"+Chr(179)+"      parcial"+Chr(179)
              Linha3=Chr(179)+Format("W13.3,EICB",[Quantidade])+
                     Chr(179)+Format("W13.3,EICB",SALDOATUAL  )+
                     Chr(179)+Format("W13.3,EICB",NOVOSALDO*-1)+        
                     Chr(179)+Format("W13.3,EICB",0           )+Chr(179)
    
              If PARAM_BAIXA_PARCIAL="S"
                 Then If SALDOATUAL<=0
                         Then Del
                              ATUALIZA=False
                         Else Linha3=SubStr(Linha3,1,43)+Format("W13.3,EICB",SALDOATUAL)+Chr(179) 
                         
                              ;MSG=MSG+"Faturando parcial: "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
                      Endif
                 Else Del
                      Atualiza=False
              EndIf
              Echo Normal
              Echo Off 
    
              MSG=MSG+Linha1+"//"
              MSG=MSG+Linha2+"//"
              MSG=MSG+Linha3+"// //"       
    
              Release Vars ItemRef, ItemCodFor, Linha1, Linha2, Linha3
    
              If Not ATUALIZA
                 Then MSG=MSG+"Item n„o pode ser faturado por saldo insuficiente !"
                 Else MSG=MSG+"  "
                      [Quantidade]=SALDOATUAL
                      if [Valor Desconto Unitario]>0
                         then [Valor Desconto Item    ]=round([Quantidade]*[Valor Desconto Unitario],2)
                      endif        
                      
                      If [Quantidade]>0 and [Preco Unitario]>0
                          Then [Preco Total]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]
                          Else If [Preco Unitario]>0
                                  Then [Preco Total]=Round([Preco Unitario]-[Valor Desconto Item],2)
                               EndIf
                      EndIf
    
                      If [Tributacao de ICMS]<>"D"
                         Then If Not IsBlank([Tributacao de ICMS      ])
                                  Then [Aliquota Reduzida BCICMS]=BlankNum()
                                       [Aliquota de ICMS        ]=BlankNum()
                                       [Valor do ICMS           ]=BlankNum()
                               EndIf
                      EndIf
    
                      If [Aliquota Reduzida BCICMS]>0 And
                         [Aliquota de ICMS        ]>0
                         Then [Valor do ICMS]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                         Else [Valor do ICMS]=NDecimal(([Preco Total]*[Aliquota de ICMS])/100,2)
                      EndIf
    
                      If [Aliquota Reduzida BCIPI ]>0 And
                         [Aliquota de IPI         ]>0
                         Then [Valor do IPI ]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
                         Else [Valor do IPI ]=NDecimal(([Preco Total]*[Aliquota de IPI ])/100,2)
                      EndIf
              EndIf
              Mensagem(MSG)
      EndIf
  
  endswitch
  
  If ATUALIZA
     Then 
          ESTOQUE()
          Moveto "FaturaI"
          UnLockRecord
  EndIf

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

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

If (PARAM_ORCAMENTO="S") Or
   (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
   Then ATUA_SITUACAO_PEDIDO_ORCAMENTO()
EndIf

Agrupa_Pedido("")

EndProc   ;  (Fatura_Pedido_Orcamento)

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

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

SOIMPRIMIROF          =False
TIPO_SAIDA            =""
PARAM_VISUALIZAR_DANFE=False

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

;***** Apenas reimprir romaneio *********************
If REEMITIR And SOIMPRIMIR
   Then Moveto "FaturaC"
        UnLockRecord
        Do_It!
        SaveTables
        
        CoEditKey                            
        FormKey
             
        If IMP_ROM_EXPED
           Then ANT_PARAM_RELAT_ROMA = PARAM_RELAT_ROMA 
                PARAM_RELAT_ROMA     = PARAM_RELAT_ROME
        EndIf
        
        While True
          If IsBlank(PARAM_RELAT_ROMA)
            Then MSG = "Romaneio nÆo configurado, Verificar suporte Vise !"
                 If IMP_ROM_EXPED
                    Then MSG = "Romaneio/Expedi‡Æo nÆo configurado, Verificar suporte Vise !"                    
                 EndIf
                 Mensagem(MSG)
                 Release Vars MSG
                 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
        
        If IMP_ROM_EXPED
           Then PARAM_RELAT_ROMA = ANT_PARAM_RELAT_ROMA
                Release Vars ANT_PARAM_RELAT_ROMA 
        EndIf

        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
   Then If SYS_CODIGO_CLIENTE<>"0222"
           Then If Search("VIST",[FaturaC->Descricao CondPagto])=0 
                   Then If Not Limite_Credito()
                           Then TIPO_SAIDA="NAO_FAZ"
                        EndIf
                EndIf
           Else If Not Limite_Credito()
                   Then TIPO_SAIDA="NAO_FAZ"
                EndIf
        EndIf        
EndIF   

While TIPO_SAIDA<>"NAO_FAZ"
  ModoNFe=""

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

    Case REEMITIR And Not IsBlank(PARAM_DOC_NSEN) 
                  And Not IsBlank([Numero Nota Gerada]) And SubStr([FaturaC->Docto Nota Gerada],1,3)="NSE": 
                      
      Opcaoc="NFS-e"                

    OtherWise:

      ;Echo Normal
      Echo Off
    
      opcao1="."  dopcao1=""  ropcao1="Esc"
      opcao2="."  dopcao2=""  ropcao2="Esc"
      opcao3="."  dopcao3=""  ropcao3="Esc"
      opcao4="."  dopcao4=""  ropcao4="Esc"
    
      If Not IsBlank(PARAM_DOC_ROM)
         Then opcao1="~R~omaneio              "  dopcao1=" Imprime Romaneio                      "  ropcao1="Romaneio"
      EndIf
      If Not IsBlank(PARAM_DOC_NF)
         Then opcao2="~N~ota Fiscal/Formul rio"  dopcao2=" Imprime Nota Fiscal/Formul rio        "  ropcao2="Nota Fiscal"
      EndIf
      
      switch
        case [FaturaC->Valor Servico]>0 and [FaturaC->Valor Mercadoria]<=0 and Not IsBlank(PARAM_DOC_NSEN):
          opcao4="Nota Fiscal Servi‡o/~E~letr“nica"  dopcao4=" Gera Nota Fiscal Servi‡o Eletr“nica           "  ropcao4="NFS-e"
        
        otherwise                                                         :
          If Not IsBlank(PARAM_DOC_NFEN)
             Then opcao3="~P~r‚ Visualiza‡„o NFE  "  dopcao3=" Pr‚ Visualizar Nota Fiscal Eletr“nica "  ropcao3="Visualizar"
                  opcao4="Nota Fiscal/~E~letr“nica"  dopcao4=" Gera Nota Fiscal Eletr“nica           "  ropcao4="NF-e"
                  
          EndIf

      endswitch 
      
      if PARAM_RELAT_OF<>"" and IsBlank([Numero Nota Gerada])    
         Then opcao2="~O~rdem de Faturamento  "  dopcao2=" Imprime Ordem de Faturamento          "  ropcao2="OF"
      endif
      
      If Not IsBlank([Numero Nota Gerada])
         Then Switch
                Case SubStr([FaturaC->Docto Nota Gerada],1,3)="NFE" Or
                     SubStr([FaturaC->Docto Nota Gerada],1,3)="NSE" Or
                     SubStr([FaturaC->Docto Nota Gerada],1,3)="RPS":
                      opcao1="."  dopcao1=""  ropcao1="Esc"
                      opcao2="."  dopcao2=""  ropcao2="Esc"
                Case SubStr([FaturaC->Docto Nota Gerada],1,2)="RO"  :
                      opcao2="."  dopcao2=""  ropcao2="Esc"
                      opcao3="."  dopcao3=""  ropcao3="Esc"
                      opcao4="."  dopcao4=""  ropcao4="Esc"
                Case SubStr([FaturaC->Docto Nota Gerada],1,2)="NF"  :
                      opcao1="."  dopcao1=""  ropcao1="Esc"
                      opcao3="."  dopcao3=""  ropcao3="Esc"
                      opcao4="."  dopcao4=""  ropcao4="Esc"
              EndSwitch
      EndIf   
      ShowPopup " Impress„o " CENTERED
          "~S~uspende              " : " N„o Imprime no momento        " : "Suspende",
          opcao1                     : dopcao1                           : ropcao1,
          opcao2                     : dopcao2                           : ropcao2,
          opcao3                     : dopcao3                           : ropcao3,
          opcao4                     : dopcao4                           : ropcao4 
      EndMenu To Opcaoc
      echo off
    
      If Opcaoc="Esc" Or Not Retval Or Opcaoc="Suspende" Or Opcaoc="Visualizar"
         Then If Opcaoc="Visualizar" Then Play "VIS_DANF" EndIf
              QuitLoop
      EndIf
                       
  EndSwitch

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

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

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

         CODFISC  =PARAM_DOC_NFEN
         SERIEFISC=PARAM_SER_NFEN

         If Not doceautorizado("Status")
            Then QuitLoop
         Endif   

    Case SubStr(Opcaoc,1,5)="NFS-e":
         If SubStr(PARAM_DOC_NSEN   ,1,3)<>"RPS" Or (SubStr(PARAM_DOC_DUPNSEN,1,3)<>"DSE" And SubStr(PARAM_DOC_DUPNFEN,1,3)<>"DP0")
            Then Mensagem("Configura‡„o inv lida NFSe/Duplicata, ver parƒmetros !")
                 QuitLoop
         EndIf

         opcaoc   ="NFS-e/RPS"
         CODFISC  =PARAM_DOC_NSEN
				 SERIEFISC=PARAM_SER_NSEN

         If Not doceautorizado("Status")
            Then QuitLoop
         Endif   

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

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

         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":
         If IsBlank(PARAM_RELAT_ROMA)
            Then Mensagem("Romaneio n„o configurado, ver parƒmetros !")
                 QuitLoop
         EndIf        

         If sys_codigo_cliente="0377" and isblank([FaturaC->Numero da Expedicao])
            Then Mensagem("Romaneio sem expedi‡Æo, s¢ com permissÆo !")
                 If Not CHECA_SUPERVISOR() 
                    Then QuitLoop
                 EndIf
         EndIf        

         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  

    Case Opcaoc="OF":
         If IsBlank(PARAM_RELAT_OF)
            Then Mensagem("Romaneio n„o configurado, ver parƒmetros !")
                 QuitLoop
         EndIf        

         NUMCOPIA=PARAM_NVIAS_ROMANEIO
         MSGDISPOSITIVO="Ordem de Faturamento"
         DispositivoI("OF")
         If OK=""
           Then QuitLoop
         EndIf
         
         SOIMPRIMIROF=True
         
         N_COPIAS=NUMCOPIA
         
         Play PARAM_RELAT_OF

         SOIMPRIMIROF=False
         
         quitloop
  EndSwitch

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

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

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

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

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

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


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

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

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

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

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

  Switch
    Case Opcaoc="Romaneio":
         If PARAM_APENAS_EXPEDOF 
            Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0
                    Then If [FaturaC->Numero da Expedicao]=""
                            Then MENSAGEM("N„o foi localizado ordem de expedi‡„o para faturamento!")
                                 QuitLoop
                         EndIf
                 EndIf
         EndIf
         Echo Off
         ShowPopup " Romaneio " CENTERED
             "~I~mpressora"    : "Imprime Romaneio"    :"Impressora",
             "~L~ugar Nenhum"  : "N„o Imprime Romaneio":"Lugar Nenhum"
         EndMenu
         To Opcaon

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

         If Not RetVal Then Opcaon="Lugar Nenhum" EndIf
         If Opcaon="Impressora"
            Then NUMCOPIA=PARAM_NVIAS_ROMANEIO
                 MSGDISPOSITIVO=OpcaoC
                 DispositivoI("FAT")
                 If OK=""
                    Then TIPO_SAIDA = "LIBERA_NUMNF"
                         QuitLoop
                 EndIf

                 N_COPIAS=NUMCOPIA
                 
                 Play "FT_NOTA"
                 ARQ_EMAIL= PrivDir()+[FaturaC->Numero Nota Gerada]+".txt"
                 Play PARAM_RELAT_ROMA
                 
            Else Play "FT_NOTA"
         EndIf

    Case Opcaoc="Nota Fiscal": 
         If SYS_CODIGO_CLIENTE="0296" 
            Then Switch
                   Case [FaturaC->Valor Mercadoria]>0 : Mensagem("Formul rio apenas pra servi‡o!\\Existe item de mercadoria!")
                                                        TIPO_SAIDA = "LIBERA_NUMNF"
                                                        QuitLoop
                   Case [FaturaC->Valor Servico]<=0 :   Mensagem("Formul rio apenas pra servi‡o!\\Sem item de servi‡o informado!")
                                                        TIPO_SAIDA = "LIBERA_NUMNF"
                                                        QuitLoop
                 EndSwitch
         EndIf                         
                 
         MSGDISPOSITIVO=OpcaoC
         DispositivoI("FAT")
         If OK=""
            Then TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf
         Play "FT_NOTA"
         Play PARAM_RELAT_NF
         
    Case SubStr(Opcaoc,1,4)="NF-e":
  
         If SYS_CODIGO_CLIENTE="0296" 
            Then Switch
                   Case [FaturaC->Valor Mercadoria]<=0 And [FaturaC->Valor Servico]>0 : 
                        Mensagem("Essa Nota Fiscal deve conter item de mercadoria")
                        TIPO_SAIDA = "LIBERA_NUMNF"
                        QuitLoop
                 EndSwitch
         EndIf 

         If Not doceautorizado("")
            Then GRAVA_CONTINGENCIA=True
                 If ModoNFe<>"Normal"
                    Then JC_Digita()
                 EndIf
                 If Not GRAVA_CONTINGENCIA
                    Then TIPO_SAIDA = "LIBERA_NUMNF"
                         QuitLoop
                 EndIf
                 
                 If Not IsBlank([FaturaC->Data de Saida]) And [FaturaC->Data de Saida]<=[FaturaC->Data de Emissao]
                    Then [FaturaC->Data de Saida  ] = [FaturaC->Data de Emissao]
                         If [Hora de Saida]<=Time()
                            Then [Hora de Saida] = Time()
                         EndIf   
                 EndIf
                 switch
                   case VersaoNFe="3.10" : Play "NF_NFE31"
                   case VersaoNFe="4.00" : Play "NF_NFE40"
                   otherwise             : mensagem("VersÆo NF-e "+VersaoNFe+", nÆo disponivel !// //Verificar com Suporte !") 
                 endswitch
                  
            Else TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf
         
    Case SubStr(Opcaoc,1,5)="NFS-e":
  
         If SYS_CODIGO_CLIENTE<>"0092" and
            SYS_CODIGO_CLIENTE<>"0121" and
            SYS_CODIGO_CLIENTE<>"0034" and
            SYS_CODIGO_CLIENTE<>"0427"
            Then 
                 Mensagem("NFS-e nÆo dispon¡vel, Verificar suporte Vise !")

                 TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop

         EndIf 

         If Not doceautorizado("")
            Then GRAVA_CONTINGENCIA=True
                 If ModoNFe<>"Normal"
                    Then JC_Digita()
                 EndIf
                 If Not GRAVA_CONTINGENCIA
                    Then TIPO_SAIDA = "LIBERA_NUMNF"
                         QuitLoop
                 EndIf
                 
                 If Not IsBlank([FaturaC->Data de Saida]) And [FaturaC->Data de Saida]<=[FaturaC->Data de Emissao]
                    Then [FaturaC->Data de Saida  ] = [FaturaC->Data de Emissao]
                         If [Hora de Saida]<=Time()
                            Then [Hora de Saida] = Time()
                         EndIf   
                 EndIf

                 if isblank([Numero Nota Gerada])
                    then 
                         [Numero Nota Gerada]=NOTAFISC 
                         [Docto Nota Gerada ]=CODFISC
                         [Serie Nota Gerada ]=SERIEFISC
                         
                         Moveto "NumeroNF"
                         [Proximo Numero     ] = [Proximo Numero] + 1
                         [Data Ultima Emissao] = [FaturaC->Data de Emissao]
                         UnLockRecord

                         Moveto "FaturaC"
                 endif        

                 Play "NF_NSE01"
                 
                 ;switch
                 ;  case VersaoNFe="1.11" : 
                 ;  case VersaoNFe="X.XX" : Play "NF_NSE00"
                 ;  otherwise             : mensagem("VersÆo NFS-e "+VersaoNFe+", nÆo disponivel !// //Verificar com Suporte !") 
                 ;endswitch
                  
            Else TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf
         
  EndSwitch

  switch
    case search("NSE",CODFISC)>0:


    otherwise                      : 
    ;;******  Emissao Nota Promissoria  *************
    Moveto "FaturaC"
    If Not IsBlank(PARAM_RELAT_NP)
       Then If [FaturaC->Forma de Pagamento]="NP" Or
               (SYS_CODIGO_CLIENTE="0117" And
                ([FaturaC->Forma de Pagamento]="DN" Or
                 [FaturaC->Forma de Pagamento]="CH" Or
                 [FaturaC->Forma de Pagamento]="CP"))
                Then
                     ;Echo Normal
                     Echo Off
                     ShowPopup " Op‡”es " CENTERED
                      "Nota ~P~romissoria" : "Imprime Nota Promissoria"    :"Nota Promissoria",
                      "~C~ancelar"         : "N„o Imprime Nota Promissoria":"Cancelar"
                     EndMenu
                     To Opcaon
  
                     Echo off
                     If Opcaon="Cancelar" or Opcaon="Esc"
                         Then Quitloop
                     EndIf
  
                     If Opcaon="Nota Promissoria"
                       Then NUMCOPIA=1
                            MSGDISPOSITIVO=OpcaoN
                            DispositivoI("NP")
                            If OK<>""
                               Then Play PARAM_RELAT_NP
                            EndIf                       
                    EndIf
            EndIf
    EndIf
  
    ;;******  Emissao de Carne ************
    Moveto "FaturaC"
    If Not IsBlank(PARAM_RELAT_CARNE) And [FaturaC->Forma de Pagamento]="CR"
       Then 
           ;Echo Normal
            Echo Off                                    
            ShowPopup " Op‡”es " CENTERED
              "C~a~rnˆ"    : "Imprime Carnˆ"     :"Carne",
              "~C~ancelar" : "N„o Imprime Carnˆ" :"Cancelar"
            EndMenu
            To Opcaon
  
            Echo off
  
            If (Opcaon<>"Esc") and (Opcaon<>"Cancelar")
                Then If Opcaon="Carne"
                        Then MSGDISPOSITIVO=Opcaon
                             DispositivoI("CR")
                             If OK<>""
                                Then Play PARAM_RELAT_CARNE
                             EndIf
                     EndIf
            EndIf
    EndIf
  
    ;;******  Emissao de Boleto ************
    Moveto "FaturaC"
    If SYS_CODIGO_CLIENTE="0147" Then
      Moveto "FaturaC"
      If Not IsBlank(PARAM_RELAT_CARNE) And [FaturaC->Forma de Pagamento]="BO"
         Then
             ;Echo Normal
              Echo Off
              ShowPopup " Op‡”es " CENTERED
                "~B~oleto"   : "Imprime Boleto Banc rio" :"Boleto",
                "~C~ancelar" : "N„o Imprime Boleto"      :"Cancelar"
              EndMenu
              To Opcaon
    
              Echo off
    
              If (Opcaon<>"Esc") and (Opcaon<>"Cancelar")
                 Then If Opcaon="Boleto"
                         Then MSGDISPOSITIVO=Opcaon
                              DispositivoI("BO")
                              If OK<>""
                                 Then Play PARAM_RELAT_CARNE
                              EndIf
                      EndIf
              EndIf
      EndIf
    EndIf
  
    ;;******  Emissao de Titulo de Credito ************
    Moveto "FaturaC"
    If PARAM_TITCRED="T"
       then Play "FT_IVALE"
    endif   

  Endswitch

  QuitLoop
EndWhile

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

Moveto "FaturaC"
UnLockRecord
formkey

Echo Normal
Echo Off

SaveTables
EndProc   ; (ConfImprime)

;*******************************************************************************
;* Rotina chama documento eletronico                                           *
;*******************************************************************************
Proc doceautorizado(Tipo)
private result

switch
  case search("NFE",CODFISC)>0: result=nfeautorizada(Tipo)

  case search("NSE",CODFISC)>0: result=nfseautorizada(Tipo)
  case search("RPS",CODFISC)>0: result=nfseautorizada(Tipo)

endswitch

return result

endproc

;*******************************************************************************
;* Rotina NFSe                                                                 *
;*******************************************************************************
Proc nfseautorizada(Tipo)
Private nfeok, c, pos, pos2, nfeserie, s, i, Arquivo8

PastaNfeManager  =RTrim(PARAM_CAMINHO_MANAGER)
GrupoeDoc        =RTrim(PARAM_GRUPO_EDOC)
CNPJ_Manager     =Tira_CharNum(CNPJNF_e)
denegada         =False
cancelada        =False
  
If not IsAssigned(CANC) 
   Then CANC = false 
EndIf

PastaNfeManagerMonitorar=PastaNfeManager+"Monitorar\\"+GrupoeDoc+"\\NFSe\\"+CNPJ_Manager+"\\"

nfeok=False
While True

  If Tipo="Status" Or Tipo="Consulta" Then


    nfsefoiautorizada=false           
    
    ;--- Carregando parametros ----------------------------------------------------
    
    AmbienteNFe    =""
    ModoNFe        =""
    VersaoNFe      =""
    VersaoEsquema  =""
    
    ;--- Carregando parametros atraves do getconfig por CNPJ ----------------------
    Aguarde("Verificando configura‡”es/Status do eDOC CNPJ "+CNPJ_Manager+" !")
    
    conteudodoarquivo=""

    Deleta_Arquivo(PrivDir()+"manager2.ini")
    
    FileWrite        PrivDir()+"funcao1.txt"  From  "EDOCS|"+PrivDir()+"|"+PastaNfeManagerMonitorar+"|"+"st"+StrVal(ORDFAT)+".ini"+"\n"
    ExecVise(PrivDir()+"funcao1.txt")
    
    conteudodoarquivo="" 
    nfeok=true
  
    If Not LerConteudodoArquivo8(PrivDir()+"manager2.ini") Or
       conteudodoarquivo="" 
       Then MSG="Configura‡äes do eDOC p/ verificar !// //"
        	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", nÆo encontrado//" 
         	  MSG=MSG+"// Verifique com suporte vise !"
         		Mensagem(MSG)
            nfeok=False
        		QuitLoop
    EndIf   

    Pos=SearchFrom("[NFSE]",conteudodoarquivo,1)
    Pos2=SearchFrom("Ambiente=",conteudodoarquivo,pos)
    AmbienteNFe=SubStr(conteudodoarquivo,pos2+9,1)
    ModoNFe    ="Normal"
  
  EndIf
  If Tipo="Status"
     Then QuitLoop
  EndIf   

  ;--- Verificando situa‡Æo do Documento -----------------------------------------

  nfeok=False

  If Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>"" 
     Then If ([FaturaC->Sistema Gerador]="n!" Or
              [FaturaC->Sistema Gerador]="s!" Or
              [FaturaC->Sistema Gerador]="d!" Or
              [FaturaC->Sistema Gerador]="f!") And
             CANC = False
             Then Mensagem("RPS/NFSe "+NOTAFISC+" j„ foi enviada e autorizada [Prefeitura] !")
                  nfeok=true
                  QuitLoop
          EndIf        
  EndIf        
  ArqNFE           ="nf"+StrVal(NOTAFISC)+".TX2"
  ArqNFE_Consulta  =PastaNfeManagerMonitorar+"Consulta\\"+ArqNFe
  ArqNFE_ConsultaR =PastaNfeManagerMonitorar+"Consulta\\Retorno\\"+ArqNFe
  ArqNFE_Envia     =PastaNfeManagerMonitorar+"Envia\\"+ArqNFe

  Aguarde("Consultando a RPS/NFSe "+NOTAFISC+" no eDOC, aguarde at‚ 30 segundos !")

  s=""
  nfeserie=SERIEFISC
  FileWrite        PrivDir()+"managcon.txt" From "NomeCidade="+NFSeCIDADE+"\n"
  
  If Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>"" and
     ([FaturaC->Sistema Gerador]="n!" Or
      [FaturaC->Sistema Gerador]="s!" Or
      [FaturaC->Sistema Gerador]="d!" Or
      [FaturaC->Sistema Gerador]="f!") And
     CANC = True
     Then
          FileWrite Append PrivDir()+"managcon.txt" From "Campos=nnfse,serie,situacao,cnpj,nrps\n"+
                                                         "filtro="+
                                                         "cnpj="+CNPJ_Manager+" AND "+
                                                         "serie='"+nfeserie+"' AND "+
                                                         "nnfse="+StrVal(NumVal(NOTAFISC))+"\n"
     
     else
          FileWrite Append PrivDir()+"managcon.txt" From "Campos=nnfse,serie,situacao,cnpj,nrps\n"+
                                                         "filtro="+
                                                         "cnpj="+CNPJ_Manager+" AND "+
                                                         "serie='"+nfeserie+"' AND "+
                                                         "nrps="+StrVal(NumVal(NOTAFISC))+"\n"
  EndIf        

  Deleta_Arquivo(PrivDir()+"managcon.ret")
  FileWrite        PrivDir()+"funcao2.txt" From "EDOCC|"+PrivDir()+"|"+PastaNfeManagerMonitorar+"|"+ArqNFE+"\n"
  ExecVisecf(PrivDir()+"funcao2.txt","")
  
  If ExisteArquivo8(PrivDir()+"managcon.ret",0)
     Then s="1"
  EndIf

  
  If s=""
      Then Mensagem("eDOC da Empresa ["+NOMENF_e+"],// n„o esta carregado/ocupado/inativo !// //Antiv¡rus ou problemas com permiss”es de usu rio podem//"+
                   "estar impedindo que o arquivo seja criado.// // Verifique o eDOC ou tente novamente !")
     
          nfeok=true
     Else FileRead PrivDir()+"managcon.ret" to conteudodoarquivo
          denegada  = False
          cancelada = False
          Switch
            Case Search("AUTORIZADA",conteudodoarquivo)>0 And not IsBlank([Numero Nota Gerada]):
                 
                 MSG=    "RPS "+NOTAFISC+" Foi autorizada [Prefeitura] !// //"

                 Pos =SearchFrom(",",conteudodoarquivo,1)
                 NOTAFISC=AlinhM(SubStr(conteudodoarquivo,1,pos-1),6)
                 
                 Pos2=SearchFrom(",",conteudodoarquivo,pos+1)
                 SERIEFISC=upper(rtrim(SubStr(conteudodoarquivo,pos+1,1)))

                 CODFISC="NSEA"
            
                 nfsefoiautorizada=true            
             
                 MSG=MSG+"NFS-e "+NOTAFISC+" !//"
                 Mensagem(MSG)
                 nfeok=true
                 
                 quitloop

            Case Search("AUTORIZADA",conteudodoarquivo)>0:
                 Mensagem("RPS/NFSe "+NOTAFISC+" foi confirmada sua autoriza‡„o [Prefeitura] !")
                 nfeok=true
            Case Search("CANCELADA",conteudodoarquivo)>0:
                 Mensagem("NFSe "+NOTAFISC+" J  foi cancelada [Prefeitura] !// //Confirme cancelamento no Sistema !")
                 nfeok=true
                 cancelada = True
                 CANC= false
            Case Search("DENEGADA",conteudodoarquivo)>0:
                 Mensagem("NFSe "+NOTAFISC+" est  denegada [Prefeitura] !// //Confirme denega‡Æo no Sistema !")
                 nfeok=true
                 denegada = True
           EndSwitch

           Switch
             Case IsBlank([Numero Nota Gerada]) And NOTAFISC<>"":
               If not nfeok and Search(",",conteudodoarquivo)>0
                  Then MSG=    "RPS/NFSe "+SubStr(conteudodoarquivo,1,65)+"!// // Consulte a situa‡„o da RPS/NFSe no eDOC !// //"
                       MSG=MSG+"Deseja reenviar esta RPS/NFSe ?"
                       If ConfGeral(MSG)
                          Then nfeok=False
                          Else nfeok=true
                       Endif   
               EndIf   
    
           EndSwitch
  EndIf

  If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf

  QuitLoop  
EndWhile

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

LimpAguarde()
Return nfeok
Endproc

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

PastaNfeManager  =RTrim(PARAM_CAMINHO_MANAGER)
GrupoeDoc        =RTrim(PARAM_GRUPO_EDOC)
CNPJ_Manager     =Tira_CharNum(CNPJNF_e)
denegada         =False
cancelada        =False
  
If not IsAssigned(CANC) 
   Then CANC = false 
EndIf

PastaNfeManagerMonitorar=PastaNfeManager+"Monitorar\\"+GrupoeDoc+"\\NFe\\"+CNPJ_Manager+"\\"

nfeok=False
While True

  If Tipo="Status" Or Tipo="Consulta" Then
    
    ;--- Carregando parametros ----------------------------------------------------
    
    AmbienteNFe    =""
    ModoNFe        =""
    VersaoNFe      =""
    VersaoEsquema  =""
    
    ;--- Carregando parametros atraves do getconfig por CNPJ ----------------------
    Aguarde("Verificando configura‡”es/status do eDOC CNPJ "+CNPJ_Manager+" !")
    
    conteudodoarquivo=""  

    Deleta_Arquivo(PrivDir()+"manager2.ini")
    
    FileWrite        PrivDir()+"funcao1.txt"  From  "EDOCS|"+PrivDir()+"|"+PastaNfeManagerMonitorar+"|"+"st"+StrVal(ORDFAT)+".ini"+"\n"
    ExecVise(PrivDir()+"funcao1.txt")
    
    conteudodoarquivo="" 
    nfeok=true
    
    If Not LerConteudodoArquivo8(PrivDir()+"manager2.ini") Or
       conteudodoarquivo="" 
       Then MSG="Configura‡äes do eDOC p/ verificar !// //"
        	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", nÆo encontrado//" 
         	  MSG=MSG+"// Verifique com suporte vise !"
         		Mensagem(MSG)
            nfeok=False
        		QuitLoop
    EndIf   
    
    Pos=SearchFrom("[NFE]",conteudodoarquivo,1)
    Pos2=SearchFrom("Ambiente=",conteudodoarquivo,pos)
    AmbienteNFe=SubStr(conteudodoarquivo,pos2+9,1)

    Pos=SearchFrom("[NFE]",conteudodoarquivo,1)
    Pos2=SearchFrom("VersaoManual=",conteudodoarquivo,pos)
    s=Upper(Tira_CharEspecial(SubStr(conteudodoarquivo,pos2+13,4)))
    If s="3.0"  Then VersaoNFe="1.10"  Endif
    If s="4.0"  Then VersaoNFe="2.00"  EndIf
    If s="5.0"  Then VersaoNFe="2.00"  EndIf
    If s="5.0A" Then VersaoNFe="3.10"  EndIf
    If s="6.0"  Then VersaoNFe="4.00"  EndIf
    
    Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
    Pos2=SearchFrom("LoteAutomatico=",conteudodoarquivo,pos)
    LoteAutomaticoNFe=SubStr(conteudodoarquivo,pos2+15,1)
    
    Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
    Pos2=SearchFrom("Modo=",conteudodoarquivo,pos)
    s=Tira_CharEspecial(SubStr(conteudodoarquivo,pos2+5,2))
    If s="1"  Then ModoNFe="Normal"  EndIf
    If s="2"  Then ModoNFe="DPEC"    EndIf
    If s="3"  Then ModoNFe="SCAN"    EndIf
    If s="5"  Then ModoNFe="FSDA"    EndIf
    If s="7"  Then ModoNFe="SVCRS"   EndIf 
    If s="9"  Then ModoNFe="EPEC"    EndIf
    If s="12" Then ModoNFe="SVCAN"   EndIf
    
    If IsBlank(ModoNFe)
       Then MSG="Configura‡äes do eDOC p/ verificar !// //"
        	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", gravar configura‡äes.//" 
         	  MSG=MSG+"// Verificar tempo de resposta do computador muito lento !"
         	  MSG=MSG+"// Tente desativar antiv¡rus e outros programas !"
         		Mensagem(MSG)
            nfeok=False
            QuitLoop
    Endif   
    
    Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
    Pos2=SearchFrom("VersaoEsquema=",conteudodoarquivo,pos)
    VersaoEsquema=Upper(SubStr(conteudodoarquivo,pos2+14,7))
    
    Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
    Pos2=SearchFrom("FusoHorario=",conteudodoarquivo,pos)
    Fuso_Horario=SubStr(conteudodoarquivo,Pos2+12,6)
  
  EndIf
  If Tipo="Status"
     Then QuitLoop
  EndIf   

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

  nfeok=False

  If Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>"" 
     Then If ([FaturaC->Sistema Gerador]="n!" Or
              [FaturaC->Sistema Gerador]="s!" Or
              [FaturaC->Sistema Gerador]="d!" Or
              [FaturaC->Sistema Gerador]="f!") And
             CANC = False
             Then Mensagem("NF-e "+NOTAFISC+" j„ foi enviada e autorizada no SEFAZ !")
                  nfeok=true
                  QuitLoop
          EndIf        
  EndIf        
  ArqNFE           ="nf"+StrVal(NOTAFISC)+".TX2"
  ArqNFE_Consulta  =PastaNfeManagerMonitorar+"Consulta\\"+ArqNFe
  ArqNFE_ConsultaR =PastaNfeManagerMonitorar+"Consulta\\Retorno\\"+ArqNFe
  ArqNFE_Envia     =PastaNfeManagerMonitorar+"Envia\\"+ArqNFe

  Aguarde("Consultando a NF-E "+NOTAFISC+" no eDOC, aguarde at‚ 30 segundos !")

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

  Deleta_Arquivo(PrivDir()+"managcon.ret")
  FileWrite        PrivDir()+"funcao2.txt" From "EDOCC|"+PrivDir()+"|"+PastaNfeManagerMonitorar+"|"+ArqNFE+"\n"
  ExecVisecf(PrivDir()+"funcao2.txt","")
  
  If ExisteArquivo8(PrivDir()+"managcon.ret",0)
     Then s="1"
  EndIf
  
  If s=""
      Then Mensagem("eDOC da Empresa ["+NOMENF_e+"],// n„o esta carregado/ocupado/inativo !// //Antiv¡rus ou problemas com permiss”es de usu rio podem//"+
                   "estar impedindo que o arquivo seja criado.// // Verifique o eDOC ou tente novamente !")
     
          nfeok=true
     Else FileRead PrivDir()+"managcon.ret" to conteudodoarquivo
          denegada  = False
          cancelada = False
          Switch
            Case Search("AUTORIZADA",conteudodoarquivo)>0 And IsBlank([Numero Nota Gerada]) And NOTAFISC<>"": 
                 MSG=    "NF-e "+NOTAFISC+" J  foi confirmada sua autoriza‡„o no SEFAZ !// //"
                 MSG=MSG+"Consulta a NF-e no eDOC !//"
                 MSG=MSG+"Verifique o controle de numera‡„o da nota se esta correta !"
                 Mensagem(MSG)
                 nfeok=true
            Case Search("AUTORIZADA",conteudodoarquivo)>0:
                 Mensagem("NF-e "+NOTAFISC+" foi confirmada sua autoriza‡„o no SEFAZ !")
                 nfeok=true
            Case Search("CANCELADA",conteudodoarquivo)>0:
                 Mensagem("NF-e "+NOTAFISC+" J  foi cancelada no SEFAZ !// //Confirme cancelamento no Sistema !")
                 nfeok=true
                 cancelada = True
                 CANC= false
            Case Search("DENEGADA",conteudodoarquivo)>0:
                 Mensagem("NF-e "+NOTAFISC+" est  denegada no SEFAZ !// //Confirme denega‡Æo no Sistema !")
                 nfeok=true
                 denegada = True
            Case (Search("ENVIADA",conteudodoarquivo)>0 Or Search("REGISTRADA",conteudodoarquivo)>0):
                 Mensagem("NF-e "+NOTAFISC+" j  foi registrada como enviada pelo eDOC !//"+
                          "Confirme sua autoriza‡Æo no eDOC !")
                 nfeok=false
           EndSwitch

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

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

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

  If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf

  QuitLoop  
EndWhile

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

LimpAguarde()
Return nfeok
Endproc

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

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

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

If IsEmpty("\\Sistemas\\Vendas\\P_Exped")
   Then Mensagem("N„o esta Configurado os Parametros para Expedi‡Æo !")
        Return False
EndIf

PARAM_AGRUPA_ITEM = False
;;If SYS_CODIGO_CLIENTE="0227" And SubStr(Upper(Directory()),1,2)="X:"
;;   Then PARAM_AGRUPA_ITEM = True
;;   Else PARAM_AGRUPA_ITEM = False
;;EndIf

PARAM_EXPED_TIPO      = ""
PARAM_EXPED_AGRUPA    = ""     
PARAM_EXPED_IMPRESSAO = ""
If Not IsBlank("\\Sistemas\\Vendas\\P_Exped")
   Then GetRecord "\\Sistemas\\Vendas\\P_Exped" [FaturaC->Codigo da Empresa]  To REG_EXPED 
        If RetVal
           Then PARAM_EXPED_TIPO      = REG_EXPED["Tipo_Expedicao"]
                PARAM_EXPED_AGRUPA    = REG_EXPED["Agrupa_Item"]
        EndIf
EnDIf        

return true
EndProc ; (Carrega_Parametros)

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

View NOWINDOW "FaturaI"
View NOWINDOW "FaturaIG"
View NOWINDOW "FaturaV"
View NOWINDOW "FaturaIC"
View NOWINDOW "FaturaCC"
View NOWINDOW "FaturaR"
View NOWINDOW "FaturIDD"
View NOWINDOW "FaturIAD"
View NOWINDOW "FaturICM"

View NOWINDOW "NotaC"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIG"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaV"
View NOWINDOW "NotaR"
View NOWINDOW "NotaICM"
View NOWINDOW "NotaIDD"
View NOWINDOW "NotaIAD"

View NOWINDOW "NumeroNF"
View NOWINDOW "NumeroDP"

View NOWINDOW "\\Sistemas\\Estoque\\Itens"
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\\Destinat"
View NOWINDOW "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW "\\Sistemas\\Cadastro\\Feriados"
View NOWINDOW "\\Sistemas\\Cadastro\\Destmsg"
View NOWINDOW "\\Sistemas\\Cadastro\\EmpAut"

If Not MODOFILTRAR
   Then CoEdit NOWINDOW "FaturaC"
        ;************** Rotina para tratar o erro de tabela locada *************
        If ErrorCode()=4
           Then Do_It!
                return False
        EndIf
   Else If Not CoEditaTabelaControle() ; substitui Coedit da tabela principal
           Then Return False
        EndIf
EndIf

Return True

EndProc   ; (Carrega_Tabelas)

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

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

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

;---- Movido p/ Controla_EdicaoC() **Erro quando FaturaC ‚ vazia --------------- 
Moveto "FaturaC"
Moveto "PedidoC"  SetaCorRegistro("Padrao")
Moveto "PedidoI"  SetaCorRegistro("Padrao")
Moveto "OrcaC"    SetaCorRegistro("Padrao")
Moveto "OrcaI"    SetaCorRegistro("Padrao")
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetaCorRegistro("Padrao")
Moveto "FaturaV"  SetaCorRegistro("Padrao")
Moveto "FaturaCC" SetaCorRegistro("Invisivel")
Moveto "FaturaC"  SetaCorRegistro("Editar") 

OldI_Pedido_Compra=""

CopyToArray REG_FATURAC

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

  If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
     Then If [FaturaC->Numero da Expedicao]<>"" And OPCHAVEI="CDB" Then OPCHAVEI="CDC" EndIf
  EndIf
  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
    EndWhile

    While FACA_DIGITAF
      DIGITAF()                   
      If CHAVEF = 9 Then QuitLoop EndIf

      ;---- Rateio Fatura ------------------------------------------------------
      Moveto "FaturaC"
      If PARAM_AGRUPA_ITEM
         Then 
              ;---- Rateio Itens do FaturaG ------------------------------------
              PARAM_CALCOF = ""     ;ativar gravar calculos faturac 
              PARAM_FT_GRUP = "RATEIOS AGRUPADOS"
              Play "FT_GRUP"

              ;---- Carrega Variaveis do Item para o FaturaI ------------------- 
              DestruirArrayItens()

              ;---- Carregar Itens do FaturaI ----------------------------------
              PARAM_FT_GRUP = "ITENS"
              Play "FT_GRUP"
              
              PARAM_CALCOF = "ITEM" ;desativar gravar calculos faturac
              Calc_Of()
      EndIf
      
      ;---- Rateio Itens do FaturaI "PARAM" ----------------------------
      PARAM_FT_GRUP = "RATEIOS"
      Play "FT_GRUP"

      ;---- Release vars array itens -------------------------------------------
      PARAM_CALCOF = ""     ;ativar gravar calculos faturac 
      DestruirArrayItens()
      
      If [FaturaC->UF]="RO"
         Then Play "FT_CST"
      EndIf
         
      DIGITAD()      
      If CHAVED = 0
         Then FACA_DIGITAC = False
              FACA_CHAVEI  = False
              QuitLoop
      EndIf
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf

AtualizaRegistroControle("Numero da OF",ORDFAT,MODOPAGINA)         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

VSDGENDENT    =""
VSDGENDCOB    =""
VSDGENDRET    =""

SaveTables
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SelecionaFiltro()
ClearAll

{Ask} {FaturaC} Check
Moveto [Codigo da Empresa] TypeIn MODOFILTRAR_EMPRESA
Do_It!
ClearAll

Release Vars REG_USUARIO
CriaTabelaControle()

Return True

EndProc  ; (Seleciona)

;*******************************************************************************
;* 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_Fat,"+
        "\\Sistemas\\Vendas\\Bib_Vend"

sys_valor()

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

PegouFusoHorario=false

;PARAM_TPC_CLIE="P"
If SYS_CODIGO_CLIENTE="0344" Then PARAM_TPC_CLIE="S" EndIf

Ler_Captura("")
LeiaINI(PrivDir()+"LER_CHQ.ini","VSD_LEITORCHQ.S.1")

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

TabelaTemp      = ""
TabelaPrincipal = "FaturaC"
TabelaControle  = TabelaPrincipal
MODOFILTRAR     = False

If SYS_CHAPA_USUARIO<>""
   Then Switch
          Case SYS_CODIGO_CLIENTE="0435" : SYS_EMPRESA_DEFAULT = ""
                                           MODOFILTRAR = True 
                                           GetRecord "\\Sistemas\\Cadastro\\Usuarios" SYS_CHAPA_USUARIO To REG_USUARIO
                                           If Not RetVal
                                              Then Mensagem("Usu rio "+SYS_CHAPA_USUARIO+" nÆo foi localizado no sistema!")
                                                   Return
                                              Else MODOFILTRAR_EMPRESA = REG_USUARIO["Cod_Empresa"]  
                                           EndIf          
          OtherWise                      : MODOFILTRAR = False
        EndSwitch
EndIf          

If IsAssigned(MODOFILTRAR) And MODOFILTRAR
   Then SelecionaFiltro()
   Else TabelaControle    = TabelaPrincipal
        MODOFILTRARATIVO  = True
        MODOFILTRARINCLUI = False
        MODOFILTRATODOS   = True
EndIf
OPCAO_FORM = "F"

VCITENS    =BlankNum()
VSQTDE     =BlankNum()
VSVRMERC   =BlankNum()
VSVRVENCTOS=BlankNum()
                          
PARAM_APENAS_EXPEDOF   = False
PARAM_DUPLICIDADE_ITEM = False
PARAM_UTILIZA_VARIACOES= False
PARAM_BLOQ_ALTERA_REP  = "N"
PARAM_RATEIO_COMISSAO  = ""
PARAM_CONSIGNACAO      = "N"     
PARAM_RELAT_NF         = ""
INICIO_IMPRESSAO       = True
VERIFICA_CONSULTA      = "FATURA"
SYS_APLICATIVO         = "FATURA"                                 

;---- Particularidades ---------------------------------------------------------
Switch
  Case SYS_CODIGO_CLIENTE = "0377"  : 
    if SubStr(Upper(Directory()),1,2)="X:"
       then PARAM_APENAS_EXPEDOF  = True
       else PARAM_APENAS_EXPEDOF  = False
    endif
  
  Case SYS_CODIGO_CLIENTE = "0314"  : PARAM_BLOQ_ALTERA_REP   = "S"

  Case SYS_CODIGO_CLIENTE = "0318" Or 
       SYS_CODIGO_CLIENTE = "0370" Or 
       SYS_CODIGO_CLIENTE = "0376" Or
       SYS_CODIGO_CLIENTE = "0404" Or
       SYS_CODIGO_CLIENTE = "0431"  : PARAM_DUPLICIDADE_ITEM  = True

  Case SYS_CODIGO_CLIENTE = "0427" Or
       SYS_CODIGO_CLIENTE = "0390" Or
       SYS_CODIGO_CLIENTE = "0429"  : PARAM_UTILIZA_VARIACOES = True
                                      PARAM_DUPLICIDADE_ITEM  = True

  Case SYS_CODIGO_CLIENTE = "0388"  : PARAM_UTILIZA_VARIACOES = True
                                      PARAM_DUPLICIDADE_ITEM  = False
EndSwitch                                                     

Array dtvencto[12]
Array valorven[12]

Array Dt_Vencto[12]
Array Vr_Vencto[12]
Array ND_Vencto[12]
Array VC_Vencto[12]
                         
If Carrega_Tabelas()
   Then Moveto TabelaControle
        PickForm "F"
        
        OPCAO_FORM = "F"
        MES_EST    = ""
        ANO_EST    = ""
                  
        ;**** 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()
          ;--- FILTRO ------------------------------------------------------------------
          If CHAVEC=99 
             Then If Filtrar()
                     Then MODOFILTRAR=True
                  EndIf
                  Carrega_Tabelas()
                  Loop
          EndIf
          If CHAVEC=98 
             Then AGUARDE("Visualizando todos registros")
                  MODOFILTRAR=False
                  Do_It!
                  
                  TabelaControle=TabelaPrincipal
                  Carrega_Tabelas()
                  Loop
          EndIf   
          ;-----------------------------------------------------------------------------
          If CHAVEC=9 Then QuitLoop EndIf
          If CHAVEC=5
             Then If OPCAO_FORM="F"
                     Then PickForm "F"
                     Else PickForm "1"
                  EndIf
                  Loop
          EndIf
          Controla_EdicaoC()
        EndWhile
EndIf
   
Do_It!
ClearAll
DeletaTabelaControle() ; FILTRO
Release Vars All
Release Procs All
