;** RfacG **********************************************************************
;*  Producao/Retorno Faccao/Estamparia                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/03/2007 por Anivel Augusto Rodrigues
;Ultima Alteracao: 24/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CODIGO CONTA 0185
;Ultima Alteracao: 29/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Requisicao()
;Ultima Alteracao: 24/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BORDADO
;Ultima Alteracao: 26/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 27/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 03/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_RFacRI
;Ultima Alteracao: 15/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes gera_rfari
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 18/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Retorno TN
;Ultima Alteracao: 07/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Requisicao Estamp/Bordaria 0185
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 15/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulos
;Ultima Alteracao: 02/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PegaItens()
;Ultima Alteracao: 03/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Imprimir
;Ultima Alteracao: 27/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Descricao
;Ultima Alteracao: 06/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulos
;Ultima Alteracao: 25/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulos/Plano de Conta
;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: 24/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Retorno Faccao P ou S
;Ultima Alteracao: 25/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PARAM_ATUA_CAPG
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 11/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Lavanderia/Outros
;Ultima Alteracao: 25/09/2009 por Bruno Carvalho
;Motivo Alteracao: C¢digo Conta Caixa Adiconado no Parƒmetro
;Ultima Alteracao: 22/12/2009 por Cleber Alves
;Motivo Alteracao: Ajustes campo Data Competencia
;Ultima Alteracao: 15/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem consulta cores             
;Ultima Alteracao: 22/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data Competencia Titulos         
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_Rfacri()     
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 24/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mesnagem formula nÆo encontrada
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas     
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 25/04/2011 por Karina Andrade
;Motivo Alteracao: Adicionado C¢digo de Barras
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo Monta_Array_Grade e Ajustes Codigo de Barras
;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: 23/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes chamada fun‡äes nos itens  
;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: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 07/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Situa‡ao Finalizada ou Suspensa.
;Ultima Alteracao: 16/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Requisicao() para DESTINO="OUTROS"
;Ultima Alteracao: 31/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes requisi‡Æo retorno lavandeira como semi-acabado         
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes descricao do movimento/operacao                   
;Ultima Alteracao: 23/05/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Seleciona_Opcoes() quando ocorrer maior que 10 cores  
;Motivo Alteracao: Ajustes Pega_Preco() p/ quando PARAM_COR_TECIDO="S" procurar 
;                  1§ por Codigo do Item com a Cor e nÆo encontrando pelo Codigo Raiz 
;Ultima Alteracao: 16/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Data_Producao" p/ "Data de Vencimento"      
;Ultima Alteracao: 23/10/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes onde h  informa‡äes que trabalham com a tabela P_DESTI
;Ultima Alteracao: 04/11/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustado p\ carregar parametro quando necess rio
;Ultima Alteracao: 06/11/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Not IsAssigned(Param_Destino[wi])"
;Ultima Alteracao: 21/01/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes PRODUCAO2
;Ultima Alteracao: 25/02/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes PRODUCAO2
;Ultima Alteracao: 25/02/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes CDBarras_Producao() #0232#
;Ultima Alteracao: 08/03/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Recarrega_Corte()
;Ultima Alteracao: 11/03/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes   
;Ultima Alteracao: 25/03/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Formula() p/ PRODUCAO2
;Ultima Alteracao: 25/03/2014 por Anivel
;Motivo Alteracao: Ajustes Requisicao() antes de executar Formula()
;Ultima Alteracao: 24/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao acionar "F8"  
;Ultima Alteracao: 12/05/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes quando atualiza contas a pagar 
;Ultima Alteracao: 22/05/2015 por Bruno Carvalho
;Motivo Alteracao: Recarrega_Corte() criado procedimento p/ excluir itens que nÆo pertencem mais ao corte
;Ultima Alteracao: 02/06/2014 por Bruno Carvalho
;Motivo Alteracao: Altera‡„o/Ajustes para cliente #0171#
;Ultima Alteracao: 03/06/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Requisicao() onde foi adicionado o [Numero do Corte]
;Ultima Alteracao: 26/06/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Chave() 
;Ultima Alteracao: 02/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Recarrega_Corte()
;Ultima Alteracao: 17/07/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes bloquear quando quantidade < 0
;Ultima Alteracao: 18/07/2014 por Bruno Carvalho
;Motivo Alteracao: ChaveI() UnLockRecord e IsLockRecord, alterado para SaveTable
;Ultima Alteracao: 21/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes CHAVEI, registro em uso pelo usu rio
;Ultima Alteracao: 17/10/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes para [Acerto_Realizado] receber "N" quando for branco 
;Ultima Alteracao: 05/11/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes na rotina Recarrega_Corte(), quando item igual a de outra produ‡Æo
;Ultima Alteracao: 18/11/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes PegaItens() implementado vr falso p/ "ATUALIZA_ITEM"
;Ultima Alteracao: 17/03/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes na rotina para carregar e recarregar saldo da Programa‡Æo/Corte
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Array_Grade() -> Array_Monta_Grade() e adicionado-o na Bibliot
;Ultima Alteracao: 14/04/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Quantidade Original" na proc Pega_Itens()
;Ultima Alteracao: 05/10/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes na Requisi‡Æo p/ diferenciar quando for Entrada de Produ‡Æo/Industrializa‡Æo
;Ultima Alteracao: 06/10/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustado p/ ser  informado o numero do corte quando puxar a programa‡Æo se executado a rotina de PRODUCAO2 
;Ultima Alteracao: 06/10/2015 por Bruno Carvalho
;Motivo Alteracao: Comentado/Cancelado na Requisi‡Æo p/ quando diferenciar Entrada de Produ‡Æo/Industrializa‡Æo
;Ultima Alteracao: 30/11/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado o modelo de impressÆo DOCUMENTO, script "RP_RFACR" para a rotina de PRODUCAO II
;Ultima Alteracao: 17/12/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes PRODUCAO2
;Ultima Alteracao: 29/03/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc REQUISICAO() p/ maior seguran‡a na montagem da cabe‡a e a inser‡ao dos itens #ProximaOrdem() adicionada
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord         
;Ultima Alteracao: 11/04/2016 por Bruno Carvalho
;Motivo Alteracao: Removido da tabela de itens grade [Lookup_TabPreco_Item] e [Lookup_TabPreco_Cliente] e ajustado o campo [Referencia] e [Descricao da Cor_Tecido]
;Ultima Alteracao: 02/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando [Sistema Gerador]="MG" And [Lancamento Gerador]="" (DATAM)
;Ultima Alteracao: 30/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para gera‡Æo/verifica‡Æo do [Numero do Lancamento] 
;Ultima Alteracao: 09/08/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Verifica_Situacao_Programacao() p/ finalizar a PROGRAMACAO se todas as quantidade forem produzidas
;Ultima Alteracao: 16/08/2016 por Bruno Carvalho 
;Motivo Alteracao: Direcionado p/ tabela de origem ap¢s AbreTabelas() -> Ajustes realizados na IMPRIME()    
;Ultima Alteracao: 13/09/2016 por Bruno Carvalho 
;Motivo Alteracao: Removido o novo processo para gera‡Æo/verifica‡Æo do [Numero do Lancamento] #Sol. 25558#
;                  Utiliza o mesmo numero do corte e o numero da produ‡Æo do corte
;Ultima Alteracao: 12/01/2016 por Rafael Matos/Anivel 
;Motivo Alteracao: Ajustes Verifica_Situacao_Programacao()
;Ultima Alteracao: 16/01/2016 por Rafael Matos/Anivel 
;Motivo Alteracao: Ajustes Verifica_Situacao_Programacao()
;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: 23/06/2017 por Kamila Gomes
;Motivo Alteracao: Ajuste na proc PegaItens(PARAM), no Processo Parcial Programa‡Æo/Corte, para recalcular saldo 
;                  da quantidade produzida e do pre‡o total
;Ultima Alteracao: 25/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desativar tecla alt+O (-24) ir ao prompt do DOS
;Ultima Alteracao: 16/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes PegaItens() ao inserir dados na "Rfacrig" 
;Ultima Alteracao: 16/10/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes no calculo das pe‡as/pre‡o total das pe‡as -> SomatoriaDosItens()
;Ultima Alteracao: 23/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro()
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho
;Motivo Alteracao: Alterado o valor da vari vel VSD_I_Custo_Unitario -> De [Preco Unitario] p/ [Custo Unitario]
;Ultima Alteracao: 26/03/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc REQUISICAO() ao tentar utilizar o n§ requisicao gravado na produ‡Æo (refazendo a produ‡Æo) 
;                  e bloquear este n£mero p/ re-gerar a requisi‡Æo
;Ultima Alteracao: 06/04/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes REQUISICAO() ao gravar e travar o numero do lancamento -> PostRecord
;Ultima Alteracao: 09/04/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Situacao_Programacao()
;Ultima Alteracao: 13/04/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel DESTINO ao chamar RP_CORTE
;Ultima Alteracao: 23/04/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ gerar uma segunda requisi‡Æo quando for Produ‡Æo do Corte
;                  Pois, ao gerar a requisi‡Æo do produto acabado, o Semi-Acabado nÆo estava entrando no estoque 
;Ultima Alteracao: 04/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc FORMULA() onde o produto com retorno de PRODUTO ACABADO
;                  estava saindo com o seu semi-acabado na Programa‡Æo e Produ‡Æo
;Ultima Alteracao: 04/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao chamar Formula(), onde ser  executado somente se destino for retorno de produto acabado 
;Ultima Alteracao: 10/05/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ ser realizada v rios produ‡äes do corte ou a programa‡Æo do corte
;Ultima Alteracao: 23/05/2018 por Bruno Carvalho
;Motivo Alteracao: Comentado processo para gerar 2 requisi‡äes -> Requisicao("Semi_Acabado")
;                  Criado a principio p/ sol. 32570, no entanto alterado e reajustado para atender a sol.: 36148
;                  NÆo tem a necessidade de gerar 2x requisi‡äes apenas alguns ajustes implementados p/ atender ambas as solicita‡äes
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 13/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Formula() baixar semi-acabado quando nÆo tem programa‡Æo
;Ultima Alteracao: 13/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PARAM_CORTE=""
;Ultima Alteracao: 20/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes forms producao II e SomatoriaDosItens()
;Ultima Alteracao: 26/06/2018 por Bruno Carvalho
;Motivo Alteracao: Alterado vari vel PRODUCAO_CORTE para PRODUCAO2
;Ultima Alteracao: 26/06/2018 por Bruno Carvalho
;Motivo Alteracao: Alterado PARAM_CORTE para TROUXE_CORTE e ajustes TROUXE_CORTE p/ ser verificado somente quando for setado
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado Ficha "F3" para PRODUCAO2, layout "Invisivel" em determindas tabelas unliked e MSG_CAMPO="Referˆncia"
;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: 16/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao verificar producao/programacao do corte em lan‡amentos no 03. ou 36. 
;Ultima Alteracao: 31/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado ao verificar itens na RFACRI ou RIG utilizando o GetRecord
;Ultima Alteracao: 01/08/2018 por Bruno Carvalho
;Motivo Alteracao: Comentado o processo que cria a tabela RFACRIG (nome da vari vel), pois nÆo localizei a fun‡Æo desta tabela
;Ultima Alteracao: 02/08/2018 por Bruno Carvalho
;Motivo Alteracao: V rios ajustes para otimiza‡Æo de processo
;Ultima Alteracao: 02/08/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao verificar a existˆncia de itens, se registro CHAVEC=0 -> DIGITA()
;Ultima Alteracao: 08/08/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Tabelas_Requisicao() e utilizado View NOWINDOW para abrir as tabelas para gerar requisi‡Æo
;Ultima Alteracao: 05/09/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado ajustes para ignorar requisi‡äes quando retorno de destino for "N" -> PARAM_RETORNO_DESTINO="N" **MAPAS
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 30/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no processo para localizar codbar da proc CDBarras()
;Ultima Alteracao: 29/07/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes na vari vel de controle FAZ_PROCESSO na proc CHAVEI()
;Ultima Alteracao: 09/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor_tecido #0232
;Ultima Alteracao: 08/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc ESTOQUE() -> CUSTOMEDIO=[Preco de Custo]
;Ultima Alteracao: 08/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no [Valor Total] ao receber a vari vel "TOTVR" -> SaveTables e UnLockRecord
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Movido o Controle_Dia() p/ o Controla_EdicaoC()
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado IntervaloData()
;Ultima Alteracao: 05/11/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustado Controle_Dia() a partir do campo [Data_Producao] **Estava reportando erro no Controla_EdicaoC()  
;Ultima Alteracao: 07/11/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc CDBarras(), [Preco Total] nÆo estava sendo atualizado, deixando-o sem valor
;Ultima Alteracao: 11/12/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes [Numero do Lancamento] p/ utiliza‡Æo do modo padrÆo, add AjustaDadosCabeca() onde ajusta pre‡o e quantidade na cabe‡a do processo 
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 02/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes chamada SomatoriaDosItens()+AjustaDadosCabeca() 
;Ultima Alteracao: 09/09/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionando rodap‚ de progresso ao adicionar/verificar produ‡Æo/corte -> Programacao_Corte() e Programacao_Producao()
;Ultima Alteracao: 05/10/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel de controle VERIFICA_GRADE_GETRECORD p/ Array_Monta_Grade()
;Ultima Alteracao: 09/10/2020 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes para avisar a execu‡Æo do FechaMes
;Ultima Alteracao: 26/10/2020 por Bruno Carvalho                       
;Motivo Alteracao: Adicionado vari vel SISTEMA_GERADOR
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ exibir mensagem com informativo de desempenho somente quando quantidade de registros for maior que zero
;Ultima Alteracao: 05/01/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ESTOQUE() customedio
;Ultima Alteracao: 18/01/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo de filtro
;Ultima Alteracao: 02/02/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado msg de alerta ao tentar inserir saldo parcial de uma programa‡Æo existente sem sucesso na proc PegaItens()  
;Ultima Alteracao: 15/04/2021 por Bruno Carvalho 
;Motivo Alteracao: Ajustes ao criar a requisi‡Æo conforme retorno do destino da programa‡Æo "03" -> PARAM_RETORNO_DESTINO="S"                                                          
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 
;Ultima Alteracao: 08/07/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0232 bloquear qtd > programada codigo de barras
 
;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVE()
INICIO=True
campocorrente=""

VSQTDP = BlankNum()                  
VSQTDE = BlankNum()
TOTVR  = BlankNum()

While True
  Moveto TabelaControle
  End
  Moveto [Numero_Producao]
  NPROD=[Numero_Producao]
  
  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn
  EndIf
  Moveto [Numero_Producao]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadraoCF()
  
    If RetVal="F5" 
       Then RetVal = MenuFiltrar()
            Release Vars MfOpcao
    EndIf
      
    Switch
        ;---- FILTRO -----------------------------------------------------------
        Case RetVal="MENUFILTRAR" :
             CHAVEC=99
             Del
             Return
        Case RetVal="MENUFILTROTODOS" :
             MODOFILTRAR=False
             CHAVEC=98
             Del
             Return
        ;-----------------------------------------------------------------------      
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F3":
             If OPCAO_FORM="F"
                Then If PRODUCAO2
                        Then OPCAO_FORM="3"
                        Else OPCAO_FORM="2"
                     EndIf   
                Else OPCAO_FORM="F"
             EndIf
             Del
             CHAVEC=5
             Return        
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             MODOPAGINA = True
             Del
             While True
               INICIO=True
               campocorrente=""
               VSQTDP = BlankNum()                  
               VSQTDE = BlankNum()
               TOTVR  = BlankNum()

               If OPCAO_FORM="F"
                  Then PAGINA(TabelaControle,"MR")
                  Else PAGINA(TabelaControle,"MT")
               EndIf
               CHAVEC=0
               NPROD   =[Numero_Producao]
               If EDITAR="S"
                  Then If PegaRegistroControle("Numero_Producao",NPROD)
                          Then If OPCAO_FORM="F"
                                  Then If PRODUCAO2
                                          Then PickForm "3"
                                          Else PickForm "2"
                                       EndIf    
                               EndIf
                               If Checa_Controle([Numero_Controle_Dia])
                                  Then Controla_EdicaoC()
                                  Else UnLockRecord
                                       AtualizaRegistroControle("Numero_Producao",NPROD,MODOPAGINA)   
                               EndIf
                       EndIf        
                  Else If EXCLUIR="S"
                          Then If MODOFILTRAR 
                                  Then FastMsg("Modo [FILTRO] exclusÆo nÆo permitida !")
                                       UnLockRecord 
                                  Else If PegaRegistroControle("Numero_Producao",NPROD)
                                          Then If QuerExcluir("") And Checa_Supervisor()
                                                  Then If Carrega_Parametros()
                                                          Then If OPCAO_FORM="F"
                                                                  Then If PRODUCAO2
                                                                          Then PickForm "3"
                                                                          Else PickForm "2"
                                                                       EndIF   
                                                               EndIf
                                                               GRAVA_LOG=True
                                                               EXCLUSAO("Cabeca")
                                                               If OPCAO_FORM="F"
                                                                  Then PickForm "F"
                                                               EndIf
                                                          Else UnLockRecord
                                                       EndIf
                                                  Else UnLockRecord
                                               EndIf
                                               AtualizaRegistroControle("Numero_Producao",NPROD,MODOPAGINA)
                                       EndIf
                               EndIf        
                          Else QuitLoop
                       EndIf
               EndIf
               If OPCAO_FORM="F"
                  Then PickForm OPCAO_FORM
               EndIf
               SetaPosForm()
            EndWhile
            QuitLoop
        Case Retval="ESC":
             CHAVEC=9
             Del
             Return
        Case Retval="ENTER" :
             ;---- Modo Filtrar ------------------------------------------------
             If MODOFILTRAR  
                Then If TabelaControle<>TabelaPrincipal
                        Then NPROD=[Numero_Producao]
                             FormKey Moveto TabelaPrincipal End Down FormKey
                             [Numero_Producao] = NPROD 
                             SetaCorRegistro("Editar")
                     EndIf
             EndIf
             MODOPAGINA = False           
             If Numero_Lancamento("","F")
                Then NPROD = PROXLANCTO_NLANC
                     Release Vars PROXLANCTO_NLANC   
                Else QuitLoop
             EndIf
             If PRODUCAO2
                Then PickForm "3" 
                Else PickForm "2"
             EndIf   
             Moveto [Numero_Producao]
             If PROXIMO_LANCTO_REG_ACHOU
                Then CHAVEC=0
                     Echo Normal
                     Echo Off
                     If Checa_Controle([Numero_Controle_Dia])
                        Then Return
                     EndIf                
                Else CHAVEC=1
                     If Checa_Controle(SYS_CONTROLE_DIA)
                        Then Return  
                        Else OPCAO_FORM="F"
                     EndIf
             EndIf     
             If TabelaControle<>TabelaPrincipal
                Then FormKey
                     Moveto TabelaControle
             EndIf
             QuitLoop
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (Chave)

;*******************************************************************************
;* Rotina para Digitacao Dados Gerais                                          *
;*******************************************************************************
Proc DIGITA()

gerou_rfacri=False

If CHAVEC=1
   Then If Not PRODUCAO2
           Then SISTEMA_GERADOR = "RF"
           Else SISTEMA_GERADOR = "RR" 
        EndIf
   Else SISTEMA_GERADOR = ""     
EndIf

If IsBlank(campocorrente)
   Then If CHAVEC=0
           Then GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
                If RetVal
                   Then PARAM_RETORNO_DESTINO = REG_PDESTI["Retorno_Destino"]
                EndIf
         EndIf
         
         
         If Not PRODUCAO2
           Then GetRecord "Rfacrir" [Rfacc->Numero_Producao] To REG_RFACRIR
                If RetVal
                   Then Moveto "Rfacc" 
                        Mensagem("Este lan‡amento foi utilizado com c¢digo de barras !//Rotina de Fac‡„o > 36. Produ‡„o II")
                        CHAVEC=9        
                        Return
                EndIf   
                SISTEMA_GERADOR = "RF"
                If CHAVEC=0
                   Then ;Verifica a existˆncia de itens lan‡ados, e por algum motivo nÆo estao no RFACRIG ou RFACRIR
                        GetRecord "Rfacrig" [Rfacc->Numero_Producao] To REG_RFACRIG
                        If Not RetVal
                           Then Mensagem("NÆo foi localizado os itens desta produ‡Æo!")
                                CHAVEC=9
                                Return
                        EndIf
                EndIf 
           Else GetRecord "Rfacrig" [Rfacc->Numero_Producao] To REG_RFACRIG
                If RetVal
                   Then Mensagem("Este lan‡amento foi utilizado via grade !//Rotina de Fac‡„o > 03. Produ‡„o")
                        CHAVEC=9
                        Return
                EndIf
                SISTEMA_GERADOR = "RR"
                If CHAVEC=0
                   Then ;Verifica a existˆncia de itens lan‡ados, e por algum motivo nÆo estao no RFACRIG ou RFACRIR
                        GetRecord "Rfacrir" [Rfacc->Numero_Producao] To REG_RFACRIR
                        If Not RetVal
                           Then Mensagem("NÆo foi localizado os itens desta produ‡Æo!")
                                CHAVEC=9
                                Return
                        EndIf
                EndIf               
        EndIf 

        If [Situacao_Producao]="FINALIZADA" And INICIO
           Then Mensagem("Ordem Finalizada !")
                If Not Checa_Supervisor()
                   Then CHAVEC=9
                        Return
                EndIf
        EndIf

        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
        EndIf
                         
        If CHAVEC=1
           Then Moveto [Numero_Programacao]
                ANT_PROG = [Numero_Programacao]
                ANT_PROC = [Numero_Corte]
           Else INICIO=False
                If [Destino_Producao]<>"INTERNO" And [Codigo]<>"0001" And PARAM_ATUA_CAPG="S" 
                   Then CapoAnt = Field()
                        Moveto [Data de Vencimento]
                        If [Numero_Corte]<>"" And PRODUCAO2
                           Then Moveto Field CapoAnt
                                Tecla_Funcao=-19
                                Return
                        EndIf
                   Else Tecla_Funcao=-19
                        Return
                EndIf
        EndIf
   Else Moveto Field campocorrente
EndIf

