;** Remolho ********************************************************************
;*  Manutencao da Programacao das Partidas - REMOLHO/CALEIRO                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 29/10/2002 por Anivel Augusto Rodrigues
;Ultima Alteracao: 03/11/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Alterado em     : 16/06/2006 por Antonio Marcelo Alves
;Motivo Alteracao: Inclusao ImpriArq()
;Ultima Alteracao: 27/07/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 13/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 05/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FCouro
;Ultima Alteracao: 23/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FCouro
;Ultima Alteracao: 23/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Consumo Couro em Unidades
;Ultima Alteracao: 29/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Requisicao()
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 30/12/2010 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: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes descricao do movimento/operacao                   
;Ultima Alteracao: 06/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 20/05/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes para o Base no CopyReport do "Rm_0061" para "\\Base\\Sistemas\\Curtume\\Rm_0061"

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVEC()

While True
  FINALIZADO_OK=False
  Moveto [Numero_Partida]
  End
  SEQ = [Numero_Partida]
  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf
  Moveto [Numero_Partida]
  MSGCAMPO="Numero da Partida"

  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
           CHAVEC=5
           Return
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             FINALIZADO_OK=False

             If OPCAO_FORM="F"
                Then PAGINA("Remolh_C","MR")
                Else PAGINA("Remolh_C","MT")
             EndIf
             PARTIDA = [Numero_Partida ]
             If EDITAR="S"
                Then CHAVEC=0
                     If OPCAO_FORM="F"
                        Then PickForm "1"
                     EndIf
                     Controla_EdicaoC()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("este lan‡amento")
                                Then If OPCAO_FORM="F"
                                        Then PickForm "1"
                                     EndIf
                                     EXCLUSAO()
                                     If OPCAO_FORM="F"
                                        Then PickForm "F"
                                     EndIf
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
    Case Retval="ESC":
         Switch
           Case Field()="Numero_Partida":
                CHAVEC=9
                Del
                Return
           OtherWise:
                Left
         EndSwitch
    Case Retval="ENTER":
         Switch
           Case Field()="Numero_Partida":
                If IsBlank([])
                   Then If IsBlank(SEQ)
                           Then SEQ = 1
                           Else SEQ = SEQ + 1
                        EndIf
                        []=SEQ
                EndIf
                PARTIDA=[]
         EndSwitch
         Del
         If OPCAO_FORM="F"
            Then PickForm "1"
         EndIf
         Moveto [Numero_Partida]
         Locate PARTIDA
         If Retval
            Then CHAVEC=0
            Else CHAVEC=1
                 End PgDn
                 [Numero_Partida   ]=PARTIDA
                 [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
         EndIf
         If IsLockRecord()
            Then If OPCAO_FORM="F"
                    Then PickForm "F"
                 EndIf
                 QuitLoop
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc       ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITAC()
IF CHAVEC=0
   Then Moveto [Codigo do Item  ]
   Else Moveto [Data_Programacao]
EndIf

Pedido = True
While True

  TECLA= " Esc=Retornar  "
  If Field()="Codigo da Empresa" Or
     Field()="Codigo do Item"
     Then TECLA=TECLA+"F1=Tabelas  "
  EndIf
  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  "
  EndIf
  TECLA=TECLA+"Alt+F=Fun‡”es  PgDn=Finaliza "

  Switch
    Case Field()="Data_Programacao"     : MSGCAMPO="Data da Programa‡„o"
    Case Field()="Hora_Programacao"     : MSGCAMPO="Hora da Programa‡„o"
    Case Field()="Data_Inicio_Processo" : MSGCAMPO="Data do In¡cio do Processo"
    Case Field()="Hora_Inicio_Processo" : MSGCAMPO="Hora do In¡cio do Processo"
    Case Field()="Data_Fim_Processo"    : MSGCAMPO="Data do Fim do Processo"
    Case Field()="Hora_Fim_Processo"    : MSGCAMPO="Hora do Fim do Processo"
    Case Field()="Curtimento_Data"      : MSGCAMPO="Data Curtimento"
    OtherWise:
       MSGCAMPO=Field()
  EndSwitch
  Prompt TECLA

  Wait Field
       Message MSGCAMPO
       Until "ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F1","F5","F6","F9",-33,"F8","F2"

  If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
           "F2 ~R~efazer Formula‡„o    " : " Refazer a Formula‡„o, altera‡”es efetuadas manualmente ser„o perdidas !" : "F2",
           "F5 ~O~bserva‡”es           " : " Observa‡”es gerais da Partida   " : "F5",
           "F6 ~I~mprimir              " : " Imprimir Partida                " : "F6",
           "F8 Consumo Couro In~N~atura" : " Consumo Couro InNatura          " : "F8",
           "F9 ~F~ormula‡„o            " : " Ajustes na Formula‡„o da Partida" : "F9",
           "~C~ancelar                 " : " Cancelar a Opera‡„o             " : "CANCELAR"
          EndMenu
           To MenuVar

          echo off
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
          EndIf

          RetVal=MenuVar
  EndIf

  Switch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case RetVal="F8":
       NCampo=Field()
       Moveto "Remolh_O"
       While True
         CHAVEIT()
         If CHAVEIT=9 Then QuitLoop EndIf
         Controla_EdicaoIT()
       EndWhile
       Moveto "Remolh_C"
       If FINALIZADO_OK
          Then Return
       EndIf
       Moveto Field NCampo
  Case RetVal="F9" And CHAVEC=0:
       NCampo=Field()
       Formulacao()
       Moveto "Remolh_C"
       If FINALIZADO_OK
          Then Return
       EndIf
       Moveto Field NCampo
  Case RetVal="F5":
       NCampo=Field()
       Edita_Memo("Observacao",10,01,13,76,"Observa‡”es")
       Moveto Field NCampo
  Case RetVal="F6":
       If IsBlank([Data_Programacao]) Or
          IsBlank([Data_Inicio_Processo])
          Then Mensagem("Programa‡„o n„o concluida !")
               Loop
       EndIf

       Campo_Anterior=Field()
       IMPRIMIR()
       Moveto Field Campo_Anterior
  Case Retval="F2" And CHAVEC=0:
       If IsBlank([Data_Programacao]) Or
          IsBlank([Data_Inicio_Processo])
          Then Mensagem("Programa‡„o n„o concluida !")
          Else CHAVEC=4
               FINALIZADO_OK=True
               Return
       EndIf
  Case Retval="PGDN":
       If IsBlank([Data_Programacao]) Or
          IsBlank([Data_Inicio_Processo])
          Then Mensagem("Programa‡„o n„o concluida !")
          Else FINALIZADO_OK=True
               Return
       EndIf
  Case RetVal="F1":
       Switch
         Case Field()="Codigo da Empresa"   Or
              Field()="Codigo do Item":
              ConsultaF1()
       EndSwitch
  Case Retval="ESC":
       Switch
         Case Field()="Data_Programacao":
              If QuerDesfazer("")
                 Then EXCLUSAO()
                      QuitLoop
              EndIf
         Case Field()="Codigo da Empresa"   : Moveto [Hora_Programacao    ]
         Case Field()="Codigo do Item"      : Moveto [Codigo da Empresa   ]
              If CHAVEC=1
                 Then Moveto [Codigo da Empresa]
                 Else If QuerDesfazer("")
                         Then Undo
                              QuitLoop
                      EndIf
              EndIf
         Case Field()="Data_Inicio_Processo": Moveto [Codigo do Item      ]
         Case Field()="Total "              : Moveto [Hora_Fim_Processo   ]
         OtherWise:
              Left
       EndSwitch
  Case Retval="ENTER":
       Switch
         Case Field()="Data_Programacao":
              If IsBlank([]) Then []=Today() EndIf
              Moveto [Hora_Programacao]
         Case Field()="Hora_Programacao":
              If IsBlank([]) Then []=Time() EndIf
              Moveto [Codigo da Empresa]
         Case Field()="Codigo da Empresa":
              If IsBlank([]) Then Loop EndIf
              Moveto [Codigo do Item]
         Case Field()="Codigo do Item":
              If IsBlank([]) Then Loop EndIf

              Moveto [Lookup_FormulaC]
              FORMULA_OK=True
              Ativa_Lookup()
              Moveto [Codigo do Produto]
              Locate [Remolh_C->Codigo do Item],"",""
              If Not RetVal
                 Then Mensagem("Formula n„o cadastrada !")
                      FORMULA_OK=False
              EndIf
              KeyPress "ESC"
              If Not FORMULA_OK
                 Then Moveto [Codigo do Item]
                      Loop
              EndIf

              Moveto [Data_Inicio_Processo]
         Case Field()="Data_Inicio_Processo":
              If IsBlank([]) Then Loop EndIf
              Moveto [Hora_Inicio_Processo]
         Case Field()="Hora_Inicio_Processo":
              If IsBlank([]) Then Loop EndIf
              MOveto [Data_Fim_Processo]
         Case Field()="Data_Fim_Processo":
              If IsBlank([]) Then Loop EndIf
              If Not Checa_Data([Data_Inicio_Processo],[Data_Fim_Processo])
                 Then MENSAGEM("Data Inv lida !")
                      [Data_Fim_Processo]=BlankDate()
                 Else Moveto [Hora_Fim_Processo]
              EndIf
         Case Field()="Hora_Fim_Processo":
               If Not IsBlank ([])
                  Then If Not Checa_Hora_Data([Data_Inicio_Processo],[Hora_Inicio_Processo],[Data_Fim_Processo],[Hora_Fim_Processo])
                          Then MENSAGEM("Hora e/ou Data Inv lida !")
                               [Total_Hora_Processo]=""
                               MUDA_CAMPO=False
                          Else MUDA_CAMPO=True
                       EndIf
                  Else MENSAGEM("Hora e/ou Data Inv lida!!")
                       MUDA_CAMPO=False
                       [Total_Hora_Processo]=""
                EndIf

               If MUDA_CAMPO
                  Then  If DMin([Data_Inicio_Processo],HoraMin([Hora_Inicio_Processo]),[Data_Fim_Processo],HoraMin([Hora_Fim_Processo]))>=6000
                          Then MENSAGEM("Verificar se a data est  OK!!")
                               [Total_Hora_Processo]=""
                               Moveto [Data_Fim_Processo]
                               [Data_Fim_Processo]=BlankDate()
                          Else [Total_Hora_Processo]= FormatHora(DMin([Data_Inicio_Processo],HoraMin([Hora_Inicio_Processo]),[Data_Fim_Processo],HoraMin([Hora_Fim_Processo])))
                               Moveto [Peso Apara]
                       EndIf
               EndIf
         Case Field()="Peso Apara":
              Moveto [Data_Inicio_Processo]

         OtherWise:
              Right
       EndSwitch
  Case Retval="DEL" And CHAVEC=0:
       If QuerExcluir("")
          Then EXCLUSAO()
               QuitLoop
       EndIf

  EndSwitch
EndWhile
EndProc    ; (DigitaC)

;*******************************************************************************
;* Rotina para Transformar Horas em Minutos                                    *
;*******************************************************************************
Proc HoraMin(HORA)
Private HORA
 Return  (Numval(SubStr(HORA,1,(Search(":",HORA)-1)))*60)+NumVal(SubStr(HORA,(Search(":",HORA)+1),(Len(HORA)-(Search(":",HORA)))))
EndProc ;(HoraMin)

;*******************************************************************************
;* Rotina para Calcular Dura‡ao em Minutos                                     *
;*******************************************************************************
Proc DMin(DINI,MINI,DFIM,MINF)
Private MINI,MINF,DINI,DFIM,DIAS
  Return NumVal((MINF)+((DFIM-DINI)*1440))-NumVal(MINI)
EndProc  ;(DMin)

;*******************************************************************************
;* Rotina para Formatar Hora (00:00)                                           *
;*******************************************************************************
Proc FormatHora(MINUTOS)
Private MINUTOS
If MINUTOS<=59
   Then Return "00:"+AlinhM(StrVal(MINUTOS),2)
   Else Return AlinhM(StrVal(Int(MINUTOS/60)),2)+":"+AlinhM(StrVal(Round(((MINUTOS/60)-Int(MINUTOS/60))*60,0)),2)
EndIf
EndProc   ;(FormatHora)

;*******************************************************************************
;* Rotina para Valida‡ao da Data                                               *
;*******************************************************************************
Proc Checa_Data(DINI,DFIM)
Private DINI, DFIM
If DINI>DFIM
    Then Return False
    Else Return True
EndIf
EndProc  ;(Checa_data)

;*******************************************************************************
;* Rotina para Verifica‡ao da Hora e Data                                           *
;*******************************************************************************
Proc Checa_Hora_Data(DINI,HORAINI,DFIM,HORAFIM)
Private HORAI, MINUI,HORAF,MINUF

 HORAI=SubStr(HORAINI,1,2)
 MINUI=SubStr(HORAINI,4,2)
 HORAF=SubStr(HORAFIM,1,2)
 MINUF=SubStr(HORAFIM,4,2)

 If (NumVal(HORAI)>24 or NumVal(MINUI)>59) or (NumVal(HORAF)>24 or NumVal(MINUF)>59)
    Then  Return False
    Else If DINI=DFIM
            Then If HORAINI=HORAFIM and MINUI=MINUF
                    Then Return False
                    Else If HORAINI>HORAFIM
                            Then Return False
                            Else Return True
                         EndIf
                 EndIf
             Else If HORAINI>HORAFIM and DINI=DFIM
                     Then Return False
                     Else Return True
                  EndIf
         EndIf
 EndIf

EndProc; (Checa_hora_data)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc Imprimir()

Echo Normal
Echo Off
ShowPopup " Imprimir " CENTERED
 "~1~ Formula‡„o s/Custo  " : " Imprimir Formula‡„o sem Custo   " : "FORMULACAO",
 "~2~ Formula‡„o c/Custo  " : " Imprimir Formula‡„o com Custo   " : "FORMULACAOC",
 "~3~ Ficha Acompanhamento" : " Imprimir Ficha de Acompanhamento" : "FICHA",
 "~C~ancelar              " : " Cancelar a Opera‡„o             " : "CANCELAR"
EndMenu
 To MenuVar

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

VSDGNPARTIDA =[Numero_Partida      ]
CDEMPRESA    =[Codigo da Empresa   ]
DTINICIO     =[Data_Inicio_Processo]
DHINICIO     =StrVal([Data_Inicio_Processo])+" "+[Hora_Inicio_Processo]
DHFIM        =StrVAl([Data_Fim_Processo   ])+" "+[Hora_Fim_Processo   ]
If CHAVEC=1
   Then Adiciona_Formulacao("")
EndIf
Requisicao("Inclusao")
Do_It!
ClearAll

While True
  If MenuVar="FORMULACAOC"
     Then If Not Seleciona_Ficha()
             Then QuitLoop
          EndIf

          AGUARDE("Aguarde, gerando o relat¢rio")
          {Ask} {Remolh_C}
          Moveto [Numero_Partida] Example "np"
          {Ask} {Remolh_I} Check
          Moveto [Numero_Partida] Example "np" TypeIn ", " TypeIn VSDGNPARTIDA
          Do_It!
          ClearAll

          If IsEmpty("Answer")
             Then MENSAGEM("N„o existe Formula a processar !")
                  QuitLoop
             Else AGUARDE("Aguarde, Calculando Custo")
                  Atualiza_Custo()
          EndIf
  EndIf

  OK=""
  DISPOSITIVO()
  If OK=""
     Then QuitLoop
  EndIf

  If MenuVar="FORMULACAOC" Or
     MenuVar="FORMULACAO"
     Then ASP1=""
          ASP2=""
          ARQIMP = DIREPORT+"FORMULA.TXT"
          Switch
            Case OK="A": ARQIMP = DIREPORT+ARQUIVO+".TXT"
            Case OK="V": ASP1="\""
                         ASP2="\""
          EndSwitch
          Deleta_Arquivo(ARQIMP)
          AGUARDE("Imprimindo")
          If MenuVar="FORMULACAO"
             Then Play "FO_0010"
             Else Play "FO_0015"
                  Delete "Answer"
          EndIf

          If OK="V"
             Then Tabela=Cria_Temp(PrivDir())
                  {Tools} {Copy} {Table} {Rm_tx250} TypeIn Tabela Enter ClearAll
                  {Tools} {ExportImport} {Import} {ASCII} {AppendDelimited} TypeIn ARQIMP Enter
                  TypeIn Tabela Enter ClearAll
                  OPCAOPAG="Todas"
                  IMPRIREL(Tabela,"R")
                  Deleta_Arquivo(ARQIMP)
                  Delete Tabela
             Else Mensagem("Impress„o Concluida !")
                  If OK="I"
                     Then
;---- Imprime Arquivo Impressao ------------------------------------------------
                      ImpriArq(ARQIMP)
                  EndIf
          EndIf
  EndIf
  If MenuVar="FICHA"
     Then AGUARDE("Aguarde, gerando o relat¢rio")
          {Ask} {Remolh_C} Check
          Moveto [Numero_Partida] Example "np"
          {Ask} {Remolh_O} Check
          Moveto [Numero_Partida] Example "np" TypeIn ", " TypeIn VSDGNPARTIDA
          Do_It!
          ClearAll

          If Not IsEmpty("Answer")
             Then VSDGNPARTIDA=AlinhM(StrVAl(VSDGNPARTIDA),6)
                  Switch
                    Case SYS_CODIGO_CLIENTE="0053" : CopyReport "\\base\\sistemas\\curtume\\RM_0061" "1" "Answer" "R"
                    OtherWise                      : CopyReport "\\base\\sistemas\\curtume\\RM_0061" "R" "Answer" "R"
                  EndSwitch
                  IMPRIREL("Answer","R")
             Else MENSAGEM("N„o existe Formula a processar !")
          EndIf

          Delete "Answer"
  EndIf
  QuitLoop
EndWhile
LimpAguarde()

View "\\Sistemas\\Estoque\\RqCabeca"
View "\\Sistemas\\Estoque\\RqItem"
View "\\Sistemas\\Estoque\\EstqPrm"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Requisit"
View "Remolh_I"
View "Remolh_O"
CoEdit "Remolh_C"
PickForm "1"
Moveto [Numero_Partida]
Locate PARTIDA

Return True
EndProc  ; (Imprimir)

;*******************************************************************************
;* Atualiza Custo                                                              *
;*******************************************************************************
Proc ATUALIZA_CUSTO()
View "\\Sistemas\\Estoque\\SdEstq"
CoEdit "Answer"
Scan For Not IsBlank([Codigo do Material]) and
                     [Codigo do Material]<>"0000009999"
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA,[Answer->Codigo do Material],VSDGANO, VSDGMES
  If RetVal
     Then Moveto "Answer"
          [Custo Unitario]=[\Sistemas\Estoque\SdEstq->Preco de Custo]
          [Observacoes   ]=StrVal([\Sistemas\Estoque\SdEstq->Data do Preco de Custo])
     Else Moveto "Answer"
          [Observacoes]=""
          MSG="N„o foi encontrada a ficha de estoque referente a "+VSDGMES+"/"+VSDGANO+" !// //"
          MSG=MSG+Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+Format("W30,AL","Descri‡„o")+"//"
          MSG=MSG+Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[Answer->Codigo do Material])+"| "+Format("W30,AL",[Answer->Descricao do Item])+"//"
          MSG=MSG+"Observacoes:                                                           //"
          MSG=MSG+"1. Talvez n„o foi executada a transferencia de saldos do mes anterior; //"
          MSG=MSG+"// "
          MENSAGEM(MSG)
  EndIf
  [Custo Total]=[Custo Unitario]*[Quantidade]
  Moveto "Answer"
