;* PedidoG *********************************************************************
;* Digitacao de Pedido de Venda  Grade                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 30/03/2006 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 10/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina TN
;Ultima Alteracao: 27/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues               
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 10/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calcudo de Volumes
;Ultima Alteracao: 25/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Dados_Cli()
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 05/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Imprimir Pedido/Tricostura
;Ultima Alteracao: 08/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Rateio_Descto_Total()
;Ultima Alteracao: 27/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_Array_Grade()
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 09/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UF<>UFEmpresa/CFOP
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete por conta 0_Sem Frete                                         
;Ultima Alteracao: 23/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA
;Ultima Alteracao: 02/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CalcICMS Adicicionais  
;Ultima Alteracao: 04/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_PedidoI()  
;Ultima Alteracao: 07/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Codigo de Barras
;Ultima Alteracao: 15/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem consulta cores
;Ultima Alteracao: 12/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_Opcoes()
;Ultima Alteracao: 17/02/2010 por Cleber Alves
;Motivo Alteracao: Ajustes  Imprime()
;Ultima Alteracao: 18/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() Isabela Garcia     
;Ultima Alteracao: 02/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Codigo de Barras
;Ultima Alteracao: 02/03/2010 por Cleber Alves
;Motivo Alteracao: Ajustes Esc
;Ultima Alteracao: 03/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Bloquear cliente situacao Recadastro
;Ultima Alteracao: 12/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Exclusao Pedido pelo Supervisor
;Ultima Alteracao: 15/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Cidades
;Ultima Alteracao: 23/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Codigo de Barras    
;Ultima Alteracao: 04/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CFO Frete
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_PedidoI(), Faturados_PedidoI()     
;Ultima Alteracao: 01/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Dados_Clie() Nova codifica‡Æo
;Ultima Alteracao: 05/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 22/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Salvar dados Cliente 
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste CST ICMS   
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;Ultima Alteracao: 17/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem de Produto ja esistente no pedido
;Ultima Alteracao: 25/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem de Produto ja esistente no pedido so LUPUS
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN  
;Ultima Alteracao: 13/09/2010 por Karina Andrade
;Motivo Alteracao: Ajuste MSGCAMPO Telefone                             
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 05/10/2010 por Karina Andrade
;Motivo Alteracao: Ajustes CFO_Frete
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 23/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajuste Rotina C¢digo de Barra
;Ultima Alteracao: 03/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Mensagem_Venda()
;Ultima Alteracao: 06/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas 
;Ultima Alteracao: 26/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mudanca automatica CSON
;Ultima Alteracao: 28/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete
;Ultima Alteracao: 30/03/2011 por Bruno Carvalho
;Motivo Alteracao: Alerta na digita‡Æo do Item quando etiver com "Producao Esgotada"
;Ultima Alteracao: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete
;Ultima Alteracao: 01/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_PedidoI()/Faturados_PedidoI()
;Ultima Alteracao: 04/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_Array()                     
;Ultima Alteracao: 07/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes AvancaCampo()/VoltaCampo()
;Ultima Alteracao: 26/04/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout e Procedimentos "Digita‡Æo dos Itens"
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Produ‡Æo Esgotada" 
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 20/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Faturados_PedidoI()
;Ultima Alteracao: 21/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Faturados_PedidoI() conforme PedidoI
;Ultima Alteracao: 23/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem Alfabetica 
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras              
;Ultima Alteracao: 07/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem sequencia lupus 
;Ultima Alteracao: 15/06/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao cadastrar novo cliente e novo ajuste para cliente 0222    
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 22/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes aceitar Item com Qtd e Vr >0                  
;Ultima Alteracao: 23/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC   
;Ultima Alteracao: 05/09/2011 por Karina Andrade
;Motivo Alteracao: Add F6 - Altera COR
;Ultima Alteracao: 20/10/2011 por Anivel Karina Andrade
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC so Pessoa JURIDICA s¢ VENDA
;Ultima Alteracao: 26/10/2011 por Karina Andrade
;Motivo Alteracao: Ajuste MSG Simples Nacional
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 29/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSON 101 Florita
;Ultima Alteracao: 14/02/2012 por Bruno Carvalho
;Motivo Alteracao: Alterado Estrutura das Observa‡äes para Tipo "M70" e ajustado no FORM
;Ultima Alteracao: 14/02/2012 por Bruno Carvalho
;Motivo Alteracao: Add Parƒmetros "Utiliza CP e FP de Pagto conforme cliente" e "Altera Pedido PosImpresso"
;Ultima Alteracao: 02/03/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes na utiliza‡Æo de "CP e FP de Pagto conforme cliente"
;Motivo Alteracao: Ajustes na utiliza‡Æo de "CP e FP de Pagto conforme cliente"
;Ultima Alteracao: 06/03/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustado Valor para PEDIMAGEM, impressÆo para pedido com imagem de fundo
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 16/03/2012 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes nÆo pegar mensagem das destina‡äa para mensagem da NF
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 17/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN=400 Confec‡Æo SIMPLES NACIONAL               
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 17/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes para quando for codigo de itens iguais, informar! 
;Ultima Alteracao: 19/06/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Calc_Of, Rateio_BC_Itens e ShowDialog dos Itens (Ajuste Imposto)  
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 29/06/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Pega_Dados_Item() "Codigo Cor_Tecido" e CdBarras() 
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message ShowDialog    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Removido vari vel LOCALIZAR_POR no MSGCAMPO     
;Ultima Alteracao: 12/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes carregar cores quando informado a referencia
;Ultima Alteracao: 16/07/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado Proc Checa_MVA()
;Ultima Alteracao: 27/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes p/ Confec‡äes CSON=400 opera‡Æo diferente de venda
;Ultima Alteracao: 30/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Quantidade estava sendo apapagada quando item j  existia
;Ultima Alteracao: 15/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes na rotina quando verifica o PARAM_PEDIDOIMP
;Ultima Alteracao: 17/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servico d lmeida                         
;Ultima Alteracao: 17/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Produ‡Æo Esgotada     
;Ultima Alteracao: 05/09/2012 por Bruno Carvalho
;Motivo Alteracao: Add AvancaCampo() "Item_Dialog"
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()                         
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;Ultima Alteracao: 20/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao regime tributario DEBITO E CREDITO
;Ultima Alteracao: 24/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()
;Ultima Alteracao: 09/10/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ empresa "0171" onde permite digita‡Æo de ref em duplicidade
;Ultima Alteracao: 06/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Utiliza Cor Sim/NÆo/Destacar
;Ultima Alteracao: 13/12/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Cliente "0326" p/ permitir digitar ref. mais de uma vez
;Ultima Alteracao: 18/02/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes SetaCorRegistro(), Ajustes DigitaV()
;Ultima Alteracao: 04/03/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes TECLA na proc Item_Dialog() onde estava ultrapassando 80 posi‡äes
;Ultima Alteracao: 18/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Cliente "0322" p/ permitir digitar ref. mais de uma vez
;Ultima Alteracao: 19/03/2013 por Bruno Carvalho
;Motivo Alteracao: Comentado a linha onde utilizava o campo/variavel "NBM"
;Ultima Alteracao: 27/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Cliente "0322"
;Ultima Alteracao: 15/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes dados Showdialog Frete                                         
;Ultima Alteracao: 13/04/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes I_CSOSN, nÆo estava acessando o campo
;Ultima Alteracao: 20/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes sd_dialog lockrecord/unlockrecord                                         
;Ultima Alteracao: 27/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Calc_Vencto()
;Ultima Alteracao: 27/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Rotina p/ verificar linha de registro em branco
;Ultima Alteracao: 28/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Permitir alterar Forma de Pagamento nos Vencimentos
;Ultima Alteracao: 11/06/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Calc_Vencto()
;Ultima Alteracao: 05/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo deduzir descto ICMS_ST_BC                            
;Ultima Alteracao: 21/08/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Situacao do Cliente" p/ permitir situa‡Æo como OTIMO
;Ultima Alteracao: 16/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIMPLES NACIONAL PIS/CST = 99                            
;Ultima Alteracao: 12/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Simples Nacional c/ calculo de ICMS, ST com redu‡Æo BC 
;Ultima Alteracao: 09/04/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_NLancto() 
;Ultima Alteracao: 23/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao informar o numero do lancamento
;Ultima Alteracao: 24/04/2014 por Bruno Carvalho
;Motivo Alteracao: Comentado o novo procedimento de numero de lan‡amento at‚ finaliza‡Æo de testes
;Ultima Alteracao: 18/06/2014 por Luis Gustavo
;Motivo Alteracao: Implementado na Proc ChaveI , a op‡Æo F6 Organizar por:  Descri‡Æo ou Codigo
;Ultima Alteracao: 07/07/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes Pega_Preco() acrescentado PARAM_UTILIZA_TABPR_REPRES
;Ultima Alteracao: 09/07/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes Pega_Preco() "GetRecord" 
;Ultima Alteracao: 24/07/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Soma dos items que tem rateio do total das despesas                                     
;Ultima Alteracao: 04/08/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Soma dos items que tem rateio do total das despesas
;Ultima Alteracao: 04/08/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST ?60 para CSOSN 500 
;Ultima Alteracao: 13/08/2014 por Kamila Gomes
;Motivo Alteracao: Implementa‡Æo checagem de cliente inativo
;Ultima Alteracao: 28/08/2014 por Anivel/Andrey
;Motivo Alteracao: Corrigido erro de Loop na Aliquota de CST e CSOSN
;Ultima Alteracao: 06/10/2014 por Andrey Fillipe
;Motivo Alteracao: Habilitado novamente a proc Verifica_NLancto()
;Ultima Alteracao: 16/10/2014 por Bruno Carvalho
;Motivo Alteracao: Removido o processo Verifica_NLancto(), devido a erro em acesso simultaneo e ajustado nova rotina para verifica‡Æo do Lancto 
;Ultima Alteracao: 30/10/2014 por Andrey Fillipe
;Motivo Alteracao: Adicionado imprimir via "Normal" ou "Cliente" para quando for (Modelo Gerencial e SYS_CODIGO_CLIENTE="0222")
;                  "Normal" = Imprime Observacao e "Cliente" = NÆo imprime Observacao 
;Ultima Alteracao: 03/11/2014 por Andrey Fillipe
;Motivo Alteracao: Alterado Normal e Cliente para Com e Sem Observacao
;Ultima Alteracao: 14/11/2014 por Bruno Carvalho
;Motivo Alteracao: Alterado o processo do Monta_Array_Grade() , Gera_PedidoI() e Carrega_Parametros() que estÆo no script "PED_UTIL"
;Ultima Alteracao: 26/03/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado SYS_VALOR()
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado MSG_REF com valor vazio p/ quando grade completamente inativa/esgotada
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Array_Grade() -> Array_Monta_Grade() e adicionado-o na Bibliot
;Ultima Alteracao: 19/05/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ Cliente Pessimo #0112#
;Ultima Alteracao: 31/07/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado a tabela Itens para abrir junto dos pedidos, para uma melhor perfomance quando utilizar GETRECORD
;Ultima Alteracao: 04/11/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes para nao pegar aliquota do estado caso ICMS esteja em branco
;Ultima Alteracao: 27/11/2015 por Bruno Carvalho
;Motivo Alteracao: Retirado apenas para o Cliente #0171# o processo para colar o array, caso showdialog dos itens ‚ cancelado ** 
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven        
;Ultima Alteracao: 14/01/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Altera pre‡o F4            
;Ultima Alteracao: 18/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Altera pre‡o F4, corrigido erro referencia em branco 
;Ultima Alteracao: 23/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Sys_Codigo_Cliente 0227 quando cfop ‚ 5912 ou 6912 
;Ultima Alteracao: 31/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Sys_Codigo_Cliente 0232 impressao de pedidos 
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord                    
;Ultima Alteracao: 26/04/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Busca_Cep() p/ buscar o endere‡o, bairro, cidade e estado (quando houver) no Endere‡o de Cobran‡a
;Ultima Alteracao: 12/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado MontaRodapeSD() p/ padroniza‡Æo
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Producao Esgotada]
;Ultima Alteracao: 13/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Tira sombra do form dos itens
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para gera‡Æo/verifica‡Æo do [Numero do Pedido] 
;Ultima Alteracao: 02/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIMPLES NACIONAL, FISICA, ISENTO, NAOCONTRIBUINTE nÆo gera credito  
;Ultima Alteracao: 12/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes nos processos onde sÆo executados Exclusao_I() e ajustes na proc Exclusao_C() p/ bloquear exclusÆo se item c/ faturamento 
;Ultima Alteracao: 13/09/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado proc de controle Verifica_QtdF() p/ travar a altera‡Æo se quantidade informada menor que quantidade faturada
;Ultima Alteracao: 14/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ otimiza‡Æo quando h  itens faturados -> InclusÆo e ExclusÆo de Itens 
;Ultima Alteracao: 04/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIMPLES NACIONAL, FISICA, ISENTO, NAOCONTRIBUINTE nÆo gera credito  
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Tabelas() 
;Ultima Alteracao: 23/03/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao mover p/ o campo [CFO] -> Ser  posicionado no pr¢ximo campo dispon¡vel ap¢s o [CFO] a partir da destina‡Æo
;Ultima Alteracao: 18/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST tratamento ipi/pis/cofins entrada/devolu‡Æo
;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: 07/06/2017 por Kamila Gomes
;Motivo Alteracao: Adicionado op‡Æo Shift+E Enviar Pedido somente para Siri #0227#
;Ultima Alteracao: 21/06/2017 por Kamila Gomes
;Motivo Alteracao: Ajuste setar vari vel LOCALIZA_CODIGO
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 28/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar modelo no item 0003            
;Ultima Alteracao: 28/07/2017 por Bruno Carvalho
;Motivo Alteracao: Ajutes no layout do showdialog do item *conforme showdialog do pedido
;Ultima Alteracao: 16/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes fun‡Æo envia email    
;Ultima Alteracao: 22/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes CALC_VOLUMES() p/ #0274# -> NÆo preencher automaticamente MARCA e ESPECIE   *Sol. 31237                  
;Ultima Alteracao: 13/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ver_Memo() substitu¡do por Ler_Memo() na proc Mensagem_Venda()
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA() e remo‡Æo do Pedido p/ Bib_Vend -> Checa_MVA()
;Ultima Alteracao: 29/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo pegar obs da destina‡Æo
;Ultima Alteracao: 05/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0222 imprimir ou nao obs       
;Ultima Alteracao: 17/10/2017 por Kamila Gomes
;Motivo Alteracao: Ajustes 0222 Enviar pedido por e-mail    
;Ultima Alteracao: 19/10/2017 por Bruno Carvalho
;Motivo Alteracao: Removido de Inicia_Registro() e Registro_Item() -> Composicao de Dias, Aliquota Reduzida BCIPI, Condicao de Pagamento
;Ultima Alteracao: 19/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes CALC_VOLUMES() -> DMARCA e DUNID p/ pegar valores no cadastro de itens
;Ultima Alteracao: 20/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Item_Dialog() -> CODIGO_MARCA
;Ultima Alteracao: 23/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo de desconto no item (Unit rio ou Total), conforme processo j  adaptado no FATURA
;Ultima Alteracao: 01/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_VOLUMES() unidades                  
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog item      
;Ultima Alteracao: 12/12/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Pega_Dados_Item() -> [Codigo da Tabela]
;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: 11/01/2018 por Kamila Gomes
;Motivo Alteracao: Ajuste envio de email
;Ultima Alteracao: 12/01/2018 por Kamila Gomes
;Motivo Alteracao: Ajuste envio de email
;Ultima Alteracao: 14/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registro_Item("Ler")+CalcularPrecoTotal_Item()
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 12/06/2018 por kamila Gomes
;Motivo Alteracao: Ajustes gravar log de erros ao excluir registros
;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: 12/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST/ICMS PIS/COFINS 0274
;Ultima Alteracao: 19/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_VENCTOS()
;Ultima Alteracao: 01/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes 0227 retorno mostruario
;Ultima Alteracao: 03/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tbprnew
;Ultima Alteracao: 06/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes chamada CALC_VENCTOS()
;Ultima Alteracao: 18/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bcipi
;Ultima Alteracao: 11/09/2018 por Bruno Carvalho
;Motivo Alteracao: ExclusÆo de 11 campos no PedidoI/PedidoG *BC e Valor: COFINS, PIS, ISSQN, CredSN e Codigo_Servi‡o
;Ultima Alteracao: 24/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes conta corrente cheque  
;Ultima Alteracao: 05/10/2018 por Kamila Gomes
;Motivo Alteracao: Setando vari vel ARQ_EMAIL com n£mero do pedido            
;Ultima Alteracao: 06/11/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sistema gerador                  
;Ultima Alteracao: 13/11/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ #0227# ao verificar o item pela cor do tecido, podendo ser do tipo "P" ou "T" -> Pega_Dados_Item()
;Ultima Alteracao: 26/11/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na impressÆo de pedidos -> IMPRIME()
;Ultima Alteracao: 12/12/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes na impressÆo de pedidos -> IMPRIME()
;Ultima Alteracao: 22/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado controle para destina‡äes inativas -> DESTIN_INATIVA
;Ultima Alteracao: 27/12/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Faturados_PedidoI() quando qtd faturada corresponder … mesma quant faturada que consta no pedidoi
;Ultima Alteracao: 16/01/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao verificar o item pela cor do tecido, podendo ser do tipo "P" ou "T" -> Pega_Dados_Item(), antes aplicado apenas p/ #0227#
;Ultima Alteracao: 04/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pedido de compra              
;Ultima Alteracao: 18/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sequencia da cor iten_Cor lista
;Ultima Alteracao: 01/04/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes nÆo alterar pedido origem se origem nÆo manual
;Ultima Alteracao: 04/04/2019 por Kamila Gomes
;Motivo Alteracao: Implementa‡Æo de envio de pedido por e-mail para cliente #0232#
;Ultima Alteracao: 18/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Cliente "0434" p/ permitir digitar ref. mais de uma vez (*Mesmo processo p/ #0322#)
;Ultima Alteracao: 29/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0429# usar varia‡äes
;Ultima Alteracao: 24/05/2019 por Bruno Carvalho
;Motivo Alteracao: Foi removido o DEL ao retornar a mensagem "ITEM SEM TABELA DE PRE€O !" na proc Pega_Dados_Item() **Estava apagando o ultimo registro
;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: 04/06/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes item inativo bloquear s¢ na grade nÆo na pesquisa quando usar cor
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho
;Motivo Alteracao: Movido CALC_VOLUMES() p/ Bib_Vend com passagem de parƒmetro
;Ultima Alteracao: 02/07/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado [Producao Esgotada] da tabela "Iten_Com" p/ a tabela "Itens"
;Ultima Alteracao: 02/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel de controle PARAM_VERIFICA_GRADE ao verificar grade quando PARAM_COR_TECIDO="N"
;Ultima Alteracao: 15/08/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao localizar o [item do pedido] pela vari vel SEQIT -> Inicia_Registro() *Se SEQIT for igual ao [] desprezar o locate
;Ultima Alteracao: 23/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes formïs e total itens, vencimentos, prompt
;Ultima Alteracao: 27/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado vari vel de controle PARAM_VERIFICA_GRADE ao verificar grade tamb‚m para PARAM_COR_TECIDO="D"
;Ultima Alteracao: 09/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor_tecido #0232#
;Ultima Alteracao: 16/09/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao setar "PEDIDO_COM_QTDF" na proc Verifica_QtdF() *Verificando QTDF a partir da tabela PedidoI, antes PedidoG
;Ultima Alteracao: 16/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao localizar o [item do pedido] pela vari vel SEQIT -> Inicia_Registro() *Voltou processo como era antes de 15/08/2019
;Ultima Alteracao: 24/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0413 data de entrega
 
;*******************************************************************************
;* Rotina para Controlar Chave do Pedido de Venda                              *
;*******************************************************************************
Proc ChaveC()
INICIO_PAGINA=True
COPIOU_REGISTRO=False
FACA_DIGITAC=True                           

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

While True
  Moveto "PedidoC"
  End
  Moveto [Numero do Pedido]
  PEDIDO=[Numero do Pedido]
  If OPCAO_FORM="F"
    Then Down
    Else PgDn PgDn PgDn PgDn
  EndIf
  Moveto [Numero do Pedido]

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

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

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

           If OPCAO_FORM="F"
              Then PAGINA("PedidoC","MR")
              Else PAGINA("PedidoC","MT")
           EndIf
           PEDIDO=[Numero do Pedido]
           Switch
             Case EDITAR="S":
                  PickForm "4"
                  Verifica_QtdF("Verifica Faturamento")
                  Echo Normal
                  Echo Off
                  If [Situacao do Pedido]="CANCELADO" Or
                     [Situacao do Pedido]="FATURADO"
                     Then If Checa_Controle([Numero_Controle_Dia])
                             Then CHAVEC=0
                                  Controla_EdicaoC()
                             Else UnLockRecord
                          EndIf
                     Else CHAVEC=0
                          Controla_EdicaoC()
                  EndIf
             Case EXCLUIR="S":
                  PickForm "4"
                  Echo Normal
                  Echo Off
                  
                  PARAM_PEDUTIL = "CARREGA_PARAMETRO"
                  Play "PED_UTIL"  
                  
                  If Checa_Controle([Numero_Controle_Dia]) And (IsBlank([Codigo da Empresa]) Or PARAM_PEDUTIL)
                     Then If Checa_Supervisor()
                             Then If QuerExcluir("")
                                     Then GRAVA_LOG=True
                                          EXCLUSAO_C()
                                     Else UnLockRecord
                                  EndIf
                             Else CONFGERAL("Cancelar Pedido de Venda")
                                  If OK="S"
                                     Then [Situacao do Pedido]="CANCELADO"
                                  Endif
                                  UnLockRecord
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="3"
              Then PickForm "4"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         ;---- Lan‡amento ------------------------------------------------------
         If Numero_Lancamento("","F")
            Then PEDIDO = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC 
            Else QuitLoop
         EndIf         
         If Not PROXIMO_LANCTO_REG_ACHOU
           Then GetRecord "\\Sistemas\\Vendas\\PedidoI" PEDIDO To REG_PEDIDOI
                If RetVal
                   Then Mensagem(Completa("O Pedido "+PEDIDO+" esta com erro, verificar empresa e/ou os",72," ")+
                                 Completa("itens j  existentes!                                        ",72," ")+"//"+
                                 Completa("-> Recuperar o Pedido "+PEDIDO+" ou exclu¡-lo!",72," "))
                        Del
                        QuitLoop         
                EndIf
         EndIf
         PickForm "4"   
         Moveto [Numero do Pedido]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 Verifica_QtdF("Verifica Faturamento")
                 If [Situacao do Pedido]<>"CANCELADO" And
                    [Situacao do Pedido]<>"FATURADO"
                    Then Return
                    Else If Checa_Controle([Numero_Controle_Dia])
                            Then Return
                         EndIf
                 EndIf
            Else CHAVEC=1
                 If Checa_Controle(SYS_CONTROLE_DIA)
                    Then Return
                    Else OPCAO_FORM="F" 
                 EndIf
         EndIf          
         ;----------------------------------------------------------------------            
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)
                    
;*******************************************************************************
;* Rotina para Apresentar Mensagem de Venda dos Clientes                       *
;*******************************************************************************
Proc Mensagem_Venda()
Private MSG_VENDA  

MSG_VENDA = ""
GetRecord "\\Sistemas\\Cadastro\\DestMsg" [Codigo] To REG_DESTMSG
If RetVal
   Then MSG_VENDA = REG_DESTMSG["Observacoes"]
EndIf                        

If MSG_VENDA<>""
   Then Ler_Memo("Observa‡”es para Venda",11,01,10,76,MSG_VENDA)
EndIf        

EndProc ;(Mensagem_Venda)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
Private CONDPAGTO, DESCCONDPAGTO, FORMAPAGTO