While True
      TECLA=" Esc=Retornar  "
      If Field()="Numero_Programacao" Or Field()="Destino_Producao"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA+"Del=Exclui  "
      EndIf
      If Field()="Data de Vencimento"
         Then TECLA=TECLA+"F4=CalcVencto  "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgDn=Finalizar  "
      
      MSGCAMPO=Field()
      
      If Field()="Destino_Producao"
         Then Monta_Opcoes("Op‡”es de Desinat rio",[RFACC->Codigo da Empresa])
      EndIf      

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA
      
      Wait Field
           ;Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","F1",
                 "PGDN",-33,-34,-24,-19,"F4",-25,-18        

      If RetVal=-33
        Then If PRODUCAO2
                Then If Not Seleciona_Funcao("Producao_Corte")
                        Then Loop
                        Else Return
                     EndIf
                Else If Not Seleciona_Funcao("")
                        Then Loop
                        Else Return
                     EndIf
             EndIf
      EndIf
      
      Switch
      Case RetVal=-24  Or RetVal=-19 Or RetVal=-25:
           Tecla_Funcao=RetVal
           Return
      Case RetVal="F1": 
           Switch 
             Case Field()="Destino_Producao" : Seleciona_Opcoes("Op‡”es de Desinat rio","")
             Case Field()="Numero_Programacao" Or Field()="Numero_Corte" : CONSULTAF1()
           EndSwitch
      Case RetVal="F4" And Field()="Data de Vencimento":
           [Data de Vencimento]=Ultimo_Dia_Data([Data_Producao])+10
      Case Retval="ESC": 
           Switch
           Case Field()="Numero_Programacao":
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then EXCLUSAO("Cabeca")
                                CHAVEC=9
                           Else Undo
                                FINALIZADO=True
                                Tecla_Funcao=""
                                OPCAO=""
                        EndIf
                        QuitLoop
                EndIf
           Case Field()="Numero_Corte": 
                Moveto [Numero_Programacao]    
           Case Field()="Destino_Producao":
                If [Numero_Corte]<>""
                   Then Moveto [Numero_Corte]  
                   Else Moveto [Numero_Programacao]
                EndIf         
           Case Field()="Data_Producao" :
                If IsBlank([]) Then []=Today() EndIf
                If [Numero_Programacao]=""
                   Then Moveto [Numero_Corte      ] 
                   Else Moveto [Numero_Programacao]
                EndIf  
           Case Field()="Data de Vencimento":
                If CHAVEC=0
                   Then Undo
                        CHAVEC=9
                        QuitLoop
                   Else Moveto [Data_Producao]
                EndIf
           OtherWise:
                Left                                        
           EndSwitch           
      Case Retval="PGDN" and CHAVEC=0:
           If PARAM_ATUA_CAPG="S"
              Then If [Destino_Producao]<>"INTERNO" And [Codigo]<>"0001" And (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
                      Then Mensagem("Data de Vencimento Inv lida !")
                           Loop
                   EndIf
           EndIf

           FINALIZADO=True
           CHAVEC=9
           OPCAO=""
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL": 
           If CHAVEC=0
              Then If MODOFILTRAR 
                      Then FastMsg("Modo [FILTRO] fun‡Æo nÆo permitida !")
                           Loop
                      Else If QuerExcluir("") And Checa_Supervisor()
                              Then CHAVEC=9
                                   GRAVA_LOG=True
                                   EXCLUSAO("Cabeca")
                                   QuitLoop
                           EndIf
                   EndIf
           EndIf
      Case Retval="ENTER":  
        Switch
          Case Field()="Numero_Programacao"  : 
               If IsBlank([]) And Not PRODUCAO2
                  Then Loop
               EndIf   
               If IsBlank([]) 
                  Then If ANT_PROG <> ""
                          Then ConfGeral(Completa("A programa‡„o "+ANT_PROG+" foi removida!",58," ")+"//"+
                                         Completa("Os itens desta programa‡Æo aqui inseridos ser„o apagados!",58," ")+"//"+
                                         Completa("Continuar com essa altera‡„o ?",58," "))
                               If Ok<>"S"
                                  Then [Numero_Programacao] = ANT_PROG
                                       Moveto [Numero_Programacao]
                                       Loop
                                  Else If PRODUCAO2
                                          Then Moveto "Rfacrir"
                                               While RecordStatus("New")=False
                                                 Del
                                               EndWhile
                                          Else Moveto "Rfacrig"
                                               While RecordStatus("New")=False
                                                 Del
                                               EndWhile
                                       EndIf
                                       Moveto "Rfacc"    
                               EndIf  
                       EndIf
                       Moveto [Numero_Corte]
                  Else If ANT_PROG <> [Numero_Programacao] And ANT_PROG <> ""
                          Then ConfGeral(Completa("Deseja carregar a programa‡„o "+[Numero_Programacao]+" lembrando, ",50," ")+"//"+
                                         Completa("que a programa‡„o "+ANT_PROG+ " j  inserida ser  apagada!",50," ")+"////"+
                                         Completa("Continuar com essa altera‡„o ?",50," "))
                               If Ok<>"S"
                                  Then [Numero_Programacao] = ANT_PROG
                                       Loop
                                  Else ANT_PROG = [Numero_Programacao]
                                       If PRODUCAO2
                                          Then Moveto "Rfacrir"
                                               While RecordStatus("New")=False
                                                 Del
                                               EndWhile
                                          Else Moveto "Rfacrig"
                                               While RecordStatus("New")=False
                                                 Del
                                               EndWhile
                                       EndIf
                                       Moveto "Rfacc"
                                       Moveto [Numero_Programacao]   
                               EndIf
                          Else ANT_PROG = [Numero_Programacao]        
                       EndIf        
                       
                       If Not BUSCA_LOOKUP("Numero_Programacao",[],"Programa‡„o n„o encontrada !")
                          Then Loop
                       EndIf

                       If Not Carrega_Parametros()
                          Then Loop
                       EndIf
                       
                       If Not Verifica_Duplicidade("Programacao")
                          Then Moveto [Numero_Programacao]
                               Loop
                       EndIf  
                       
                       If REG_BUSCA_LOOKUP["Situacao_Programacao"]="SUSPENSA" or
                          REG_BUSCA_LOOKUP["Situacao_Programacao"]="FINALIZADA"
                          Then Mensagem("Programa‡Æo n„o permitida !// //Situa‡„o: "+REG_BUSCA_LOOKUP["Situacao_Programacao"])
                               Del
                               CHAVEC=9
                               Return
                      
                       EndIf
                       
                       LockRegistro("Numero_Programacao")  
                                              
                       If PRODUCAO2
                          Then Moveto "Rfacrir"    
                               If RecordStatus("New")=True
                                  Then Moveto "Rfacc"   
                                       OPCAO_AUX = "Programacao"
                                       If Not PegaItens("Programacao")
                                          Then Moveto "Rfacc"
                                               Moveto [Numero_Programacao]
                                               Loop
                                       EndIf         
                               EndIf   
                               Moveto "Rfacc"
                               Moveto [Data_Producao]
                          Else Moveto [Data_Producao]         
                       EndIf        
               EndIf
               
               If [Rfacc->Destino_Producao]<>""
                  Then GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
                       If RetVal
                          Then PARAM_RETORNO_DESTINO = REG_PDESTI["Retorno_Destino"]
                       EndIf
               EndIf
               
          Case Field()="Numero_Corte"   :  
               If IsBlank([])
                  Then Mensagem("Dever  ser informado o n£mero da programa‡„o ou o n£mero do corte !")
                       Loop  
                  Else If Not BUSCA_LOOKUP("Numero_Corte",[],"Corte n„o encontrado !")
                          Then Loop
                       EndIf
                       
                       If Not Carrega_Parametros()              
                          Then Loop
                       EndIf
                       
                       If PRODUCAO2
                           Then If [Numero_Programacao]=""
                                   Then [Destino_Producao  ]="INTERNO"
                                        [Codigo da Tabela  ]=""
                                EndIf        
                       EndIf
                       Moveto "Rfacc"     
                       Moveto [Data_Producao]
               EndIf
          Case Field()="Data_Producao"  :  
               If IsBlank([]) Then []=Today() EndIf
               
               If Not IntervaloData([Data_Producao])
                  Then Loop
               EndIf               
                                                            
               Verifica_Rotina = False
               If PRODUCAO2
                  Then If [Numero_Programacao]<>""
                          Then Verifica_Rotina = True 
                       EndIf 
                  Else If [Destino_Producao]<>"INTERNO" And [Codigo]<>"0001" And PARAM_ATUA_CAPG="S"
                          Then Verifica_Rotina = True 
                       EndIf   
               EndIf
               
               GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
               If RetVal
                  Then PARAM_RETORNO_DESTINO = REG_PDESTI["Retorno_Destino"]
               EndIf
         
               If IsBlank([Acerto_Realizado])
                  Then [Acerto_Realizado] = "N"
               EndIf
               
               If CHAVEC=1 Then Controle_Dia() EndIf

               LockRegistro("Data_Producao")
                                              
               If Verifica_Rotina
                  Then Moveto "Rfacc"
                       Moveto [Data de Vencimento]
                  Else Moveto "Rfacc"
                       [Data de Vencimento]=BlankDate()
                       If PRODUCAO2
                          Then Moveto "Rfacrir"
                          Else Moveto "Rfacrig"  
                       EndIf  
                       Tecla_Funcao=-19       
                       Return
               EndIf               

          Case Field()="Data de Vencimento"  :
               If PARAM_ATUA_CAPG="S"
                  Then If [Destino_Producao]<>"INTERNO" And (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
                          Then Mensagem("Data de Vencimento Inv lida !")
                               Loop        
                       EndIf
               EndIf
               
               If PRODUCAO2
                   Then OPCHAVEI="CDB"
               EndIf         
               
               If [Data de Vencimento]<>BlankDate() And [Data de Vencimento]<>""
                  Then If [Data de Vencimento]<[Data_Producao]
                          Then Mensagem("Data de Vencimento Inv lida !")
                               Loop
                       EndIf
               EndIf           
               
               Tecla_Funcao=-19
               Return
          OtherWise: Right
        EndSwitch
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina p/ locar registro                                                    *
;*******************************************************************************                      
Proc LockRegistro(CAMPO)
Private CAMPO          
      
While True
  Moveto "Rfacc"
  Moveto [Numero_Producao]
  Locate NPROD
  PostRecord KeyViol LeaveLocked
  If RetVal
     Then Moveto Field CAMPO
          QuitLoop
     Else UnLockRecord
  EndIf
EndWhile

EndProc ;LockRegistro()

;*******************************************************************************
;* Verifica Dulicidade                                                         *
;*******************************************************************************                      
Proc Conta_Duplicidade(PARAM_FIELD,PARAM_VALOR,MSG)
Private CONT_LIMITE,RETORNO,PARAM_FIELD,PARAM_VALOR,MSG,AUX_PROD

;ACHOU_PRODUCAO_CORTE = 0 -> NÆo tem lan‡amentos
;ACHOU_PRODUCAO_CORTE = 1 -> Tem Programa‡Æo
;ACHOU_PRODUCAO_CORTE = 2 -> Tem Produ‡Æo(äes) do Corte

CONT_LIMITE          = 0
ACHOU_PRODUCAO_CORTE = 0

RETORNO = False

Moveto "Rfacc"
Moveto Field PARAM_FIELD
Locate PARAM_VALOR
If RetVal
   Then GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD To REG_PRODUCAO
        If Not RetVal
           Then Return RETORNO
        EndIf
        While PARAM_VALOR = [] 
           AUX_PROD = [Numero_Producao]
           If MSG<>""
              Then CONT_DUPLICIDADE_PROG = CONT_DUPLICIDADE_PROG + 1
                   DUPLICIDADE_PROG[CONT_DUPLICIDADE_PROG] = Format("W6",[Numero_Producao])+Format("D13",[Data_Producao])
              Else If PROD <> [Numero_Producao]
                      Then If ([Data_Producao] <= DATA Or DATA=BlankDate()) And
                              NumVal([Numero_Producao]) < NumVal(PROD)      And
                              Search([Numero_Producao],REG_PRODUCAO["Controle_Programacao"]) = 0 And
                              EMPR = [Codigo da Empresa] And DEST = [Destino_Producao] 
                              Then If Not RETORNO Then RETORNO = True EndIf
                                   CONT_DUPLICIDADE_PROG = CONT_DUPLICIDADE_PROG + 1
                                   DUPLICIDADE_PROG[CONT_DUPLICIDADE_PROG] = Format("W6",[Numero_Producao])+Format("D13",[Data_Producao])
                                   Verifica_Rotina = False
                                   Producao = Producao+"//"+Format("W61"," - "+[Numero_Producao])
                                   
                                   ;---- Limite de caracteres p/ exibi‡Æo da MSG -------
                                   CONT_LIMITE = CONT_LIMITE + 1
                                   If CONT_LIMITE = 95 Then QuitLoop EndIF
                           EndIf                            
                   EnDIf
           EndIf
           If ACHOU_PRODUCAO_CORTE = 0
              Then GetRecord "Rfacrig" AUX_PROD To REG_RFACRIG 
                   If Not RetVal
                      Then GetRecord "Rfacri" AUX_PROD To REG_RFACRI
                           If RetVal
                              Then If REG_RFACRI["Numero_Producao_Corte"]<>""
                                      Then ACHOU_PRODUCAO_CORTE=2
                                      Else ACHOU_PRODUCAO_CORTE=1
                                   EndIf   
                           EndIf
                   EndIf
           EndIf
           Skip
           If EOT() Then Quitloop EndIf
           Locate Next PARAM_VALOR
           If Not RetVal
              Then QuitLoop
           EndIf       
        EndWhile
        
        If MSG=""
           Then If Search("PROG",Upper(PARAM_FIELD)) > 0
                   Then MSG_PROG = Completa("A Programa‡„o "+[Rfacc->Numero_Programacao]+" j  foi lan‡adada na produ‡„o: ",60," ")+Producao+"//"
                EndIf
        EndIf        
EndIf
Return RETORNO

EndProc ;Conta_Duplicidade()

;*******************************************************************************
;* Verifica Dulicidade                                                         *
;*******************************************************************************                      
Proc Verifica_Duplicidade(PARAM)
Private PARAM,MSG_PROG_PROD_CORTE
               
DynArray DUPLICIDADE_PROG[]
CONT_DUPLICIDADE_PROG = 0
                
Verifica_Rotina = True 
Producao = ""
EMPR     = [Rfacc->Codigo da Empresa]
DEST     = [Rfacc->Destino_Producao]
PROD     = [Rfacc->Numero_Producao]
PROG     = [Rfacc->Numero_Programacao]
CORT     = [Rfacc->Numero_Corte]
DATA     = [Rfacc->Data_Producao]

UnLockRecord
FormKey

If PARAM="Corte" And CORT<>""
   Then Conta_Duplicidade("Numero_Corte",CORT,"")
   Else Conta_Duplicidade("Numero_Programacao",PROG,"")
EndIf

MSG_PROG_PROD_CORTE=""
If PRODUCAO2 And IsAssigned(TROUXE_CORTE) And TROUXE_CORTE<>""
   Then Switch
          Case ACHOU_PRODUCAO_CORTE = 1 And TROUXE_CORTE = "PRODUCAO"    : 
               MSG_PROG_PROD_CORTE = Completa("H  PROGRAMACAO DO CORTE lan‡ada anteriormente em outro(s) lan‡amento(s),",72," ")+"//"+
                                     Completa("impossibilitando recarregar PRODUCOES DO CORTE!",72," ")          
          Case ACHOU_PRODUCAO_CORTE = 2 And TROUXE_CORTE = "PROGRAMACAO" :
               MSG_PROG_PROD_CORTE = Completa("H  PRODUCAO DO CORTE lan‡ada anteriormente em outro(s) lan‡amento(s),",72," ")+"//"+
                                     Completa("impossibilitando recarregar uma PROGRAMACAO DO CORTE!",72," ")
        EndSwitch
EndIf          

Moveto "Rfacc"
Moveto [Numero_Producao]
Locate PROD 
UnLockRecord
FormKey
ResyncKey
If Not Verifica_Rotina
  Then If PARAM="Corte" And [Numero_Corte]<>""
          Then MSG=Completa("O Corte "+[Numero_Corte]+" j  foi lan‡adado na(s) produ‡ao(”es): ",60," ")+Producao
          Else MSG=Completa("A Programa‡„o "+[Numero_Programacao]+" j  foi lan‡adada na(s) programa‡ao(”es): ",60," ")+Producao
       EndIf
       
       If PRODUCAO2
          Then Moveto "Rfacrir"
               Home 
               If [Sequencia do Lancamento]=BlankNum()
                  Then Del 
                       Moveto "Rfacc"
                       If DUPLICIDADE_PROG_CORTE
                          Then Switch
                                 Case CORT <> "" And PROG = ""  : MSG=MSG+"//Deseja atualizar o saldo deste corte ?"
                                 Case CORT = ""  And PROG <> "" : MSG=MSG+"//Deseja atualizar o saldo desta programa‡„o ?"
                                 OtherWise                      : MSG=MSG+"//Deseja atualizar o saldo desta programa‡„o/corte ?"
                               EndSwitch
                               ConfGeral(MSG)
                               If Ok<>"S"
                                  Then Release Vars Verifica_Rotina,Producao
                                       Return False
                               EndIf
                          Else Mensagem(MSG)   
                               Release Vars Verifica_Rotina,Producao
                               Return False
                       EndIf        
                  Else Moveto "Rfacc"        
               EndIf
          Else Moveto "Rfacrig"
               If RecordStatus("New")=True
                  Then Moveto "Rfacc"
                       If DUPLICIDADE_PROG_CORTE
                          Then MSG=MSG+"//Deseja continuar o processo ?"
                               ConfGeral(MSG)
                               If Ok<>"S"
                                  Then Release Vars Verifica_Rotina,Producao
                                       Return False
                               EndIf
                          Else Mensagem(MSG)   
                               Release Vars Verifica_Rotina,Producao
                               Return False
                       EndIf        
                  Else Moveto "Rfacc"        
               EndIf     
       EndIf  
EndIf 

If MSG_PROG_PROD_CORTE<>""
   Then Mensagem(MSG_PROG_PROD_CORTE)
        Return False
EndIf
Return True
                       
EndProc ;Verifica_Duplicidade() 

;*******************************************************************************
;* Recarregar Produ‡Æo do Corte                                                *
;*******************************************************************************
Proc Recarrega_Corte()
Private TAB_ANT

TAB_ANT = Table()

ATUALIZA_CORTE = True
OPCAO_AUX = "Corte"   
PegaItens("Corte")    
ATUALIZA_CORTE = False  

Moveto TAB_ANT

EndProc ;Recarrega_Corte()

;*******************************************************************************
;* Pega Itens                                                                  *
;*******************************************************************************
Proc Pega_Itens(PARAM)
Private PARAM,TabAnt,Cont

;Rotina antes utilizada para montar os itens do RFACRIR, tanto para programa‡Æo ou
;para o corte informado.

TabAnt = Table()

Cont = 0
Switch
  Case PARAM = "Programacao" :
       GetRecord "PFACRI" [Rfacc->Numero_Programacao] To REG_PFACRI
       If Not RetVal
          Then Mensagem("Itens da Programa‡„o n„o localizado !")
               Return False
       EndIf
       
       Moveto "PFACRI"
       Moveto [Numero_Programacao]
       Locate [Rfacc->Numero_Programacao]       
       While [Rfacc->Numero_Programacao] = [Numero_Programacao]
          Cont = Cont + 1
          Moveto "Rfacrir"
          End Down
          [Numero_Producao        ]=[Rfacc->Numero_Producao       ]
          [Sequencia do Lancamento]=Cont
          [Codigo do Item         ]=[Pfacri->Codigo do Item       ]
          [Tipo do Item           ]=[Pfacri->Tipo do Item         ]            
          [Referencia             ]=[Pfacri->Referencia           ]   
          [Descricao do Item      ]=[Pfacri->Descricao do Item    ]   
          [Quantidade Programada  ]=[Pfacri->Quantidade Programada]   
          [Unidade Fiscal         ]=[Pfacri->Unidade Fiscal       ]   
          [Custo Unitario         ]=[Pfacri->Preco Unitario       ]
          [Numero_Programacao     ]=[Rfacc->Numero_Programacao    ]
          [Numero_Producao_Corte  ]=""
          [Quantidade Original    ]=[Pfacri->Quantidade Programada]
          UnLockRecord
          SaveTables
          
          Moveto "PFACRI"
          Skip
          If Eot() Then QuitLoop EndIf
       EndWhile
       
       Moveto "Rfacc"
       GetRecord "Pfacc" [Rfacc->Numero_Programacao] To PROGRAMACAO 
       If RetVal
          Then [Codigo          ]=PROGRAMACAO["Codigo"]
               [Razao Social    ]=PROGRAMACAO["Razao Social"]
               [Codigo da Tabela]=PROGRAMACAO["Codigo da Tabela"]
               [Numero_Corte    ]=NCORT
          Else [Codigo          ]=""
               [Razao Social    ]=""
               [Codigo da Tabela]=""
               [Numero_Corte    ]=""     
       EndIf
       UnLockRecord
       Moveto TabAnt
       
  Case PARAM = "Producao"  :    
       GetRecord "CFACC" [Rfacc->Numero_Corte] To PROG_CORTE
       If Not RetVal
          Then Release Vars PROG_CORTE
               Mensagem("Progama‡„o do corte n„o localizado !")
               Moveto TabAnt
               Return False
       EndIf  
       
       Moveto "PCFACC"
       Moveto [Numero_Programacao_Corte]
       Locate [Rfacc->Numero_Corte]
       If Not Retval
          Then Mensagem("Corte sem produ‡„o efetuada e n„o localizada !")    
               Moveto TabAnt
               Return False
          Else While [Numero_Programacao_Corte] = [Rfacc->Numero_Corte]
                 CopyToArray PROD_CORTE
                
                 Moveto "PCFACRI"
                 Moveto [Numero_Producao_Corte]
                 Locate PROD_CORTE["Numero_Producao_Corte"]      
                 If Not RetVal
                    Then Mensagem("Itens da produ‡„o do corte "+[PCFACC->Numero_Corte]+" n„o localizados !")
                         Moveto "PCFACC"
                         Skip
                         If Eot() Then QuitLoop EndIf
                         Locate Next [Rfacc->Numero_Corte]
                         If Not RetVal
                            Then Moveto TabAnt
                                 QuitLoop 
                         EndIf 
                 EndIf
                
                 While [Numero_Producao_Corte] = PROD_CORTE["Numero_Producao_Corte"]      
                    Cont = Cont + 1
                    Moveto "Rfacrir"
                    End Down
                    [Numero_Producao          ]=[Rfacc->Numero_Producao]
                    [Sequencia do Lancamento  ]=Cont
                    [Codigo do Item           ]=[Pcfacri->Codigo do Item]
                    [Tipo do Item             ]=[Pcfacri->Tipo do Item]            
                    [Referencia               ]=[Pcfacri->Referencia]   
                    [Descricao do Item        ]=[Pcfacri->Descricao do Item]   
                    [Quantidade Programada    ]=[Pcfacri->Quantidade Produzida]
                    [Quantidade Original      ]=[Pcfacri->Quantidade Produzida] 
                    [Unidade Fiscal           ]=[Pcfacri->Unidade Fiscal]   
                    [Custo Unitario           ]=[Pcfacri->Custo Unitario]   
                    [Preco Total              ]=[Pcfacri->Preco Total]
                    [Numero_Corte             ]=[Rfacc->Numero_Corte]
                    [Codigo da Tabela         ]=PROD_CORTE["Codigo da Tabela"]
                    [Numero_Programacao       ]=""
                    [Numero_Producao_Corte    ]=[Pcfacc->Numero_Producao_Corte]
                    UnLockRecord
                    SaveTables
                    
                    Moveto "PCFACRI"
                    Skip
                    If Eot() Then QuitLoop EndIf
                 EndWhile 
                 
                 Moveto "Rfacc"
                 [Codigo                   ]=PROD_CORTE["Codigo"]
                 [Razao Social             ]=PROD_CORTE["Razao Social"]
                 [Destino_Producao         ]=PROD_CORTE["Destino_Producao"]
                 [Numero Lancamento Titulos]=""                                 ;PROD_CORTE["Numero Lancamento Titulos"]
                 [Numero_Programacao       ]=""   
                 UnLockRecord
                 
                 Moveto "PCFACC"
                 Skip
                 If Eot() Then Moveto TabAnt QuitLoop EndIf
                 Locate Next [Rfacc->Numero_Corte]
                 If Not RetVal
                    Then Moveto TabAnt
                         QuitLoop 
                 EndIf   
               EndWhile 
       EndIf  
             
  Case PARAM = "Corte"    :
       Moveto "CFACRI"
       Moveto [Numero_Corte]
       Locate [Rfacc->Numero_Corte]
       If Not RetVal
          Then Mensagem("Itens do Corte n„o localizado !")
               Moveto TabAnt
               Return False
       EndIf
       While [Rfacc->Numero_Corte] = [Numero_Corte]
          Cont = Cont + 1
          Moveto "Rfacrir"
          End Down
          [Numero_Producao        ]=[Rfacc->Numero_Producao]
          [Sequencia do Lancamento]=Cont
          [Codigo do Item         ]=[Cfacri->Codigo do Item]
          [Tipo do Item           ]=[Cfacri->Tipo do Item]            
          [Referencia             ]=[Cfacri->Referencia]   
          [Descricao do Item      ]=[Cfacri->Descricao do Item]   
          [Quantidade Programada  ]=[Cfacri->Quantidade Programada]  
          [Quantidade Original    ]=[Cfacri->Quantidade Programada] 
          [Unidade Fiscal         ]=[Cfacri->Unidade Fiscal]   
          [Numero_Corte           ]=[Rfacc->Numero_Corte]
          UnLockRecord
          SaveTables
          
          Moveto "CFACRI"
          Skip
          If Eot() Then QuitLoop EndIf
       EndWhile 
       
       Moveto "Rfacc"
       [Codigo            ]=[Codigo da Empresa]
       [Razao Social      ]=[Nome Fantasia Empresa]
       [Destino_Producao  ]="INTERNO"
       [Codigo da Tabela  ]=""
       [Numero_Programacao]=""
       UnLockRecord
       
       Moveto TabAnt     
  
EndSwitch

Return True

EndProc ;Pega_Itens() 

;*******************************************************************************
;* Rotina para                                                                 *
;*******************************************************************************
Proc Seleciona_Funcao(PARAM)
Private PARAM 

Tecla_Funcao=""
Echo Normal
Echo Off

Switch
  Case PARAM="" :
       ShowPopup " Fun‡”es " CENTERED
        "~O~bs                ": " Alt+O = Observa‡”es                  " : "-24",
        "~P~rograma‡„o        ": " Alt+P = Carregar Itens da Programa‡„o" : "-25",
        "~R~ela‡ao Itens      ": " Alt+R = Rela‡„o Itens                " : "-19",
        "~E~ditar             ": " Alt+E = Editar quantidades           " : "-18",
        "Re-~G~era Requisi‡„o ": " Alt+G = Re-Gera a Requis‡„o          " : "-34",
        "~I~mprimir           ": " [F6]  = Imprimir Entrada Produ‡„o Interna/Externa " :"F6",
        Separator,
        "~C~ancelar           ": " Cancelar a Opera‡„o                  " : "CANCELAR"
       EndMenu
       To MenuVar
        
       Echo Off
       
       If MenuVar="CANCELAR" or MenuVar="Esc"
          Then Return False
       EndIf
        
       If MenuVar<>"F6"
          Then Tecla_Funcao=NumVal(MenuVar)
          Else Tecla_Funcao=MenuVar
       EndIf
  Case PARAM="Producao_Corte" :
       ShowPopup " Fun‡”es " CENTERED
        "~O~bs                " : " Alt+O = Observa‡”es                  " : "-24",
        "Re-~G~era Requisi‡„o " : " Alt+G = Re-Gera a Requis‡„o          " : "-34",
        "~I~mprimir           " : " [F6]  = Imprimir Entrada Produ‡„o Interna/Externa " :"F6",
        Separator,
        "~C~ancelar           " : " Cancelar a Opera‡„o                  " : "CANCELAR"
       EndMenu
       To MenuVar
EndSwitch

Echo Off

If MenuVar="CANCELAR" or MenuVar="Esc"
  Then Return False
EndIf

If MenuVar<>"F6"
  Then Tecla_Funcao=NumVal(MenuVar)
  Else Tecla_Funcao=MenuVar
EndIf

Return True

EndProc  ;Seleciona_Funcao()

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private TABPR, CodClie, CodItem, Registro_TabPreco_Item, PesqOk

[Codigo da Tabela]=[RFACC->Codigo da Tabela]

TABPR  =[RFACC->Codigo da Tabela]
CodClie=[RFACC->Codigo          ]
CodItem=[Codigo do Item          ]

PesqOk     =False

GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, CodItem To Registro_TabPreco_Item
If RetVal
   Then PesqOk=True
   else
        GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, PegaCodigoRaiz(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
           Else        
                getrecord "\\Sistemas\\Vendas\\TbPrIte" TABPR,PegaCodigoRaiz(CodItem) To Registro_TabPreco_Item
                If RetVal
                   Then PesqOk=True
                EndIf   
        EndIf
EndIf

If PesqOK
   Then [Custo Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
        PrUnit                 =[Custo Unitario]
   Else [Custo Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()
        PrUnit                 =BlankNum()
EndIf

Return True
EndProc ;Pega_Preco()

;*******************************************************************************
;* Rotina para Verificar a Situa‡Æo da Programa‡Æo                             *
;*******************************************************************************
Proc Verifica_Situacao_Programacao()
Private PROG,AUX_TAB,MSG,SITUACAO,NPROD

If [Rfacc->Numero_Programacao]=""
   Then Return
EndIf

MSG   = ""
PROG  = [Rfacc->Numero_Programacao]
NPROD = [Rfacc->Numero_Producao]
UnLockRecord
Do_It!
ClearAll
  
{Ask} {Rfacc}                        
Moveto [Numero_Producao      ] Example "NProd"
Moveto [Numero_Programacao   ] TypeIn "~PROG"

{Ask} {Rfacri}
Moveto [Numero_Producao      ] Example "NProd"
Moveto [Codigo do Item       ] Check
Moveto [Quantidade Produzida ] TypeIn "Calc Sum as Quantidade Produzida"
Moveto [Quantidade Programada] TypeIn "Calc Sum as Quantidade Programada"
Do_it!
ClearAll

If Not IsEmpty("Answer")
   Then AUX_TAB = Cria_Temp(PrivDir())
        Copy "Answer" AUX_TAB
        
        {Ask} TypeIn AUX_TAB Enter  
        Moveto [Quantidade Programada] TypeIn "Changeto Blank"
        Do_It!
        ClearAll
        
        ;---- Programa‡Æo da Confec‡Æo ----------------------------------------- 
        {Ask} {Pfacri}
        Moveto [Numero_Programacao   ] TypeIn "~PROG"
        Moveto [Codigo do Item       ] Check
        Moveto [Quantidade Programada] TypeIn "Calc Sum as Quantidade Programada"
        Do_it!
        Clearall

        {Ask} {Answer}
        Moveto [Codigo do Item       ] Example "CodItem"
        Moveto [Quantidade Programada] Example "QtdProg"
        {Ask} TypeIn AUX_TAB Enter TypeIn "Fast Insert" Enter
        Moveto [Codigo do Item       ] Example "CodItem"
        Moveto [Quantidade Programada] Example "QtdProg"
        Do_it!
        Clearall

        {Ask} TypeIn AUX_TAB Enter
        Moveto [Codigo do Item       ] Check
        Moveto [Quantidade Produzida ] TypeIn "Calc Sum as Quantidade Produzida"
        Moveto [Quantidade Programada] TypeIn "Calc Sum as Quantidade Programada"
        Do_it!
        Clearall

        Delete AUX_TAB
        ;----- Verifica se a programa‡Æo foi completamente finalizada -----
        
        CoEdit "Answer" 
        Scan
          If [Quantidade Programada]-[Quantidade Produzida]=0 
             Then [Quantidade Programada]=BlankNum()
          EndIf
        EndScan
        Do_it!
        Clearall

        {Ask} {Answer} TypeIn "Fast Delete"
        Moveto [Quantidade Programada] TypeIn "Blank"
        Do_it!
        ClearAll
        
        If IsEmpty("Answer")
           Then SITUACAO = "FINALIZADA" 
           Else SITUACAO = "PROGRAMADA"
        EndIf
        
        CoEdit "Pfacc"
        Moveto [Numero_Programacao]
        Locate PROG
        If RetVal
           Then [Situacao_Programacao] = SITUACAO           
           Else MSG = "Programa‡„o "+PROG+" n„o localizada!" 
        EndIf 
        Do_it!
        ClearAll
        
EndIf

;---- Finaliza‡Æo da Verifica‡Æo ----------------------------------   
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

If Not PRODUCAO2
   Then Array Array_TM[12]
        grdant="***"
EndIf

Carrega_Tabelas()

Moveto "Rfacc"
Moveto [Numero_Producao]
Locate NPROD
PickForm "F"   
If MSG<>""
   Then Mensagem(MSG)
EndIf

EndProc ;Verifica_Situacao_Programacao()
 
;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()

If PRODUCAO2
   Then Moveto "Rfacrir"  
   Else Moveto "Rfacrig"
EndIf
   
While True
  SomatoriaDosItens()   
  
  Moveto [Sequencia do Lancamento]
  End
  ITEM = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
        If PRODUCAO2
           Then Moveto "Rfacrir"
           Else Moveto "Rfacrig" 
        EndIf  
        Moveto [Sequencia do Lancamento]

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

        Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F3",-33,-34,-24,"F6",-25,-18,-68,"F8","F9"
             
        If RetVal=-33
           Then 
                Tecla_Funcao = ""
                Echo Normal
                Echo Off

                If PRODUCAO2
                   Then ShowPopup " Fun‡”es " CENTERED
                         "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras           " : "F9",
                         "F8  ~R~ecarregar          " : " Recarrega Produ‡„o do Corte              " : "F8",
                         Separator,
                         "Corte\\~P~rograma‡„o ": "  Alt+T = Carregar Itens da Programa‡Æo do Corte" : "-20",
                         "Corte\\~P~rodu‡„o    ": "  Alt+D = Carregar Itens da Produ‡„o do Corte   " : "-32",
                         Separator,
                         "~O~bs                " : " Alt+O = Observa‡”es                               " : "-24",
                         "Re-~G~era Requisi‡„o " : " Alt+G = Re-Gera a Requis‡„o                       " : "-34",
                         "~I~mprimir           " : " [F6]  = Imprimir Entrada Produ‡„o Interna/Externa " :"F6",
                         "~C~ancelar           " : " Cancelar a Opera‡„o                               " : "CANCELAR"
                        EndMenu
                        To MenuVar
                   Else ShowPopup " Fun‡”es " CENTERED
                         "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
                         "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras   " : "F9",
                         Separator,
                         "~O~bs                ": " Alt+O = Observa‡”es                  " : "-24",
                         "~P~rograma‡„o        ": " Alt+P = Carregar Itens da Programa‡„o" : "-25",
                         "~R~ela‡ao Itens      ": " Alt+R = Rela‡„o Itens                " : "-19",
                         "Re-~G~era Requisi‡„o ": " Alt+G = Re-Gera a Requis‡„o          " : "-34",
                         "~E~ditar             ": " Alt+E = Editar quantidades           " : "-18",
                         "~I~mprimir           ": " [F6]  = Imprimir Entrada Produ‡„o Interna/Externa " :"F6",
                         "~C~ancelar           ": " Cancelar a Opera‡„o                  " : "CANCELAR"
                        EndMenu
                         To MenuVar   
                EndIf
                Echo Off

                If MenuVar="CANCELAR" or MenuVar="Esc"
                    Then Loop
                EndIf
                
                If MenuVar = "-20" Or MenuVar = "-32"
                   Then If IsBlank([RFACC->Numero_Corte]) 
                           Then Mensagem("A programa‡„o do corte deve ser informada !")
                                Loop
                        EndIf   
                        If Not IsBlank([RFACC->Numero_Programacao]) 
                           Then Mensagem("Itens da programa‡„o j  foram inseridos!")
                                Loop
                        EndIf
                        
                        Switch 
                          Case MenuVar = "-20" : TROUXE_CORTE = "PROGRAMACAO"
                          Case MenuVar = "-32" : TROUXE_CORTE = "PRODUCAO"
                        EndSwitch  
                EndIf
                
                If MenuVar<>"F3" And MenuVar<>"F9" And MenuVar<>"F6" And MenuVar<>"F8"  
                   Then Tecla_Funcao=NumVal(MenuVar)
                   Else Tecla_Funcao=MenuVar
                EndIf
                RetVal=Tecla_Funcao
                
                If (MenuVar = "-20" Or MenuVar = "-32") And CHAVEC=1
                   Then If PRODUCAO2 And [Numero_Programacao]=""
                           Then Del
                                If RecordStatus("New")=False
                                   Then CONT = 0
                                        Home
                                        If [Sequencia do Lancamento]<>BlankNum()
                                           Then Scan
                                                  If [Quantidade Produzida]>0
                                                     Then CONT = CONT + 1
                                                          QuitLoop
                                                  EndIf
                                                EndScan
                                        EndIf
                                        End
                                        If CONT>0
                                           Then Mensagem("H  itens produzidos nesta rela‡Æo!//"+
                                                         "O que impossiblita o carregamento dos itens do corte!")
                                                QuitLoop           
                                           Else ConfGeral("Deseja recarregar a programa‡Æo de corte ?")
                                                If OK<>"S"
                                                   Then QuitLoop
                                                EndIf
                                                Moveto "Rfacrir"
                                                While RecordStatus("New")=False
                                                  Del
                                                EndWhile
                                                If MenuVar="-20"
                                                   Then RetVal=-20
                                                   Else RetVal=-32
                                                EndIf
                                        EndIf
                                        Release Vars CONT
                                EndIf      
                        EndIf
                EndIf   
        EndIf
        Switch
        Case RetVal="F8" Or RetVal=-68 : 
             Del
             If PRODUCAO2 
                Then If [Numero_Programacao]="" And CHAVEC=0
                        Then FAZ_PROCESSO = False  
                             GetRecord "Rfacri" [Rfacc->Numero_Producao] To REG_RFACRI
                             If RetVal
                                Then If REG_RFACRI["Numero_Producao_Corte"]=""
                                       Then FAZ_PROCESSO = True
                                       Else FastMsg("Fun‡„o permitida apenas para recarregar a programa‡Æo do corte!")      
                                     EndIf
                                Else FAZ_PROCESSO = True       
                             EndIf   
                             If FAZ_PROCESSO
                                Then ConfGeral("Deseja recarregar a programa‡Æo de corte ?")
                                     If OK<>"S" Then QuitLoop EndIf
                                     Recarrega_Corte()
                                     Moveto "Rfacrir"
                             EndIf
                        Else FastMsg("N„o ‚ poss¡vel recarregar a programa‡Æo do corte!")
                     EndIf 
                Else FastMsg("Fun‡„o permitida apenas para recarregar a programa‡Æo do corte -> 36. PRODUCAO 2!")   
             EndIf   
             QuitLoop
        Case RetVal="F3":
             If PRODUCAO2
                Then SemFicha() 
                Else Del
                     Moveto [Sequencia do Lancamento]
                     If RecordStatus("New")
                        Then MENSAGEM("Sem Item p/ ver !")
                             QuitLoop
                     EndIf
                     Opcao_Ver=True
                     CHAVEI=0
                     Home
                     ITEM=[Sequencia do Lancamento]
                     Inicia_Registro()
                     DigitaI()
                     QuitLoop
             EndIf        
        Case Retval="F9":
             Del
             If PRODUCAO2
                Then OPCHAVEI="CDB"
                     CDBarras_Producao()
                     QuitLoop
                Else OPCHAVEI="CDB"
                     CHAVEI=7
                     Return 
             EndIf
        Case RetVal="PGDN": 
             Del
             Moveto [Sequencia do Lancamento]
             If RecordStatus("New")=True
                Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                     QuitLoop
             EndIf
             CHAVEI=9
             FINALIZADO=True
             Tecla_Funcao=""

             SomatoriaDosItens()   
             AjustaDadosCabeca()
             Return
        Case RetVal=-24 Or RetVal="F6" or RetVal=-25 or RetVal=-18 or RetVal=-20 or RetVal=-34 : 
             Tecla_Funcao=RetVal
             Del
             Switch
               Case RetVal=-20 And CHAVEC=0 : 
                    Mensagem("N„o ‚ poss¡vel carregar itens do corte em lan‡amentos realizados!")
                    End
                    QuitLoop
               Case RetVal=-20 :
                    AUX_PEGAITENS = "PROG"       
             EndSwitch             
             CHAVEI=9
             Return
        Case RetVal = -32 : 
             Tecla_Funcao=RetVal
             Del
             If CHAVEC=0 
                Then Mensagem("N„o ‚ poss¡vel carregar itens do corte em lan‡amentos realizados!")
                     End
                     QuitLoop 
             EndIf
             AUX_PEGAITENS = "PROD"
             TabAnt = Table()
             Moveto "RFACRIR"
             Home End Down
             If [Referencia] <> ""
                Then ConfGeral("Deseja refazer a rela‡„o das produ‡”es do corte ?")
                     If Ok<>"S"   
                        Then End
                             QuitLoop
                     EndIf        
             EndIf
             Moveto TabAnt
             MONTA_OPCOES = Monta_Producao_Corte()
             If MONTA_OPCOES = ""          
                Then End
                     QuitLoop
             EndIf 
             Del
             
             SomatoriaDosItens()   
             AjustaDadosCabeca()

             CHAVEI=9
             Return     
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" : 
             Del
             While True
               SomatoriaDosItens()          

               If PRODUCAO2
                  Then Moveto "Rfacrir"
                  Else Moveto "Rfacrig"
               EndIf   
               
               If PRODUCAO2
                  Then PAGINA("Rfacrir","MR")
                  Else PAGINA("Rfacrig","MR")
               EndIf 
               If EDITAR="S"
                  Then CHAVEI=0
                       If PRODUCAO2
                          Then ;Mensagem("Edi‡„o n„o permitida !")
                               Controla_EdicaoI_RFACRIR()
                          Else Controla_EdicaoI_RFACRIG()
                       EndIf
                  Else If EXCLUIR="S"
                          Then If PRODUCAO2
                                  Then Mensagem("Exclus„o n„o permitida !")
                                  Else If QuerExcluir("")
                                          Then EXCLUSAO("Item")
                                               Moveto "Rfacrig"
                                          Else UnLockRecord
                                       EndIf 
                               EndIf
                          Else QuitLoop     
                      EndIf         
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC": 
             Del
             CHAVEI=9
             Tecla_Funcao=""
             OPCHAVEI=""

             SomatoriaDosItens()   
             AjustaDadosCabeca()

             Return             
        Case Retval="ENTER":
             If Not PRODUCAO2
                Then If Not Seta_Sequencia(ITEM,True)
                        Then Del
                             QuitLoop
                     EndIf
                     ITEM=[]
                     Del
                     Locate NPROD,ITEM
                     If Retval
                        Then CHAVEI=0
                        Else CHAVEI=1
                             End Down
                             [Numero_Producao        ] = NPROD
                             [Sequencia do Lancamento] = ITEM
                             Locate NPROD,ITEM
                     EndIf
                     Return
                Else If Field() = "Sequencia do Lancamento" 
                        Then If Not IsBlank([])
                                Then Del
                                     QuitLoop
                             EndIf               
                     EnDIf        
             EndIf        
        EndSwitch
  EndWhile
EndWhile
EndProc    ; ChaveI()

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

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

  Opcao_Ver = False  
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False
    
    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

Achou_Item = False
ITOK       = True

[Quantidade Produzida]=Dados_QTD             

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
If Not RetVal
   Then KeyPress "ESC"
        ITOK=False
   Else CopyToArray REG_BUSCA_LOOKUP
        KeyPress "ESC"
        If REG_BUSCA_LOOKUP["Inativo"]="S"                       
           Then Mensagem("Este item: //"+REG_BUSCA_LOOKUP["Codigo do Item"]+"//"+REG_BUSCA_LOOKUP["Descricao do Item"]+"// // esta inativo !") 
                ITOK=False        
        EndIf
EndIf

If Not ITOK
  Then Del
       Return
EndIf
        
Item  = REG_BUSCA_LOOKUP["Codigo do Item"]
Refer = REG_BUSCA_LOOKUP["Referencia"]
Cor   = REG_BUSCA_LOOKUP["Codigo da Cor_Tecido"]

[Codigo do Item]=REG_BUSCA_LOOKUP["Codigo do Item"]

If Not Array_Monta_Grade("")
  Then Del
       Return
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
        VSVRMERC=VSVRMERC-[Preco Total   ]
        VSQTDE  =VSQTDE  -[Quantidade Produzida  ]
   Else While True
         End
         NITEM =[Sequencia do Lancamento]
         Down
         Moveto [Sequencia do Lancamento]
       
         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]
   
       If Not IsBlank([RFACC->Codigo da Tabela])
        Then Pega_Preco("Novo")
             If [Custo Unitario]<=0
                Then Mensagem("Item sem tabela de pre‡o !")
                     Del
                     Return
             EndIf
       EndIf
     
EndIf        
         
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 Produzida]=[Quantidade Produzida]+Dados_QTD
[Preco Total         ]=[Custo Unitario]*[Quantidade Produzida]

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

VSVRMERC=VSVRMERC+[Preco Total         ]
VSQTDE  =VSQTDE  +[Quantidade Produzida]
                                             
UnLockRecord
SaveTables

EndProc ;CDBarras()

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5
TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then If CHAVEI=0
           Then If Not PRODUCAO2
                   Then Campo=AvancaCampo("I_Qtd0")
                   Else Campo="I_Custo_Unitario" 
                EndIf       
           Else Campo="I_Codigo_Item"
        EndIf
        INICIO_DIALOG=False
EndIf

If Opcao_Ver=True Then Campo="I_Seq" EndIf
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Opcao_Ver=True:
           Temp=False
           Switch
             Case Evento["KeyCode"] =  27:
                  CancelDialog
             OtherWise:
               Mover_Reg=True
               Switch
                 Case Evento["KeyCode"] = -71:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Home
                      EndIf
                 Case Evento["KeyCode"] = -79:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else End
                      EndIf
                 Case Evento["KeyCode"] = -73:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Up
                      EndIf
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
               EndSwitch
               If Mover_Reg=True
                  Then ITEM=[Sequencia do Lancamento]
                       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 CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item" Or
               Campo="I_Codigo_Cor_Tecido"
               Then
                    If Campo="I_Codigo_Cor_Tecido"  
                       Then Monta_Opcoes_SD("Codigo da Cor_Tecido","")
                            Seleciona_Opcoes_SD("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
        
                            ConsultaF1()
                            Window Select JANELA
                            WinArray5["FLOATING"]=True
                            Window SetAttributes JANELA From WinArray5
        
                            echo Normal
                            echo off
                    EndIf
                    If Campo="I_Codigo_Item"
                       Then VSD_I_Codigo_Item    =[Codigo do Item    ]
                            VSD_I_Descricao_Item =[Descricao do Item ]
                            VSD_I_Tipo_Item      =[Tipo do Item      ]
                            VSD_I_UN_Item        =[Unidade Interna   ]
                            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]
                    EndIf

                    Moveto "Rfacrig"
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then CHAVEI=9
                          Del
                          CancelDialog
                  EndIf
             Case Campo="I_Codigo_Cor_Tecido"   : Campo="I_Codigo_Item"
                                                  VSD_I_Codigo_Item   =""
                                                  VSD_I_Descricao_Item=""
                                                  VSD_I_UN_Item       =""
                                                  VSD_I_CF_Item       =""
                                                  VSD_I_CST_Item      =""
                                                  VSD_I_Tipo_Item     =""
                                                  VSD_I_Modelo_Item   =""
             Case SubStr(Campo,1,5)="I_Qtd"     : Campo=VoltaCampo(Campo) 
             Case Campo="I_Custo_Unitario"      : If Not PRODUCAO2
                                                     Then Campo=VoltaCampo("I_Qtd13")
                                                     Else CancelDialog
                                                  EndIf
             Case Campo="I_Flag"                : Campo="I_Custo_Unitario"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Codigo_Item":
                  VSD_I_REFERENCIA  =ControlValue("I_Codigo_Item")
                  Moveto [Codigo do Item]
                  Ativa_Lookup()

                  If Not IsAssigned(PARAM_COR_TECIDO)
                     Then If Not Carrega_Parametros()
                             Then Return 
                          EndIF   
                  EndIf    

                  If PARAM_COR_TECIDO="S" 
                     Then tpitemref="D"
                     Else tpitemref="P"
                  EndIf   

                  Moveto [Referencia]
                  Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref
                  If RetVal
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          KeyPress "ESC"
                          [Codigo do Item       ]=VSD_I_Codigo_Item
                          [Referencia           ]=VSD_I_REFERENCIA

                          If Array_Monta_Grade("Valida")
                             Then Pega_Preco("Novo")
                                  Registro_Item("Ler")
                                  Monta_Opcoes_SD("Codigo da Cor_Tecido","")
                                  RefreshDialog
        
                                  Moveto "Rfacrig"
        
                                  If PARAM_COR_TECIDO="S"
                                    Then Campo="I_Codigo_Cor_Tecido"
                                    Else Campo=Avancacampo("I_Qtd0")
                                  EndIf  
                             Else Campo="I_Codigo_Item"
                                  VSD_I_Codigo_Cor_Tecido=""
                                  VSD_I_Descricao_Cor_Tecido=""
                                  VSD_I_Codigo_Item   =""
                                  VSD_I_Descricao_Item=""
                                  VSD_I_UN_Item       =""
                                  VSD_I_CF_Item       =""
                                  VSD_I_CST_Item      =""
                                  VSD_I_Tipo_Item     =""      
                          EndIf     
                     Else KeyPress "ESC" 
                          Mensagem("Referˆncia n„o Cadastrada !")
                          VSD_I_Codigo_Item   =""
                          VSD_I_Descricao_Item=""
                          VSD_I_UN_Item       =""
                          VSD_I_CF_Item       =""
                          VSD_I_CST_Item      =""
                          VSD_I_Tipo_Item     =""
                 EndIf
                 Echo Off
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=AlinhM(ControlValue("I_Codigo_Cor_Tecido"),4)
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then If Checa_Opcoes_SD("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                            Then Moveto "Rfacrig"
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]

                                 Moveto [Codigo do Item]
                                 Ativa_Lookup()

                                 tpitemref="P"
                                 Moveto [Referencia]
                                 Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref, VSD_I_Codigo_Cor_Tecido
                                 If RetVal
                                    Then VSD_I_Codigo_Item   =[Codigo do Item   ]

                                         KeyPress "ESC"
                                         [Codigo do Item       ]=VSD_I_Codigo_Item
                                         [Referencia           ]=VSD_I_REFERENCIA

                                         VERIFICA_GRADE_GETRECORD = True
                                         If Array_Monta_Grade("Valida")
                                            Then Pega_Preco("Novo")
                                                 Registro_Item("Ler")
                                                 RefreshDialog
        
                                                 Moveto "Rfacrig"
        
                                                 Campo=Avancacampo("I_Qtd0")
                                            Else Campo="I_Codigo_Item"
                                                 VSD_I_Codigo_Cor_Tecido=""
                                                 VSD_I_Descricao_Cor_Tecido=""
                                                 VSD_I_Codigo_Item   =""
                                                 VSD_I_Descricao_Item=""
                                                 VSD_I_UN_Item       =""
                                                 VSD_I_CF_Item       =""
                                                 VSD_I_CST_Item      =""
                                                 VSD_I_Tipo_Item     =""
                                         EndIf
                                    Else Mensagem("Referˆncia n„o Cadastrada !")
                                         KeyPress "ESC"
                                 EndIf
                            Else Mensagem("Cor/Tecido n„o cadastrado para esta referencia !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                                 KeyPress "ESC"
                         EndIf
                 EndIf
                 Echo Off

             Case SubStr(Campo,1,5)="I_Qtd" : Campo=AvancaCampo(Campo)

              Case Campo="I_Custo_Unitario":
                  VSD_I_Custo_Unitario=ControlValue("I_Custo_Unitario")
                  If IsBlank(VSD_I_Custo_Unitario) Then VSD_I_Custo_Unitario = 0 EndIf
                  If VSD_I_Quantidade>0 
                     Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
                          Campo="I_Flag"
                     Else Mensagem("Quantidade tem que ser maior que 0")
                          VSD_I_Custo_Unitario=BlankNum()
                          Campo="I_Custo_Unitario"
                  EndIf
             Case Campo="I_Flag"  : AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item" Or
   Campo="I_Codigo_Cor_Tecido"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Item":
       MSGCAMPO="Referˆncia"
  Case SubStr(Campo,1,5)="I_Qtd" :
       MSGCAMPO="Quantidade ["+SubStr(Array_TM[NumVal( RTrim( SubStr(Campo,6,2) ) )],2,2)+"] "
  Case Campo="I_Custo_Unitario":
       MSGCAMPO="Custo Unitario"
  Case Campo="I_Custo_Total":
       MSGCAMPO="Custo Total"
  Case Campo="I_Codigo_Cor_Tecido":
       MSGCAMPO="Codigo da Cor"
  Case Campo="I_Flag":
       MSGCAMPO="[pausa]"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

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

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
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")

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 Produzida ]=VSD_I_Quantidade
If VSD_I_Quantidade>0 and VSD_I_Custo_Unitario>0
   Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
EndIf
indice=NumVal(RTrim(SubStr(Campo,6,2)))
For i From indice To 12
  If (i+1)=13
     Then Campo="I_Custo_Unitario"
          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 ;AvancaCampo()

;*******************************************************************************
;* 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_UN_Item       =""
                  VSD_I_CF_Item       =""
                  VSD_I_CST_Item      =""
                  VSD_I_Tipo_Item     =""
                  VSD_I_Modelo_Item   =""
                  VSD_I_Codigo_Cor_Tecido   =""
                  VSD_I_Descricao_Cor_Tecido=""
             Else CHAVEI=9
                  CopyFromArray RegItem
                  CancelDialog
          EndIf
          QuitLoop
     Else If Not IsassigneD(Array_TM) 
             Then Campo="I_Custo_Unitario"
             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
  EndIf
EndFor

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

Return Campo

EndProc ;VoltaCampo()

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [Rfacc->Numero_Producao],ITEM
CopyToArray RegItem

Echo Normal
Echo Off

Registro_Item("Ler")

If Not PRODUCAO2
   Then Array_Monta_Grade("Valida")
EndIf        

EndProc ;Inicia_Registro()

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

Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 10,01 height 10 width 78

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

   Label  @ 00,01 "Ref/C¢digo" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,49 "TI" For "I_Tipo_Item"
   Accept @ 01,49 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,02 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,07 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Label  @ 02,15 "Descricao Cor/Tecido" For "I_Descricao_Cor_Tecido"
   Accept @ 03,15 Width 22 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido

   @ 04,01 ?? "Prog"
   @ 04,06 ?? SubStr(Array_TM[1],2,2)
   @ 04,11 ?? SubStr(Array_TM[2],2,2)
   @ 04,16 ?? SubStr(Array_TM[3],2,2)
   @ 04,21 ?? SubStr(Array_TM[4],2,2)
   @ 04,26 ?? SubStr(Array_TM[5],2,2)
   @ 04,31 ?? SubStr(Array_TM[6],2,2)
   @ 04,36 ?? SubStr(Array_TM[7],2,2)
   @ 04,41 ?? SubStr(Array_TM[8],2,2)
   @ 04,46 ?? SubStr(Array_TM[9],2,2)
   @ 04,51 ?? SubStr(Array_TM[10],2,2)
   @ 04,56 ?? SubStr(Array_TM[11],2,2)
   @ 04,61 ?? SubStr(Array_TM[12],2,2)

   Accept @ 05,05 Width 05 "S" Tag "I_Qtd1"  to VSD_I_Qtd1
   Accept @ 05,10 Width 05 "S" Tag "I_Qtd2"  to VSD_I_Qtd2
   Accept @ 05,15 Width 05 "S" Tag "I_Qtd3"  to VSD_I_Qtd3
   Accept @ 05,20 Width 05 "S" Tag "I_Qtd4"  to VSD_I_Qtd4
   Accept @ 05,25 Width 05 "S" Tag "I_Qtd5"  to VSD_I_Qtd5
   Accept @ 05,30 Width 05 "S" Tag "I_Qtd6"  to VSD_I_Qtd6
   Accept @ 05,35 Width 05 "S" Tag "I_Qtd7"  to VSD_I_Qtd7
   Accept @ 05,40 Width 05 "S" Tag "I_Qtd8"  to VSD_I_Qtd8
   Accept @ 05,45 Width 05 "S" Tag "I_Qtd9"  to VSD_I_Qtd9
   Accept @ 05,50 Width 05 "S" Tag "I_Qtd10" to VSD_I_Qtd10
   Accept @ 05,55 Width 05 "S" Tag "I_Qtd11" to VSD_I_Qtd11
   Accept @ 05,60 Width 05 "S" Tag "I_Qtd12" to VSD_I_Qtd12

   Label  @ 04,69 "Total" For "I_Quantidade"
   Accept @ 05,66 Width 09 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

   Label  @ 06,00 "UN" For "I_UN_Item"
   Accept @ 07,01 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
              
   Label  @ 06,07 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 07,07 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 06,20 "Ct.Total" For "I_Custo_Total"
   Accept @ 07,20 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total

   Accept @ 07,43 Width 1 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

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

EndProc  ;DIGITAI()

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

Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 10,01 height 8 width 78

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

   Label  @ 00,01 "Ref/C¢digo" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,49 "TI" For "I_Tipo_Item"
   Accept @ 01,49 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,02 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,07 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Label  @ 02,15 "Descricao Cor/Tecido" For "I_Descricao_Cor_Tecido"
   Accept @ 03,15 Width 33 "A30" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido

   Label  @ 04,00 "UN" For "I_UN_Item"
   Accept @ 05,01 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 04,07 "Quantidade" For "I_Quantidade"
   Accept @ 05,07 Width 12 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 04,20 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 05,20 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 04,33 "Ct.Total" For "I_Custo_Total"
   Accept @ 05,33 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total

   Accept @ 05,43 Width 1 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

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

EndProc ;DigitaI_RFACRIR()

;*******************************************************************************
;* Rotina para Maniular Itens                                                  *
;*******************************************************************************
Proc DIGITAI_PROD()

Moveto [Quantidade Produzida]
While True
      TECLA=" Esc=Retornar  "

      If CHAVEI=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf
      MSGCAMPO=Field()

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch
      Case Retval="ESC":
           If Field()="Quantidade Produzida"
              Then If QuerDesfazer("")
                      Then If CHAVEI=1
                              Then Del
                              Else Undo
                           EndIf
                           QuitLoop
                   EndIf
              Else Left
           EndIf
      Case Retval="ENTER": 
           Switch
             Case Field() = "Quantidade Produzida"    :
                  If [Quantidade Produzida]>1000
                     Then Mensagem("Quantidade Inv lida !")
                          Loop
                  EndIf
                  [Diferenca]=[Quantidade Produzida]-[Quantidade Programada]
                  If [Diferenca]=0
                     Then [Diferenca]=BlankNum()
                  EndIf
                  If [Quantidade Produzida]=0
                     Then [Quantidade Produzida]=BlankNum()
                  EndIf
									UnLockRecord
                  QuitLoop
             OtherWise : Right
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEI=0 And [Quantidade Programada]<=0
              Then If QuerExcluir("")
                      Then DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile

EndProc   ;DIGITAI_PROD()

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                Exclusao("Item")
        EndIf
EndIf
EndProc   ; (Finaliza_Registro)

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

Switch
  Case Funcao_Registro="Gravar"                   :
       If Not PRODUCAO2
          Then [Codigo do Item       ]=VSD_I_Codigo_Item
               [Descricao do Item    ]=VSD_I_Descricao_Item
               [Tipo do Item         ]=VSD_I_Tipo_Item
               [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 Produzida      ]=VSD_I_Quantidade
               [Unidade Interna           ]=VSD_I_UN_Item
               [Custo Unitario            ]=VSD_I_Custo_Unitario
               [Preco Total               ]=Round(VSD_I_Custo_Total,2)
               [Referencia                ]=VSD_I_Referencia
               [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
               [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
          Else [Custo Unitario            ]=VSD_I_Custo_Unitario
               [Preco Total               ]=Round(VSD_I_Custo_Total,2)   
       EndIf
  Case Funcao_Registro="Ler": 
       VSD_I_Seq                    =[Sequencia do Lancamento   ]

       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_Custo_Unitario         =[Custo Unitario            ]
       VSD_I_Custo_Total            =Round([Preco Total         ],2)
       VSD_I_Referencia             =[Referencia                ]
       
       If Not PRODUCAO2
          Then 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 Produzida      ]
               VSD_I_UN_Item                =[Unidade Interna           ]
               VSD_I_Custo_Unitario         =[Custo Unitario            ]
               VSD_I_Custo_Total            =Round([Preco Total         ],2)
               VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
               VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ] 
          Else VSD_I_Quantidade             =[Quantidade Produzida      ]
               VSD_I_Custo_Unitario         =[Custo Unitario            ]
               VSD_I_Custo_Total            =Round([Preco Total         ],2)
               VSD_I_UN_Item                =[Unidade Fiscal            ]
               VSD_I_Codigo_Cor_Tecido      = ""
               VSD_I_Descricao_Cor_Tecido   = ""
               GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM
               If RetVal
                  Then VSD_I_Codigo_Cor_Tecido   =REG_ITEM["Codigo da Cor_Tecido"   ]
                       VSD_I_Descricao_Cor_Tecido=REG_ITEM["Descricao da Cor_Tecido"]
               EndIf        
       EndIf
EndSwitch

EndProc  ; (Registro_Item)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO,Verifica_Rotina

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Switch
  Case TIPO="Cabeca":
       Moveto "Rfacc"
       If Not PRODUCAO2
          Then GetRecord "Rfacrir" [Rfacc->Numero_Producao] To REG_RFACRIR
               If RetVal
                  Then Mensagem("Exclus„o n„o permitida, lan‡amento utilizado com c¢digo de barras !//Rotina de Fac‡„o > 36. Produ‡„o II")
                       CHAVEC=9
                       Return              
               EndIf   
          Else GetRecord "Rfacrig" [Rfacc->Numero_Producao] To REG_RFACRIG
               If RetVal
                  Then Mensagem("Exclus„o n„o permitida, lan‡amento via grade !//Rotina de Fac‡„o > 03. Produ‡„o")
                       CHAVEC=9
                       Return
               EndIf    
       EndIf
       Moveto "Rfacri"
       Moveto [Numero_Producao]
       Locate [Rfacc->Numero_Producao]
       If RetVal
          Then While [Numero_Producao]=[Rfacc->Numero_Producao]
                 Del
               EndWhile
       EndIf
       If PRODUCAO2
          Then Moveto "Rfacrir"
               While RecordStatus("New")=False
                 Del
               EndWhile
          Else Moveto "Rfacrig"
               While RecordStatus("New")=False
                 Del
               EndWhile
       EndIf   
       
       If Rtrim([RFACC->Numero_Programacao])<>""
          Then Situacao_Programacao()
       EndIf       

       Moveto "Rfacc"
       If Not IsBlank([RFacc->Codigo da Empresa])
          Then Verifica_Rotina = True
               If PRODUCAO2
                  Then Verifica_Rotina = False
               EndIf    
               If Verifica_Rotina
                  Then Titulos("Excluir")
               EndIf
               If PRODUCAO2
                  Then Requisicao("Exclusao_Semi_Acabado","")
               EndIf       
               Requisicao("Exclusao","")
       EndIf
       
       Moveto "Rfacc"
       If GRAVA_LOG Then Grava_LogEx("Rfac") EndIf
       Del
  Case TIPO="Item":
       If PRODUCAO2
          Then Moveto "Rfacrir"
               CODIT=[Codigo do Item] 
          Else Moveto "Rfacrig" 
       EndIf       
       Del
EndSwitch

EndProc  ; Exclusao() 

;*******************************************************************************
;* Situa‡Æo da Expedi‡Æo                                                       *
;*******************************************************************************
Proc Situacao_Programacao()
Private AUX_PROGRAMACAO,AUX_TABELA,REG_PROGRAMACAO

AUX_PROGRAMACAO = [Rfacc->Numero_Programacao]

GetRecord "\\Sistemas\\Faccao\\PFACC" AUX_PROGRAMACAO To REG_PROGRAMACAO
If RetVal
   Then If REG_PROGRAMACAO["Situacao_Programacao"]="PROGRAMADA"
           Then Return
        EndIf
   Else Return
EndIf

Moveto "RFACC"
ResyncKey
UnLockRecord
FormKey
IsLockRecord()

{TableAdd} TypeIn "PFACC" Enter

Moveto [Numero_Programacao]
Locate [Rfacc->Numero_Programacao]
If ReTval
   Then [Situacao_Programacao]="PROGRAMADA"
        UnLockRecord
EndIf  

Do_It!
Moveto "PFACC" ClearImage
Moveto "RFACC"
CoEditKey
FormKey
ResyncKey
IsLockRecord()   

EndProc ;Situacao_Programacao()

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON,ntab,Verifica_Rotina

ntab=table()

If PRODUCAO2
   Then Moveto "Rfacrir" 
   Else Moveto "RFACRIG"
EndIf
   
If RecordStatus("New")
   Then MENSAGEM("Sem Itens p/ imprimir !")
        Moveto ntab
        Return False
EndIf
Moveto ntab

Echo Normal
Echo Off
ShowPopup " Imprimir " CENTERED
"~P~osi‡„o  " : " Imprimir Posi‡„o da Programa‡„o p/ Conferencia       "   :"Program02",
"~D~ocumento" : " Imprimir Documento de Entrada Produ‡„o Interna/Externa "   :"Program01",
"~C~ancelar"  : " Cancelar                  "   :"CANCELAR"
EndMenu
To Opcaoc
Echo Off

If Opcaoc="Esc" Or Opcaoc="CANCELAR"
   Then Return False
EndIf

If PRODUCAO2
   Then Gera_Rfacri("Producao_Corte")
   Else Gera_Rfacri("")
EndIf    

Verifica_Rotina = True
If PRODUCAO2 
   Then Verifica_Rotina = False
EndIf   
 
If Verifica_Rotina
   Then Switch
          Case CHAVEC=1: Titulos("Incluir")
          Case CHAVEC=0: Titulos("Alterar")
        EndSwitch
EndIf        
Requisicao("Inclusao","")
CHAVEC=0

If PRODUCAO2
   Then DESTINO="PRODUCAO"
   Else DESTINO=[RFACC->Destino_Producao  ]
EndIf   
NPROD  =[RFACC->Numero_Producao   ]
NPROG  =[RFACC->Numero_Programacao]
NCORT  =[RFACC->Numero_Corte      ]
DESTINO=[RFACC->Destino_Producao]
UnLockRecord
Do_It!

Dispositivo()
If OK=""
   Then CoEditKey
        Moveto [Numero_Producao]
        Locate NPROD
        Return False
EndIf

gerou_rfacri=True
LoopdoDispositivo=False

Switch
  Case Opcaoc="Program01": If PRODUCAO2
                              Then PLAY "RP_RFACR"
                              Else PLAY PARAM_RELATORIO
                           EndIf   
  Case Opcaoc="Program02": If NCORT<>""
                              Then PLAY "RP_CORTE" 
                              Else PLAY PARAM_RELATSALDO
                           EndIf   
EndSwitch

Carrega_Tabelas()

Moveto "Rfacc"
If PRODUCAO2
   Then PickForm "3"
   Else PickForm "2"
EndIf
   
Moveto [Numero_Producao]
Locate NPROD
Return True

EndProc ;IMPRIME()
                 
;*******************************************************************************
;* Rotina Pega Itens da Programacao                                            *
;*******************************************************************************
Proc PegaItens(PARAM)
Private TAB_ANT,PARAM,FAZ_ROTINA_PARCIAL,i,ii        

If Not IsAssigned(ATUALIZA_CORTE) Then ATUALIZA_CORTE = False EndIf
             
If PARAM = "Programacao"
   Then If IsBlank([Rfacc->Numero_Programacao]) Or CHAVEC=0
           Then Mensagem("Fun‡„o n„o permitida !")
                Return False
        EndIf
   Else If IsBlank([Rfacc->Numero_Corte]) Or (CHAVEC=0 And Not ATUALIZA_CORTE)
           Then Mensagem("Aplica‡„o n„o permitida !")
                Return False
        EndIf              
EndIf     

MenuVar = ""
If Not PRODUCAO2
   Then ShowPopup " Quantidades " CENTERED
          "~1~ com as quantidades": " Carregar com as quantidades da programa‡„o" : "COMQTD",
          "~2~ sem as quantidades": " Carregar sem as quantidades da programa‡„o" : "SEMQTD",
          "~C~ancelar            ": " Cancelar a Opera‡„o                       " : "CANCELAR"
        EndMenu
        To MenuVar
        
        If MenuVar="Esc" Or MenuVar="CANCELAR"
           Then Return False
        EndIf
EndIf           

NCORT              = [Rfacc->Numero_Corte]
NPROG              = [Rfacc->Numero_Programacao]
FAZ_ROTINA_PARCIAL = False

If IsAssigned(DUPLICIDADE_PROG) And MenuVar="SEMQTD"
   Then If DynArraySize(DUPLICIDADE_PROG) > 0
           Then If SYS_CODIGO_CLIENTE<>"0171"
                   Then Mensagem("H  lan‡amento(s) anterior(es) com saldo desta programa‡„o !")
                        Return False
                EndIf   
        EndIf
EndIf   

If ([Rfacc->Controle_Programacao]="" Or MenuVar="SEMQTD" Or
   (Search([Numero_Producao],[Rfacc->Controle_Programacao])=0)) And Not ATUALIZA_CORTE
    Then Moveto "Rfacc"
         [Controle_Programacao]=""
         UnLockRecord
         
         If PRODUCAO2
            Then Moveto "Rfacrir"
            Else Moveto "Rfacrig"
         Endif
           
         While RecordStatus("New")=False
           Del
         EndWhile
         FAZ_ROTINA_PARCIAL = True                                                    
EndIf

If PRODUCAO2
   Then If Not ATUALIZA_CORTE
           Then If OPCAO_AUX = "Programacao"
                   Then Pega_Itens("Programacao")
                   Else Pega_Itens("Corte")
                EndIf    
        EndIf
   Else GetRecord "PFACRIG" [Rfacc->Numero_Programacao] To REG_PFACRIG
        If RetVal
           Then Moveto "Pfacrig"
                Moveto [Numero_Programacao]
                Locate NPROG
                If Retval
                   Then If FAZ_ROTINA_PARCIAL
                           Then While [Numero_Programacao]=NPROG
                                  CopyToArray REGISTRO_F1
                                  If MenuVar="SEMQTD"
                                     Then REGISTRO_F1["Qtd1"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd2"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd3"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd4"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd5"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd6"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd7"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd8"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd9"                 ]=BlankNum()
                                          REGISTRO_F1["Qtd10"                ]=BlankNum()
                                          REGISTRO_F1["Qtd11"                ]=BlankNum()
                                          REGISTRO_F1["Qtd12"                ]=BlankNum()
                                          REGISTRO_F1["Quantidade Programada"]=BlankNum()
                                          REGISTRO_F1["Preco Total"          ]=BlankNum()
                                  EndIf
                          
                                  Moveto "Rfacrig"
                                  End Down                                            
                                  [Numero_Producao        ] = NPROD
                                  [Sequencia do Lancamento] = REGISTRO_F1["Sequencia do Lancamento"]
                                  [Codigo do Item         ] = REGISTRO_F1["Codigo do Item"         ]
                                  [Tipo do Item           ] = REGISTRO_F1["Tipo do Item"           ] 
                                  [Referencia             ] = REGISTRO_F1["Referencia"             ]
                                  [Descricao do Item      ] = REGISTRO_F1["Descricao do Item"      ]
                                  [Codigo da Cor_Tecido   ] = REGISTRO_F1["Codigo da Cor_Tecido"   ]
                                  [Descricao da Cor_Tecido] = REGISTRO_F1["Descricao da Cor_Tecido"]
                                  [Tamanho                ] = REGISTRO_F1["Tamanho"                ]
                                  [Qtd1                   ] = REGISTRO_F1["Qtd1"                   ]
                                  [Qtd2                   ] = REGISTRO_F1["Qtd2"                   ]
                                  [Qtd3                   ] = REGISTRO_F1["Qtd3"                   ]
                                  [Qtd4                   ] = REGISTRO_F1["Qtd4"                   ]
                                  [Qtd5                   ] = REGISTRO_F1["Qtd5"                   ]
                                  [Qtd6                   ] = REGISTRO_F1["Qtd6"                   ]
                                  [Qtd7                   ] = REGISTRO_F1["Qtd7"                   ]
                                  [Qtd8                   ] = REGISTRO_F1["Qtd8"                   ]
                                  [Qtd9                   ] = REGISTRO_F1["Qtd9"                   ]
                                  [Qtd10                  ] = REGISTRO_F1["Qtd10"                  ]
                                  [Qtd11                  ] = REGISTRO_F1["Qtd11"                  ]
                                  [Qtd12                  ] = REGISTRO_F1["Qtd12"                  ]
                                  [Quantidade Produzida   ] = REGISTRO_F1["Quantidade Programada"  ]
                                  [Unidade Interna        ] = REGISTRO_F1["Unidade Interna"        ]
                                  [Custo Unitario         ] = REGISTRO_F1["Preco Unitario"         ]
                                  [Taxa Desconto Unitario ] = REGISTRO_F1["Taxa Desconto Unitario" ]
                                  [Valor Desconto Unitario] = REGISTRO_F1["Valor Desconto Unitario"]
                                  [Preco Total            ] = REGISTRO_F1["Preco Total"            ]
                                  [Preco Unitario Tabela  ] = REGISTRO_F1["Preco Unitario Tabela"  ]
                                  [Codigo da Tabela       ] = REGISTRO_F1["Codigo da Tabela"       ]
                                  [Codigo da Grade        ] = REGISTRO_F1["Codigo da Grade"        ]
                                  [Lookup_Itens           ] = REGISTRO_F1["Lookup_Itens"           ]
                                  [Lookup_TabPreco_Item   ] = REGISTRO_F1["Lookup_TabPreco_Item"   ]
                                  [Lookup_TabPreco_Cliente] = REGISTRO_F1["Lookup_TabPreco_Cliente"]
                                  [Lookup_Itens_Cor       ] = REGISTRO_F1["Lookup_Itens_Cor"       ]
                                  [Numero_Producao_Corte  ] = REGISTRO_F1["Numero_Producao_Corte"  ]
                                  UnLockRecord 
                                  SaveTables
                                   
                                  Moveto "Pfacrig"
                                  Skip
                                  If EOT() Then QuitLoop EndIf
                                EndWhile
                        EndIf
                EndIf
        EndIf
EndIf

If ATUALIZA_CORTE
   Then If Not Verifica_Duplicidade("Corte")
           Then Mensagem("Ocorreu erro no processo de atualiza‡Æo do corte!//Verificar com o Suporte Vise!")
                Return False
        EndIf
        
        TAB_ANT = Table()
        
        Moveto "CFACRI"
        Moveto [Numero_Corte]
        Locate [Rfacc->Numero_Corte]
        If Not RetVal
           Then Mensagem("Itens do Corte n„o localizados !")
                Moveto TAB_ANT
                Return False
        EndIf  
        
        CONT_PRODUZIDO = 0
        DynArray ARRAY_PRODUZIDO[]
        Moveto "Rfacrir" Home
        Scan
          If [Quantidade Produzida] > 0
             Then CONT_PRODUZIDO = CONT_PRODUZIDO + 1
                  ARRAY_PRODUZIDO[CONT_PRODUZIDO] = Format("W10",[Codigo do Item])+Format("W12",[Quantidade Produzida])
          EndIf
        EndScan
       
        While RecordStatus("New")=False
           Del 
        EndWhile      
        
        Cont = 0        
        Moveto "CFACRI"        
        While [Rfacc->Numero_Corte] = [Numero_Corte]
           Cont = Cont + 1
           Moveto "Rfacrir"
           End Down
           [Numero_Producao        ]=[Rfacc->Numero_Producao]
           [Sequencia do Lancamento]=Cont
           [Codigo do Item         ]=[Cfacri->Codigo do Item]
           [Tipo do Item           ]=[Cfacri->Tipo do Item]            
           [Referencia             ]=[Cfacri->Referencia]   
           [Descricao do Item      ]=[Cfacri->Descricao do Item]   
           [Quantidade Programada  ]=[Cfacri->Quantidade Programada]   
           [Unidade Fiscal         ]=[Cfacri->Unidade Fiscal]   
           [Numero_Corte           ]=[Rfacc->Numero_Corte]
           UnLockRecord
           SaveTables
           
           Moveto "CFACRI"
           Skip
           If Eot() Then QuitLoop EndIf
        EndWhile   
EndIf   

;---- Processo Parcial - Programa‡Æo/Corte -------------------------------------
FAZ_ROTINA_PARCIAL = False
If IsAssigned(DUPLICIDADE_PROG) And MenuVar<>"SEMQTD"
   Then If DynArraySize(DUPLICIDADE_PROG) > 0
           Then FAZ_ROTINA_PARCIAL = True
        EndIf
EndIf   

While FAZ_ROTINA_PARCIAL
  PROD_ATUAL = [Rfacc->Numero_Producao]    
  GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD_ATUAL To REG_PRODUCAO
  If RetVal
     Then CONT_DUPLICIDADE  = 0
          For i From 1 To DynArraySize(DUPLICIDADE_PROG)
            PROD = SubStr(DUPLICIDADE_PROG[i],1,6) 
            If Search(PROD,REG_PRODUCAO["Controle_Programacao"]) = 0
               Then CONT_DUPLICIDADE = CONT_DUPLICIDADE + 1
            EndIf     
          Endfor
                     
          If CONT_DUPLICIDADE = 0 And DynArraySize(DUPLICIDADE_PROG)>0
             Then Mensagem("As programa‡”es/cortes existentes j  foram inclu¡das //neste processo anteriormente !")
                  FAZ_ROTINA_PARCIAL = False
                  QuitLoop
          EndIf   
     Else FAZ_ROTINA_PARCIAL = False
          QuitLoop                
  EndIf
  
  If Not PRODUCAO2
     Then ConfGeral(MSG_PROG+"//Deseja atualizar o saldo desta programa‡„o/corte ?")
          If Ok<>"S"
             Then Moveto "Rfacrig"
                  While RecordStatus("New")=False
                    Del
                  EndWhile
                  UnLockRecord
                                 
                  FAZ_ROTINA_PARCIAL = False
                  Return False
          EndIf
  EndIf
  
  FAZ_PROCESSO = False
  For ai From 1 To DynArraySize(DUPLICIDADE_PROG)
    PROD = SubStr(DUPLICIDADE_PROG[ai],1,6)
    DATA = DateVal(SubStr(DUPLICIDADE_PROG[ai],7,2)+"."+SubStr(DUPLICIDADE_PROG[ai],10,2)+"."+SubStr(DUPLICIDADE_PROG[ai],13,4))
     
    GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD To REG_PRODUCAO
    If Not RetVal
       Then UnLockRecord
            Moveto "Rfacc"
            Loop
       Else ;---- NÆo ir  permitir lan‡ar mais de uma vez a Programa‡Æo/Corte --
            If Search(PROD,REG_PRODUCAO["Controle_Programacao"]) > 0
               Then UnLockRecord
                    Moveto "Rfacc"
                    Loop               
            EndIf  
    EndIf  
    
    If Not FAZ_PROCESSO Then FAZ_PROCESSO = True EndIf  
    CONT_ITEM = 0
    DynArray ITEM[]
    
    CONT_AUX = "0"
    GetRecord "Rfacrir" PROD To REG_RFACRIR
    If RetVal
       Then CONT_AUX = "1"
       Else GetRecord "Rfacri" PROD To REG_RFACRI
            If RetVal Then CONT_AUX = "2" EndIf   
    EndIf
    
    If CONT_AUX = "0"
      Then Moveto "Rfacc"
           Mensagem("N„o foi localizado os itens da producao "+PROD+" !")
           Loop
    EndIf
    
    Moveto "Rfacc"
    FormKey
    Switch
      Case CONT_AUX = "1" : Moveto "Rfacrir"
      Case CONT_AUX = "2" : Moveto "Rfacri"   
    EndSwitch    
    Moveto [Numero_Producao]
    Locate PROD
    While PROD = [Numero_Producao]
      If [Quantidade Produzida] > 0
         Then CONT_ITEM = CONT_ITEM + 1
              ITEM[CONT_ITEM] = Format("W6",[Numero_Producao])+Format("W10",[Codigo do Item])+Format("W8",[Referencia])+Format("W12",[Quantidade Produzida])
      EndIf
      Skip
      If Eot() Then QuitLoop EndIf  
    EndWhile
    
    Moveto "Rfacc"
    FormKey
    ResyncKey
    If PRODUCAO2
       Then Moveto "Rfacrir"
       Else Moveto "Rfacrig"
    EndIf
    
    For aii From 1 To DynArraySize(ITEM)      
      ITEM_PRD = SubStr(ITEM[aii],1,6)
      ITEM_COD = SubStr(ITEM[aii],7,10)
      ITEM_REF = Rtrim(SubStr(ITEM[aii],17,8))
      ITEM_QTD = Rtrim(Ltrim(SubStr(ITEM[aii],25,12)))
      
      If Type(NumVal(ITEM_QTD)) <> "N" Or ITEM_QTD = "" Or NumVal(ITEM_QTD) <= 0 Or NumVal(ITEM_QTD)=BlankNum()
         Then Loop
      EndIf   
      
      If PRODUCAO2
         Then Moveto "Rfacrir"
              Moveto [Codigo do Item] 
              Locate Pattern ".."+SubStr(ITEM_COD,3,8)
              If RetVal 
                 Then [Quantidade Programada] = [Quantidade Programada] - NumVal(ITEM_QTD)           If [Quantidade Programada] <=0 Then Del EndIf
                      UnLockRecord
              EndIf
         Else GetRecord "\\Sistemas\\Estoque\\Itens" ITEM_COD To REG_ITEM 
              If Not RetVal
                 Then Mensagem("ITEM: "+ITEM_COD+" n„o localizado no cadastro de itens !")
                      Loop
              EndIf
              
              GetRecord "\\Sistemas\\Estoque\\Tpgrade" REG_ITEM["Codigo da Grade"] To REG_GRADE
              If Not RetVal
                 Then Mensagem("ITEM: "+ITEM_COD+" n„o foi localizado no cadastro de grade !")
                      Loop     
              EndIf
              
              Moveto "Rfacrig" Home
              Scan
                If REG_ITEM["Referencia"] <> [Referencia] Or
                   REG_ITEM["Codigo da Cor_Tecido"] <> [Codigo da Cor_Tecido] Or 
                   REG_ITEM["Descricao da Cor_Tecido"] <> [Descricao da Cor_Tecido]
                   Then Loop 
                EndIf
                TM = Rtrim(SubStr(REG_ITEM["Descricao do Item"],29,2))
                If TM = "" 
                   Then Mensagem("ITEM: "+ITEM_COD+" sem tamanho definido em sua descri‡„o !")
                        Loop
                EndIf
                    
                ACHOU_GRADE = False   
                For Grade From 1 To 12
                  If (Grade = 1  And REG_GRADE["Titulo Grade1"]  = TM) Or  
                     (Grade = 2  And REG_GRADE["Titulo Grade2"]  = TM) Or             
                     (Grade = 3  And REG_GRADE["Titulo Grade3"]  = TM) Or             
                     (Grade = 4  And REG_GRADE["Titulo Grade4"]  = TM) Or  
                     (Grade = 5  And REG_GRADE["Titulo Grade5"]  = TM) Or  
                     (Grade = 6  And REG_GRADE["Titulo Grade6"]  = TM) Or  
                     (Grade = 7  And REG_GRADE["Titulo Grade7"]  = TM) Or  
                     (Grade = 8  And REG_GRADE["Titulo Grade8"]  = TM) Or  
                     (Grade = 9  And REG_GRADE["Titulo Grade9"]  = TM) Or  
                     (Grade = 10 And REG_GRADE["Titulo Grade10"] = TM) Or  
                     (Grade = 11 And REG_GRADE["Titulo Grade11"] = TM) Or  
                     (Grade = 12 And REG_GRADE["Titulo Grade12"] = TM) 
                     Then ACHOU_GRADE = True         
                  EndIf
                  If ACHOU_GRADE
                     Then Moveto Field "Qtd"+StrVal(Grade)
                          [] = [] - NumVal(ITEM_QTD)
                          
                          [Quantidade Produzida] = [Quantidade Produzida]-NumVal(ITEM_QTD)
                          [Preco Total         ] = [Quantidade Produzida]*[Custo Unitario]
                          
                          If [] = 0 Then [] = BlankNum() EndIf
                          UnLockRecord
                          QuitLoop
                  EndIf
                EndFor
                
                CopyToArray REG_VERIFICA
                If (REG_VERIFICA["Qtd1"]  = 0 Or REG_VERIFICA["Qtd1"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd2"]  = 0 Or REG_VERIFICA["Qtd2"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd3"]  = 0 Or REG_VERIFICA["Qtd3"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd4"]  = 0 Or REG_VERIFICA["Qtd4"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd5"]  = 0 Or REG_VERIFICA["Qtd5"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd6"]  = 0 Or REG_VERIFICA["Qtd6"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd7"]  = 0 Or REG_VERIFICA["Qtd7"]  = BlankNum()) And
                   (REG_VERIFICA["Qtd8"]  = 0 Or REG_VERIFICA["Qtd8"]  = BlankNum()) And 
                   (REG_VERIFICA["Qtd9"]  = 0 Or REG_VERIFICA["Qtd9"]  = BlankNum()) And 
                   (REG_VERIFICA["Qtd10"] = 0 Or REG_VERIFICA["Qtd11"] = BlankNum()) And 
                   (REG_VERIFICA["Qtd11"] = 0 Or REG_VERIFICA["Qtd10"] = BlankNum()) And 
                   (REG_VERIFICA["Qtd12"] = 0 Or REG_VERIFICA["Qtd12"] = BlankNum()) 
                   Then Del
                        UnLockRecord
                EndIf
                QuitLoop
              EndScan     
      EndIf
    EndFor
  Endfor
  If Not FAZ_PROCESSO
     Then ;---- MSG para alertar sobre cadastro de item lan‡ado em rotinas e posteriormente alterado (cor do tecido).
          MSG =     Completa("Produ‡Æo: "+PROD_ATUAL,61," ")+"////"
          MSG = MSG+Completa("NÆo foi identificado itens de programa‡Æo anterior.",61," ")+"//"
          MSG = MSG+Completa("Verificar  o  cadastro  de  item, c¢digo, tamanho e",61," ")+"//"
          MSG = MSG+Completa("cor do tecido.                                     ",61," ")
  EndIf
  If PRODUCAO2
       Then Moveto "Rfacrir"
       Else Moveto "Rfacrig"
  EndIf
  If [Codigo do Item]=""
     Then Del
  EndIf
  Release Vars FAZ_PROCESSO   
  QuitLoop
EndWhile   

If RecordStatus("New")
   Then Switch
          Case [Rfacc->Numero_Corte]<>"" :
               MSG =     Completa("CORTE: "+[Rfacc->Numero_Corte],61," ")+"////"
               MSG = MSG+Completa("J  teve o seu saldo finalizado em lan‡amento(s) anterior(es)!",61," ")
          Case [Rfacc->Numero_Programacao]<>"" And [Rfacc->Numero_Programacao]<>"" :
               MSG =     Completa("      CORTE: "+[Rfacc->Numero_Corte],61," ")+"//"
               MSG = MSG+Completa("PROGRAMACAO: "+[Rfacc->Numero_Programacao],61," ")+"////"
               MSG = MSG+Completa("J  teve o seu saldo finalizado em lan‡amento(s) anterior(es)!",61," ")
          OtherWise                      :
               MSG =     Completa("PROGRAMACAO: "+[Rfacc->Numero_Programacao],61," ")+"////"
               MSG = MSG+Completa("J  teve o seu saldo finalizado em lan‡amento(s) anterior(es)!",61," ")
        EndSwitch  
        Mensagem(MSG)
        Return False    
   Else If ATUALIZA_CORTE
           Then If CONT_PRODUZIDO > 0
                   Then Moveto "Rfacrir"
                        For ot From 1 To CONT_PRODUZIDO
                          COD_ITEM = Substr(ARRAY_PRODUZIDO[ot],1,10)
                          QTD_PROD = NumVal(Substr(ARRAY_PRODUZIDO[ot],11,12))
                          Moveto [Codigo do Item] 
                          Locate Pattern ".."+SubStr(COD_ITEM,3,8)
                          If Retval
                             Then [Quantidade Produzida ] = QTD_PROD
                                  [Diferenca            ] = [Quantidade Produzida ] - [Quantidade Programada]
                                  UnLockRecord
                          EndIf        
                          Home
                        EndFor
                EndIf   
                Moveto TAB_ANT
        EndIf     
EndIf   
             
Return True
EndProc ;PegaItens() 

;*******************************************************************************
;* Rotina Gera Tabela Rfacrig                                                  *
;*******************************************************************************
Proc Gera_Rfacri(PARAM)
Private PARAM,codite

Aguarde("Convertendo produ‡„o modo padr„o")

refant="****"
Seq=0

Switch                                 
  Case PARAM="" :
       Moveto "Rfacri"
       UnLockRecord
       Moveto [Numero_Producao]
       Locate [Rfacc->Numero_Producao]
       If RetVal
          Then While [Numero_Producao]=[Rfacc->Numero_Producao] 
                  Del
               EndWhile
       EndIf       
       Moveto "Rfacrig"
       NR = NIMAGERECORDS()
       Scan
         Barra(NR, RecNo())
         Aguarde("Aguarde, Convertendo produ‡„o modo padr„o "+BARRA_STRING)
       
         CopyToArray RegRq
         If RegRq["Referencia"]<>refant
       	    Then Array_Monta_Grade("")
       	         refant=[Referencia]
         EndIf        
        
         For ic From 1 to 12
           Aguarde("Convertendo produ‡„o modo padr„o")
           Qtd=0
           TM=RTrim(SubStr(Array_TM[ic],4,2))
           Switch
             Case ic=1:  Qtd=RegRq["Qtd1"]  
             Case ic=2:  Qtd=RegRq["Qtd2"]  
             Case ic=3:  Qtd=RegRq["Qtd3"]  
             Case ic=4:  Qtd=RegRq["Qtd4"]  
             Case ic=5:  Qtd=RegRq["Qtd5"]  
             Case ic=6:  Qtd=RegRq["Qtd6"]  
             Case ic=7:  Qtd=RegRq["Qtd7"]  
             Case ic=8:  Qtd=RegRq["Qtd8"]  
             Case ic=9:  Qtd=RegRq["Qtd9"]  
             Case ic=10: Qtd=RegRq["Qtd10"] 
             Case ic=11: Qtd=RegRq["Qtd11"] 
             Case ic=12: Qtd=RegRq["Qtd12"] 
           EndSwitch
        
           If Qtd>0
              Then If Len(TM)=1
                      Then codite=SubStr(RegRq["Codigo do Item"],1,9)+TM
                      Else codite=SubStr(RegRq["Codigo do Item"],1,8)+TM
                   EndIf
        
                   Moveto "Rfacri"
                   Moveto [Numero_Producao]
                   Locate RegRq["Numero_Producao"],codite
                   If Not RetVal
                      Then End Down
                           Seq=Seq+1
                           [Numero_Producao          ]=RegRq["Numero_Producao"]
                           [Codigo do Item           ]=codite
                           [Lookup_Itens             ]=[Codigo do Item]
                           [Numero_Producao_Corte    ]=RegRq["Numero_Producao_Corte"]
                   EndIf
                   [Quantidade Produzida     ]=[Quantidade Produzida     ]+Qtd
                   [Custo Unitario           ]=RegRq["Custo Unitario"]
                   [Preco Unitario Tabela    ]=RegRq["Preco Unitario Tabela"]
                   [Codigo da Tabela         ]=RegRq["Codigo da Tabela"]
                 
                   If [Quantidade Produzida ]>0
                      Then [Preco Total]=[Quantidade Produzida ]*[Custo Unitario]
                   EndIf 
                   UnlockRecord
                   SaveTables
            EndIf
          EndFor
          
          Moveto "Rfacrig"
        EndScan
        
  Case PARAM="Producao_Corte" :
       Moveto "Rfacri"
       UnLockRecord
       Moveto [Numero_Producao]
       Locate [Rfacc->Numero_Producao]
       If RetVal
          Then While [Numero_Producao]=[Rfacc->Numero_Producao] 
                  Del
               EndWhile
       EndIf
       
       Moveto "Rfacrir"                        
       NR = NIMAGERECORDS()
       Scan
         Barra(NR, RecNo())
         Aguarde("Aguarde, Convertendo produ‡„o modo padr„o "+BARRA_STRING)
       
         CopyToArray RegRq
         Qtd    = RegRq["Quantidade Produzida"]
         codite = MudaCodigoPara(RegRq["Codigo do Item"],"P")
           
         If Qtd>0
            Then Moveto "Rfacri"
                 Moveto [Numero_Producao]
                 Locate RegRq["Numero_Producao"],codite
                 If Not Retval
                    Then End Down
                         Seq=Seq+1
                         [Numero_Producao          ] = RegRq["Numero_Producao"]
                         [Codigo do Item           ] = codite
                         [Lookup_Itens             ] = [Codigo do Item]
                         [Numero_Producao_Corte    ] = RegRq["Numero_Producao_Corte"]
                 EndIf
                 [Quantidade Produzida     ] = [Quantidade Produzida     ]+RegRq["Quantidade Produzida"]
                 [Custo Unitario           ] = RegRq["Custo Unitario"]
                 [Preco Unitario Tabela    ] = RegRq["Preco Unitario Tabela"]
                 [Codigo da Tabela         ] = RegRq["Codigo da Tabela"]
                 If [Quantidade Produzida ]>0
                     Then [Preco Total]=[Quantidade Produzida ]*[Custo Unitario]
                 EndIf
                 UnlockRecord
                 SaveTables        
         EndIf         
         Moveto "Rfacrir"
       EndScan
EndSwitch  

CHAVEF=8
LimpAguarde()

EndProc ;Gera_Rfacri(()

;*******************************************************************************
;** Inclusao, Alteracao de Titulos Contas a Pagar                             **
;*******************************************************************************
Proc TITULOS(Tipo)
Private SEQ,Tipo,DESTINO

If PRODUCAO2
   Then DESTINO="PRODUCAO"
   Else DESTINO=[RFACC->Destino_Producao]
EndIf

If Not IsAssigned(PARAM_ATUA_CAPG)
   Then GetRecord "\\Sistemas\\Faccao\\P_Fac" [Rfacc->Codigo da Empresa] To EMPRESA
        If RetVal
           Then PARAM_ATUA_CAPG = EMPRESA["Atualiza_Contas_Pagar"]
           Else Return
        EndIf
EndIf           
   
If PARAM_ATUA_CAPG<>"S" Or DESTINO="INTERNO" Or [Rfacc->Codigo]="0001"
   Then Return
EndIf                 

Moveto "RFACC"
ResyncKey
UnLockRecord
FormKey
IsLockRecord()

{TableAdd} TypeIn "\\sistemas\\ctapag\\Titulos" Enter

Oktit=True
Moveto [Numero do Lancamento]
If IsBlank([RFACC->Numero Lancamento Titulos])
    Then If (Tipo="Incluir" or Tipo="Alterar")
            Then Tipo="Incluir"
            
                 While True
                   End
                   Moveto [Numero do Lancamento]
                   If Numero_Lancamento("Interno","Locked_Down")
                      Then SEQ = PROXLANCTO_NLANC
                           Release Vars PROXLANCTO_NLANC
                           quitloop
                   EndIf    
                 EndWhile
            
                ;While True
                ;  End
                ;  If Numero_Lancamento("Interno","")
                ;     Then SEQ = PROXLANCTO_NLANC
                ;          Release Vars PROXLANCTO_NLANC
                ;  EndIf
                ;  Down
                ;  [Numero do Lancamento]=SEQ
                ;  If Not IsLockRecord()
                ;     Then QuitLoop
                ;     Else Del
                ;  EndIf
                ;EndWhile
                 
            Else 
                 Oktit=False
         EndIf
    Else
         Locate [RFACC->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[RFACC->Numero Lancamento Titulos]+" no Contas a Pagar n„o foi encontrado !//"
                 MSG=MSG+"Verificar fechamento mensal no Contas a Pagar Ok !//"
                 MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efefuado !"
                 Mensagem(MSG)
                 oktit=False
            Else For wi From 1 To DynArraySize(Param_Destino)+2        
                   Switch
                     Case wi-1 = DynArraySize(Param_Destino)-1 :        
                       If [Lancamento Gerador]<>[RFACC->Numero_Producao]
                          Then oktit=False
                               QuitLoop
                       EndIf        
                     Case wi   = DynArraySize(Param_Destino)   :         
                       If [Documento Referente]<>(SubStr(DESTINO,1,6)+"/"+[RFACC->Numero_Producao])
                          Then oktit=False
                               QuitLoop
                       EndIf
                     Case Not IsAssigned(Param_Destino[wi])    : QuitLoop        
                     OtherWise                                 :
                      If SubStr(Param_Destino[wi],2,12)=DESTINO And DESTINO<>"INTERNO"
                         Then [Sistema Gerador]=Rtrim(SubStr(Param_Destino[wi],26,2))
                              oktit=False
                              QuitLoop
                      EndIf   
                   EndSwitch   
                 EndFor
                 If Not OkTit
                    Then MSG="O lan‡amento "+[RFACC->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                         MSG=MSG+"n„o corresponde a esta Produ‡„o ["+StrVal([RFACC->Numero_Producao])+"] !// //"
                         MSG=MSG+"Verifique no Contas a Pagar o lan‡amento corresponente e//"
                         MSG=MSG+"se talvez o mes n„o foi fechado !// //"
                         MSG=MSG+"Neste caso o estorno ou altera‡„o no Contas a Pagar n„o ser  efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !"
                         Mensagem(MSG)
                 EndIf
         EndIf
EndIf

If OkTit And (Tipo="Excluir" or Tipo="Alterar")
   Then If [Saldo do Documento]<>[Valor do Documento]
           Then Oktit=False
                MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Pagar,//"
                MSG=MSG+"referente a este documento: "+
                    [RFACC->Codigo da Empresa]+" / "+
                    SubStr(DESTINO,1,6)+" / "+
                    [RFACC->Numero_Producao]+"//"
                MSG=MSG+"n„o ser  efetuado, pois o T¡tulo j  teve baixa ! // //"
                MSG=MSG+"Verificar !"
                Mensagem(MSG)
           Else If Tipo="Excluir"
                   Then Del
                EndIf
        EndIf
EndIf

If OkTit And (Tipo="Incluir" or Tipo="Alterar")
   Then
        Switch
          Case Tipo="Incluir":
               [Codigo do Documento ]="REC"
               [Numero do Documento ]=[RFACC->Numero_Producao     ]
               [Codigo do Emitente  ]=[RFACC->Codigo              ]
               [Tipo do Lancamento  ]="C"
               [Data Competencia    ]=[RFACC->Data_Producao       ]
               [Data de Emissao     ]=[RFACC->Data_Producao       ]
               [Data de Vencimento  ]=[RFACC->Data de Vencimento  ]
               [Data a Pagar        ]=[RFACC->Data de Vencimento  ]
               [Valor do Documento  ]=[RFACC->Valor Total         ]
               [Saldo do Documento  ]=[RFACC->Valor Total         ]
               [Tipo do Pagamento   ]="DN"
               [Codigo da Conta     ]=PARAM_CONTA_CAIXA  
               [Codigo da Empresa   ]=[RFACC->Codigo da Empresa   ]
               
               For wi From 1 To DynArraySize(Param_Destino)        
                 If SubStr(Param_Destino[wi],2,12)=DESTINO And DESTINO<>"INTERNO"
                    Then [Sistema Gerador]=Rtrim(SubStr(Param_Destino[wi],26,2))
                         QuitLoop
                 EndIf      
               EndFor
               
               [Lancamento Gerador  ]=[RFACC->Numero_Producao]
               [Documento Referente ]=SubStr(DESTINO,1,6)+"/"+[RFACC->Numero_Producao]
               Controle_Dia()
               UnLockRecord

               Moveto "RFACC"
               If IsBlank([Numero Lancamento Titulos])
                  Then [Numero Lancamento Titulos]=SEQ
               EndIF
               UnLockRecord

          Case Tipo="Alterar":
               [Codigo do Emitente  ]=""
               [Codigo do Emitente  ]=[RFACC->Codigo              ]
               [Data Competencia    ]=[RFACC->Data_Producao       ]
               [Data de Emissao     ]=[RFACC->Data_Producao       ]
               [Data de Vencimento  ]=[RFACC->Data de Vencimento  ]
               [Data a Pagar        ]=[RFACC->Data de Vencimento  ]
               [Valor do Documento  ]=[RFACC->Valor Total         ]
               [Saldo do Documento  ]=[RFACC->Valor Total         ]
               UnLockRecord
        EndSwitch
EndIf

Do_It!
Moveto "\\sistemas\\ctapag\\Titulos" ClearImage
Moveto "RFACC"
CoEditKey
FormKey
ResyncKey
IsLockRecord()   

EndProc  ;Titulos()

;*******************************************************************************
;* Rotina para gerar proximo lancamento                                        *
;*******************************************************************************
Proc ProximaOrdem()
Private i

For i From 1 to 10
  Moveto [Numero do Lancamento]
  End
  If IsBlank([])
     Then NUMEROL="1"
     Else NUMEROL=StrVal(NumVal([])+1)
  EndIf
  NUMEROL=AlinhM(NUMEROL,6)
  Down
  [Numero do Lancamento]=NUMEROL
  PostRecord KeyViol LeaveLocked
  If RetVal     
     Then Return True
     Else Del
  EndIf    
EndFor

Return False

EndProc ;ProximaOrdem()

;*******************************************************************************
;* Abre/Fecha tabelas para gerar a requisi‡Æo                                  *
;*******************************************************************************
Proc Tabelas_Requisicao(PARAM)
Private PARAM

Switch
  Case PARAM = "Abre Tabelas"  : View NOWINDOW "\\Sistemas\\Estoque\\RqCabeca"
                                 View NOWINDOW "\\Sistemas\\Estoque\\RqItem"  
                                 View NOWINDOW "\\Sistemas\\Estoque\\RqItemG" 
                                 View NOWINDOW "\\Sistemas\\Estoque\\RqMatPri" 
                                 View NOWINDOW "\\Sistemas\\Estoque\\EstqPrm" 
                                 View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"  
                                 View NOWINDOW "\\Sistemas\\Estoque\\Requisit"
                                 View NOWINDOW "\\Sistemas\\Producao\\FormulaC"
                                 View NOWINDOW "\\Sistemas\\Producao\\FormulaI"
                                 
  Case PARAM = "Fecha Tabelas" : Moveto "\\Sistemas\\Estoque\\RqCabeca"  ClearImage
                                 Moveto "\\Sistemas\\Estoque\\RqItem"    ClearImage
                                 Moveto "\\Sistemas\\Estoque\\RqItemG"   ClearImage
                                 Moveto "\\Sistemas\\Estoque\\RqMatPri"  ClearImage 
                                 Moveto "\\Sistemas\\Estoque\\EstqPrm"   ClearImage
                                 Moveto "\\Sistemas\\Estoque\\SdEstq"    ClearImage
                                 Moveto "\\Sistemas\\Estoque\\Requisit"  ClearImage
                                 Moveto "\\Sistemas\\Producao\\FormulaC" ClearImage
                                 Moveto "\\Sistemas\\Producao\\FormulaI" ClearImage
EndSwitch

EndProc ;Tabelas_Requisicao()

;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(Tipo,NLancto)
Private NUMEROL, RQ_ENCONTRADA, SEQ, Tipo, i,
        CODIGO_ITEM, QTD_ITEM, CTO_ITEM, DESTINO, NOMDEST, CODREQ,
        QTDTOT, VRTOT, SAIR, TIPO_BE, TabAnt,NLancto

SAIR    = False
TIPO_BE = ""

If Tipo="Semi_Acabado" Or Tipo="Exclusao_Semi_Acabado"
   Then RQ_Numero = [RFACC->Lancamento Requisicao_SA ]
   Else RQ_Numero = [RFACC->Lancamento RQCabeca_RFACC]
EndIf

If Not PRODUCAO2
   Then For Cont_Dest From 1 To DynArraySize(Param_Destino)
        If Rtrim(SubStr(Param_Destino[Cont_Dest],2,12))=[RFACC->Destino_Producao]
           Then REQ_DESTINO = Rtrim(SubStr(Param_Destino[Cont_Dest],13,12))
                If Rtrim(SubStr(Param_Destino[Cont_Dest],1,1))<>"S"
                   Then SAIR=True
                        QuitLoop
                EndIf
        EndIf
      EndFor
EndIf

If IsBlank([RFACC->Data_Producao]) Then SAIR=True EndIf

If SAIR 
   Then Return 
EndIf

If [Rfacc->Codigo da Empresa]<>"" And PARAM_RETORNO_DESTINO="N"
   Then Return
EndIf  

If PRODUCAO2 And Tipo<>"Exclusao" And Tipo<>"Exclusao_Semi_Acabado" 
    Then 
         TabAnt = Table()
         SomatoriaDosItens() 
         AjustaDadosCabeca()
         Moveto TabAnt

         If VSQTDE=0 Or VSQTDE=BlankNum()
            Then Return 
         EndIf 
EndIf
Aguarde("Gerando requisi‡„o no estoque")

If Not PRODUCAO2
   Then DESTINO=[RFACC->Destino_Producao      ]
        NOMDEST=" "+[RFACC->Nome Fantasia EmitDest]
   Else DESTINO = "PRODUCAO"
        NOMDEST = ""     
EndIf

If Not PRODUCAO2
   Then Moveto "RFACRIG"
        Moveto [Sequencia do Lancamento]
        TOT_ITEMG = ImageCCount()
EndIf

Moveto "RFACC"
SaveTables
ResyncKey
UnLockRecord
Do_it!

Tabelas_Requisicao("Abre Tabelas")

Moveto "RFACC"
CoeditKey
IsLockRecord()

If NLancto <> "NOVO"
   Then MSG_REQUISICAO = ""
        RQ_ENCONTRADA  = False
        If Not IsBlank(RQ_Numero)
           Then Moveto "\\Sistemas\\Estoque\\RQCabeca"
                Moveto [Numero do Lancamento]
                Locate RQ_Numero
                If RetVal
                   Then If [Codigo da Empresa]=[RFACC->Codigo da Empresa]
                           Then If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And 
                                   (NumVal(Month([Rfacc->Data_Producao])) > 3 And NumVal(Year([Rfacc->Data_Producao])) >= 2016)
                                   Then If (([Sistema Gerador]="RF" Or [Sistema Gerador]="RR") And [Lancamento Gerador]=[RFACC->Numero_Producao]) Or
                                           ([Lancamento Gerador]="" And [Sistema Gerador]="MG") Or
                                           ([Lancamento Gerador]="" And [Sistema Gerador]="MA")
                                           Then RQ_ENCONTRADA=True
                                           Else MSG_REQUISICAO="Requisi‡„o de Estoque N. "+RQ_Numero+" n„o pertence a essa produ‡ao do corte !////"
                                                Switch
                                                  Case [Sistema Gerador]="PC" : SISTEMA_GERADOR = "PROD CORTE"
                                                  Case [Sistema Gerador]="PF" : SISTEMA_GERADOR = "PROG INT_EXT" 
                                                  Case [Sistema Gerador]="RF" : SISTEMA_GERADOR = "PROD INT_EXT"
                                                  Case [Sistema Gerador]="RR" : SISTEMA_GERADOR = "PROD INT_EXT"
                                                  OtherWise                   : SISTEMA_GERADOR = [Sistema Gerador]
                                                EndSwitch   
                                                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" |   SISTEMA GERADOR: "+SISTEMA_GERADOR,71," ")+"//"
                                                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" |LANCAMENTO GERADOR: "+[Lancamento Gerador],71," ")+"//"
                                        EndIf
                                   Else ;---- At‚ 03.2016 ----------------------
                                        RQ_ENCONTRADA=True        
                                EndIf
                        EndIf
                EndIf
        EndIf
   Else RQ_ENCONTRADA  = True        
EndIf

If Not RQ_ENCONTRADA
   Then If Not IsBlank(RQ_Numero)
           Then LimpAguarde()
                If MSG_REQUISICAO=""                                                  
                   Then MSG_REQUISICAO=Completa("Requisi‡„o de Estoque N. "+RQ_Numero+" n„o localizada !",58," ")+"////"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa("Este lan‡amento n„o ser  corrigido no Estoque !",58," ")+"////"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa("Motivos:",58," ")+"//"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Fechamento Mensal do Estoque efetuado;",58," ")+"//"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Empresa da requisi‡„o n„o corresponde;",58," ")+"//"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Algum erro ocorrido no momento deste Lan‡amento.",58," ")
                        If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And
                           (NumVal(Month([Rfacc->Data_Producao])) > 3 And NumVal(Year([Rfacc->Data_Producao])) >= 2016)
                           Then MSG_REQUISICAO=MSG_REQUISICAO+"////"
                                MSG_REQUISICAO=MSG_REQUISICAO+Completa("Se houve ocorrencia de erros, o usu rio poder ",58," ")+"//"
                                MSG_REQUISICAO=MSG_REQUISICAO+Completa("re-gerar essa requisi‡„o nas fun‡äes (ALT+F) desta rotina!",58," ")+"//"
                        EndIf
                EndIf
                
                Do_It!
                Tabelas_Requisicao("Fecha Tabelas")
                
                Moveto "RFACC"
                CoEditKey
                FormKey
                ResyncKey
                IsLockRecord()
                
                Mensagem(MSG_REQUISICAO)
                Return   
        EndIf
	 Else If NLancto <> "NOVO"
           Then If NLancto=""
                   Then NUMEROL = [\Sistemas\Estoque\RQCabeca->Numero do Lancamento]
                   Else NUMEROL = NLancto     
                EndIf           
                For i From 1 To 3
                  Switch
                    Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
                    Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
                    Case i=3: Moveto "\\Sistemas\\Estoque\\RqItemg"
                  EndSwitch
                  
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL                                     
                  If RetVal
                     Then While [Numero do Lancamento]=NUMEROL
                            CODIGO_ITEM=[Codigo do Item]
                            QTD_ITEM   =[Quantidade    ]
                            CTO_ITEM   =[Custo Total   ]
                            Switch
                              Case i=1: ESTOQUE("ESTORNAR", "S", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                                                [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")
                              Case i=2: ESTOQUE("ESTORNAR", "E", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                                                [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")                                                
                                                
                            EndSwitch
                            Switch
                              Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
                              Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
                              Case i=3: Moveto "\\Sistemas\\Estoque\\RqItemg"
                            EndSwitch
                            Del
                          EndWhile
                  EndIf
                EndFor
                If NLancto=""
                   Then Moveto "\\Sistemas\\Estoque\\RqCabeca"
                        Del
                        Switch
                          Case Tipo="Exclusao_Semi_Acabado" : 
                               Moveto "RFACC"
                               [Lancamento Requisicao_SA ]=""
                               UnLockRecord
                          Case Tipo="Exclusao" :
                               Moveto "RFACC"
                               [Lancamento RQCabeca_RFACC]=""
                               UnLockRecord     
                        EndSwitch
                        
                EndIf 
          Else Moveto "RFACC"
               [Lancamento RQCabeca_RFACC]=""
               [Lancamento Requisicao_SA ]=""            
        EndIf
EndIf

If Tipo="Exclusao" Or Tipo="Exclusao_Semi_Acabado"
   Then Do_It!
        Tabelas_Requisicao("Fecha Tabelas")
                
        Moveto "RFACC"
        CoEditKey
        FormKey
        ResyncKey
        IsLockRecord()
        Return
EndIf

WS_CREQ = ""
WS_DREQ = DESTINO+NOMDEST

If Not PRODUCAO2
   Then CODREQ  = REQ_DESTINO 
EndIf   

Moveto "\\Sistemas\\Estoque\\Requisit" ImageRights ReadOnly
If PRODUCAO2
   Then Moveto [Descricao Requisitante]
        Locate DESTINO
   Else Moveto [Codigo do Requisitante]
        Locate CODREQ
EndIf        
If RetVal
   Then WS_CREQ=[Codigo do Requisitante]
EndIf 

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 If Not IsBlank(RQ_Numero) And SEQ=0
    Then NUMEROL=RQ_Numero
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         ;If Not RetVal
         ;   Then End Down
         ;        [Numero do Lancamento] = NUMEROL  
         ;        PostRecord KeyViol LeaveLocked
         ;EndIf   
         If Not RetVal
            Then For i From 1 to 10
                   ;A primeira tentativa ser  do n§ da requisi‡Æo j  gravado
                   End 
                   If i<>1
                      Then If IsBlank([])
                              Then NUMEROL="1"
                              Else NUMEROL=StrVal(NumVal([])+1)
                           EndIf
                           NUMEROL=AlinhM(NUMEROL,6)
                   EndIf
                   Down
                   [Numero do Lancamento]=NUMEROL  
                   PostRecord KeyViol LeaveLocked
                   If RetVal     
                      Then QuitLoop 
                      Else Mensagem("N„o foi possivel gerar a requisi‡„o!")
                           Return
                   EndIf
                   QuitLoop     
                 EndFor  
            Else PostRecord KeyViol LeaveLocked     
         EndIf 
    Else If Not ProximaOrdem()
            Then Mensagem("N„o foi possivel gerar a requisi‡„o!")
                 Return
         EndIf 
 EndIf
 SEQ=SEQ+1
 QuitLoop                        
EndWhile

;---- Cabe‡a -------------------------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
TIPO_REQUISICAO = "PROD"
AUX_COD         = ""
AUX_DES         = ""
If [RFACC->Codigo]<>"" And TIPO_REQUISICAO="IND"
   Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [RFACC->Codigo] To REG_CLIENTE
        If RetVal
           Then ;If REG_CLIENTE["Tipo"]<>"E"
                ;   Then TIPO_REQUISICAO = "IND"
                ;EndIf
                AUX_COD = REG_CLIENTE["Codigo"]
                AUX_DES = REG_CLIENTE["Nome Fantasia EmitDest"]
           Else Mensagem("Verificar a Requi‡Æo "+StrVal(NUMEROL)+"//"+
                         [RFACC->Codigo]+" "+[RFACC->Nome Fantasia EmitDest]+" n„o localizado no cadastro de clientes!")     
        EndIf
EndIf
[Codigo da Empresa     ]=[RFACC->Codigo da Empresa]
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"

If TIPO_REQUISICAO="IND"
   Then [Tipo de Operacao      ]="I"
        [Descricao da Operacao ]="INDUSTRIALIZADO"
        [Codigo                ]=AUX_COD
        [Nome Fantasia EmitDest]=AUX_DES
   Else Switch 
          Case DESTINO="FACCAO"      : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
          Case DESTINO="INTERNO"     : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
          Case DESTINO="PRODUCAO"    : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
          OtherWise                  : [Tipo de Operacao]="D"  [Descricao da Operacao ]="DEVOLUCAO"
        EndSwitch
EndIf
[Codigo do Documento    ]="PROD"
[Numero do Documento    ]=AlinhM(StrVal([RFACC->Numero_Producao]),6)
[Data de Ocorrencia     ]=[RFACC->Data_Producao]
[Requisitante           ]=WS_CREQ
[Descricao Requisitante ]=WS_DREQ
[Numero do Corte        ]=[RFACC->Numero_Corte]
If PRODUCAO2
   Then [Sistema Gerador]="RR"
   Else [Sistema Gerador]="RF"
EndIf   
[Lancamento Gerador     ]=[RFACC->Numero_Producao]
Controle_Dia()
SaveTables

;---- Itens --------------------------------------------------------------------              
TOT_ITEM = 0      
QTDTOT   = 0
VRTOT    = 0
SEQ      = 0  
CONT_SEQ = 0

If PRODUCAO2
   Then Moveto "Rfacrir"
   Else Moveto "Rfacri"
EndIf                                   

Moveto [Numero_Producao]
Locate [RFACC->Numero_Producao]
If RetVal
   Then ;---- Contagem p/ Barra de Progresso ----------------------------------- 
        While [Numero_Producao]=[RFACC->Numero_Producao]
          TOT_ITEM = TOT_ITEM + 1
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

If PRODUCAO2
   Then TOT_ITEMG = TOT_ITEM 
EndIf   

Moveto [Numero_Producao]
Locate [RFACC->Numero_Producao]
If RetVal
   Then ITEM_RQITEM = "***"
        COR_RQITEM  = ""
        While [Numero_Producao]=[RFACC->Numero_Producao]
          CONT_SEQ       = CONT_SEQ + 1
          Barra(TOT_ITEM, CONT_SEQ)
          Aguarde("Aguarde, inserindo itens na requisi‡ao "+BARRA_STRING)

          CUSTO_UNITARIO = [Custo Unitario]
          CODIGO_ITEM    = [Codigo do Item]
                              
          If PRODUCAO2
             Then If Tipo="Semi_Acabado"
                     Then CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")
                     Else CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P")
                  EndIf   
             Else Switch
                    ;---- Inclu¡do em 15/04 ------------------------------------
                    Case PARAM_RETORNO_DESTINO="P" :
                         CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P") 
                    Case PARAM_RETORNO_DESTINO="S" :
                         CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")
                    ;-----------------------------------------------------------     
                    Case DESTINO="FACCAO" Or DESTINO="INTERNO" :
                         CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P")
                    Case DESTINO<>"FACCAO" And DESTINO<>"INTERNO" :
                         CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")
                  EndSwitch
          EndIf    
          QTD_ITEM   =[Quantidade Produzida]
          
          If PRODUCAO2 And Tipo="Semi_Acabado" And QTD_ITEM>0 
             Then GetRecord "\\Sistemas\\Estoque\\Itens"     MudaCodigoPara(CODIGO_ITEM,"P")       To REG_ITEM 
                  GetRecord "\\Sistemas\\Producao\\FormulaC" MudaCodigoPara(CODIGO_ITEM,"P"),"","" To REG_FORMULA
                  If Not RetVal
                    Then ;NÆo vou exibir mensagem, apenas vou desprezar a cria‡Æo do item da requisi‡Æo devido a falta da formula
                         ;A mensagem j  ‚ exibida na Formula() quando vai fazer o RQMATPRI do Produto Acabado. 
                         QTD_ITEM=0
                  EndIf
          EndIf

          If QTD_ITEM >0
             Then GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM 
                  If RetVal
                     Then WS_TITEM = REG_ITEM["Tipo do Item"]
                          WS_DITEM = REG_ITEM["Descricao do Item"]
                          WS_UNI   = REG_ITEM["Unidade Interna"]
                          WS_COR   = REG_ITEM["Codigo da Cor_Tecido"]
                     Else WS_TITEM = ""
                          WS_DITEM = ""
                          WS_UNI   = ""
                          WS_COR   = ""
                  EndIf

                 If ITEM_RQITEM<>PegaCodigoRaiz([Codigo do Item]) Or COR_RQITEM<>WS_COR 
                     Then ITEM_RQITEM = PegaCodigoRaiz([Codigo do Item])
                          COR_RQITEM  = WS_COR 
                          EXIBE_MSG   = "S"
                     Else EXIBE_MSG   = "" 
                  EndIf
                  
                  Moveto "\\Sistemas\\Estoque\\RqItem"
                  End Down
                  SEQ=SEQ+1
                  [Numero do Lancamento       ]=NUMEROL
                  [Sequencia do Lancamento    ]=SEQ
                  [Codigo da Empresa          ]=[RFACC->Codigo da Empresa ]
                  [Tipo do Item               ]=WS_TITEM
                  [Codigo do Item             ]=CODIGO_ITEM
                  [Descricao do Item          ]=WS_DITEM
                  [Quantidade                 ]=QTD_ITEM
                  [Custo Unitario             ]=CUSTO_UNITARIO       
                  ESTOQUE("ATUALIZAR", "E", [RFACC->Data_Producao],[RFACC->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, 0,EXIBE_MSG)
                  [Unidade Interna            ]=WS_UNI
                  [Custo Unitario             ]=CUSTOMEDIO
                  [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)

                  QTDTOT=QTDTOT+[Quantidade ]
                  VRTOT =VRTOT +[Custo Total]
                  UnLockrecord
                  SaveTables
                  
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL, SEQ
                  
                  ;** Adicionado em 04/05/2018 -> Formula() s¢ ser  executado somente se destino for retorno de produto acabado
                  FAZ_PROCESSO = False
                  If Not PRODUCAO2
                     Then GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
                          If Retval
                             Then If REG_PDESTI["Retorno_Destino"]="P"
                                     Then FAZ_PROCESSO=True
                                  EndIf
                          EndIf
                     Else FAZ_PROCESSO = True
                  EndIf  
                  ;-------------------------------------------------------------

                  If FAZ_PROCESSO And PARAM_EXPLODE_MP_PFAC="S" And Tipo<>"Semi_Acabado" 
                     Then Formula()
                  EndIf
                  
                  If Not PRODUCAO2
                     Then Moveto "RFACRI"
                     Else Moveto "Rfacrir"
                  EndIf    

          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

;---- Itens de Grade -----------------------------------------------------------
If Not PRODUCAO2
   Then CONT_SEQ = 0
        Moveto "RFACRIG"
        Moveto [Numero_Producao]
        Locate [RFACC->Numero_Producao    ]
        If RetVal
           Then While [Numero_Producao]=[RFACC->Numero_Producao    ]
                  CONT_SEQ = CONT_SEQ + 1   
                  Barra(TOT_ITEMG, CONT_SEQ)
                  Aguarde("Aguarde, inserindo itens na requisi‡ao de grade "+BARRA_STRING)      
                  
                  CODIGO_ITEM=[Codigo do Item       ]
                  Moveto "\\Sistemas\\Estoque\\RqItemg"
                  End Down
                  [Numero do Lancamento       ]=NUMEROL
                  [Sequencia do Lancamento    ]=[RFACRIG->Sequencia do Lancamento    ]   
                  [Codigo da Empresa          ]=[RFACC->Codigo da Empresa            ]
                  [Codigo do Item             ]=[RFACRIG->Codigo do Item             ]
                  [Tipo do Item               ]=[RFACRIG->Tipo do Item               ]
                  [Referencia                 ]=[RFACRIG->Referencia                 ]
                  [Descricao do Item          ]=[RFACRIG->Descricao do Item          ]
                  [Codigo da Cor_Tecido       ]=[RFACRIG->Codigo da Cor_Tecido       ]
                  [Descricao da Cor_Tecido    ]=[RFACRIG->Descricao da Cor_Tecido    ]
                  [Qtd1                       ]=[RFACRIG->Qtd1                       ]
                  [Qtd2                       ]=[RFACRIG->Qtd2                       ]
                  [Qtd3                       ]=[RFACRIG->Qtd3                       ]
                  [Qtd4                       ]=[RFACRIG->Qtd4                       ]
                  [Qtd5                       ]=[RFACRIG->Qtd5                       ]
                  [Qtd6                       ]=[RFACRIG->Qtd6                       ]
                  [Qtd7                       ]=[RFACRIG->Qtd7                       ]
                  [Qtd8                       ]=[RFACRIG->Qtd8                       ]
                  [Qtd9                       ]=[RFACRIG->Qtd9                       ]
                  [Qtd10                      ]=[RFACRIG->Qtd10                      ]
                  [Qtd11                      ]=[RFACRIG->Qtd11                      ]
                  [Qtd12                      ]=[RFACRIG->Qtd12                      ]
                  [Quantidade                 ]=[RFACRIG->Quantidade Produzida       ]
                  [Unidade Interna            ]=[RFACRIG->Unidade Interna            ]
                  [Codigo da Grade            ]=[RFACRIG->Codigo da Grade            ]
                  [Custo Unitario             ]=[RFACRIG->Custo Unitario             ]
                  [Custo Total                ]=NDecimal([Custo Unitario]*[Quantidade],2)
                  ;O Custo Unitario est  como o custo da produ‡Æo da confec‡„o de grade
                  ;ESTOQUE("CUSTO", "", [RFACC->Data_Producao],[RFACC->Codigo da Empresa], CODIGO_ITEM, 0, 0)
                  ;[Custo Unitario             ]=CUSTOMEDIO
                  ;[Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)
                  UnLockrecord
                  SaveTables
                  
                  Moveto "RFACRIG"
                  Skip
                  If EOT() Then QuitLoop EndIf
              EndWhile
              
        EndIf          
EndIf

;---- Complementos da Cabe‡a ---------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal
   Then [Quantidade Total         ]=QTDTOT
        [Valor Total              ]=VRTOT
        SaveTables
        UnLockRecord
EndIf

Release Vars REG_CLIENTE,REG_ITEM
Do_It!
Tabelas_Requisicao("Fecha Tabelas")
        
Moveto "RFACC"
CoEditKey
FormKey
ResyncKey
IsLockRecord()
If Tipo="Semi_Acabado"
   Then [Lancamento Requisicao_SA ]=NUMEROL
   Else [Lancamento RQCabeca_RFACC]=NUMEROL
EndIf

EndProc ;REQUISICAO()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras_Producao()
Private Cont,Ocorrencias_Item,Verifica_Rotina,Dif,cc,Faz_Rotina,Semi_Acabado     
                 
Semi_Acabado = False
Moveto "Rfacrir"  
SEQ_ANT = [Sequencia do Lancamento]

While True
  Moveto [Quantidade Produzida]

  If Not Ler_CDBarras(22,00)
     Then CHAVEI=9
          OPCHAVEI=""
          
          SomatoriaDosItens()   
          AjustaDadosCabeca()
          
          Return False
  EndIf
  CODIT   = Dados_Item
 
  ;Processo add em 08/05/2018 para verificar se tem mais ocorrˆncias do mesmo item na rela‡Æo 
  Cont    = 0
  DynArray Ocorrencias_Item[]
 
  Moveto [Codigo do Item]
  Locate CODIT
  If RetVal
     Then While [Codigo do Item] = CODIT
            Cont = Cont + 1
            Ocorrencias_Item[Cont]=[Sequencia do Lancamento]
            Skip
            If Eot() Then QuitLoop EndIf
            Locate Next CODIT
            If Not RetVal Then QuitLoop EndIf
          EndWhile
  EndIf
  ;-----------------------------------------------------------------------------
    
  ITOK   = True
  INCLUI = False

  Moveto [Codigo do Item]
  Ativa_Lookup()
  Verifica_Rotina = True
  If Len(CODIT)<=10
     Then Moveto [Codigo do Item]
          Locate ALINHM(CODIT,10)
     Else Moveto [Codigo de Barras]                   
          Locate IndexOrder by "cod_barras" CODIT
          If Not RetVal
             Then KeyPress "ESC"
                  If Codigo_Barras2(CODIT,"")
                     Then CODIT = CODIGO_BARRA2
                          Moveto [Codigo do Item]
                          Ativa_Lookup()
                          Moveto [Codigo do Item]
                          Locate CODIT  
                     Else RetVal = False
                          ITOK   =  False
                  EndIf                 
          EndIf   
  EndIf

  If RetVal     
     Then CopyToArray REG_BUSCA_LOOKUP
          CODIT=[Codigo do Item]
          If [Inativo]="S"
             Then Verifica_Rotina = False
          EndIf
          KeyPress "ESC"
          
          If Not Verifica_Rotina
             Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                  CHAVEI=9
                  OPCHAVEI=""
                  Return False
          EndIf        
     Else KeyPress "ESC"
          Mensagem("Item n„o cadastrado !") 
          
          CHAVEI=9
          OPCHAVEI=""
          Verifica_Rotina = False
          Return False
  EndIf
  Moveto "Rfacrir"        
  
  LOCALIZA_ITEM = False
  CODITANT      = CODIT
  If Dados_QTD>0
     Then Faz_Rotina = False
          Moveto [Codigo do Item]
          Locate CODIT
          If RetVal
             Then Faz_Rotina = True
             Else CODIT=MudaCodigoPara(CODIT,"S")
                  Locate CODIT
                  If RetVal  
                     Then Faz_Rotina = True
                  EndIf
          EndIf
          
          If Not Faz_Rotina
             Then Mensagem("O item: //"+CODIT+"//"+REG_BUSCA_LOOKUP["Descricao do Item"]+"// // nÆo existe nesta rela‡„o !")
                  Release Vars ITEM
                 
                  CHAVEI=9
                  OPCHAVEI=""
                  Return False
          EndIf   
          
          If ((Dados_QTD + [Quantidade Produzida]) > [Quantidade Programada]) Or 
             (Dados_QTD > [Quantidade Programada] And ([Diferenca]="" Or [Diferenca]=BlankNum() Or [Diferenca]=0)) Or
             (([Diferenca]<>"" And [Diferenca]<>BlankNum() And [Diferenca]<>0) And Dados_QTD > ([Diferenca]*-1))
             Then If DynArraySize(Ocorrencias_Item)=0
                     Then If PERMITIR_ITENS_MAIOR_PROGR
                             Then ConfGeral("Quantidade Produzida > Quantidade Programada////"+
                                            "Deseja continuar a introduzir esta quantidade ?")
                                  If OK<>"S"
                                     Then CHAVEI=9
                                          OPCHAVEI=""
                                          Return False
                                  EndIf
                             Else Mensagem("Quantidade Produzida > Quantidade Programada////"+
                                           "Informe o valor correto para prosseguir !")  
                                  CHAVEI=9
                                  OPCHAVEI=""
                                  Return False
                          EndIf
                     Else LOCALIZA_ITEM = True
                  EndIf
          EndIf
     Else Faz_Rotina = False
          Moveto [Codigo do Item]
          Locate CODIT
          If RetVal
             Then Faz_Rotina = True
             Else CODIT=MudaCodigoPara(CODIT,"S")
                  Locate CODIT
                  If RetVal  
                     Then Faz_Rotina = True
                  EndIf
          EndIf   
  
          If Not Faz_Rotina
             Then Mensagem("O item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // nÆo existe nesta rela‡„o !")
                  CHAVEI=9
                  OPCHAVEI=""
                  Return False
          EndIf   
  EndIf         
  
  Cont          = 0
  Aux_Inverso   = False
  Cont_Inverso  = DynArraySize(Ocorrencias_Item)+1
  AUX_Dados_QTD = 0
  
  While True
  
  If LOCALIZA_ITEM
     Then Cont = Cont + 1
          Moveto [Sequencia do Lancamento]
          Locate Ocorrencias_Item[Cont]
          If Dados_QTD + [Quantidade Produzida] > [Quantidade Programada]
             Then If Cont=DynArraySize(Ocorrencias_Item)
                     Then AUX_Dados_QTD = Dados_QTD
                          Dados_QTD=0 
                     Else AUX_QTD = [Quantidade Programada]-[Quantidade Produzida]
                          AUX_Dados_QTD = Dados_QTD - AUX_QTD
                          Dados_QTD = AUX_QTD
                  EndIf
                  Switch
                    Case Dados_QTD<=0 And Cont=DynArraySize(Ocorrencias_Item) :
                         Dados_QTD=AUX_Dados_QTD
                         AUX_Dados_QTD=0
                         If PERMITIR_ITENS_MAIOR_PROGR
                             Then ConfGeral("Quantidade Produzida > Quantidade Programada////"+
                                            "Deseja continuar a introduzir esta quantidade ?")
                                  If OK<>"S"
                                     Then If [Quantidade Produzida]>=[Quantidade Programada]
                                             Then Dados_QTD = 0
                                             Else Dados_QTD = [Quantidade Programada]
                                          EndIf
                                  EndIf
                             Else Mensagem("Quantidade Produzida > Quantidade Programada////"+
                                           "Informe o valor correto para prosseguir !")  
                                  If [Quantidade Produzida]>=[Quantidade Programada]
                                     Then Dados_QTD = 0
                                     Else Dados_QTD = [Quantidade Programada]
                                  EndIf   
                          EndIf
                    Case AUX_Dados_QTD=0                                     :
                         QuitLoop
                    Case Dados_QTD=0                                         :
                         Dados_QTD=AUX_Dados_QTD
                         Loop     
                  EndSwitch
             Else AUX_Dados_QTD = 0     
          EndIf
     Else ;Subtrair Quantidade do Item
          If DynArraySize(Ocorrencias_Item)>0 And Dados_QTD <0
             Then Cont_Inverso = Cont_Inverso - 1
                  If Cont_Inverso=0
                     Then If Aux_Inverso
                             Then Mensagem("A quantidade informada foi maior que a quantidade produzida!")
                             Else Mensagem("H  quantidade informada deste item a ser deduzida")
                          EndIf            
                          QuitLoop
                  EndIf        
                  Moveto [Sequencia do Lancamento]
                  Locate Ocorrencias_Item[Cont_Inverso]
                  Switch
                    Case IsBlank([Quantidade Produzida]) And Cont_Inverso=0 :
                         Mensagem("N„o h  quantidade deste item a ser deduzida")  
                         QuitLoop
                    Case IsBlank([Quantidade Produzida])                                         :
                         Loop        
                  EndSwitch     
                  If Not Aux_Inverso Then Aux_Inverso=True EndIf   
                  If (Dados_QTD*-1) > [Quantidade Produzida] 
                     Then If Cont_Inverso=0
                             Then AUX_Dados_QTD = Dados_QTD
                                  Dados_QTD=0
                             Else AUX_Dados_QTD = ((Dados_QTD*-1)-[Quantidade Produzida])*-1
                                  Dados_QTD = ([Quantidade Produzida]*-1)
                         EndIf    
                    Else AUX_Dados_QTD=0
                         ;If Cont_Inverso=0
                         ;   Then AUX_Dados_QTD=0
                         ;   Else AUX_Dados_QTD=[Quantidade Produzida]-(Dados_QTD*-1) 
                         ;EndIf     
                  EndIf       
                  Switch
                    ;Case Dados_QTD=0 And Cont=DynArraySize(Ocorrencias_Item) :
                    ;     Dados_QTD=AUX_Dados_QTD
                    ;     AUX_Dados_QTD=0
                    ;     If [Quantidade Produzida]-(Dados_QTD*-1) < 0
                    ;        Then Mensagem("A quantidade informada ultrapassa a(s) quantidade(s) produzida(s)!")  
                    ;             Dados_QTD = [Quantidade Produzida]*-1                                    
                    ;     EndIf
                    ;Case AUX_Dados_QTD=0                                     :
                    ;     QuitLoop
                    Case Dados_QTD=0                                         :
                         Dados_QTD=AUX_Dados_QTD
                         Loop     
                  EndSwitch
             Else AUX_Dados_QTD = 0
                  If IsBlank([Quantidade Produzida]) And Dados_QTD <0
                     Then Mensagem("N„o h  quantidade deste item a ser deduzida")  
                          QuitLoop        
                     Else If [Quantidade Produzida]>0 And ([Quantidade Produzida]-(Dados_QTD*-1) < 0)
                             Then Mensagem("A quantidade informada ultrapassa a(s) quantidade(s) produzida(s)!")  
                                  Dados_QTD = [Quantidade Produzida]*-1                                    
                          EndIf 
                  EndIf
          EndIf
  EndIf  
  
  qtdeDif=[Diferenca]*-1 
  If qtdeDif<0
     Then qtdeMsg=Dados_QTD
     Else qtdeMsg=Dados_QTD-qtdeDif
  EndIf  
  ITOK = True
                 
  Switch
    Case SYS_CODIGO_CLIENTE="0079" Or
         SYS_CLIENTE_CONFEC="0222" Or
         SYS_CODIGO_CLIENTE="0232"  :  
         If Dados_QTD>0
            Then [Quantidade Produzida]=[Quantidade Produzida]+Dados_QTD             
                 Acerta_Item()
        
                 Verifica_Rotina = False
                 If [Diferenca]>0
                    Then Verifica_Rotina = True
                 EndIf     
                        
                 If Verifica_Rotina
                    Then [Quantidade Produzida]=[Quantidade Produzida]-Dados_QTD
                         Acerta_Item()
                 EndIf
            Else [Quantidade Produzida]=[Quantidade Produzida]+Dados_QTD
                 Acerta_Item()    
         EndIf
  			
         If Dados_QTD>0
            Then Verifica_Rotina = False
                 If [Diferenca]>0
                    Then Verifica_Rotina=True
                         Dif = StrVal([Diferenca])
                 EndIf
                
                 If Verifica_Rotina
                    Then MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODITANT+"// //"
                         MSG=MSG+" inseriu "+Dif+" a mais que quantidade pedida !//"
                         If Not ConfGeral(MSG+"Deseja realmente informar a mais ?")
                            Then [Quantidade Produzida]=[Quantidade Produzida]-Dados_QTD
                         EndIf
                         Acerta_Item()
                         Release Vars Dif
                 EndIf
            Else Verifica_Rotina = False
                 If Not IsBlank([Quantidade Produzida]) And [Quantidade Produzida]<0
                    Then Verifica_Rotina = True 
                 EndIf
              
                 If Verifica_Rotina
                    Then MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODITANT+"// //"
                         MSG=MSG+"nÆo tem mais o que deduzir !"
                         Mensagem(MSG)
                      
                         [Quantidade Produzida]=[Quantidade Produzida]-Dados_QTD    
                         Acerta_Item()
                 EndIf
         EndIf
         SomatoriaDosItens()
  
         Moveto [Codigo do Item]
         Locate CODIT
  
    Case ITOK :
         Switch
           Case IsBlank([Quantidade Produzida]) And Dados_QTD<0 :
                MSG="Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
                MSG=MSG+"nÆo existe quantidade a ser deduzida !"
                Mensagem(MSG)
           Case Dados_QTD<0 And [Quantidade Produzida]<=(Dados_QTD*-1) And IsBlank([Quantidade Programada]) :
                Mensagem("A quantidade a ser deduzida ["+StrVal(Dados_QTD*-1)+
                          "]// ‚ igual ou maior "+
                          "a quantidade j  produzida ["+StrVal([Quantidade Produzida])+"].")
           OtherWise :
                [Quantidade Produzida]= [Quantidade Produzida]+Dados_QTD
                Acerta_Item()
                SomatoriaDosItens()
                Moveto [Codigo do Item]
                Locate CODIT
      EndSwitch  
    Case Not ITOK :
      OK="S"
      Verifica_Rotina = False
      If Dados_QTD>0
         Then Verifica_Rotina = True
      EndIf  
      
      If Verifica_Rotina
         Then MSG="Nesta Programa‡„o/Corte n„o tem o Item informado !// //"
      EndIf
      MSG=MSG+"Item: "+REG_BUSCA_LOOKUP["Referencia"]+" - "+REG_BUSCA_LOOKUP["Descricao do Item"]+" - "+CODIT+"// //"
              
      Verifica_Rotina = False
      MSG=MSG+"InclusÆo bloqueada !"
      Mensagem(MSG)     
     
      Moveto [Codigo do Item]
      Locate CODIT  
  EndSwitch
  
  If AUX_Dados_QTD=0 Then QuitLoop EndIf
  
  Dados_QTD = AUX_Dados_QTD
  EndWhile
EndWhile

Moveto [Sequencia do Lancamento]
Locate SEQ_ANT

EndProc ;CDBarras_Producao()

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc SomatoriaDosItens()

If PRODUCAO2
   Then Moveto "Rfacrir"   
        ITEM   = [Sequencia do Lancamento]
        
        VSQTDP = 0 
        VSQTDE = 0 
        TOTVR  = 0 
   
        scan
          VSQTDP =VSQTDP + [Quantidade Programada] 
          VSQTDE =VSQTDE + [Quantidade Produzida ]
          TOTVR  =TOTVR  + [Preco Total          ] 
        endscan
                                                     
        If VSQTDP = 0 Then VSQTDP = BlankNum() EndIf
        If VSQTDE = 0 Then VSQTDE = BlankNum() EndIf
        If TOTVR  = 0 Then TOTVR  = BlankNum()  EndIf
                         
        VSQTDD = VSQTDE-VSQTDP
        TOTQTD = VSQTDE 

   Else Moveto "Rfacrig"
        ITEM   = [Sequencia do Lancamento]
        
        Moveto [Quantidade Produzida   ] TOTQTD = ImageCSum()
        Moveto [Preco Total            ] TOTVR  = ImageCSum()
                     
        If TOTQTD = 0 Then TOTQTD = BlankNum() EndIf
        If TOTVR  = 0 Then TOTVR  = BlankNum() EndIf
EndIf
Moveto [Sequencia do Lancamento]
Locate ITEM
        
EndProc   ;SomatoriaDosItens()

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Acerta_Item()

If PRODUCAO2
   Then [Diferenca  ]=[Quantidade Produzida]-[Quantidade Programada]
        [Preco Total]=BlankNum()
        
        If [Diferenca]=0
           Then [Diferenca]=BlankNum()
        EndIf
        
        If [Quantidade Produzida]=0
           Then [Quantidade Produzida]=BlankNum()
        EndIf
        
        If [Quantidade Produzida]>0
           Then [Preco Total] = [Quantidade Produzida]*[Custo Unitario]
        EndIf
   Else [Quantidade_Diferenca]=([Quantidade_Expedida]-[Quantidade_Pedido])+[Quantidade_Substituida]
   
        If [Quantidade_Diferenca]=0
           Then [Quantidade_Diferenca]=BlankNum()
        EndIf
        If [Quantidade_Diferenca]>0
           Then [Quantidade_Fora_Pedido]=[Quantidade_Diferenca]
           Else [Quantidade_Fora_Pedido]=BlankNum()
        EndIf
   
        If [Quantidade_Expedida]=0
           Then [Quantidade_Expedida]=BlankNum()
        EndIf 
        
       If [Quantidade_Substituida]=0
          Then [Quantidade_Substituida]=BlankNum()
       EndIf

       If IsBlank([ExpedC->Numero do Pedido])
          Then [Quantidade_Diferenca  ]=BlankNum()
               [Quantidade_Fora_Pedido]=BlankNum()
               [Quantidade_Substituida]=BlankNum()
       Endif 
EndIf

UnLockRecord
EndProc ;Acerta_Item()

;*******************************************************************************
;* Verifica Formula de Materia Prima                                           *
;*******************************************************************************
Proc FORMULA()
Private UNIDADE,TIPO_ITEM,FAZ_ROTINA

Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If Not RetVal
  Then MSG=    "NÆo existe f¢rmula cadastrada para o item:// //"
       MSG=MSG+[\Sistemas\Estoque\RqItem->Codigo do Item]+" - "
       MSG=MSG+[\Sistemas\Estoque\RqItem->Descricao do Item]+"// //"
       MSG=MSG+"Consumo para este item nÆo foi realizada,//"
       MSG=MSG+"e o estoque n„o ser  atualizado devidamente !// //"
       MSG=MSG+"Verificar a f¢rmula e depois,//confirmar novamente esta entrada de produ‡Æo !"
       Mensagem(MSG)
       Moveto "\\Sistemas\\Estoque\\RqItem"
       Return
EndIf

If [Baixa_Automatica]="N"
   Then Moveto "\\Sistemas\\Estoque\\RqItem"
        Return
EndIf

Moveto "\\Sistemas\\Producao\\FormulaI"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If RetVal
   Then While [Codigo do Produto]=[\Sistemas\Estoque\RqItem->Codigo do Item]
          FAZ_ROTINA = False
          If Not IsBlank([Codigo do Material]) And [Item_Baixa_Automatica]="S"
             Then If [Tipo do Item]<>"D" And [Tipo do Item]<>"C" 
                     Then FAZ_ROTINA = True
                  EndIf
          EndIf    
          
          ;** Adicionado em 04/05/2018 -> 
          ;   Produto com retorno de PRODUTO ACABADO estava saindo com o seu semi-acabado na Programa‡Æo e Produ‡Æo
          If Not PRODUCAO2
             Then 
                  GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
                  If Retval
                     Then ITEM_RQMATPRI = [\Sistemas\Producao\FormulaI->Codigo do Material]
                          AUX_TIPO_ITEM = ""
                          GetRecord "\\Sistemas\\Estoque\\Itens" ITEM_RQMATPRI To REG_ITEM
                          If RetVal
                             Then AUX_TIPO_ITEM = REG_ITEM["Tipo do Item"]
                          EndIf
                          
                          If AUX_TIPO_ITEM="S" And REG_PDESTI["Retorno_Destino"]="P"
                             Then FAZ_ROTINA=False
                                  
                                  ;Comentado a pedido de Anivel em 23/05/2018
                                  ;If MudaCodigoPara(ITEM_RQMATPRI,"P") = [\Sistemas\Estoque\RqItem->Codigo do Item]
                                  ;   Then 
                                  ;EndIf
                                  
                                  
                          EndIf
                          Release Vars ITEM_RQMATPRI,AUX_TIPO_ITEM,REG_PDESTI,REG_ITEM
                  EndIf
             Else 
                  ITEM_RQMATPRI = [\Sistemas\Producao\FormulaI->Codigo do Material]
                  AUX_TIPO_ITEM = ""
                  GetRecord "\\Sistemas\\Estoque\\Itens" ITEM_RQMATPRI To REG_ITEM
                  If RetVal
                     Then AUX_TIPO_ITEM = REG_ITEM["Tipo do Item"]
                  EndIf
                  
                  If AUX_TIPO_ITEM="S" and not isblank([RFacc->Numero_Programacao])
                     Then FAZ_ROTINA=False
                          
                          ;Comentado a pedido de Anivel em 23/05/2018  
                          ;If MudaCodigoPara(ITEM_RQMATPRI,"P") = [\Sistemas\Estoque\RqItem->Codigo do Item]
                          ;   Then 
                          ;EndIf
                  EndIf   
          EndIf
          ;---------------------------------------------------------------------------------------

          If FAZ_ROTINA
             Then Moveto "\\Sistemas\\Estoque\\RqMatPri"
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL,SEQ,[\Sistemas\Producao\FormulaI->Sequencia]
                  If Not RetVal
                     Then End Down
                          [Numero do Lancamento   ]=NUMEROL
                          [Sequencia do Item      ]=SEQ
                          [Sequencia Materia Prima]=[\Sistemas\Producao\FormulaI->Sequencia]
                  EndIf
                  [Codigo da Empresa  ]=[\Sistemas\Estoque\RqCabeca->Codigo da Empresa]
                  [Codigo do Item     ]=[\Sistemas\Producao\FormulaI->Codigo do Material]
                  UNIDADE=([\Sistemas\Estoque\RqItem->Quantidade]/[\Sistemas\Producao\Formulac->Quantidade Produzida])
                  [Quantidade         ]=NDecimal(UNIDADE*[\Sistemas\Producao\FormulaI->Quantidade],3)
                  ESTOQUE("ATUALIZAR_FORMULA", "S", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                          [Codigo da Empresa], [Codigo do Item], UNIDADE, 0,"")
                  [Custo Unitario     ]=CUSTOMEDIO
                  [Custo Total        ]=Round([Quantidade]*[Custo Unitario],2)
                  [Codigo CCusto      ]=[\Sistemas\Estoque\RqItem->Codigo CCusto]
                  UnLockRecord
                  SaveTables
                  
                  Moveto "\\Sistemas\\Producao\\FormulaI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
  Else MSG=    "NÆo existem itens a consumir na f¢rmula do item://"
       MSG=MSG+[\Sistemas\Estoque\RqItem->Codigo do Item]+" - "
       MSG=MSG+[\Sistemas\Estoque\RqItem->Descricao do Item]+"// //"
       MSG=MSG+"Consumo para este item nÆo foi realizada,//"
       MSG=MSG+"e o estoque n„o ser  atualizado devidamente !// //"
       MSG=MSG+"Verificar a f¢rmula e depois,//confirmar novamente esta entrada de produ‡Æo !"
       Mensagem(MSG)
EndIf
Moveto "\\Sistemas\\Estoque\\RqItem"
EndProc  ;FORMULA()

;*******************************************************************************
;* Rotina Baixa Materia Prima                                                  *
;*******************************************************************************
Proc ESTOQUE(OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, QTDE, CTTOT, EXIBE_MSG)
Private OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, ANO, MES, QTDE, CTTOT, MSG, Tabela

Tabela=Table()

MES=ALINHM(StrVal(Month(DTREF)),2)
ANO=ALINHM(StrVal(Year(DTREF)),4)

Moveto "\\Sistemas\\Estoque\\SdEstq"
Moveto [Codigo da Empresa]
Locate COD_EMPRESA, COD_ITEM, ANO, MES
If Not RetVal
   Then Cria_Ficha(COD_EMPRESA,COD_ITEM,ANO,MES,False)
EndIf
While True
  If IsLockRecord()
     Then Loop
  EndIf
  
  If OPERACAO="ATUALIZAR_FORMULA" Or
     OPERACAO="ATUALIZAR"         Or
     OPERACAO="CUSTO"
     Then ;Vari vel CUSTOMEDIO foi ajustado conforme ‚ realizado nos processos manuais da requisi‡Æo de grade
          ;antes vari vel era atribuido com o valor ** [Custo Total Atual]/[Saldo Atual] **
          
         if TPMOV="S"
            then 
                 CUSTOMEDIO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                 If CUSTOMEDIO=0
                    Then CUSTOMEDIO=[Ultimo Custo Atual]
                 EndIf
          EndIf

          if TPMOV="E"
            then CUSTOMEDIO=[Preco de Custo] 
          EndIf
          CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
          
          If UTILIZA_CUSTO_UNITARIO And OPERACAO="ATUALIZAR"                            And               
            ;[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]>=[Data do Preco de Custo] And
             [\Sistemas\Estoque\RqCabeca->Tipo de Movimento]="E"                        And
             [\Sistemas\Estoque\RqCabeca->Tipo de Operacao ]="P"                           
            ;[\Sistemas\Estoque\RqItem->Custo Unitario]>0                               And
            ;[\Sistemas\Estoque\RqItem->Quantidade]>0 
             Then GetRecord "\\Sistemas\\Estoque\\Itens" [\Sistemas\Estoque\RqItem->Codigo do Item] To REG_ITEM
                  If Not ReTval
                     Then Mensagem("Item "+REG_ITEM["Codigo do Item"]+" n„o localizado no cadastro de itens!")
                     Else 
                         ;If [\Sistemas\Estoque\RqItem->Custo Unitario]<>[Preco de Custo]
                         ;   Then MSG = "O Custo Unit rio informado neste Item, // "+
                         ;              "difere da Ficha de Estoque !// //"+
                         ;              "Custo Informado = "+Format("W12.5,EIC",[\Sistemas\Estoque\RqItem->Custo Unitario])+"//"+
                         ;              "Custo da Ficha  = "+Format("W12.5,EIC",[Preco de Custo        ])+"// //"+
                         ;              "Deseja Atualizar o Custo da Ficha a partir deste Lan‡amento ?"
                         ;         If EXIBE_MSG<>""
                         ;            Then ConfGeral(MSG)
                         ;            Else OK="S"
                         ;         EndIf    
                         ;         If OK="S"
                         ;            Then CUSTOMEDIO=NDecimal([\Sistemas\Estoque\RqItem->Custo Unitario],5)
                         ;                 If CUSTOMEDIO=0 
                         ;                    Then CUSTOMEDIO=[Ultimo Custo Atual]
                         ;                 EndIf
                         ;                 CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
                         ;                 [Preco de Custo        ]=CUSTOMEDIO
                         ;                 [Data do Preco de Custo]=[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]
                         ;        EndIf
                         ;   Else CUSTOMEDIO=NDecimal([\Sistemas\Estoque\RqItem->Custo Unitario],5)
                         ;        If CUSTOMEDIO=0 
                         ;            Then CUSTOMEDIO=[Ultimo Custo Atual]
                         ;        EndIf
                         ;        CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
                         ;        [Data do Preco de Custo]=[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]     
                         ;EndIf
                                  
                 EndIf
          EndIf
          
  EndIf

  Switch
    Case TPMOV="S":
         [Saldo Atual      ]=NDecimal([Saldo Atual      ]-QTDE,3)
         [Custo Total Atual]=NDecimal([Custo Total Atual]-CTTOT,2)
    Case TPMOV="E":
         [Saldo Atual      ]=NDecimal([Saldo Atual      ]+QTDE,3)
         [Custo Total Atual]=NDecimal([Custo Total Atual]+CTTOT,2)
  EndSwitch

  If OPERACAO="ATUALIZAR_FORMULA" Or
     OPERACAO="ATUALIZAR"         Or
     OPERACAO="ESTORNAR" 
     Then If ([Custo Total Atual]/[Saldo Atual])>0
              Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          EndIf
          UnLockRecord
  EndIf
  QuitLoop
EndWhile

If (OPERACAO="ATUALIZAR" Or OPERACAO="ATUALIZAR_FORMULA") And TPMOV="S"
   Then While True
          Moveto "\\Sistemas\\Estoque\\EstqPrm"
          Moveto [Codigo da Empresa]
          Locate COD_EMPRESA, COD_ITEM
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=COD_EMPRESA
                  [Codigo do Item      ]=COD_ITEM
                  UnLockRecord
                  Loop
          EndIf
          If IsLockRecord()
             Then Loop
          EndIf
          If DTREF>[Data da Ultima Saida]
             Then [Data da Ultima Saida]=DTREF
          EndIf
          UnLockRecord

          QuitLoop
        EndWhile
EndIf
Moveto Tabela
EndProc  ;ESTOQUE()

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

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

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

Return True
EndProc  ;Cria_Ficha()

;*******************************************************************************
;* Rotina p/ Montar Opcoes p/ Grade                                            *
;*******************************************************************************
Proc Monta_Opcoes_SD(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_Itens_Cor]
EndSwitch
Ativa_Lookup()
Moveto [Codigo do item]
Locate VSD_I_Codigo_Item 

wcg=0
While [Codigo do Item]=VSD_I_Codigo_Item   
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And 
         ( SYS_CODIGO_CLIENTE="0222" Or
           SYS_CODIGO_CLIENTE="0232" ):
         
         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("W2,AR",[Sequencia da Cor_Tecido])
EndSwitch
  Skip
  IF EOT() Then QuitLoop EndIf
EndWhile
KeyPress "ESC"
Moveto Field nomecampo
EndProc ;Monta_Opcoes_SD()

;*******************************************************************************
;* Rotina p/ Checagem Opcoes p/ Grade                                          *
;*******************************************************************************
Proc Checa_Opcoes_SD(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_SD(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc ;Checa_Opcoes_SD()

;*******************************************************************************
;* Rotina Montar Registro_F1 p/ Grade                                          *
;*******************************************************************************
Proc MontaRegistro_F1_SD(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 ;MontaRegistro_F1_SD()

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Seleciona_Opcoes_SD(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>10
   Then AJ=10
   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"
     @ 13,09 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_SD()

;*******************************************************************************
;* Rotina para Re-Gerar as Requisicoes                                         *
;*******************************************************************************
Proc Gera_Requicicao()
Private AUX_REQ

AUX_REQ =[RFACC->Lancamento RQCabeca_RFACC]
GetRecord "\\Sistemas\\Estoque\\RqCabeca" AUX_REQ To REG_RQCABECA
If Not RetVal
   Then If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And
           (NumVal(Month([Rfacc->Data_Producao])) > 3 And NumVal(Year([Rfacc->Data_Producao])) >= 2016)
           Then ConfGeral("Deseja realmente re-gerar a requisi‡„o p/ um novo numero de lan‡amento ?")
                If Ok="S"
                   Then Requisicao("Inclusao","NOVO")
                EndIf
           Else Mensagem("A requisi‡„o "+AUX_REQ+" NAO existe no lan‡amento da REQUISICAO!")     
        EndIf           
   Else If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And 
           (NumVal(Month(REG_RQCABECA["Data_Inclusao"])) > 3 And NumVal(Year(REG_RQCABECA["Data_Inclusao"])) >= 2016)
           Then If (REG_RQCABECA["Sistema Gerador"]="RF" Or REG_RQCABECA["Sistema Gerador"]="RR") And 
                   REG_RQCABECA["Lancamento Gerador"]=[RFACC->Numero_Producao]
                   Then ConfGeral_N("A requisi‡ao "+AUX_REQ+" existe no sistema!//Deseja Re-Gerar esta requisi‡ao?")
                        If Ok="S"
                           Then Requisicao("Inclusao",AUX_REQ)
                        EndIf
                   Else MSG="Requisi‡„o de Estoque N. "+[RFACC->Lancamento RQCabeca_RFACC]+" n„o pertence a essa produ‡ao do corte !////"
                        Switch
                          Case REG_RQCABECA["Sistema Gerador"]="PC" : SISTEMA_GERADOR = "PROD CORTE"
                          Case REG_RQCABECA["Sistema Gerador"]="PF" : SISTEMA_GERADOR = "PROG INT_EXT" 
                          Case REG_RQCABECA["Sistema Gerador"]="RF" : SISTEMA_GERADOR = "PROD INT_EXT"
                          Case REG_RQCABECA["Sistema Gerador"]="RR" : SISTEMA_GERADOR = "PROD INT_EXT"
                          OtherWise                   : SISTEMA_GERADOR = REG_RQCABECA["Sistema Gerador"]
                        EndSwitch   
                        MSG=MSG+Completa(" |   SISTEMA GERADOR: "+SISTEMA_GERADOR,71," ")+"//"
                        MSG=MSG+Completa(" |LANCAMENTO GERADOR: "+REG_RQCABECA["Lancamento Gerador"],71," ")+"//"
                        MSG=MSG+Completa("Deseja re-gerar a requisi‡ao deste lan‡amento p/ uma nova requisi‡„o?",71," ")
                        ConfGeral_N(MSG) 
                        If Ok="S"
                           Then Requisicao("Inclusao","NOVO")
                        EndIf
                EndIf
           Else Mensagem(Completa("A requisi‡„o "+AUX_REQ+" existe no sistema, impossibilitando",55," ")+"//"+
                         Completa("re-gerar esse lan‡amento nas requisi‡äes!                   ",55," ")+"////"+
                         Completa("Verificar na rotina de REQUISICAO o lan‡amento "+AUX_REQ+"!",55," "))
        EndIf
EndIf

EndProc ;Gera_Requicicao()

;*******************************************************************************
;* Monta Array das Produ‡äes do Corte -> Armazenados em uma String             *
;*******************************************************************************
Proc Monta_Producao_Array(PARAM)
Private PARAM,CONT

DynArray AUX_PRODUCAO[]

PosI = Search(",",PARAM)
If PosI>0
   Then CONT = 0 
        While PosI>0
          CONT = CONT + 1  
          AUX_PRODUCAO[CONT] = SubStr(PARAM,1,PosI-1) 
          PARAM = Ltrim(Rtrim(SubStr(PARAM,PosI+1,Len(PARAM))))
          PosI = Search(",",PARAM)
        EndWhile
        CONT = CONT + 1  
        AUX_PRODUCAO[CONT] = PARAM
   Else AUX_PRODUCAO[1] = PARAM 
EndIf  
Release Vars PARAM,CONT
 
EndProc ;Monta_Producao_Array()

;*******************************************************************************
;* Carrega Array e Verifica Altera‡Æo                                          *
;*******************************************************************************
Proc Carrega_Array(PARAM)
Private WHI,WHK,CORTE,PARAM,
        JanelaAux, JanelaAux2, tpdestino
                                 
Switch
  Case PARAM = "" :
       CORTE = [Rfacc->Numero_Corte]

       WHI=0
       WHK=0
       Release Vars Array_Lista1
       Release Vars Array_Lista2
       Release Vars Array_Lista3
        
       DynArray Array_Lista1[]
       DynArray Array_Lista2[]
       DynArray Array_Lista3[]
                               
       {Ask} {\\Sistemas\\Faccao\\Pcfacc} 
       Moveto [Numero_Producao_Corte   ] Check
       Moveto [Numero_Programacao_Corte] TypeIn "~CORTE.."
       Moveto [Data_Producao           ] Check
       Do_It!
       ClearImage
       Moveto "\\Sistemas\\Faccao\\Pcfacc"
       ClearImage
               
       Tabela_Producao_Temp = Cria_Temp(PrivDir())
       Copy "Answer" Tabela_Producao_Temp
        
       View Tabela_Producao_Temp
       Scan
         WHI=WHI+1
         Array_Lista1[WHI]=Alinhm(StrVal([Numero_Producao_Corte]),6)+Spaces(01)+Format("D13",[Data_Producao])
       EndScan 
       ClearImage       
       
  Case PARAM = "PRODUCOES_ADICIONADAS"  : 
       ;---- Array para armazenar produ‡äes em lan‡amentos diferentes ----------
       Do_It!
       Release Vars Array_Producoes
       DynArray Array_Producoes[]
       For i From 1 To DynArraySize(Array_Lista2)
         Array_Producoes[i] = SubStr(Array_Lista2[i],1,6)
       EndFor

       If DynArraySize(Array_Producoes) > 0 
          Then
               tpdestino=[Rfacc->Destino_Producao]
               NUM_PROD ="" 
               For i From 1 To DynArraySize(Array_Producoes)
                 if NUM_PROD<>""
                    then NUM_PROD = NUM_PROD+" or "
                 endif   
                 NUM_PROD = NUM_PROD+".."+Array_Producoes[i]+".." 
               EndFor  
           
               {Ask} {Rfacc}   JanelaAux =GetWindow()   
               moveto [Numero_Producao      ] typein "_nprod"
               moveto [Destino_Producao     ] typein "\""+tpdestino+"\""
               {Ask} {Rfacrir} JanelaAux2=GetWindow()
               moveto [Numero_Producao      ] Check typein "_nprod"
               Moveto [Numero_Producao_Corte] Check TypeIn NUM_PROD
               Do_it!
               ClearImage
                   
               Window Select JanelaAux  ClearImage     
               Window Select JanelaAux2 ClearImage     
                        
               WHI = 0
               WHK = 0
               NUM_RFACRIR = " *** "
               Num_PROD    = " *** "
               Release Vars Array_Lista3,Array_Producoes
               DynArray Array_Lista3[]
               DynArray Array_Producoes[]
               If Not IsEmpty("Answer")
                  Then Sort "Answer" On "Numero_Producao"
                       ClearImage 
                       View "Answer"
                       ;funcionando
                       ;Scan
                       ;  Monta_Producao_Array([Numero_Producao_Corte])
                       ;  For ty From 1 To DynArraySize(AUX_PRODUCAO)
                       ;    If NUM_RFACRIR <> AUX_PRODUCAO[ty]
                       ;       Then NUM_RFACRIR = AUX_PRODUCAO[ty]
                       ;            WHI = WHI + 1
                       ;            Array_Lista3[WHI] = Format("W6",AUX_PRODUCAO[ty])
                       ;    EndIf
                       ;  EndFor
                       ;EndScan
                       
                       Scan
                         If NUM_PROD <> [Numero_Producao]
                            Then NUM_PROD = [Numero_Producao]
                                 WHI = WHI + 1
                                 Array_Lista3[WHI] = Format("W6",[Numero_Producao])
                         EndIf     
                       EndScan
                       ClearImage
                       
                       Sort "Answer" On "Numero_Producao_Corte"
                       ClearImage
                       View "Answer"
                       Scan
                         Monta_Producao_Array([Numero_Producao_Corte])
                         For ty From 1 To DynArraySize(AUX_PRODUCAO)
                           AUX_PROD = AUX_PRODUCAO[ty]
                           ACHOU_PROD = False
                           For tu From 1 To DynArraySize(Array_Producoes)
                             If AUX_PROD=Array_Producoes[tu]
                                Then ACHOU_PROD=True
                             EndIf
                           Endfor
                           If Not ACHOU_PROD
                              Then WHK = WHK + 1
                                   Array_Producoes[WHK] = Format("W6",AUX_PROD)
                           EndIf  
                         EndFor                                
                       EndScan
                       ClearImage 
               EndIf
       EndIf          
  OtherWise :
       Switch
         Case Campo="TG_TABELA1" And ADICAO   : 
              CONT = 0
              Release Vars Array_Temp
              DynArray Array_Temp[]
          
              For i From 1 To DynArraySize(Array_Lista1)  
                If SubStr(Array_Lista1[i],1,6) <> PARAM
                   Then CONT = CONT + 1
                        Array_Temp[CONT] = Array_Lista1[i]
                   Else CONT_AUX = DynArraySize(Array_Lista2) + 1
                        Array_Lista2[CONT_AUX] = Array_Lista1[i]        
                EndIf   
              EndFor
               
              Release Vars Array_Lista1
              DynArray Array_Lista1[]
              For i From 1 To DynArraySize(Array_Temp)  
                Array_Lista1[i] = Array_Temp[i] 
              EndFor 
            Case Campo="TG_TABELA2" And EXCLUSAO :
              CONT = 0
              Release Vars Array_Temp
              DynArray Array_Temp[]
           
              For i From 1 To DynArraySize(Array_Lista2)  
                If SubStr(Array_Lista2[i],1,6) <> PARAM
                   Then CONT = CONT + 1
                        Array_Temp[CONT] = Array_Lista2[i]
                   Else CONT_AUX = DynArraySize(Array_Lista1) + 1
                        Array_Lista1[CONT_AUX] = Array_Lista2[i]        
                EndIf   
              EndFor
               
              Release Vars Array_Lista2
              DynArray Array_Lista2[]
              For i From 1 To DynArraySize(Array_Temp)  
                Array_Lista2[i] = Array_Temp[i] 
              EndFor
       EndSwitch   
EndSwitch

EndProc ;Carrega_Array() 

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
Proc Inclusao_Producao()

ADICAO=False

Switch
  Case Campo="TG_TABELA1"     : IND=NumVal(ControlValue("TG_TABELA1"))
                                
                                If DynArraySize(Array_Lista1)=0
                                   Then Return
                                EndIf
                                
                                TabProdCorte = AlinhM(SubStr(Array_Lista1[IND],1,6),6)
                                   
                                ADICAO=True
                                Exclusao_Producao()
                            
  Case Campo="TG_TABELA2" And IsAssigned(EXCLUSAO) And EXCLUSAO = True: Carrega_Array(TabProdCorte)
EndSwitch

EndProc ;Inclusao_Producao()

;*******************************************************************************
;* ExclusÆo Tabela de Pre‡o                                                    *
;*******************************************************************************
Proc Exclusao_Producao()                   
                                    
EXCLUSAO=False                          
                     
Switch                                    
  Case Campo="TG_TABELA1" And
       ADICAO=True            : Carrega_Array(TabProdCorte)

  Case Campo="TG_TABELA2"     : IND = NumVal(ControlValue("TG_TABELA2"))

                                If DynArraySize(Array_Lista2)=0
                                   Then Return
                                EndIf
                                
                                TabProdCorte = AlinhM(SubStr(Array_Lista2[IND],1,6),6)

                                EXCLUSAO=True
                                Inclusao_Producao()
EndSwitch             

EndProc ;Exclusao_Producao()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_ProdCorte(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
MSG_CAMPO=""                              
TECLA=""
                 
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf

If Disparo="CLOSE"
   Then Switch
          Case Campo="YES": AcceptDialog
          Case Campo="NO" : CancelDialog
        EndSwitch
        Return Temp
EndIf       
             
If Disparo="UPDATE"
   Then Switch
          Case Campo="TG_ADICIONA": Temp=True 
                                    Campo="TG_TABELA1"
                                    Inclusao_Producao()
          Case Campo="TG_REMOVE"  : Temp=True
                                    Campo="TG_TABELA2"
                                    Exclusao_Producao()
          Case Campo="YES"        : AcceptDialog
          Case Campo="NO"         : CancelDialog
          OtherWise               : Return Temp
        EndSwitch
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9  : Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =-147: 
          Switch
            Case Campo="TG_TABELA1"       : INDICE=ControlValue("TG_TABELA1")
                                            If IsAssigned(Array_Lista1) And DynArraySize(Array_Lista1)<>0 
                                               Then ConfGeral("Confirma a exclus„o desta tabela ?//"+Array_Lista1[INDICE])
                                                    If OK="S"
                                                       Then Exclusao_Producao()
                                                    EndIF
                                            EndIf   
         EndSwitch    
         
         
     Case Evento["KeyCode"] = -75: Exclusao_Producao()    
     Case Evento["KeyCode"] = -77: Inclusao_Producao()        
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_TABELA1"       : Campo="NO"
            Case Campo="TG_TABELA2"       : Campo="TG_TABELA1"
            Case Campo="YES" Or Campo="NO": Campo="TG_TABELA1"   
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13: 
          Temp=False
          If Checa_TAG()
             Then Switch 
                    Case Campo="TG_TABELA1"    : Campo="TG_TABELA2"
                    Case Campo="TG_TABELA2"    : Campo="YES"
                    Case Campo="YES"           : AcceptDialog
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="":
     MSG_CAMPO=""
  Case Campo="TG_TABELA1"    : 
     MSG_CAMPO=" >> Adiciona Podu‡„o"
     TECLA=TECLA+" >=Adicionar"
  Case Campo="TG_TABELA2"    : 
     MSG_CAMPO=" << Remove Podu‡„o"  
     TECLA=TECLA+" <=Remover"
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_ProdCorte() 

;*******************************************************************************
;* Rotina Monta Produ‡äes do Corte                                             *
;*******************************************************************************
Proc Monta_Producao_Corte()
Private TabAnt,Temp

TabAnt = Table()

Moveto "Rfacc"
UnLockRecord
Do_It!

Temp = "VALIDO"

Carrega_Array("")

While True
  ShowDialog "Sele‡„o da Produ‡Æo do Corte ["+[Rfacc->Numero_Corte]+"] " Proc "SD_ProdCorte"
  Trigger "OPEN","ARRIVE","UPDATE","CLOSE","SELECT"
  Key "F1","ENTER","ESC",
     -75, -77, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140, -147  
     @ 00,10   Height 12 Width 65
   
    @ 00,01 ?? " Produ‡äes do Corte" 
    @ 00,36 ?? " Rela‡„o a Carregar"    
   
    PickDynArray @01,02 Height 6 width 24 ;58
    Columns 1
     Array_Lista1
      Tag "TG_TABELA1"
       To ArrayElement

    PickDynArray @01,37 Height 6 width 24 ;58
    Columns 1
     Array_Lista2
      Tag "TG_TABELA2"
       To ArrayElement

    Pushbutton @ 03,27 width 9 "~>~>"   Tag "TG_ADICIONA"  To BottonValue
    Pushbutton @ 04,27 width 9 "~<~<"   Tag "TG_REMOVE"    To BottonValue

    Pushbutton @ 08,18 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 08,32 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
    
  EndDialog
  If Not RetVal 
     Then Temp = ""
          QuitLoop 
  EndIf
  
  If DynArraySize(Array_Lista2) = 0
     Then Mensagem("Nenhuma produ‡„o adicionada !")
          Loop
  EndIf
  Carrega_Array("PRODUCOES_ADICIONADAS")
  QuitLoop
EndWhile

Moveto "RfacRI"   ClearImage
Moveto "RfacriR"  ClearImage

View NoWindow "Rfacri"
View NoWindow "Rfacrir"

Moveto "Rfacc"
CoeditKey
FormKey
ResyncKey

Moveto TabAnt

Return Temp

EndProc ;Monta_Producao_Corte()

;*******************************************************************************
;* Rotina Observacoes                                                          *
;*******************************************************************************
Proc PegaItens_Programacao()
Private AUX,TAB_ANT,FIE_ANT

If Not IsAssigned(AUX_PEGAITENS) Then AUX_PEGAITENS = "PROG" EndIf

TAB_ANT=Table()
FIE_ANT=Field()
If Not Verifica_Duplicidade("Corte")
   Then Moveto TAB_ANT
        Moveto Field FIE_ANT
        If [Codigo do Item]="" Then Del EndIf   
        Return
EndIf                  

NCORT=[RfacC->Numero_Corte]

Moveto "RFACRIR"
While RecordStatus("New")=False
  Del
EndWhile

If AUX_PEGAITENS = "PROD" 
   Then Programacao_Producao()
   Else Programacao_Corte()
EndIf

Moveto "RfacriR"
EndProc

;*******************************************************************************
;* Rotina da Programacao do Corte                                              *
;*******************************************************************************
Proc Programacao_Corte()
Private Cont,Cont_Corte  
Cont_Corte = 0  
Cont = 0
Moveto "CFACRI"
Moveto [Numero_Corte]
Locate NCORT
If Retval
   Then While [Numero_Corte]=NCORT
          Cont_Corte = Cont_Corte + 1
          Barra(NRecords("CFACRI"),Cont_Corte)
          Aguarde("Aguarde, adicionando o corte "+BARRA_STRING)
    
          CopyToArray REGISTRO_F1
          REGISTRO_F1["Codigo do Item"]=MudaCodigoPara(REGISTRO_F1["Codigo do Item"],"P")
          ACHOU_ITEM = False
          
          Moveto "RFACRIR"
          If IsFormView()
             Then Moveto [Codigo do Item]
                  Locate REGISTRO_F1["Codigo do Item"] 
                  If RetVal
                     Then ACHOU_ITEM = True
                  EndIf
             Else Moveto [Numero_Producao]
                  Locate NPROD
                  If RetVal
                     Then While [Numero_Producao] = Array_Lista3[it] 
                            If [Codigo do Item]        = REGISTRO_F1["Codigo do Item"] And
                               [Numero_Producao_Corte] = NPROD
                               Then ACHOU_ITEM = True
                                    QuitLoop
                            EndIf   
                            Skip
                            If Eot() Then QuitLoop EndIf
                          EndWhile
                  EndIf
          EndIf
          
          If ACHOU_ITEM
             Then [Quantidade Programada]=[Quantidade Programada]+REGISTRO_F1["Quantidade Programada"  ]
                  [Preco Total          ]=[Quantidade Programada]*[Custo Unitario]
                  If [Preco Total]=0 Then [Preco Total]=BlankNum() EndIf  
             Else Cont = Cont + 1
                  End Down
                  [Numero_Producao        ]=NPROD
                  [Sequencia do Lancamento]=Cont
                  [Codigo do Item         ]=REGISTRO_F1["Codigo do Item"         ]
                  [Tipo do Item           ]=REGISTRO_F1["Tipo do Item"           ]
                  [Referencia             ]=REGISTRO_F1["Referencia"             ]
                  [Descricao do Item      ]=REGISTRO_F1["Descricao do Item"      ]
                  [Quantidade Produzida   ]=REGISTRO_F1["Quantidade Produzida"   ]
                  [Quantidade Programada  ]=REGISTRO_F1["Quantidade Programada"  ]
                  [Unidade Fiscal         ]=REGISTRO_F1["Unidade Fiscal"        ]
                  [Preco Unitario         ]=BlankNum()
                  [Custo Unitario         ]=BlankNum()
                  [Preco Total            ]=BlankNum()
                  [Preco Unitario Tabela  ]=BlankNum()
                  [Codigo da Tabela       ]=""                   
                  
                  Pega_Preco("Novo")
          EndIf
          UnLockRecord
          SaveTables
                    
          Moveto "CFACRI"
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
   Else Mensagem("Item(ns) da Programa‡„o do Corte n„o localizado(s) !")
EndIf

;---- Processo Parcial - Programa‡Æo/Corte -------------------------------------
FAZ_ROTINA_PARCIAL = False
If IsAssigned(DUPLICIDADE_PROG)
   Then If DynArraySize(DUPLICIDADE_PROG) > 0
           Then FAZ_ROTINA_PARCIAL = True
        EndIf
EndIf   

While FAZ_ROTINA_PARCIAL
  PROD_ATUAL = [Rfacc->Numero_Producao]    
  GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD_ATUAL To REG_PRODUCAO
  If RetVal
     Then CONT_DUPLICIDADE  = 0
          For i From 1 To DynArraySize(DUPLICIDADE_PROG)
            PROD = SubStr(DUPLICIDADE_PROG[i],1,6) 
            If Search(PROD,REG_PRODUCAO["Controle_Programacao"]) = 0
               Then CONT_DUPLICIDADE = CONT_DUPLICIDADE + 1
            EndIf     
          Endfor
                     
          If CONT_DUPLICIDADE = 0 And DynArraySize(DUPLICIDADE_PROG)>0
             Then Mensagem("As programa‡”es/cortes existentes j  foram inclu¡das //neste processo anteriormente !")
                  FAZ_ROTINA_PARCIAL = False
                  QuitLoop
          EndIf   
     Else FAZ_ROTINA_PARCIAL = False
          QuitLoop                
  EndIf
  
  For ai From 1 To DynArraySize(DUPLICIDADE_PROG)
    PROD = SubStr(DUPLICIDADE_PROG[ai],1,6)
    DATA = DateVal(SubStr(DUPLICIDADE_PROG[ai],7,2)+"."+SubStr(DUPLICIDADE_PROG[ai],10,2)+"."+SubStr(DUPLICIDADE_PROG[ai],13,4))
     
    GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD To REG_PRODUCAO
    If Not RetVal
       Then UnLockRecord
            Moveto "Rfacc"
            Loop
       Else ;---- NÆo ir  permitir lan‡ar mais de uma vez a Programa‡Æo/Corte --
            If Search(PROD,REG_PRODUCAO["Controle_Programacao"]) > 0
               Then UnLockRecord
                    Moveto "Rfacc"
                    Loop               
            EndIf  
    EndIf  
    
    CONT_ITEM = 0
    DynArray ITEM[]
    
    CONT_AUX = "0"
    GetRecord "Rfacrir" PROD To REG_RFACRIR
    If Retval
       Then CONT_AUX = "1"
       Else GetRecord "Rfacri" PROD To REG_RFACRI
            If RetVal
               Then CONT_AUX = "2"
            EndIf 
   EndIf  
   
   If CONT_AUX = "0"
      Then Moveto "Rfacc"
           Mensagem("N„o foi localizado os itens da producao "+PROD+" !")
           Loop
   EndIf
   
   Moveto "Rfacc"
   FormKey
   Switch
     Case CONT_AUX="1" : Moveto "Rfacrir"
                         Moveto [Numero_Producao]
                         Locate PROD
     Case CONT_AUX="2" : Moveto "Rfacri"
                         Moveto [Numero_Producao]
                         Locate PROD
   EndSwitch    
    
   While PROD = [Numero_Producao]
     If [Quantidade Produzida] > 0
        Then CONT_ITEM = CONT_ITEM + 1
             ITEM[CONT_ITEM] = Format("W6",[Numero_Producao])+Format("W10",[Codigo do Item])+Format("W8",[Referencia])+Format("W12",[Quantidade Produzida])
     EndIf
     Skip
     If Eot() Then QuitLoop EndIf  
   EndWhile
   Moveto "Rfacc"
   FormKey    
   ResyncKey
   Moveto "Rfacrir"
   
   For aii From 1 To DynArraySize(ITEM)      
      ITEM_PRD = SubStr(ITEM[aii],1,6)
      ITEM_COD = SubStr(ITEM[aii],7,10)
      ITEM_REF = Rtrim(SubStr(ITEM[aii],17,8))
      ITEM_QTD = Rtrim(Ltrim(SubStr(ITEM[aii],25,12)))
      
      If Type(NumVal(ITEM_QTD)) <> "N" Or ITEM_QTD = "" Or NumVal(ITEM_QTD) <= 0 Or NumVal(ITEM_QTD)=BlankNum()
         Then Loop
      EndIf   
      
      Moveto "Rfacrir"
      Moveto [Codigo do Item] 
      Locate Pattern ".."+SubStr(ITEM_COD,3,8)
      If RetVal 
         Then [Quantidade Programada] = [Quantidade Programada] - NumVal(ITEM_QTD)
              If [Quantidade Programada] <=0 Then Del EndIf      EndIf
    EndFor
    UnLockRecord
  Endfor
  
  Moveto "Rfacrir"
  If [Codigo do Item]=""
     Then Del
  EndIf
  QuitLoop
EndWhile   

If RecordStatus("New")
   Then MSG =     Completa("CORTE: "+[Rfacc->Numero_Corte],61," ")+"////"
        MSG = MSG+Completa("J  teve o seu saldo finalizado em lan‡amento(s) anterior(es)!",61," ")
        Mensagem(MSG)
        Return False
EndIf   

EndProc ;Programacao_Corte()          

;*******************************************************************************
;* Rotina da Producao do Corte                                                 *
;*******************************************************************************
Proc Programacao_Producao()    
Private cont,i,PROD_N,CONT_PROD_N,PROG_MSG,FAZ_PROD
If Not IsAssigned(SYS_CLIENTE_CONFEC) Then SYS_CLIENTE_CONFEC = "" EndIf

If DynArraySize(Array_Lista2) = 0
   Then Mensagem("Item(ns) da Produ‡„o do Corte n„o localizado(s) !")
        Return
EndIf

FAZ_PROD = ""
If DynArraySize(Array_Producoes) > 0  
   Then ;---- Producoes ----------------------------- 
        For i From 1 To DynArraySize(Array_Producoes)
          If i = 1
             Then PROD_MSG = Completa("- "+ Array_Producoes[i],38," ")
             Else PROD_MSG = PROD_MSG + "//" + Completa(Spaces(23) + "- " + Array_Producoes[i],60," ")
          EndIf    
        EndFor
        
        ;---- Programacoes --------------------------
        For i From 1 To DynArraySize(Array_Lista3)
          If i = 1
             Then PROG_MSG = Completa("- " + Array_Lista3[i],22," ")
             Else PROG_MSG = PROG_MSG + "//" + Completa(Spaces(36) + "- " + Array_Lista3[i],58," ")
          EndIf    
        EndFor
        ConfGeral("As produ‡”es do corte: "+
                   PROD_MSG+"////"+
                  "J  foram adicionadas nas produ‡äes: "+
                   PROG_MSG+"////"+
                  "Deseja adicionar o saldo restante nesta produ‡„o caso exista?")
        If Ok="N"
           Then Return
           Else FAZ_PROD = "REPETE_PRODUCOES"
        EndIf
EndIf   

Cont = 0
Moveto "PCFACRI"
For i From 1 To DynArraySize(Array_Lista2)
  Barra(DynArraySize(Array_Lista2),i)
  Aguarde("Aguarde, adicionando a produ‡Æo "+BARRA_STRING)
  
  If FAZ_PROD = "NAO_REPETE_PRODUCOES" And DynArraySize(Array_Lista3) > 0
     Then If Search(SubStr(Array_Lista2[i],1,6),PROD_MSG) > 0
             Then Loop
          EndIf
  EndIf
  Home
  Moveto [Numero_Producao_Corte]
  Locate SubStr(Array_Lista2[i],1,6) 
  If Retval
     Then While [Numero_Producao_Corte] = SubStr(Array_Lista2[i],1,6) 
            ACHOU_ITEM = False
            
            CopyToArray REGISTRO_F1
            REGISTRO_F1["Codigo do Item"] = MudaCodigoPara(REGISTRO_F1["Codigo do Item"],"P")
                         
            If REGISTRO_F1["Quantidade Produzida" ] = Blanknum() 
               Then ACHOU_ITEM = True
            EndIf             
              
            If Not ACHOU_ITEM
               Then ;O item ser  adicionado em sequˆncia, se ocorrer apari‡Æo de mesmo item, 
                    ;serÆo posicionados individualmente em suas sequencias, nÆo serÆo somados
                    ;devido ao controle impreciso [Numero_Producao_Corte]
                    Moveto "RFACRIR"
                    Cont = Cont + 1   
                    End Down
                    [Numero_Producao        ]=NPROD
                    [Sequencia do Lancamento]=Cont
                    [Codigo do Item         ]=REGISTRO_F1["Codigo do Item"       ]
                    [Tipo do Item           ]=REGISTRO_F1["Tipo do Item"         ]
                    [Referencia             ]=REGISTRO_F1["Referencia"           ]
                    [Descricao do Item      ]=REGISTRO_F1["Descricao do Item"    ]
                    [Quantidade Programada  ]=REGISTRO_F1["Quantidade Produzida" ]   
                    [Unidade Fiscal         ]=REGISTRO_F1["Unidade Fiscal"       ]
                    [Preco Unitario         ]=REGISTRO_F1["Preco Unitario"       ]
                    [Custo Unitario         ]=REGISTRO_F1["Custo Unitario"       ]
                    [Preco Total            ]=REGISTRO_F1["Preco Total"          ]
                    [Preco Unitario Tabela  ]=REGISTRO_F1["Preco Unitario Tabela"]
                    [Codigo da Tabela       ]=REGISTRO_F1["Codigo da Tabela"     ]
                    [Numero_Corte           ]=[RFACC->Numero_Corte               ]
                    [Numero_Producao_Corte  ]=SubStr(Array_Lista2[i],1,6)
                    
                    Pega_Preco("Novo")
                    Vrtotal = ([Quantidade Programada]* PrUnit)
                    [Preco Total          ] = [Preco Total] + Vrtotal
                    UnLockRecord
                    SaveTables
            EndIf    
            Moveto "PCFACRI"
            Skip
            If EOT() Then QuitLoop EndIf 
          EndWhile
     Else If Not IsAssigned(PROD_N)
             Then PROD_N = SubStr(Array_Lista2[i],1,6)
                  CONT_PROD_N = 6
             Else If Len(CONT_PROD_N) > 62
                     Then PROD_N = PROD_N + "    //" + SubStr(Array_Lista2[i],1,6) 
                          CONT_PROD_N = 6 
                     Else PROD_N = PROD_N + ", " + SubStr(Array_Lista2[i],1,6) 
                          CONT_PROD_N = CONT_PROD_N + 8
                  EndIf    
          EndIf
  EndIf
EndFor         

Moveto "Rfacrir"
If RecordStatus("New") And DynArraySize(Array_Lista2) > 0
   Then If DynArraySize(Array_Lista2) = 1
           Then TEMP_MSG = "A  seguinte  produ‡„o  de  corte j  foi adicionada em outra(s)//"+
                           "produ‡Æo(”es), onde o saldo do corte foi finalizado.       //"  
           Else TEMP_MSG = "As seguintes produ‡”es de corte j  foram adicionadas em outras//"+
                           "produ‡äes, onde os saldos dos cortes foram finalizados.    //"  
        EndIf
        For it From 1 To DynArraySize(Array_Lista2)            
          TEMP_MSG = TEMP_MSG + Completa("- "+SubStr(Array_Lista2[it],1,6),62," ")
          If it <> DynArraySize(Array_Lista2)
             Then TEMP_MSG = TEMP_MSG + "//"
          EndIf   
        EndFor
        MENSAGEM(TEMP_MSG)
        Release Vars TEMP_MSG
        Return
EndIf

If IsAssigned(PROD_N)
   Then Mensagem("As produ‡”es a seguir n„o foram localizadas na PRODUCAO DO CORTE !//"+PROD_N)
        Return 
Endif   

;---- Processo Parcial - Produ‡Æo/Corte ----------------------------------------
FAZ_ROTINA_PARCIAL = False
If IsAssigned(DUPLICIDADE_PROG)
   Then If DynArraySize(DUPLICIDADE_PROG) > 0
           Then FAZ_ROTINA_PARCIAL = True
        EndIf
EndIf   

While FAZ_ROTINA_PARCIAL
  PROD_ATUAL = [Rfacc->Numero_Producao]    
  GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD_ATUAL To REG_PRODUCAO
  If RetVal
     Then CONT_DUPLICIDADE  = 0
          For i From 1 To DynArraySize(DUPLICIDADE_PROG)
            PROD = SubStr(DUPLICIDADE_PROG[i],1,6) 
            If Search(PROD,REG_PRODUCAO["Controle_Programacao"]) = 0
               Then CONT_DUPLICIDADE = CONT_DUPLICIDADE + 1
            EndIf     
          Endfor
                     
          If CONT_DUPLICIDADE = 0 And DynArraySize(DUPLICIDADE_PROG)>0
             Then Mensagem("As programa‡”es/cortes existentes j  foram inclu¡das //neste processo anteriormente !")
                  FAZ_ROTINA_PARCIAL = False
                  QuitLoop
          EndIf   
     Else FAZ_ROTINA_PARCIAL = False
          QuitLoop                
  EndIf
  
  CONT_ITEM = 0
  DynArray ITEM[]
  For ai From 1 To DynArraySize(DUPLICIDADE_PROG)
    Barra(DynArraySize(DUPLICIDADE_PROG),ai)
    Aguarde("Aguarde, verificando as produ‡äes 1/2 "+BARRA_STRING)
        
    PROD = SubStr(DUPLICIDADE_PROG[ai],1,6)
    DATA = DateVal(SubStr(DUPLICIDADE_PROG[ai],7,2)+"."+SubStr(DUPLICIDADE_PROG[ai],10,2)+"."+SubStr(DUPLICIDADE_PROG[ai],13,4))
    
    GetRecord "\\Sistemas\\Faccao\\Rfacc" PROD To REG_PRODUCAO
    If Not RetVal
       Then UnLockRecord
            Moveto "Rfacc"
            Loop
       Else ;---- NÆo ir  permitir lan‡ar mais de uma vez a Programa‡Æo/Corte --
            If Search(PROD,REG_PRODUCAO["Controle_Programacao"]) > 0
               Then UnLockRecord
                    Moveto "Rfacc"
                    Loop               
            EndIf  
    EndIf
    
    CONT_AUX = "0"
    GetRecord "Rfacrir" PROD To REG_RFACRIR
    If RetVal
       Then CONT_AUX = "1"
       Else GetRecord "Rfacri" PROD To REG_RFACRI
            If RetVal Then CONT_AUX = "2" EndIf   
    EndIf
    
    If CONT_AUX <> "0"
      Then Moveto "RfaCC"
           FormKey
           Switch
             Case CONT_AUX = "1" : Moveto "Rfacrir" 
             Case CONT_AUX = "2" : Moveto "Rfacri"   
           EndSwitch
           Moveto [Numero_Producao]
           Locate PROD
           If RetVal
              Then While PROD = [Numero_Producao]
                      If [Quantidade Produzida] > 0
                         Then NAO_FAZ=False 
                              For uy From 1 To DynArraySize(ITEM)
                                ITEM_COD = SubStr(ITEM[uy],1,10)
                                ITEM_QTD = Rtrim(Ltrim(SubStr(ITEM[uy],11,12)))
                                ITEM_NUM_PROD = Rtrim(Ltrim(SubStr(ITEM[uy],23,6)))
                                If Type(NumVal(ITEM_QTD)) <> "N" Or ITEM_QTD = "" Or NumVal(ITEM_QTD) <= 0 Or NumVal(ITEM_QTD)=BlankNum()
                                   Then Loop
                                EndIf
                                If ITEM_COD = [Codigo do Item] And ITEM_NUM_PROD=[Numero_Producao_Corte]
                                   Then NAO_FAZ=True
                                        ITEM[uy] = Format("W10",[Codigo do Item])+Format("W12",NumVal(ITEM_QTD)+[Quantidade Produzida])+Format("W6",[Numero_Producao_Corte])
                                EndIf   
                              EndFor    
                              If Not NAO_FAZ
                                 Then CONT_ITEM = CONT_ITEM + 1
                                      ITEM[CONT_ITEM] = Format("W10",[Codigo do Item])+Format("W12",[Quantidade Produzida])+Format("W6",[Numero_Producao_Corte])
                              EndIf
                      EndIf
                      Skip
                      If Eot() Then QuitLoop EndIf  
                   EndWhile
           EndIf
           Moveto "Rfacc"
           FormKey
           ResyncKey
           Switch
             Case CONT_AUX = "1" : Moveto "Rfacrir" 
             Case CONT_AUX = "2" : Moveto "Rfacri"   
           EndSwitch
    EndIf
  Endfor
      
  For aii From 1 To DynArraySize(ITEM)      
    Barra(DynArraySize(ITEM),aii)
    Aguarde("Aguarde, verificando as produ‡äes 2/2 "+BARRA_STRING)
    
    ITEM_COD = SubStr(ITEM[aii],1,10)
    ITEM_QTD = Rtrim(Ltrim(SubStr(ITEM[aii],11,12)))
    ITEM_NUM_PROD = Rtrim(Ltrim(SubStr(ITEM[aii],23,6)))
    
    ;ITEM_PRD = SubStr(ITEM[aii],1,6)
    ;ITEM_COD = SubStr(ITEM[aii],7,10)
    ;ITEM_REF = Rtrim(SubStr(ITEM[aii],17,8))
    ;ITEM_QTD = Rtrim(Ltrim(SubStr(ITEM[aii],25,12)))
    
    If Type(NumVal(ITEM_QTD)) <> "N" Or ITEM_QTD = "" Or NumVal(ITEM_QTD) <= 0 Or NumVal(ITEM_QTD)=BlankNum()
       Then Loop
    EndIf
    
    Moveto "Rfacrir"
    Moveto [Codigo do Item] 
    Locate Pattern ".."+SubStr(ITEM_COD,3,8)
    If RetVal 
       Then While True
              If ITEM_NUM_PROD=[Numero_Producao_Corte]
                 Then If [Quantidade Programada] - NumVal(ITEM_QTD) >=0
                         Then [Quantidade Programada] = [Quantidade Programada] - NumVal(ITEM_QTD)
                              ITEM_QTD=0
                         Else ITEM_QTD = NumVal(ITEM_QTD) - [Quantidade Programada]  
                              [Quantidade Programada] =  0
                      EndIf   
              EndIf
              If ITEM_QTD=0 Then QuitLoop EndIf
              Skip
              If Eot() Then QuitLoop EndIf
              Locate Next Pattern ".."+SubStr(ITEM_COD,3,8)
              If Not RetVal Then QuitLoop EndIf
            EndWhile  
    EndIf
    CONT=0
    DynArray EXCLUSAO[]
    Scan
      If [Quantidade Programada]<=0
         Then CONt = CONT + 1
              EXCLUSAO[CONT] = [Sequencia do Lancamento]
       EndIf 
    EndScan
    If DynArraySize(EXCLUSAO) > 0
       Then For lk From 1 To DynArraySize(EXCLUSAO)
              Moveto [Sequencia do Lancamento]
              Locate EXCLUSAO[lk]
              If RetVal
                 Then Del
              EndIf
            EndFor
    EndIf    
    UnLockRecord
  EndFor
  
  Moveto "Rfacrir"
  If [Codigo do Item]=""
     Then Del
  EndIf   
  QuitLoop
EndWhile   

If RecordStatus("New")
   Then MSG =     Completa("   CORTE: "+[Rfacc->Numero_Corte],61," ")+"////"
        For ai From 1 To DynArraySize(Array_Lista2)
           If ai=1
              Then MSG = MSG+Completa("PRODUCAO: "+SubStr(Array_Lista2[ai],1,6),61," ")+"//"
              Else MSG = MSG+Completa("          "+SubStr(Array_Lista2[ai],1,6),61," ")+"//"
           EndIf     
        EndFor     
        MSG = MSG + "//"
        MSG = MSG+Completa("J  teve o seu saldo finalizado em lan‡amento(s) anterior(es)!",61," ")
        Mensagem(MSG)
        Return False
EndIf   

;---- Processo para Re-Organizar os itens em sequencia -------------------------
;Do_It!
;Moveto "Rfacc"
;FormKey
      
;TAB_TEMP=Cria_Temp(PrivDir())
;{Create} TypeIn TAB_TEMP Enter {Borrow} TypeIn "\\Base\\Sistemas\\Faccao\\Rfacrir" Enter                         
;Moveto [Field Type]
;While True
;  Home
;  Locate Pattern "..*"
;  If ReTval  
;     Then BackSpace
;     Else QuitLoop
;  EndIF   
;EndWhile
;Do_it!

;View TAB_TEMP
;Moveto "Rfacc"
;CoeditKey
;Moveto "Rfacrir"
;Moveto [Numero_Producao]
;Locate [Rfacc->Numero_Producao]
;If RetVal
;   Then While [Numero_Producao]=[Rfacc->Numero_Producao]
;          CopyToArray REG_ITEM
;          Moveto TAB_TEMP
;          End Down
;          CopyFromArray REG_ITEM
;          Moveto "Rfacrir" 
;          Skip
;          If Eot() Then QuitLoop EndIf
;        EndWhile
;EndIf    

;Moveto "Rfacrir"
;Moveto [Numero_Producao]
;Locate [Rfacc->Numero_Producao]
;If RetVal
;   Then While [Numero_Producao]=[Rfacc->Numero_Producao]
;          Del
;        EndWhile
;EndIf

;Do_It!
;Moveto TAB_TEMP ClearImage
;Sort TAB_TEMP On "Codigo do Item","Numero_Producao_Corte"

;Moveto "Rfacc"
;CoeditKey
;Conta=0
;Moveto TAB_TEMP
;Scan
;  Conta = Conta + 1
;  CopyToArray REG_ITEM 
;  REG_ITEM["Sequencia do Lancamento"] = Conta 
;  Moveto "Rfacrir"
;  End Down
;  CopyFromArray REG_ITEM
;  Moveto TAB_TEMP
;EndScan
;Do_It!
;Moveto TAB_TEMP
;ClearImage
;Delete TAB_TEMP 

;Moveto "Rfacc"
;CoeditKey
;FormKey
;Moveto "Rfacrir"
;-------------------------------------------------------------------------------

Return True

EndProc ;Programacao_Producao()

;*******************************************************************************
;* Selecionar Registros                                                       *
;*******************************************************************************
Proc SelecionaFiltroRfacc()
ClearAll

If Not IsAssigned(SDFILTRO_ATIVO) Then SDFILTRO_ATIVO = False EndIf

If SDFILTRO_ATIVO
   Then If VSDGREFERENCIA<>"" Or VSDGFAMI<>"" Or VSDGMARCA<>"" Or VSDGGRP<>""
           Then {Ask} {\\Sistemas\\Estoque\\Itens}
                Moveto [Codigo do Item        ] TypeIn "_citem"
                Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
                Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
                Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
                Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
        EndIf 
        {Ask} {Rfacc} Check
        Moveto [Numero_Programacao      ] TypeIn "~VSDGNPROG.."
        Moveto [Numero_Corte            ] TypeIn "~VSDGCORTE.."
        Moveto [Codigo da Empresa       ] TypeIn "~VSDGEMPRESA.."
        Moveto [Data_Producao           ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        If VSDGOPDEST<>"TODOS" 
           Then Moveto [Destino_Producao]
                If VSDGOPDEST="INTERNO + FACCAO"
                   Then TypeIn "INTERNO Or FACCAO"
                   Else TypeIn "~VSDGOPDEST" 
                EndIf
        EndIf
        Moveto [Codigo                  ] TypeIn "~VSDGDESTINAT.."
        If VSDGREFERENCIA<>"" Or 
           VSDGFAMI<>""       Or
           VSDGMARCA<>""      Or  
           VSDGGRP<>""        Or 
           VSDGITEM<>""       Or
           VSDGNPRODCORTE<>""
           Then Moveto [Numero_Producao] TypeIn "_num"
               {Ask} {RfacRI}      
               Moveto [Numero_Producao] TypeIn "_num"
               If VSDGREFERENCIA<>"" Or VSDGFAMI<>"" Or VSDGMARCA<>"" Or VSDGGRP<>""
                  Then Moveto [Codigo do Item] TypeIn "_citem, ~VSDGITEM.."
                  Else Moveto [Codigo do Item] TypeIn "~VSDGITEM.."          
              EndIf
              If VSDGNPRODCORTE<>""
                 Then Moveto [Numero_Producao_Corte] TypeIn "~VSDGNPRODCORTE.."     
              EndIf
       EndIf
       Do_It!
       ClearAll
EndIf  

Release Vars REG_USUARIO
CriaTabelaControle()                     

Return True

EndPRoc ;SelecionaFiltroRfacc()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp      = True
TECLA     = ""
MSG_CAMPO = ""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
          If Campo="TG_OPDEST"
             Then Seleciona_Opcoes("Op‡”es de Desinat rio","7,7")
                  ;Seleciona_Opcoes("Op‡”es de Desinat rio","F1_Temp")
             Else Dialog_F1()     
          EndIf
     
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch                         
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_CORTE"          : Campo="TG_EMPRESA"
            Case Campo="TG_NPRODCORTE"     : Campo="TG_CORTE"
            Case Campo="TG_NPROG"          : Campo="TG_NPRODCORTE"
            Case Campo="TG_OPDEST"         : Campo="TG_NPROG"
            Case Campo="TG_DESTINAT"       : Campo="TG_OPDEST"                     
            Case Campo="TG_ITEM"           : Campo="TG_DESTINAT"       
            Case Campo="TG_REFERENCIA"     : Campo="TG_ITEM"        
            Case Campo="TG_MARCA"          : Campo="TG_REFERENCIA"   
            Case Campo="TG_FAMI"           : Campo="TG_MARCA"           
            Case Campo="TG_GRP"            : Campo="TG_FAMI"           
            Case Campo="TG_DTINI"          : Campo="TG_GRP"           
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"     
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch    
                    Case Campo="TG_EMPRESA"    : Campo="TG_CORTE"        
                    Case Campo="TG_CORTE"      : Campo="TG_NPRODCORTE"    
                    Case Campo="TG_NPRODCORTE" : Campo="TG_NPROG"
                    Case Campo="TG_NPROG"      : Campo="TG_OPDEST"
                    Case Campo="TG_OPDEST"     : Campo="TG_DESTINAT"
                         VSDGOPDEST=ControlValue("TG_OPDEST")
                         If IsBlank(VSDGOPDEST) Then VSDGOPDEST="TODOS" EndIf
                         If Not Checa_Opcoes("Op‡”es de Desinat rio",VSDGOPDEST) And VSDGOPDEST<>"TODOS"
                           Then Mensagem("Destino inv lido !")
                                Campo="TG_OPDEST"
                        EndIf
                    Case Campo="TG_DESTINAT"   : Campo="TG_ITEM"        
                    Case Campo="TG_ITEM"       : Campo="TG_REFERENCIA"     
                    Case Campo="TG_REFERENCIA" : Campo="TG_MARCA"       
                    Case Campo="TG_MARCA"      : Campo="TG_FAMI"         
                    Case Campo="TG_FAMI"       : Campo="TG_GRP"             
                    Case Campo="TG_GRP"        : Campo="TG_DTINI"          
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"         
                    Case Campo="TG_DTFIM"      : Campo="YES"            
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_OPDEST":
       MSG_CAMPO="Em Branco=Todos, [F1]Consultar tabela"     
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc FiltrarRfacc()
Private Result
LimpAguarde()                 
Do_It!                            
ClearAll                                                                  

Echo Normal
Echo Off

Coedit "P_DESTI"
Monta_Opcoes("Op‡”es de Desinat rio","INTERNO + FACCAO") 
Do_It!
ClearAll  

CONSULTAF1     =  False
SDFILTRO_ATIVO = True
While True
  Result=False
  
  ShowDialog "Crit‚rio para filtro ?" Proc "SD_Dialog" 
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 22 Width 80

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"                                                                        
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Corte"  For "TG_CORTE"
    Accept @ 03,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_CORTE" To VSDGCORTE                                           
    Accept @ 03,09 Width 25 "A25" Picture "!*!"        Tag "TG_NOMCORTE" To VSDGNOMCORTE                                     

    Label  @ 04,00 "Corte/Produ‡Æo"  For "TG_NPRODCORTE"                                                              
    Accept @ 05,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_NPRODCORTE" To VSDGNPRODCORTE
    Accept @ 05,09 Width 25 "A25" Picture "!*!"        Tag "TG_NOMNPRODCORTE" To VSDGNOMNPRODCORTE
    
    Label  @ 06,00 "Prog.Interno/Externo"  For "TG_NPROG"
    Accept @ 07,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_NPROG"    To VSDGNPROG
    Accept @ 07,09 Width 25 "A25" Picture "!*!"        Tag "TG_NOMNPROG" To VSDGNOMNPROG
    
    Label  @ 08,00 "Op‡”es Destinat rio" For "TG_OPDEST"
    Accept @ 09,01 Width 33 "A31"  Picture "!*!" Tag "TG_OPDEST" To VSDGOPDEST

    Label  @ 10,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 11,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 11,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST
        
    Label  @ 12,00 "Item"  For "TG_ITEM"
    Accept @ 13,01 Width 13 "A10" Picture "#*#" Tag "TG_ITEM"     To VSDGITEM
    Accept @ 13,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM

    Label  @ 12,12 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 13,13 Width 21 "A20" Picture "!*!" Tag "TG_REFERENCIA"     To VSDGREFERENCIA
    
    Label  @ 00,35 "Marca"  For "TG_MARCA"
    Accept @ 01,37 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 01,44 Width 25 "A22" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA    
    
    Label  @ 02,35 "Familia"  For "TG_FAMI"
    Accept @ 03,37 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 03,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI
    
    Label  @ 04,35 "Grupo"  For "TG_GRP"
    Accept @ 05,37 Width 06 "A3"  Picture "#*#" Tag "TG_GRP"    To VSDGGRP
    Accept @ 05,44 Width 25 "A30" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 06,35 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 07,38 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,51 "at‚" For "TG_DTFIM"
    Accept @ 07,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
 
    Pushbutton @ 18,24 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 18,38 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
    
    @ 19,52 ?? "[NÆo filtra mˆs fechado!]"

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If VSDGEMPRESA="0000"
     Then VSDGEMPRESA2=""
     Else VSDGEMPRESA2=VSDGEMPRESA
  EndIf
  
  AGUARDE("Filtrando dados")
  If Not SelecionaFiltroRfacc() Then Loop EndIf    
  Result=True
  
                             
  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result

EndProc ;FiltrarRfacc

;*******************************************************************************
;* Rotina Limpa Variaveis do Filtro                                            *
;*******************************************************************************
Proc LimpaFiltroRfacc()                                                                        
                                                                                       
VSDGEMPRESA       = ""         
VSDGNOMEMP        = ""
VSDGCORTE         = ""       
VSDGNOMCORTE      = ""
VSDGNPRODCORTE    = "" 
VSDGOPDEST        = ""
VSDGNOMNPRODCORTE = ""   
VSDGNPROG         = ""
VSDGNOMNPROG      = ""
VSDGSITUACAO      = ""
VSDGDESTINAT      = ""
VSDGNOMDEST       = ""
VSDGMARCA         = ""
VSDGNOMMARCA      = ""
VSDGFAMI          = ""
VSDGNOMFAMI       = ""
VSDGGRP           = ""
VSDGNOMGRP        = ""
VSDGITEM          = ""
VSDGNOMITEM       = ""
VSDGREFERENCIA    = ""   
VSDGDTINI         = BlankDate()
VSDGDTFIM         = BlankDate()
REGRAFILTRO       = ""

EndProc ;LimpaFiltroRfacc()     

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

If IsEmpty("P_Desti")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Moveto "Rfacc"
        Return False   
EndIf

If IsEmpty("P_Fac")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Result=False
EndIf
        
GetRecord "P_Fac" [Rfacc-> Codigo da Empresa] To REG_PFAC
If Not RetVal 
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Result=False
   Else PARAM_EMPRESA         = REG_PFAC["Codigo_Empresa"           ]
        PARAM_EXPLODE_MP_PFAC = REG_PFAC["Explosao_MatPrim_ProdFac" ]
        PARAM_COR_TECIDO      = REG_PFAC["Cor_Tecido"               ]
        PARAM_RELATORIO       = REG_PFAC["Script_Impressao_ProdFac" ]
        PARAM_RELATSALDO      = REG_PFAC["Script_Impressao_SaldFac" ]
        PARAM_ATUA_CAPG       = REG_PFAC["Atualiza_Contas_Pagar"    ]
        PARAM_CONTA_CAIXA     = REG_PFAC["Codigo_Conta_Caixa"       ]
        Result=True
EndIf           

PARAM_RETORNO_DESTINO=""
If [Rfacc->Destino_Producao]<>""
   Then GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
        If RetVal
           Then PARAM_RETORNO_DESTINO = REG_PDESTI["Retorno_Destino"]
        EndIf
EndIf       
       
If Not PRODUCAO2 
   Then GetRecord "P_DESTI" [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao] To REG_PDESTI
        If RetVal
           Then GetRecord "P_FacD" [Rfacc->Destino_Producao] To REG_PFACD 
                If RetVal 
                   Then SG = REG_PFACD["Sistema Gerador"]
                   Else SG = "" 
                EndIf
                Cont_Dest = 0
                DynArray Param_Destino[]
               
                Param_Destino[1]=Format("W1,AL",REG_PDESTI["Baixa Estoque"])+
                                 Format("W12",REG_PDESTI["Destino"])+
                                 Format("W12",REG_PDESTI["Codigo do Requisitante"])+
                                 Format("W2",SG)
               
                ;Qual o intuito deste racioc¡nio, visto que a tabela P_DESTI tem dois campos chave, logo, 
                ;ser  necess rio apenas uma verifica‡Æo, pois estou verificando pelos dois campos chave,
                ;e um GETRECORD ‚ o necess rio para este controle.
                
                ;While [Codigo da Empresa]=[Rfacc->Codigo da Empresa] And [Destino]=[Rfacc->Destino_Producao] 
                ;  Cont_Dest = Cont_Dest + 1
                ;  Param_Destino[Cont_Dest]=Format("W1,AL",[Baixa Estoque])+Format("W12",[Destino])+Format("W12",[Codigo do Requisitante])+Format("W2",SG)
                ;  Skip
                ;  If Eot() Then QuitLoop EndIf
                ;EndWhile 
           Else Release Vars Param_Destino
                Mensagem("Parametros de Destinos n„o Cadastrado para esta Empresa !")
                Result=False
        EndIf   
EndIf
Return Result

EndProc ;Carrega_Parametros()

;*******************************************************************************
;* Rotina p/ arir tabelas                                                      *
;*******************************************************************************
Proc Carrega_Tabelas()
ClearAll

View "P_FAC"
View "P_Destc"

View NoWindow "P_FacD"
View NoWindow "P_DESTI"

View "CFACRI"   ImageRights ReadOnly
View "PCFACC"   ImageRights ReadOnly
View "PCFACRI"  ImageRights ReadOnly
View "PFACRI"   ImageRights ReadOnly
View "PFACRIG"  ImageRights ReadOnly
View "RFACRI"
View "RFACRIR"
View "RFACRIG"
              
If Not MODOFILTRAR
   Then CoEdit "RFACC"
   Else If Not CoEditaTabelaControle() 
           Then Return False
        EndIf
EndIf

PickForm "2"
Moveto "CFACRI"   SetaCorRegistro("Invisivel")
Moveto "PCFACC"   SetaCorRegistro("Invisivel")
Moveto "PCFACRI"  SetaCorRegistro("Invisivel")
Moveto "PFACRI"   SetaCorRegistro("Invisivel")
Moveto "PFACRIG"  SetaCorRegistro("Invisivel")
Moveto "RFACRI"   SetaCorRegistro("Invisivel")

If PRODUCAO2     
   Then Moveto "RFACRIG"  SetaCorRegistro("Invisivel")
   Else Moveto "RFACRIR"  SetaCorRegistro("Invisivel") 
EndIf

Moveto TabelaControle
PickForm OPCAO_FORM   

Return True     

EndProc ;Carrega_Tabelas()

;*******************************************************************************
;* Rotina para ajustar dados na cabe‡a                                         *
;*******************************************************************************
Proc AjustaDadosCabeca()
Private TAB_ANT
 
TAB_ANT  = Table()

Moveto "RFACC"
If IsAssigned(TOTQTD) Then [Quantidade_Produzida]=TOTQTD EndIf
If IsAssigned(TOTVR)  Then [Valor Total         ]=TOTVR  EndIf
UnLockRecord

Moveto TAB_ANT 

EndProc ;AjustaDadosCabeca()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI_RFACRIG()
ITEM=[Sequencia do Lancamento]
INICIA_REGISTRO()
If PRODUCAO2  
   Then DIGITAI_PROD()
   Else DigitaI()
EndIf  
EndProc ;Controla_EdicaoI_RFACRIG()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI_RFACRIR()
ITEM=[Sequencia do Lancamento]
INICIA_REGISTRO()
DigitaI_RFACRIR()
  
EndProc ;Controla_EdicaoI()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
Private Verifica_Rotina,TAB_ANT

FINALIZADO=False
OPCHAVEI=""

While Not FINALIZADO
  Tecla_Funcao=BlankNum()
  DIGITA()
  SetaCorRegistro("Padrao")
  
  If CHAVEC=9 Then QuitLoop EndIf
  INICIO=False
  
  While Not IsBlank(Tecla_Funcao)
    Switch
      Case Tecla_Funcao="F6":
           If Imprime()
               Then FINALIZADO=True
                    Tecla_Funcao=""
           EndIf
           Switch
             Case Table()="Rfacc"    : Tecla_Funcao=""
             Case Table()="Rfacrig" Or
                  Table()="Rfacrir"  : Tecla_Funcao=-19
           EndSwitch
           
           
      Case Tecla_Funcao=-20 :
           Switch
             Case Table()="Rfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Rfacrir" : Tecla_Funcao=-19
                                      PegaItens_Programacao()
           EndSwitch
           
      Case Tecla_Funcao=-32:
           Switch
             Case Table()="Rfacc"   : Tecla_Funcao=""
             Case Table()="Rfacrir" : Tecla_Funcao=-19
                                      PegaItens_Programacao()
           EndSwitch
           
      Case Tecla_Funcao=-24:
           Tabela=Table()
           Moveto "RFACC"
           Edita_Memo("Observacoes",08,07,12,65,"Observa‡”es")
           Moveto Tabela
           Switch
             Case Table()="Rfacc"    : Tecla_Funcao=""
             Case Table()="Rfacrig" Or
                  Table()="Rfacrir"  : Tecla_Funcao=-19
           EndSwitch

      Case Tecla_Funcao=-25:
           Switch
             Case Table()="Rfacc"    : Tecla_Funcao=""
                                       Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Rfacrig" Or
                  Table()="Rfacrir"  : Tecla_Funcao=-19
                                       If Table()="Rfacrig"
                                          Then If Not PegaItens("Programacao")
                                                  Then Loop 
                                               EndIf
                                       EndIf   
           EndSwitch

      Case Tecla_Funcao=-18:
           Switch
             Case Table()="Rfacc"    : Tecla_Funcao=""
                                       Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Rfacrig" Or
                  Table()="Rfacrir"  : Tecla_Funcao=-19
                                       If PRODUCAO2 And Table()="Rfacrig"
                                          Then Editar("")
                                       EndIf 
           EndSwitch
           
      Case Tecla_Funcao=-34 :
           Switch
             Case Table()="Rfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")  
             Case Table()="Rfacrir"  Or  
                  Table()="Rfacrig"   : Tecla_Funcao=""
                                        If CHAVEC=0
                                           Then Gera_Requicicao()
                                        EndIf   
           EndSwitch           
           
      Case Tecla_Funcao=-19:
           While True
            If OPCHAVEI="CDB"
               Then If PRODUCAO2 
                       Then CDBarras_Producao()
                       Else CHAVECDBAR()
                    EndIf   
                    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_RFACRIG()
            EndIf
           EndWhile
           SetaCorRegistro("Padrao")
      OtherWise            : QuitLoop
    EndSwitch

  EndWhile
  
  If Finalizado
     Then If Not gerou_rfacri
             Then If PRODUCAO2 
                     Then Gera_Rfacri("Producao_Corte")
                     Else Gera_Rfacri("")
                  EndIf   
                  Verifica_Rotina = True
                  If PRODUCAO2
                     Then Verifica_Rotina = False
                  EndIF
                  If Verifica_Rotina
                     Then Switch
                            Case CHAVEC=1: Titulos("Incluir")
                            Case CHAVEC=0: Titulos("Alterar")
                          EndSwitch
                  EndIf
                  ;If PRODUCAO2 
                  ;   Then Requisicao("Semi_Acabado","")
                  ;EndIf   
                  Requisicao("Inclusao","")
                  Verifica_Situacao_Programacao()
                  
          EndIf
  EndIf
  Moveto "Rfacc"   
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
AtualizaRegistroControle("Numero_Producao",NPROD,True)
If OPCAO_FORM="F" Then PickForm "F" EndIf

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq"

SYS_VALOR()
LimpaFiltroRfacc()

MSG=""
COR_MENSAGEM="PRETO"

{Ask}{RFACC}
Moveto [Numero_Producao  ] Typein "Calc Count as Qtde"
Moveto [Data_Producao    ] Typein "<(today-547)"
do_it!
if not IsEmpty("Answer")
   then if [Qtde]>0 
           Then MSG=MSG+"  Existe(m) "+strval([Qtde])+" Produ‡Æo(äes) lan‡ada(s) !   // //"
                MSG=MSG+"Para melhor seguran‡a e desempenho do Sistema,//"
                MSG=MSG+"recomendamos que fa‡a o fechamento mensal  das//"
                MSG=MSG+"mais antigas. Recomendamos manter apenas 1 ano//"
                MSG=MSG+"em aberto!                                    // //"
                MSG=MSG+"Verificar com o supervisor fechamento mensal !"
        EndIF
endif   
ClearAll
if MSG<>"" then Mensagem(MSG) endif
Release Vars COR_MENSAGEM,MSG 

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   EndIf
If Not IsAssigned(SYS_NCONEXAO)        Then SYS_NCONEXAO      =""    EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""    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_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""      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(PRODUCAO2)           Then PRODUCAO2=False          EndIf

UTILIZA_CUSTO_UNITARIO     = True
DUPLICIDADE_PROG_CORTE     = True
PERMITIR_ITENS_MAIOR_PROGR = True

;----- Para verificar duplicidade de inclusÆo de Programa‡Æo/Corte -------------
;If PRODUCAO2 And SYS_CODIGO_CLIENTE="0232"        
;   Then DUPLICIDADE_PROG_CORTE     = False
;        PERMITIR_ITENS_MAIOR_PROGR = True
;EndIf
If SYS_CODIGO_CLIENTE="0232"        ;28.08.2021 
   Then PERMITIR_ITENS_MAIOR_PROGR = false
EndIf
                                 
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

OPCAO_FORM   = "F"
FORM_RELACAO = OPCAO_FORM

TabelaTemp           = ""
TabelaPrincipal      = "Rfacc"
TabelaControle       = TabelaPrincipal
MODOFILTRAR          = False
MODOFILTRARATIVO     = False
MODOFILTRAR_EMPRESA  = ""

If IsAssigned(MODOFILTRAR) And MODOFILTRAR
   Then SelecionaFiltroRfacc()
   Else TabelaControle    = TabelaPrincipal
        MODOFILTRARATIVO  = True
        MODOFILTRARINCLUI = False
        MODOFILTRATODOS   = True
EndIf

If Not PRODUCAO2
   Then Array Array_TM[12]
        grdant="***"
EndIf

;KeyEnable -24 ; usando tecla alt+o que pode ir ao prompt do DOS

If Carrega_Tabelas()
   Then While True
          CHAVE()
          ;--- FILTRO ----------------------------------------------------------
          If CHAVEC=99 
             Then If FiltrarRfacc()
                     Then MODOFILTRAR=True
                  EndIf
                  Carrega_Tabelas()
                  Loop
          EndIf                 
          If CHAVEC=98 
             Then AGUARDE("Visualizando todos registros")
                  MODOFILTRAR=False
                  Do_It!
                  
                  TabelaControle=TabelaPrincipal
                  Carrega_Tabelas()
                  Loop
          EndIf   
          ;---------------------------------------------------------------------                 
          If CHAVEC=9 Then QuitLoop EndIf
          If CHAVEC=1 Then Controle_Dia() EndIf
          If CHAVEC=5
             Then If OPCAO_FORM="F"
                     Then PickForm "F"
                     Else If PRODUCAO2
                             Then PickForm "3" 
                             Else PickForm "2"
                          EndIf 
                  EndIf
                  Loop
          EndIf
          Controla_EdicaoC()
        EndWhile
EndIf 
Do_It!
ClearAll
Release Vars All
Release Procs All