;** CFACG **********************************************************************
;*  Programacao de Corte                                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/03/2007 por Anivel Augusto Rodrigues
;Ultima Alteracao: 26/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Lookup PedidoC
;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_CFacRI
;Ultima Alteracao: 15/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tipo Item="S"
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 11/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 03/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes imprimir
;Ultima Alteracao: 10/10/2008 por Nikolas
;Motivo Alteracao: Acerto Bug
;Ultima Alteracao: 27/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Descricao
;Ultima Alteracao: 27/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes array_Grade()
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 23/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Itenspedidos()
;Ultima Alteracao: 15/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem consulta cores             
;Ultima Alteracao: 26/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Inclusao de Pedidos em ABERTO          
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_Cfacri()     
;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: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas   
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo Monta_Array_Grade
;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 exibir cores em ordem Alfabetica               
;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: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LimpaRodape()                  
;Ultima Alteracao: 23/05/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Seleciona_Opcoes() quando ocorrer maior que 10 cores  
;Ultima Alteracao: 25/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes TOTQTD ao informar no campo [Quantidade_Programada], nÆo atualizava
;Ultima Alteracao: 02/09/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ se tipo do item ‚ "S" ou "D" conforme referˆncia #Flag# no Item_Dialog() 
;Ultima Alteracao: 26/09/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes "tipo do item" 
;Ultima Alteracao: 13/11/2014 por Bruno Carvalho/ Luis Gustavo
;Motivo Alteracao: Ajustes na proc Carrega_ItensPedidos(), "tipo do item" 
;Ultima Alteracao: 16/12/2014 por Bruno Carvalho
;Motivo Alteracao: Comentado Linha onde veirifca na TAG "Flag" o tipo do item "tpitemref"
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Array_Grade() -> Array_Monta_Grade() e adicionado-o na Bibliot
;Ultima Alteracao: 30/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para gera‡Æo/verifica‡Æo do [Numero do Lancamento]
;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: 05/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_NCONTROLE                   
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 25/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desativar tecla alt+O (-24) ir ao prompt do DOS
;Ultima Alteracao: 23/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro()
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado TECLA="DOWN" no DigitaC() p/ ir direto aos itens caso seja um registro editado 
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ nÆo gerar log de itens excluidos quando for excluir a cabe‡a do registro
;Ultima Alteracao: 17/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_ItensPedidos() mensagem
;Ultima Alteracao: 18/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Filtro selecao
;Ultima Alteracao: 18/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Alterado Array_Monta_Grade() p/ Array_Monta_Grade_Producao() e essa proc foi adicionado neste script
;                  Foi criado esta nova proc a fim de verificar um melhor desempenho ao montar a grade do item, #0232# questionou muita lentidÆo
;Ultima Alteracao: 02/07/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado [Producao Esgotada] da tabela "Iten_Com" p/ a tabela "Itens"
;Ultima Alteracao: 09/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor_tecido #0232
;Ultima Alteracao: 27/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Alterado vari vel da estrutura de repeti‡Æo FOR de "i" p/ "iy" na proc Array_Monta_Grade_Producao()
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Movido o Controle_Dia() p/ o Controla_EdicaoC()
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado IntervaloData()

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

While True
  Moveto "CFACC"
  End
  Moveto [Numero_Corte]
  NCORT=[Numero_Corte]
  
  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn PgDn
  EndIf
  Moveto [Numero_Corte]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

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

               If OPCAO_FORM="F"
                  Then PAGINA("CFACC","MR")
                  Else PAGINA("CFACC","MT")
               EndIf
               CHAVE=0
               NCORT   =[Numero_Corte]
               If EDITAR="S"
                  Then If OPCAO_FORM="F"
                          Then PickForm "2"
                       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 PickForm "2"
                                               EndIf
                                               GRAVA_LOG=True
                                               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(NCORT)
                        Then NCORT="1"
                        Else NCORT=StrVal(NumVal(NCORT)+1)
                     EndIf
                Else NCORT=[]
             EndIf
             NCORT=AlinhM(NCORT,6)
             If RecordStatus("New")=False
                Then QuitLoop
                Else Del
             EndIf

             If OPCAO_FORM="F"
                Then PickForm "2"
             EndIf
             Moveto [Numero_Corte]
             Locate NCORT
             If Retval
                Then CHAVE=0
                     If Checa_Controle([Numero_Controle_Dia])
                        Then Return
                     EndIf
                Else CHAVE=1
                     End
                     PgDn PgDn PgDn
                     Moveto [Numero_Corte]
                     [Numero_Corte]=NCORT
                     If Checa_Controle(SYS_CONTROLE_DIA)
                        Then Return  
                        Else OPCAO_FORM="F"
                     EndIf
             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_cfacri=False

SetaCorRegistro("Editar")

If IsBlank(campocorrente)
   Then If [Situacao_Programacao]="FINALIZADA" And INICIO
           Then Mensagem("Programa‡„o Corte Finalizada !")
                If Not Checa_Supervisor()
                   Then CHAVE=9
                        Return
                EndIf
        EndIf

        If INICIO
           Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVE=1
                   Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                EndIf
        EndIf
        INICIO=False

        Moveto [Codigo da Empresa]
        If CHAVE=1
           Then [Situacao_Programacao]="PROGRAMADA"
           Else If Not IsBlank([Codigo da Empresa])
                   Then If Not Carrega_Parametros()
                           Then CHAVE=9
                                Return
                           EndIf
                EndIf
                Moveto [Situacao_Programacao]
        EndIf
   Else Moveto Field campocorrente
EndIf

