;** ProgFC *********************************************************************
;*  Programacao de Fusao                                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/07/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 27/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Funcionario/Assistente
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 02/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Requisicao()
;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: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 14/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Imprimir para EBF
;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: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes descricao do movimento/operacao                   
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LimpaRodape()                  
;Ultima Alteracao: 27/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para gera‡Ćo/verifica‡Ćo do [Numero_Fusao] 
;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: 25/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desativar tecla alt+O (-24) ir ao prompt do DOS
;Ultima Alteracao: 11/02/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes de padroniza‡Ćo nos campos [TG_CIDADE] e [TG_ESTADO]

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

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

  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":
             Del
             While True
               INICIO=True
               campocorrente=""

               If OPCAO_FORM="F"
                  Then PAGINA("ProgfC","MR")
                  Else PAGINA("ProgfC","MT")
               EndIf
               CHAVE=0
               NCORT   =[Numero_Fusao]
               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 OPCAO_FORM="F"
                                          Then PickForm "2"
                                       EndIf
                                       EXCLUSAO("Cabeca")
                                       If OPCAO_FORM="F"
                                          Then PickForm "F"
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVE=9
             Del
             Return
        Case Retval="ENTER":     
             If Numero_Lancamento("","F")
                Then NCORT = PROXLANCTO_NLANC
                     Release Vars PROXLANCTO_NLANC 
                Else QuitLoop
             EndIf
             PickForm "2"
             Moveto [Numero_Fusao]
             If PROXIMO_LANCTO_REG_ACHOU
                Then CHAVE=0
                     If Checa_Controle([Numero_Controle_Dia])
                        Then Return
                     EndIf
                Else CHAVE=1
                     If Checa_Controle(SYS_CONTROLE_DIA)
                        Then Return
                        Else OPCAO_FORM="F" 
                     EndIf
             EndIf          
             If OPCAO_FORM="F"
                Then PickForm "F"
             EndIf
             If CHAVE=1
                Then Del
             EndIf
             QuitLoop
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (Chave)

;*******************************************************************************
;* Rotina para Digitacao Dados Gerais                                          *
;*******************************************************************************
Proc DIGITA()
If IsBlank(campocorrente)
   Then If [Situacao_Programacao]="FINALIZADA" And INICIO
           Then Mensagem("Programa‡„o Fus„o 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","PGDN","DOWN",
								 -33,"F6","F5",-24,-25,-19,-49,-18,-30,-34,-32,-115,-116

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

      Switch

      Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
           RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
           RetVal=-35  Or RetVal=-36  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]
           Case Field()="Responsavel":
                Moveto [Hora_Fim_Processo]
           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
                           EXCLUSAO("Cabeca")
                           QuitLoop
                   EndIf
           EndIf
      Case RetVal="DOWN" And CHAVE=0:
           Tecla_Funcao=-36
           Return
      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
               Moveto [Hora_Programacao]
          Case Field()="Hora_Programacao"  :
               If IsBlank([])
                  Then []=Time()
               EndIf
               Moveto [Situacao_Programacao]
          Case Field()="Situacao_Programacao"  :
               If IsBlank([])
                  Then []="PROGRAMADA"
               EndIf
               Right
          Case Field()="Hora_Fim_Processo"  :
               Moveto [Responsavel]
          Case Field()="Responsavel"  :
               If IsBlank([])
                  Then []="PROGRAMADA"
               EndIf
               Tecla_Funcao=-36
               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 Molda‡„o" :"F6",
 "~S~ele‡„o de Pedidos   [F5]   ": " Sele‡„o de Pedidos           " :"F5",
 "~O~bserva‡”es          [Alt+O]": " Observa‡”es                  " :"-24",
 SEPARATOR,
 "C~a~rrega Itens        [Alt+A]": " Carregar Itens dos Pedidos   " :"-30",
 "Carre~g~a Consumo      [Alt+G]": " Carregar Itens a Consumir    " :"-34",
 "~E~ditar               [Alt+E]": " Editar quantidades a Produzir" :"-18",
 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<>"F5" And MenuVar<>"F6"
   Then Tecla_Funcao=NumVal(MenuVar)
   Else Tecla_Funcao=MenuVar
EndIf

Return True

EndProc


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

Moveto "ProgfP"
End
Down

While True
  Moveto "ProgfP"
  Moveto [Quantidade Programada] TOTPROGQ= ImageCSum()
  Moveto [Peso_Programado      ] TOTPROGP= ImageCSum()

  Moveto "ProgfC"
  Moveto [Numero_Fusao]
  [Quantidade_Pedidos   ]=TOTPROGQ
  [Peso_Pedidos         ]=TOTPROGP
  UnLockRecord

  Moveto "ProgfP"
  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,"F6","F5",-24,-25,-19,-49,-18,-30,-34,-32,-115,-116

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

    Switch
    Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
         RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
				 RetVal=-115 Or RetVal=-116 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":
         Del
         While True
           Moveto "ProgfP"
           Moveto [Quantidade Programada] TOTPROGQ= ImageCSum()
           Moveto [Peso_Programado      ] TOTPROGP= ImageCSum()

           Moveto "ProgfC"
           Moveto [Numero_Fusao]
           [Quantidade_Pedidos   ]=TOTPROGQ
           [Peso_Pedidos         ]=TOTPROGP
           UnLockRecord

           Moveto "ProgfP"

           PAGINA("ProgfP","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 [Lookup_PedidoC  ]=NPED
                            [Numero do Pedido]=NPED
                            Atualiza_Itens("Entrada")
                       Else Mensagem("Pedido n„o encontrado !")
                            Del
                            QuitLoop
                    EndIf
            EndIf

            QuitLoop
       EndSwitch

    EndSwitch
  EndWhile
EndWhile
EndProc

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

Moveto "Progfri"
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 "Progfri"
        Moveto [Quantidade Programada] TOTPROGQ= ImageCSum()
        Moveto [Peso_Programado      ] TOTPROGP= ImageCSum()

        Moveto "ProgfC"
        [Quantidade_Programada]=TOTPROGQ
        [Peso_Programado      ]=TOTPROGP
        UnLockRecord

        Moveto "Progfri"
        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,"F6","F5",-24,-25,-19,-49,-18,-30,-34,-32,-115,-116

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

        Switch
        Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
             RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
						 RetVal=-115 Or RetVal=-116 Or
             RetVal="F6" Or RetVal="F5":
             Tecla_Funcao=RetVal
             Del
             CHAVEI=9
             Return

        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="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             del
             While True
               Moveto "Progfri"
               Moveto [Quantidade Programada] TOTPROGQ= ImageCSum()
               Moveto [Peso_Programado      ] TOTPROGP= ImageCSum()

               Moveto "ProgfC"
               [Quantidade_Programada]=TOTPROGQ
               [Peso_Programado      ]=TOTPROGP
               UnLockRecord

               Moveto "Progfri"
               Moveto [Sequencia do Lancamento]

               PAGINA("Progfri","MR")
               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then CHAVEI=0
                       Controla_EdicaoI()
                  Else If EXCLUIR="S"
                          Then If QuerEXcluir("")
                                  Then EXCLUSAO("Item")
                                       Moveto "Progfri"
                                  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_Fusao           ] = 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="I_Quantidade"
           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
                            CopyFromArray RegItem
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="I_Codigo_Item" Then Moveto [Codigo do Item ] EndIf

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

                    echo Normal
                    echo off

                    If Campo="I_Codigo_Item"
                       Then VSD_I_Codigo_Item    =[Codigo do Item    ]
                            VSD_I_Descricao_Item =[Descricao do Item ]
                            VSD_I_Tipo_Item      =[Tipo do Item      ]
                            VSD_I_UN_Item        =[Unidade Fiscal    ]
                            Campo="I_Codigo_Item"
                    EndIf

                    Moveto "Progfri"
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then Del
                          CancelDialog
                  EndIf
             Case Campo="I_Quantidade"     : Campo="I_Codigo_Item"
                  If CHAVEI=0
                     Then If QuerDesfazer("")
                             Then CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  EndIf
             Case Campo="I_Flag"           : Campo="I_Quantidade"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Codigo_Item":
                  VSD_I_Codigo_Item=AlinhM(ControlValue("I_Codigo_Item"),10)
                  Moveto [Codigo do Item]
                  Ativa_Lookup()
                  Moveto [Codigo do Item]
                  Locate VSD_I_Codigo_Item
                  If RetVal
                     Then If [Inativo]="S"
                             Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                                  KeyPress "ESC"
                             Else KeyPress "ESC"
                                  [Codigo do Item       ]=VSD_I_Codigo_Item

                                  Registro_Item("Ler")
                                  RefreshDialog

                                  Moveto "Progfri"
                                  Campo="I_Quantidade"
                          EndIf
                     Else Mensagem("Item n„o Cadastrado !")
                          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_Peso          =BlankNum()
                          VSD_I_PesoT         =BlankNum()
                          KeyPress "ESC"
                  EndIf
                  Echo Off

             Case Campo="I_Quantidade"  : Campo="I_Flag"
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  VSD_I_PesoT     =VSD_I_Quantidade*[Peso Liquido]
             Case Campo="I_Flag"        : AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  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 Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [Progfc->Numero_Fusao   ],ITEM
CopyToArray RegItem

