;** 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 PRODUCAO_CORTE
;Ultima Alteracao: 25/02/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes PRODUCAO_CORTE
;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/ Producao_Corte
;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 PRODUCAO_CORTE 
;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 PRODUCAO_CORTE
;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 -> Calc_Itens()
;Ultima Alteracao: 23/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro()

;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVE()
INICIO=True
campocorrente=""                  

While True
  Moveto "RFACC"
  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=""
  AguardaTeclasPadrao()

    Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F3":
             If PRODUCAO_CORTE
                Then SemFicha()
                Else If OPCAO_FORM="F"
                        Then OPCAO_FORM="1"
                        Else OPCAO_FORM="F"
                     EndIf
                     Del
                     CHAVE=5
                     Return
             EndIf        
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               INICIO=True
               campocorrente=""

               If OPCAO_FORM="F"
                  Then PAGINA("RFACC","MR")
                  Else PAGINA("RFACC","MT")
               EndIf
               CHAVE=0
               NPROD   =[Numero_Producao]
               If EDITAR="S"
                  Then If OPCAO_FORM="F"
                          Then If PRODUCAO_CORTE
                                  Then PickForm "3"
                                  Else PickForm "2"
                               EndIf    
                       EndIf
                       If Checa_Controle([Numero_Controle_Dia])
                          Then Controla_EdicaoC()
                          Else UnLockRecord
                       EndIf
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("") And Checa_Supervisor()
                                  Then If Carrega_Parametros()
                                          Then If OPCAO_FORM="F"
                                                  Then If PRODUCAO_CORTE
                                                          Then PickForm "3"
                                                          Else PickForm "2"
                                                       EndIF   
                                               EndIf
                                               EXCLUSAO("Cabeca")
                                               If OPCAO_FORM="F"
                                                  Then PickForm "F"
                                               EndIf
                                          Else UnLockRecord
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
            EndWhile
            QuitLoop
        Case Retval="ESC":
             CHAVE=9
             Del
             Return
        Case Retval="ENTER": 
             If IsBlank([])
                Then If IsBlank(NPROD)
                        Then NPROD="1"
                        Else NPROD=StrVal(NumVal(NPROD)+1)
                     EndIf
                Else NPROD=[]
             EndIf
             NPROD=AlinhM(NPROD,6)
             If RecordStatus("New")=False
                Then QuitLoop
                Else Del
             EndIf

             ;---- Gerando Tabela Temporaria -----------------------------------
             If Not PRODUCAO_CORTE
                Then Do_It!
                     FormKey
                     Moveto RFACRIG 
                     ClearImage
                     Moveto "Rfacrig"
                     ClearImage
                      
                     Copy "Rfacrig"  RFACRIG
                     
                     View RFACRIG
                     View "RFACRIG"
                     CoeditKey
                     Moveto "Rfacc"
                     FormKey
              EndIf       
             ;------------------------------------------------------------------
             
             If OPCAO_FORM="F"
                Then If PRODUCAO_CORTE
                        Then PickForm "3" 
                        Else PickForm "2"
                     EndIf   
             EndIf

             Moveto [Numero_Producao]
             Locate NPROD
             If Retval
                Then CHAVE=0
                Else CHAVE=1
                     End
                     PgDn 
                     Moveto [Numero_Producao]
                     [Numero_Producao]=NPROD
             EndIf

             If IsLockRecord()
                Then If OPCAO_FORM="F"
                        Then PickForm "F"
                     EndIf
                     If CHAVE=1
                        Then Del
                     EndIf
                     QuitLoop
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (Chave)

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