While True

      TECLA=" Esc=Retornar  "
      If Field()="Codigo da Empresa" Or
         Field()="Situacao_Programacao"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf
      If CHAVE=0
         Then TECLA=TECLA+"Del=Exclui  "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgDn=Finalizar  "

      MSGCAMPO=Field()

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35",
                 "DOWN","PGDN",-33,-25,-24,-19,"F6","F5",-145

      If RetVal=-33
        Then If Not Seleciona_Funcao()
                Then Loop
                Else Return
             EndIf
      EndIf

      If CHAVE=0 And (RetVal="DOWN" Or RetVal=-145)
         Then Tecla_Funcao=-25
              Return 
      EndIf

      Switch
      Case RetVal=-25  Or RetVal=-24  Or RetVal=-19  Or
           RetVal="F6" Or RetVal="F5":
           Tecla_Funcao=RetVal
           Return

      Case RetVal="F1":
           If Field()="Codigo da Empresa"
              Then CONSULTAF1()
           EndIf
           If Field()="Situacao_Programacao"
              Then
                   ShowPopup " Situa‡„o " @ 03,57
                        "~P~rogramada ": " Programa‡„o    " : "PROGRAMADA",
                        "~E~m produ‡„o": " Em produ‡„o    " : "EM PRODUCAO",
                        "~S~uspensa   ": " Suspensa       " : "SUSPENSA",
                        "~F~inalizada ": " Finalizada     " : "FINALIZADA"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then [Situacao_Programacao]=MenuVar
                       EndIf
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then If CHAVE=1
                           Then Exclusao("Cabeca")
                           Else Undo
                        EndIf
                        CHAVE=9
                        QuitLoop
                EndIf
           Case Field()="Situacao_Programacao":
                If CHAVE=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVE=9
                                QuitLoop
                        EndIf
                   Else Left
                EndIf
           Case Field()="Data_Programacao":
                Moveto [Codigo da Empresa]
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGDN":
           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
                           GRAVA_LOG=True
                           EXCLUSAO("Cabeca")
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER":
        Switch
          Case Field()="Codigo da Empresa"  :
               If Not IsBlank([])
                  Then If Not Carrega_Parametros()
                          Then Loop
                       EndIf
                       Moveto [Data_Programacao]
               EndIf
          Case Field()="Data_Programacao"  :
               If IsBlank([])
                  Then []=Today()
               EndIf
               
               If Not IntervaloData([Data_Programacao])
                  Then Loop
               EndIf
               
               Moveto [Hora_Programacao]
          Case Field()="Hora_Programacao"  :
               If IsBlank([])
                  Then []=Time()
               EndIf
               Moveto [Situacao_Programacao]
          Case Field()="Situacao_Programacao"  :
               If IsBlank([])
                  Then []="PROGRAMADA"
               EndIf
               Tecla_Funcao=-25
               Return
          OtherWise: Right
        EndSwitch
      EndSwitch
EndWhile
EndProc

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

Tecla_Funcao=""
Echo Normal
Echo Off

ShowPopup " Fun‡”es " CENTERED
 "~I~mprimir     ": " [F6]  = Imprimir programa‡„o corte " :"F6",
 "~S~ele‡„o      ": " [F5]  = Sele‡„o de Pedidos         " :"F5",
 "~O~bs          ": " Alt+O = Observa‡”es                " :"-24",
 "~P~edidos      ": " Alt+P = Rela‡„o de Pedidos         " :"-25",
 "~R~ela‡„o Itens": " Alt+R = Rela‡„o de Itens           " :"-19",
 "C~a~rrega Itens": " Alt+A = Carregar Itens dos Pedidos " :"-30",
 "~E~ditar       ": " Alt+E = Editar quantidades         " :"-18",
 "~C~ancelar     ": " Cancelar a Opera‡„o                " : "CANCELAR"
EndMenu
 To MenuVar

Echo Off

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

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

Return True

EndProc


;*******************************************************************************
;* Rotina para Localizar Despesas                                              *
;*******************************************************************************
Proc PEDIDOS()

Moveto "CFACP"
End
Down

While True

  Moveto "CFACP"
  Moveto [Quantidade Programada]
  TOTQTD= ImageCSum()

  Moveto "CFACC"
  Moveto [Numero_Corte]
  [Quantidade_Pedidos   ]=TOTQTD
  
  Moveto "CFACP"
  Moveto [Numero do Pedido]
  End
  Down

  SetaCorRegistro("Editar")
  While True

    TECLA=" Esc=Retornar  F1=Tabelas  Alt+F=Fun‡”es  F7=Paginar  PgDn=Finalizar  "

    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","HOME","UP","PGUP","PGDN","F7","F1",
         -33,-25,-24,-19,"F6","F5"

    If RetVal=-33
      Then If Not Seleciona_Funcao()
              Then Loop
              Else Del
                   Return
           EndIf
    EndIf

    Switch
    Case RetVal=-25  Or RetVal=-24  Or RetVal=-19 Or RetVal="F6" Or RetVal="F5":
         Del
         Tecla_Funcao=RetVal
         Return
    Case RetVal="F1":
         If Field()="Numero do Pedido"
            Then Moveto [Lookup_PedidoC]
                 If CONSULTAF1()
                    Then [Numero do Pedido]=[Lookup_PedidoC]
                         [Lookup_PedidoC  ]=""
                 EndIf
                 Moveto [Numero do Pedido]
         EndIf
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
           Moveto "CFACP"
           Moveto [Quantidade Programada]
           TOTQTD= ImageCSum()

           Moveto "CFACC"
           Moveto [Numero_Corte]
           [Quantidade_Pedidos   ]=TOTQTD

           Moveto "CFACP"

           PAGINA("CFACP","MR")
           If EXCLUIR="S"
              Then If QuerExcluir("")
                      Then NPED=[Numero do Pedido]
                           Del
                      Else UnLockRecord
                   EndIf
              Else If EDITAR="S"
                      Then UnLockRecord
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Del
         Tecla_Funcao=BlankNum()
         Return
    Case Retval="PGDN":
         Del
         Tecla_Funcao=BlankNum()
         FINALIZADO  =True
         Return
    Case Retval="ENTER":

       Switch
       Case Field() = "Numero do Pedido":
            If IsBlank([])
               Then Loop
            EndIf

            NPED=AlinhM([],6)
            Del
            Locate NPED
            If Retval
               Then Mensagem("Pedido j  existe na rela‡„o !")
               Else End Down
                    Moveto [Lookup_PedidoC]
                    If Busca_Lookup("Numero do Pedido",NPED,"SM")
                       Then If REG_BUSCA_LOOKUP["Situacao do Pedido"]<>"ABERTO"
				                       Then Mensagem("Verificar a Situa‡„o do Pedido !//Status="+REG_BUSCA_LOOKUP["Situacao do Pedido"])
				                            Del
														   Else [Lookup_PedidoC  ]=NPED
				                            [Numero do Pedido]=NPED
				                            Atualiza_Itens("Entrada")
				                    EndIf
                       Else Mensagem("Pedido n„o encontrado !")
                            Del
                            QuitLoop
                    EndIf
            EndIf

            QuitLoop
       EndSwitch

    EndSwitch
  EndWhile