Echo Normal
Echo Off

Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Itens a Produzir                                      *
;*******************************************************************************
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 06 width 78

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

   Label  @ 00,01 "C˘digo Item" 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,01 "Quantidade" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

   Label  @ 02,14 "UN" For "I_UN_Item"
   Accept @ 03,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
              
   Label  @ 02,20 "Peso" For "I_Peso"
   Accept @ 03,21 Width 13 "N" picture "#*#.[###]" Tag "I_Peso" to VSD_I_Peso

   Label  @ 02,34 "Total" For "I_PesoT"
   Accept @ 03,35 Width 13 "N" picture "#*#.[###]" Tag "I_PesoT" to VSD_I_PesoT

   Accept @ 03,49 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 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

       [Quantidade Programada]=VSD_I_Quantidade
       [Unidade Fiscal       ]=VSD_I_UN_Item
       [Peso Liquido         ]=VSD_I_Peso

  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]

       VSD_I_Quantidade             =[Quantidade Programada     ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Peso                   =[Peso Liquido]
       VSD_I_PesoT                  =[Quantidade Programada     ]*[Peso Liquido]

EndSwitch

EndProc  ; (Registro_Item)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO
Switch
Case TIPO="Cabeca":
     Moveto "Progfl"
     While RecordStatus("New")=False
       Del
     EndWhile

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

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

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

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

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

     Moveto "Progfc"
     Requisicao("Exclusao")
     Del
Case TIPO="Item":
     Moveto "Progfri"
     Del
Case TIPO="ItemIC":
     Moveto "Progfrm"
     Del
Case TIPO="ItemIP":
     Moveto "Progfrp"
     Del
Case TIPO="ItemIPR":
     Moveto "Progfpr"
     Del
EndSwitch
EndProc  ; (Exclusao)

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

Moveto [Quantidade_Programada]

While True

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

   Switch
     Case SubStr(Field(),1,10)="Quantidade"     : 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()="Quantidade_Programada" : Moveto [Quantidade_Programada]
             Case RetVal="RIGHT" And Field()="Quantidade_Programada" : Moveto [Quantidade_Programada]
             OtherWise : KeyPress Tecla_Press
           EndSwitch

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

ImageRights
EndProc

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

CampoAnterior=Field()

[Peso_Programado]=[Quantidade_Programada]*[Peso Liquido]
UnLockRecord

Moveto [Peso_Programadoa]
TOTQTD= ImageCSum()

Moveto "ProgfC"
[Peso_Programado]=TOTQTD
UnLockRecord

Moveto "ProgfRI"
Moveto Field CampoAnterior

EndProc

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

pedok =true
qtdped  =0
qtdpedps=0

Moveto "ProgfC"

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=False
  Moveto "FormulaI"
  Moveto [Codigo do Produto]
  Locate REGISTRO_F1["Codigo do Item"]
  If RetVal
     Then While [Codigo do Produto]=REGISTRO_F1["Codigo do Item"]
            If [Tipo do Item]="D" Then
               Moveto "Progfl"
               Scan For [Codigo do Item]=[FormulaI->Codigo do Material]
                 Itemok=True
                 QuitLoop
               EndScan
            EndIf
            If Itemok Then QuitLoop EndIf
            Skip
            If Eot() Then QuitLoop EndIf
          EndWhile
  EndIf

  Moveto "\\Sistemas\\Vendas\\PedidoI"
  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
          qtdpedps=qtdpedps+(qtdprog*REGISTRO_F1["Peso Liquido"])
  EndIf

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

EndWhile

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

EndProc

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

Moveto "ProgfP"
If RecordStatus("New")=True
   Then Moveto "Progfri"
				Mensagem("N„o existe(m) Pedidos relacionados !")
        Return
EndIf

ConfGeral("Deseja carregar os itens dos Pedidos ?")
If OK<>"S"
   Then Return
Endif

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

Moveto "Progfl"
If RecordStatus("New")=False
   Then CHECALIGA=True
   Else CHECALIGA=False
EndIf

qtdped  =0
qtdpedps=0
seq     =0

Moveto "ProgfP"
NR = NIMAGERECORDS()
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, processando pedidos "+BARRA_STRING)

  NPED=[Numero do Pedido]

  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 "ProgfP"
          Loop
  EndIf

  While [Numero do Pedido]=NPED
   CopyToArray REGISTRO_F1

   If Not CHECALIGA
      Then Itemok=True
      Else Itemok=False
           Moveto "FormulaI"
           Moveto [Codigo do Produto]
           Locate REGISTRO_F1["Codigo do Item"]
           If RetVal
              Then While [Codigo do Produto]=REGISTRO_F1["Codigo do Item"]
                     If [Tipo do Item]="D" Then
                        Moveto "Progfl"
                        Scan For [Codigo do Item]=[FormulaI->Codigo do Material]
                          Itemok=True
                          QuitLoop
                        EndScan
                     EndIf
                     If Itemok Then QuitLoop EndIf
                     Skip
                     If Eot() Then QuitLoop EndIf
                   EndWhile
           EndIf
           Moveto "\\Sistemas\\Vendas\\PedidoI"
   EndIf

	 If itemok Then
			Moveto "ProgfRI"
			End Down
			Moveto [Codigo do Item]
			If Not Busca_Lookup("Codigo do Item",REGISTRO_F1["Codigo do Item"],"")
				 Then itemok=false
			EndIf
			Del

			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 !")
							itemok=false
			EndIf
   EndIf

   If itemok
      Then
           qtdped  =qtdped+qtdprog
           codItem =REGISTRO_F1["Codigo do Item"]

           ItemNovo=True
           Moveto "ProgfRI"
           Moveto [Codigo do Item]
           Locate REG_BUSCA_LOOKUP["Codigo do Item"]
           If RetVal
              Then ItemNovo=False
           EndIf
           If ItemNovo
              Then Seq=Seq+1
                   End
                   Down
                   [Sequencia do Lancamento ]=Seq
                   [Codigo do Item          ]=codItem
           EndIf

           [Quantidade Programada]=[Quantidade Programada]+QtdProg
           [Peso_Programado      ]=[Quantidade Programada]*[Peso Liquido]
           qtdpedps               =qtdpedps+([Quantidade Programada]*[Peso Liquido])
           UnLockRecord
   EndIf

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

  Moveto "ProgfP"
EndScan

Moveto "Progfri"
LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina Observacoes                                                          *
;*******************************************************************************
Proc  Observacao()
Private Tabela
Tabela=Table() 
Moveto "ProgfC"

Edita_Memo("Observacoes",08,07,12,65,"Observa‡”es")

Moveto Tabela   
EndProc  ; (Observacao)

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

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

Echo off

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

NFUSAO=[ProgfC->Numero_Fusao]
UnLockRecord
Do_It!

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

LoopdoDispositivo=False

Switch
  Case SYS_CODIGO_CLIENTE="0000": Play "PF_0002"
  OtherWise                     : Play "PF_0001"
EndSwitch  

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_ESTADO"        : Campo="TG_CIDADE"
            Case Campo="TG_NCONTROLE"     : Campo="TG_ESTADO"
            Case Campo="TG_NCARREG"       : Campo="TG_NCONTROLE"
            Case Campo="TG_TPDATA"        : Campo="TG_NCARREG"
            Case Campo="TG_DTINI"         : Campo="TG_TPDATA"
            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_ESTADO"
                    Case Campo="TG_ESTADO"    :Campo="TG_NCONTROLE"
                    Case Campo="TG_NCONTROLE" :Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"   :Campo="TG_TPDATA"
                    Case Campo="TG_TPDATA"          :
                         VSDGTPDATA=ControlValue("TG_TPDATA")
                         If IsBlank(VSDGTPDATA)
                              Then VSDGTPDATA="1"
                         EndIf
                         Switch
                           Case VSDGTPDATA="1": VSDGNOMTPDATA="EMISSAO"
                           Case VSDGTPDATA="2": VSDGNOMTPDATA="ENTREGA"
                           Case VSDGTPDATA="3": VSDGNOMTPDATA="INCLUSAO"
                         EndSwitch
                         Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   :Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   :Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_TPDATA":
       MSG_CAMPO="1 = EMISSAO  2 = ENTREGA  3 = INCLUSAO"
  Case Campo="TG_DTFIM":
     MSG_CAMPO="Informe a Data Final"
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 19 Width 56

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 26 "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 26 "A20" Picture "!*!" Tag "TG_NOMREPR"  To VSDGNOMREPR

    Label  @ 04,00 "Cidade"  For "TG_CIDADE"
    Accept @ 05,01 Width 28 "A20"  Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE
                                   
    Label  @ 04,28 "Estado"  For "TG_ESTADO"
    Accept @ 05,29 Width 06 "A2"  Picture "!*!" Tag "TG_ESTADO" To VSDGESTADO

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

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

    Label  @ 10,00 "Op‡äes de Datas" For "TG_TPDATA"
    Accept @ 11,01 Width 07 "A1"  Picture "1,2,3"  Tag "TG_TPDATA"     To VSDGTPDATA
    Accept @ 11,09 Width 26 "A18" Picture "!*!"  Tag "TG_NOMTPDATA" To VSDGNOMTPDATA

    Label  @ 12,00 "Perˇodo Referente" For "TG_DTINI"
    Label  @ 13,00 "de" For "TG_DTINI"
    Accept @ 13,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 13,17 "at‚" For "TG_DTFIM"
    Accept @ 13,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

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

  EndDialog

  SelecaoOK=False
  If Not RetVal
     Then QuitLoop
     Else LimpaRodape(0)
          Aguarde("Aguarde, Selecionando registros")
          ClearAll

          {Ask} {\\Sistemas\\Vendas\\PedidoC} Check
          If Not IsBlank(VSDGNCONTROLE)
             Then Moveto [Numero_Controle_Dia    ] TypeIn "~VSDGNCONTROLE.."
             Else Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
                  If Upper(VSDGCIDADE)<>"TODAS"
                     Then Moveto [Cidade         ] TypeIn "~VSDGCIDADE"
                  EndIf
                  Moveto [UF                     ] TypeIn "~VSDGESTADO.."
                  Switch
                    Case VSDGTPDATA="1": Moveto [Data de Emissao ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                    Case VSDGTPDATA="2": Moveto [Data de Entrega ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                    Case VSDGTPDATA="3": Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                  EndSwitch
                  Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
                  Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."
          EndIf
          Do_It!
          ClearAll
          If IsEmpty("Answer")
             Then Mensagem("N„o exitem registros conforme sele‡„o !")
                  Loop
             Else
                  View "ProgfP"
                  Coedit "Answer"
                  Scan
                    Moveto "ProgfP"
                    Moveto [Numero_Fusao]
                    Locate NCORT,[Answer->Numero do Pedido]
                    If Not RetVal
                       Then End
                            Down
                            [Numero_Fusao     ]=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
          EndIf
  EndIf
EndWhile
ClearAll
If IsTable("Answer")
   Then Delete "Answer"
EndIf

AbreTabelas()
PickForm "2"
Moveto [Numero_Fusao]
Locate NCORT
If Not RetVal
   Then FINALIZADO=True
        Tecla_Funcao=""
   Else Tecla_Funcao=-25

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

                  Moveto "ProgfP"
                EndScan
        EndIf
EndIf

EndProc

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEIC()
Moveto "Progfrm"
While True
  Moveto [Sequencia]
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
    Moveto "Progfrm"
    Moveto [Custo Total]
    CTTOT= ImageCSum()

    Moveto "ProgfC"
    [Custo Total Consumo]=CTTOT
    UnLockRecord

    Moveto "Progfrm"
    Moveto [Sequencia]

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

    Prompt TECLA

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

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

    Switch
    Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
         RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
				 RetVal=-115 Or RetVal=-116 Or
         RetVal="F6" Or RetVal="F5":
         Tecla_Funcao=RetVal
         Del
         CHAVEIC=9
         Return

    Case RetVal="F3":
         Del
         Moveto [Sequencia]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEIC=0
         Home
         SEQIT=[Sequencia]
         Inicia_RegistroIC()
         DigitaIC()
         QuitLoop
    Case RetVal="PGDN":
         Del
         Moveto [Sequencia]
       ;;If RecordStatus("New")=True
       ;;   Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
       ;;        QuitLoop
       ;;EndIf
         CHAVEIC=9
         FINALIZADO=True
         Tecla_Funcao=""
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         del
         While True
           Moveto "Progfrm"
           Moveto [Custo Total]
           CTTOT= ImageCSum()

           Moveto "ProgfC"
           [Custo Total Consumo]=CTTOT
           UnLockRecord

           Moveto "Progfrm"
           Moveto [Sequencia]

           PAGINA("Progfrm","MR")
           SEQIT= [Sequencia]
           If EDITAR="S"
              Then CHAVEIC=0
                   Controla_EdicaoIC()
              Else If EXCLUIR="S"
                      Then If QuerEXcluir("")
                              Then EXCLUSAO("ItemIC")
                                   Moveto "Progfrm"
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Del
         CHAVEIC=9
         Tecla_Funcao=""
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate NCORT,SEQIT
         If Retval
            Then CHAVEIC=0
                 SEQIT=[]
            Else CHAVEIC=1
                 End
                 Down
                 [Numero_Fusao           ] = NCORT
                 [Sequencia              ] = SEQIT
                 Locate NCORT,SEQIT
                 UnLockRecord
                 Locate NCORT,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (CHAVEIC)

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

If INICIO_DIALOG
   Then Campo="I_Codigo_Item"
        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 SEQIT=[Sequencia]
                      Inicia_RegistroIC()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEIC=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEIC=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item" Or
             Campo="I_UN_Item"     Or
             Campo="I_Tipo_Item"
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"       Then Moveto [Lookup_Material]      EndIf
                  If Campo="I_Tipo_Item"         Then Moveto [Tipo do Item]         EndIf
                  If Campo="I_UN_Item"           Then Moveto [Unidade Interna]      EndIf
                  ConsultaF1()

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

                  echo Normal
                  echo off

                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Lookup_Material  ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_UN_Item       =[Unidade Interna  ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Codigo_Item"
                  EndIf
                  If Campo="I_UN_Item"
                     Then VSD_I_UN_Item     =[Unidade Interna]
                          Campo="I_UN_Item"
                  EndIf
                  If Campo="I_Tipo_Item"
                     Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Tipo_Item"
                  EndIf
                  Moveto "Progfrm"
          EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"      :
                 If QuerDesfazer("")
                    Then If CHAVEIC=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEIC=9
                         CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    : Campo="I_Codigo_Item"
            Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
            Case Campo="I_Quantidade"        :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Tipo_Item"
                    Else Campo="I_Codigo_Item"
                 EndIf
            Case Campo="I_UN_Item"           : Campo="I_Quantidade"
            Case Campo="I_Preco_Unitario"    :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Tipo_PR"           : Campo="I_Preco_Unitario"
            Case Campo="I_Quantidade_PR"     : Campo="I_Tipo_PR"
            Case Campo="I_Baixa_Automatica"  :
                 If IsBlank(VSD_I_Tipo_PR)
                    Then Campo="I_Tipo_PR"
                    Else Campo="I_Quantidade_PR"
                 Endif
            Case Campo="I_Flag"              : Campo="I_Baixa_Automatica"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Descricao_Item"
                    Else Moveto [Lookup_Material]
                         Ativa_Lookup()
                         Moveto [Codigo do Item]
                         Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                         If RetVal
                            Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                                 VSD_I_Descricao_Item=[Descricao do Item]
                                 KeyPress "ESC"
                                 [Codigo do Material]=VSD_I_Codigo_Item
                                 [Lookup_Material   ]=VSD_I_Codigo_Item
                                 Registro_ItemIC("Ler")
                                 Campo="I_Quantidade"
                            Else Mensagem("Item n„o Cadastrado !")
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 Campo="I_Tipo_Item"
            Case Campo="I_Tipo_Item":
                 VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                 If Not IsBlank(VSD_I_Tipo_Item)
                    Then Moveto [Tipo do Item]
                         Ativa_Lookup()
                         Moveto [Tipo do Item]
                         Locate VSD_I_Tipo_Item
                         If RetVal
                            Then KeyPress "ESC"
                                 [Tipo do Item]=VSD_I_Tipo_Item
                                 Campo="I_Quantidade"
                            Else Mensagem("Tipo do Item n„o Cadastrado !")
                                 VSD_I_Tipo_Item=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Preco_Unitario"
                 EndIf
             Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Interna]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  [Unidade Interna]=VSD_I_UN_Item
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                    Else If VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario
                         EndIf
                 EndIf
                 Campo="I_Tipo_PR"
            Case Campo="I_Tipo_PR":
                 VSD_I_Tipo_PR=ControlValue("I_Tipo_PR")
                 If IsBlank(VSD_I_Tipo_PR)
                    Then VSD_I_Quantidade_PR=BlankNum()
                         Campo="I_Baixa_Automatica"
                    Else Campo="I_Quantidade_PR"
                 Endif
            Case Campo="I_Quantidade_PR":
                 VSD_I_Quantidade_PR=ControlValue("I_Quantidade_PR")
                 Campo="I_Baixa_Automatica"
            Case Campo="I_Baixa_Automatica":
                 VSD_I_Baixa_Automatica=ControlValue("I_Baixa_Automatica")
                 If Not IsBlank(VSD_I_Baixa_Automatica)
                    Then Campo="I_Flag"
                 EndIf
            Case Campo="I_Flag":
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  Enter=Avan‡ar  "
If Campo="I_Codigo_Item" Or
   Campo="I_Tipo_Item" Or
   Campo="I_UN_Item"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Codigo_Item"   : MSGCAMPO="C˘digo do Item"
  Case Campo="I_Descricao_Item": MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item"     : MSGCAMPO="Tipo do Item"
  Case Campo="I_Quantidade"    : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"       : MSGCAMPO="Unidade Interna"
  Case Campo="I_Preco_Unitario": MSGCAMPO="Valor Unit rio"
  Case Campo="I_Baixa_Automatica" : MSGCAMPO="Baixa autom tica no estoque para este item ? <Sim/N„o)"
  Case Campo="I_Flag"          : MSGCAMPO="[pausa]"
  Case Campo="I_Tipo_PR"       : MSGCAMPO="Tipo P=Perda  R=Retorno"
  Case Campo="I_Quantidade_PR" :
       Switch
         Case VSD_I_Tipo_PR="P" : MSGCAMPO="Quantidade Perda"
         Case VSD_I_Tipo_PR="R" : MSGCAMPO="Quantidade Retorno"
       EndSwitch
  OtherWise                    : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver
   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)
RefreshDialog
Return TEMP
EndProc   ; (Item_DialogIC)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_ItemIC(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Material        ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Interna           ]=VSD_I_UN_Item
       [Custo Unitario            ]=VSD_I_Preco_Unitario
       [Custo Total               ]=VSD_I_Preco_Total
       [Item_Baixa_Automatica     ]=VSD_I_Baixa_Automatica
       [Tipo Perda_Retorno        ]=VSD_I_Tipo_PR
       [Quantidade Perda_Retorno  ]=VSD_I_Quantidade_PR
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia                ]

       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Material        ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Interna           ]
       VSD_I_Preco_Unitario         =[Custo Unitario            ]
       VSD_I_Preco_Total            =[Custo Total               ]
       VSD_I_Baixa_Automatica       =[Item_Baixa_Automatica     ]
       VSD_I_Tipo_PR                =[Tipo Perda_Retorno        ]
       VSD_I_Quantidade_PR          =[Quantidade Perda_Retorno  ]