gerou_rfacri=False
If IsBlank(campocorrente)
   Then If Not PRODUCAO_CORTE
           Then Moveto "Rfacrir"
                Moveto [Numero_Producao]
                Locate [Rfacc->Numero_Producao]
                If RetVal
                   Then Moveto "Rfacc" 
                        Mensagem("Este lan‡amento foi utilizado com c¢digo de barras !//Rotina de Fac‡„o > 36. Produ‡„o II")
                        CHAVE=9        
                        Return
                EndIf   
                Moveto "Rfacc" 
           Else Moveto "Rfacrig"
                Moveto [Numero_Producao]
                Locate [Rfacc->Numero_Producao]
                If RetVal
                   Then Moveto "Rfacc" 
                        Mensagem("Este lan‡amento foi utilizado via grade !//Rotina de Fac‡„o > 03. Produ‡„o")
                        CHAVE=9
                        Return
                EndIf   
                Moveto "Rfacc"               
        EndIf 

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

        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVE=1
                           Then Del
                        EndIf
                        CHAVE=9
                        Return
                EndIf
        EndIf
                         
        If CHAVE=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 PRODUCAO_CORTE
                           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 CHAVE=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 PRODUCAO_CORTE
                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 CHAVE=1
                           Then EXCLUSAO("Cabeca")
                                CHAVE=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" :
                Moveto [Numero_Programacao]
           Case Field()="Data de Vencimento":
                If CHAVE=0
                   Then Undo
                        CHAVE=9
                        QuitLoop
                   Else Moveto [Data_Producao]
                EndIf
           OtherWise:
                Left                                        
           EndSwitch           
      Case Retval="PGDN" and CHAVE=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
           CHAVE=9
           OPCAO=""
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("") And Checa_Supervisor()
                      Then CHAVE=9
                           EXCLUSAO("Cabeca")
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER": 
        Switch
          Case Field()="Numero_Programacao"  :
               If IsBlank([]) And Not PRODUCAO_CORTE
                  Then Loop
               EndIf   
               
               If IsBlank([]) 
                  Then 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 PRODUCAO_CORTE
                                          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
                               CHAVE=9
                               Return
                       EndIf
                       
                       If PRODUCAO_CORTE
                          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
          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 ANT_PROC <> [Numero_Corte] And ANT_PROC <> ""
                          Then ConfGeral(Completa("Deseja carregar o corte "+[Numero_Corte]+" lembrando, ",50," ")+"//"+
                                         Completa("que o corte "+ANT_PROC+ " j  inserido ser  apagado!",50," ")+"////"+
                                         Completa("Continuar com essa altera‡„o ?",50," "))
                               If Ok<>"S"
                                  Then [Numero_Corte] = ANT_PROC
                                       Loop
                                  Else ANT_PROC = [Numero_Corte]
                                       If PRODUCAO_CORTE
                                          Then Moveto "Rfacrir"
                                               While RecordStatus("New")=False
                                                 Del
                                               EndWhile
                                          Else Moveto "Rfacrig"
                                               While RecordStatus("New")=False
                                                 Del
                                               EndWhile
                                       EndIf
                                       Moveto "Rfacc"
                                       Moveto [Numero_Corte]   
                               EndIf
                          Else ANT_PROC = [Numero_Corte]        
                       EndIf        
                       
                       If Not BUSCA_LOOKUP("Numero_Corte",[],"Corte n„o encontrado !")
                          Then Loop
                       EndIf
                       
                       If Not Carrega_Parametros()              
                          Then Loop
                       EndIf
                       
                      If PRODUCAO_CORTE
                          Then If [Numero_Programacao]=""
                                  Then [Destino_Producao  ]="INTERNO"
                                       [Codigo da Tabela  ]=""
                               EndIf
                               If Not Verifica_Duplicidade("Corte")
                                  Then Moveto [Numero_Corte]
                                       Loop
                               EndIf
                       EndIf
                       
                       Moveto "Rfacrir"    
                       If RecordStatus("New")=True
                          Then Moveto "Rfacc"
                               OPCAO_AUX = "Corte"
                               If Not PegaItens("Corte")
                                  Then Moveto "Rfacc"
                                       Moveto [Numero_Corte]
                                       Loop
                               EndIf         
                       EndIf   
                       Moveto "Rfacc"     
                       Moveto [Data_Producao]
                       ;If PRODUCAO_CORTE
                       ;   Then Moveto [Destino_Producao]
                       ;   Else Moveto [Data_Producao]
                       ;EndIf   
               EndIf   
               
          ;Case Field()="Destino_Producao"  :
          ;     If Isblank([]) Then []="INTERNO" EndIf
          ;     If Not Checa_Opcoes("Op‡”es de Desinat rio",[])
          ;        Then Mensagem("Destino inv lido !")
          ;             Loop     
          ;        Else If IsBlank([])
          ;                Then Loop 
          ;             EndIf 
          ;     EndIf
          ;     Moveto [Codigo]
          ;Case Field()="Codigo"  : 
          ;     If IsBlank([])
          ;        Then Loop
          ;     EndIf                    
          ;     Moveto [Data_Producao]     
          Case Field()="Data_Producao"  :  
               If IsBlank([]) Then []=Today() EndIf
               Verifica_Rotina = False
               If PRODUCAO_CORTE
                  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
               If IsBlank([Acerto_Realizado])
                  Then [Acerto_Realizado] = "N"
               EndIf   
               
               If Verifica_Rotina
                  Then Moveto "Rfacc"
                       Moveto [Data de Vencimento]
                  Else Moveto "Rfacc"
                       [Data de Vencimento]=BlankDate()
                       If PRODUCAO_CORTE
                          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 PRODUCAO_CORTE
                   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

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

CONT_LIMITE = 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 = [] 
           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
           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
               
;If Not DUPLICIDADE_PROG_CORTE
;   Then Return True
;EndIF    

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