EndWhile
EndProc

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

Moveto "Cfacrig"
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 
        Moveto "Cfacrig"
        Moveto [Quantidade Programada]
        SaveTables
        TOTQTD= ImageCSum()

        Moveto "CfacC"
        [Quantidade_Programada]=TOTQTD
        UnLockRecord

        Moveto "Cfacrig"
        Moveto [Sequencia do Lancamento]

        TECLA=" Esc=Retornar  Alt+F=Fun‡”es  F3=Ver Ficha  PgDn=Finalizar  F7=Paginar  "
        Prompt TECLA

        Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F3",
                 -33,-25,-24,-19,-30,"F6",-18,"F5"

        If RetVal=-33
          Then If Not Seleciona_Funcao()
                  Then Loop
                  Else Del
                       CHAVEI=9
                       Return
               EndIf
        EndIf

        Switch
        Case RetVal="F3":
             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
        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=-19 Or
             RetVal=-25 Or RetVal="F5" or RetVal=-30 Or RetVal=-18:
             Tecla_Funcao=RetVal
             Del
             CHAVEI=9
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               Moveto "Cfacrig"
               Moveto [Quantidade Programada]     
               SaveTables
               TOTQTD= ImageCSum()
                             
               Moveto "CfacC"
               [Quantidade_Programada]=TOTQTD
               UnLockRecord

               Moveto "Cfacrig"
               Moveto [Sequencia do Lancamento]

               PAGINA("Cfacrig","MR")
               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then CHAVEI=0
                       Controla_EdicaoI()
                  Else If EXCLUIR="S"
                          Then If QuerEXcluir("")
                                  Then EXCLUSAO("Item")
                                       Moveto "Cfacrig"
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             Del
             CHAVEI=9
             Tecla_Funcao=""
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate NCORT,ITEM
             If Retval
                Then CHAVEI=0
                Else CHAVEI=1
                     End Down
                     [Numero_Corte           ] = NCORT
                     [Sequencia do Lancamento] = ITEM
                     Locate NCORT,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* 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("Codigo da Cor_Tecido","")
                            Seleciona_Opcoes("Codigo da Cor_Tecido","")
                            Moveto [Codigo da Cor_Tecido ]
                       Else
                            Dynarray WinArray5[]
                            Window Handle Dialog to JANELA
                            Window GetAttributes JANELA To WinArray5
                            WinArray5["FLOATING"]=False
                            Window SetAttributes JANELA From WinArray5
        
                            If Campo="I_Codigo_Item" Then Moveto [Codigo do Item ] EndIf
        
                            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 "Cfacrig"
                    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_Flag":
                  Campo=VoltaCampo("I_Qtd13")
           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 PARAM_COR_TECIDO="S" 
                     Then tpitemref="D"
                     Else tpitemref="S"
                  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_Producao("Valida")
                             Then Registro_Item("Ler")
                                  Monta_Opcoes("Codigo da Cor_Tecido","")
                                  RefreshDialog
        
                                  Moveto "Cfacrig"
                  
                                  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_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   =""
                          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("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                            Then Moveto "Cfacrig"
                                 [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="S"
                                 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_Producao("Valida")
                                            Then Registro_Item("Ler")
                                                 RefreshDialog
        
                                                 Moveto "Cfacrig"
                                                 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     =""
                                                 VSD_I_Modelo_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_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_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 Programada ]=VSD_I_Quantidade
indice=NumVal(RTrim(SubStr(Campo,6,2)))

For i From indice To 12
  If (i+1)=13
     Then Campo="I_Flag"
          QuitLoop
     Else If (i+1) > NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i+1],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i+1)
                  QuitLoop
          EndIf

  EndIf
EndFor

Return Campo
EndProc

;*******************************************************************************
;* Rotina para VoltaCampo                                                      *
;*******************************************************************************
Proc VoltaCampo(Campo)
For i From 12 to 0 Step -1
  If i=0
     Then If CHAVEI=1
             Then Campo="I_Codigo_Item"
                  VSD_I_Codigo_Item   =""
                  VSD_I_Descricao_Item=""
                  VSD_I_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

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

Echo Normal
Echo Off

Registro_Item("Ler")
Array_Monta_Grade_Producao("Valida")
 
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
              
   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 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 Programada]=VSD_I_Quantidade
       [Unidade Interna      ]=VSD_I_UN_Item

       [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 Programada     ]
       VSD_I_UN_Item                =[Unidade Interna           ]

       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

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Switch
Case TIPO="Cabeca":
     Moveto "Cfacri"
     Moveto [Numero_Corte]
     Locate [Cfacc->Numero_Corte]
     If RetVal
        Then While [Numero_Corte]=[Cfacc->Numero_Corte]               
               Del
             EndWhile
     EndIf

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

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

     Moveto "Cfacc"
     If GRAVA_LOG Then Grava_LogEx("Cfac") EndIf
     Del
Case TIPO="Item":
     Moveto "Cfacrig"
     Del
EndSwitch
EndProc  ; (Exclusao)

;*******************************************************************************
;* Rotina para Digitacao das Quantidades                                       *
;*******************************************************************************
Proc Editar(Opcao)
Private Opcao

Moveto [Qtd1]