Moveto "PedidoC"
If INICIO_PAGINA
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If Not IsBlank([Codigo da Empresa])
           Then PARAM_PEDUTIL = "CARREGA_PARAMETRO"
                Play "PED_UTIL"  
                
                If Not PARAM_PEDUTIL
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                If CHAVEC=1
                   Then [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                EndIf
        EndIf
EndIf

INICIO_PAGINA=False
FACA_CHAVEI=True

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

If CHAVEC=1
   Then Moveto [Codigo da Empresa]
   Else If [Situacao do Pedido]="CANCELADO" Or
           [Situacao do Pedido]="FATURADO"
           Then Mensagem("Pedido ["+[Situacao do Pedido]+"] !")
                If PARAM_PEDIDOIMP="N" 
                   Then If Not Checa_Supervisor()
                           Then CHAVEC=9
                                Return
                        EndIf      
                EndIf           
                Moveto [Situacao do Pedido]  
           Else If PARAM_PEDIDOIMP="N" And [Pedido Impresso]="S"
                   Then If SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"
                           Then If Not Checa_Supervisor()
                                   Then CHAVEC=9
                                        Return
                                EndIf        
                        EndIf    
                EndIf  
                Moveto [Situacao do Pedido]       
        EndIf
EndIf

While True
      TECLA=" Esc=Retornar  "
      If CHAVEC=0
         then TECLA=TECLA + "Del=Excluir  "
         else TECLA=TECLA + "             "
      endif
      TECLA=TECLA +"Alt+F=Fun‡”es                       PgDn"
      
      If CHAVEC=1 And IsBlank([])
         Then If Field()="Data de Emissao"
                 Then []=Today()
              EndIf
      Endif

      MSGCAMPO=Field()
      If Field()="Situacao do Pedido"
         Then MSGCAMPO="Aberto, Suspenso, Cancelado, Faturado"
      EndIf
      If Field()="Consumidor Final"
         Then MSGCAMPO="Consumidor Final (Sim/N„o)"
      EndIf
      If Field()="Codigo da Tabela"
         Then MSGCAMPO="C¢digo da Tabela de Pre‡o"
      EndIf
      If Field()="Codigo"
         Then MSGCAMPO="C¢digo do Destinatario"
      EndIf
      If Field()="Origem do Pedido"
         Then MSGCAMPO="Visita, Fone, Balc„o"
      EndIf
      
      If Field()="Codigo da Empresa"        Or
         Field()="Codigo da Destinacao"     Or
         Field()="Codigo"                   Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Condicao de Pagamento"    Or
         Field()="Forma de Pagamento"       Or 
         Field()="Numero_Carregamento"
         Then MSGCAMPO =MSGCAMPO +", [F1]Consultar tabela"
      EndIf
      
      Prompt TECLA
      
      Wait Field
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","DOWN","UP","F6","F5","F4","F7",
                 "F3","F10",-18,-33
                 
      If RetVal=-33
         Then 
           Switch
             Case  SYS_CODIGO_CLIENTE="0227" :  
               MSGCAMPO=""
               Echo Normal
               Echo Off
               ShowPopup " Fun‡”es " CENTERED
                 "F5    Cli~e~nte          " : " Cliente                         " : "F5",
                 "F3    ~E~ndere‡o/Cobran‡a " : " Endere‡o/Cobranca               " : "F3",
                 Separator,
                           "F4    ~M~udar Pre‡o/CPagto/Empresa" : " Alterar Pre‡os/Condi‡„o Pagto/Empresa" : "F4",
                 "F7    Copiar ~P~edido    " : " Copiar Pedido                   " : "F7",
                 Separator,
                 "F6    ~I~mprimir          " : " Imprimir Pedido                 " : "F6",
                 "Alt+E E~n~via e-mail     " : " Envia e-mail para cliente       " : "EMAIL",
                 Separator,
                 "~C~ancelar               " : " Cancelar a Opera‡„o             " : "CANCELAR"
               EndMenu
               To MenuVar
               Echo off 
                    
               If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
               EndIf
               RetVal=MenuVar
            
             Otherwise   :
               MSGCAMPO=""
               Echo Normal
               Echo Off
               ShowPopup " Fun‡”es " CENTERED
                 "F5    Cli~e~nte          " : " Cliente                         " : "F5",
                 "F3    ~E~ndere‡o/Cobran‡a " : " Endere‡o/Cobranca               " : "F3",
                 Separator,
                           "F4    ~M~udar Pre‡o/CPagto/Empresa" : " Alterar Pre‡os/Condi‡„o Pagto/Empresa" : "F4",
                 "F7    Copiar ~P~edido    " : " Copiar Pedido                   " : "F7",
                 Separator,
                 "F6    ~I~mprimir          " : " Imprimir Pedido                 " : "F6",
                 Separator,
                 "~C~ancelar               " : " Cancelar a Opera‡„o             " : "CANCELAR"
               EndMenu
               To MenuVar
               Echo off 
                    
               If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
               EndIf
               RetVal=MenuVar
           Endswitch  
             
      EndIf

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
              Field()="Codigo"                   Or
              Field()="CFO"                      Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"    Or
              Field()="Forma de Pagamento"       Or 
              Field()="Numero_Carregamento"      Or
              Field()="Cidade"                   Or
              Field()="UF"
              Then If CONSULTAF1()
                      Then If Field()="Cidade"
                              Then [UF  ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf
            EndIf
      Case RetVal="F4" And CHAVEC=0:
           ncampo=Field()

           If [Situacao do Pedido]<>"ABERTO"
              Then Mensagem("Mudan‡a de Pre‡os somente Pedido em ABERTO !")
                   Loop
           EndIf
           If Not Checagem_Pagina1() Then Loop EndIf

           Play "TbprNew"
           
           if Ok_TbprNew 
              then 
                   MSG_AGUARDE="Aguarde, Processando Valores"
                   Moveto "PedidoG"
                   Moveto [Item do Pedido]
                   NR=ImageCMax()
                   Scan
                     Aguarde(MSG_AGUARDE+Barra(NR,[Item do Pedido]))
                     Echo Normal
                     Echo Off
     
                     VSD_I_Codigo_Item=[Codigo do Item]
                     If Not Pega_Preco("Altera")
                        Then QuitLoop
                     EndIf
                   EndScan
                   Play "PED_UTIL"
                   
                   Carrega_array_Itens("PedidoI")
                   CALC_PEDIDO()
                   
                   Moveto "PedidoV"
                   If Not RecordStatus("New")
                      Then Calc_Venctos()
                   EndIf
                   Moveto "PedidoC"
     
                   LimpAguarde()
           endif
           
           moveto field ncampo

           release vars ncampo,Ok_TbprNew
           
      Case RetVal="PGDN":
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If Checa_Supervisor()
                      Then If QuerExcluir("")
                              Then GRAVA_LOG=True
                                   EXCLUSAO_C()
                              Else UnLockRecord
                           EndIf
                      Else CONFGERAL("Cancelar Pedido de Venda")
                           If OK="S"
                              Then [Situacao do Pedido]="CANCELADO"
                           Endif
                           UnLockRecord
                   EndIf
                   CHAVEC=9
                   QuitLoop
           EndIf
      Case Retval="F3":
           Endereco()
      Case Retval="F7" and CHAVEC=0:
           If Not Copiar()
              Then Loop
           EndIf
           CHAVEC=9
           QuitLoop
      Case RetVal=-18 or RetVal="EMAIL":
          
           ;; --  mecanismo personalizado tem que cobrar cliente 
           ;;     verificar necessidade do cliente e fazer or‡amento                        

           If SYS_CODIGO_CLIENTE<>"0227"
              Then 
                   Mensagem("Fun‡Æo inativa !// //Contactar Suporte Vise caso queira utilizar !")
                   Loop
           EndIf           
           ;; ---------------------------------------------------------------------------------------

           ;Deleta_Arquivo("ViseMail.INI")
           
           ;Copia_Arquivo("\\Sistemas\\Cadastro\\ViseMail.ini \\Sistemas\\Vendas\\ViseMail.ini")
           ;Copia_Arquivo("\\Sistemas\\Cadastro\\ViseMail.exe \\Sistemas\\Vendas\\ViseMail.exe")
           
           GetRecord "\\sistemas\\Cadastro\\Destinat" [PedidoC->Codigo] to REG_Clie
           If Retval
             then VSD_TG_EDest= REG_Clie["Endereco_Eletronico"]
           EndIf

           switch
             case SYS_CODIGO_CLIENTE="0227" :
               VSD_TG_ESubject= "Confirmacao do Pedido Siri Kids "+[Numero Pedido Origem]
               VSD_TG_Imagem  = "c:\\vise\\imagem.JPG"
             
             otherwise                      :
               VSD_TG_ESubject= "Confirmacao do Pedido "          +[Numero Pedido Origem]
               VSD_TG_Imagem  = ""
               
           endswitch
           
           ;FileWrite Append "ViseMail.INI" From "\n\n"
           ;FileWrite Append "ViseMail.INI" From "To="+VSD_TG_EDest+"\n"
           ;FileWrite Append "ViseMail.INI" From "CC= \n"
           ;FileWrite Append "ViseMail.INI" From "BCC= \n"
           ;FileWrite Append "ViseMail.INI" From "Attach= \n"  ;+ArqImp+".pdf \n"
           ;FileWrite Append "ViseMail.INI" From "Subject=" +VSD_TG_ESubject+"\n"
           ;FileWrite Append "ViseMail.INI" From "BodyFile="+VSD_TG_Imagem  +"\n"
           
           ;Arq="\\Sistemas\\Vendas\\DOSPrint.INI"
           ;ARQNW="\\Sistemas\\Vendas\\DOSPrinter.INI"
          
           ;ExecVise("REN "+Arq+" \""+ARQNW+"\"")

           ;ExecVise("EXE \\Sistemas\\Vendas\\ViseMail.exe")
           ExecVise("EXE c:\\vise\\ViseMail.exe "+SubStr(Directory(),1,1)+" "+PrivDir()+"MAILPED"+" "+VSD_TG_EDest)
           
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Tabela":
                If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"                 
                   Then If PARAM_VISITA="S"
                           Then Moveto [Origem do Pedido]
                           Else Moveto [Comissao do Representante]
                        EndIf   
                   Else Moveto [Forma de Pagamento]
                EndIf   
           Case Field()="Forma de Pagamento"   :
                Moveto [Condicao de Pagamento]                
           Case Field()="Condicao de Pagamento":
                If PARAM_VISITA="S"
                   Then Moveto [Origem do Pedido]
                   Else Moveto [Comissao do Representante]
                EndIf 
           Case Field()="Origem do Pedido":
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante":
                Moveto [Codigo do Representante]
           Case Field()="Codigo do Representante":
                Moveto [Codigo]
           Case Field()="Razao Social":
                Moveto [Codigo]
           Case Field()="Consumidor Final":
                Moveto [Codigo]
           Case Field()="CFO":
                Moveto [Codigo da Destinacao]
           Case Field()="Codigo da Destinacao":
                Moveto [Numero_Carregamento]
           Case Field()="Data de Emissao" :
                Moveto [Codigo da Destinacao]                
           Case Field()="Numero Pedido Origem":
                If CHAVEC=1
                   Then Moveto [Codigo da Empresa]
                   Else Moveto [Situacao do Pedido]
                EndIf
           Case Field()="Numero_Carregamento":
                If [Sistema Gerador]<>"MA"
                   Then Moveto [Numero Pedido Origem]
                   Else Moveto [Situacao do Pedido  ]
                EndIf  

           Case Field()="Situacao do Pedido":
                If CHAVEC=1
                   Then Moveto [Codigo da Empresa]
                   Else If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                EndIf
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then EXCLUSAO_C()
                        CHAVEC=9
                        QuitLoop
                EndIf
           OtherWise:
                Left
           EndSwitch
      Case Retval="F5":
           DADOS_CLIE()
           If Not IsBlank([Codigo])
              Then Moveto [Codigo do Representante]
              Else Moveto [Codigo]
           EndIf
      Case Retval="F6":  
           npedido = [PedidoC->Numero do Pedido]
           ncampo=Field()
           If IMPRIME()
              Then CHAVEC=9
                   QuitLoop
              Else Moveto Field ncampo
           EndIf
      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()="UF"                      Or
                      Field()="Condicao de Pagamento"   Or
                      Field()="Forma de Pagamento"      Or
                      Field()="Situacao do Pedido"      Or
                      Field()="Origem do Pedido"
                      Then Loop
                   EndIf
           EndIf

           Switch
           Case Field()="Codigo da Empresa":
                [Situacao do Pedido]="ABERTO"
                PARAM_PEDUTIL = "CARREGA_PARAMETRO"
                Play "PED_UTIL"  
           
                If PARAM_PEDUTIL
                   Then [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        Moveto [Numero Pedido Origem]
                EndIf
           Case Field()="Situacao do Pedido":
                If IsBlank([])
                   Then []="ABERTO"
                EndIf
                If [Sistema Gerador]<>"MA"
                   then Moveto [Numero Pedido Origem]
                   else moveto [Numero_Carregamento ]
                endif   
           Case Field()="Numero_Carregamento":
                Moveto [Codigo da Destinacao]

           Case Field()="Data de Emissao":
                switch 
                  case isblank([Data de Entrega]) and sys_codigo_cliente="0413" : [Data de Entrega]=[Data de Emissao]+25
                endswitch
                Moveto [Data de Entrega]

           Case Field()="Data de Entrega":
                If IsBlank([])
                   Then []=[Data de Emissao]
                EndIf
                If []<[Data de Emissao]
                   Then Mensagem("Data de Entrega invalida !")
                        Loop
                EndIf
                Moveto [Codigo]
           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!")
                           Else V_DESTIN=[]
                                Moveto [Data de Emissao]  
                        EndIf
                EndIf
           Case Field()="Codigo":
                If [Situacao do Cliente]="PESSIMO" And [Situacao do Pedido]<>"CANCELADO"
                   Then CLIENTE_PESSIMO=False
                        Mensagem("Verificar a Situa‡„o do Cliente !// Status="+[Situacao do Cliente])
                        Loop
                EndIf
                If [Situacao do Cliente]="RECADASTRO"
                   Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
                        Loop
                EndIf
                
                Checa_Cliente()
                
                If [Codigo]<>V_COD
                   Then ENDERECOS()
                        V_REPRES =[Codigo do Representante]
                        [Codigo do Representante]=""
                        [Codigo do Representante]=V_REPRES
                    
                        V_COD=[Codigo]
                EndIf
                
                If Search("VEND",[Descricao da Destinacao])>0
                   Then Mensagem_Venda()
                EndIf

                If PARAM_CONDPAGTO<>"N"  
                   Then Moveto [Codigo]
                        Ativa_Lookup()
                        Moveto [Codigo]
                        Locate [PedidoC->Codigo]
                        If RetVal
                           Then CONDPAGTO     = [CondPagto Cliente      ]
                                DESCCONDPAGTO = [Descricao CP Cliente   ]
                                FORMAPAGTO    = [Forma Pagamento Cliente]
                        EndIf             
                        KeyPress "ESC"   
                        [Condicao de Pagamento]=CONDPAGTO
                        [Descricao CondPagto  ]=DESCCONDPAGTO
                        [Forma de Pagamento   ]=FORMAPAGTO
                        
                        Moveto "PedidoV"
                        If Not RecordStatus("New")
                           Then Calc_Venctos()
                        EndIf
                        Moveto "PedidoC" 
                EndIf

                Moveto [Consumidor Final]
           Case Field()="Consumidor Final":
                If IsBlank([])
                   Then []="N"
                EndIf
                If [Nome Fantasia EmitDest]="DIVERSOS"
                   Then Moveto [Razao Social]
                   Else Moveto [Codigo do Representante]
                EndIf
           Case Field()="IE":
                Moveto [Codigo do Representante]
           Case Field()="Codigo do Representante":
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante":
                If PARAM_VISITA="S" 
                   Then Moveto [Origem do Pedido]
                   Else If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E" 
                           Then Moveto [Codigo da Tabela]
                           Else Moveto [Condicao de Pagamento]
                        EndIf   
                EndIf                   
           Case Field()="Condicao de Pagamento":
                Moveto [Forma de Pagamento]
           Case Field()="Forma de Pagamento":
                Moveto [Codigo da Tabela]
           Case Field()="Codigo da Tabela":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Checar cliente                                                  *
;*******************************************************************************
Proc Checa_Cliente()

If Isblank([Codigo])
   Then Return False
EndIf   

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

Return False

EndProc ;Checa_Cliente()

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Checagem_Pagina1()
Private CAMPOS_OK, NCAMPO, OBS

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Inv lida !") 
  Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
  Case IsBlank([Situacao do Pedido]):      Mensagem("Situa‡„o do Pedido Invalida !")
  Case IsBlank([Origem do Pedido]):
       If PARAM_VISITA="S"
          Then Mensagem("Origem do Pedido Invalido !")
          Else CAMPOS_OK=True
       EndIf
  OtherWise: CAMPOS_OK=True
EndSwitch

;*** Situacao do Cliente ***
If [Situacao do Cliente]="RECADASTRO"
   Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
        CAMPOS_Ok=False
EndIf
If [Situacao do Cliente]="PESSIMO"
   Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
        If Isassigned(CLIENTE_PESSIMO)
           Then If CLIENTE_PESSIMO
                   Then CAMPOS_Ok=True
                EndIf
           Else If Checa_Supervisor()
                   Then CAMPOS_Ok=True     
                EndIf   
        EndIf           
EndIf

;*** Pega UF Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[PedidoC->Codigo da Empresa],"Empresa: "+[PedidoC->Codigo da Empresa]+" sem UF !")
   Then UF_EMPRESA=REG_BUSCA_LOOKUP["UF Empresa"]
        TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
        ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
EndIf

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

;*** Checagem da Tabela de Preco ***
Moveto [Codigo da Tabela]
Ativa_Lookup()
Moveto [Codigo da Tabela]
Locate [PedidoC->Codigo da Tabela]
If RetVal
   Then If [Ativa]="N"
           Then Mensagem("Tabela de Pre‡o Inativa !")
                CAMPOS_Ok=False
        EndIf
EndIf
KeyPress "ESC"

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

;*** Aliquota do Estado ***
Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [PedidoC->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
   Else UF_ALIQUOTA_ICMS=BlankNum()
EndIf
KeyPress "ESC"

DESTIN_INATIVA   = ""
TRIB_ICMS        = ""
TRIB_IPI         = ""
OPCAO_RED_BCICMS = "1"
TP_MOV_ESTOQUE   = "S"
ALIQUOTA_CREDITO_ICMS_NOSN = BlankNum()
CALCULO_NF_AUTOMATICO="A"

Moveto [Codigo da Destinacao]
Ativa_Lookup()
Moveto [Codigo da Destinacao]
Locate [PedidoC->Codigo da Destinacao]
If RetVal
   Then If [ICMS Aliquota do Estado]<>"S"
           Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
        EndIf
        CALCULO_NF_AUTOMATICO=[Calcula_Nota]
        TRIB_ICMS=[Tributacao de ICMS]
        TRIB_IPI =[Tributacao de IPI ]
        OPCAO_RED_BCICMS=[Sem Reducao BCICMS]
        ALIQUOTA_CREDITO_ICMS_NOSN =[Aliquota CredICMS NOSN]
        TP_MOV_ESTOQUE=[Tipo Movimento Estoque]
        DESTIN_INATIVA=[Inativo Destin]
EndIf
KeyPress "ESC"

If DESTIN_INATIVA="S" 
   Then Mensagem("Destina‡Æo "+[PedidoC->Codigo da Destinacao]+" est  inativa!")
        Return False 
EndIf

;*** Tabela de Kilometragem ***
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [PedidoC->Codigo]
If RetVal
   Then If IsBlank([Km Frete])
           Then KM_FRETE=0
           Else KM_FRETE=[Km Frete]
        EndIf
   Else KM_Frete=0
EndIf
KeyPress "ESC"

TAXA_FRETE=0
VRMINIMO_FRETE=0
Moveto [Lookup_Tabela_Frete]
Ativa_Lookup()

Scan
  If (KM_Frete>=[Km Inicial]) And
     (KM_Frete<=[Km Final  ])
     Then TAXA_FRETE    =[Taxa]
          VRMINIMO_FRETE=[Valor Minimo]
          QuitLoop
  EndIf
EndScan
KeyPress "ESC"

;*** Simples Nacional ***
If (TPEMPR="SIMPLES NACIONAL"    Or
   TPEMPR="SIMPLES NAC. ESRB")   And
   TP_MOV_ESTOQUE="S"            And
   [TIPO PESSOA]="JURIDICA"      And
   SubStr(Directory(),1,1)<>"X"  And
   Search("VEND",[Descricao da Destinacao])>0 
   Then Moveto [Codigo]
        If Busca_Lookup("Codigo",[PedidoC->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:
                 ;   
                 ;       MSG=    Completa([PedidoC->Nome Fantasia Empresa ]+"="+TPEMPR,70," ")+"//" 
                 ;       MSG=MSG+Completa([PedidoC->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("- 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 (REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NACIONAL" And
                        REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NAC. ESRB") And
                        ALIQUOTA_CREDITO_ICMS_NOSN<=0:
                        
                        MSG=    Completa([PedidoC->Nome Fantasia Empresa ]+" = "+TPEMPR,70," ")+"//" 
                        MSG=MSG+Completa([PedidoC->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("- 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

Moveto "PedidoC"
Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Localizar Enderecos                                             *
;*******************************************************************************
Proc Closed Enderecos()
UseVars AutoLib, ErrorProc
Private AutoLib, ErrorProc, TPDEST, NCAMPO, CODIGO_OK

NCAMPO=Field()
TPDEST=[Tipo]
[Endereco de Entrega]=""      [Endereco de Cobranca]=""
[Bairro de Entrega  ]=""      [Bairro de Cobranca  ]=""
[CEP de Entrega     ]=""      [CEP de Cobranca     ]=""
[Cidade de Entrega  ]=""      [Cidade de Cobranca  ]=""
[UF de Entrega      ]=""      [UF de Cobranca      ]=""

CODIGO_OK=False
Moveto [Codigo_Entrega_Cobranca]
Ativa_Lookup()
Moveto [Codigo]
Locate [PedidoC->Codigo]
If RetVal
   Then CODIGO_OK=True
EndIf
KeyPress "ESC"

If CODIGO_OK
   Then [Codigo_Entrega_Cobranca]=[Codigo]
EndIf
If IsBlank([Endereco de Entrega])
   Then [Endereco de Entrega]="O MESMO"
EndIf
If IsBlank([Endereco de Cobranca])
   Then [Endereco de Cobranca]="O MESMO"
EndIf
Moveto Field NCAMPO
EndProc   ;  (EnderecoS)

;*******************************************************************************
;* Digitacao de Enderecos                                                      *
;*******************************************************************************
Proc Endereco()
Private Campo_Atual

Campo_Atual=Field()

VSD_E_Endereco=[Endereco de Entrega ]
VSD_E_Bairro  =[Bairro de Entrega   ]
VSD_E_Cidade  =[Cidade de Entrega   ]
VSD_E_UF      =[UF de Entrega       ]
VSD_E_CEP     =[CEP de Entrega      ]

VSD_C_Endereco=[Endereco de Cobranca]
VSD_C_Bairro  =[Bairro de Cobranca  ]
VSD_C_Cidade  =[Cidade de Cobranca  ]
VSD_C_UF      =[UF de Cobranca      ]
VSD_C_CEP     =[CEP de Cobranca     ]

INICIO_DIALOG=True
OP_SHOWD="Enderecos"

Showdialog "Endere‡os Complementares" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","PGDN","F8"
   @ 9,08 height 14 width 63

   Frame Single From 0,0 to 5,60
   @ 0,1 ?? " Local de Entrega "
   paintcanvas attribute 26 0, 0, 5, 60
   Label  @ 1,01 "CEP" for "E_CEP"
   Accept @ 2,02  Width 13 "A10" picture "##.###-###" Tag "E_CEP" to VSD_E_CEP
   Label  @ 1,15 "Endere‡o" for "E_Endereco"
   Accept @ 2,16  Width 43 "A40" picture "!*!" Tag "E_Endereco" to VSD_E_Endereco

   Label  @ 3,01 "Bairro" for "E_Bairro"
   Accept @ 4,02  Width 23 "A20" picture "!*!" Tag "E_Bairro" to VSD_E_Bairro
   Label  @ 3,25 "Cidade" for "E_Cidade"
   Accept @ 4,26  Width 23 "A20" picture "!*!" Tag "E_Cidade" to VSD_E_Cidade
   Label  @ 3,49 "UF" for "E_UF"
   Accept @ 4,50  Width 05 "A2" picture "!*!" Tag "E_UF" to VSD_E_UF

   Frame Single From 6,0 to 11,60
   @ 6,1 ?? " Local de Cobran‡a "
   paintcanvas attribute 30 6, 0,11, 60
   Label  @ 7,01 "CEP" for "C_CEP"
   Accept @ 8,02  Width 13 "A10" picture "##.###-###" Tag "C_CEP" to VSD_C_CEP
   Label  @ 7,15 "Endere‡o" for "C_Endereco"
   Accept @ 8,16  Width 43 "A40" picture "!*!" Tag "C_Endereco" to VSD_C_Endereco

   Label  @ 9,01 "Bairro" for "C_Bairro"
   Accept @ 10,02  Width 23 "A20" picture "!*!" Tag "C_Bairro" to VSD_C_Bairro
   Label  @ 9,25 "Cidade" for "C_Cidade"
   Accept @ 10,26  Width 23 "A20" picture "!*!" Tag "C_Cidade" to VSD_C_Cidade
   Label  @ 9,49 "UF" for "C_UF"
   Accept @ 10,50  Width 05 "A2" picture "!*!" Tag "C_UF" to VSD_C_UF

Enddialog
Mouse Show
[Endereco de Entrega ]=VSD_E_Endereco
[Bairro de Entrega   ]=VSD_E_Bairro
[Cidade de Entrega   ]=VSD_E_Cidade
[CEP de Entrega      ]=VSD_E_CEP
[UF de Entrega       ]=VSD_E_UF
[Endereco de Cobranca]=VSD_C_Endereco
[Bairro de Cobranca  ]=VSD_C_Bairro
[Cidade de Cobranca  ]=VSD_C_Cidade
[CEP de Cobranca     ]=VSD_C_CEP
[UF de Cobranca      ]=VSD_C_UF

Moveto Field Campo_Atual

EndProc

;********************************************************************************
;* Rotina para a escolha do Numero do Pedido                                    *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_NPEDIDO" : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo="TG_NPEDIDO"  :
                 VSDGNPEDIDO=AlinhM(ControlValue("TG_NPEDIDO"),6)
                 COD1=VSDGNPEDIDO
                  If COD1=[Numero do Pedido]
                     Then Mensagem("N§ de Pedido ja' existe !")
                     Else CODIGOANT =[Numero do Pedido]
                          UnLockRecord

                          Moveto [Numero do Pedido]
                          Locate COD1
                          If RetVal
                             Then Mensagem("N§ de Pedido ja' existe !")
                                  Locate CODIGOANT
                                  LockRecord
                             Else Locate CODIGOANT
                                  LockRecord
                                  AcceptDialog
                           EndIf
                  EndIf
          EndSwitch
   EndSwitch
EndIf
Switch
  Case Campo="TG_NPEDIDO":
     MSG_CAMPO="Informe o novo n£mero do pedido"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Mouse Hide
Return Temp
EndProc

;*******************************************************************************
;* Nova Referencia                                                             *
;*******************************************************************************
Proc NOVAREF()
Private Hora

Do_It!

Aguarde("Copiando Pedido")

{Ask} {PedidoC} Check
Moveto [Numero do Pedido   ] TypeIn "~CODIGOANT"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then Hora=Time()

        {Ask} {Answer} TypeIn "Fast"
        Moveto [Numero do Pedido   ] TypeIn "Changeto ~COD1"
        Moveto [Data de Emissao    ] TypeIn "Changeto Today"
        Moveto [Data de Entrega    ] TypeIn "Changeto Today"
        Moveto [Situacao do Pedido ] TypeIn "Changeto ABERTO"
        Moveto [Numero_Carregamento] TypeIn "Changeto Blank"
        Moveto [Codigo_Usuario     ] TypeIn "Changeto ~SYS_CHAPA_USUARIO"
        Moveto [Data_Inclusao      ] TypeIn "Changeto Today"
        Moveto [Hora_Inclusao      ] TypeIn "Changeto ~Hora"
        Moveto [Numero_Controle_Dia] TypeIn "Changeto ~SYS_CONTROLE_DIA"
        Do_It!

        {Tools} {More} {Add} {Answer} {PedidoC} {NewEntries}

        ClearAll

        {Ask} {PedidoI} Check
        Moveto [Numero do Pedido   ] TypeIn "~CODIGOANT"
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then {Ask} {Answer} TypeIn "Fast"
                Moveto [Numero do Pedido   ] TypeIn "Changeto ~COD1"
                Moveto [Quantidade Faturada] TypeIn "Changeto Blank"
                Do_It!

                {Tools} {More} {Add} {Answer} {PedidoI} {NewEntries}

                ClearAll
        EndIf

        {Ask} {PedidoG} Check
        Moveto [Numero do Pedido   ] TypeIn "~CODIGOANT"
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then {Ask} {Answer} TypeIn "Fast"
                Moveto [Numero do Pedido   ] TypeIn "Changeto ~COD1"
                Moveto [QtdF1              ] TypeIn "Changeto Blank"
                Moveto [QtdF2              ] TypeIn "Changeto Blank"
                Moveto [QtdF3              ] TypeIn "Changeto Blank"
                Moveto [QtdF4              ] TypeIn "Changeto Blank"
                Moveto [QtdF5              ] TypeIn "Changeto Blank"
                Moveto [QtdF6              ] TypeIn "Changeto Blank"
                Moveto [QtdF7              ] TypeIn "Changeto Blank"
                Moveto [QtdF8              ] TypeIn "Changeto Blank"
                Moveto [QtdF9              ] TypeIn "Changeto Blank"
                Moveto [QtdF10             ] TypeIn "Changeto Blank"
                Moveto [QtdF11             ] TypeIn "Changeto Blank"
                Moveto [QtdF12             ] TypeIn "Changeto Blank"
                Moveto [Quantidade Faturada] TypeIn "Changeto Blank"
                Do_It!

                {Tools} {More} {Add} {Answer} {PedidoG} {NewEntries}

                ClearAll
        EndIf

        Mensagem("Pedido copiado !")
   Else Mensagem("Pedido n„o foi copiado, verificar !")
EndIf

ClearAll
LimpAguarde()

Carrega_Tabelas()

CoEdit "PedidoC"
PickForm "4"

Moveto [Numero do Pedido]
Locate CODIGOANT

EndProc

;*******************************************************************************
;* Rotina para Copiar Pedidos                                                  *
;*******************************************************************************
Proc Copiar()
Private campoant

COD1=""

Echo Normal
Echo Off

Campoant=Field()

ShowDialog "Novo pedido" Proc "SD_Dialog"
Trigger "OPEN","ARRIVE"
Key "F1","ENTER","ESC","TAB",
    -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
 @ 01,01 Height 04 Width 21

  Label  @ 01,02 "N§" For "TG_NPEDIDO"
  Accept @ 01,07 Width 09 "A6"  Picture "#*#" Tag "TG_NPEDIDO" To VSDGNPEDIDO

EndDialog
Mouse Show
If Not RetVal
   Then Moveto Field campoant
        Return False
   Else NovaRef()
        Return True
EndIf

EndProc   ;  (Copiar)



;*******************************************************************************
;* Rotina para Dados do Cliente                                                *
;*******************************************************************************
Proc Dados_Clie()
Private CODIGO,CGC,CLIEOk

ClieOk=True
Moveto [Nome Fantasia EmitDest]
While True

      TECLA=" Esc=Retornar  F2=Gravar_Dados  F3=Endere‡o/Cobranca  "

      Prompt TECLA
      MSGCAMPO=Field()
      If Field()="Consumidor Final"
         Then MSGCAMPO="Consumidor Final (Sim/N„o)"
      EndIf
      If Field()="CGC"
         Then MSGCAMPO="CNPJ/CPF"
      EndIf
      If Field()="Nome Fantasia EmitDest"
         Then MSGCAMPO="Nome Fantasia"
      EndIf
      If Field()="Telefone"               
         Then If[UF]="EX"
                Then MSGCAMPO="+PP XX NNNN-NNNN"
                Else MSGCAMPO="XX NNNN-NNNN"
              EndIf 
      EndIf 
      
      If Field()="Codigo do Representante"  Or
         Field()="Cidade"                   Or
         Field()="UF"
         Then TECLA=TECLA + "F1=Tabelas "
      EndIf

      Wait Field
           Until "ESC","ENTER","FIELDVIEW","F35","F2","F3","F1"

      Switch
      Case RetVal="F1":
           If Field()="Codigo do Representante"  Or
              Field()="Cidade"                   Or
              Field()="UF"
              Then If CONSULTAF1()
                      Then If Field()="Cidade"
                              Then [UF  ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf
            EndIf
      Case Retval="F3":
           Endereco()
      Case RetVal="F2":
           UnLockRecord
           KeyPress "F7"
           
           If PARAM_CGC_CLIENTE="S" And IsBlank([PedidoC->Codigo])
              Then CGC=[CGC]
                   If IsBlank(CGC)                     
                      Then ClieOk=False 
                           Mensagem("CNPJ/CPF nÆo informado !")
                           QuitLoop 
                   EndIf
                   If Not Checa_CGC_CPF_Formatado(CGC) 
                      Then ClieOk=False 
                           QuitLoop 
                   EndIf

                   Moveto "\\Sistemas\\Cadastro\\Destinat"
                   If PARAM_CGC_FORNECEDOR="S"
                      Then Moveto [CGC]
                           Locate CGC
                      Else Moveto [Tipo]
                           Locate IndexOrder by "tipo_cgc" "C",CGC
                   EndIf
                   If Retval
                      Then ClieOk=False
                           Mensagem("J  existe pessoa com este CNPJ/CPF cadastrado !// verificar !")
                           QuitLoop
    									Else CODIGO=Checa_Codigo("")
                           If IsBlank(CODIGO)
                              Then ClieOk=False
                                   QuitLoop
                           EndIf   
                   EndIf
              Else CGC   =""
                   CODIGO=[Codigo]

                   Moveto "\\Sistemas\\Cadastro\\Destinat"

                   CODIGO=Checa_Codigo(CODIGO)
                   If IsBlank(CODIGO)
                      Then ClieOk=False
                           QuitLoop
                   EndIf   
           EndIf

           Moveto [Codigo]
           Locate CODIGO
           If Not Retval
              Then End Down
                   [Codigo             ]= CODIGO
                   [Tipo               ]= "C"
                   [CGC                ]= CGC
                   [Situacao do CLiente]="OTIMO" 
                   [Tipo Assistencia   ]="EVENTUAL"
                   [Pais               ]="BRASIL"
                   [Data_Cadastro      ]=Today()
                   [Inativo            ]="N"
                   [Data da Manutencao ]=Today()
                   [Hora da Manutencao ]=Time()
                   [Chapa              ]=SYS_CHAPA_USUARIO
           EndIf
           [Nome Fantasia EmitDest ]=[PedidoC->Nome Fantasia EmitDest ]
           [Razao Social           ]=[PedidoC->Razao Social           ]
           [Endereco               ]=[PedidoC->Endereco               ]
           [Bairro                 ]=[PedidoC->Bairro                 ]
           [CEP                    ]=[PedidoC->CEP                    ]
           [Cidade                 ]=[PedidoC->Cidade                 ]
           [UF                     ]=[PedidoC->UF                     ]
           [CGC                    ]=[PedidoC->CGC                    ] 

           Switch
             Case Search(".",[CGC])=4: [Tipo Pessoa]="FISICA"
             Case Search(".",[CGC])=3: [Tipo Pessoa]="JURIDICA"
           EndSwitch

           If SYS_CODIGO_CLIENTE="0222"
              Then [Regime_Tributario]="OUTROS" ;Pedido por Ana Carolina
           EndIF

           [IE                     ]=[PedidoC->IE                     ]
           [Telefone               ]=[PedidoC->Telefone               ]
           [Consumidor Final       ]=[PedidoC->Consumidor Final       ]
           [Codigo do Representante]=[PedidoC->Codigo do Representante]
           [Nome Fantasia Represent]=[PedidoC->Nome Fantasia Represent]
           
           UnLockRecord

           Moveto "\\Sistemas\\Cadastro\\End_Cob"
           Moveto [Codigo]
           Locate CODIGO
           If Not RetVal
              Then End
                   Down
                   [Codigo]=CODIGO
           EndIf
           [Endereco de Cobranca]=[PedidoC->Endereco de Cobranca]
           [Bairro de Cobranca  ]=[PedidoC->Bairro de Cobranca  ]
           [CEP de Cobranca     ]=[PedidoC->CEP de Cobranca     ]
           [Cidade de Cobranca  ]=[PedidoC->Cidade de Cobranca  ]
           [UF de Cobranca      ]=[PedidoC->UF de Cobranca      ]
           [Endereco de Entrega ]=[PedidoC->Endereco de Entrega ]
           [Bairro de Entrega   ]=[PedidoC->Bairro de Entrega   ]
           [CEP de Entrega      ]=[PedidoC->CEP de Entrega      ]
           [Cidade de Entrega   ]=[PedidoC->Cidade de Entrega   ]
           [UF de Entrega       ]=[PedidoC->UF de Entrega       ]

           If IsBlank([Endereco de Cobranca])
              Then [Endereco de Cobranca]="O MESMO"
           EndIf
           If IsBlank([Endereco de Entrega])
              Then [Endereco de Entrega]="O MESMO"
           EndIf
           UnLockRecord

           Moveto "PedidoC"
           KeyPress "F7"
           If IsBlank([Codigo]) 
              Then [Codigo]=CODIGO
           EndIf
           Return
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="ESC":
           Switch
             Case Field()="Nome Fantasia EmitDest":
                  var_IE=[IE]
                  [IE]=""
                  [IE]=var_IE
                  Release Vars var_IE

                  If QuerDesfazer("os dados deste cliente")
                     Then QuitLoop
                  Endif
             Case Field()="Consumidor Final":
                  Moveto [Nome Fantasia EmitDest]
             Case Field()="Razao Social":
                  Moveto [Consumidor Final]
             Case Field()="Codigo do Representante":
                  Moveto [UF]
             OtherWise:
                  Left
           EndSwitch
      Case Retval="ENTER":
           Switch
             Case Field() = "Nome Fantasia EmitDest":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [Consumidor Final]
             Case Field()="Consumidor Final":
                  If IsBlank([])
                     Then []="N"
                  EndIf
                  Moveto [Razao Social]
             Case Field()="Razao Social":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [CGC]
             Case Field()="CGC":
                  If IsBlank([]) Then Loop EndIf
                  If Not Checa_CGC_CPF_Formatado([]) Then Loop EndIf
                  Switch
                    Case Search(".",[CGC])=4:
                         [Tipo Pessoa]="FISICA"
                    Case Search(".",[CGC])=3:
                         [Tipo Pessoa]="JURIDICA"
                  EndSwitch
                  Moveto [Endereco]
             Case Field()="Cidade":
                  If IsBlank([]) Then Loop EndIf
                  Right
             Case Field() = "UF":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [Telefone]
             Case Field()="IE":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [Bairro]
             Case Field()="Codigo do Representante":
                  Moveto [Nome Fantasia EmitDest]
             OtherWise:
                  Right
           EndSwitch
      EndSwitch
EndWhile
Moveto "PedidoC"
If Not ClieOk
   Then KeyPress "F7"
EndIf   
EndProc   ;  (Dados_Clie)


;*******************************************************************************
;* Rotina para Checagem do C¢digo                                              *
;*******************************************************************************
Proc Checa_Codigo(cod)
Private cod

If Not IsBlank(cod)
   Then cod=AlinhE(cod)
EndIf   
If PARAM_REUTILIZA="S"
   Then  cod=Proximo_Codigo(Cod)
   Else If IsBlank(cod)
           Then End
                cod=Novo_Codigo()
        EndIf
EndIf
Return cod
EndProc

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
proc Novo_Codigo()
Private cod,vr

cod=[Codigo]
If IsBlank(cod)
   Then cod="0"
EndIf  
vr=SubStr(cod,1,1)
If vr>"9" or cod="9999"
   Then If SubStr(cod,2,3)="999"
	         Then Switch
					        Case vr="9" : cod="A000"
					        Case vr="Z" : Mensagem("Fim de codigo disponivel !")
									              cod=""
					        OtherWise   : cod=Chr(asc(vr)+1)+"000"
					      EndSwitch
					 Else cod=AlinhE(vr+StrVal(NumVal(SubStr(cod,2,3))+1))     
				EndIf	      
   Else cod=AlinhE(StrVal(NumVal(cod)+1))
EndIf

Return cod 
EndProc

;*******************************************************************************
;* Rotina para Gerar Proximo Codigo no Intervalo                               *
;*******************************************************************************
Proc Proximo_Codigo(cod)
Private cod, CodLivre

If IsBlank(PARAM_INICIAL) Or PARAM_INICIAL="0000"

   Then PARAM_INICIAL="0001"
EndIf

If Not IsBlank(cod)
   Then Moveto [Codigo]
        Locate cod   
        If retval
           Then Return cod  
           Else If cod>=AlinhE(PARAM_INICIAL) And cod<=AlinhE(PARAM_FINAL)
                   Then Return cod 
                   Else Mensagem("C¢digo "+cod+" fora do Intervalo !!")
                        Return ""    
                EndIf
        EndIf
EndIf

Home
CodLivre=AlinhE(PARAM_INICIAL)
Moveto [Codigo]
Locate IndexOrder by "Codigo" BestMatch AlinhE(PARAM_INICIAL)
While True
   If CodLivre<=AlinhE(PARAM_FINAL) and CodLivre>=AlinhE(PARAM_INICIAL)
      Then 
					 If CodLivre=[Codigo]
              Then CodLivre=Novo_Codigo()
                   Skip
              Else cod=CodLivre
                   Return cod
           EndIf
           If EOT()
              Then Loop
           EndIf
      Else Mensagem("Fim dos c¢digos livres!!")
           Return ""
   EndIf
EndWhile

EndProc

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()  
Moveto "PedidoG"
FACA_DIGITAF=True
While True                                                        

  Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
  Moveto [Item do Pedido]   VCITENS =ImageCCount()

  End
  NITEM = [Item do Pedido]
  Down Down
  Moveto [Item do Pedido]

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

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

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

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
              "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras   " : "F9",
              "F6  ~O~rganiza Itens      " : " Organiza Itens pela Descricao ou C¢digo do Item" : "F6",
              "~C~ancelar                " : " Cancelar a Opera‡„o              " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf

    Switch
    Case RetVal="F3":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item do Pedido]
         Inicia_Registro()
         DigitaI()
         QuitLoop
         
    Case Retval="F6":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")=True
            Then MENSAGEM("O Pedido de Venda deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         
         ORGANIZA_REF = False
         ORGANIZA_COR  = False
         
         Echo Normal
         Echo Off
         ShowPopup " Organizar por: " CENTERED
           "Referˆncia do Item        " : " Organiza os itens pela sua Referˆncia   " : "REF_IT",
           "Cor do Item               " : " Organiza os itens pelo sua Cor          " : "COR_IT",
           "~C~ancelar                " : " Cancelar a Opera‡„o                     " : "Cancelar" 
         EndMenu
         To OpcaoOrg
         echo off

         If OpcaoOrg="Cancelar" or OpcaoOrg="Esc"
            Then QuitLoop
         EndIf
        
         If OpcaoOrg="REF_IT"
            Then ConfGeral("Confirma organizar pela Referˆncia do item ?")
                 ORGANIZA_REF = True
            Else ConfGeral("Confirma organizar pela Cor do item ?") 
                 ORGANIZA_COR = True
         EndIf
        
         If Ok="S"
            Then Organiza_Itens()
         EndIf
         QuitLoop
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case RetVal="PGDN":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")=True
            Then MENSAGEM("O Pedido de Venda deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf

         PARAM_PEDUTIL = "GERA_PEDIDOI"
         Play "PED_UTIL"

         CHAVEI=9
         Return
    Case RetVal="PGUP" Or RetVal="ESC":
         Del 
         If CHAVEC=0 And ITEMALTERADO
          Then PARAM_PEDUTIL = "GERA_PEDIDOI"
               Play "PED_UTIL"
         EndIf
          
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
           Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
           Moveto [Item do Pedido]   VCITENS =ImageCCount()
           PAGINA("PedidoG","MR")
           SEQIT=[Item do Pedido]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If [Quantidade Faturada]>0 
                              Then Mensagem(
                                   Completa("N„o ‚ possivel excluir a ref. "+[Referencia]+", pois foi detectado ocorrˆncia",71," ")+"//"+
                                   Completa("de faturamento nesta referˆncia.",71," ")+"////"+
                                   Completa("Caso seja necess rio esta exclus„o, fa‡a o estorno no faturamento.",71," "))
                                   QuitLoop     
                           EndIf  
                           If QuerExcluir("")
                              Then CHAVEI=8
                                   GRAVA_LOG=True
                                   EXCLUSAO_I()
                                   Release Vars GRAVA_LOG
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate PEDIDO,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down Down
                 [Numero do Pedido]=PEDIDO
                 [Item do Pedido  ]=SEQIT
                 UnLockRecord
                 Locate PEDIDO,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

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

Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
Moveto [Item do Pedido]   VCITENS =ImageCCount()

While True

  Moveto [Item do Pedido]
  End
  NITEM = [Item do Pedido]
  Down Down
  Moveto [Item do Pedido]

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

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

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private Item, ItemNovo, Refer, Cor, Coluna

Prod_Esgt=""
If Not Pega_Dados_Item("Codigo_Barras") 
   Then Del
        Return
EndIf

Registro_Item("Ler")
VSD_I_Quantidade =[Quantidade]

CalcularPrecoTotal_Item()

Registro_Item("Gravar")

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

If RecordStatus("Locked") Then UnLockRecord EndIf

Sound 400 400
EndProc

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_Item(Origem) 
Private Item_ok, Origem, regdestinat, pessoa_regimetributario, pessoacontribuinte, regdestin, tpmovestoque,
        PEGA_DADOS_CODITEM, REG_ITEMCOM

If Not IsAssigned(PARAM_VERIFICA_GRADE) Then PARAM_VERIFICA_GRADE=True EndIf        
        
Item_ok=False
Switch
  Case Origem="Codigo_Barras" :
       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]
       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, "P", VSD_I_Codigo_Cor_Tecido
       If Not Retval
          Then Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, "T", VSD_I_Codigo_Cor_Tecido 
       EnDIf    
  OtherWise:     
       Moveto [Codigo do Item]
       Ativa_Lookup()
       VSD_I_REFERENCIA = ControlValue("I_Codigo_Item")
       TPITEMREF        = "D"
       Moveto [Referencia]  
       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TPITEMREF, ""
EndSwitch

If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"
       While True
         GetRecord "\\Sistemas\\Estoque\\Iten_Com" REG_BUSCA_LOOKUP["Codigo do Item"] To REG_ITEMCOM        
         If RetVal
            Then If Origem = "Codigo_Barras"        
                    Then If REG_ITEMCOM["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                 QuitLoop
                         EndIf
                         
                         ITOK=True
                         [Quantidade]=Dados_QTD             
                         CODIGO_BARRA=Dados_Item
                 EndIf          
            Else Mensagem("Item n„o Cadastrado !")
                 QuitLoop 
         EndIf         

         if Origem<>"Cor_Tecido" 
            then If REG_BUSCA_LOOKUP["Inativo"]="S" 
                    Then Switch 
                           Case SYS_CODIGO_CLIENTE= "0227" : 
                           OtherWise : Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                                                REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                                                REG_BUSCA_LOOKUP["Referencia"]+"//"+
                                                "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta inativo !")
                                       QuitLoop
                         EndSwitch               
                 EndIf        
         EndIf        
        
         If REG_BUSCA_LOOKUP["Producao Esgotada"] = "S"
            Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                           REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                           REG_BUSCA_LOOKUP["Referencia"]+"//"+
                          "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta com produ‡„o esgotada !")
                 ;QuitLoop         
         EndIf 
                 
         FAMILIA=REG_BUSCA_LOOKUP["Codigo da Familia"]           
         VSD_I_Descricao_Item = REG_BUSCA_LOOKUP["Descricao do Item"]
         VSD_I_Referencia     = REG_BUSCA_LOOKUP["Referencia"]            
        
         If Origem="Codigo_Barras"
            Then VSD_I_Codigo_Item    = CODIGO_BARRA
            Else VSD_I_Codigo_Item    = REG_BUSCA_LOOKUP["Codigo do Item"]
                 CODIGO_BARRA         = REG_BUSCA_LOOKUP["Codigo do Item"]
         EndIf
         
         If Origem="Codigo_Barras"
            Then Item =REG_BUSCA_LOOKUP["Codigo do Item"]
                 Refer=REG_BUSCA_LOOKUP["Referencia"]
                 Cor  =REG_BUSCA_LOOKUP["Codigo da Cor_Tecido"]
                 DesCor = REG_BUSCA_LOOKUP["Descricao da Cor_Tecido"]
                 [Codigo do Item]=REG_BUSCA_LOOKUP["Codigo do Item"]
                 
                 PARAM_PEDUTIL      = "ARRAY_MONTA_GRADE"
                 PARAM_PEDUTIL_TIPO = "Valida"
                 Play "PED_UTIL"
                
                 If Not PARAM_PEDUTIL
                     Then MSG_REF = "" ;Refer+"/"+DesCor+" com todos os tamanhos inativos/esgotados !" 
                          Return False
                 EndIf
                 Del
                 ItemNovo=True
              
                 Scan
                  If [Referencia          ]=Refer   And
                     [Codigo da Cor_Tecido]=Cor
                     Then ItemNovo=False
                          QuitLoop
                  EndIf        
                 EndScan

                 If Not ItemNovo
                    Then CHAVEI=0
                    Else While True
                          End
                          NITEM =[Item do Pedido]
                          Down Down
                          Moveto [Item do Pedido]
                      
                          Seta_Sequencia(NITEM,False)
                          If IsLockRecord()
                             Then Del
                                  Loop
                          EndIf
                          SEQIT=[]
                          QuitLoop             
                       EndWhile
                                
                       CHAVEI=1
                   
                       [Codigo do Item  ]=Item
                       VSD_I_Codigo_Item =[Codigo do Item]
                     
                       Pega_Preco("Novo")

                       If [Preco Unitario]<=0
                          Then Mensagem("Item sem tabela de pre‡o !")
                               Moveto [Item do Pedido]
                               Locate SEQIT
                               Return False
                       EndIf
                EndIf
           Else If SYS_CODIGO_CLIENTE<>"0171"
                   Then If PARAM_COR_TECIDO<>"S" Or (Origem="Cor_Tecido" And Not F6_ATIVADO)
                           Then Del
                                Moveto [Codigo do Item]
                                Locate VSD_I_Codigo_Item
                                If RetVal
                                   Then If SYS_CODIGO_CLIENTE="0326" Or SYS_CODIGO_CLIENTE="0322" Or SYS_CODIGO_CLIENTE="0434"
                                           Then BLOQUEIA_REF=False
                                           Else BLOQUEIA_REF=True
                                                ItemjaExiste=True
                                                CancelDialog
                                        EndIf        
                                   Else BLOQUEIA_REF=False
                                EndIf
                                If Not BLOQUEIA_REF
                                   Then End
                                        Down Down
                                        [Numero do Pedido]=PEDIDO
                                        [Item do Pedido  ]=SEQIT
                                        [Codigo da Tabela]=VSD_I_Tabela                                        
                                        UnLockRecord
                                        Locate PEDIDO,SEQIT
                                EndIf
                        EndIf
                EndIf
                
                If Origem<>"Cor_Tecido"  Or (Origem="Cor_Tecido" And Not F6_ATIVADO)
                   Then If Not ItemjaExiste   
                           Then [Codigo do Item       ]=VSD_I_Codigo_Item
                                [Referencia           ]=VSD_I_REFERENCIA
                        
                                If Origem="Cor_Tecido"
                                   Then [Codigo da Cor_Tecido ]=VSD_I_Codigo_Cor_Tecido
                                        VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                                EndIf

                                If PARAM_VERIFICA_GRADE 
                                   Then PARAM_PEDUTIL      = "ARRAY_MONTA_GRADE"
                                        PARAM_PEDUTIL_TIPO = "Valida"
                                        
                                        Play "PED_UTIL"
                
                                        If Not PARAM_PEDUTIL    
                                           Then Campo="I_Codigo_Item"
                                                MSG_REF = "" ;Refer+"/"+DesCor+" com todos os tamanhos inativos/esgotados !"
                                                Return False    
                                        EndIf
                                EndIf        
                                 
                                If PARAM_TABPR_ITEM<>"S" 
                                   Then Pega_Preco("Novo")
                                EndIf
                        EndIf     
                   Else If Origem="Cor_Tecido"
                           Then [Codigo do Item       ]=VSD_I_Codigo_Item
                                [Codigo da Cor_Tecido ]=VSD_I_Codigo_Cor_Tecido
                                VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                                F6_ATIVADO=False
                                Campo=Campo_Ant
                        EndIf        
                EndIf                         
        EndIf      
        
        If [Tipo do Item]="C" ; Servi‡o
           Then [Aliquota de ICMS      ]=BlankNum()
                [Aliquota de IPI       ]=BlankNum()

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

                         [COFINS_CST     ]="99"
                         [COFINS_Aliquota]=BlankNum()
                 EndIf        

                 If SYS_CODIGO_CLIENTE="0296"
                    Then ;[ISSQN_Municipio]=3122306
                         ;[ISSQN_UF       ]="MG"
                          Switch
                            Case Substr([PedidoC->CFO],1,1)="5" : [CFO]="5933"
                            Case Substr([PedidoC->CFO],1,1)="6" : [CFO]="6933"
                          EndSwitch  
                 EndIf
           Else
                 ;;alterado 12/02/2014 
                 ;;pega dados primeiro como "DEBITO/CREDITO"
                 TribCST=SubStr([Tipo Tributacao],2,2)
                 Switch
                   Case (TribCST="00" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="10" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="20" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="70" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0):
                        [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                         If OPCAO_RED_BCICMS="1"
                            Then [Aliquota Reduzida BCICMS]=BlankNum()
                         EndIf
        
                   Case (TribCST="10" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0) Or
                        (TribCST="70" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0):
                        [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                         If OPCAO_RED_BCICMS="1"
                            Then [Aliquota Reduzida BCICMS]=BlankNum()
                         EndIf
       
                   Case (TribCST="00" Or TribCST="10" Or TribCST="20" Or TribCST="70") And
                        TRIB_ICMS<>"D" And TRIB_ICMS<>"S":
                        [Tributacao de Icms]=TRIB_ICMS
                        [Aliquota de ICMS  ]=BlankNum()
                        Switch
                         Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
                         Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
                         Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
        							 EndSwitch
                 EndSwitch
                 VSD_I_CST_Item=[Tipo Tributacao]

                 [Tributacao de ISSQN     ]="N"
                 [Aliquota de ISSQN       ]=BlankNum()
        
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         getrecord "\\sistemas\\cadastro\\destinat" [PedidoC->Codigo] to regdestinat
                         if retval
                            then pessoa_regimetributario=regdestinat["Regime_Tributario"]
                            else pessoa_regimetributario=""
                         endif
                         pessoacontribuinte=true 
                         switch
                           case [PedidoC->Tipo Pessoa]="FISICA"             : pessoacontribuinte=false
                           case [PedidoC->IE         ]="ISENTO"             : pessoacontribuinte=false
                           case [PedidoC->IE         ]="NAOCONTRIBUINTE"    : pessoacontribuinte=false
                           case Search("SIMPLES",pessoa_regimetributario)>0 : pessoacontribuinte=false
                         endswitch

                         Switch
                           Case (Search("MOSTR",[PedidoC->Descricao da Destinacao])>0  Or
                                 Search("DEVOL",[PedidoC->Descricao da Destinacao])>0  Or
                                 Search("BRIND",[PedidoC->Descricao da Destinacao])>0) And
                             SYS_CLIENTE_CONFEC<>"":
                             [CSOSN]="400"

                           Case TP_MOV_ESTOQUE="S":
                             if Search("VEND",[PedidoC->Descricao da Destinacao])>0 and 
                                not pessoacontribuinte
                                then
                                     Switch
                                       Case [CSOSN]="101": [CSOSN]="102" 
                                       Case [CSOSN]="201": [CSOSN]="202" 
                                     EndSwitch
                             endif
                                     
                           Case TP_MOV_ESTOQUE="E" :
                             if Search("VEND",[PedidoC->Descricao da Destinacao])=0 and
                                not pessoacontribuinte
                                then
                                     Switch
                                       Case [CSOSN]="101": [CSOSN]="102" 
                                       Case [CSOSN]="201": [CSOSN]="202" 
                                     EndSwitch
                             endif
                                     
                         EndSwitch
                         VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]
        
                         Switch
                           Case [CSOSN]="101" Or [CSOSN]="900":         
                               ;[ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
        
                           Case [CSOSN]="201":
                               ;[ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf                                 
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])
        
                           Case [CSOSN]="202" Or [CSOSN]="203" Or [CSOSN]="500":
                               ;[ICMS_CREDSN_Aliquota]=BlankNum()
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])
        
                           OtherWise:
                               ;[ICMS_CREDSN_Aliquota]=BlankNum()
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
                         EndSwitch
                        
                   OtherWise: ;-- DEBITRO/CREDITO -----

                         [CSOSN               ]="900"
                        ;[ICMS_CREDSN_Aliquota]=BlankNum()
                          
                         If (TribCST="10" Or TribCST="30" Or TribCST="70")
                            Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                 Checa_MVA("PEDIDO",[Tributacao de ICMS],[Codigo MVA])
                            Else [MVA             ]=BlankNum()
                                 [ICMS_ST_Aliquota]=BlankNum()
                         EndIf 
        
                 EndSwitch
                 
         EndIf   

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

         GetRecord "\\Sistemas\\Vendas\\Destin" [PedidoC->Codigo da Destinacao] To regdestin
         If RetVal
            Then tpmovestoque=regdestin["Tipo Movimento Estoque"]  
            else tpmovestoque=""
         endif

          ;--- tratando IPI/Entrada ------------------------------------------------------
          if tpmovestoque="E" And Search("DEVOL",[PedidoC->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 tpmovestoque="E"
                     then
                          switch
                            case Search("DEVOL",[PedidoC->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="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"
                         [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"
                         [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  

         Item_Ok=True         
         If Origem="Codigo_Barras"
            Then Coluna=0       
                 For i from 1 to 12
                  If Len(RTrim(SubStr(Array_TM[i],4,2)))=1
                     Then If SubStr(Item,10,1)=SubStr(Array_TM[i],4,1)
                             Then Coluna=i
                                  QuitLoop
                          EndIf
                     Else If SubStr(Item,9,2)=SubStr(Array_TM[i],4,2)
                             Then Coluna=i
                                  QuitLoop
                          EndIf
                  EndIf
                 EndFor
                 Switch
                   Case Coluna=0 : [Qtd1  ]=[Qtd1  ]+Dados_QTD
                   Case Coluna=1 : [Qtd1  ]=[Qtd1  ]+Dados_QTD
                   Case Coluna=2 : [Qtd2  ]=[Qtd2  ]+Dados_QTD
                   Case Coluna=3 : [Qtd3  ]=[Qtd3  ]+Dados_QTD
                   Case Coluna=4 : [Qtd4  ]=[Qtd4  ]+Dados_QTD
                   Case Coluna=5 : [Qtd5  ]=[Qtd5  ]+Dados_QTD
                   Case Coluna=6 : [Qtd6  ]=[Qtd6  ]+Dados_QTD
                   Case Coluna=7 : [Qtd7  ]=[Qtd7  ]+Dados_QTD
                   Case Coluna=8 : [Qtd8  ]=[Qtd8  ]+Dados_QTD
                   Case Coluna=9 : [Qtd9  ]=[Qtd9  ]+Dados_QTD
                   Case Coluna=10: [Qtd10 ]=[Qtd10 ]+Dados_QTD
                   Case Coluna=11: [Qtd11 ]=[Qtd11 ]+Dados_QTD
                   Case Coluna=12: [Qtd12 ]=[Qtd12 ]+Dados_QTD
                 EndSwitch
                 [Quantidade]=[Quantidade]+Dados_QTD         
         EndIF                 
         QuitLoop
       EndWhile
  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf
Release Vars PARAM_VERIFICA_GRADE

Echo Off
Return Item_ok
EndProc

;*******************************************************************************
;* Verifica Quantidade Faturada ao Alterar a Quantidade da Referencia          *
;*******************************************************************************
Proc Verifica_QtdF(PARAM)
Private PARAM

Switch
  Case PARAM = "Quantidade Anterior" : 
       ANT_QTD1  = VSD_I_Qtd1
       ANT_QTD2  = VSD_I_Qtd2
       ANT_QTD3  = VSD_I_Qtd3
       ANT_QTD4  = VSD_I_Qtd4
       ANT_QTD5  = VSD_I_Qtd5
       ANT_QTD6  = VSD_I_Qtd6
       ANT_QTD7  = VSD_I_Qtd7
       ANT_QTD8  = VSD_I_Qtd8
       ANT_QTD9  = VSD_I_Qtd9
       ANT_QTD10 = VSD_I_Qtd10
       ANT_QTD11 = VSD_I_Qtd11
       ANT_QTD12 = VSD_I_Qtd12
        
       ANT_QTDF1  = VSD_I_FQtd1 
       ANT_QTDF2  = VSD_I_FQtd2
       ANT_QTDF3  = VSD_I_FQtd3
       ANT_QTDF4  = VSD_I_FQtd4
       ANT_QTDF5  = VSD_I_FQtd5
       ANT_QTDF6  = VSD_I_FQtd6
       ANT_QTDF7  = VSD_I_FQtd7
       ANT_QTDF8  = VSD_I_FQtd8
       ANT_QTDF9  = VSD_I_FQtd9
       ANT_QTDF10 = VSD_I_FQtd10
       ANT_QTDF11 = VSD_I_FQtd11
       ANT_QTDF12 = VSD_I_FQtd12

  Case PARAM = "Verifica Quantidade Faturada" :
       ;---- Compara‡Æo entre Quantidade Faturada e a Quantidade Informada
       If CHAVEI=0
          Then ITEM_MODIFICADO = True
               K = NumVal(RTrim(SubStr(Campo,6,2)))
               Switch
                 Case k=1  : If ANT_QTDF1 > 0 And VSD_I_Qtd1 < ANT_QTDF1 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd1  = ANT_QTD1
                             EndIf        
                 Case k=2  : If ANT_QTDF2 > 0 And VSD_I_Qtd2 < ANT_QTDF2 
                                Then ITEM_MODIFICADO = False 
                                    VSD_I_Qtd2  = ANT_QTD2
                             EndIf
                 Case k=3  : If ANT_QTDF3 > 0 And VSD_I_Qtd3 < ANT_QTDF3 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd3  = ANT_QTD3
                             EndIf
                 Case k=4  : If ANT_QTDF4 > 0 And VSD_I_Qtd4 < ANT_QTDF4 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd4  = ANT_QTD4
                             EndIf
                 Case k=5  : If ANT_QTDF5 > 0 And VSD_I_Qtd5 < ANT_QTDF5 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd5  = ANT_QTD5
                             EndIf
                 Case k=6  : If ANT_QTDF6 > 0 And VSD_I_Qtd6 < ANT_QTDF6 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd6  = ANT_QTD6
                             EndIf
                 Case k=7  : If ANT_QTDF7 > 0 And VSD_I_Qtd7 < ANT_QTDF7 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd7  = ANT_QTD7
                             EndIf
                 Case k=8  : If ANT_QTDF8 > 0 And VSD_I_Qtd8 < ANT_QTDF8 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd8  = ANT_QTD8
                             EndIf
                 Case k=9  : If ANT_QTDF9 > 0 And VSD_I_Qtd9 < ANT_QTDF9 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd9  = ANT_QTD9
                             EndIf
                 Case k=10 : If ANT_QTDF10 > 0 And VSD_I_Qtd10 < ANT_QTDF10 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd10  = ANT_QTD10
                             EndIf
                 Case k=11 : If ANT_QTDF11 > 0 And VSD_I_Qtd11 < ANT_QTDF11 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd11  = ANT_QTD11
                             EndIf
                 Case k=12 : If ANT_QTDF12 > 0 And VSD_I_Qtd12 < ANT_QTDF12 
                                Then ITEM_MODIFICADO = False 
                                     VSD_I_Qtd12  = ANT_QTD12
                             EndIf
               EndSwitch
               If Not ITEM_MODIFICADO
                  Then Mensagem("A quantidade informada ‚ menor que a quantidade faturada!") 
                       Release Vars ITEM_MODIFICADO
                       Return False
               EndIf       
        EndIf 
  Case PARAM = "Verifica Faturamento" :
       ANT_TAB   = Table()
       ANT_CAMPO = Field()
       
       PEDIDO_COM_QTDF = False
       Moveto "PedidoI"
       Scan
         If [Quantidade Faturada]>0
            Then PEDIDO_COM_QTDF = True
                 QuitLoop
         EndIf
       EndScan
       Moveto ANT_TAB
       Moveto Field ANT_CAMPO
       Release Vars ANT_TAB, ANT_CAMPO
EndSwitch
Return True
 
EndProc ;Verifica_QtdF()

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

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

Verifica_QtdF("Quantidade Anterior")    
If INICIO_DIALOG
   Then If [Preco Unitario]=BlankNum()
           Then Pega_Preco("Novo")
        EndIf   
        If CHAVEI=0
           Then Campo=AvancaCampo("I_Qtd0")
           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 Then Campo="I_Seq" EndIf

If Disparo="OPEN"
   Then
        TiraSombraShowDialog()
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then

   If Evento["KeyCode"] = -33
      Then 
           MSGCAMPO=""
           Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
           "F4 Alterar ~D~escri‡„o      ": " Alterar Descri‡„o do Item          " :"F4",
           "F5 Alterar ~P~re‡o Unit rio ": " Alterar Pre‡o Unitario             " :"F5",
           "F6 Alterar Cor              ": " Alterar Cor                        " :"F6",
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Evento["KeyCode"]=0
             else Evento["KeyCode"]=MenuVar
          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 Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item do Pedido]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4") And Not F4_ATIVADO:
          F4_ATIVADO=True
          Campo_Ant=Campo
          Campo="I_Descricao_Item"   

     Case (Evento["KeyCode"] = -63 Or Evento["KeyCode"] = "F5") And Not F5_ATIVADO:
          If PARAM_ALTERA_PRECO="P"
             Then If Checa_Supervisor()
                     Then F5_ATIVADO=True
                          Campo="I_Preco_Unitario"
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -64 Or Evento["KeyCode"] = "F6") And Not F6_ATIVADO:
          F6_ATIVADO=True
          Campo_Ant=Campo
          ITEM_ANT =VSD_I_Codigo_Item
          DESIT_ANT=VSD_I_Descricao_Item
          ANTREF   =VSD_I_Referencia 
          CODCOR   =VSD_I_Codigo_Cor_Tecido
          DESCOR   =VSD_I_Descricao_Cor_Tecido
          VSD_I_Codigo_Item=PegaCodigoRaiz(VSD_I_Codigo_Item)           
          Campo="I_Codigo_Cor_Tecido"

     Case Evento["KeyCode"] = -81 : ; PGDN
          If Campo="I_Pedido_Compra" Or
             Campo="I_CSOSN"         Or
             Campo="I_CST_Item"      Or
             (Campo="I_TISSQN" and VSD_I_Tipo_Item="C")
             Then AcceptDialog
          EndIf   

     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"             
             Then
                  If Campo="I_Codigo_Cor_Tecido"  
                     Then Monta_Opcoes("Codigo da Cor_Tecido","")
                          Seleciona_Opcoes("Codigo da Cor_Tecido","")
                          Moveto [Codigo da Cor_Tecido ]
                     Else 
                          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=[PedidoC->Codigo da Tabela]
                                  Moveto "PedidoC"
                                  Moveto [Codigo da Tabela]  
                          EndIf
                          If Campo="I_CFOP"               
                             Then FI_CFOAnt=VSD_I_CFOP
                                  FC_CFOAnt=[PedidoC->CFO]
                                  Moveto "PedidoC"
                                  Moveto [CFO]
                          EndIf
        
                          Switch
                            Case Campo="I_CST_Item":          
                              CSTNew=VSD_I_CST_Item 
                              VSD_I_CST_Item=Checa_CST("ICMS",TP_MOV_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",TP_MOV_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",TP_MOV_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",TP_MOV_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     =[PedidoC->CFO] 
                                              [PedidoC->CFO]=FC_CFOAnt
                                              Moveto "Pedidog"
                                              [Pedidog->CFO]=FI_CFOAnt
                                        Case Campo="I_Tabela":               
                                              FI_TABELAAnt     =[PedidoC->Codigo da Tabela] 
                                              [PedidoC->Codigo da Tabela]=FC_TABELAAnt
                                              Moveto "Pedidog"
                                              [Pedidog->Codigo da Tabela]=FI_TABELAAnt
                                      EndSwitch
                                 Else If Campo="I_CFOP" Or Campo="I_Tabela" ;Or Campo="I_MUNSERV"  
                                         Then Moveto "Pedidog"
                                      EndIf        
                              EndIf
                            EndSwitch                          
          
                            Window Select JANELA
                            WinArray5["FLOATING"]=True
                            Window SetAttributes JANELA From WinArray5
                 
                  EndIf
                 
                  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_Referencia    =[Referencia       ]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_CST_Item      =[Tipo Tributacao  ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]

                          If SYS_CODIGO_CLIENTE="0117"
                             Then [Codigo do Item]=""
                          EndIf

                          Campo="I_Codigo_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_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf
                  Moveto "PedidoG"

          EndIf
          Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
           Case Campo="I_Codigo_Item":
                CancelDialog
           Case Campo="I_Descricao_Item" Or Campo="I_Codigo_Cor_Tecido":
                Switch 
                  Case F4_ATIVADO And Campo="I_Descricao_Item":
                       Campo=Campo_Ant
                       F4_ATIVADO=False
                  Case F6_ATIVADO And Campo="I_Codigo_Cor_Tecido":
                       If VSD_I_Codigo_Cor_Tecido<>CODCOR
                        Then If QuerDesfazer("a altera‡Æo da Cor") 
                              Then VSD_I_Codigo_Item         =ITEM_ANT
                                   VSD_I_Descricao_Item      =DESIT_ANT
                                   VSD_I_Referencia          =ANTREF
                                   VSD_I_Codigo_Cor_Tecido   =CODCOR
                                   VSD_I_Descricao_Cor_Tecido=DESCOR
                                   Campo=Campo_Ant
                                   F6_ATIVADO=False                                   
                             EndIf      
                        Else Campo=Campo_Ant
                             F6_ATIVADO=False
                       EndIf           
                  OtherWise:
                        Campo="I_Codigo_Item"
                        VSD_I_Codigo_Item   =""
                        VSD_I_Descricao_Item=""
                        VSD_I_Referencia    =""
                        VSD_I_UN_Item       =""
                        VSD_I_CST_Item      =""
                        VSD_I_Tipo_Item     =""
                EndSwitch
           Case Campo="I_Descricao_Cor_Tecido" : Campo="I_Codigo_Cor_Tecido"
           Case Campo="I_Tabela":
                If CHAVEI=1
                   Then If PARAM_COR_TECIDO="S"
                           Then Campo="I_Codigo_Cor_Tecido"
                           Else Campo="I_Codigo_Item"
                        EndIf
                   Else CancelDialog
                EndIf
                
           Case SubStr(Campo,1,5)="I_Qtd": Campo=VoltaCampo(Campo)

            Case Campo="I_Preco_Unitario"         Or
                 Campo="I_Tipo_Desconto_Item"     Or
                 Campo="I_Preco_Total"            Or
                 Campo="I_Pedido_Compra"      : Campo=VoltaCampo("I_Qtd13")

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

            Case Campo="I_Comissao_Item"          Or
                 Campo="I_CSOSN"              : Campo="I_Pedido_Compra"              

            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_ACSOSN"       Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"

            Case Campo="I_RBC_ST"       Or
                 Campo="I_AST"          Or
                 Campo="I_BC_ST"        Or
                 Campo="I_Valor_ST"          : Campo="I_MVA"      
                  
            Case Campo="I_CST_IPI"           : Campo="I_CST_Item"
                   
            Case Campo="I_AIPI"         Or
                 Campo="I_Valor_IPI"    Or  
                 Campo="I_BC_IPI"            : Campo="I_CST_IPI"
            
            Case Campo="I_TISSQN"            :
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_Pedido_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"              : 
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_CST_Item"
                 EndIf

            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 Mensagem("Item n„o cadastrado !")
                    Else If PARAM_COR_TECIDO="N" Or PARAM_COR_TECIDO="D"
                            Then PARAM_VERIFICA_GRADE=True
                            Else PARAM_VERIFICA_GRADE=False 
                         EndIf
                         If Pega_Dados_Item("")
                            Then Registro_Item("Ler")
                            
                                 Monta_Opcoes("Codigo da Cor_Tecido","")    
                                 Switch
                                   Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                                   Case PARAM_COR_TECIDO="D"          : Campo="I_Codigo_Cor_Tecido"
                                   Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                                   OtherWise                          : Campo=AvancaCampo("I_Qtd0")
                                 EndSwitch                                                
                            Else     
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_Referencia    =""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf        
                 EndIf   
   
             Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If PARAM_TABPR_ITEM="S"
                            Then Campo="I_Tabela"
                            Else Campo=AvancaCampo("I_Qtd0")
                         EndIf
                 EndIf

                 If F4_ATIVADO
                    Then F4_ATIVADO=False
                         Campo=Campo_Ant
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido":
                 Switch
                   Case PARAM_COR_TECIDO="S":          
                     VSD_I_Codigo_Cor_Tecido=AlinhM(ControlValue("I_Codigo_Cor_Tecido"),4)
                     If Checa_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                        Then Moveto "PedidoG"
                             [Codigo da Cor_Tecido ]=VSD_I_Codigo_Cor_Tecido
                             VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                             MSG_REF="Referˆncia n„o Cadastrada !"
                             If Pega_Dados_Item("Cor_Tecido")
                                 Then Registro_Item("Ler")    
                                      Switch
                                        Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                                        OtherWise                          : If Not ItemjaExiste
                                                                                Then Campo=AvancaCampo("I_Qtd0")
                                                                             EndIf   
                                      EndSwitch
                                 Else If MSG_REF <> "" 
                                         Then Mensagem(MSG_REF)
                                      EndIf   
                                      KeyPress "ESC"   
                              EndIf
                        Else Mensagem("Cor/Tecido n„o cadastrado para esta referˆncia !")
                             VSD_I_Codigo_Cor_Tecido   =""
                             VSD_I_Descricao_Cor_Tecido=""
                             KeyPress "ESC"    
                      EndIf
                   Case PARAM_COR_TECIDO="D":         
                     VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                     If IsBlank(VSD_I_Codigo_Cor_Tecido)
                        Then Campo="I_Descricao_Cor_Tecido"
                        Else VSD_I_Codigo_Cor_Tecido=AlinhM(ControlValue("I_Codigo_Cor_Tecido"),4)
                             If Checa_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                                Then Moveto "PedidoG"
                                     [Codigo da Cor_Tecido ]=VSD_I_Codigo_Cor_Tecido
                                     VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                                     Switch
                                       Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                                       OtherWise                          : If Not ItemjaExiste
                                                                               Then Campo=AvancaCampo("I_Qtd0")
                                                                            EndIf   
                                     EndSwitch
                                Else Mensagem("Cor/Tecido n„o cadastrado para esta referˆncia !")
                                     VSD_I_Codigo_Cor_Tecido   =""
                                     VSD_I_Descricao_Cor_Tecido=""
                                     KeyPress "ESC"    
                              EndIf
                     EndIf
                 EndSwitch
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 If PARAM_TABPR_ITEM="S"
                    Then Campo="I_Tabela"
                    Else Campo=AvancaCampo("I_Qtd0")
                 EndIf
                 
            Case SubStr(Campo,1,5)="I_Qtd" : Campo=AvancaCampo(Campo)

            Case Campo="I_Preco_Unitario": 
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 
                 CalcularPrecoTotal_Item()
                 If PARAM_DESCUNIT="S" And CHAVEI=1
                    Then Campo="I_Tipo_Desconto_Item"
                    Else Campo="I_Preco_Total"
                 EndIf

                 If F5_ATIVADO=True
                    Then F5_ATIVADO=False
                         Grava_LogEx("Pedido AltPreco")
                 EndIf
            Case Campo="I_Tipo_Desconto_Item":
                 VSD_I_Tipo_Desconto_Item    =ControlValue("I_Tipo_Desconto_Item")

                 desctoitemok=true
                 if isblank(VSD_I_Tipo_Desconto_Item)
                    then 
                         CalcularPrecoTotal_Item()
                    else 
                         if CHAVEI=1
                            then if not DigitaDescto_Item() 
                                    then desctoitemok=false
                                 endif
                         endif
                 endif  
                                   
                 If desctoitemok
                    Then Campo="I_Preco_Total"
                 EndIf
                   
            Case Campo="I_Preco_Total": 
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then CalcularPrecoTotal_Item()
                         If PARAM_COMIS_MARCA="S" And CHAVEI=1
                            Then GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To CODIGO_MARCA
                                If RetVal
                                   Then CODIGO_MARCA = REG_ITEM["Codigo da Marca"]
                                   Else CODIGO_MARCA = ""
                                 EndIf
                                 Moveto [Lookup_DesctoComis_Marca]
                                 Ativa_Lookup()
                                 Moveto [Codigo da Empresa]
                                 Locate [PedidoC->Codigo da Empresa],
                                        CODIGO_MARCA,
                                        [PedidoC->Composicao de Dias]
                                 If Not RetVal
                                    Then CODIGO_MARCA="999"
                                         Locate [PedidoC->Codigo da Empresa],
                                                CODIGO_MARCA,
                                                [PedidoC->Composicao de Dias]
                                         If Not RetVal
                                            Then CODIGO_MARCA="***"
                                         EndIf
                                 EndIf
                                 VSD_I_Comissao_Item=Checa_Comissao()
                                 KeyPress "ESC"
                                 Echo Off
                         EndIf
                         Campo="I_Pedido_Compra"
                    Else If CHAVEI=0
                            Then VSD_I_Preco_Unitario=BlankNum()
                                 VSD_I_Preco_Total   =BlankNum()
                                 VSD_I_Quantidade    =BlankNum()
                                 AcceptDialog
                         EndIF        
                 EndIf

            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                 : AcceptDialog
                         EndSwitch
                 endif
                 release vars I_Pedido_CompraOk                 

            Case Campo="I_Comissao_Item":
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")

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

            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",[PedidoC->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",[PedidoC->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("PEDIDO",VSD_I_TICMS,[Codigo MVA])
                              ;;;EndIf                                                 

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

                            Else Mensagem("CSOSN inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            
            ;Case Campo="I_ACSOSN":
            ;     VSD_I_ACSOSN=ControlValue("I_ACSOSN")
            ;     If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
            ;        Then Switch
            ;              Case TribCST="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",TP_MOV_ESTOQUE,VSD_I_CST_Item)
                         If TribCST<>""
                            Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 
                                 VSD_I_TICMS=Pega_TipoTributacao("ICMS",VSD_I_CST_Item) 

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

                                 Switch
                                  Case (TribCST="00" Or TribCST="10"):   
                                       If TribCST="00"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       VSD_I_RBC_ICMS   =BlankNum()   
                                       Campo="I_AICMS"         
                                  Case (TribCST="20" Or TribCST="51" Or TribCST="60" Or TribCST="70" Or TribCST="90"):    
                                       Switch 
                                         Case (TribCST="20" Or TribCST="51"):
                                                             VSD_I_MVA        =BlankNum()
                                                             VSD_I_AST        =BlankNum()
                                                             VSD_I_Valor_ST   =BlankNum()
                                                             VSD_I_BC_ST      =BlankNum()
                                                             Campo="I_RBC_ICMS"
                                         Case TribCST="60" : VSD_I_MVA        =BlankNum()
                                                             VSD_I_BC_ICMS    =BlankNum()
                                                             VSD_I_RBC_ICMS   =BlankNum()
                                                             VSD_I_AICMS      =BlankNum()
                                                             VSD_I_Valor_ICMS =BlankNum() 
                                                             Switch
                                                               Case Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 : Campo="I_MVA"
                                                               Case Search("VEND" ,[PedidoC->Descricao da Destinacao])>0 : Campo="I_CST_IPI"
                                                               OtherWise                                                 : Campo="I_MVA"
                                                             EndSwitch
                                         OtherWise         : Campo="I_RBC_ICMS"
                                       EndSwitch  
                                  Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                        TribCST="50" Or TribCST="51") :                            
                                       If TribCST<>"30"
                                          Then VSD_I_MVA       =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_CST_IPI"
                                          Else VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_MVA"
                                       EndIf
       												  EndSwitch
               												  
                           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",[PedidoC->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",[PedidoC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                   Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                   OtherWise                                                                          : Campo="I_CST_IPI"
                 EndSwitch  
                 
            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 Campo="I_AST"
            Case Campo="I_AST":
                 VSD_I_AST=ControlValue("I_AST")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_IPI"
                    Else Campo="I_BC_ST"
                 EndIf             
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"               
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)                   
                    Then TribCST=Checa_CST("IPI",TP_MOV_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
                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then Campo="I_CFOP"
                    Else Campo="I_CST_PIS"
                 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",TP_MOV_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",TP_MOV_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             
                 Campo="I_CFOP"
            
            ;Case Campo="I_BC_COFINS":
            ;     VSD_I_BC_COFINS=ControlValue("I_BC_COFINS")
            ;     Campo="I_Valor_COFINS"                 
            ;Case Campo="I_Valor_COFINS":
            ;     VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
            ;     Campo="I_CFOP"

            Case Campo="I_CFOP":
                 VSD_I_CFOP=ControlValue("I_CFOP")
                 getrecord "\\sistemas\\cadastro\\cfo" VSD_I_CFOP to regcfo
                 if not retval
                    then fastmsg(VSD_I_CFOP+" n„o Cadastrado !")
                    else Switch
                            Case SubStr(VSD_I_CFOP,1,1)<>SubStr([PedidoC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[PedidoC->CFO]+" !")
                            OtherWise: 
                                 If VSD_I_Tipo_Item="C"
                                    Then VSD_I_NCM="" 
                                 EndIf
                                 
                                 If PARAM_VOLUMES="S"
                                    Then Campo="I_Numero_Volumes"
                                    Else AcceptDialog
                                 EndIf
                                 
                          EndSwitch
                 EndIf
            
            Case Campo="I_Numero_Volumes":
                 VSD_I_Numero_Volumes=ControlValue("I_Numero_Volumes")
                 Campo="I_Peso_Liquido"
            Case Campo="I_Peso_Liquido":
                 VSD_I_Peso_Liquido=ControlValue("I_Peso_Liquido")
                 Campo="I_Peso_Embalagem"
            Case Campo="I_Peso_Embalagem":
                 VSD_I_Peso_Embalagem=ControlValue("I_Peso_Embalagem")
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

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

Switch
  Case SubStr(Campo,1,5)="I_Qtd" :
       MSGCAMPO="Quantidade ["+SubStr(Array_TM[NumVal( RTrim( SubStr(Campo,6,2) ) )],2,2)+"] "

  Case Campo="I_Seq"                     : MSGCAMPO="Sequencia"
  Case Campo="I_Quantidade_Faturada"     : MSGCAMPO="Quantidade Faturada"
  Case Campo="I_Obs_Item"                : MSGCAMPO="Observa‡„o do Item"
  Case Campo="I_Codigo_Item"             : MSGCAMPO="C¢digo do Item"
  Case Campo="I_Descricao_Item"          : MSGCAMPO="Descri‡„o do item"
  Case Campo="I_Tipo_Item"               : MSGCAMPO="Tipo do item"

  Case Campo="I_Codigo_Cor_Tecido"       : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"    : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tabela"                  : MSGCAMPO="Codigo da tabela de pre‡o"

  Case Campo="I_Quantidade"              : MSGCAMPO="Quantidade"
  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_TICMS"                   : MSGCAMPO="Tributacao ICMS: N„o tributado,Debitado,Isento,Outros,Substitui‡„o"
  Case Campo="I_CST_Item"                : MSGCAMPO="Codigo situa‡„o tributaria/ICMS"
  Case Campo="I_RBC_ICMS"                : MSGCAMPO="Aliquota redu‡Æo na base de calculo de ICMS"
  Case Campo="I_AICMS"                   : MSGCAMPO="Aliquota de ICMS"
  Case Campo="I_BC_ICMS"                 : MSGCAMPO="Base de c lculo do ICMS com seus rateios proporcionais"  
  Case Campo="I_Valor_ICMS"              : MSGCAMPO="Valor do ICMS"
                                  
 ;Case Campo="I_ACSOSN"                  : MSGCAMPO="Aliquota de ICMS/Aproveitamento de credito SIMPLES NACIONAL"
  Case Campo="I_Valor_CSOSN"             : MSGCAMPO="Valor do ICMS/Aproveitamento de credito SIMPLES NACIONAL"
                                     
  Case Campo="I_MVA"                     : MSGCAMPO="Margem de valor agregado para base c lculo Subst.Tribut ria"
  Case Campo="I_AST"                     : MSGCAMPO="Aliquota da Subst.Tribut ria"
  Case Campo="I_BC_ST"                   : MSGCAMPO="Base de c lculo da Subst.Tribut ria com seus rateios proporcionais"  
  Case Campo="I_Valor_ST"                : MSGCAMPO="Valor da Subst.Tribut ria"
                                        
  Case Campo="I_CST_IPI"                 : MSGCAMPO="Codigo situa‡„o tributaria/IPI"
  Case Campo="I_AIPI"                    : MSGCAMPO="Aliquota de IPI"
  Case Campo="I_BC_IPI"                  : MSGCAMPO="Base de c lculo do IPI com seus rateios proporcionais"  
  Case Campo="I_Valor_IPI"               : MSGCAMPO="Valor do IPI"

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

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

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

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

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

  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_Pedido_Compra"    or
           campo="I_CSOSN"            or
           campo="I_CST_Item"         Or
          (Campo="I_TISSQN" and VSD_I_Tipo_Item="C")
           then TECLA=TECLA+"PgDn=Finalizar  "
        endif           
        
EndIf

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

;*******************************************************************************
;* Rotina para AvancaCampo                                                     *
;*******************************************************************************
Proc AvancaCampo(Campo)    

VSD_I_Qtd1 =ControlValue("I_Qtd1")
VSD_I_Qtd2 =ControlValue("I_Qtd2")
VSD_I_Qtd3 =ControlValue("I_Qtd3")
VSD_I_Qtd4 =ControlValue("I_Qtd4")
VSD_I_Qtd5 =ControlValue("I_Qtd5")
VSD_I_Qtd6 =ControlValue("I_Qtd6")
VSD_I_Qtd7 =ControlValue("I_Qtd7")
VSD_I_Qtd8 =ControlValue("I_Qtd8")
VSD_I_Qtd9 =ControlValue("I_Qtd9")
VSD_I_Qtd10=ControlValue("I_Qtd10")
VSD_I_Qtd11=ControlValue("I_Qtd11")
VSD_I_Qtd12=ControlValue("I_Qtd12")
                
If Not Verifica_QtdF("Verifica Quantidade Faturada")
   Then Return Campo
EndIf

VSD_I_Quantidade=VSD_I_QTD1+VSD_I_QTD2+VSD_I_QTD3+VSD_I_QTD4+
                 VSD_I_QTD5+VSD_I_QTD6+VSD_I_QTD7+VSD_I_QTD8+
                 VSD_I_QTD9+VSD_I_QTD10+VSD_I_QTD11+VSD_I_QTD12
        
[Quantidade]=VSD_I_Quantidade

If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
   Then CalcularPrecoTotal_Item()
EndIf

indice=NumVal(RTrim(SubStr(Campo,6,2)))
For i From indice To 12
  If (i+1)=13
     Then If Not PARAM_ALTERA_PRECO="S" And Not IsBlank(VSD_I_Codigo_Item)
             Then Campo="I_Preco_Total"
             Else Campo="I_Preco_Unitario"
          EndIf
          QuitLoop
     Else If (i+1) > NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i+1],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i+1)
                  QuitLoop
          EndIf

  EndIf
EndFor

Return Campo
EndProc

;*******************************************************************************
;* Rotina para VoltaCampo                                                      *
;*******************************************************************************
Proc VoltaCampo(Campo)
For i From 12 to 0 Step -1
  If i=0
     Then If CHAVEI=1
             Then Campo="I_Codigo_Item"
                  VSD_I_Codigo_Item   =""
                  VSD_I_Descricao_Item=""
                  VSD_I_Referencia    =""
                  VSD_I_UN_Item       =""
                  VSD_I_CST_Item      =""
                  VSD_I_Tipo_Item     =""
                  VSD_I_Codigo_Cor_Tecido   =""
                  VSD_I_Descricao_Cor_Tecido=""
             Else CancelDialog
          EndIf
          QuitLoop
     Else If i < NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i)
                  QuitLoop
          EndIf
  EndIf
EndFor

If Campo="I_Qtd13" Then Campo="I_Custo_Unitario" EndIf

Return Campo
EndProc

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

Switch
  Case Funcao_Registro="Gravar":
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Item            ]=VSD_I_Codigo_Item

       [Descricao do Item         ]=VSD_I_Descricao_Item
       [Tipo Tributacao           ]=VSD_I_CST_Item
       
       [Referencia                ]=VSD_I_Referencia

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

       [Qtd1                      ]=VSD_I_Qtd1
       [Qtd2                      ]=VSD_I_Qtd2
       [Qtd3                      ]=VSD_I_Qtd3
       [Qtd4                      ]=VSD_I_Qtd4
       [Qtd5                      ]=VSD_I_Qtd5
       [Qtd6                      ]=VSD_I_Qtd6
       [Qtd7                      ]=VSD_I_Qtd7
       [Qtd8                      ]=VSD_I_Qtd8
       [Qtd9                      ]=VSD_I_Qtd9
       [Qtd10                     ]=VSD_I_Qtd10
       [Qtd11                     ]=VSD_I_Qtd11
       [Qtd12                     ]=VSD_I_Qtd12
       [Quantidade                ]=VSD_I_Quantidade

       [QtdF1                     ]=VSD_I_FQtd1
       [QtdF2                     ]=VSD_I_FQtd2
       [QtdF3                     ]=VSD_I_FQtd3
       [QtdF4                     ]=VSD_I_FQtd4
       [QtdF5                     ]=VSD_I_FQtd5
       [QtdF6                     ]=VSD_I_FQtd6
       [QtdF7                     ]=VSD_I_FQtd7
       [QtdF8                     ]=VSD_I_FQtd8
       [QtdF9                     ]=VSD_I_FQtd9
       [QtdF10                    ]=VSD_I_FQtd10       
       [QtdF11                    ]=VSD_I_FQtd11
       [QtdF12                    ]=VSD_I_FQtd12
       [Quantidade Faturada       ]=VSD_I_Quantidade_Faturada

       [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
       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela
       [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

       [Referencia                ]=VSD_I_Referencia
       [CFO                       ]=VSD_I_CFOP                
      
       [Tributacao de ICMS        ]=VSD_I_TICMS
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)              
       [MVA                       ]=VSD_I_MVA                
       [NCM                       ]=VSD_I_NCM   
       
       [ICMS_ST_Aliquota          ]=VSD_I_AST       
       [ICMS_ST_BC                ]=VSD_I_BC_ST
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST
       [ICMS_BC                   ]=VSD_I_BC_ICMS
      ;[ICMS_CredSN_Aliquota      ]=VSD_I_ACSOSN    
      ;[ICMS_CredSN_Valor         ]=VSD_I_Valor_CSOSN    

       [Tributacao de IPI         ]=VSD_I_TIPI
       [Aliquota de IPI           ]=VSD_I_AIPI
       [Valor do IPI              ]=VSD_I_Valor_IPI
       [IPI_CST                   ]=VSD_I_CST_IPI
       [IPI_BC                    ]=VSD_I_BC_IPI
                                                      
       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [Aliquota de ISSQN         ]=VSD_I_AISSQN 
       
       [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
      
       [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
       
  Case Funcao_Registro="Ler": 
       VSD_I_Seq                    =[Item do Pedido            ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]

       If CHAVEI=1
          Then VSD_I_Descricao_Item=TiraTamanhoDescricaoItem(VSD_I_Descricao_Item)
       EndIf
       VSD_I_Referencia             =[Referencia                ]
       VSD_I_CST_Item               =[Tipo Tributacao           ]

       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]
       
       VSD_I_Qtd1                   =[Qtd1                      ]
       VSD_I_Qtd2                   =[Qtd2                      ]
       VSD_I_Qtd3                   =[Qtd3                      ]
       VSD_I_Qtd4                   =[Qtd4                      ]
       VSD_I_Qtd5                   =[Qtd5                      ]
       VSD_I_Qtd6                   =[Qtd6                      ]
       VSD_I_Qtd7                   =[Qtd7                      ]
       VSD_I_Qtd8                   =[Qtd8                      ]
       VSD_I_Qtd9                   =[Qtd9                      ]
       VSD_I_Qtd10                  =[Qtd10                     ]
       VSD_I_Qtd11                  =[Qtd11                     ]
       VSD_I_Qtd12                  =[Qtd12                     ]
       VSD_I_Quantidade             =[Quantidade                ]

       VSD_I_FQtd1                  =[QtdF1                     ]
       VSD_I_FQtd2                  =[QtdF2                     ]
       VSD_I_FQtd3                  =[QtdF3                     ]
       VSD_I_FQtd4                  =[QtdF4                     ]
       VSD_I_FQtd5                  =[QtdF5                     ]
       VSD_I_FQtd6                  =[QtdF6                     ]
       VSD_I_FQtd7                  =[QtdF7                     ]
       VSD_I_FQtd8                  =[QtdF8                     ]
       VSD_I_FQtd9                  =[QtdF9                     ]
       VSD_I_FQtd10                 =[QtdF10                    ]
       VSD_I_FQtd11                 =[QtdF11                    ]
       VSD_I_FQtd12                 =[QtdF12                    ]
       VSD_I_Quantidade_Faturada    =[Quantidade Faturada       ]

       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       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       ]
       VSD_I_Preco_Total            =[Preco Total               ]

       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]

       CalcularPrecoTotal_Item()

       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_Referencia             =[Referencia                ]
       VSD_I_CFOP                   =[CFO                       ]

       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_MVA                    =[MVA                       ]
       VSD_I_NCM                    =[NCM                       ]
       
       VSD_I_RBC_ST                 = BlankNum()
       VSD_I_AST                    =[ICMS_ST_Aliquota          ]
       VSD_I_BC_ST                  =[ICMS_ST_BC                ]
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]
       VSD_I_ACSOSN                 =BlankNum()   ;[ICMS_CredSN_Aliquota]
       VSD_I_Valor_CSOSN            =BlankNum()   ;[ICMS_CredSN_Valor   ]      
                       
       VSD_I_CST_IPI                =[IPI_CST                   ]
       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]
       VSD_I_BC_IPI                 =[IPI_BC                    ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_RBC_ISSQN              =""
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_BC_ISSQN               =BlankNum()   ;[ISSQN_BC       ]
       VSD_I_Valor_ISSQN            =BlankNum()
                                       
       VSD_I_CST_PIS                =[PIS_CST                   ]
       VSD_I_RBC_PIS                =""   
       VSD_I_APIS                   =[PIS_Aliquota              ]
       VSD_I_BC_PIS                 =BlankNum()   ;[PIS_BC      ]
       VSD_I_Valor_PIS              =BlankNum()   ;[PIS_Valor   ]   
                                                             
       VSD_I_CST_COFINS             =[COFINS_CST                ]
       VSD_I_RBC_COFINS             =""
       VSD_I_ACOFINS                =[COFINS_Aliquota           ]
       VSD_I_BC_COFINS              =BlankNum()   ;[COFINS_BC   ]
       VSD_I_Valor_COFINS           =BlankNum()   ;[COFINS_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

EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item do Pedido]
Locate [PedidoC->Numero do Pedido],SEQIT
CopyToArray RegItem
QUANT   = [Quantidade          ]
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ]=[PedidoC->Codigo da Tabela     ]
EndIf
Registro_Item("Ler")

PARAM_PEDUTIL      = "ARRAY_MONTA_GRADE"
PARAM_PEDUTIL_TIPO = "Valida"
Play "PED_UTIL"

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
MSGCAMPO=""
While True
  ItemjaExiste=False
  F4_ATIVADO=False
  F5_ATIVADO=False
  F6_ATIVADO=False
  
  Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
     Trigger "OPEN","ARRIVE"
      Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F5","F6","ClearArea","HOME","END","PGDN","PGUP",-33
     @ 01,0 height 22 width 80

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

     Label  @ 00,00 "> Referˆncia" For "I_Codigo_Item"
     Accept @ 01,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
  
     Label  @ 00,17 "Descricao Item" For "I_Descricao_Item"
     Accept @ 01,17 Width 42 "A30" 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,61 "Referˆncia" For "I_Referencia"
     Accept @ 01,62 Width 16 "A13" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia

     Label  @ 02,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
     Accept @ 03,00 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
     Accept @ 03,06 Width 23 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
    
     Label  @ 02,42 "Tabela" For "I_Tabela"
     Accept @ 03,42 Width 09 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela

     @ 04,11 ?? SubStr(Array_TM[01],2,2)
     @ 04,16 ?? SubStr(Array_TM[02],2,2)
     @ 04,21 ?? SubStr(Array_TM[03],2,2)
     @ 04,26 ?? SubStr(Array_TM[04],2,2)
     @ 04,31 ?? SubStr(Array_TM[05],2,2)
     @ 04,36 ?? SubStr(Array_TM[06],2,2)
     @ 04,41 ?? SubStr(Array_TM[07],2,2)
     @ 04,46 ?? SubStr(Array_TM[08],2,2)
     @ 04,51 ?? SubStr(Array_TM[09],2,2)
     @ 04,56 ?? SubStr(Array_TM[10],2,2)
     @ 04,61 ?? SubStr(Array_TM[11],2,2)
     @ 04,66 ?? SubStr(Array_TM[12],2,2)
  
     @ 05,00 ?? "  Pedida"
     Accept @ 05,10 Width 05 "S" Tag "I_Qtd1"  to VSD_I_Qtd1
     Accept @ 05,15 Width 05 "S" Tag "I_Qtd2"  to VSD_I_Qtd2
     Accept @ 05,20 Width 05 "S" Tag "I_Qtd3"  to VSD_I_Qtd3
     Accept @ 05,25 Width 05 "S" Tag "I_Qtd4"  to VSD_I_Qtd4
     Accept @ 05,30 Width 05 "S" Tag "I_Qtd5"  to VSD_I_Qtd5
     Accept @ 05,35 Width 05 "S" Tag "I_Qtd6"  to VSD_I_Qtd6
     Accept @ 05,40 Width 05 "S" Tag "I_Qtd7"  to VSD_I_Qtd7
     Accept @ 05,45 Width 05 "S" Tag "I_Qtd8"  to VSD_I_Qtd8
     Accept @ 05,50 Width 05 "S" Tag "I_Qtd9"  to VSD_I_Qtd9
     Accept @ 05,55 Width 05 "S" Tag "I_Qtd10" to VSD_I_Qtd10
     Accept @ 05,60 Width 05 "S" Tag "I_Qtd11" to VSD_I_Qtd11
     Accept @ 05,65 Width 06 "S" Tag "I_Qtd12" to VSD_I_Qtd12
  
     Label  @ 04,71 "Total" For "I_Quantidade"
     Accept @ 05,71 Width 07 "S" Tag "I_Quantidade" to VSD_I_Quantidade
  
     @ 06,00 ?? "Faturada"
     Accept @ 06,10 Width 05 "S" Tag "I_FQtd1"  to VSD_I_FQtd1
     Accept @ 06,15 Width 05 "S" Tag "I_FQtd2"  to VSD_I_FQtd2
     Accept @ 06,20 Width 05 "S" Tag "I_FQtd3"  to VSD_I_FQtd3
     Accept @ 06,25 Width 05 "S" Tag "I_FQtd4"  to VSD_I_FQtd4
     Accept @ 06,30 Width 05 "S" Tag "I_FQtd5"  to VSD_I_FQtd5
     Accept @ 06,35 Width 05 "S" Tag "I_FQtd6"  to VSD_I_FQtd6
     Accept @ 06,40 Width 05 "S" Tag "I_FQtd7"  to VSD_I_FQtd7
     Accept @ 06,45 Width 05 "S" Tag "I_FQtd8"  to VSD_I_FQtd8
     Accept @ 06,50 Width 05 "S" Tag "I_FQtd9"  to VSD_I_FQtd9
     Accept @ 06,55 Width 05 "S" Tag "I_FQtd10" to VSD_I_FQtd10
     Accept @ 06,60 Width 05 "S" Tag "I_FQtd11" to VSD_I_FQtd11
     Accept @ 06,65 Width 06 "S" Tag "I_FQtd12" to VSD_I_FQtd12
  
     Accept @ 06,71 Width 07 "S" Tag "I_Quantidade_Faturada" to VSD_I_Quantidade_Faturada
  
     Label  @ 07,00 "Quantidade" For "I_Quantidade"
     Accept @ 08,00 Width 11 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
     Label  @ 07,11 "UN" For "I_UN_Item"
     Accept @ 08,11 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item                               
     Label  @ 07,16 "Pr.Unitario" For "I_Preco_Unitario"
  	 Accept @ 08,17 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
  	 
     Label  @ 07,42 "?Desconto" For "I_Tipo_Desconto_Item"
     Accept @ 08,42 Width  4 "A1"  picture "U,T" Tag "I_Tipo_Desconto_Item" to VSD_I_Tipo_Desconto_Item          
     Accept @ 08,45 Width 11 "A08" picture "!*!" Tag "I_Desconto_Descricao" to VSD_I_Desconto_Descricao
     Label  @ 07,54 "Vr.Desconto" For "I_Valor_Desconto_Item"
     Accept @ 08,56 Width 10 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Item" to VSD_I_Valor_Desconto_Item
     Label  @ 07,67 "Pr.Total" For "I_Preco_Total"
     Accept @ 08,67 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total
  
     Label  @ 09,00 "Qtd.Faturada" For "I_Quantidade_Faturada"
     Accept @ 10,00 Width 16 "N" picture "#*#.[###]" Tag "I_Quantidade_Faturada" to VSD_I_Quantidade_Faturada
     Label  @ 09,16 "Pr.Tabela" For "I_Preco_Tabela"
     Accept @ 10,17 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela   

     Label  @ 09,42 "Pedido Compra" For "I_Pedido_Compra"
     Accept @ 10,42 Width 17 "A15" picture "!*!" Tag "I_Pedido_Compra" to VSD_I_Pedido_Compra
     Label  @ 09,58 "Item PC" For "I_Item_Pedido_Compra"
     Accept @ 10,59 Width 07 "S"               Tag "I_Item_Pedido_Compra" to VSD_I_Item_Pedido_Compra
  
     Label  @ 09,67 "%ComissÆo" For "I_Comissao_Item"
     Accept @ 10,67 Width 11 "N" picture "#*#.[###]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item
     

   @ 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,57 "CFOP" For "I_CFOP"
   Accept @ 13,57 Width 09 "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  @ 18,51 "QtdVol" For "I_Numero_Volumes"
   Accept @ 19,52 Width 07 "S" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 18,58 "PesoLiq" For "I_Peso_Liquido"
   Accept @ 19,58 Width 10 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 18,68 "PesoEmb" For "I_Peso_Embalagem"
   Accept @ 19,68 Width 10 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

  Enddialog
  Mouse Show
                                       
  If RetVal
     Then Finaliza_Registro(True)
     Else If ItemjaExiste
             Then CHAVEI=0
                  SEQIT =[Item do Pedido]
                  Inicia_Registro()
                  Echo Normal
                  Echo Off
                  Mensagem("Item j  foi lan‡ado !")
                  Loop
             Else Finaliza_Registro(False)
          EndIf   
  EndIf
  QuitLoop
EndWhile
EndProc  ; (DigitaI)

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

If Ok
   Then Registro_Item("Gravar")
        ITEMALTERADO=True
   Else If CHAVEI=0 or CHAVEI=8
           Then ;---- ** #0171# Apagando a referˆncia ao colar o ARRAY, sendo que
                ;     a referˆncia no cadastro do item esta correto, foi retirado
                ;     essa op‡Æo apenas para este cliente   
                If SYS_CODIGO_CLIENTE<>"0171"
                   Then CopyFromArray RegItem
                EndIf   
                UnLockRecord
        EndIf
        If CHAVEI=1 Or CHAVEI=8 
           Then If [Quantidade Faturada]>0
                   Then ;Mensagem(
                        ;Completa("N„o ‚ possivel excluir a ref. "+[Referencia]+", pois foi detectado ocorrˆncia",71," ")+"//"+
                        ;Completa("de faturamento nesta referˆncia.",71," ")+"////"+
                        ;Completa("Caso seja necess rio esta exclus„o, fa‡a o estorno no faturamento.",71," "))
                   Else ITEMALTERADO=True
                        Exclusao_I()     
                EndIf 
        EndIf
EndIf

EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Ajustar Valores                                                 *
;*******************************************************************************       
Proc Ajusta_Valor(Param,Posicao)
Private Param,Posicao

Switch
  Case Param="Quantidade_Item" :
       QUANTIDADE_ITEM = BlankNum()
       Switch
         Case Posicao=1:   QUANTIDADE_ITEM = [PedidoG->Qtd1]
         Case Posicao=2:   QUANTIDADE_ITEM = [PedidoG->Qtd2]
         Case Posicao=3:   QUANTIDADE_ITEM = [PedidoG->Qtd3]
         Case Posicao=4:   QUANTIDADE_ITEM = [PedidoG->Qtd4]
         Case Posicao=5:   QUANTIDADE_ITEM = [PedidoG->Qtd5]
         Case Posicao=6:   QUANTIDADE_ITEM = [PedidoG->Qtd6]
         Case Posicao=7:   QUANTIDADE_ITEM = [PedidoG->Qtd7]
         Case Posicao=8:   QUANTIDADE_ITEM = [PedidoG->Qtd8]
         Case Posicao=9:   QUANTIDADE_ITEM = [PedidoG->Qtd9]
         Case Posicao=10:  QUANTIDADE_ITEM = [PedidoG->Qtd10]
         Case Posicao=11:  QUANTIDADE_ITEM = [PedidoG->Qtd11]
         Case Posicao=12:  QUANTIDADE_ITEM = [PedidoG->Qtd12]
       EndSwitch
       
       Return QUANTIDADE_ITEM
       
  Case Param="Quantidade_Faturada" : 
       QtdF = BlankNum()
       Switch
         Case Posicao=1:   If [Qtd1]=BlankNum()  Or [Qtd1]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=2:   If [Qtd2]=BlankNum()  Or [Qtd2]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=3:   If [Qtd3]=BlankNum()  Or [Qtd3]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=4:   If [Qtd4]=BlankNum()  Or [Qtd4]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=5:   If [Qtd5]=BlankNum()  Or [Qtd5]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=6:   If [Qtd6]=BlankNum()  Or [Qtd6]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=7:   If [Qtd7]=BlankNum()  Or [Qtd7]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=8:   If [Qtd8]=BlankNum()  Or [Qtd8]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=9:   If [Qtd9]=BlankNum()  Or [Qtd9]=0  Then QtdF = BlankNum() EndIf
         Case Posicao=10:  If [Qtd10]=BlankNum() Or [Qtd10]=0 Then QtdF = BlankNum() EndIf
         Case Posicao=11:  If [Qtd11]=BlankNum() Or [Qtd11]=0 Then QtdF = BlankNum() EndIf
         Case Posicao=12:  If [Qtd12]=BlankNum() Or [Qtd12]=0 Then QtdF = BlankNum() EndIf
       EndSwitch  
             
       Return QtdF
  
  Case Param="Ajusta_QuantidadeF" :     
       Switch
         Case Posicao=1:   [QtdF1]  = [QtdF1]  + QtdF
         Case Posicao=2:   [QtdF2]  = [QtdF2]  + QtdF
         Case Posicao=3:   [QtdF3]  = [QtdF3]  + QtdF
         Case Posicao=4:   [QtdF4]  = [QtdF4]  + QtdF
         Case Posicao=5:   [QtdF5]  = [QtdF5]  + QtdF
         Case Posicao=6:   [QtdF6]  = [QtdF6]  + QtdF
         Case Posicao=7:   [QtdF7]  = [QtdF7]  + QtdF
         Case Posicao=8:   [QtdF8]  = [QtdF8]  + QtdF
         Case Posicao=9:   [QtdF9]  = [QtdF9]  + QtdF
         Case Posicao=10:  [QtdF10] = [QtdF10] + QtdF
         Case Posicao=11:  [QtdF11] = [QtdF11] + QtdF
         Case Posicao=12:  [QtdF12] = [QtdF12] + QtdF
       EndSwitch
EndSwitch

EndProc ;Ajusta_Valor()

;*******************************************************************************
;* Rotina Atualiza Tabela Pedidog com Faturados                                *
;*******************************************************************************
Proc Faturados_PedidoI()

grdant="***"
Seq=0
Moveto "PedidoG"
NR = NIMAGERECORDS()
If NR=0
   Then return
EndIf

;Primeiro um SCAN para limpar a quantidade faturada do pedidog
Scan for not IsBlank([Codigo do Item])
  Barra(NR, RecNo())
  Aguarde("Aguarde, ajustando itens faturados "+BARRA_STRING)
  
  [QtdF1              ] = BlankNum()  
  [QtdF2              ] = BlankNum()  
  [QtdF3              ] = BlankNum()  
  [QtdF4              ] = BlankNum()  
  [QtdF5              ] = BlankNum()  
  [QtdF6              ] = BlankNum()  
  [QtdF7              ] = BlankNum()  
  [QtdF8              ] = BlankNum()  
  [QtdF9              ] = BlankNum()  
  [QtdF10             ] = BlankNum()  
  [QtdF11             ] = BlankNum()  
  [QtdF12             ] = BlankNum()  
  [Quantidade Faturada] = BlankNum()
EndScan
Home

Scan for not IsBlank([Codigo do Item])
  Barra(NR, RecNo())
  Aguarde("Aguarde, verificando itens faturados "+BARRA_STRING)
  
  PARAM_PEDUTIL      = "ARRAY_MONTA_GRADE"
  PARAM_PEDUTIL_TIPO = ""
  Play "PED_UTIL"

  For i From 1 to 12
    TM=RTrim(SubStr(Array_TM[i],4,2))
    If TM="" 
       Then Loop 
    EndIf
    
    coditem  = [Codigo do Item]
    If Len(TM)=1
       Then coditem=SubStr([Codigo do Item],1,9)+TM
       Else coditem=SubStr([Codigo do Item],1,8)+TM
    EndIf
    
    QtdF=0
    Moveto "PedidoI"
    Moveto [Codigo do Item]
    Locate coditem
    If RetVal
       Then While [Codigo do Item] = coditem 
              If (SYS_CODIGO_CLIENTE="0388" Or SYS_CODIGO_CLIENTE="0429")  Or (SYS_CODIGO_CLIENTE<>"0388" And SYS_CODIGO_CLIENTE<>"0429" And [Variacoes]<>"S")
                 Then QtdF=[Quantidade Faturada]
              EndIf
              ;0388 utiliza o campo Variacoes e neste momento outras empresa utilizaram para outra finalidade
              If [Variacoes]<>"S" And SYS_CODIGO_CLIENTE<>"0388" And SYS_CODIGO_CLIENTE<>"0429" And QtdF>0
                Then QUANTIDADE_ITEM = Ajusta_Valor("Quantidade_Item",i)
                     If QUANTIDADE_ITEM > 0
                        Then [Variacoes] = "S"
                             UnLockRecord
                             QuitLoop
                        Else QtdF=0     
                     EndIf        
              EnDIf
              Skip
              If eot() Then QuitLoop EndIf
              Locate Next coditem
              If Not RetVal Then QuitLoop EndIf
            EndWhile     
    EndIf
    
    If QtdF=0 Then Qtdf=BlankNum() EndIf
    Moveto "PedidoG"
    If QtdF>0
       Then QUANTIDADE_ITEM = Ajusta_Valor("Quantidade_Item",i)      
    EndIf
    
    If QtdF>0
       Then Aux_QtdF = 0
            If QtdF > QUANTIDADE_ITEM
               Then Aux_QtdF = QtdF - QUANTIDADE_ITEM
                    QtdF  = QUANTIDADE_ITEM
            EndIf 
            Ajusta_Valor("Ajusta_QuantidadeF",i)
            If Aux_QtdF > 0
               Then [Quantidade Faturada]=[Quantidade Faturada]+QtdF
                    SEQ_PEDG = [Item do Pedido]
                    QtdF=Aux_QtdF
                    Moveto "PedidoG"
                    Moveto [Codigo do Item]
                    If Len(TM)=1
                       Then Locate Pattern SubStr(coditem,1,9)+".."
                       Else Locate Pattern SubStr(coditem,1,8)+".."
                    EndIf
                    If Retval
                       Then While True
                              If SEQ_PEDG <> [Item do Pedido] 
                                 Then QUANTIDADE_ITEM = Ajusta_Valor("Quantidade_Item",i)                                      
                                      If QUANTIDADE_ITEM>0
                                         Then Aux_QtdF=0
                                              If QtdF > QUANTIDADE_ITEM
                                                 Then Aux_QtdF = QtdF - QUANTIDADE_ITEM
                                                      QtdF  = QUANTIDADE_ITEM
                                              EndIf   
                                              Ajusta_Valor("Ajusta_QuantidadeF",i)
                                              [Quantidade Faturada]=[Quantidade Faturada]+QtdF
                                              
                                              If Aux_QtdF = 0 Then QuitLoop EndIf
                                      EndIf
                              EndIf
                              Skip
                              If Eot() Then QuitLoop endIf
                              If Len(TM)=1
                                 Then Locate Next Pattern SubStr(coditem,1,9)+".."
                                 Else Locate Next Pattern SubStr(coditem,1,8)+".."
                              EndIf
                              If Not RetVal Then QuitLoop EndIf
                            EndWhile 
                    EndIf
                    Moveto "PedidoG"
                    Moveto [Item do Pedido]
                    Locate SEQ_PEDG
               Else [Quantidade Faturada]=[Quantidade Faturada]+QtdF
            EndIf
    EndIf
    UnLockRecord
  EndFor  
  Moveto "PedidoG"
  Echo Normal
  Echo Off
EndScan

If SYS_CODIGO_CLIENTE<>"0388" And SYS_CODIGO_CLIENTE<>"0429"
   Then Moveto "PedidoI" 
        Scan for [Variacoes]="S"
          [Variacoes]=""
        EndScan
        Moveto "PedidoG"  
EnDIf
LimpAguarde()

EndProc

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao()
Private Tx_Comissao_Item, Tx_Descto_Item, Tx_Encontrada
Tx_Comissao_Item=BlankNum()
If IsBlank(VSD_I_Preco_Tabela) And Not IsBlank([PedidoC->Codigo da Tabela])
   Then Mensagem("Tabela de Pre‡o n„o Encontrada, Verificar !")
        Return Tx_Comissao_Item
EndIf

If CODIGO_MARCA="***"
   Then Mensagem("Tabela de Descontos/Comiss„o n„o encontrada, Verificar Ok !")
        Return Tx_Comissao_Item
EndIf

If NumVal(StrVal(VSD_I_Preco_Unitario))>=NumVal(StrVal(VSD_I_Preco_Tabela))
   Then Tx_Descto_Item=0
   Else Tx_Descto_Item=(VSD_I_Preco_Unitario*100)/VSD_I_Preco_Tabela
        Tx_Descto_Item=Round(100-Tx_Descto_Item,2)
EndIf

VSD_I_Taxa_Desconto_Unitario=Tx_Descto_Item

Tx_Encontrada=False
While [Codigo da Empresa      ]=[PedidoC->Codigo da Empresa ] And
      [Codigo da Marca        ]=CODIGO_MARCA                  And
      [Composicao de Dias     ]=[PedidoC->Composicao de Dias]
  If [Taxa de Desconto]<=Tx_Descto_Item
     Then If ITEM_PROMOCIONAL="S"
             Then Tx_Comissao_Item=[Taxa de Comissao Promocao]
             Else Tx_Comissao_Item=[Taxa de Comissao Normal  ]
          EndIf
          Tx_Encontrada=True
     Else QuitLoop
  EndIf

  Skip
  If EOT() Then QuitLoop EndIf
EndWhile
If IsBlank(Tx_Comissao_Item) Or Not Tx_Encontrada
   Then Mensagem("% Comiss„o n„o encontrada, Verificar Ok !")
EndIf

Return Tx_Comissao_Item
EndProc

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Carrega_array_Itens(TABELA)
Private TABELA, CAMPOANT, VRBCICMS_CREDSN, nitens

TabelaRefC="Pedidoc" 

Switch 
  Case TABELA="PedidoI" : TabelaRefI="PedidoI"
  Case TABELA="PedidoG" : TabelaRefI="PedidoG"
EndSwitch                   

Aguarde("Somando itens")

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

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

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

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

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

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

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

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

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

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

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

Moveto TabelaRefI

nitens=0
Scan

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

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

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

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

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

  It_csosn_icms[nitens]    =[CSOSN                   ]
  It_aliq_icmscred[nitens] =BlankNum()   ;[ICMS_CredSN_Aliquota]
  It_vr_icmscred[nitens]   =BlankNum()   ;[ICMS_CredSN_Valor   ]

  It_mva[nitens]           =[MVA                     ]
;;;;It_red_st[nitens]        =[ICMS_ST_Aliquota Reduzida] nÆo tem o campo na tabela
  It_aliq_st[nitens]       =[ICMS_ST_Aliquota        ]
  It_bc_st[nitens]         =[ICMS_ST_BC              ]
  It_vr_st[nitens]         =[ICMS_ST_Valor           ]

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

  It_trib_ISSQN[nitens]    =[Tributacao de ISSQN     ]
  It_aliq_ISSQN[nitens]    =[Aliquota de ISSQN       ]
  It_bc_ISSQN[nitens]      =BlankNum()   ;[ISSQN_BC      ]
  It_vr_ISSQN[nitens]      =BlankNum()   ;[Valor do ISSQN]

  It_cst_pis[nitens]       =[PIS_CST                 ]
  It_aliq_pis[nitens]      =[PIS_Aliquota            ]
  It_bc_pis[nitens]        =BlankNum()   ;[PIS_BC    ]
  It_vr_pis[nitens]        =BlankNum()   ;[PIS_Valor ]

  It_cst_cofins[nitens]    =[COFINS_CST              ]
  It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
  It_bc_cofins[nitens]     =BlankNum()   ;[COFINS_BC   ] 
  It_vr_cofins[nitens]     =BlankNum()   ;[COFINS_Valor]

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

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

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

          It_vr_icmscred[nitens]   =BlankNum()

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

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

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

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

  EndIf   

EndScan
LimpAguarde()

Moveto "PedidoC"

If TABELA="PedidoI"
   Then CHAVEF=0
EndIf   

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

EndProc ;(Carrega_array_Itens)

;*******************************************************************************
;* Rotina para Agrupar os Itens                                                *
;*******************************************************************************
Proc AGRUPA()
For I From 1 to 900
    CODIGO[I]=""
    QUANTI[I]=BlankNum()
    PRECOU[I]=BlankNum()
EndFor

Moveto "PedidoG"
Scan
    Moveto [Codigo do Item]
    For I From 1 to 900
        If CODIGO[I]=[Codigo do Item]
           Then QUANTI[I]=QUANTI[I]+[Quantidade]
                QuitLoop
           Else If CODIGO[I]=""
                   Then CODIGO[I]=[Codigo do Item]
                        QUANTI[I]=[Quantidade]
                        PRECOU[I]=[Preco Unitario]
                        QuitLoop
                Endif
        Endif
    Endfor
EndScan

While RecordStatus("New")=False
  Del
EndWhile

For I From 1 to 900
    If IsBlank(CODIGO[I])
       Then QuitLoop
    Endif
    Moveto [Item do Pedido]
    End
    Down Down 
    [Item do Pedido]=I
    [Codigo do Item]=CODIGO[I]
    [Quantidade]    =QUANTI[I]
    [Preco Unitario]=PRECOU[I]
    [Preco Total]   =[Preco Unitario]*[Quantidade]
Endfor
EndProc

;*******************************************************************************
;* Rotina para Organizar Itens pela Descricao                                  *
;*******************************************************************************
Proc Organiza_Itens()
Private Cont, Nr

If [PedidoC->Situacao do Pedido]="FATURADO"
   Then Mensagem("Pedido ["+[PedidoC->Situacao do Pedido]+"] ! // //Organiza‡„o n„o disponivel !")
        Return
EndIf

Cont=0
Scan
  If [Quantidade Faturada]>0
     Then Cont=Cont+1
  EndIf
EndScan

If Cont>0
   Then Mensagem("Pedido com "+StrVal(Cont)+" itens j  FATURADOS ! // //Organiza‡„o n„o disponivel !")
        Return
EndIf

Aguarde("Organizando")

Moveto "PedidoC"
Do_It!
ClearAll

{Ask} {PedidoG} Check
Moveto [Numero do Pedido] TypeIn "~PEDIDO"
Do_It!
ClearAll

If Not IsBlank("Answer")
   Then If ORGANIZA_REF
           Then Sort "Answer" On "Numero do Pedido","Referencia","Item do Pedido"
                ClearAll
        Else If ORGANIZA_COR
                Then Sort "Answer" On "Numero do Pedido","Descricao da Cor_Tecido","Item do Pedido"
                     ClearAll        
             EndIf
        EndIf     
    Else Mensagem("Erro durante a organiza‡„o, tente novamente !")
EndIf   

If Not IsBlank("Answer")
   Then 
        View NoWindow "Answer"
        CoEdit NoWindow "PedidoG"
        Moveto [Numero do Pedido]
        Locate PEDIDO
        If RetVal
           Then While [Numero do Pedido]=PEDIDO
                  Del
                  If EOT() Then QuitLoop EndIf
                EndWhile

                NR = NRecords("Answer")
                Moveto "Answer"
                Scan

                  Barra(NR, RecNo())
                  Aguarde("Aguarde, Organizando "+BARRA_STRING)

                  [Item do Pedido]=RecNo()
                  CopyToArray REGPED

                  Moveto "PedidoG"
                  End
                  Down
                  CopyFromArray REGPED
                  UnLockRecord

                  Moveto "Answer"
                EndScan
                Do_It!
                ClearAll

                Delete "Answer"

                Mensagem("Fim organiza‡„o !")
           Else Mensagem("Erro durante a organiza‡„o, tente novamente !")
        EndIf
EndIf
LimpAguarde()

Carrega_Tabelas()

Coedit "PedidoC"
PickForm "4"

Moveto [Numero do Pedido]
Locate PEDIDO

Moveto "PedidoG"

EndProc

;*******************************************************************************
;* Rotina para Digitacao do Pedido                                             *
;*******************************************************************************
Proc DigitaF()

Carrega_array_Itens("PedidoI")
CALC_PEDIDO()

If CHAVEF=9
   Then Return   
EndIf

SomaVenctos("PedidoC","PedidoV")

Moveto [Valor Despesas Acessorias]

While True

      TECLA=" Esc=Retornar  F4=Calc_Venctos  F8=Venctos                PgUp  PgDn  "

      MSGCAMPO=Field()
      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: 15/30/45/60 "
      EndIf
      
      If Field()="Forma de Pagamento"
         Then MSGCAMPO =MSGCAMPO +", [F1]Consultar tabela"
      EndIf

      Prompt TECLA

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

    ;If RetVal=-33
    ;   Then Echo Normal
    ;        Echo Off
    ;        ShowPopup " Fun‡”es " CENTERED
    ;          "F4  ~C~alcular Vencimentos  " : " Calcula Vencimentos             " : "F4",
    ;          "F8  ~V~encimentos           " : " Vencimentos                     " : "F8",
    ;          "~C~ancelar                  " : " Cancelar a Opera‡„o             " : "CANCELAR"
    ;        EndMenu
    ;        To MenuVar
    ;        echo off
    ;        If MenuVar="CANCELAR" or MenuVar="Esc"
    ;           Then Loop
    ;        EndIf
    ;
    ;        RetVal=MenuVar
    ;EndIf

    Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4":
           CAMPOANT=Field()   
           Calc_Venctos()
           SomaVenctos("PedidoC","PedidoV")
           
           If PARAM_CONDPAGTO="S"
               Then Moveto Field CAMPOANT
               Else Moveto [Tipo de Pagamento]
           EndIf
      Case RetVal="F8":
           If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"
              Then Mensagem ("Edi‡„o de Vencimentos n„o dispon¡vel!//Verificar com o Supervisor!")
              Else Moveto "PedidoV"
                   While True
                     CHAVEV()
                     If CHAVEV=9 Then QuitLoop EndIf
                     Controla_EdicaoV()
                   EndWhile
                   Moveto "PedidoC"
                   Moveto [Tipo de Pagamento]
           EndIf  
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento]) Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           QuitLoop
      Case RetVal="F":
           DIGITA_FRETE()
           CALC_PEDIDO()
           Moveto "PedidoV"
           If Not RecordStatus("New")
              Then Calc_Venctos()
           EndIf
           Moveto "PedidoC"
           Moveto [Valor BCSubstituicao ICMS]
      Case RetVal="D":
           DIGITA_DESCTO()
           CALC_PEDIDO()
           Moveto "PedidoV"
           If Not RecordStatus("New")
              Then Calc_Venctos()
           EndIf
           Moveto "PedidoC"
      Case RetVal="ESC":
        Switch
           Case Field()="Valor BCSubstituicao ICMS":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor Substituicao ICMS":
                Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Despesas Acessorias":
                If PARAM_SUBSTICMS="S"
                   Then Moveto [Valor Substituicao ICMS]
                   Else CHAVEF=9
                        QuitLoop
                EndIf
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Forma de Pagamento":
                Moveto [Tipo de Pagamento]
           Case Field()="Tipo de Pagamento":
                Moveto [Valor do Seguro]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS" Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]               
                  Case Field()="Valor do Seguro":
                       If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"
                          Then QuitLoop
                          Else Moveto [Tipo de Pagamento]
                       EndIf   
                EndSwitch
                CALC_PEDIDO() 
             
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E" 
                           Then QuitLoop
                           Else [Numero de Parcelas]=BlankNum()
                                [Composicao de Dias]=""
                                QuitLoop
                        EndIf     
                   Else Moveto [Numero de Parcelas]               
                EndIf        
           Case Field()="Composicao de Dias":
                QuitLoop                
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ;  (DigitaF)

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()

Moveto "PedidoV"

if isblank([PedidoC->Data de Entrega])
   then Moveto "PedidoC"
        Return
endif   

If Not Checa_CompDias([PedidoC->Composicao de Dias])
   then Moveto "PedidoC"
        Return
EndIf

Moveto "PedidoV"
While Not RecordStatus("New")
  Del
EndWhile

NPC=1
i=1
If Not IsBlank([PedidoC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf
If NPC=0
   Then NP=[PedidoC->Numero de Parcelas]
   Else If NPC=1 And [PedidoC->Numero de Parcelas]>1
           Then NP=[PedidoC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

VRVENCTO=NDecimal(([PedidoC->Valor Nota Fiscal]/NP),2)
VRDIFERE=[PedidoC->Valor Nota Fiscal]-(VRVENCTO*NP)

If PARAM_COMIS_VENCTO="S"
   Then VREF=NDecimal(([PedidoC->Valor Nota Fiscal]*[PedidoC->Comissao do Representante])/100,2)
        VCVENCTO=NDecimal((VREF/NPC),2)
        VCDIFERE=VREF-(VCVENCTO*NPC)
   Else VCVENCTO=BlankNum()
        VCDIFERE=BlankNum()
EndIf

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,(Len([PedidoC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([PedidoC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,Len([PedidoC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf

  End
  Down
  [Sequencia        ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([PedidoC->Data de Entrega])
                  MES_VECTO=Month([PedidoC->Data de Entrega])
                  ANO_VECTO=Year([PedidoC->Data de Entrega])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+SubStr(StrVal(ANO_VECTO),3,2))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[PedidoC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[PedidoC->Data de Entrega]+NDIAS
  EndIf
  If i<>NP
     Then [Valor            ]=VRVENCTO
          [Valor da Comissao]=VCVENCTO
     Else [Valor            ]=VRVENCTO+VRDIFERE
          [Valor da Comissao]=VCVENCTO+VCDIFERE
  EndIf

  If i=1 And NP>1 And NDIAS=0
     Then [Forma de Pagamento]="DN" 
     Else [Forma de Pagamento]=[PedidoC->Forma de Pagamento]
  EndIf   


  i=i+1
EndWhile

Moveto "PedidoC"

EndProc

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

;****************************************+**************************************
;* Rotina para Setar Vari veis de Impostos                                     *
;*******************************************************************************
Proc CALCULA_IMPOSTO()

VRBCIPI        =0
VRIPI          =0
VRBCICMS       =0
VRICMS         =0
VRBCST         =0
VRST           =0
VRICMS_CREDSN  =0
VRBCISSQN      =0
VRISSQN        =0
VRBCPIS        =0
VRPIS          =0
VRBCCOFINS     =0
VRCOFINS       =0
VRIR           =0
VRNF           =0

MSG_AUTOMATICA="" 

Moveto TabelaRefC               
CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Soma dos Items para rateio ------------------------------------------------
MercadoriaRateio_Valor=0
For wi From 1 to DynArraySize(It_prtotal)
  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
     Else 
          OutrosRateioOk=True
          If TP_MOV_ESTOQUE="S" And 
             (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
             Then OutrosRateioOk=False
          EndIf
  EndIf
  
  If OutrosRateioOk
     Then MercadoriaRateio_Valor=MercadoriaRateio_Valor+It_prtotal[wi]
  EndIf   
EndFor

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

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/MercadoriaRateio_Valor)*100 
          If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
             Then OutrosRateioOk=False
          EndIf
  EndIf    

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

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

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

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

EndFor           
    
;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,2)
If REG_TABELAREFC["Frete Incluso na Nota"]="+"
   Then DIF_Frete_Valor=NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
   Else DIF_Frete_Valor=0
EndIf                                           
DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)

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

          If OutrosRateioOk 
             Then 
                  If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                     Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                          DIF_Descto_Valor=0 
                  EndIf
                  If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                     Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                          DIF_Frete_Valor =0
                  EndIf
                  If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                     Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                          DIF_Seguro_Valor=0
                  EndIf   
                  If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                     Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                          DIF_OutDesp_Valor=0
                  EndIf   

                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
                                              
        EndFor
EndIf                     
          
;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)

  Switch
    Case CALCULO_NF_AUTOMATICO="A":
      
      ;--- Calculando IPI ----------------------------------------------------------
      If It_aliq_ipi[wi]>0
         Then 
              It_bc_ipi[wi]=It_prtotal[wi]+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]

            ;;If REG_TABELAREFC["Frete Incluso na Nota"]="+" And
            ;;   SubStr(It_cfop[wi],1,1)    ="3" And ; entrada import‡Æo  
            ;;   SubStr(It_cst_icms[wi],1,1)="1"     ; item importa‡Æo direta
            ;;   Then It_bc_ipi[wi]=It_bc_ipi[wi]+It_frete[wi]
            ;;EndIf
              
              It_vr_ipi[wi]=Round((It_bc_ipi[wi]*It_aliq_ipi[wi])/100,2) 
         Else It_bc_ipi[wi]=BlankNum()    
              It_vr_ipi[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando Base de Calculo ICMS para todas as situa‡äes -----------------
      Switch
        Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
          Switch
            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)<>"60": 
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)="60" And
                 Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
        OtherWise:
          Switch
            Case OPCAO_RED_BCICMS=3 And It_red_icms[wi]>0 And It_txdescto[wi]>0:
                 VL_BC_ICMS   =It_prtotal[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]

          EndSwitch
      EndSwitch
      VL_BC_ICMS   =VL_BC_ICMS   +It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_frete[wi]+It_seguro[wi]+It_outdesp[wi] 

      If REG_TABELAREFC["Consumidor Final"]="S" 
         Then VL_BC_ICMS   =VL_BC_ICMS   +it_vr_ipi[wi]
         Else VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
      EndIf   
      VL_RED_BC    =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS   =VL_BC_ICMS-VL_RED_BC                   
   
    
      ;--- Calculando Credito ICMS Simples Nacional ------------------------
      ;If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
      ;   SubStr(Directory(),1,1)<>"X"                              And
      ;   (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")
      ;   Then It_vr_icmscred[wi]  =Round((VL_BC_ICMS*It_aliq_icmscred[wi])/100,2)
      ;   Else It_aliq_icmscred[wi]  =BlankNum()
      ;        It_vr_icmscred[wi]    =BlankNum()
      ;EndIf   

      ;--- Calculando ICMS ---------------------------------------------------------
      If It_aliq_icms[wi]>0 
         Then It_bc_icms[wi]    =VL_BC_ICMS
              It_vr_icms[wi]    =Round((It_bc_icms[wi]*It_aliq_icms[wi])/100,2)
         Else It_aliq_icms[wi]  =BlankNum()
              It_bc_icms[wi]    =BlankNum()
              It_vr_icms[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando Substituicao Tributaria --------------------------------------
      If It_aliq_st[wi]>0
         Then
              If SYS_CODIGO_CLIENTE="0167"
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST-It_frete[wi]     
              EndIf
        
              VL_BC_ICMS_ST=VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*It_mva[wi])/100,2)
              VL_RED_BCST  =NDecimal((VL_BC_ICMS_ST*It_red_st[wi])/100,2)
              VL_BC_ICMS_ST=VL_BC_ICMS_ST-VL_RED_BCST                   
       
              VL_ICMS_ST=Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)

              ;Comentado para nÆo pegar aliquota do estado caso ICMS esteja em branco
              VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;Switch
              ;  Case It_vr_icms[wi]>0 :
              ;       VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
              ;  OtherWise             :
              ;       VL_ICMS_ST=VL_ICMS_ST-Round((VL_BC_ICMS*UF_ALIQUOTA_ICMS)/100,2)
              ;EndSwitch
        
              It_bc_st[wi]=VL_BC_ICMS_ST
              It_vr_st[wi]=VL_ICMS_ST
      
         Else It_red_st[wi]    =BlankNum() 
              It_aliq_st[wi]   =BlankNum()
              It_bc_st[wi]     =BlankNum()
              It_vr_st[wi]     =BlankNum()
      EndIf
              
      ;--- Calculando ISSQN --------------------------------------------------------
      ;If It_aliq_issqn[wi]>0
      ;   Then It_bc_issqn[wi]=It_prtotal[wi]
      ;        It_vr_issqn[wi]=Round((It_bc_issqn[wi]*It_aliq_issqn[wi])/100,2) 
      ;   Else It_bc_issqn[wi]=BlankNum()    
      ;        It_vr_issqn[wi]=BlankNum()    
      ;EndIf
    
      ;--- Calculando PIS ----------------------------------------------------------
      ;If It_aliq_pis[wi]>0
      ;   Then It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      ;        It_vr_pis[wi]=Round((It_bc_pis[wi]*It_aliq_pis[wi])/100,2) 
      ;   Else It_bc_pis[wi]=BlankNum()    
      ;        It_vr_pis[wi]=BlankNum()    
      ;EndIf
    
      ;--- Calculando COFINS -------------------------------------------------------
      ;If It_aliq_cofins[wi]>0
      ;   Then It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      ;        It_vr_cofins[wi]=Round((It_bc_cofins[wi]*It_aliq_cofins[wi])/100,2) 
      ;   Else It_bc_cofins[wi]=BlankNum()    
      ;        It_vr_cofins[wi]=BlankNum()    
      ;EndIf

    OtherWise:

  EndSwitch

  ;--- Somando Impostos --------------------------------------------------------
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  
  If ( (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And It_csosn_icms[wi]="900" )
     Or TPEMPR="DEBITO/CREDITO"
     Then 
          VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
          VRICMS         =VRICMS       +It_vr_icms[wi]
  EndIf
  
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  VRICMS_CREDSN  =BlankNum()   ;VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCISSQN      =BlankNum()   ;VRBCISSQN    +It_bc_issqn[wi]
  VRISSQN        =BlankNum()   ;VRISSQN      +It_vr_issqn[wi]
  VRBCPIS        =BlankNum()   ;VRBCPIS      +It_bc_pis[wi]
  VRPIS          =BlankNum()   ;VRPIS        +It_vr_pis[wi]  
  VRBCCOFINS     =BlankNum()   ;VRBCCOFINS   +It_bc_cofins[wi]
  VRCOFINS       =BlankNum()   ;VRCOFINS     +It_vr_cofins[wi]
                                                                          
EndFor

EndProc ;(IMPOSTO)

;****************************************+**************************************
;* Rotina para Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()

Aguarde("Calculando valores do pedido")

Switch
  Case Table()="Pedidoc": TabelaRefC="PedidoC"  TabelaRefI="PedidoI"
EndSwitch
 
Moveto TabelaRefC
CampoTab=Field()

[Valor Mercadoria]=VRMERC
If [Descricao da Destinacao]="COMPLEMENTO IPI SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO IPI CBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ST"
   Then [Valor Mercadoria  ]=BlankNum()
EndIf
[Valor Servico   ]=VRSERV
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-[Valor Desconto]
 
CALCULA_IMPOSTO()

Moveto TabelaRefC
Moveto Field CampoTab

[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor PIS    ]=VRPIS
[Valor COFINS ]=VRCOFINS

[Valor BCSubstituicao ICMS]=VRBCST
[Valor Substituicao ICMS  ]=VRST              

[Valor Nota Fiscal]=[Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                    [Valor Substituicao ICMS]+[Valor do Seguro]

VRNF=[Valor Nota Fiscal]

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
EndIf

If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   VRICMS_CREDSN>0 And ALIQUOTA_CREDITO_ICMS_NOSN>0
   Then
        MSG_AUTOMATICA=" ** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS NO VALOR DE RS "+
                       LTRIM(Format("W12.2,EIC",VRICMS_CREDSN))+
                       " , CORRESPONDENTE A ALIQUOTA DE "+
                       LTRIM(Format("W12.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN))+
                       "% NOS TERMOS DO ARTIGO 23 DA LC123/2006 * "+
                       " NAO GERA DIREITO A CREDITO FISCAL DE ISS E IPI"
EndIf

If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ST" 
   Then [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf

;*** 0=BlankNum() **************************************************************
If [Valor BCICMS             ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
If [Valor ICMS               ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
If [Valor BCSubstituicao ICMS]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
If [Valor Substituicao ICMS  ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
If [Valor IPI                ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor BCISSQN            ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN              ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf
If [Valor do Frete           ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
If [Valor do Seguro          ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
If [Valor Despesas Acessorias]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor PIS                ]=0 Then [Valor PIS                ]=BlankNum() EndIf
If [Valor COFINS             ]=0 Then [Valor COFINS             ]=BlankNum() EndIf

;If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
;   PARAM_UTILIZA_COMISSAO_VENDREAL="S"
;   Then Checa_Comissao_Vendedor()
;EndIf

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc     ;  (Calc_Pedidos)

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

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf      

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59:
           If Campo="CBanco"     Or
              Campo="NomeCartao" Or
              Campo="E_Cidade"   Or
              Campo="E_UF"       Or
              Campo="C_Cidade"   Or
              Campo="C_UF"
              Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="CBanco"     Then Moveto [Codigo_Banco       ] EndIf
                    If Campo="NomeCartao" Then Moveto [Nome do Cartao     ] EndIf
                    If Campo="E_Cidade"   Then Moveto [Cidade de Entrega  ] EndIf
                    If Campo="E_UF"       Then Moveto [UF de Entrega      ] EndIf
                    If Campo="C_Cidade"   Then Moveto [Cidade de Cobranca ] EndIf
                    If Campo="C_UF"       Then Moveto [UF de Cobranca     ] EndIf
                    If ConsultaF1()
                       Then If Campo="E_Cidade"
                               Then [UF de Entrega ]=Reg_ConsultaF1["UF"]
                                    VSD_E_UF        =Reg_ConsultaF1["UF"]
                            EndIf
                            If Campo="C_Cidade"
                               Then [UF de Cobranca]=Reg_ConsultaF1["UF"]
                                    VSD_C_UF        =Reg_ConsultaF1["UF"]
                            EndIf
                    EndIf   

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

                    echo Normal
                    echo off

                    If Campo="CBanco"
                       Then VSD_CBanco=[Codigo_Banco      ]
                            VSD_NBanco=[Nome_Banco        ]
                    EndIf
                    If Campo="NomeCartao"
                       Then VSD_NomeCartao=[Nome do Cartao]
                    EndIf

                    Switch
                      Case Campo="E_Cidade": VSD_E_Cidade=[Cidade de Entrega]
                      Case Campo="E_UF"    : VSD_E_UF=[UF de Entrega]
                      Case Campo="C_Cidade": VSD_C_Cidade=[Cidade de Cobranca]
                      Case Campo="C_UF"    : VSD_C_UF=[UF de Cobranca]
                    EndSwitch
           EndIf
           If Campo="TipoEmit"
              Then ShowPopup " Emitente " @ 14,39
                      "~P~roprio" : " O Proprio Cliente" : "PROPRIO",
                      "~T~erceiro": " De Terceiro": "TERCEIRO"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then VSD_TipoEmit=MenuVar
                       EndIf
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 4 And OP_SHOWD="Cheque":
           If COPIOU_REGISTRO
              Then REGISTRO["Sequencia"]     =SEQ
                   REGISTRO["Numero de Dias"]=[Numero de Dias]
                   REGISTRO["Data"]          =[Data]
                   REGISTRO["Valor"]         =[Valor]
                   CopyFromArray REGISTRO
                   Ler_Gravar_Cheque("Ler")
           EndIf

      Case Evento["KeyCode"] = -81 And OP_SHOWD="Cheque":
           VSD_CBanco   =ControlValue("CBanco")
           VSD_NCheque  =ControlValue("NCheque")
           VSD_Nome     =ControlValue("Nome")
           VSD_Agencia  =ControlValue("Agencia")
           VSD_CCorrente=ControlValue("CCorrente")
           VSD_TipoEmit =ControlValue("TipoEmit")
           VSD_Cidade   =ControlValue("Cidade")
           VSD_UF       =ControlValue("UF")
           VSD_DataV    =ControlValue("DataV")
           VSD_Valor    =ControlValue("Valor")
           VSD_Obs      =ControlValue("Obs")
           VSD_CPF      =ControlValue("CPF")

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

           If Pode_Gravar
              Then Ler_Gravar_Cheque("Gravar")
                   CancelDialog
           EndIf

      Case Evento["KeyCode"] = -81 And OP_SHOWD="Enderecos":
           VSD_E_Endereco=ControlValue("E_Endereco")
           VSD_E_CEP=ControlValue("E_CEP")
           VSD_E_Bairro=ControlValue("E_Bairro")
           VSD_E_Cidade=ControlValue("E_Cidade")
           VSD_E_UF=ControlValue("E_UF")
           VSD_C_Endereco=ControlValue("C_Endereco")
           VSD_C_CEP=ControlValue("C_CEP")
           VSD_C_Bairro=ControlValue("C_Bairro")
           VSD_C_Cidade=ControlValue("C_Cidade")
           VSD_C_UF=ControlValue("C_UF")
           AcceptDialog

      Case Evento["KeyCode"] = -66 And OP_SHOWD="Enderecos":
           If Campo="E_Endereco"
              Then VSD_E_Endereco= "O MESMO"
                   VSD_E_Bairro  = ""
                   VSD_E_Cidade  = ""
                   VSD_E_UF      = ""
                   VSD_E_CEP     = ""
           EndIf
           If Campo="C_Endereco"
              Then VSD_C_Endereco = "O MESMO"
                   VSD_C_Bairro   = ""
                   VSD_C_Cidade   = ""
                   VSD_C_UF       = ""
                   VSD_C_CEP      = ""
           EndIf

       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf

      Case Evento["KeyCode"] = 27:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
                  [Frete Incluso na Nota ]=OLD_Frete_Incluso
                  [Aliquota BCFrete Nota ]=OLD_ABC_Frete
                  [Valor do Frete        ]=OLD_Frete
                  [Aliquota BCICMS Frete ]=OLD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=OLD_AICMS_Frete
                  [CFO Frete             ]=OLD_CFO_FRETE
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="ABCICMS_Frete" : Campo="AICMS_Frete"
             Case Campo="CFO_Frete"     : Campo="ABCICMS_Frete"
             Case Campo="I_Flag"        : Campo="CFO_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch

      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco"        : CancelDialog
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit"      : Campo="NCheque"
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch

      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao"       : CancelDialog
             Case Campo="NomeCartao"    : Campo="NCartao"
           EndSwitch

      ;;;***** Obs    ****
           Switch
             Case Campo="OBS"           : CancelDialog
           EndSwitch

      ;;;***** Enderecos ******
           Switch
             Case Campo="E_CEP"       : AcceptDialog
             Case Campo="E_Endereco"  : Campo="E_CEP"
             Case Campo="E_Bairro"    : Campo="E_Endereco"
             Case Campo="E_Cidade"    : Campo="E_Bairro"
             Case Campo="E_UF"        : Campo="E_Cidade"
             Case Campo="C_CEP"       : Campo="E_CEP"
             Case Campo="C_Endereco"  : Campo="C_CEP"
             Case Campo="C_Bairro"    : Campo="C_Endereco"
             Case Campo="C_Cidade"    : Campo="C_Bairro"
             Case Campo="C_UF"        : Campo="C_Cidade"
           EndSwitch
      Case Evento["KeyCode"] = 13:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  Campo="ABC_Frete"
             Case Campo="ABC_Frete":
                  VSD_ABC_Frete=ControlValue("ABC_Frete")
                  If VSD_ABC_Frete>0
                     Then VSD_Frete=Round((VRNF*VSD_ABC_Frete)/100,2)
                          If VSD_Frete<VRMINIMO_FRETE
                             Then VSD_FRETE=VRMINIMO_FRETE
                          EndIf
                     Else VSD_ABC_Frete=BlankNum()
                  EndIf
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If Not VSD_Frete>0
                     Then [Frete Incluso na Nota ]=":"
                          [Aliquota BCFrete Nota ]=BlankNum()
                          [Valor do Frete        ]=BlankNum()
                          [Aliquota BCICMS Frete ]=BlankNum()
                          [Aliquota de ICMS Frete]=BlankNum()
                          [CFO Frete             ]=""

                          Campo="I_Flag"
                     Else If VSD_Frete_Incluso="S"
                             Then If VSD_Frete_Incluso="S"
                                     Then [Frete Incluso na Nota ]="+"
                                     Else [Frete Incluso na Nota ]=":"
                                  EndIf
                                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                                  [Valor do Frete        ]=VSD_Frete
                                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                                  [CFO Frete             ]=VSD_CFO_Frete
                                  Campo="AICMS_Frete"
                             Else Campo="AICMS_Frete"
                          EndIf
                  EndIf
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  Campo="ABCICMS_Frete"
             Case Campo="ABCICMS_Frete":
                  VSD_ABCICMS_Frete=ControlValue("ABCICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")
                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then Moveto [CFO Frete]
                          If Busca_Lookup("Codigo Fiscal de Operacao",VSD_CFO_Frete,"CFO Inv lido")
                            Then If VSD_Frete_Incluso="S"
                                    Then [Frete Incluso na Nota ]="+"     
                                    Else [Frete Incluso na Nota ]=":"
                                 EndIf
                            [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                            [Valor do Frete        ]=VSD_Frete
                            [Aliquota BCICMS Frete ]=VSD_ABCICMS_Frete
                            [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                            [CFO Frete             ]=VSD_CFO_Frete
                          
                            Campo="I_Flag"
                          EndIF
                     Else Campo="I_Flag"      
                  EndIf
             Case Campo="I_Flag":
                  CancelDialog
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          [Taxa de Desconto ]=VSD_A_Descto
                          [Valor do Desconto]=VSD_Descto

                          CancelDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")

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

                  CancelDialog
           EndSwitch

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

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

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

      ;;;***** OBS    ****
           Switch
             Case Campo="OBS":
                  VSD_OBS=ControlValue("OBS")
                  [Observacao          ]=VSD_OBS
                  CancelDialog
           EndSwitch

      ;;;***** Enderecos ******
           Switch
             Case Campo="E_CEP":
                  VSD_E_CEP=ControlValue("E_CEP")
                  If IsBlank(VSD_E_Endereco) And
                     IsBlank(VSD_E_Bairro)   And
                     IsBlank(VSD_E_Cidade)   And
                     IsBlank(VSD_E_UF)
                     Then ALTERA_ENDERECO = True
                     ELse ALTERA_ENDERECO = False
                  EnDIf
                  If Not ALTERA_ENDERECO And Not IsBlank(VSD_E_CEP)
                     Then ConfGeral("Deseja ajustar o endere‡o p/ o CEP informado?")
                          If Ok="S"
                             Then ALTERA_ENDERECO = True
                          EndIf
                  EndIf
                  If Not Isblank(VSD_E_CEP) And ALTERA_ENDERECO
                     Then Busca_Cep(VSD_E_CEP)
                          VSD_E_Endereco = BUSCA_CEP_ENDERECO
                          VSD_E_Bairro   = BUSCA_CEP_BAIRRO
                          VSD_E_Cidade   = BUSCA_CEP_CIDADE
                          VSD_E_UF       = BUSCA_CEP_UF
                          Release Vars BUSCA_CEP_ENDERECO, BUSCA_CEP_BAIRRO, BUSCA_CEP_CIDADE, BUSCA_CEP_UF, BUSCA_CEP_PAIS
                  EndIf
                  Campo="E_Endereco"
             Case Campo="E_Endereco":
                  VSD_E_Endereco=ControlValue("E_Endereco")
                  Campo="E_Bairro"
             Case Campo="E_Bairro":
                  VSD_E_Bairro=ControlValue("E_Bairro")
                  Campo="E_Cidade"
             Case Campo="E_Cidade":
                  VSD_E_Cidade=ControlValue("E_Cidade")
                  Campo="E_UF"
             Case Campo="E_UF":
                  VSD_E_UF=ControlValue("E_UF")
                  If Not IsBlank(VSD_E_UF) And Not IsBlank(VSD_E_Cidade)
                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_E_Cidade,VSD_E_UF To REG_CIDADE
                          If Not RetVal
                             Then Mensagem("Cidade/Estado de Entrega informado errado!")
                             Else Campo="C_CEP"
                          EndIf
                     Else Campo="C_CEP"
                  EndIf
             Case Campo="C_CEP":
                  VSD_C_CEP=ControlValue("C_CEP")
                  If IsBlank(VSD_C_Endereco) And
                     IsBlank(VSD_C_Bairro)   And
                     IsBlank(VSD_C_Cidade)   And
                     IsBlank(VSD_C_UF)
                     Then ALTERA_ENDERECO = True
                     ELse ALTERA_ENDERECO = False
                  EnDIf
                  If Not ALTERA_ENDERECO And Not IsBlank(VSD_C_CEP)
                     Then ConfGeral("Deseja ajustar o endere‡o p/ o CEP informado?")
                          If Ok="S"
                             Then ALTERA_ENDERECO = True
                          EndIf
                  EndIf
                  If Not Isblank(VSD_C_CEP) And ALTERA_ENDERECO
                     Then Busca_Cep(VSD_C_CEP)
                          VSD_C_Endereco = BUSCA_CEP_ENDERECO
                          VSD_C_Bairro   = BUSCA_CEP_BAIRRO
                          VSD_C_Cidade   = BUSCA_CEP_CIDADE
                          VSD_C_UF       = BUSCA_CEP_UF
                          Release Vars BUSCA_CEP_ENDERECO, BUSCA_CEP_BAIRRO, BUSCA_CEP_CIDADE, BUSCA_CEP_UF, BUSCA_CEP_PAIS
                  EndIf
                  Campo="C_Endereco"
             Case Campo="C_Endereco":
                  VSD_C_Endereco=ControlValue("C_Endereco")
                  Campo="C_Bairro"
             Case Campo="C_Bairro":
                  VSD_C_Bairro=ControlValue("C_Bairro")
                  Campo="C_Cidade"
             Case Campo="C_Cidade":
                  VSD_C_Cidade=ControlValue("C_Cidade")
                  Campo="C_UF"
             Case Campo="C_UF":
                  VSD_C_UF=ControlValue("C_UF")
                  If Not IsBlank(VSD_C_UF) And Not IsBlank(VSD_C_Cidade)
                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_C_Cidade,VSD_C_UF To REG_CIDADE
                          If Not RetVal
                             Then Mensagem("Cidade/Estado de Cobran‡a informado errado!")
                             Else AcceptDialog
                          EndIf
                     Else AcceptDialog
                  EndIf
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="TipoEmit"    Or
   Campo="NomeCartao"  Or
   Campo="E_Cidade"    Or
   Campo="E_UF"        Or
   Campo="C_Cidade"    Or
   Campo="C_UF"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

If Campo="E_Endereco" Or
   Campo="C_Endereco"
   Then TECLA=TECLA+"F8=Duplica Endere‡o  "
EndIf

If OP_SHOWD="Cheque" And COPIOU_REGISTRO
   Then TECLA=TECLA+"Ctrl+D=Copiar  PgDn=Finalizar  "
EndIf
If OP_SHOWD="Enderecos"
   Then TECLA=TECLA+"PgDn=Finalizar  "
EndIf

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

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

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

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

ncampo=Field()

INICIO_DIALOG=True
OP_SHOWD="Frete"

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

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

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

VSD_Flag         =""
Echo Normal
Echo Off

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

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

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

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

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

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

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

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

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

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

Enddialog
Mouse Show
Moveto Field ncampo
EndProc    ;  (Digita_Frete)

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc Digita_Descto()
INICIO_DIALOG=True
OP_SHOWD="Desconto"

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

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


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

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

Enddialog
Mouse Show
EndProc

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

Moveto "PedidoV"
Ler_Gravar_Cheque("Ler")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Enddialog
Mouse Show
EndProc  ; (Digita_Cheque)

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

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

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

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

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

Enddialog
Mouse Show
EndProc

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

Moveto "PedidoV"
VSD_OBS       =[Observacao          ]

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

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

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Ler ou Gravar Dados do Cheque                                               *
;*******************************************************************************
Proc Ler_Gravar_Cheque(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       VSD_DataV    =[Data          ]
       VSD_CBanco   =[Codigo_Banco  ]
       VSD_NBanco   =[Nome_Banco    ]
       VSD_Agencia  =[Agencia       ]
       VSD_CCorrente=[Numero_Conta  ]
       VSD_NCheque  =[Numero_Cheque ]
       VSD_TipoEmit =[Tipo_Emitente ]
       VSD_Nome     =[Titular_Cheque]
       VSD_Cidade   =[Cidade        ]
       VSD_UF       =[UF            ]
       VSD_Valor    =[Valor         ]
       VSD_Obs      =[Observacao    ]
       VSD_CPF      =[CPF           ]
  Case Opcao="Gravar":
       [Data          ]=VSD_DataV
       [Codigo_Banco  ]=VSD_CBanco
       [Nome_Banco    ]=VSD_NBanco
       [Agencia       ]=VSD_Agencia
       [Numero_Conta  ]=VSD_CCorrente
       [Numero_Cheque ]=VSD_NCheque
       [Tipo_Emitente ]=VSD_TipoEmit
       [Titular_Cheque]=VSD_Nome
       [Cidade        ]=VSD_Cidade
       [UF            ]=VSD_UF
       [Observacao    ]=VSD_Obs
       [Valor         ]=VSD_Valor
       [CPF           ]=VSD_CPF
EndSwitch
EndProc   ;  (Ler_Gravar_Cheque)

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc CHAVEV()
While True
  SomaVenctos("PedidoV","PedidoV")

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

  SetaCorRegistro("Editar")
  While True

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

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

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               SomaVenctos("PedidoV","PedidoV")

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

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

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

  Switch
  Case RetVal="F1":
       If Field()="Forma de Pagamento"
          Then CONSULTAF1()
       EndIf
  Case RetVal="ESC":
       If Field()="Numero de Dias"
          Then If QuerDesfazer("")
                  Then If CHAVEV=1
                          Then Del
                       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
                    []=[PedidoC->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_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 "PedidoV"
                                   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 "PedidoV"   
                                   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 Digita_Cheque()
               Else If []="CT" or []="CD" or []="CL"
                       Then Digita_Cartao()
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc

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

Moveto "PedidoC"
V_TRANSP=[Codigo da Transportadora]
Moveto [Codigo da Transportadora]
If CHAVEC=1 And IsBlank([Razao Social Transport])
   Then [Codigo da Transportadora]=""
        [Codigo da Transportadora]=V_TRANSP
        If IsBlank([Codigo da Transportadora])
           Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                V_TRANSP=[Codigo da Transportadora]
        Endif
EndIf
While True

      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()="Codigo da Transportadora" Or
         Field()="Codigo do Veiculo"        Or
         Field()="Cidade Transport"         Or
         Field()="UF Transport"
         Then MSGCAMPO =MSGCAMPO +", [F1]Consultar tabela"
      EndIf

      Prompt TECLA

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

      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F4] Calcular ~V~olumes          " : " Calcular Volumes                " : "F4",
                "[F6] ~I~mprimir                  " : " Imprimir Pedido                 " : "F6",
                "[F7] Observa‡„o da ~N~ota Fiscal " : " Observa‡„o da Nota Fiscal       " : "F7",
                "[F8] Observa‡„o do ~P~edido      " : " Observa‡„o do Pedido            " : "F8",
                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()="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="F7":           
           Edita_Memo("Observacao na Nota Fiscal",15,00,07,80,"Observa‡„o da Nota Fiscal")    
      Case RetVal="F8":           
           Edita_Memo("Observacao do Pedido",15,00,07,80,"Observa‡„o do Pedido")             
      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()="Numero de Volumes":
                Moveto [Codigo do Veiculo]
           Case Field()="Observacao na Nota Fiscal":
                Moveto [Numero de Volumes]
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGUP":
           CHAVED=9
           QuitLoop
      Case Retval="PGDN":
           If IsBlank([Codigo da Transportadora]) Then Mensagem("Transportador Invalido !") Loop EndIf
           If IsBlank([Frete por Conta]) Then Mensagem("Frete por Conta Invalido !") Loop EndIf
           QuitLoop
      Case Retval="F6":
           If IsBlank([Codigo da Transportadora]) Then Mensagem("Transportador Invalido !") Loop EndIf
           If IsBlank([Frete por Conta]) Then Mensagem("Frete por Conta Invalido !") Loop EndIf
           npedido = [PedidoC->Numero do Pedido]
           ncampo=Field()
           If IMPRIME()
              Then QuitLoop
              Else Moveto Field ncampo
           EndIf
      Case Retval="F4":
           CALC_VOLUMES("PEDIDO_GRADE")
      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]
           Case Field()="Peso Liquido":     
                Moveto [Numero de Volumes]
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DIGITAD)

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

Moveto "PedidoG"

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

Scan
  If [Quantidade Faturada]>0
     Then Mensagem(
          Completa("N„o ‚ possivel excluir o pedido "+[Numero do Pedido]+", pois foi detectado ocorrˆncia",71," ")+"//"+
          Completa("de faturamento na(s) referencia(s) deste pedido.",71," ")+"////"+
          Completa("Caso seja necess rio esta exclus„o, fa‡a o estorno no faturamento.",71," "))
          Moveto "PedidoC"
          Return
  EndIf
EndScan
Home

CHAVEI=8
While RecordStatus("New")=False
    If GRAVA_LOG Then Grava_LogEx("Item do PedidoG") EndIf
    EXCLUSAO_I()
EndWhile
Moveto "PedidoI"
CHAVEI=8
While RecordStatus("New")=False
  If GRAVA_LOG Then Grava_LogEx("Item do Pedido") EndIf
  EXCLUSAO_I()
EndWhile
Moveto "PedidoV"
While RecordStatus("New")=False
  Del
EndWhile
Moveto "PedidoC"
GRAVA_LOG = ANT_GRAVA_LOG
If GRAVA_LOG Then Grava_LogEx("PedidoG") EndIf
Del

Release Vars GRAVA_LOG

EndProc ;(EXCLUSAO_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Exclusao_I()
Private y,REG_PEDG

If Not IsAssigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

If PEDIDO_COM_QTDF And CHAVEI=8 
   Then If AtLast()
           Then ;A ultima referˆncia ‚ excluida se nÆo tiver nenhum faturamento.
                ;Isso ao fato do usu rio inserir uma referˆncia por engano, podendo 
                ;excluir sempre o ultimo registro se o mesmo nÆo houver ocorrˆncia de faturamento
                Del
           Else For y From 1 To 12
                  Switch
                    Case y=1  : If [Qtd1]  > 0 Then [Qtd1]  = BlankNum() EndIf
                    Case y=2  : If [Qtd2]  > 0 Then [Qtd2]  = BlankNum() EndIf
                    Case y=3  : If [Qtd3]  > 0 Then [Qtd3]  = BlankNum() EndIf
                    Case y=4  : If [Qtd4]  > 0 Then [Qtd4]  = BlankNum() EndIf
                    Case y=5  : If [Qtd5]  > 0 Then [Qtd5]  = BlankNum() EndIf
                    Case y=6  : If [Qtd6]  > 0 Then [Qtd6]  = BlankNum() EndIf
                    Case y=7  : If [Qtd7]  > 0 Then [Qtd7]  = BlankNum() EndIf
                    Case y=8  : If [Qtd8]  > 0 Then [Qtd8]  = BlankNum() EndIf
                    Case y=9  : If [Qtd9]  > 0 Then [Qtd9]  = BlankNum() EndIf
                    Case y=10 : If [Qtd10] > 0 Then [Qtd10] = BlankNum() EndIf
                    Case y=11 : If [Qtd11] > 0 Then [Qtd11] = BlankNum() EndIf
                    Case y=12 : If [Qtd12] > 0 Then [Qtd12] = BlankNum() EndIf
                  EndSwitch            
                EndFor
                [Preco Unitario]=BlankNum()
                [Preco Total   ]=BlankNum()
                [Quantidade    ]=BlankNum()
                Mensagem(Completa("A Ref. "+[Referencia]+" n„o pode excluida pois foi detectado ocorrˆncia de",71," ")+"//"+
                        Completa("faturamento  neste  pedido,  no  entanto  as  quantidades desta",71," ")+"//"+ 
                        Completa("referˆncia ser„o zeradas!",71," "))
        EndIf        
   Else Del
EndIf
  
EndProc ;(EXCLUSAO_I)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON,IMPRESSO, NUMPED,ANT_FIE,PROCESSA_PEDIDO

ANT_FIE  = Field()

NUMPED   = [Numero do Pedido]
PEDIDO   = [Numero do Pedido]
npedido  = [Numero do Pedido]

Opcaoc   = ""
IMPRESSO = False

VSD_TG_EDest = "***Indefinido***"  
GetRecord "\\Sistemas\\Cadastro\\Destmail" [PedidoC->Codigo],"C" To REG_DestE
If not RetVal
  Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [PedidoC->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

Opcaoc="Gerencial"
If Not IsBlank(PARAM_RELATORIO_S)
   Then If SYS_CODIGO_CLIENTE="0232" 
          Then Echo Normal
                Echo Off
                ShowPopup " Relatorio " CENTERED
                   "~G~erencial" : " Imprime Modelo Gerencial"   :"Gerencial",  
                   "~E~xpedi‡„o" : " Imprime Modelo p/ Expedi‡„o":"Expedi‡„o",
                   "~A~mbos"     : " Imprime Ambos os Modelos"   :"Ambos",
                   separator,
                   "Gerencial · ~F~aturar" : " Imprime Modelo Gerencial somente quantidades … Faturar"   :"Gerencial2"
                EndMenu
                To Opcaoc
        
                Echo off
        
                If Not RetVal or Opcaoc="Esc"
                   Then Return False
                EndIf
          
          Else  Echo Normal
                Echo Off
                ShowPopup " Relatorio " CENTERED
                   "~G~erencial" : " Imprime Modelo Gerencial"   :"Gerencial",
                   "~E~xpedi‡„o" : " Imprime Modelo p/ Expedi‡„o":"Expedi‡„o",
                   "~A~mbos"     : " Imprime Ambos os Modelos"   :"Ambos"
                EndMenu
                To Opcaoc
        
                Echo off
        
                If Not RetVal or Opcaoc="Esc"
                   Then Return False
                EndIf
      EndIf
EndIf

If Opcaoc="Gerencial2" And primeira_vezc
  Then primeira_vezc=False
       Faturados_PedidoI()
EndIf
  
If SYS_CODIGO_CLIENTE="0222" 
   Then Echo Normal
        Echo Off
        ShowPopup " Relatorio " CENTERED
           "~C~om Observacao"  : " Imprime com observacao"  :"Normal",
           "~S~em Observacao"  : " Imprime sem observacao"  :"Cliente"
        EndMenu
        To IMPRIMEVIA

        Echo off

        If Not RetVal or IMPRIMEVIA="Esc"
           Then Return False
        EndIf
EndIf

CODPED=[PedidoC->Numero do Pedido]
UnLockRecord
Do_It!
SaveTables
ClearAll

DispositivoI("PED")
If OK="" 
   Then PROCESSA_PEDIDO=False
   Else PROCESSA_PEDIDO=True
EndIf

Carrega_Tabelas()

Coedit "PedidoC"
PickForm "4"

Moveto [Numero do Pedido]
Locate npedido
    
If Not PROCESSA_PEDIDO
   Then 
        Moveto Field ANT_FIE
        SetaCorRegistro("Editar")
   
        Return False
EndIf   
Do_It!

PEDIMAGEM = Opcaoc
ARQ_EMAIL= PrivDir()+[PedidoC->Numero do Pedido]+".txt"

For L From 1 To NUMCOPIA
  If Opcaoc="Ambos" Or Opcaoc="Gerencial"
     Then Play PARAM_RELATORIO
  EndIf
  If Opcaoc="Ambos" Or Opcaoc="Expedi‡„o"
     Then 
        If Opcaoc="Ambos"
           Then  
             View "PedidoC"
             Moveto [Numero do Pedido]
             Locate PEDIDO
             PickForm "4"
        EndIF     
        Play PARAM_RELATORIO_S
  EndIf
  
  If Opcaoc="Gerencial2"
    Then Play "PD_0232F"
    
  EndIf  

EndFor

IMPRESSO=True

Do_It!
ClearAll

Carrega_Tabelas()

Coedit "PedidoC"
PickForm "4"

If IMPRESSO
   Then Moveto [Numero do Pedido]
        Locate npedido
        If RetVal
           Then [Pedido Impresso]="S"
        EndIf   
EndIf   

Return True
EndProc

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

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

CodClie=[PedidoC->Codigo                 ]
CodRepr=[PedidoC->Codigo do Representante]
CodItem=VSD_I_Codigo_Item
CodItem=PegaCodigoRaiz(CodItem)

ITEM_PROMOCIONAL="N"
PesqOk          =False

If PARAM_UTILIZA_TABPR_CLIENTE="S"
   Then GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, CodItem To Registro_TabPreco_Item
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If PARAM_UTILIZA_TABPR_REPRES="S" AND Not PesqOk
   Then GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, CodItem To Registro_TabPreco_Item   
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If Not PesqOk
   Then GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, CodItem          To Registro_TabPreco_Item
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

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

        If PARAM_PEGAPRECO_CPAGTO = "S"
           Then 
                PesqOk=False
                Moveto [Lookup_TabPreco_CondPagto]
                Ativa_Lookup()
                Moveto [Codigo da Tabela]
                Locate TABPR
                If RetVal
                   Then While [Codigo da Tabela] = TABPR
                          If [Condicao de Pagamento] = CPGTO
                             Then CopyToArray Registro_TabPreco_CondPagto
                                  PesqOK=True
                                  QuitLoop
                          EndIf
                          Skip
                          If Eot()
                             Then QuitLoop
                          Endif
                        EndWhile
                Endif
                KeyPress "ESC"
                If PesqOk
                   Then [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]+
                                                NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                                Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                   Else If OpcaoP="Altera"
                           Then MSG="Na Tabela de Pre‡o ["+TABPR+"] n„o consta a condi‡„o de pagamento ["+CPGTO+"]!// //"
                                MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !// //"
                                MSG=MSG+"Continuar a altera‡„o nos outros Itens ?"
                                ConfGeral(MSG)
                                If OK<>"S"
                                   Then Return False
                                EndIf
                           Else [Preco Unitario       ]=BlankNum()
                                [Preco Unitario Tabela]=BlankNum()
                        EndIf
                EndIf
           Else [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
                [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
        EndIf
   Else If OpcaoP="Altera"
           Then MSG="Item ["+CodItem+"] n„o consta na Tabela de Pre‡o ["+TABPR+"]!// //"
                MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !// //"
                MSG=MSG+"Continuar a altera‡„o nos outros Itens ?"
                ConfGeral(MSG)
                If OK<>"S"
                   Then Return False
                EndIf
           Else [Preco Unitario       ]=BlankNum()
                [Preco Unitario Tabela]=BlankNum()
        EndIf
EndIf

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

Moveto "PedidoG"
Switch
  Case OpcaoP="Novo":
       [Preco Unitario       ]=VSD_I_Preco_Unitario
       [Preco Unitario Tabela]=VSD_I_Preco_Tabela
       UnLockRecord
  Case OpcaoP="Altera":
       If [Preco Unitario]<=0
          Then Undo
               MSG="O Item ["+CodItem+"] esta sem valor na Tabela de Pre‡o ["+TABPR+"]!// //"
               MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !"
               Mensagem(MSG)
          Else reftemp = [Referencia]
               cortemp = [Codigo da Cor_Tecido]
               
               [Preco Unitario       ]=VSD_I_Preco_Unitario
               [Preco Unitario Tabela]=VSD_I_Preco_Tabela

               [Referencia          ]=reftemp
               [Codigo da Cor_Tecido]=cortemp
               [Codigo da Tabela     ]=TABPR
               

               UnLockRecord
               If [Taxa Desconto Unitario]>0
                  Then [Valor Desconto Unitario]=NDecimal(([Preco Unitario]*[Taxa Desconto Unitario])/100,2)
               EndIf
               If [Quantidade]>0
                  Then [Preco Total]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
                  Else If [Preco Unitario]>0
                          Then [Preco Total]=[Preco Unitario]-[Valor Desconto Unitario]
                       EndIf
               EndIf
               If [Aliquota Reduzida BCICMS]>0 And
                  [Aliquota de ICMS        ]>0
                  Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                  Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
               EndIf
               If [Tributacao de IPI]<>"D"
                  Then If Not IsBlank([Tributacao de IPI])
                          Then [Aliquota de IPI]=BlankNum()
                               [Valor do IPI   ]=BlankNum()
                       EndIf
               EndIf
               If [Aliquota de IPI        ]>0
                  Then [Valor do IPI]=Round(([Preco Total]*[Aliquota de IPI])/100,2)
               EndIf
               UnLockRecord
       EndIf
EndSwitch

Echo Normal
Echo Off

Return True
EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Rateio_BC_Itens(TabelaRefC)
Private nitens, TabelaRefC, TabelaRefI, REG_TABELAREFC, CONTADOR_BC_RATEIO

For CONTADOR_BC_RATEIO From 1 To 2
  Switch
    Case CONTADOR_BC_RATEIO=1 : TabelaRefI="Pedidoi"    
    Case CONTADOR_BC_RATEIO=2 : TabelaRefI="Pedidog"
  EndSwitch
  
  Moveto TabelaRefC  
  CopyToArray REG_TABELAREFC ; guarda dados registro mestre
  Aguarde("Atualizando rateios nos itens")
  
  Moveto TabelaRefI

  nitens=0
  Scan
    nitens=nitens+1
  
    [Taxa Desconto Total      ]=It_txdescto[nitens]        
    [Valor Desconto Total     ]=It_descto[nitens]          
    ;[Valor Frete Total        ]=It_frete[nitens]         
    ;[Valor Seguro Total       ]=It_seguro[nitens]          
    ;[Valor OutDesp Total      ]=It_outdesp[nitens]         
  
    [ICMS_BC                  ]=It_bc_icms[nitens]       
    [Valor do ICMS            ]=It_vr_icms[nitens]       
  
   ;[ICMS_CREDSN_Aliquota     ]=It_aliq_icmscred[nitens]  
   ;[ICMS_CREDSN_Valor        ]=It_vr_icmscred[nitens]   
  
    [ICMS_ST_Aliquota         ]=It_aliq_st[nitens]        
    [ICMS_ST_BC               ]=It_bc_st[nitens]         
    [ICMS_ST_Valor            ]=It_vr_st[nitens]         
  
    [IPI_BC                   ]=It_bc_ipi[nitens]        
    [Valor do IPI             ]=It_vr_ipi[nitens]        
  
   ;[ISSQN_BC                 ]=It_bc_issqn[nitens]      
   ;[Valor do ISSQN           ]=It_vr_issqn[nitens]      
  
   ;[PIS_BC                   ]=It_bc_pis[nitens]        
   ;[PIS_Valor                ]=It_vr_pis[nitens]         
  
   ;[COFINS_BC                ]=It_bc_cofins[nitens]     
   ;[COFINS_Valor             ]=It_vr_cofins[nitens]    
     
    UnLockRecord
  EndScan
  If RecordStatus("Locked") Then UnLockRecord EndIf         

  If CONTADOR_BC_RATEIO=1
    Then Carrega_array_Itens("PedidoG")
         CALCULA_IMPOSTO()
  EndIf    
EndFor
      
Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

;*******************************************************************************
;* Rotina Rateio Desconto Total                                                *
;*******************************************************************************
Proc Rateio_Descto_Total()
Private TXDESCTO_TOTAL, VBC

Moveto "PedidoC"
If [Taxa de Desconto]>0
   Then TXDESCTO_TOTAL=[Taxa de Desconto]
   Else TXDESCTO_TOTAL=([Valor do Desconto]/[Valor Mercadoria])*100
EndIf

Moveto "PedidoI"
Scan
  [Taxa Desconto Total     ] = TXDESCTO_TOTAL
  [Valor Desconto Total    ] = Round((([Preco Total]*TXDESCTO_TOTAL)/100),5)
                               VBC= [Preco Total]-[Valor Desconto Total]
                               VBC= VBC-Round((VBC*[Aliquota Reduzida BCICMS])/100,2)
  If VBC>0
     Then [Valor do ICMS   ] = Round((VBC*[Aliquota de ICMS])/100,2)
  EndIf
EndScan

Moveto "PedidoC"
EndProc

;*******************************************************************************
;* Rotina p/ Montar Opcoes p/ Grade                                            *
;*******************************************************************************
Proc Monta_Opcoes(OPCAODIVERSAS, ITEMDESEJADO)
Private OPCAODIVERSAS, ITEMDESEJADO, wcg, icg, icgt, tnovo, nomecampo,opconta
nomecampo=Field()
If IsAssigned(Opcoes)
   Then Release Vars Opcoes
EndIf
DynArray Opcoes[]
Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido":
       Moveto [Lookup_Iten_Cor]
EndSwitch
Ativa_Lookup()
Moveto [Codigo do item]
Locate VSD_I_Codigo_Item 

wcg=0
If NRecords(Table())>0
   Then While [Codigo do Item]=VSD_I_Codigo_Item
          Switch
            Case OPCAODIVERSAS="Codigo da Cor_Tecido" And 
                 (SYS_CODIGO_CLIENTE="0232" or
                  SYS_CODIGO_CLIENTE="0222" ):
                 wcg=wcg+1
                 Opcoes[wcg]=AlinhM(StrVal([Sequencia da Cor_Tecido]),4)+"  "+[Codigo da Cor_Tecido]+"-"+Completa([Descricao da Cor_Tecido],30," ")

            Case OPCAODIVERSAS="Codigo da Cor_Tecido":
                 wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao da Cor_Tecido],30," ")+" "+[Codigo da Cor_Tecido]+" - "+Format("W3,AR",[Sequencia da Cor_Tecido])
          EndSwitch
          Skip
          IF EOT() Then QuitLoop EndIf
        EndWhile
Endif
KeyPress "ESC"
Moveto Field nomecampo
EndProc    ; (Monta_Opcoes)

;*******************************************************************************
;* Rotina p/ Checagem Opcoes p/ Grade                                          *
;*******************************************************************************
Proc Checa_Opcoes(OPCAODIVERSAS, VALORDESEJADO)
Private OPCAODIVERSAS, VALORDESEJADO, icg, resultado

If DynArraySize(Opcoes)=0
   Then Return False
EndIf

resultado=false
For icg From 1 To DynArraySize(Opcoes)
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And 
         ( SYS_CODIGO_CLIENTE="0222" or
          SYS_CODIGO_CLIENTE="0232" ):
         If RTrim(SubStr(Opcoes[icg],07,4))=VALORDESEJADO
            Then resultado=true
         EndIf

    Case OPCAODIVERSAS="Codigo da Cor_Tecido":
         If RTrim(SubStr(Opcoes[icg],32,4))=VALORDESEJADO
            Then resultado=true
         EndIf
  EndSwitch
  If resultado
     then MontaRegistro_F1(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc         ;  (Checa_Opcoes)

;*******************************************************************************
;* Rotina Montar Registro_F1 p/ Grade                                          *
;*******************************************************************************
Proc MontaRegistro_F1(OPCAODIVERSAS, indice)
private OPCAODIVERSAS, indice

If IsAssigned(Registro_F1)
   Then Release Vars Registro_F1
EndIf
DynArray Registro_F1[]
Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido" And 
       ( SYS_CODIGO_CLIENTE="0222" Or
         SYS_CODIGO_CLIENTE="0232" ):
       Registro_F1["Codigo da Cor_Tecido"]         =RTrim(SubStr(Opcoes[indice],07,4))
       Registro_F1["Descricao da Cor_Tecido"]      =RTrim(SubStr(Opcoes[indice],12,30))
       If IsAssigned(VSDGCORTECIDO)
          Then VSD_I_Codigo_Cor_Tecido   =Registro_F1["Codigo da Cor_Tecido"]
               VSD_I_Descricao_Cor_Tecido=Registro_F1["Descricao da Cor_Tecido"]
       EndIf

  Case OPCAODIVERSAS="Codigo da Cor_Tecido"  :
       Registro_F1["Codigo da Cor_Tecido"]         =RTrim(SubStr(Opcoes[indice],32,4))
       Registro_F1["Descricao da Cor_Tecido"]      =RTrim(SubStr(Opcoes[indice],01,30))
       If IsAssigned(VSDGCORTECIDO)
          Then VSD_I_Codigo_Cor_Tecido   =Registro_F1["Codigo da Cor_Tecido"]
               VSD_I_Descricao_Cor_Tecido=Registro_F1["Descricao da Cor_Tecido"]
       EndIf
EndSwitch
EndProc    ;  (Monta_RegistroF1)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO)
Private OPCAODIVERSAS, LJ, AJ, nc, SEMRETORNO

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

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

Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido"   : LJ=43 nc=1
EndSwitch

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

   PickDynArray @0,01 Height AJ width LJ
   Columns nc
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
Mouse Show
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Codigo da Cor_Tecido":
                  [Codigo da Cor_Tecido   ]=Registro_F1["Codigo da Cor_Tecido"]
                  [Descricao da Cor_Tecido]=Registro_F1["Descricao da Cor_Tecido"]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (Seleciona_Opcoes)

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

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

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

OldI_Pedido_Compra=""

ITEMALTERADO=False
OPCHAVEI=""
primeira_vezc=True
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
          [Sistema Gerador]="MA"
  EndIf

  If primeira_vezc
     Then primeira_vezc=False
          Faturados_PedidoI()
  EndIf        
  
  While FACA_CHAVEI

    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
    EndWhile
    While FACA_DIGITAF
      DIGITAF()
      Rateio_BC_Itens("PedidoC")
            If CHAVEF=9 Then QuitLoop EndIf
      DIGITAD()
      If CHAVED=0
         Then FACA_DIGITAC=False
              FACA_CHAVEI =False
              QuitLoop
      EndIf
    EndWhile
  EndWhile
EndWhile
Moveto "PedidoC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Carrega Parametros                                                   *
;*******************************************************************************
Proc Carrega_ParametrosD()

View NoWindow "\\Sistemas\\Cadastro\\P_Dest"
If IsEmpty("\\Sistemas\\Cadastro\\P_Dest")
   Then CoEditKey
        [Utiliza_CGC_Cliente]="N"
        Do_It!
EndIf
PARAM_CGC_CLIENTE   =[Utiliza_CGC_Cliente]
PARAM_CGC_FORNECEDOR=[Utiliza_CGC_Fornecedor]
PARAM_REUTILIZA     =[Reutiliza_Cod      ]
PARAM_INICIAL       =[Cliente_Inicial    ]
PARAM_FINAL         =[Cliente_Final      ]
ClearImage

EndProc ; (Carrega_ParametrosD)

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

View NoWindow "\\Sistemas\\Cadastro\\Destinat"
View NoWindow "\\Sistemas\\Cadastro\\End_Cob"

View NoWindow "\\Sistemas\\Estoque\\Itens"

View NoWindow "P_Pedido"

EndProc   ; (Carrega_Tabelas)

;***************************+***************************************************
;* Rotina Principal Pedidos                                                    *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Vendas\\Bib_Vend"

Sys_Valor()
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""      EndIf
If Not IsAssigned(PEDIDO_COM_QTDF)     Then PEDIDO_COM_QTDF = False  EndIf
                       
Carrega_ParametrosD()
ROTINA_PEDIDO   = "PEDIDOG"
VCITENS         = BlankNum()
VSQTDE          = BlankNum()
VSVRMERC        = BlankNum()
VSVRVENCTOS     = BlankNum()

SYS_APLICATIVO  = "PEDIDO"
Switch
  Case SYS_CODIGO_CLIENTE="0222" or
       SYS_CODIGO_CLIENTE="0232" or
       SYS_CODIGO_CLIENTE="0227" : PARAM_ENVIA_EMAIL     = "S"
  OtherWise                      : PARAM_ENVIA_EMAIL     = "N"
EndSwitch       

If Not IsAssigned(LOCALIZA_CODIGO) 
   Then LOCALIZA_CODIGO=""
        Switch 
          Case SYS_CODIGO_CLIENTE="0319" Or
               SYS_CODIGO_CLIENTE="0296"  : LOCALIZA_CODIGO="LOC_CODREF"
          Case SYS_CODIGO_CLIENTE="0046"  : LOCALIZA_CODIGO="LOC_CODBAR"
          OtherWise                       : LOCALIZA_CODIGO="LOC_CODITE"
        EndSwitch                                                      
EndIf
ModoLocalizarItem("","","")

Array Array_TM[12]

Array CODIGO[900]
Array QUANTI[900]
Array PRECOU[900]

Array AICMS[10]
Array AIPI[10]

Array VIICMS[10]
Array VIIPI[10]

Array BCICMS[10]
Array BCIPI[10]

Array RICMS[10]
Array RIPI[10]

Array Dt_Vencto[12]
Array Vr_Vencto[12]
Array ND_Vencto[12]
Array VC_Vencto[12]
                                      
grdant="***"

Carrega_Tabelas()

CoEdit "PedidoC"
PickForm "F"
OPCAO_FORM="F"   

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

If NRecords("PedidoC")>1
   Then Home
        If IsBlank([Numero do Pedido])
           Then Del
        EndIf
EndIf               

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