EndScan
Do_It!
ClearAll
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog2(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_MESANO"        : Campo="TG_EMPRESA"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :
                         VSDGMES=SubStr(VSDGMESANO,1,2)
                         VSDGANO=SubStr(VSDGMESANO,4,4)
                         If NumVal(VSDGANO) < 2000
                            Then VSDGANO=SubStr(VSDGANO,3,2)
                            Else VSDGANO=VSDGANO
                         EndIf
                    Case Campo="YES"  : AcceptDialog
                    Case Campo="NO"   : CancelDialog
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe a Empresa de referlncia p/ ficha de estoque"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Ficha Estoque                                                        *
;*******************************************************************************
Proc Seleciona_Ficha()
VSDGEMPRESA     =CDEMPRESA
VSDGMESANO      =AlinhM(StrVal(Month(DTINICIO)),2)+"."+
                 AlinhM(StrVal(Year(DTINICIO)),4)
While True

  ShowDialog "Referencia de Custo" Proc "SD_Dialog2"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB"
    @ 10,17 Height 09 Width 38

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

    Label  @ 02,00 "Mˆs/Ano Ficha Estoque"  For "TG_MESANO"
    Accept @ 03,01  Width 10 "A07"  Picture "##.####" Tag "TG_MESANO" To VSDGMESANO

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

  EndDialog

  If Not RetVal
     Then Return False
  EndIf

  If IsBlank(VSDGEMPRESA)
     Then Loop
  EndIf
  Return True
EndWhile
EndProc

;*******************************************************************************
;* Rotina de Formulacao                                                        *
;*******************************************************************************
Proc Adiciona_Formulacao(Tipo)
Moveto "Remolh_C"
UnLockRecord
PickForm "2"

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

Moveto "FormulaI"
Moveto [Codigo do Produto]
Locate [Remolh_C->Codigo do Item],"",""
If RetVal
   Then
        While [Codigo do Produto]=[Remolh_C->Codigo do Item      ] And
              [Codigo Cor_Tecido]="" And [Tamanho]=""

          Moveto "Remolh_I"
          End Down
          [Numero_Partida         ]=[Remolh_C->Numero_Partida         ]
          [Codigo da Etapa        ]=[FormulaI->Codigo da Etapa        ]
          [Fase                   ]=[FormulaI->Fase                   ]
          [Sequencia              ]=[FormulaI->Sequencia              ]
          [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        ]
          [Porcentagem            ]=[FormulaI->Porcentagem            ]
          [Temperatura            ]=[FormulaI->Temperatura            ]
          [Tempo                  ]=[FormulaI->Tempo                  ]
          [Observacoes            ]=[FormulaI->Observacoes            ]
          If [Sequencia]>0
             Then [Quantidade]=NDecimal(([Porcentagem]*[Remolh_C->Quantidade_Kg])/100,6)
          EndIf

          Moveto "FormulaI"
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf
Moveto "Remolh_C"
UnLockRecord
PickForm "1"
EndProc

;*******************************************************************************
;* Rotina de Formulacao                                                        *
;*******************************************************************************
Proc Formulacao()
UnLockRecord
PickForm "2"

Moveto "Remolh_I"
While True
  CHAVEI()
  If CHAVEI=9
     Then QuitLoop
  EndIf
  If CHAVEI=5
     Then QuitLoop
  EndIf
  Controla_EdicaoI()
EndWhile
Moveto "Remolh_C"

UnLockRecord
PickForm "1"

EndProc ;(Formulacao)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
While True
  Moveto [Codigo da Etapa]
  End
  Down
  Moveto [Codigo da Etapa]

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

    TECLA= " Esc=Retornar  F3=Ver Ficha  F7=Paginar  PgDn=Finalizar  "

    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGDN","PGUP"

    Switch
    Case Retval="F3":
         Del
         Moveto [Codigo da Etapa]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         ETAPA=[Codigo da Etapa]
         FASE =[Fase     ]
         SEQIT=[Sequencia]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case Retval="PGDN":
         If IsBlank([Remolh_C->Data_Programacao]) Or
            IsBlank([Remolh_C->Data_Inicio_Processo])
            Then Mensagem("Programa‡„o n„o concluida !")
                 Loop
         EndIf

         Del
         CHAVEI=9
         FINALIZADO_OK=True
         Return
    Case RetVal="ESC":
         If Field()="Codigo da Etapa"
            Then Del
                 CHAVEI=9
                 Return
            Else Left
         EndIf
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("Remolh_I","MR")
           If EDITAR="S"
              Then CHAVEI=0
                   ETAPA=[Codigo da Etapa]
                   FASE =[Fase     ]
                   SEQIT=[Sequencia]
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   Del
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Field()="Codigo da Etapa"
            Then ETAPA=[]
                 Right
                 Loop
         EndIf
         If Field()="Fase"
            Then FASE =[]
                 Right
                 Loop
         EndIf
         SEQIT=[]
         Del
         Locate PARTIDA, ETAPA, FASE, SEQIT
         If Retval
            Then CHAVEI=0
            Else CHAVEI=1
                 End
                 Down
                 [Numero_Partida   ]=PARTIDA
                 [Codigo da Etapa  ]=ETAPA
                 [Fase             ]=FASE
                 [Sequencia        ]=SEQIT
                 UnLockRecord
                 Locate PARTIDA, ETAPA, FASE, SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (CHAVEI)

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

If INICIO_DIALOG
   Then If SEQIT<1
           Then Campo="I_Descricao_Item"
           Else Campo="I_Codigo_Item"
        EndIf
        INICIO_DIALOG=False
EndIf
If Opcao_Ver=True Then Campo="I_Fase" 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 ETAPA=[Codigo da Etapa]
                      FASE =[Fase     ]
                      SEQIT=[Sequencia]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -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 "Remolh_I"
          EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"      :
                 If QuerDesfazer("")
                    Then If CHAVEI=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEI=9
                         CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    : Campo="I_Codigo_Item"
                 If SEQIT<1
                    Then If QuerDesfazer("")
                            Then If CHAVEI=1
                                    Then Del
                                    Else CopyFromArray RegItem
                                 EndIf
                                 CHAVEI=9
                                 CancelDialog
                         EndIf
                 EndIf
            Case Campo="I_UN_Item"           : Campo="I_Descricao_Item"
            Case Campo="I_Tipo_Item"         : Campo="I_UN_Item"
            Case Campo="I_Porcentagem"       :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Tipo_Item"
                    Else Campo="I_Codigo_Item"
                 EndIf
            Case Campo="I_Temperatura"       : Campo="I_Porcentagem"
            Case Campo="I_Tempo"             : Campo="I_Temperatura"
            Case Campo="I_Obs"               : Campo="I_Tempo"
            Case Campo="I_Flag"              : Campo="I_Obs"
          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
                                 [Descricao do Item ]=VSD_I_Descricao_Item
                                 Registro_Item("Ler")
                                 Campo="I_Porcentagem"
                            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")
                 If SEQIT<1
                    Then VSD_I_Descricao_Item=" [ "+VSD_I_Descricao_Item+" ] "

                         ci=Search(" [ ",VSD_I_Descricao_Item)
                         cf=Search(" ] ",VSD_I_Descricao_Item)
                         tm=(cf+3)-ci
                         VSD_I_Descricao_Item=Fill("-",Int((28-tm)/2))+SubStr(VSD_I_Descricao_Item,ci,tm)
                         VSD_I_Descricao_Item=VSD_I_Descricao_Item+Fill("-",28-Len(VSD_I_Descricao_Item))
                         AcceptDialog
                 EndIf
                 If IsBlank(VSD_I_Descricao_Item)
                    Then VSD_I_UN_Item       =""
                         VSD_I_Tipo_Item     =""
                         VSD_I_Porcentagem   =BlankNum()
                         VSD_I_Temperatura   =BlankNum()

                         Campo="I_Obs"
                    Else Campo="I_UN_Item"
                 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_Tipo_Item"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
            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_Porcentagem"
                            Else Mensagem("Tipo do Item n„o Cadastrado !")
                                 VSD_I_Tipo_Item=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Porcentagem":
                 VSD_I_Porcentagem=ControlValue("I_Porcentagem")

                 If [Sequencia]>0
                    Then VSD_I_Quantidade =NDecimal((VSD_I_Porcentagem*[Remolh_C->Quantidade_Kg])/100,6)
                 EndIf

                 Campo="I_Temperatura"
            Case Campo="I_Temperatura":
                 VSD_I_Temperatura=ControlValue("I_Temperatura")
                 Campo="I_Tempo"
            Case Campo="I_Tempo":
                 VSD_I_Tempo=ControlValue("I_Tempo")
                 Campo="I_Obs"
            Case Campo="I_Obs":
                 VSD_I_Obs=ControlValue("I_Obs")
                 Campo="I_Flag"
            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_Flag"          : MSGCAMPO="[pausa]"
  Case Campo="I_Porcentagem"   : MSGCAMPO="Porcentagem"
  Case Campo="I_Temperatura"   : MSGCAMPO="Temperatura"
  Case Campo="I_Tempo"         : MSGCAMPO="Tempo"
  OtherWise                    : MSGCAMPO=""
EndSwitch

If CHAVEI=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_Dialog)

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

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Interna           ]=VSD_I_UN_Item

       [Porcentagem               ]=VSD_I_Porcentagem
       [Temperatura               ]=VSD_I_Temperatura
       [Tempo                     ]=VSD_I_Tempo
       [Observacoes               ]=VSD_I_Obs
  Case Funcao_Registro="Ler":
       VSD_I_Fase                   =[Fase                     ]
       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_Porcentagem            =[Porcentagem               ]
       VSD_I_Temperatura            =[Temperatura               ]
       VSD_I_Tempo                  =[Tempo                     ]
       VSD_I_Obs                    =[Observacoes               ]
EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Fase]
Locate PARTIDA, ETAPA, FASE, SEQIT
CopyToArray RegItem
Registro_Item("Ler")
EndProc ; (Inicia_Registro)

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

Showdialog "Dados do Item [     /     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 11,3 height 08 width 71

   Accept @ -01,36 Width 5 "S" Tag "I_Fase" To VSD_I_FASE
   Accept @ -01,42 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 "UN" For "I_UN_Item"
   Accept @ 01,58 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 00,64 "TI" For "I_Tipo_Item"
   Accept @ 01,64 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,06 "%" For "I_Porcentagem"
   Accept @ 03,06 Width 08 "N" picture "#*#.[####]" Tag "I_Porcentagem" to VSD_I_Porcentagem
   Label  @ 02,15 "C§" For "I_Porcentagem"
   Accept @ 03,15 Width 07 "S" picture "#*#"        Tag "I_Temperatura" to VSD_I_Temperatura
   Label  @ 02,23 "Tempo" For "I_Porcentagem"
   Accept @ 03,23 Width 08 "A5" picture "##:##"     Tag "I_Tempo"       to VSD_I_Tempo
   Label  @ 02,33 "Quantidade" For "I_Quantidade"
   Accept @ 03,33 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

   Label  @ 04,01 "Observa‡„o" For "I_Obs"
   Accept @ 05,01 Width 62 "A255" picture "!*!" Tag "I_Obs"  to VSD_I_Obs

   Accept @ 05,64 Width  3 "A1"   picture "!*!" Tag "I_Flag" to VSD_I_Flag