While True

   Prompt " Esc=Retornar  Ctrl+Z=Pesquisar  Alt+Z=Pr¢ximo"

   Switch
     Case SubStr(Field(),1,3)="Qtd"     : ImageRights
     OtherWise                          : ImageRights ReadOnly
   EndSwitch

   Wait Field
     Until "F35","ESC","ENTER","DOWN","UP","FIELDVIEW","ZOOM","ZOOMNEXT","LEFT","RIGHT","HOME","END"

      Switch
      Case RetVal="ZOOM":
           PESQUISA()
      Case RetVal="ZOOMNEXT":
           PESQUISACON()
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If QuerExcluir("")
              Then ImageRights
                   Del
                   ImageRights ReadOnly
           EndIf
      OtherWise:
           Tecla_Press=RetVal
           If Retval="ESC"
              Then If RecordStatus("Modified")
                      Then Atualiza()
                   EndIf
                   QuitLoop
              Else If RecordStatus("Modified")
                      Then Atualiza()
                   EndIf
           EndIf
           If SubStr(Field(),1,3)="Qtd" and Tecla_Press="ENTER"
              Then Retval="RIGHT"
           EndIf

           Switch
             Case RetVal="LEFT"  And Field()="Qtd1"  : Moveto [Qtd12]
             Case RetVal="RIGHT" And Field()="Qtd12" : Moveto [Qtd1]
             OtherWise : KeyPress Tecla_Press
           EndSwitch

           If RecordStatus("New")
              Then Del
           EndIf
      EndSwitch
EndWhile

ImageRights
EndProc

;*******************************************************************************
;* Atualiza Dados na Programacao                                               *
;*******************************************************************************
Proc Atualiza()

CampoAnterior=Field()

[Quantidade Programada]=[Qtd1 ]+[Qtd2 ]+[Qtd3 ]+[Qtd4 ]+[Qtd5 ]+[Qtd6 ]+
                        [Qtd7 ]+[Qtd8 ]+[Qtd9 ]+[Qtd10]+[Qtd11]+[Qtd12]
UnLockRecord

Moveto [Quantidade Programada]
TOTQTD= ImageCSum()
                     
Moveto "CfacC"
[Quantidade_Programada]=TOTQTD
UnLockRecord

Moveto "CfacRIG"
Moveto Field CampoAnterior

EndProc

;*******************************************************************************
;* Rotina Gera Tabela Cfacrig                                                  *
;*******************************************************************************
Proc Gera_Cfacri()
Private codite

Aguarde("Convertendo programa‡„o modo padr„o")
Moveto "Cfacri"
Moveto [Numero_Corte]
Locate [Cfacc->Numero_Corte]
If RetVal
   Then While [Numero_Corte]=[Cfacc->Numero_Corte]
          Del
        EndWhile
EndIf

refant="****"

Seq=0
Moveto "Cfacrig"
NR = NIMAGERECORDS()
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo programa‡„o modo padr„o "+BARRA_STRING)

  CopyToArray RegRq
   
	If RegRq["Referencia"]<>refant
	   Then Array_Monta_Grade_Producao("")
	        refant=[Referencia]
	EndIf        

  For ic From 1 to 12
    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 "Cfacri"
            Moveto [Numero_Corte]
            Locate RegRq["Numero_Corte"],codite
            If Not RetVal
               Then End Down
                    Seq=Seq+1
                    [Numero_Corte             ]=RegRq["Numero_Corte"]

                    [Codigo do Item           ]=codite
            EndIf
            [Quantidade Programada    ]=[Quantidade Programada    ]+Qtd

            Moveto "Cfacri"
            UnlockRecord
    EndIf
  EndFor

  Moveto "Cfacrig"
EndScan
CHAVEF=8
LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina Atualiza Itens                                                       *
;*******************************************************************************
Proc Atualiza_Itens(tipo)
private pedok, qtdped, qtdprog

pedok =true
qtdped=0

Moveto "CFACC"

Moveto "\\Sistemas\\Vendas\\PedidoI"
Moveto [Numero do Pedido]
Locate NPED
If Not Retval
   Then Mensagem("Item(s) do pedido n„o localizado(s) !")
        pedok=false
EndIf

While [Numero do Pedido]=NPED And pedok
  CopyToArray REGISTRO_F1
  
  itemok=true
  qtdprog=REGISTRO_F1["Quantidade"]-REGISTRO_F1["Quantidade Faturada"]
  If tipo="Entrada"
     Then If qtdprog<=0
             Then Mensagem("Item "+StrVal([Item do Pedido])+" do pedido "+NPED+" j  faturado !")
                  itemok=false
          EndIf
  Endif
  If itemok
     then
          qtdped=qtdped+qtdprog
  EndIf

  Moveto "\\Sistemas\\Vendas\\PedidoI"
  Skip
  If EOT() Then QuitLoop EndIf

EndWhile

Moveto "CFACP"
Moveto [Numero do Pedido]
Locate NPED
If Tipo="Entrada"
   Then [Quantidade Programada]=qtdped
        UnLockRecord
   Else Del
EndIf

EndProc

;*******************************************************************************
;* Rotina Atualiza Itens Pedidos                                               *
;*******************************************************************************
Proc Carrega_ItensPedidos()
private qtdped,qtdprog,coditem,itemnovo,indice,seq,refer,cor,msg

Moveto "Cfacrig"
Moveto [Sequencia do Lancamento]
if imageccount()>0
   then
        if not confgeral("Deseja realmente recarregar os itens novamente//conforme rela‡Æo dos Pedidos")
           then 
                 return
        endif
endif    

Aguarde("Processando Pedidos")
Moveto "Cfacrig"
While RecordStatus("New")=False
  Del
EndWhile

qtdped=0
seq   =0