EndSwitch
EndProc   ; (Registro_ItemIC)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_RegistroIC()
INICIO_DIALOG=True
Moveto [Sequencia]
Locate NCORT,SEQIT
CopyToArray RegItem
Registro_ItemIC("Ler")
EndProc ; (Inicia_RegistroIC)

;*******************************************************************************
;* Rotina para Digitacao Itens Consumidos                                      *
;*******************************************************************************
Proc DigitaIC()

Showdialog "Dados do Item [     ]" Proc "Item_DialogIC"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 11,2 height 06 width 76

   Accept @ -01,41 Width 5 "S" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,01 "C˘digo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descri‡„o Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,58 "TI" For "I_Tipo_Item"
   Accept @ 01,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,01 "Quantidade" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 02,15 "UN" For "I_UN_Item"
   Accept @ 03,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 02,21 "Vr.Unit rio" For "I_Preco_Unitario"
   Accept @ 03,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,34 "Vr.Total" For "I_Preco_Total"
   Accept @ 03,34 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 02,46 "P/R" For "I_Tipo_PR"
   Accept @ 03,47 Width 04 "A1" picture "P,R" Tag "I_Tipo_PR" to VSD_I_Tipo_PR

   Label  @ 02,51 "Perda/Retorno" For "I_Quantidade_PR"
   Accept @ 03,52 Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade_PR" to VSD_I_Quantidade_PR

   Label  @ 02,65 "BAE" For "I_Baixa_Automatica"
   Accept @ 03,66 Width 04 "A1" picture "S,N" Tag "I_Baixa_Automatica" to VSD_I_Baixa_Automatica

   Accept @ 03,71 Width 3 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