EndDialog
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc   ; (DigitaI)

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


;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVEIT()

While True

  Moveto "Remolh_O"
  Moveto [Quantidade_Kg]
  TOTKG = ImageCSum()
  Moveto [Quantidade_Couros]
  TOTNP = ImageCSum()
  Moveto "Remolh_C"
  [Quantidade_Kg    ]=TOTKG
  [Quantidade_Couros]=TOTNP
  Moveto "Remolh_O"

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

  SetaCorRegistro("Editar")
  While true

    TECLA=" Esc=Retornar  "

    Prompt TECLA+ "F7=Paginar  PgDn=Finalizar  "

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

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto [Quantidade_Kg]
           TOTKG = ImageCSum()
           Moveto [Quantidade_Couros]
           TOTNP = ImageCSum()
           Moveto "Remolh_C"
           [Quantidade_Kg    ]=TOTKG
           [Quantidade_Couros]=TOTNP
           Moveto "Remolh_O"

           PAGINA("Remolh_O","MR")
           If EDITAR="S"
              Then CHAVEIT=0
                   SEQ=[Sequencia]
                   Controla_EdicaoIT()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then DEL
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Del
         CHAVEIT=9
         Continuar=False
         Return
      ;;;Moveto "Remolh_O"
      ;;;Pickform "1"
    Case Retval="PGDN":
         If IsBlank([Remolh_C->Data_Programacao]) Or
            IsBlank([Remolh_C->Data_Inicio_Processo])
            Then Mensagem("Programa‡„o n„o concluida !")
                 Loop
         EndIf

         CHAVEIT=9
         FINALIZADO_OK=True
         Del
         Return
    Case Retval="ENTER":
         If Not Seta_Sequencia(SEQ,True)
            Then Del
                 QuitLoop
         EndIf
         SEQ=[]
         Del
         Locate SEQ
         If RetVal
            Then CHAVEIT=0
                 Moveto [Sequencia]
            Else CHAVEIT=1
                 End Down
                 [Sequencia]=SEQ
         Endif
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveIT)