Moveto "CFACP"
NR = NIMAGERECORDS()
Scan
  NPED=[Numero do Pedido]

  Barra(NR, RecNo())
  Aguarde("Aguarde, processando pedido "+NPED+" "+BARRA_STRING)

  Moveto "\\Sistemas\\Vendas\\Pedidoi"
  Moveto [Numero do Pedido]
  Locate NPED
  If Not Retval
     Then Mensagem("Item(s) do pedido "+NPED+" n„o localizado(s) !")
          Moveto "CFACP"
          Loop
  EndIf

  While [Numero do Pedido]=NPED
   CopyToArray REGISTRO_F1

   ;---- Transformando em Semi-Acabado -------------------
   If SubStr(REGISTRO_F1["Codigo do Item"],1,2) = "02"
      Then REGISTRO_F1["Codigo do Item"] = "03"+SubStr(REGISTRO_F1["Codigo do Item"],3,10)      
   EndIf  

   Itemok=False
   Moveto "CFACRIG"
   End 
   Down
   Moveto [Codigo do Item]
   If Busca_Lookup("Codigo do Item",REGISTRO_F1["Codigo do Item"],"Item "+REGISTRO_F1["Codigo do Item"]+" n„o cadastrado!//Corrigir este item no pedido "+NPED)
      Then 
           refer=REG_BUSCA_LOOKUP["Referencia"]
           cor  =REG_BUSCA_LOOKUP["Codigo da Cor_Tecido"]
           
           [Codigo do Item]=REGISTRO_F1["Codigo do Item"]
           Array_Monta_Grade_Producao("")
        
           indice=1
           For i From 1 to 12
             TM=RTrim(SubStr(Array_TM[i],4,2))
             If Len(TM)=1
                Then If SubStr(REGISTRO_F1["Codigo do Item"],10,1)=TM
                        Then coditem=SubStr(REGISTRO_F1["Codigo do Item"],1,9)+TM
                             Indice=i
                             QuitLoop
                     EndIf
                Else If SubStr(REGISTRO_F1["Codigo do Item"],09,2)=TM
                        Then coditem=SubStr(REGISTRO_F1["Codigo do Item"],1,8)+TM
                             Indice=i
                             QuitLoop
                     EndIf
             EndIf
           EndFor

           ;Moveto [Codigo do Item]
           ;If Busca_Lookup("Codigo do Item",coditem,"Item "+coditem+" n„o cadastrado!//Corrigir referencia "+refer+" no pedido "+NPED)
           ;   Then refer=REG_BUSCA_LOOKUP["Referencia"]
           ;        cor  =REG_BUSCA_LOOKUP["Codigo da Cor_Tecido"]
           ;EndIf

           qtdprog=REGISTRO_F1["Quantidade"]-REGISTRO_F1["Quantidade Faturada"]
           If qtdprog<=0
              Then Mensagem("Item "+StrVal([\Sistemas\Vendas\PedidoI->Item do Pedido])+" do pedido "+NPED+" j  faturado !")
              Else itemok=true 
           EndIf
   EndIf
   Del

   If itemok
      Then qtdped=qtdped+qtdprog

           ItemNovo=True
           Moveto "CFACRIG"
           Moveto [Referencia]
           Locate refer
           While [Referencia]=refer
             If [Codigo da Cor_Tecido]=cor
                Then ItemNovo=False
                     QuitLoop
             EndIf
             Skip
             If EOT() Then QuitLoop EndIf
             Locate Next refer
           EndWhile
           If ItemNovo
              Then Seq=Seq+1
                   End
                   Down
                   [Sequencia do Lancamento ]=Seq
                   [Codigo do Item          ]=codItem
                   [Descricao do Item       ]=Completa(Substr([Descricao do Item],1,27),30," ")
           EndIf

           Switch
             Case indice=1:   [Qtd1]  =[Qtd1] +QtdProg
             Case indice=2:   [Qtd2]  =[Qtd2] +QtdProg
             Case indice=3:   [Qtd3]  =[Qtd3] +QtdProg
             Case indice=4:   [Qtd4]  =[Qtd4] +QtdProg
             Case indice=5:   [Qtd5]  =[Qtd5] +QtdProg
             Case indice=6:   [Qtd6]  =[Qtd6] +QtdProg
             Case indice=7:   [Qtd7]  =[Qtd7] +QtdProg
             Case indice=8:   [Qtd8]  =[Qtd8] +QtdProg
             Case indice=9:   [Qtd9]  =[Qtd9] +QtdProg
             Case indice=10:  [Qtd10] =[Qtd10]+QtdProg
             Case indice=11:  [Qtd11] =[Qtd11]+QtdProg
             Case indice=12:  [Qtd12] =[Qtd12]+QtdProg
           EndSwitch

           [Quantidade Programada]=[Quantidade Programada]+QtdProg
           UnLockRecord

   EndIf

   Moveto "\\Sistemas\\Vendas\\PedidoI"
   Skip
   If EOT() Then QuitLoop EndIf
  EndWhile

  Moveto "CFACP"
EndScan                     

Moveto "CFACC"
[Quantidade_Programada]=QtdPed
UnLockRecord

Moveto "CFACRIG"
LimpAguarde()
EndProc

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

ntab=table()

Moveto "CFACRIG"
If RecordStatus("New")
   Then MENSAGEM("Sem Item p/ imprimir !")
        Moveto ntab
        Return False
EndIf
Moveto ntab


Echo Normal
Echo Off
ShowPopup " Relatorio " CENTERED
   "~I~mprimir " : " Imprime Programca‡„o Corte"   :"Program01",
   "~C~ancelar"  : " Cancelar                  "   :"CANCELAR"
EndMenu
To Opcaoc

Echo off

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

Gera_Cfacri()
Moveto "CFACC"

NCORT=[CFACC->Numero_Corte]
UnLockRecord
Do_It!

Dispositivo()
If OK=""
   Then CoEditKey
        Return False
EndIf

gerou_cfacri=True
LoopdoDispositivo=False

Play PARAM_RELATORIO