Moveto "Rfacc"
Moveto [Numero_Producao]
Locate PROD 
UnLockRecord
FormKey
If Not Verifica_Rotina
  Then If PARAM="Corte" And [Numero_Corte]<>""
          Then MSG=Completa("O Corte "+[Numero_Corte]+" j  foi lan‡adado na(s) programa‡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 PRODUCAO_CORTE
          Then Moveto "Rfacrir"
               If RecordStatus("New")=True
                  Then 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 

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()

;*******************************************************************************
;* Recarregar Produ‡Æo do Corte Anterior                                       *
;*******************************************************************************
Proc Recarrega_Corte_Anterior()
Private TabAnt

;Substituido em 17.03.2015
;Aguardar um per¡odo e se tudo estiver em funcionamento, excluir essa PROC.

TabAnt = Table()

GetRecord "CFACC" [Rfacc->Numero_Corte] To PROG_CORTE
If Not RetVal
   Then Release Vars PROG_CORTE
        Mensagem("Progama‡„o do corte n„o localizado !")
        Return False
EndIf  

CONT_PROD  = 0
DynArray PROD_ITEM[]  

Moveto "PCFACC"
Moveto [Numero_Programacao_Corte]
Locate [Rfacc->Numero_Corte]
If Not Retval
   Then Mensagem("Corte sem produ‡„o efetuada e n„o localizada !")    
        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
          
          ;*** Atualizar itens do corte que ja foram inseridos anteriormente ***
          ATUALIZA_CORTE = True
          
          If ATUALIZA_CORTE
             Then DynArray SEQ_ITEM[]
                  DynArray CORTE_ITEM[]
                  CONT_SEQ   = 0
                  CONT_CORTE = 0
          EndIf
                          
          While [Numero_Producao_Corte] = PROD_CORTE["Numero_Producao_Corte"] 
             CONT_PROD            = CONT_PROD + 1
             PROD_ITEM[CONT_PROD] = [Pcfacri->Codigo do Item]
             
             Moveto "Rfacrir"
             Moveto [Codigo do Item]
             Locate [Pcfacri->Codigo do Item]
             If RetVal                              
                Then Adiciona_Registro = False
                     If [Numero_Producao_Corte]<>"" And [Numero_Producao_Corte] <> PROD_CORTE["Numero_Producao_Corte"]
                        Then Adiciona_Registro = True
                             While True
                               If [Numero_Producao_Corte] = PROD_CORTE["Numero_Producao_Corte"]
                                  Then Adiciona_Registro = False
                                       QuitLoop 
                               EndIf    
                               Skip
                               If EOT() Then Quitloop EndIf
                               Locate Next [Pcfacri->Codigo do Item]
                               If Not RetVal Then QuitLoop EndIf
                             EndWhile
                     EndIf
                     
                     If DynArraySize(SEQ_ITEM) > 0 And Not Adiciona_Registro
                        Then While True
                               NAO_FAZ= False
                               For wer From 1 To DynArraySize(SEQ_ITEM)                        
                                 If [Sequencia do Lancamento] = SEQ_ITEM[wer] 
                                    Then NAO_FAZ = True
                                         QuitLoop
                                 EndIf
                               EndFor                   
                               If Not NAO_FAZ Then QuitLoop EndIf
                               Skip
                               If EOT() Then Quitloop EndIf
                               Locate Next [Pcfacri->Codigo do Item]
                               If Not RetVal Then QuitLoop EndIf
                             EndWhile
                     EndIf
                     If ATUALIZA_CORTE And Not Adiciona_Registro
                        Then CONT_SEQ   = CONT_SEQ + 1  
                             CONT_CORTE = CONT_CORTE + 1  
                             CORTE_ITEM[CONT_CORTE] = Completa([Numero_Producao],10," ")+Completa([Codigo do Item],10," ")+Format("W12",[Pcfacri->Quantidade Produzida])+
                                                      Format("W12.2",[Pcfacri->Preco Unitario])+Format("W12.2",[Pcfacri->Preco Total])+
                                                      StrVal(Format("W5",[Sequencia do Lancamento]))
                             SEQ_ITEM[CONT_CORTE]   =[Sequencia do Lancamento]                       
                     EndIf                                    
                Else Adiciona_Registro = True
             EndIf  
             
             If Adiciona_Registro
                Then End
                     Cont = NumVal([Sequencia do Lancamento]) + 1 
                     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]   
                     [Unidade Fiscal           ]=[Pcfacri->Unidade Fiscal]   
                     [Preco Unitario           ]=[Pcfacri->Preco 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
                     
                     CONT_SEQ   = CONT_SEQ + 1  
                     SEQ_ITEM[CONT_SEQ] = Cont
                     
                     If [Quantidade Produzida] - [Quantidade Programada] <> 0
                        Then [Diferenca] = [Quantidade Produzida] - [Quantidade Programada]
                        Else [Diferenca] = BlankNum() 
                     EndIf   
                        
             EndIf
             Moveto "PCFACRI"
             Skip
             If Eot() Then QuitLoop EndIf
          EndWhile 
                       
          If ATUALIZA_CORTE
             Then Moveto "Rfacrir"
                  If DynArraySize(CORTE_ITEM)>0
                     Then For i From 1 To DynArraySize(CORTE_ITEM)
                             COD_ITEM   = SubStr(CORTE_ITEM[i],11,10)
                             SEQUENCIA  = NumVal(SubStr(CORTE_ITEM[i],57,5))
                             Moveto [Codigo do Item]
                             Locate COD_ITEM 
                             If RetVal
                                Then While COD_ITEM = [Codigo do Item]
                                       If SEQUENCIA <> [Sequencia do Lancamento]
                                          Then Skip
                                               If EOT() Then Quitloop EndIf
                                               Locate Next COD_ITEM
                                               If Not RetVal Then QuitLoop EndIf
                                          Else [Quantidade Programada]=BlankNum()
                                               UnLockRecord
                                               QuitLoop      
                                       EndIf
                                     EndWhile
                             EndIf             
                          EndFor
                  EndIf   
          EndIf
          
          If ATUALIZA_CORTE
             Then PRODUCAO = "****"
                  Moveto "Rfacrir"
                  If DynArraySize(CORTE_ITEM)>0
                     Then For i From 1 To DynArraySize(CORTE_ITEM)
                             PROD_CORTE = SubStr(CORTE_ITEM[i],01,10)
                             COD_ITEM   = SubStr(CORTE_ITEM[i],11,10)
                             QTD_PROG   = SubStr(CORTE_ITEM[i],21,12)
                             PRE_UNIT   = SubStr(CORTE_ITEM[i],33,12)
                             PRE_TOT    = SubStr(CORTE_ITEM[i],45,12)
                             SEQUENCIA  = NumVal(SubStr(CORTE_ITEM[i],57,5))
                             Moveto [Codigo do Item]
                             Locate COD_ITEM 
                             If RetVal
                                Then While COD_ITEM = [Codigo do Item]
                                       If SEQUENCIA <> [Sequencia do Lancamento]
                                          Then Skip
                                               If EOT() Then Quitloop EndIf
                                               Locate Next COD_ITEM
                                               If Not RetVal Then QuitLoop EndIf
                                          Else [Quantidade Programada]=[Quantidade Programada]+NumVal(QTD_PROG)
                                               If Rtrim(PRE_UNIT)<>"" 
                                                  Then [Preco Unitario           ]=NumVal(PRE_UNIT) 
                                               EndIf
                                               If Rtrim(PRE_TOT)<>""
                                                  Then [Preco Total              ]=NumVal(PRE_TOT)  
                                               EndIf
                                               UnLockRecord
                                               QuitLoop      
                                       EndIf
                                     EndWhile
                             EndIf           
                          EndFor
                  EndIf   
          EndIf
          
          If ATUALIZA_CORTE
             Then Moveto "Rfacrir"
                  If DynArraySize(CORTE_ITEM)>0
                     Then For i From 1 To DynArraySize(CORTE_ITEM)
                             COD_ITEM   = SubStr(CORTE_ITEM[i],11,10)
                             SEQUENCIA  = NumVal(SubStr(CORTE_ITEM[i],57,5))
                             Moveto [Codigo do Item]
                             Locate COD_ITEM 
                             If RetVal
                                Then While COD_ITEM = [Codigo do Item]
                                       If SEQUENCIA <> [Sequencia do Lancamento]
                                          Then Skip
                                               If EOT() Then Quitloop EndIf
                                               Locate Next COD_ITEM
                                               If Not RetVal Then QuitLoop EndIf
                                          Else If [Quantidade Produzida] - [Quantidade Programada] <> 0
                                                  Then [Diferenca] = [Quantidade Produzida] - [Quantidade Programada]
                                                  Else [Diferenca] = BlankNum() 
                                               EndIf   
                                               UnLockRecord
                                               QuitLoop      
                                       EndIf
                                     EndWhile
                             EndIf                 
                          EndFor
                  EndIf   
          EndIf       
          
          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 

;---- Procedimento p/ excluir itens que nÆo pertencem mais ao corte ------------
If ATUALIZA_CORTE
   Then Tab_Ant = Table()

        CONT_ITEM = 0
        CONT_EXCL = 0
        DynArray EXC_ITEM[]
        DynArray COD_ITEM[]

        Moveto "Rfacrir"
        If [Numero_Producao_Corte]<>""
           Then PROCEDIMENTO = 1
           Else PROCEDIMENTO = 2
        EndIf
        
        If PROCEDIMENTO = 1
           Then Scan
                  CONT_ITEM = CONT_ITEM + 1
                  COD_ITEM[CONT_ITEM] = Format("W10",[Codigo do Item])+Format("W6",[Numero_Producao_Corte]) 
                EndScan
        
                Moveto "Pcfacri"
                Moveto [Numero_Producao_Corte]
                For ii From 1 To DynArraySize(COD_ITEM)
                  ACHOU_ITEM = False
                  
                  CODIGO = SubStr(COD_ITEM[ii],1,10) 
                  LANCTO = SubStr(COD_ITEM[ii],11,6)
                  
                  Locate LANCTO
                  If RetVal
                     Then While [Numero_Producao_Corte] = LANCTO 
                            If CODIGO = [Codigo do Item]
                               Then ACHOU_ITEM = True
                                    QuitLoop
                            EndIf   
                            Skip
                            If Eot() Then QuitLoop EndIf
                            Locate Next LANCTO
                            If Not RetVal Then QuitLoop EndIf
                          EndWhile     
                  EndIf   
                  
                  If Not ACHOU_ITEM
                     Then CONT_EXCL = CONT_EXCL + 1
                          EXC_ITEM[CONT_EXCL] = Format("W10",CODIGO)+Format("W6",LANCTO) 
                  EndIf
                EndFor 
                
                Moveto "Rfacrir"
                Moveto [Codigo do Item]
                For ii From 1 To DynArraySize(EXC_ITEM)
                  ACHOU_ITEM = True
                  
                  CODIGO = SubStr(EXC_ITEM[ii],1,10) 
                  LANCTO = SubStr(EXC_ITEM[ii],11,6)
                  
                  Home
                  Locate CODIGO
                  If RetVal
                     Then While [Codigo do Item] = CODIGO 
                            If LANCTO = [Numero_Producao_Corte]
                               Then ACHOU_ITEM = False
                                    QuitLoop
                            EndIf   
                            Skip
                            If Eot() Then QuitLoop EndIf
                            Locate Next CODIGO
                            If Not RetVal Then QuitLoop EndIf
                          EndWhile     
                  EndIf   
                  
                  If Not ACHOU_ITEM
                     Then Del
                    Else If [Quantidade Produzida] - [Quantidade Programada] <> 0
                            Then [Diferenca] = [Quantidade Produzida] - [Quantidade Programada]
                            Else [Diferenca] = BlankNum()      
                         EndIf
                  EndIf        
                EndFor        
           Else Moveto [Codigo do Item]
                Home
                Scan
                  ITEM  = [Codigo do Item]
                  ACHOU = False
                  For op From 1 To DynArraySize(PROD_ITEM)
                    If ITEM = PROD_ITEM[op]
                       Then ACHOU = True
                            QuitLoop
                    EndIf    
                  EndFor
                  
                  If Not Achou
                     Then CONT_EXCL = CONT_EXCL + 1
                          EXC_ITEM[CONT_EXCL] = [Codigo do Item]
                  EndIf
                  
                  If [Quantidade Produzida] - [Quantidade Programada] <> 0
                     Then [Diferenca] = [Quantidade Produzida] - [Quantidade Programada]
                     Else [Diferenca] = BlankNum() 
                  EndIf     
                EndScan
                
                If DynArraySize(EXC_ITEM) > 0
                   Then Moveto [Codigo do Item]
                        For op From 1 To DynArraySize(EXC_ITEM)
                          Locate EXC_ITEM[op]
                          If RetVal Then Del EndIf    
                        EndFor
                EndIf  
        EndIf
        Moveto Tab_Ant
EndIf        

EndProc ;Recarrega_Corte_Anterior()

;*******************************************************************************
;* 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" :
       Moveto "PFACRI"
       Moveto [Numero_Programacao]
       Locate [Rfacc->Numero_Programacao]
       If Not RetVal
          Then Mensagem("Itens da Programa‡„o n„o localizado !")
               Moveto TabAnt
               Return False
       EndIf
       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]   
          [Preco Unitario         ]=[Pfacri->Preco Unitario]   
          ;[Preco Total            ]=[Pfacri->Preco Total]
          [Numero_Programacao     ]=[Rfacc->Numero_Programacao]
          [Numero_Producao_Corte  ]=""
          [Quantidade Original    ]=[Pfacri->Quantidade Programada]
          UnLockRecord
          Moveto "PFACRI"
          Skip
          If Eot() Then QuitLoop EndIf
       EndWhile 
       
       GetRecord "Pfacc" [Rfacc->Numero_Programacao] To PROGRAMACAO 
       If RetVal
          Then Moveto "Rfacc"
               [Codigo          ]=PROGRAMACAO["Codigo"]
               [Razao Social    ]=PROGRAMACAO["Razao Social"]
               [Codigo da Tabela]=PROGRAMACAO["Codigo da Tabela"]
               ;---- Em 05.10.2015 ---------------------------------------------
               [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]   
                    [Preco Unitario           ]=[Pcfacri->Preco 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
                    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]
          ;[Situacao_Producao      ]=
          UnLockRecord
          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 [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
   Else [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=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 -----
        Edit "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 PRODUCAO_CORTE
   Then Array Array_TM[12]
        grdant="***"
EndIf

AbreTabelas()
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 PRODUCAO_CORTE
   Then Moveto "Rfacrir"
        Calc_Itens()   
   Else Moveto "Rfacrig"
EndIf
   
While True
  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
        Calc_Itens()
        
        Moveto "RFACC"
        [Quantidade_Produzida ]=TOTQTD
        [Valor Total          ]=TOTVR

        If PRODUCAO_CORTE
           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 PRODUCAO_CORTE
                   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,
                         "~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<>"F3" And MenuVar<>"F9" And MenuVar<>"F6" And MenuVar<>"F8"  
                   Then Tecla_Funcao=NumVal(MenuVar)
                   Else Tecla_Funcao=MenuVar
                EndIf
                RetVal=Tecla_Funcao
        EndIf

        Switch
        Case RetVal="F8" Or RetVal=-68 : 
             Del
             If PRODUCAO_CORTE And [Numero_Programacao]="" And CHAVE=0 
                Then ConfGeral("Deseja recarregar a produ‡„o de corte ?")
                     If OK<>"S"
                        Then QuitLoop
                     EndIf
                     Recarrega_Corte()
                     Moveto "Rfacrir"
                     QuitLoop
                Else FastMsg("Fun‡„o permitido apenas para recarregar produ‡„o do corte !")
                     QuitLoop    
             EndIf
        Case RetVal="F3":
             If PRODUCAO_CORTE
                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 PRODUCAO_CORTE
                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=""
             Return
        Case RetVal=-24 Or RetVal="F6" or RetVal=-25 or RetVal=-18 Or RetVal=-34: 
             Tecla_Funcao=RetVal
             Del
             CHAVEI=9
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" : 
             Del
             While True
               Calc_Itens()
               
               Moveto "RFACC"
               [Quantidade_Produzida ]=TOTQTD
               [Valor Total          ]=TOTVR
               SaveTables
               UnLockRecord

               If PRODUCAO_CORTE
                  Then Moveto "Rfacrir"
                  Else Moveto "Rfacrig"
               EndIf   
               Moveto [Sequencia do Lancamento]

               If PRODUCAO_CORTE
                  Then PAGINA("Rfacrir","MR")
                  Else PAGINA("Rfacrig","MR")
               EndIf 

               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then If PRODUCAO_CORTE
                          Then Mensagem("Edi‡„o n„o permitida !")
                          Else CHAVEI=0
                               Controla_EdicaoI()
                       EndIf
                  Else If EXCLUIR="S"
                          Then If PRODUCAO_CORTE
                                  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=""
             Return             
        Case Retval="ENTER":
             If Not PRODUCAO_CORTE
                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()

Calc_Itens()
While True
  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             
CODIGO_BARRA=Dados_Item   

Moveto [Codigo do Item]
Ativa_Lookup()                      
Moveto [Codigo de Barras]
Locate IndexOrder by "cod_barras" CODIGO_BARRA
If RetVal
  Then Achou_Item=True
  Else KeyPress "ESC"
       If Codigo_Barras2(CODIGO_BARRA,"S")
          Then CODIGO_BARRA = CODIGO_BARRA2
               Moveto [Codigo do Item]
               Ativa_Lookup()
               Moveto [Codigo do Item]
               Locate CODIGO_BARRA  
          Else RetVal = False
               ITOK   =  False
        EndIf
EndIf  

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

Registro_Item("Ler")

;If Not IsBlank([RFACC->Codigo da Tabela])
;  Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
;EndIf   

Registro_Item("Gravar")

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

Sound 400 400

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 Campo=AvancaCampo("I_Qtd0")   
           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" : Campo=VoltaCampo("I_Qtd13")

             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

                                         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("Referlncia 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")
                          Campo=VoltaCampo("I_Qtd13")
                  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="Referlncia"
  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 i < NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i)
                  QuitLoop
          EndIf
  EndIf
EndFor

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

Return Campo

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

If Not PRODUCAO_CORTE
   Then Registro_Item("Ler")
        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 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"                   :
       [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
       [Preco 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

  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_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         =[Preco Unitario            ]
       VSD_I_Custo_Total            =Round([Preco Total               ],2)

       VSD_I_Referencia             =[Referencia                ]

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

EndSwitch

EndProc  ; (Registro_Item)

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

Switch
  Case TIPO="Cabeca":
       If Not PRODUCAO_CORTE
          Then Moveto "Rfacrir"
               Moveto [Numero_Producao]
               Locate [Rfacc->Numero_Producao]
               If RetVal
                  Then Moveto "Rfacc"                      
                       Mensagem("Exclus„o n„o permitida, lan‡amento utilizado com c¢digo de barras !//Rotina de Fac‡„o > 36. Produ‡„o II")
                       CHAVE=9
                       Return              
               EndIf   
          Else Moveto "Rfacrig"
               Moveto [Numero_Producao]
               Locate [Rfacc->Numero_Producao]
               If RetVal
                  Then Moveto "Rfacc" 
                       Mensagem("Exclus„o n„o permitida, lan‡amento via grade !//Rotina de Fac‡„o > 03. Produ‡„o")
                       CHAVE=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 PRODUCAO_CORTE
          Then Moveto "Rfacrir"
               While RecordStatus("New")=False
                 Del
               EndWhile
          Else Moveto "Rfacrig"
               While RecordStatus("New")=False
                 Del
               EndWhile
       EndIf   

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

EndProc  ; Exclusao()

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

ntab=table()

If PRODUCAO_CORTE
   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 PRODUCAO_CORTE
   Then Gera_Rfacri("Producao_Corte")
   Else Gera_Rfacri("")
EndIf    

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

If PRODUCAO_CORTE
   Then DESTINO="PRODUCAO"
   Else DESTINO=[RFACC->Destino_Producao  ]
EndIf   
NPROD  =[RFACC->Numero_Producao   ]
NPROG  =[RFACC->Numero_Programacao]
NCORT  =[RFACC->Numero_Corte      ]
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 PRODUCAO_CORTE
                              Then PLAY "RP_RFACR"
                              Else PLAY PARAM_RELATORIO
                           EndIf   
  Case Opcaoc="Program02": If NCORT<>""
                              Then PLAY "RP_CORTE" 
                              Else PLAY PARAM_RELATSALDO
                           EndIf   
EndSwitch

AbreTabelas()
Moveto "RFACC"

If PRODUCAO_CORTE
   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 CHAVE=0
           Then Mensagem("Fun‡„o n„o permitida !")
                Return False
        EndIf
   Else If IsBlank([Rfacc->Numero_Corte]) Or (CHAVE=0 And Not ATUALIZA_CORTE)
           Then Mensagem("Aplica‡„o n„o permitida !")
                Return False
        EndIf              
EndIf     

MenuVar = ""
If Not PRODUCAO_CORTE
   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 PRODUCAO_CORTE
            Then Moveto "Rfacrir"
            Else Moveto "Rfacrig"
         Endif
           
         While RecordStatus("New")=False
           Del
         EndWhile
         FAZ_ROTINA_PARCIAL = True                                                    
EndIf

If PRODUCAO_CORTE
   Then If Not ATUALIZA_CORTE
           Then If OPCAO_AUX = "Programacao"
                   Then Pega_Itens("Programacao")
                   Else Pega_Itens("Corte")
                EndIf    
        EndIf
   Else 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"        ]
                          [Preco 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"       ]
                          UnLockRecord
                           
                          Moveto "Pfacrig"
                          Skip
                          If EOT() Then QuitLoop EndIf
                        EndWhile
                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
           
           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 PRODUCAO_CORTE
     Then ConfGeral(MSG_PROG+"//Deseja atualizar o saldo desta programa‡„o/corte ?")
          If Ok<>"S"
             Then If PRODUCAO_CORTE
                     Then Moveto "Rfacrir"
                     Else Moveto "Rfacrig"
                  EndIf  
                      
                  While RecordStatus("New")=False
                    Del
                  EndWhile
                  UnLockRecord
                                 
                  FAZ_ROTINA_PARCIAL = False
                  Return False
          EndIf
  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[]
    
    FormKey
    CONT_AUX = "0"
    Moveto "Rfacrir"
    Moveto [Numero_Producao]
    Locate PROD
    If RetVal
       Then CONT_AUX = "1"
       Else Moveto "Rfacri"
            Moveto [Numero_Producao]
            Locate PROD
            If RetVal
               Then CONT_AUX = "2"
            EndIf   
    EndIf
    
    If CONT_AUX = "0"
      Then Moveto "Rfacc"
           FormKey
           Mensagem("N„o foi localizado os itens da producao "+PROD+" !")
           Loop
    EndIf
    
    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
    If PRODUCAO_CORTE
       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 PRODUCAO_CORTE
         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]*[Preco 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 PRODUCAO_CORTE
       Then Moveto "Rfacrir"
       Else Moveto "Rfacrig"
  EndIf
  If [Codigo do Item]=""
     Then Del
  EndIf   
  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"
       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]
                   EndIf
                   [Quantidade Produzida     ]=[Quantidade Produzida     ]+Qtd
                   [Preco Unitario           ]=RegRq["Preco Unitario"]
                   [Preco Unitario Tabela    ]=RegRq["Preco Unitario Tabela"]
                   [Codigo da Tabela         ]=RegRq["Codigo da Tabela"]
                 
                   If [Quantidade Produzida ]>0
                      Then [Preco Total]=[Quantidade Produzida ]*[Preco Unitario]
                   EndIf
        
                   Moveto "Rfacri"
                   UnlockRecord
            EndIf
          EndFor
          Moveto "Rfacrig"
        EndScan
  Case PARAM="Producao_Corte" :
       Moveto "Rfacri"
       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"
                 End Down
                 Seq=Seq+1
                 [Numero_Producao          ] = RegRq["Numero_Producao"]
                 [Codigo do Item           ] = codite
                 [Lookup_Itens             ] = [Codigo do Item]
                 [Quantidade Produzida     ] = RegRq["Quantidade Produzida"]
                 [Preco Unitario           ] = RegRq["Preco Unitario"]
                 [Preco Unitario Tabela    ] = RegRq["Preco Unitario Tabela"]
                 [Codigo da Tabela         ] = RegRq["Codigo da Tabela"]
                       
                 If [Quantidade Produzida ]>0
                     Then [Preco Total]=[Quantidade Produzida ]*[Preco Unitario]
                 EndIf        
         EndIf
         UnlockRecord
         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 PRODUCAO_CORTE
   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"
UnLockRecord
FormKey

Oktit=True
Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([RFACC->Numero Lancamento Titulos])
    Then If (Tipo="Incluir" or Tipo="Alterar")
            Then Tipo="Incluir"
                 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

Moveto "RFACC"
UnLockRecord
FormKey

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()

;*******************************************************************************
;* 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 Not PRODUCAO_CORTE
   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 SAIR 
   Then Return 
EndIf

If PRODUCAO_CORTE And Tipo<>"Exclusao"
    Then TabAnt = Table()
         Calc_Itens()
         Moveto TabAnt
         If VSQTDE=0 Or VSQTDE=BlankNum()
            Then Return 
         EndIf 
EndIf

Aguarde("Gerando requisi‡„o no estoque")

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

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

Moveto "RFACC"
UnLockRecord
FormKey

If NLancto <> "NOVO"
   Then MSG_REQUISICAO = ""
        RQ_ENCONTRADA  = False
        If Not IsBlank([RFACC->Lancamento RQCabeca_RFACC])
           Then Moveto "\\Sistemas\\Estoque\\RQCabeca"
                Moveto [Numero do Lancamento]
                Locate [RFACC->Lancamento RQCabeca_RFACC]
                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. "+[RFACC->Lancamento RQCabeca_RFACC]+" 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([RFACC->Lancamento RQCabeca_RFACC])
           Then LimpAguarde()
                If MSG_REQUISICAO=""
                   Then MSG_REQUISICAO=Completa("Requisi‡„o de Estoque N. "+[RFACC->Lancamento RQCabeca_RFACC]+" 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        
                Mensagem(MSG_REQUISICAO)

                Moveto "RFACC"
                FormKey
                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
                EndIf 
          Else Moveto "RFACC"
               [Lancamento RQCabeca_RFACC]=""
        EndIf
EndIf

If Tipo="Exclusao"
   Then Moveto "RFACC"
        FormKey
        LimpAguarde()
        Return
EndIf

WS_CREQ = ""
WS_DREQ = DESTINO+NOMDEST

If Not PRODUCAO_CORTE
   Then CODREQ  = REQ_DESTINO 
EndIf   

Moveto "\\Sistemas\\Estoque\\Requisit"
If PRODUCAO_CORTE
   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([RFACC->Lancamento RQCabeca_RFACC]) And SEQ=0
    Then NUMEROL=[RFACC->Lancamento RqCabeca_RFACC]
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If Not RetVal
            Then End Down
                 [Numero do Lancamento] = NUMEROL  
                 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 PRODUCAO_CORTE
   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 PRODUCAO_CORTE
   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 PRODUCAO_CORTE
   Then TOT_ITEMG = TOT_ITEM 
EndIf   
              
Moveto [Numero_Producao]
Locate [RFACC->Numero_Producao]
If RetVal
   Then 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)
          CODIGO_ITEM=[Codigo do Item]
          
          If PRODUCAO_CORTE
             Then CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P")
             Else Switch
                    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 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"]
                     Else WS_TITEM = ""
                          WS_DITEM = ""
                          WS_UNI   = ""
                  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
                  ESTOQUE("ATUALIZAR", "E", [RFACC->Data_Producao],[RFACC->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, 0)
                  [Unidade Interna            ]=WS_UNI
                  [Custo Unitario             ]=CUSTOMEDIO
                  [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)

                  QTDTOT=QTDTOT+[Quantidade ]
                  VRTOT =VRTOT +[Custo Total]
                  UnLockrecord
                  
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL, SEQ
                  
                  If PARAM_EXPLODE_MP_PFAC="S" 
                     Then Formula()
                  EndIf
                  
                  If Not PRODUCAO_CORTE
                     Then Moveto "RFACRI"
                     Else Moveto "Rfacrir"
                  EndIf    

          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

;---- Itens de Grade -----------------------------------------------------------
If Not PRODUCAO_CORTE
   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            ]
                  ESTOQUE("CUSTO", "", [RFACC->Data_Producao],[RFACC->Codigo da Empresa], CODIGO_ITEM, 0, 0)
                  [Custo Unitario             ]=CUSTOMEDIO
                  [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)
                  UnLockrecord
                  
                  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
        UnLockRecord
EndIf

Release Vars REG_CLIENTE,REG_ITEM 

Moveto "RFACC"
[Lancamento RQCabeca_RFACC]=NUMEROL
UnLockRecord

FormKey
LimpAguarde()

EndProc ;REQUISICAO()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras_Producao()
Private Verifica_Rotina,Dif,cc,Faz_Rotina,Semi_Acabado     
                 
Semi_Acabado = False
Moveto "Rfacrir"  

While True
  Moveto [Quantidade Produzida]

  If Not Ler_CDBarras(22,00)
     Then CHAVEI=9
          OPCHAVEI=""
          Return False
  EndIf

  CODIT  = Dados_Item
  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"        
  
  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 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            
          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         
        
  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
         Calc_Itens()
  
         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()
                Calc_Itens()
                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
EndWhile

EndProc ;CDBarras_Producao()

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

If PRODUCAO_CORTE
   Then Moveto "Rfacrir"                                                     
        Moveto [Quantidade Programada] VSQTDP =ImageCSum()
        Moveto [Quantidade Produzida ] VSQTDE =ImageCSum()
        Moveto [Preco Total          ] TOTVR  =ImageCSum()
        
        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"
        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
        
EndProc   ;Calc_Itens()

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

If PRODUCAO_CORTE
   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]*[Preco 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    
          
          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", "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
                  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)
Private OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, ANO, MES, QTDE, CTTOT, 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" Or
     OPERACAO="CUSTO"
     Then CUSTOMEDIO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          If CUSTOMEDIO=0
             Then CUSTOMEDIO=[Ultimo Custo Atual]
          EndIf
          CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
  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" 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" 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":
         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":
         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":
       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()

;*******************************************************************************
;* 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"
        KeyPress "F7"
        Return False   
EndIf

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

                Result=True
        EndIf
EndIf           
           
If Not PRODUCAO_CORTE
   Then Moveto "P_DESTI"
        Moveto [Codigo da Empresa]
        Locate [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao]
        If RetVal
           Then Cont_Dest = 0
                DynArray Param_Destino[]
                While [Codigo da Empresa]=[Rfacc->Codigo da Empresa] And [Destino]=[Rfacc->Destino_Producao] 
                  Cont_Dest = Cont_Dest + 1
                  Moveto "P_FacD"
                  Moveto [Destino]
                  Locate [Rfacc->Destino_Producao] 
                  If RetVal 
                     Then SG = [Sistema Gerador]
                     Else SG = "" 
                  EndIf  
                  Moveto "P_DESTI" 
                  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

Moveto "Rfacc"
KeyPress "F7"

Return Result
EndProc ;Carrega_Parametros()

;*******************************************************************************
;* Rotina p/ arir tabelas                                                      *
;*******************************************************************************
Proc AbreTabelas()

RFACRIG = Cria_Temp(PrivDir())
Copy "Rfacrig" RFACRIG 

View "P_FAC"
View "P_Destc"
View "\\Sistemas\\Estoque\\RqCabeca"
View "\\Sistemas\\Estoque\\RqItem"
View "\\Sistemas\\Estoque\\RqItemG"
View "\\Sistemas\\Estoque\\RqMatPri"
View "\\Sistemas\\Estoque\\EstqPrm"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Requisit"
View "\\Sistemas\\Producao\\FormulaC"
View "\\Sistemas\\Producao\\FormulaI"
View "\\Sistemas\\CtaPag\\Titulos"
View NoWindow "P_FacD"
View NoWindow "P_DESTI"

View "CFACRI"
View "PCFACRI"
View "PFACRI"
View "RFACRI"
View "Rfacrir"

View "PFACRIG"
View "Rfacrig"
View RFACRIG

View "PCFACC"
CoEdit "RFACC"

If PRODUCAO_CORTE     
   Then Moveto "CFACRI"   SetaCorRegistro("Invisivel")
        Moveto "PFACRI"   SetaCorRegistro("Invisivel")
        Moveto "RFACRI"   SetaCorRegistro("Invisivel")
        Moveto "PCFACRI"  SetaCorRegistro("Invisivel")
        Moveto "RFACRIG"  SetaCorRegistro("Invisivel")
        Moveto "PCFACC"   SetaCorRegistro("Invisivel")    
   Else Moveto "RFACRI"   SetaCorRegistro("Invisivel")
        Moveto "PFACRIG"  SetaCorRegistro("Invisivel")
        Moveto "RFACRIR"  SetaCorRegistro("Invisivel") 
EndIf  

EndProc ;AbreTabelas()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
If PRODUCAO_CORTE  
   Then DIGITAI_PROD()
   Else DigitaI()
EndIf  
EndProc ;Controla_EdicaoI()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
Private Verifica_Rotina
FINALIZADO=False
OPCHAVEI=""

While Not FINALIZADO
  Tecla_Funcao=BlankNum()
  DIGITA()
  SetaCorRegistro("Padrao")
  
  If CHAVE=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=-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 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 CHAVE=0
                                           Then Gera_Requicicao()
                                        EndIf   
           EndSwitch           
           
      Case Tecla_Funcao=-19:
           While True
            If OPCHAVEI="CDB"
               Then If PRODUCAO_CORTE 
                       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()
            EndIf
           EndWhile
           SetaCorRegistro("Padrao")

      OtherWise            : QuitLoop
    EndSwitch

  EndWhile

  If Finalizado
     Then If Not gerou_rfacri
             Then If PRODUCAO_CORTE 
                     Then Gera_Rfacri("Producao_Corte")
                     Else Gera_Rfacri("")
                  EndIf   
                  Verifica_Rotina = True
                  If PRODUCAO_CORTE
                     Then Verifica_Rotina = False
                  EndIF
                  If Verifica_Rotina
                     Then Switch
                            Case CHAVE=1: Titulos("Incluir")
                            Case CHAVE=0: Titulos("Alterar")
                          EndSwitch
                  EndIf        
                  Requisicao("Inclusao","")
                  Verifica_Situacao_Programacao()
          EndIf
  EndIf
  Moveto "RFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
SYS_Valor()

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_VERSAO_SO)       Then SYS_VERSAO_SO="Windows"  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(PRODUCAO_CORTE)      Then PRODUCAO_CORTE=False     EndIf

DUPLICIDADE_PROG_CORTE = True
PERMITIR_ITENS_MAIOR_PROGR = True

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

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

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

AbreTabelas()
Moveto "RFACC"

PickForm "F"
OPCAO_FORM="F"
While True
  CHAVE()
  If CHAVE=9 Then QuitLoop EndIf
  If CHAVE=1 Then Controle_Dia() EndIf
  If CHAVE=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else If PRODUCAO_CORTE
                     Then PickForm "3" 
                     Else PickForm "2"
                  EndIf    
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!

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

ClearAll
Release Vars All
Release Procs All 