;*******************************************************************************
;* Rotina para Digitacao dos Itens                                             *
;*******************************************************************************
Proc DIGITAIT()

If CHAVEIT=0
   Then Moveto [Quantidade_Kg]
   Else Moveto [Codigo]
EndIf

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo" Or
         Field()="Codigo do Item_Consumido"
         Then TECLA=TECLA+"F1=Tabelas  "
      Endif

      If CHAVEIT=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf

      Prompt TECLA

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

      Switch
      Case RetVal="F1":
           If Field()="Codigo"
              Then If ConsultaF1()
                      Then [Nome Fantasia EmitDest  ]=REG_CONSULTAF1["Nome Fantasia EmitDest"]
                           [Razao Social            ]=REG_CONSULTAF1["Razao Social"]
                           [Codigo do Item_Consumido]=REG_CONSULTAF1["Codigo do Item_Consumido"]
                           [Descricao do Item       ]=REG_CONSULTAF1["Descricao do Item"]
                           [Unidade Fiscal          ]=REG_CONSULTAF1["Unidade Fiscal"]

                           Moveto [Quantidade_Kg]
                   EndIf
           Endif
           If Field()="Codigo do Item_Consumido"
              Then ConsultaF1()
           Endif
      Case Retval="ESC":
         Switch
          Case Field()="Codigo":
               If QuerDesfazer("")
                  Then If CHAVEIT=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVEIT=9
                        QuitLoop
                EndIf
           Case Field()="Codigo do Item_Consumido": Moveto [Codigo]
           Case Field()="Quantidade_Kg"           : Moveto [Codigo do Item_Consumido]
           OtherWise                              : Left
        EndSwitch
      Case Retval="ENTER":
         Switch
           Case Field()="Codigo":
                If IsBlank([])
                   Then [Nome Fantasia EmitDest]=""
                        [Razao Social          ]=""
                   Else If Busca_Lookup("Codigo",[Codigo],"")
                           Then [Nome Fantasia EmitDest  ]=REG_BUSCA_LOOKUP["Nome Fantasia EmitDest"]
                                [Razao Social            ]=REG_BUSCA_LOOKUP["Razao Social"]
                        EndIf
                Endif
                Moveto [Codigo do Item_Consumido]
           Case Field()="Codigo do Item_Consumido":
                If IsBlank([])
                   Then Loop
                   Else Moveto [Quantidade_Kg]
                Endif
          Case Field()="Quantidade_Couros"        :
               UnLockRecord
               Quitloop
          OtherWise                               : Right
        EndSwitch
     Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEIT=0
              Then If QuerExcluir("")
                      Then DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc   ;  (DigitaIT)