AbreTabelas()
PickForm "2"
Return True
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_REPRESEN"       : Campo="TG_EMPRESA"
            Case Campo="TG_CIDADE"         : Campo="TG_REPRESEN"
            Case Campo="TG_NCONTROLE"      : Campo="TG_CIDADE"
            Case Campo="TG_NCARREG"        : Campo="TG_NCONTROLE"
            Case Campo="TG_MARCA"          : Campo="TG_NCARREG"
            Case Campo="TG_SITUACAOPEDIDO" : Campo="TG_MARCA"
            Case Campo="TG_OPERACAOPEDIDO" : Campo="TG_SITUACAOPEDIDO"
            Case Campo="TG_OPDTPEEI"       : Campo="TG_OPERACAOPEDIDO"
            Case Campo="TG_DTINI"          : Campo="TG_OPDTPEEI"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"        : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"       : Campo="TG_CIDADE"
                    Case Campo="TG_CIDADE"         : Campo="TG_NCONTROLE"
                    Case Campo="TG_NCONTROLE"      : Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"        : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"          : Campo="TG_SITUACAOPEDIDO"
                    Case Campo="TG_SITUACAOPEDIDO" : Campo="TG_OPERACAOPEDIDO"
                    Case Campo="TG_OPERACAOPEDIDO" : Campo="TG_OPDTPEEI"
                    Case Campo="TG_OPDTPEEI"       : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"          : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"          : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="": MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Filtrar Registros                                                    *
;*******************************************************************************
Proc Selecao()
LimpAguarde()
Do_It!
ClearAll

Echo Normal
Echo Off