EndDialog
If RetVal
   Then Finaliza_RegistroIC(True)
   Else Finaliza_RegistroIC(False)
EndIf
EndProc   ; (DigitaIC)


;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_RegistroIC(ok)
Private ok
If Ok
   Then Registro_ItemIC("Gravar")
   Else If CHAVEIC=8
           Then CopyFromArray RegItem
                Del
        EndIf
EndIf
;CUSTO()
EndProc   ; (Finaliza_RegistroIC)


;*******************************************************************************
;* Rotina de Formulacao                                                        *
;*******************************************************************************
Proc Adiciona_Formulacao(Tipo)
Private ItemOk, coditem, Seq, Seqi, Seqc, Seqit

Aguarde("Processando Consumo")

If Tipo="Refazer"
   Then Moveto "Progfrm"
				While RecordStatus("New")=False
					Del
				EndWhile
EndIf

Seq=0
Moveto "Progfri"
If Not RecordStatus("New")=False
   Then LimpAguarde()
Moveto "Progfc"
UnLockRecord
PickForm "2"
Moveto "Progfrm"
        Moveto "Progfrm"
        Return
EndIf

NR = NIMAGERECORDS()
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, processando consumo "+BARRA_STRING)

   coditem=[Progfri->codigo do Item]

   ItemOk=True
   Moveto "FormulaC"
   Moveto [Codigo do Produto]
   Locate [Progfri->codigo do Item]
   If Not RetVal
      Then ItemOk=False
           Mensagem("Item "+[Progfri->codigo do Item]+" sem formula, verificar !")
      Else If [Baixa_Automatica]="S"
              Then QtdFormulaP=[Quantidade Produzida]
              Else ItemOk=False
           EndIf
   EndIf
   If ItemOK
      Then Moveto "FormulaI"
           Moveto [Codigo do Produto]
           Locate [Progfri->codigo do Item]
           If Not RetVal
              Then Itemok=False
                   Mensagem("Formula "+[Progfri->codigo do Item]+" sem itens, verificar !")
           EndIf
           ocorrencia=1
           While ItemOk

             While True
               If [Codigo do Produto]<>coditem
                  Then Itemok=False
                       QuitLoop
               EndIf
               If [Tipo do Item]<>"C"
                  Then If [Tipo do Item]="D"
                          Then If ocorrencia=1 Then
                                  coditem=[Codigo do Material]
                                  Seqit  =[Sequencia]

                                  Moveto "FormulaC"
                                  Moveto [Codigo do Produto]
                                  Locate coditem
                                  If Not RetVal
                                     Then ItemOk=False
                                          Mensagem("Item "+coditem+" sem formula, verificar !")
                                     Else If [Baixa_Automatica]="S"
                                             Then QtdFormulaD=[Quantidade Produzida]

                                                  Moveto "FormulaI"
                                                  Moveto [Codigo do Produto]
                                                  Locate coditem
                                                  If Not RetVal
                                                     Then Itemok=False
                                                          Mensagem("Item "+coditem+" sem formula, verificar !")
                                                  EndIf
                                             Else ItemOk=False
                                          EndIf
                                  EndIf
                                  ocorrencia=ocorrencia+1
                                  QuitLoop
                               Endif
                          Else If Ocorrencia>1 And [Tipo do Item]="M"
                                  Then PegaItem_Formula()
                               EndIf
                       EndIf
               EndIf
               Moveto "FormulaI"
               Skip
               If EOT()
                  Then ItemOk=False
                       QuitLoop
               Endif
             EndWhile

             If Not ItemOk And coditem<>[Progfri->codigo do Item]
                Then coditem=[Progfri->codigo do Item]
                     Locate coditem,seqit
                     If Not RetVal
                        Then ItemOk=False
                        Else Skip
                             If EOT()
                                Then ItemOk=False
                                Else ItemOk=True
                                     ocorrencia=1
                             EndIf
                     EndIf
             EndIf
           EndWhile
   Endif
   Moveto "Progfri"
EndScan
Moveto "Progfc"
UnLockRecord
PickForm "2"
Moveto "Progfrm"

LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc PegaItem_Formula()
Private qtdf
seq=seq+1

Moveto "Progfrm"
Moveto [Codigo do Material]
Locate [FormulaI->Codigo do Material]
If Not RetVal
   Then End Down
        [Numero_Fusao           ]=[ProgfC->Numero_Fusao             ]
        [Sequencia              ]=seq
        [Codigo do Material     ]=[FormulaI->Codigo do Material     ]
        [Descricao do Item      ]=[FormulaI->Descricao do Item      ]
        [Tipo do Item           ]=[FormulaI->Tipo do Item           ]
        [Descricao Tipo do Item ]=[FormulaI->Descricao Tipo do Item ]
        [Unidade Interna        ]=[FormulaI->Unidade Interna        ]
        [Item_Baixa_Automatica  ]=[FormulaI->Item_Baixa_Automatica  ]
Endif
qtdf=(([Progfri->Quantidade Programada]/QtdFormulaP)/QtdFormulaD)*[FormulaI->Quantidade]
;*** ver retorno/perda
[Quantidade]=[Quantidade]+qtdf
UnLockRecord

EndProc

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEIP()
Moveto "Progfrp"
While True
  Moveto [Sequencia]
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
    Moveto "ProgfrP"
    Moveto [Quantidade Perdida] TOTPERDQ= ImageCSum()
    Moveto [Peso_Perdido      ] TOTPERDP= ImageCSum()

    Moveto "ProgfC"
    [Quantidade_Perdida]=TOTPERDQ
    [Peso_Perdido      ]=TOTPERDP
    UnLockRecord

    Moveto "Progfrp"
    Moveto [Sequencia]

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

    Prompt TECLA

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

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

    Switch
    Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
         RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
				 RetVal=-115 Or RetVal=-116 Or
         RetVal="F6" Or RetVal="F5":
         Tecla_Funcao=RetVal
         Del
         CHAVEIP=9
         Return

    Case RetVal="F3":
         Del
         Moveto [Sequencia]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEIP=0
         Home
         SEQIT=[Sequencia]
         Inicia_RegistroIP()
         DigitaIP()
         QuitLoop
    Case RetVal="PGDN":
         Del
         Moveto [Sequencia]
       ;;If RecordStatus("New")=True
       ;;   Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
       ;;        QuitLoop
       ;;EndIf
         CHAVEIP=9
         FINALIZADO=True
         Tecla_Funcao=""
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         del
         While True
           Moveto "ProgfrP"
           Moveto [Quantidade Perdida] TOTPERDQ= ImageCSum()
           Moveto [Peso_Perdido      ] TOTPERDP= ImageCSum()

           Moveto "ProgfC"
           [Quantidade_Perdida]=TOTPERDQ
           [Peso_Perdido      ]=TOTPERDP
           UnLockRecord

           Moveto "Progfrp"
           Moveto [Sequencia]

           PAGINA("Progfrp","MR")
           SEQIT= [Sequencia]
           If EDITAR="S"
              Then CHAVEIP=0
                   Controla_EdicaoIP()
              Else If EXCLUIR="S"
                      Then If QuerEXcluir("")
                              Then EXCLUSAO("ItemIP")
                                   Moveto "Progfrp"
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Del
         CHAVEIP=9
         Tecla_Funcao=""
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate NCORT,SEQIT
         If Retval
            Then CHAVEIP=0
                 SEQIT=[]
            Else CHAVEIP=1
                 End
                 Down
                 [Numero_Fusao           ] = NCORT
                 [Sequencia              ] = SEQIT
                 Locate NCORT,SEQIT
                 UnLockRecord
                 Locate NCORT,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (CHAVEIP)

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