;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO()
Aguarde("Aguarde, Excluindo Dados")

Moveto "Remolh_C"
UnLockRecord
PickForm "2"
Moveto "Remolh_I"
While RecordStatus("New")=False
  Del
EndWhile

Moveto "Remolh_C"
PickForm "1"
Moveto "Remolh_O"
While RecordStatus("New")=False
  Del
EndWhile

REQUISICAO("Exclusao")
Del
PickForm "1"
LimpAguarde()
EndProc

;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(Tipo)
Private NUMEROL, RQ_ENCONTRADA, MES_EST, ANO_EST, CUSTO,
        SEQ, Tipo, CODITEM, QTDITEM
Moveto "Remolh_C"
UnLockRecord
FormKey

NUMEROL=""
If IsBlank([Remolh_C->Lancamento RqCabeca])
   Then RQ_ENCONTRADA=False
   Else Moveto "\\Sistemas\\Estoque\\RQCabeca"
        Moveto [Numero do Lancamento]
        Locate [Remolh_C->Lancamento RqCabeca]
        If RetVal
           then If [Codigo da Empresa]=[Remolh_C->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([Remolh_C->Lancamento RqCabeca])
           Then MSG="Requisi‡„o de Estoque N. "+[Remolh_C->Lancamento RqCabeca]+" 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 "Remolh_C"
                FormKey
                Return
        EndIf

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

        Moveto "\\Sistemas\\Estoque\\RqItem"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While [Numero do Lancamento]=NUMEROL
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\RqCabeca->Data de Ocorrencia])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]))

                  Moveto "\\Sistemas\\Estoque\\SdEstq"
                  Moveto [Codigo da Empresa]
                  Locate [\Sistemas\Estoque\RqItem->Codigo da Empresa],
                         [\Sistemas\Estoque\RqItem->Codigo do Item], ANO_EST, MES_EST
                  If RetVal
                     Then While True
                            If Not IsLockRecord()
                               Then QuitLoop
                            EndIf
                          EndWhile

                          CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                          If CUSTO<=0
                             Then CUSTO=[Ultimo Custo Atual]
                          EndIf
                          [Saldo Atual      ]=NDecimal([Saldo Atual      ]+[\Sistemas\Estoque\RqItem->Quantidade ],3)
                          [Custo Total Atual]=NDecimal([Custo Total Atual]+(CUSTO*[\Sistemas\Estoque\RqItem->Quantidade ]),2)
                          If ([Custo Total Atual]/[Saldo Atual])>0
                             Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                          EndIf
                          UnLockRecord
                  EndIf

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