While True

  ShowDialog "Sele‡„o de Pedidos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 17 Width 72

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

    Label  @ 02,00 "Representante"  For "TG_REPRESEN"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMREPR"  To VSDGNOMREPR

    Label  @ 04,00 "Cidade"  For "TG_CIDADE"
    Accept @ 05,01 Width 33 "A20" Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE

    Label  @ 06,00 "Controle Dia" For "TG_NCONTROLE"
    Accept @ 07,01 Width 9  "A6"  Picture "#*#" Tag "TG_NCONTROLE"    To VSDGNCONTROLE
    Accept @ 07,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMNCONTROLE" To VSDGNOMNCONTROLE

    Label  @ 08,00 "N§ Carregamento" For "TG_NCARREG"
    Accept @ 09,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

    Label  @ 10,00 "Marca"  For "TG_MARCA"
    Accept @ 11,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 11,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 00,35 "Situacao do Pedido"  For "TG_SITUACAOPEDIDO"
    Accept @ 01,36 Width 33 "A30"  Picture "ABERTO,SUSPENSO,CANCELADO,FATURADO,TODAS,!*!" Tag "TG_SITUACAOPEDIDO"  To VSDGSITUACAOPEDIDO

    Label  @ 02,35 "Opera‡Æo do Pedido"  For "TG_OPERACAOPEDIDO"
    Accept @ 03,36 Width 33 "A30"  Picture "VENDAS,BONIFICACAO/BRINDE,REMESSAS,TODAS,!*!" Tag "TG_OPERACAOPEDIDO"  To VSDGOPERACAOPEDIDO

    Label  @ 04,35 "Op‡äes de Datas" For "TG_OPDTPEEI"
    Accept @ 05,39 Width 04 "A1"  Picture "1,2,3,4,5"  Tag "TG_OPDTPEEI"  To VSDGOPDTPEEI
    Accept @ 05,44 Width 25 "A20" Picture "!*!"      Tag "TG_NOMOPDTPEEI" To VSDGNOMOPDTPEEI

    Label  @ 06,35 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 07,38 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,51 "at‚" For "TG_DTFIM"
    Accept @ 07,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Pushbutton @ 13,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 13,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog

  SelecaoOK=False
  If Not RetVal
     Then QuitLoop
  endif

  switch
    case VSDGSITUACAOPEDIDO="ABERTO"                     : SelecaoOK=True
    case VSDGSITUACAOPEDIDO="SUSPENSO"                   : SelecaoOK=True
    case VSDGSITUACAOPEDIDO="JUNTAR ABERTO+SUSPENSO"     : SelecaoOK=True
  EndSwitch
  if not SelecaoOK
     then Mensagem("Op‡Æo de situa‡Æo do pedido inv lida !")
          loop
  endif        
  SelecaoOK=False
          
  LimpaRodape(0)
  Aguarde("Aguarde, Selecionando registros")
  ClearAll

  switch
    case Not IsBlank(VSDGNCONTROLE):
      {Ask} {\\Sistemas\\Vendas\\PedidoC} 
      Moveto [Numero do Pedido       ] check
      Moveto [Numero_Controle_Dia    ] TypeIn "~VSDGNCONTROLE.."
      
    otherwise:

      switch
        case not isblank(VSDGMARCA):
          {Ask} {\\Sistemas\\Estoque\\Itens}
          Moveto [Codigo do Item         ] Example "item"
          Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
          {Ask} {\\Sistemas\\Vendas\\PedidoC} 
          Moveto [Numero do Pedido      ] check typein "_nped"

        otherwise:
         {Ask} {\\Sistemas\\Vendas\\PedidoC}
         Moveto [Numero do Pedido       ] check
      endswitch 

      Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
      If Upper(VSDGCIDADE)<>"TODAS"
         Then Moveto [Cidade         ] TypeIn "~VSDGCIDADE"
      EndIf
      
      if VSDGOPDTPEEI="1" Then Moveto [Data de Entrega ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM" endif
      If VSDGOPDTPEEI="2" Then Moveto [Data de Emissao ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM" endif
      if VSDGOPDTPEEI="3" Then Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM" endif
      
      Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
      Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."
      Moveto [Situacao do Pedido     ]    
      switch
        case VSDGSITUACAOPEDIDO="JUNTAR ABERTO+SUSPENSO"     : TypeIn "ABERTO or SUSPENSO"
        case VSDGSITUACAOPEDIDO="IGNORAR CANCELADO+SUSPENSO" : TypeIn "not CANCELADO, not SUSPENSO"
        case VSDGSITUACAOPEDIDO="IGNORAR CANCELADO"          : TypeIn "not CANCELADO"
        case VSDGSITUACAOPEDIDO<>"TODAS"                     : TypeIn "~VSDGSITUACAOPEDIDO.."
      EndSwitch
      
      switch
        case VSDGOPERACAOPEDIDO="VENDAS"             : Moveto [Descricao da Destinacao] TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
        case VSDGOPERACAOPEDIDO="BONIFICACAO/BRINDE" : Moveto [Descricao da Destinacao] TypeIn "..BONIF.. Or ..BRINDE.."
        case VSDGOPERACAOPEDIDO="REMESSAS"           : Moveto [Descricao da Destinacao] TypeIn "..REMESSA.."
        case VSDGOPERACAOPEDIDO="VENDAS+REMESSAS"    : Moveto [Descricao da Destinacao] TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.. or ..REMESSA.."
      endswitch  

      switch
        case not isblank(VSDGMARCA):
          {Ask} {\\Sistemas\\Vendas\\PedidoI}
          moveto [Numero do Pedido       ] typein "_nped"
          Moveto [Codigo do Item         ] Example "item"
      endswitch 
  
  endswitch
  Do_It!
  ClearAll

  If IsEmpty("Answer")
     Then Mensagem("N„o exitem registros conforme sele‡„o !")
          Loop
  endif

  View "CFACP"
  Coedit "Answer"
  Scan
    Moveto "CFACP"
    Moveto [Numero_Corte]
    Locate NCORT,[Answer->Numero do Pedido]
    If Not RetVal
       Then End
            Down
            [Numero_Corte     ]=NCORT
            [LooKup_PedidoC   ]=[Answer->Numero do Pedido ]
            [Numero do Pedido ]=[Answer->Numero do Pedido ]
            [LooKup_PedidoC   ]=""

            SelecaoOK=True
    EndIf

    Moveto "Answer"
  EndScan
  Do_It!
  ClearAll

  QuitLoop

EndWhile
ClearAll
If IsTable("Answer")
   Then Delete "Answer"
EndIf

View NoWindow "CFACRIG"
View NoWindow "CFACP"
CoEdit "CFACC"
PickForm "2"
Moveto [Numero_Corte]
Locate NCORT
If Not RetVal
   Then FINALIZADO=True
        Tecla_Funcao=""
   Else Tecla_Funcao=-25

        Moveto "CFACP"
        If SelecaoOk
           Then Scan For IsBlank([Quantidade Programada])
                  NPED=[Numero do Pedido]
                  Atualiza_Itens("Entrada")

                  Moveto "CFACP"
                EndScan
        EndIf
EndIf

EndProc

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

wcg=0
While [Codigo do Item]=VSD_I_Codigo_Item   
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And 
         (SYS_CODIGO_CLIENTE="0222" or
          SYS_CODIGO_CLIENTE="0232" ):
         wcg=wcg+1
         Opcoes[wcg]=AlinhM(StrVal([Sequencia da Cor_Tecido]),4)+"  "+[Codigo da Cor_Tecido]+"-"+Completa([Descricao da Cor_Tecido],30," ")
         
    Case OPCAODIVERSAS="Codigo da Cor_Tecido":
         wcg=wcg+1
         Opcoes[wcg]=Completa([Descricao da Cor_Tecido],30," ")+" "+[Codigo da Cor_Tecido]+" - "+Format("W2,AR",[Sequencia da Cor_Tecido])
  EndSwitch
  Skip
  IF EOT() Then QuitLoop EndIf
EndWhile
KeyPress "ESC"
Moveto Field nomecampo
EndProc    ; (Monta_Opcoes)

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

If DynArraySize(Opcoes)=0
   Then Return False
EndIf

resultado=false
For icg From 1 To DynArraySize(Opcoes)
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And 
         ( SYS_CODIGO_CLIENTE="0222" or
           SYS_CODIGO_CLIENTE="0232" ):
         If RTrim(SubStr(Opcoes[icg],07,4))=VALORDESEJADO
            Then resultado=true
         EndIf
         
    Case OPCAODIVERSAS="Codigo da Cor_Tecido":
         If RTrim(SubStr(Opcoes[icg],32,4))=VALORDESEJADO
            Then resultado=true
         EndIf
  EndSwitch
  If resultado
     then MontaRegistro_F1(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc         ;  (Checa_Opcoes)

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

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

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

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

AJ=DynArraySize(Opcoes)
If AJ>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)


;*******************************************************************************
;* Rotina para Montar Grade dos Itens do Pedido                                *
;*******************************************************************************
Proc Array_Monta_Grade_Producao(Tipo)
Private i,tm,ItemPesq,Itok,ContIt,Tipo

If IsBlank([Codigo do Item])
   Then grdant="***"
        For i From 1 to 12
          Array_TM[i]="F"
        EndFor
        Return True
   Else If Not IsAssigned(grdant) Then grdant = "***" EndIf     
EndIf

ItemPesq=[Codigo do Item]

If [Codigo da Grade]<>grdant Or Rtrim(grdant)=""
   Then grdant=[Codigo da Grade]
        Moveto [Codigo da Grade]
        If Not Busca_Lookup("Codigo da Grade",[Codigo da Grade],"Item "+ItemPesq+" com defini‡„o de grade incorreta !//Verificar !")
           Then Return False
        EndIf
        
        Array_TM[1] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade1"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item1"]))
        Array_TM[2] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade2"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item2"]))
        Array_TM[3] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade3"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item3"]))
        Array_TM[4] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade4"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item4"]))
        Array_TM[5] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade5"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item5"]))
        Array_TM[6] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade6"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item6"]))
        Array_TM[7] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade7"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item7"]))
        Array_TM[8] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade8"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item8"]))
        Array_TM[9] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade9"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item9"]))
        Array_TM[10]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade10"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item10"]))
        Array_TM[11]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade11"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item11"]))
        Array_TM[12]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade12"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item12"]))
Endif

If PARAM_COR_TECIDO="S" And [Tipo do Item]="D"
   Then	Return True
EndIf       