If INICIO_DIALOG
   Then If CHAVEIP=0
           Then Campo="I_Quantidade"
           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 SEQIT=[Sequencia]
                      Inicia_RegistroIP()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEIP=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEIP=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item" Or
             Campo="I_CCusto"      Or
             Campo="I_NRegistro1"  Or
             Campo="I_NRegistro2"
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item" Then Moveto [Codigo do Item   ] EndIf
                  If Campo="I_CCusto"      Then Moveto [Codigo Tipo Perda] EndIf
                  If Campo="I_NRegistro1"   Then Moveto [Lookup_Empregado ] EndIf
                  If Campo="I_NRegistro2"   Then Moveto [Lookup_Empregado ] EndIf
                  If ConsultaF1()
                     Then If Campo="I_NRegistro1"
                             Then VSD_I_NRegistro1      =REG_CONSULTAF1["Numero_Registro"]
                                  VSD_I_NomeEmpregado1  =REG_CONSULTAF1["Nome_Empregado"]
                                  Campo="I_NRegistro1"
                          Endif
                          If Campo="I_NRegistro2"
                             Then VSD_I_NRegistro2      =REG_CONSULTAF1["Numero_Registro"]
                                  VSD_I_NomeEmpregado2  =REG_CONSULTAF1["Nome_Empregado"]
                                  Campo="I_NRegistro2"
                          Endif
                  EndIf

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

                  echo Normal
                  echo off

                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Codigo_Item"
                  EndIf

                  If Campo="I_CCusto"
                     Then VSD_I_CCusto          =[Codigo Tipo Perda   ]
                          VSD_I_Descricao_CCusto=LTrim([Descricao Tipo Perda])
                          Campo="I_CCusto"
                  Endif

                  Moveto "Progfrp"
          EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"      :
                 If QuerDesfazer("")
                    Then If CHAVEIP=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEIP=9
                         CancelDialog
                 EndIf
            Case Campo="I_Quantidade"        :
                 If CHAVEIP=1
                    Then Campo="I_Codigo_Item"
                    Else If QuerDesfazer("")
                            Then CopyFromArray RegItem
                                 CHAVEIP=9
                                 CancelDialog
                         EndIf
                 EndIf
             Case Campo="I_CCusto"           : Campo="I_Quantidade"
             Case Campo="I_NRegistro1"       : Campo="I_CCusto"
             Case Campo="I_NRegistro2"       : Campo="I_NRegistro1"
             Case Campo="I_Flag"             : Campo="I_NRegistro2"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 Moveto [Codigo do Item ]
                 Ativa_Lookup()
                 Moveto [Codigo do Item]
                 Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                 If RetVal
                    Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                         VSD_I_Descricao_Item=[Descricao do Item]
                         KeyPress "ESC"
                         [Codigo do Item    ]=VSD_I_Codigo_Item
                         Registro_ItemIP("Ler")
                         Campo="I_Quantidade"
                    Else Mensagem("Item n„o Cadastrado !")
                         VSD_I_Codigo_Item   =""
                         VSD_I_Descricao_Item=""
                         VSD_I_UN_Item       =""
                         VSD_I_Tipo_Item     =""
												 VSD_I_Peso 				 =BlankNum()
												 VSD_I_PesoT				 =BlankNum()
                         KeyPress "ESC"
                 EndIf
                 Echo Off
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                  Campo="I_CCusto"
             Case Campo="I_CCusto"             :
                  VSD_I_CCusto=ControlValue("I_CCusto")
                  If Not IsBlank(VSD_I_CCusto)
                     Then Moveto [Codigo Tipo Perda]
                          Ativa_Lookup()
                          Moveto [Codigo Tipo Perda]
                          Locate VSD_I_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Tipo de Perdas a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_I_CCusto          =""
                                          VSD_I_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_I_CCusto          =[Codigo Tipo Perda]
                                          VSD_I_Descricao_CCusto=LTrim([Descricao Tipo Perda])
                                          KeyPress "ESC"
                                          [Codigo Tipo Perda   ]=VSD_I_CCusto
                                          Campo="I_NRegistro1"
                                  Endif
                             Else Mensagem("Tipo Perda n„o Cadastrada !")
                                  VSD_I_CCusto          =""
                                  VSD_I_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_I_Descricao_CCusto=""
                          Campo="I_NRegistro1"
                  EndIf
             Case Campo="I_NRegistro1"             :
                  VSD_I_NRegistro1=ControlValue("I_NRegistro1")
                  If VSD_I_NRegistro1=0
                     Then VSD_I_NRegistro1=BlankNum()
                  EndIf
                  If Not IsBlank(VSD_I_NRegistro1)
                     Then Moveto [Lookup_Empregado ]
                          Ativa_Lookup()
                          Moveto [Codigo da Empresa]
                          Locate [Progfc->Codigo da Empresa],VSD_I_NRegistro1
                          If RetVal
                             Then VSD_I_NRegistro1       =[Numero_Registro]
                                  VSD_I_NomeEmpregado1   =[Nome_Empregado ]
                                  KeyPress "ESC"
                                  Campo="I_NRegistro2"
                             Else Mensagem("Empregado n„o Cadastrado !")
                                  VSD_I_NRegistro1      =""
                                  VSD_I_NomeEmpregado1  =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_NRegistro2"             :
                  VSD_I_NRegistro2=ControlValue("I_NRegistro2")
                  If VSD_I_NRegistro2=0
                     Then VSD_I_NRegistro2=BlankNum()
                  EndIf
                  If Not IsBlank(VSD_I_NRegistro2)
                     Then Moveto [Lookup_Empregado ]
                          Ativa_Lookup()
                          Moveto [Codigo da Empresa]
                          Locate [Progfc->Codigo da Empresa],VSD_I_NRegistro2
                          If RetVal
                             Then VSD_I_NRegistro2       =[Numero_Registro ]
                                  VSD_I_NomeEmpregado2   =[Nome_Empregado  ]
                                  KeyPress "ESC"
                                  Campo="I_Flag"
                             Else Mensagem("Empregado n„o Cadastrado !")
                                  VSD_I_NRegistro2      =""
                                  VSD_I_NomeEmpregado2  =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else Campo="I_Flag"
                          VSD_I_NRegistro2      =""
                          VSD_I_NomeEmpregado2  =""

                  EndIf
             Case Campo="I_Flag"  : AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  Enter=Avan‡ar  "
If Campo="I_Codigo_Item" Or
   Campo="I_CCusto" Or
   Campo="I_NRegistro1" Or
   Campo="I_NRegistro2"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Codigo_Item"   : MSGCAMPO="C˘digo do Item"
  Case Campo="I_Quantidade"    : MSGCAMPO="Quantidade"
  Case Campo="I_Flag"          : MSGCAMPO="[pausa]"
  Case Campo="I_CCusto"        : MSGCAMPO="Tipo de Perda"
  Case Campo="I_NRegistro1"    : MSGCAMPO="Funcion rio 1"
  Case Campo="I_NRegistro2"    : MSGCAMPO="Funcion rio 2"
  OtherWise                    : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver
   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)