If Tipo="Exclusao"
   Then Moveto "Remolh_C"
        FormKey
        Return
EndIf

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

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 End
 If Not IsBlank([Remolh_C->Lancamento RqCabeca]) And SEQ=0
    Then NUMEROL=[Remolh_C->Lancamento RqCabeca]
    Else Moveto [Numero do Lancamento]
         If Numero_Lancamento("Interno","")
            Then NUMEROL = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC
         EndIf
 EndIf
 SEQ=SEQ+1
 Down
 [Numero do Lancamento  ]=NUMEROL
 If IsLockRecord()
    Then Del
         Loop
 EndIf

 QuitLoop
EndWhile
[Codigo da Empresa     ]=[Remolh_C->Codigo da Empresa]
[Tipo de Movimento     ]="S"
[Descricao do Movimento]="SAIDA"
[Tipo de Operacao      ]="C"
[Descricao da Operacao ]="CONSUMO"
[Codigo do Documento   ]="REQ"
[Numero do Documento   ]=AlinhM(StrVal([Remolh_C->Numero_Partida   ]),6)
[Data de Ocorrencia    ]=[Remolh_C->Data_Inicio_Processo ]
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
UnLockrecord

SEQ=0

For i From 1 To 2
  If i= 1
     Then Moveto "Remolh_I"
     Else Moveto "Remolh_O"
  EndIf

  Moveto [Numero_Partida]
  Locate [Remolh_C->Numero_Partida]
  While [Numero_Partida]=[Remolh_C->Numero_Partida]

   For wci From 1 to 2

    If i=1
       Then Moveto [Codigo do Material]
            CODITEM=[Codigo do Material]
            QTDITEM=[Quantidade        ]
            If IsBlank([Codigo do Material]) Or
               [Codigo do Material]="0000009999"
               Then QuitLoop
            EndIf
       Else Moveto [Codigo do Item_Consumido]

            If wci=1
               Then CODITEM=[Codigo do Item_Consumido]
                    QTDITEM=[Quantidade_Kg     ]
               Else CODITEM=SubStr([Codigo do Item_Consumido],1,6)+"3"+
                            SubStr([Codigo do Item_Consumido],8,3)
                    QTDITEM=[Quantidade_Couros ]
            EndIf

            ;Rateio_Apara
             [Peso_Apara  ]=Round((([Remolh_C->Peso Apara]*(([Quantidade_Kg]/[Remolh_C->Quantidade_Kg])*100))/100),3)
    EndIf

    MES_EST = AlinhM(StrVal(Month([Remolh_C->Data_Inicio_Processo])),2)
    ANO_EST = StrVal(Year([Remolh_C->Data_Inicio_Processo]))

    While True
      Moveto "\\Sistemas\\Estoque\\SdEstq"
      Moveto [Codigo da Empresa]
      Locate [Remolh_C->Codigo da Empresa ], CODITEM, ANO_EST, MES_EST
      If Not RetVal
         Then Cria_Ficha([Remolh_C->Codigo da Empresa ],CODITEM,False)
              Loop
      EndIf
      If IsLockRecord()
         Then Loop
      EndIf

      CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
      If CUSTO<=0
         Then CUSTO=[Ultimo Custo Atual]
      EndIf
      [Saldo Atual      ]=NDecimal([Saldo Atual]-QTDITEM,3)
      [Custo Total Atual]=NDecimal([Custo Total Atual]-(QTDITEM*CUSTO),2)
      If ([Custo Total Atual]/[Saldo Atual])>0
         Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
      EndIf
      UnLockRecord

      QuitLoop
    EndWhile

    While True
      Moveto "\\Sistemas\\Estoque\\EstqPrm"
      Moveto [Codigo da Empresa]
      Locate [Remolh_C->Codigo da Empresa], CODITEM
      If Not RetVal
         Then End Down
              [Codigo da Empresa   ]=[Remolh_C->Codigo da Empresa ]
              [Codigo do Item      ]=CODITEM
              UnLockRecord
              Loop
      EndIf
      If IsLockRecord()
         Then Loop
      EndIf
      If [Remolh_C->Data_Inicio_Processo]>[Data da Ultima Saida]
         Then [Data da Ultima Saida]=[Remolh_C->Data_Inicio_Processo]
      EndIf

      UnLockRecord
      QuitLoop
    EndWhile

    Moveto "\\Sistemas\\Estoque\\Itens"
    Moveto [Codigo do Item]
    Locate CODITEM
    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          ]=[Remolh_C->Codigo da Empresa ]
    [Tipo do Item               ]=WS_TITEM
    [Codigo do Item             ]=CODITEM
    [Descricao do Item          ]=WS_DITEM
    [Quantidade                 ]=QTDITEM
    [Unidade Interna            ]=WS_UNI
    [Custo Unitario             ]=CUSTO
    [Custo Total                ]=NDecimal(CUSTO*[Quantidade],2)
    UnLockrecord

    If i= 1
       Then Moveto "Remolh_I"
       Else Moveto "Remolh_O"
    EndIf

    Switch
      Case SYS_CODIGO_CLIENTE="0052":
        If i=1 Then QuitLoop EndIf
      OtherWise:
        QuitLoop
    EndSwitch

   EndFor

   Skip
   If EOT() Then QuitLoop EndIf
  EndWhile

EndFor
Moveto "Remolh_C"
[Lancamento RQCabeca]=NUMEROL
UnLockRecord
FormKey
EndProc

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES
ESTQ_MES=ALINHM(StrVal(Month([\Sistemas\Estoque\RQCabeca->Data de Ocorrencia])),2)
ESTQ_ANO=ALINHM(StrVal(Year([\Sistemas\Estoque\RQCabeca->Data de Ocorrencia])),4)

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 controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
Inicia_Registro()
DIGITAI()
Moveto "Remolh_I"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoIT()
DIGITAIT()
Moveto "Remolh_O"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITAC()
If FINALIZADO_OK
   Then If CHAVEC=1
           Then Adiciona_Formulacao("")
        EndIf
        If CHAVEC=4
           Then Adiciona_Formulacao("Refazer")
        EndIf
        Requisicao("Inclusao")
EndIf
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

View "\\Sistemas\\Estoque\\RqCabeca"
View "\\Sistemas\\Estoque\\RqItem"
View "\\Sistemas\\Estoque\\EstqPrm"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Requisit"
View "Remolh_I"
View "Remolh_O"
CoEdit "Remolh_C"
PickForm "F"
OPCAO_FORM="F"
While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