If Tipo<>"Valida"
   Then	Return True
EndIf       

ContIt = 0
For iy From 1 to 12
  Array_TM[iy]="F"+SubStr(Array_TM[iy],2,Len(Array_TM[iy]))
  
  Tm=LTrim(RTrim(SuBstr(Array_TM[iy],4,2)))
  If Ltrim(Tm)="" Or Len(TM)=0 Then Loop EndIf 
  
  Switch
    Case Len(Tm)=1 : ItemPesq=SubStr(ItemPesq,1,9)+TM 
    Case Len(Tm)=2 : ItemPesq=SubStr(ItemPesq,1,8)+TM 
  EndSwitch

  ItOk   = True
  MSG    = ""
  GetRecord "\\Sistemas\\Estoque\\Itens" ItemPesq To REG_ITEM
  If RetVal
     Then If REG_ITEM["Inativo"]<>"S" And REG_ITEM["Producao Esgotada"]<>"S"
             Then ContIt=ContIt+1
                  Array_TM[iy]="T"+RTrim(SubStr(Array_TM[iy],2,4))
             Else If SYS_CODIGO_CLIENTE<>"0227"   ;NÆo quer que a mensagem seja exibida
                    Then Switch
                           Case REG_ITEM["Inativo"]="S"           : MSG = "Item "+ItemPesq+" inativo//Verificar!"
                           Case REG_ITEM["Producao Esgotada"]="S" : MSG = "Item "+ItemPesq+" com produ‡Æo esgotada//Verificar!" 
                         EndSwitch
                  EndIf                
          EndIf
     Else MSG = "Item "+ItemPesq+" n„o foi localizado no cadastro de itens//Verificar!"
  EndIf
  If MSG<>""
     Then Mensagem(MSG)
  EndIf
EndFor
If ContIt=0
   Then Mensagem("Itens "+ItemPesq+".. Inativos/Esgotado//Verificar !")
        ItOk = False
EndIf
Return ItOk

EndProc ;Array_Monta_Grade_Producao()

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

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 [Cfacc->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else     
                PARAM_EMPRESA         = [Codigo_Empresa           ]
                PARAM_COR_TECIDO      = [Cor_Tecido               ]
                PARAM_RELATORIO       = [Script_Impressao_ProgCort]

                Result=True
        EndIf
EndIf

Moveto "Cfacc"
KeyPress "F7"

Return Result
EndProc

Proc AbreTabelas()
View NoWindow "P_FAC"
View NoWindow "CFACP"
View NoWindow "CFACRI"
View NoWindow "CFACRIG"
CoEdit "CFACC"
EndProc


;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
EndProc

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

FINALIZADO=False
While Not FINALIZADO

  Tecla_Funcao=BlankNum()
  DIGITA()
  SetaCorRegistro("Padrao")

  If CHAVE=9 Then QuitLoop EndIf
  If CHAVE=1
     Then Controle_Dia()
  EndIf   

  While Not IsBlank(Tecla_Funcao)

    Switch
      Case Tecla_Funcao="F6":
           If Imprime()
               Then FINALIZADO=True
                    Tecla_Funcao=""
           EndIf
           Switch
             Case Table()="Cfacc"  : Tecla_Funcao=""
             Case Table()="Cfacp"  : Tecla_Funcao=-25
             Case Table()="Cfacrig": Tecla_Funcao=-19
           EndSwitch

      Case Tecla_Funcao="F5":
           Switch
             Case Table()="Cfacc" Or
                  Table()="Cfacp"   :
                                      Tecla_Funcao=-25
                                      Selecao()
             Case Table()="Cfacrig" : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Pedidos")
           EndSwitch

      Case Tecla_Funcao=-24:
           Tabela=Table()
           Moveto "CFACC"
           Edita_Memo("Observacoes",08,07,12,65,"Observa‡”es")
           Moveto Tabela
           Switch
             Case Table()="Cfacc"   : Tecla_Funcao=""
             Case Table()="Cfacp"   : Tecla_Funcao=-25
             Case Table()="Cfacrig" : Tecla_Funcao=-19
           EndSwitch

      Case Tecla_Funcao=-25:
           Pedidos()
           SetaCorRegistro("Padrao")

      Case Tecla_Funcao=-18:
           Switch
             Case Table()="Cfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Cfacp"   : Tecla_Funcao=-25
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Cfacrig" : Tecla_Funcao=-19
                                      Editar("")
           EndSwitch

      Case Tecla_Funcao=-30:
           Switch
             Case Table()="Cfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Cfacp"   : Tecla_Funcao=-25
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Cfacrig" : Tecla_Funcao=-19
                                      Carrega_ItensPedidos()
           EndSwitch

      Case Tecla_Funcao=-19:
           While True
             CHAVEI()
             If CHAVEI=9 Then QuitLoop EndIf
             Controla_EdicaoI()
           EndWhile
           SetaCorRegistro("Padrao")
           
      OtherWise            : QuitLoop
    EndSwitch

  EndWhile

  If Finalizado
     Then If Not gerou_cfacri
             Then Gera_Cfacri()
          Endif
  EndIf

  Moveto "CFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

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

VSDGEMPRESA  =""
VSDGREPRESEN =""
VSDGCIDADE   =""
VSDGNCONTROLE=""
VSDGNCARREG  =""
VSDGDTINI    =BlankDate()
VSDGDTFIM    =BlankDate()

TG_OPDTPEEI       =""
VSDGMARCA         =""
VSDGSITUACAOPEDIDO="ABERTO"
VSDGOPERACAOPEDIDO=""


Array Array_TM[12]
grdant="***"

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

AbreTabelas()
PickForm "1"
moveto "Cfacp"  SetaCorRegistro("Padrao")
moveto "Cfacri" SetaCorRegistro("Padrao")
moveto "Cfacc" 
PickForm "F"
OPCAO_FORM="F"
While True
  CHAVE()
  If CHAVE=9 Then QuitLoop EndIf
  If CHAVE=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "2"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

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

Release Vars All
Release Procs All