RefreshDialog
Return TEMP
EndProc   ; (Item_DialogIP)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_ItemIP(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
       [Unidade Fiscal             ]=VSD_I_UN_Item
       [Quantidade Perdida         ]=VSD_I_Quantidade
       [Peso Liquido               ]=VSD_I_Peso
       [Codigo Tipo Perda          ]=VSD_I_CCusto
       [Descricao Tipo Perda       ]=VSD_I_Descricao_CCusto
       [Numero_Registro1           ]=VSD_I_NRegistro1
       [Nome_Empregado1            ]=VSD_I_NomeEmpregado1
       [Numero_Registro2           ]=VSD_I_NRegistro2
       [Nome_Empregado2            ]=VSD_I_NomeEmpregado2
       [Peso_Perdido               ]=[Quantidade Perdida]*[Peso Liquido]
       If VSD_I_NRegistro1=0
          Then [Numero_Registro1           ]=BlankNum()
       EndIf
       If VSD_I_NRegistro2=0
          Then [Numero_Registro2           ]=BlankNum()
       EndIf
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia                 ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Quantidade             =[Quantidade Perdida        ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Peso                   =[Peso Liquido              ]
       VSD_I_PesoT                  =[Quantidade Perdida        ]*[Peso Liquido]
       VSD_I_CCusto                 =[Codigo Tipo Perda         ]
       VSD_I_Descricao_CCusto       =[Descricao Tipo Perda      ]
       VSD_I_NRegistro1             =[Numero_Registro1          ]
       VSD_I_NomeEmpregado1         =[Nome_Empregado1           ]
       VSD_I_NRegistro2             =[Numero_Registro2          ]
       VSD_I_NomeEmpregado2         =[Nome_Empregado2           ]
EndSwitch
EndProc   ; (Registro_ItemIP)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_RegistroIP()
INICIO_DIALOG=True
Moveto [Sequencia]
Locate NCORT,SEQIT
CopyToArray RegItem
Registro_ItemIP("Ler")
EndProc ; (Inicia_RegistroIP)

;*******************************************************************************
;* Rotina para Digitacao Itens Perdidos                                        *
;*******************************************************************************
Proc DigitaIP()
Showdialog "Dados do Item [     ]" Proc "Item_DialogIP"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 10,2 height 12 width 76

   Accept @ -01,41 Width 5 "S" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,01 "C˘digo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descri‡„o Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,58 "TI" For "I_Tipo_Item"
   Accept @ 01,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,01 "Qtde Pe‡as" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade" to VSD_I_Quantidade

	 Label	@ 02,15 "UN" For "I_UN_Item"
   Accept @ 03,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item

   Label  @ 02,20 "Peso" For "I_Peso"
   Accept @ 03,21 Width 13 "N" picture "#*#.[###]" Tag "I_Peso" to VSD_I_Peso

   Label  @ 02,34 "Total" For "I_PesoT"
   Accept @ 03,35 Width 13 "N" picture "#*#.[###]" Tag "I_PesoT" to VSD_I_PesoT

   Label  @ 04,01 "Tipo de Perda" For "I_CCusto"
   Accept @ 05,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 05,12 Width 31 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto

   Label  @ 06,01 "Funcion rio 1" For "I_NRegistro1"
   Accept @ 07,01 Width 10 "N" picture "[#*#]" Tag "I_NRegistro1" to VSD_I_NRegistro1
   Accept @ 07,12 Width 43 "A40" picture "!*!" Tag "I_NomeEmpregado1" to VSD_I_NomeEmpregado1

   Label  @ 08,01 "Funcion rio 2" For "I_NRegistro2"
   Accept @ 09,01 Width 10 "N" Picture "[#*#]" Tag "I_NRegistro2" to VSD_I_NRegistro2
   Accept @ 09,12 Width 43 "A40" picture "!*!" Tag "I_NomeEmpregado2" to VSD_I_NomeEmpregado2

   Accept @ 09,58 Width 3 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

EndDialog
If RetVal
   Then Finaliza_RegistroIP(True)
   Else Finaliza_RegistroIP(False)
EndIf
EndProc   ; (DigitaIP)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_RegistroIP(ok)
Private ok
If Ok
   Then Registro_ItemIP("Gravar")
   Else If CHAVEIP=8
           Then CopyFromArray RegItem
                Exclusao("ItemIP")
        EndIf
EndIf
;CUSTO()
EndProc   ; (Finaliza_RegistroIP)






;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEIPR()
Moveto "Progfpr"
While True
  Moveto [Sequencia]
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
    Moveto "Progfpr"
    Moveto [Quantidade Produzida] TOTPERDQ= ImageCSum()
    Moveto [Peso_Produzido      ] TOTPERDP= ImageCSum()

    Moveto "ProgfC"
    [Quantidade_Produzida]=TOTPERDQ
    [Peso_Produzido      ]=TOTPERDP
    UnLockRecord

    Moveto "Progfpr"
    Moveto [Sequencia]

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

    Prompt TECLA

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

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

    Switch
    Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
         RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
				 RetVal=-115 Or RetVal=-116 Or
         RetVal="F6" Or RetVal="F5":
         Tecla_Funcao=RetVal
         Del
         CHAVEIPR=9
         Return

    Case RetVal="F3":
         Del
         Moveto [Sequencia]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEIPR=0
         Home
         SEQIT=[Sequencia]
         Inicia_RegistroIPR()
         DigitaIPR()
         QuitLoop
    Case RetVal="PGDN":
         Del
         Moveto [Sequencia]
       ;;If RecordStatus("New")=True
       ;;   Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
       ;;        QuitLoop
       ;;EndIf
         CHAVEIPR=9
         FINALIZADO=True
         Tecla_Funcao=""
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         del
         While True
           Moveto "Progfpr"
           Moveto [Quantidade Produzida] TOTPERDQ= ImageCSum()
           Moveto [Peso_Produzido      ] TOTPERDP= ImageCSum()

           Moveto "ProgfC"
           [Quantidade_Produzida]=TOTPERDQ
           [Peso_Produzido      ]=TOTPERDP
           UnLockRecord

           Moveto "Progfpr"
           Moveto [Sequencia]

           PAGINA("Progfpr","MR")
           SEQIT= [Sequencia]
           If EDITAR="S"
              Then CHAVEIPR=0
                   Controla_EdicaoIPR()
              Else If EXCLUIR="S"
                      Then If QuerEXcluir("")
                              Then EXCLUSAO("ItemIPR")
                                   Moveto "Progfpr"
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Del
         CHAVEIPR=9
         Tecla_Funcao=""
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate NCORT,SEQIT
         If Retval
            Then CHAVEIPR=0
                 SEQIT=[]
            Else CHAVEIPR=1
                 End
                 Down
                 [Numero_Fusao           ] = NCORT
                 [Sequencia              ] = SEQIT
                 Locate NCORT,SEQIT
                 UnLockRecord
                 Locate NCORT,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (CHAVEIPR)

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

If INICIO_DIALOG
   Then If CHAVEIPR=0
           Then Campo="I_Quantidade"
           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 SEQIT=[Sequencia]
                      Inicia_RegistroIPR()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEIPR=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEIPR=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item" Or
             Campo="I_NRegistro1" Or
             Campo="I_NRegistro2"
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item" Then Moveto [Codigo do Item   ] EndIf
                  If Campo="I_NRegistro1"  Then Moveto [Lookup_Empregado ] EndIf
                  If Campo="I_NRegistro2"  Then Moveto [Lookup_Empregado ] EndIf
                  If ConsultaF1()
                     Then If Campo="I_NRegistro1"
                             Then VSD_I_NRegistro1      =REG_CONSULTAF1["Numero_Registro"]
                                  VSD_I_NomeEmpregado1  =REG_CONSULTAF1["Nome_Empregado"]
                                  Campo="I_NRegistro1"
                          Endif
                          If Campo="I_NRegistro2"
                             Then VSD_I_NRegistro2      =REG_CONSULTAF1["Numero_Registro"]
                                  VSD_I_NomeEmpregado2  =REG_CONSULTAF1["Nome_Empregado"]
                                  Campo="I_NRegistro2"
                          Endif
                  EndIf

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

                  echo Normal
                  echo off

                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Codigo_Item"
                  EndIf

                  Moveto "Progfpr"
          EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"      :
                 If QuerDesfazer("")
                    Then If CHAVEIPR=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEIPR=9
                         CancelDialog
                 EndIf
            Case Campo="I_Quantidade"        :
                 If CHAVEIPR=1
                    Then Campo="I_Codigo_Item"
                    Else If QuerDesfazer("")
                            Then CopyFromArray RegItem
                                 CHAVEIPR=9
                                 CancelDialog
                         EndIf
                 EndIf
             Case Campo="I_NRegistro1"       : Campo="I_Quantidade"
             Case Campo="I_NRegistro2"       : Campo="I_NRegistro1"
             Case Campo="I_Flag"             : Campo="I_NRegistro2"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 Moveto [Codigo do Item ]
                 Ativa_Lookup()
                 Moveto [Codigo do Item]
                 Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                 If RetVal
                    Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                         VSD_I_Descricao_Item=[Descricao do Item]
                         KeyPress "ESC"
                         [Codigo do Item    ]=VSD_I_Codigo_Item
                         Registro_ItemIPR("Ler")
                         Campo="I_Quantidade"
                    Else Mensagem("Item n„o Cadastrado !")
                         VSD_I_Codigo_Item   =""
                         VSD_I_Descricao_Item=""
                         VSD_I_UN_Item       =""
                         VSD_I_Tipo_Item     =""
												 VSD_I_Peso 				 =BlankNum()
												 VSD_I_PesoT				 =BlankNum()
                         KeyPress "ESC"
                 EndIf
                 Echo Off
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 Campo="I_NRegistro1"
             Case Campo="I_NRegistro1"             :
                  VSD_I_NRegistro1=ControlValue("I_NRegistro1")
                  If VSD_I_NRegistro1=0
                     Then VSD_I_NRegistro1=BlankNum()
                  EndIf
                  If Not IsBlank(VSD_I_NRegistro1)
                     Then Moveto [Lookup_Empregado ]
                          Ativa_Lookup()
                          Moveto [Codigo da Empresa]
                          Locate [Progfc->Codigo da Empresa],VSD_I_NRegistro1
                          If RetVal
                             Then VSD_I_NRegistro1       =[Numero_Registro]
                                  VSD_I_NomeEmpregado1   =[Nome_Empregado ]
                                  KeyPress "ESC"
                                  Campo="I_NRegistro2"
                             Else Mensagem("Empregado n„o Cadastrado !")
                                  VSD_I_NRegistro1      =""
                                  VSD_I_NomeEmpregado1  =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_NRegistro2"             :
                  VSD_I_NRegistro2=ControlValue("I_NRegistro2")
                  If VSD_I_NRegistro2=0
                     Then VSD_I_NRegistro2=BlankNum()
                  EndIf
                  If Not IsBlank(VSD_I_NRegistro2)
                     Then Moveto [Lookup_Empregado ]
                          Ativa_Lookup()
                          Moveto [Codigo da Empresa]
                          Locate [Progfc->Codigo da Empresa],VSD_I_NRegistro2
                          If RetVal
                             Then VSD_I_NRegistro2       =[Numero_Registro]
                                  VSD_I_NomeEmpregado2   =[Nome_Empregado ]
                                  KeyPress "ESC"
                                  Campo="I_Flag"
                             Else Mensagem("Empregado n„o Cadastrado !")
                                  VSD_I_NRegistro2      =""
                                  VSD_I_NomeEmpregado2  =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else Campo="I_Flag"
                          VSD_I_NRegistro2      =""
                          VSD_I_NomeEmpregado2   =""
                  EndIf
             Case Campo="I_Flag"  : AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  Enter=Avan‡ar  "
If Campo="I_Codigo_Item" Or
   Campo="I_NRegistro1" Or
   Campo="I_NRegistro2"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Codigo_Item"   : MSGCAMPO="C˘digo do Item"
  Case Campo="I_Quantidade"    : MSGCAMPO="Quantidade"
  Case Campo="I_Flag"          : MSGCAMPO="[pausa]"
  Case Campo="I_NRegistro1"    : MSGCAMPO="Funcion rio 1"
  Case Campo="I_NRegistro2"    : MSGCAMPO="Funcion rio 2"
  OtherWise                    : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver
   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)
RefreshDialog
Return TEMP
EndProc   ; (Item_DialogIPR)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_ItemIPR(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
       [Unidade Fiscal             ]=VSD_I_UN_Item
       [Quantidade Produzida       ]=VSD_I_Quantidade
       [Peso Liquido               ]=VSD_I_Peso
       [Numero_Registro1           ]=VSD_I_NRegistro1
       [Nome_Empregado1            ]=VSD_I_NomeEmpregado1
       [Numero_Registro2           ]=VSD_I_NRegistro2
       [Nome_Empregado2            ]=VSD_I_NomeEmpregado2
       [Peso_Produzido             ]=[Quantidade Produzida]*[Peso Liquido]
       If VSD_I_NRegistro1=0
          Then [Numero_Registro1           ]=BlankNum()
       EndIf
       If VSD_I_NRegistro2=0
          Then [Numero_Registro2           ]=BlankNum()
       EndIf
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia                 ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Quantidade             =[Quantidade Produzida      ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Peso                   =[Peso Liquido              ]
       VSD_I_PesoT                  =[Quantidade Produzida      ]*[Peso Liquido]
       VSD_I_NRegistro1             =[Numero_Registro1          ]
       VSD_I_NomeEmpregado1         =[Nome_Empregado1           ]
       VSD_I_NRegistro2             =[Numero_Registro2          ]
       VSD_I_NomeEmpregado2         =[Nome_Empregado2           ]
EndSwitch
EndProc   ; (Registro_ItemIPR)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_RegistroIPR()
INICIO_DIALOG=True
Moveto [Sequencia]
Locate NCORT,SEQIT
CopyToArray RegItem
Registro_ItemIPR("Ler")
EndProc ; (Inicia_RegistroIPR)

;*******************************************************************************
;* Rotina para Digitacao Itens Perdidos                                        *
;*******************************************************************************
Proc DigitaIPR()
Old_Funcionario=[Numero_Registro1]
Showdialog "Dados do Item [     ]" Proc "Item_DialogIPR"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 10,2 height 10 width 76

   Accept @ -01,41 Width 5 "S" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,01 "C˘digo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descri‡„o Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,58 "TI" For "I_Tipo_Item"
   Accept @ 01,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,01 "Qtde Moldes" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade" to VSD_I_Quantidade

	 Label	@ 02,15 "UN" For "I_UN_Item"
   Accept @ 03,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item

   Label  @ 02,20 "Peso" For "I_Peso"
   Accept @ 03,21 Width 13 "N" picture "#*#.[###]" Tag "I_Peso" to VSD_I_Peso

   Label  @ 02,34 "Total" For "I_PesoT"
   Accept @ 03,35 Width 13 "N" picture "#*#.[###]" Tag "I_PesoT" to VSD_I_PesoT

   Label  @ 04,01 "Funcion rio 1" For "I_NRegistro1"
   Accept @ 05,01 Width 10 "N" Picture "[#*#]" Tag "I_NRegistro1" to VSD_I_NRegistro1
   Accept @ 05,12 Width 43 "A40" picture "!*!" Tag "I_NomeEmpregado1" to VSD_I_NomeEmpregado1

   Label  @ 06,01 "Funcion rio 2" For "I_NRegistro2"
   Accept @ 07,01 Width 10 "N" Picture "[#*#]" Tag "I_NRegistro2" to VSD_I_NRegistro2
   Accept @ 07,12 Width 43 "A40" picture "!*!" Tag "I_NomeEmpregado2" to VSD_I_NomeEmpregado2

   Accept @ 07,58 Width 3 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

EndDialog
If RetVal
   Then Finaliza_RegistroIPR(True)
   Else Finaliza_RegistroIPR(False)
EndIf
EndProc   ; (DigitaIPR)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_RegistroIPR(ok)
Private ok
If Ok
   Then Registro_ItemIPR("Gravar")
   Else If CHAVEIPR=8
           Then CopyFromArray RegItem
                Exclusao("ItemIPR")
        EndIf
EndIf
;CUSTO()
EndProc   ; (Finaliza_RegistroIPR)




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

Moveto "ProgfL"
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

        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",
                 -33,"F6","F5",-24,-25,-19,-49,-18,-30,-34,-32,-115,-116

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

        Switch
        Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
             RetVal=-18  Or RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or
						 RetVal=-115 Or RetVal=-116 Or
             RetVal="F6" Or RetVal="F5":
             Tecla_Funcao=RetVal
             Del
             CHAVEL=9
             Return

        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
             CHAVEL=9
             FINALIZADO=True
             Tecla_Funcao=""
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             del
             While True
               PAGINA("ProgfL","MR")
               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then CHAVEL=0
                       UnLockRecord
                  Else If EXCLUIR="S"
                          Then If QuerEXcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             Del
             CHAVEL=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 CHAVEL=0
                Else CHAVEL=1
                     End Down
                     [Numero_Fusao           ] = NCORT
                     [Sequencia do Lancamento] = ITEM
                     Locate NCORT,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina para Digitacao Dados Gerais                                          *
;*******************************************************************************
Proc DIGITALIGA()
Moveto [Codigo do Item]
While True

      TECLA=" Esc=Retornar  "
      If Field()="Codigo do Item"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf

      MSGCAMPO=""

      Tecla_Funcao =""

      Prompt TECLA

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

      Switch

      Case RetVal="F1":
           If Field()="Codigo do Item"
              Then CONSULTAF1()
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo do Item":
                If QuerDesfazer("")
                   Then If CHAVEL=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVEL=9
                        QuitLoop
                EndIf
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGDN":
           FINALIZADO=True
           CHAVEL=9
           OPCAO=""
           QuitLoop

      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="ENTER":
        Switch
          Case Field()="Codigo do Item"  :
               If Not IsBlank([])
                  Then Tecla_Funcao=-36
                       Return
               EndIf
          OtherWise: Right
        EndSwitch
      EndSwitch
EndWhile
EndProc


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

Moveto "PROGFC"

If [Situacao_Programacao]<>"FINALIZADA"
   Then Return
Endif
If IsBlank([Data_Fim_Processo])
   Then Return
Endif

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

If IsBlank([PROGFC->Lancamento RQCabeca_PFC])
   Then RQ_ENCONTRADA=False
   Else Moveto "\\Sistemas\\Estoque\\RQCabeca"
        Moveto [Numero do Lancamento]
        Locate [PROGFC->Lancamento RQCabeca_PFC]
        If RetVal
           then If [Codigo da Empresa]=[PROGFC->Codigo da Empresa]
                   Then RQ_ENCONTRADA=True
                   Else RQ_ENCONTRADA=False
                EndIf
           Else RQ_ENCONTRADA=False
        EndIf
EndIf

If Not RQ_ENCONTRADA
   Then If Not IsBlank([PROGFC->Lancamento RQCabeca_PFC])
           Then
                LimpAguarde()
                MSG="Requisi‡„o de Estoque N. "+[PROGFC->Lancamento RQCabeca_PFC]+" n„o localizada !// //"
                MSG=MSG+"Este lan‡amento n„o ser  corrigido no Estoque !// //"
                MSG=MSG+"Motivos: - Fechamento Mensal do Estoque efetuado;          //"
                MSG=MSG+"         - Empresa da requisi‡„o n„o corresponde;          //"
                MSG=MSG+"         - Algum erro ocorrido no momento deste Lan‡amento.//"
                Mensagem(MSG)

                Moveto "PROGFC"
                FormKey
                Return
        EndIf

	 Else NUMEROL=[\Sistemas\Estoque\RQCabeca->Numero do Lancamento]

        For i From 1 To 1

          Switch
            Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
            Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
          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"
                    EndSwitch
                    Del
                  EndWhile
          EndIf
        EndFor

        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        Del
EndIf

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

CODREQ ="000006"
WS_CREQ=""

Moveto "\\Sistemas\\Estoque\\Requisit"
Moveto [Codigo do Requisitante]
Locate CODREQ
If RetVal
   Then WS_CREQ=[Codigo do Requisitante]
        WS_DREQ=[Descricao Requisitante]
EndIf

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 End
 If Not IsBlank([PROGFC->Lancamento RQCabeca_PFC]) And SEQ=0
    Then NUMEROL=[PROGFC->Lancamento RqCabeca_PFC]
    Else If [Numero do Lancamento]=""
            Then NUMEROL="000001"
            Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
         EndIf
 EndIf
 SEQ=SEQ+1
 Down
 [Numero do Lancamento  ]=NUMEROL
 If IsLockRecord()
    Then Del
         Loop
 EndIf

 QuitLoop
EndWhile
[Codigo da Empresa     ]=[PROGFC->Codigo da Empresa]
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"
[Tipo de Operacao      ]="P"
[Descricao da Operacao ]="PRODUCAO"
[Codigo do Documento   ]="PROD"
[Numero do Documento   ]=AlinhM(StrVal([PROGFC->Numero_Fusao       ]),6)
[Data de Ocorrencia    ]=[PROGFC->Data_Fim_Processo   ]
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
Controle_Dia()
UnLockrecord

QTDTOT=0
VRTOT =0
SEQ   =0
Moveto "PROGFPR"
Moveto [Numero_Fusao]
Locate [PROGFC->Numero_Fusao]
If RetVal
   Then While [Numero_Fusao]=[PROGFC->Numero_Fusao]
          CODIGO_ITEM=[Codigo do Item]
          QTD_ITEM   =[Quantidade Produzida ]

          If QTD_ITEM >0
             Then Moveto "\\Sistemas\\Estoque\\Itens"
                  Moveto [Codigo do Item]
                  Locate CODIGO_ITEM
                  If RetVal
                     Then WS_TITEM=[Tipo do Item     ]
                          WS_DITEM=[Descricao do Item]
                          WS_UNI  =[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          ]=[PROGFC->Codigo da Empresa ]
                  [Tipo do Item               ]=WS_TITEM
                  [Codigo do Item             ]=CODIGO_ITEM
                  [Descricao do Item          ]=WS_DITEM
                  [Quantidade                 ]=QTD_ITEM
                  ESTOQUE("ATUALIZAR", "E", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia], [\Sistemas\Estoque\RqCabeca->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]

                ;;If PARAM_EXPLODE_MP_PFAC="S"
                ;;   Then Formula()
                ;;EndIf
                  UnLockrecord

                  Moveto "PROGFPR"

          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal
   Then [Quantidade Total         ]=QTDTOT
        [Valor Total              ]=VRTOT
        UnLockRecord
EndIf

Moveto "PROGFC"
[Lancamento RQCabeca_PFC]=NUMEROL
UnLockRecord
FormKey
LimpAguarde()
EndProc

;*******************************************************************************
;* 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 para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()
Private Result

If IsEmpty("\\Sistemas\\Estoque\\P_Requis")
   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 "\\Sistemas\\Estoque\\P_Requis"
        Moveto [Codigo_Empresa]
        Locate [Progfc->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else     
                PARAM_EMPRESA         = [Codigo_Empresa           ]
                PARAM_BLOQUEIA_NEG    = [Bloqueia_Estoque_Negativo]
                PARAM_EXPLODE_MATPRIMA= [Explosao_Materia_Prima   ]
                PARAM_COR_TECIDO      = [Cor_Tecido               ]
                
                Result=True
        EndIf
EndIf

Moveto "Progfc"
KeyPress "F7"

Return Result
EndProc

Proc AbreTabelas()
View NoWindow "\\Sistemas\\Estoque\\P_Requis"
View NoWindow "\\Sistemas\\Estoque\\Itens"
View NoWindow "\\Sistemas\\Estoque\\Requisit"
View NoWindow "\\Sistemas\\Estoque\\RqCabeca"
View NoWindow "\\Sistemas\\Estoque\\RqItem"
View NoWindow "\\Sistemas\\Estoque\\Sdestq"
View NoWindow "\\Sistemas\\Estoque\\EstqPrm"
View NoWindow  "ProgfP"
View NoWindow  "ProgfRI"
View NoWindow  "ProgfRM"
View NoWindow  "ProgfRP"
View NoWindow  "ProgfPR"
CoEdit "ProgfC"
EndProc

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

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoIC()
Inicia_RegistroIC()
DIGITAIC()
Moveto "Progfrm"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoIP()
Inicia_RegistroIP()
DIGITAIP()
Moveto "Progfrp"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoIPR()
Inicia_RegistroIPR()
DIGITAIPR()
Moveto "Progfpr"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
FINALIZADO=False
While Not FINALIZADO

  Tecla_Funcao=BlankNum()
  DIGITA()
  If CHAVE=9 Then QuitLoop EndIf
  Moveto [Flag1]

  While Not IsBlank(Tecla_Funcao)
    Switch
      Case Tecla_Funcao=-116:
           Switch
             Case Table()="Progfl"  : Tecla_Funcao=-25
						 Case Table()="Progfp"  : Tecla_Funcao=-19
             Case Table()="Progfri" : Tecla_Funcao=-49
             Case Table()="Progfrm" : Tecla_Funcao=-35
             Case Table()="Progfpr" : Tecla_Funcao=-32
             Case Table()="Progfrp" : Tecla_Funcao=-36
             OtherWise              : Tecla_Funcao=""
           EndSwitch

			Case Tecla_Funcao=-115:
           Switch
             Case Table()="Progfl"  : Tecla_Funcao=-32
             Case Table()="Progfp"  : Tecla_Funcao=-36
						 Case Table()="Progfri" : Tecla_Funcao=-25
						 Case Table()="Progfrm" : Tecla_Funcao=-19
             Case Table()="Progfpr" : Tecla_Funcao=-49
             Case Table()="Progfrp" : Tecla_Funcao=-35
             OtherWise              : Tecla_Funcao=""
           EndSwitch

      Case Tecla_Funcao="F6":
           If Imprime()
               Then FINALIZADO=True
                    Tecla_Funcao=""
           EndIf
           Switch
             Case Table()="Progfc"  : Tecla_Funcao=""
             Case Table()="Progfp"  : Tecla_Funcao=-25
             Case Table()="Progfri" : Tecla_Funcao=-19
             Case Table()="Progfrm" : Tecla_Funcao=-49
             Case Table()="Progfrp" : Tecla_Funcao=-32
             Case Table()="Progfpr" : Tecla_Funcao=-35
             Case Table()="Progfl"  : Tecla_Funcao=-36
           EndSwitch

      Case Tecla_Funcao="F5":
           Switch
             Case Table()="Progfc" Or
                  Table()="Progfp"   :
                  Tecla_Funcao=-25
                  Selecao()
             OtherWise:
                Switch
                  Case Table()="Progfri"  : Tecla_Funcao=-19
                  Case Table()="Progfrm"  : Tecla_Funcao=-49
                  Case Table()="Progfrp"  : Tecla_Funcao=-32
                  Case Table()="Progfpr"  : Tecla_Funcao=-35
                  Case Table()="Progfl"   : Tecla_Funcao=-36
                  OtherWise               : Tecla_Funcao=""
                EndSwitch
                Mensagem("Fun‡Ćo ativa em Rela‡„o de Pedidos")
           EndSwitch

      Case Tecla_Funcao=-24:
           Observacao()
           Switch
             Case Table()="Progfc"   : Tecla_Funcao=""
             Case Table()="Progfp"   : Tecla_Funcao=-25
             Case Table()="Progfri"  : Tecla_Funcao=-19
             Case Table()="Progfrm"  : Tecla_Funcao=-49
             Case Table()="Progfrp"  : Tecla_Funcao=-32
             Case Table()="Progfpr"  : Tecla_Funcao=-35
             Case Table()="Progfl"   : Tecla_Funcao=-36
           EndSwitch

      Case Tecla_Funcao=-34:
           Switch
             Case Table()="Progfrm"   :
                Tecla_Funcao=-49
                Adiciona_Formulacao("Refazer")
             OtherWise                :
                Switch
                  Case Table()="Progfp"   : Tecla_Funcao=-25
                  Case Table()="Progfri"  : Tecla_Funcao=-19
                  Case Table()="Progfrp"  : Tecla_Funcao=-32
                  Case Table()="Progfpr"  : Tecla_Funcao=-35
                  Case Table()="Progfl"   : Tecla_Funcao=-36
                  OtherWise               : Tecla_Funcao=""
                EndSwitch
                Mensagem("Fun‡Ćo ativa em Rela‡„o de Consumo")
           EndSwitch

      Case Tecla_Funcao=-18:
           Switch
             Case Table()="Progfri" :
               Tecla_Funcao=-19
               Editar("")
             OtherWise:
               Switch
                 Case Table()="Progfp"   : Tecla_Funcao=-25
                 Case Table()="Progfrm"  : Tecla_Funcao=-49
                 Case Table()="Progfrp"  : Tecla_Funcao=-32
                 Case Table()="Progfpr"  : Tecla_Funcao=-35
                 Case Table()="Progfl"   : Tecla_Funcao=-36
                 OtherWise               : Tecla_Funcao=""
               EndSwitch
               Mensagem("Fun‡Ćo ativa em Rela‡„o de Itens")
           EndSwitch

      Case Tecla_Funcao=-30:
           Switch
             Case Table()="Progfri" :
               Tecla_Funcao=-19
               Carrega_ItensPedidos()
             OtherWise:
               Switch
                 Case Table()="Progfp"   : Tecla_Funcao=-25
                 Case Table()="Progfrm"  : Tecla_Funcao=-49
                 Case Table()="Progfrp"  : Tecla_Funcao=-32
                 Case Table()="Progfpr"  : Tecla_Funcao=-35
                 Case Table()="Progfl"   : Tecla_Funcao=-36
                 OtherWise               : Tecla_Funcao=""
               EndSwitch
               Mensagem("Fun‡Ćo ativa em Rela‡„o de Itens")
           EndSwitch


      Case Tecla_Funcao=-25:
           Pedidos()
      Case Tecla_Funcao=-19:
           While True
             CHAVEI()
             If CHAVEI=9 Then QuitLoop EndIf
             Controla_EdicaoI()
           EndWhile
      Case Tecla_Funcao=-49:
           While True
             CHAVEIC()
             If CHAVEIC=9 Then QuitLoop EndIf
             Controla_EdicaoIC()
           EndWhile
      Case Tecla_Funcao=-32:
           While True
             CHAVEIP()
             If CHAVEIP=9 Then QuitLoop EndIf
             Controla_EdicaoIP()
           EndWhile
      Case Tecla_Funcao=-35:
           While True
             CHAVEIPR()
             If CHAVEIPR=9 Then QuitLoop EndIf
             Controla_EdicaoIPR()
           EndWhile
      Case Tecla_Funcao=-36:
           While True
             CHAVEL()
             If CHAVEL=9 Then QuitLoop EndIf
             DigitaLiga()
           EndWhile
      OtherWise            : QuitLoop
    EndSwitch

  EndWhile

  If Finalizado
     Then Requisicao("Inclusao")
  EndIf

  Moveto "ProgfC"
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"

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

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

Array Array_TM[12]

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

AbreTabelas()
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 PickForm "2"
          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
