;** FormulaC *******************************************************************
;*  Cadastro de Formulas                                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/09/2002 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 04/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes                
;Ultima Alteracao: 21/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Contrala_Edicao()
;Ultima Alteracao: 03/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tamanho="" Codigo Cor_Tecido Item=Cabeca
;Ultima Alteracao: 16/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Copia Formula
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 02/07/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NOVA(),NOVAREF()

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()
While True
  Moveto [Codigo do Produto]
  End

  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf

  SetaCorRegistro("Editar")
  While True

  If Field()="Codigo do Produto" or
     Field()="Codigo Cor_Tecido"
     Then TECLA="F1=Tabelas"
     Else TECLA=""
  EndIf

  MSG_CAMPO=Field()

  AguardaTeclasPadrao()

  Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3":
           If OPCAO_FORM="F"
              Then OPCAO_FORM="2"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVEC=5
           Return
      Case RetVal="F1":
           Switch
             Case Field()="Codigo do Produto":
                  Moveto [Lookup_Produto]
                  ConsultaF1()
                  [Codigo do Produto]=[]
                  []=""
                  Moveto [Codigo do Produto]
             OtherWise:
                If Field()="Codigo Cor_Tecido"
                   Then CONSULTAF1()
                EndIf
           EndSwitch
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
            If OPCAO_FORM="F"
               Then PAGINA("FormulaC","MR")
               Else PAGINA("FormulaC","MT")
            EndIf
            CODIGOI=[Codigo do Produto]
            CODIGOC=[Codigo Cor_Tecido]
            TAMANHO=""
            If EDITAR="S"
               Then CHAVEC=0
                    PickForm "1"
                    Controla_EdicaoC()
               Else If EXCLUIR="S"
                       Then If QuerExcluir("esta formula")
                               Then EXCLUSAO("Cabeca")
                               Else UnLockRecord
                            EndIf
                       Else QuitLoop     
                    EndIf
            EndIf
            If OPCAO_FORM="2"
               Then PickForm "1"
               Else PickForm "F"
            EndIf
            SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           Switch
             Case Field()="Codigo do Produto":
               CHAVEC=9
               Del
               Return
             Case Field()="Codigo Cor_Tecido":
               Moveto [Codigo do Produto]
               [Codigo do Produto     ]=""
               [Descricao do Item     ]=""
               [Unidade Interna       ]=""
               [Tipo do Item          ]=""
               [Descricao Tipo do Item]=""
           EndSwitch
      Case Retval="ENTER":
           Switch
             Case Field()="Codigo do Produto":
                  If IsBlank([]) Then Loop EndIf
                  CODIGOI=AlinhM([],10)
                  Moveto [Lookup_Produto]
                  Ativa_Lookup()
                  Moveto [Codigo do Item]
                  Locate CODIGOI
                  If Not RetVal
                     Then Mensagem("Codigo do Item Invalido !")
                          KeyPress "ESC"
                          Moveto [Codigo do Produto]
                          Loop
                  EndIf
                  KeyPress "ESC"
                  [Lookup_Produto   ]=CODIGOI
                  [Codigo do Produto]=CODIGOI
                  [Tamanho          ]=""
                  Moveto [Codigo Cor_Tecido]
             Case Field()="Codigo Cor_Tecido":
                  CODIGOC=[]
                  TAMANHO=""
                  Del
                  PickForm "1"
                  Locate CODIGOI, CODIGOC, TAMANHO
                  If Retval
                     Then CHAVEC=0
                     Else CHAVEC=1
                          End PgDn
                          [Codigo do Produto]=CODIGOI
                          [Lookup_Produto   ]=CODIGOI
                          [Codigo Cor_Tecido]=CODIGOC
                          [Tamanho          ]=TAMANHO
                  EndIf
                  If IsLockRecord()
                     Then If OPCAO_FORM="F"
                             Then PickForm "F"
                          EndIf
                          Quitloop
                  EndIf
                  Return
           EndSwitch
     EndSwitch
  EndWhile
EndWhile
EndProc  ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()
[Lookup_Produto]=""
[Lookup_Etapa  ]=""
[Codigo da Etapa   ]=""
[Descricao da Etapa]=""
Moveto [Baixa_Automatica]
While True

      TECLA=" Esc=Retornar  "

      If CHAVEC=0
         Then TECLA=TECLA + "F8/=Itens  Del=Excluir  F4=Copiar  "
      EndIf
      Switch
        Case Field()="Baixa_Automatica"        : MSG_CAMPO="Baixa autom tica no estoque pela entrada por produ‡„o (Sim/N„o)"
        Case Field()="Quantidade Produzida"    : MSG_CAMPO="Quantidade Produzida/Lote M¡nimo ou Media - Unidade Fiscal"
        Case Field()="Quantidade_Produz_Kg"    : MSG_CAMPO="Quantidade Produzida/Lote M¡nimo ou Media - Kilograma"
        Case Field()="Quantidade_Produz_Meios" : MSG_CAMPO="Quantidade Produzida/Lote M¡nimo ou Media - Meios"
        OtherWise                              : MSG_CAMPO=""
      EndSwitch

      Prompt TECLA
      
      Wait Field
           Message MSG_CAMPO
           Until "ESC","ENTER","F8","DEL","FIELDVIEW","F35","F4","DOWN"

      Switch
      Case RetVal="F8" or RetVal="DOWN":
           If CHAVEC=0
              Then QuitLoop
           EndIf
      Case RetVal="F4" And CHAVEC=0:
           NOVA()
           Moveto [Quantidade Produzida]
      Case Retval="ESC":
           Switch
           Case Field()="Baixa_Automatica":
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
           Case Field()="Quantidade_Produz_Meios":
                Moveto [Baixa_Automatica]
           Otherwise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If QuerExcluir("esta formula")
                      Then EXCLUSAO("Cabeca")
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER":
           Switch
           Case Field()="Baixa_Automatica":
                If IsBlank([])
                   Then Loop
                EndIf
                Moveto [Quantidade_Produz_Meios]
           Case Field()="Quantidade Produzida":
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Iniciar ETAPA                                                   *
;*******************************************************************************
Proc Etapa()
[Lookup_Etapa  ]=""
[Codigo da Etapa   ]=""
[Descricao da Etapa]=""
Moveto [Codigo da Etapa]
While True

      TECLA=" Esc=Retornar  "

      If CHAVEC=0
         Then TECLA=TECLA + "F1=Tabelas  F4=Copiar  "
      EndIf
      Switch
        OtherWise                           : MSG_CAMPO=""
      EndSwitch

      Prompt TECLA
      
      Wait Field
           Message MSG_CAMPO
           Until "ESC","ENTER","FIELDVIEW","F35","F1","DOWN","F4"

      Switch
      Case RetVal="F1":
           Moveto [Lookup_Etapa]
           ConsultaF1()
           [Codigo da Etapa]=[]
           []=""
           Moveto [Codigo da Etapa]

      Case RetVal="F4" And CHAVEC=0:
           NOVA()
           Moveto [Codigo da Etapa]

      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Etapa":
                CHAVEI=9
                Return
           Otherwise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo da Etapa":
                If IsBlank([])
                   Then Loop
                EndIf

                []=Alinh()
                ETAPA=[]

                ETAPA_OK=True
                Moveto [Lookup_Etapa]
                Ativa_Lookup()
                Moveto [Codigo da Etapa]
                Locate ETAPA
                If Not RetVal
                   Then Mensagem("Etapa n„o cadastrada !")
                        ETAPA_OK=False
                EndIf
                KeyPress "ESC"
                Moveto [Codigo da Etapa]
                If Not ETAPA_OK Then Loop EndIf

                [Lookup_Etapa   ]=ETAPA
                CHAVEI=0
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile

EndProc ; (Etapa)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO
Switch
Case TIPO="Cabeca":
     Moveto "FormulaC"
     UnLockRecord
     PickForm "4"
     Moveto [Codigo do Produto]
     Locate CODIGOI, CODIGOC, TAMANHO
     Moveto "FormulaI"
     While RecordStatus("New")=False
       Del
     EndWhile
     Moveto "FormulaC"
     Del
     PickForm "F"
Case TIPO="Item":
     Del
     CUSTO()
EndSwitch
EndProc

;*******************************************************************************
;* Calculo Custo                                                               *
;*******************************************************************************
Proc CUSTO()
CUSTO=0
Scan
  If [FormulaC->Codigo da Etapa]<>"005"
     Then If [Porcentagem]>0
             Then CUSTO=CUSTO+((([Porcentagem]*[FormulaC->Quantidade Produzida])/100)*[Valor Unitario])
             Else CUSTO=CUSTO+[Valor Unitario]
          EndIf
     Else If [Quantidade]>0
             Then CUSTO=CUSTO+(([Quantidade]*[FormulaC->Quantidade Produzida])*[Valor Unitario])
             Else CUSTO=CUSTO+[Valor Unitario]
          EndIf
  EndIf
EndScan
Moveto "FormulaC"
[Custo Total]=Round(CUSTO,2)
[Custo Unitario]=NDecimal([Custo Total]/[Quantidade Produzida],5)
Moveto "FormulaI"
EndProc

;*******************************************************************************
;* Rotina de Troca de Referencia                                               *
;*******************************************************************************
Proc Muda(Disparo,Campo,Evento,Elemento)
TECLA=""
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="CodProduto"
        INICIO_DIALOG=False
EndIf
If (Disparo="EVENT") And (DynArraySize(Evento)>0) And (Evento["Type"]="KEY")
   Then Switch
           Case Evento["KeyCode"] = 9:
                TEMP=False
           Case Evento["KeyCode"] = 27:
                Switch
                  Case Campo="CodProduto"   : Campo="NO"
                  Case Campo="CodCor_Tecido": Campo="CodProduto"
                  Case Campo="CodEtapa"     : Campo="CodCor_Tecido"
                  Case Campo="YES" Or Campo="NO" : Campo="CodProduto"
                EndSwitch
                TEMP=False
           Case Evento["KeyCode"] = 13:
                If Checa_TAG()
                   Then Switch
                          Case Campo="CodProduto":
                               COD1=ControlValue("CodProduto")
                               If Not IsBlank(COD1)
                                  Then COD1=AlinhM(COD1,10)
                                       If COD1="0000000000"
                                          Then COD1=""
                                       Endif
                                       Campo="CodCor_Tecido"
                               EndIf
                          Case Campo="CodCor_Tecido":
                               COD2=ControlValue("CodCor_Tecido")
                               If Not IsBlank(COD2)
                                  Then COD2=AlinhM(COD2,4)
                                       If COD2="0000"
                                          Then COD2=""
                                       Endif
                               Endif
                               Campo="CodEtapa"
                          Case Campo="CodEtapa":
                               COD3=ControlValue("CodEtapa")
                               If Not IsBlank(COD3)
                                  Then COD3=AlinhM(COD3,3)
                                       If COD3="0000"
                                          Then COD3=""
                                       Endif
                               Endif

                               If COD1=[Codigo do Produto] And
                                  COD2=[Codigo Cor_Tecido]
                                  Then Mensagem("N„o posso copiar a referencia pra ela mesma !")
                                       Campo="CodProduto"
                                  Else Campo="YES"
                               EndIf
                        EndSwitch
                EndIf
                RefreshDialog
                TEMP=False
        EndSwitch
EndIf

Switch
  Case Campo="CodProduto"   : MSG_CAMPO="C¢digo do Produto"
  Case Campo="CodCor_Tecido": MSG_CAMPO="C¢digo da Cor"
  Case Campo="CodEtapa"     : MSG_CAMPO="C¢digo da Etapa"
  OtherWise                 : MSG_CAMPO=""
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return TEMP
EndProc

;*******************************************************************************
;* Rotina Para Janela do Novo Produto                                          *
;*******************************************************************************
Proc Nova()
Private campoant, regitens,regcores,regetapas

Echo Normal
Echo Off

Campoant=Field()

While True
 INICIO_DIALOG=True
 ShowDialog "Dados para a Nova F¢rmula" Proc "Muda"
   Trigger "OPEN","ARRIVE"
   Key "ENTER","ESC"
   @ 09,19   Height 07 Width 34
 
    Label  @ 0,00 "Produto" for "CodProduto"
    Accept @ 1,01  Width 13 "A10" picture "#*#" Tag "CodProduto" to COD1
 
    Label  @ 0,14 "Cor" for "CodCor_Tecido"
    Accept @ 1,15 Width 7 "A4" picture "#*#" Tag "CodCor_Tecido" to COD2
 
    Label  @ 0,22 "Etapa" for "CodEtapa"
    Accept @ 1,23 Width 6 "A3" picture "#*#" Tag "CodEtapa" to COD3
 
    Pushbutton @ 03,04 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 03,17 width 11 "~C~ancela" CANCEL                     Tag "NO"  To BottonValue
 
 EndDialog
 If Not RetVal 
    Then QuitLoop
 EndIf

 switch
   case IsBlank(COD3) and not IsBlank([Codigo da Etapa]):
     Mensagem("Foi selecionado a Etapa: "+[Codigo da Etapa]+", mas nÆo a nova etapa !")
     Loop 
   
   case Not IsBlank(COD3) and IsBlank([Codigo da Etapa]):
     Mensagem("NÆo foi selecionado uma Etapa a ser copiada para a nova etapa: "+COD3+" !")
     Loop 
  
 endswitch

 getrecord "\\sistemas\\estoque\\itens" COD1 to regitens
 If not retval
    Then Mensagem("Item "+COD1+" n„o cadastrado !// //F¢rmula n„o copiada.")
         Loop  
 EndIf
 
 If Not IsBlank(COD2)
    Then 
         getrecord "\\sistemas\\estoque\\cores" COD2 to regcores
         If not retval
            Then Mensagem("Cor "+COD2+" n„o cadastrada !// //F¢rmula n„o copiada.")
                 Loop   
         EndIf
 EndIf
 
 If Not IsBlank(COD3)
    Then 
         getrecord "\\sistemas\\curtume\\etapas" COD3 to regetapas
         If not retval
            Then Mensagem("Etapa "+COD3+" n„o cadastrada !// //F¢rmula n„o copiada.")
                 Loop   
         EndIf
 endif        

 switch
   case IsBlank(COD3) and IsBlank([Codigo da Etapa]):
     ConfGeral("Etapa n„o informada !// Deseja copiar todas as etapas desta formula ?")
     If OK<>"S"
        Then Loop 
     EndIf        
 
   otherwise:
   
 endswitch

 NovaRef()
 QuitLoop
EndWhile

Moveto Field campoant
EndProc

;*******************************************************************************
;* Nova Referencia                                                             *
;*******************************************************************************
Proc NOVAREF()
Private codok

CODIGOANT=[Codigo do Produto]
CORANT   =[Codigo Cor_Tecido]
ETAPAANT =[Codigo da Etapa  ]

Aguarde("Copiando F¢rmula")
CopyToArray REGC
Do_It!

{Ask} {FormulaI} Check
Moveto [Codigo do Produto] TypeIn "~CODIGOANT"
Moveto [Codigo Cor_Tecido] TypeIn "~CORANT.."
Moveto [Codigo da Etapa  ] TypeIn "~ETAPAANT.."
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then 
        CoEdit "FormulaC"
        Moveto [Codigo do Produto]
        Locate COD1, COD2, ""
        If Not RetVAl
           Then End Down
                CopyFromArray REGC
                [Lookup_Produto   ]=COD1
                [Codigo do Produto]=COD1
                [Codigo Cor_Tecido]=COD2
                [Tamanho          ]=""
                UnLockRecord
        EndIf
        Do_It!
        ClearAll

        {Ask} {FormulaI} TypeIn "Fast Delete"
        Moveto [Codigo do Produto] TypeIn "~COD1"
        Moveto [Codigo Cor_Tecido] TypeIn "~COD2"
        If Not IsBlank(COD3)
           Then Moveto [Codigo da Etapa  ] TypeIn "~COD3"
        EndIf
        Do_It!
        ClearAll
   
        {Ask} {Answer} TypeIn "Fast"
        Moveto [Codigo do Produto] TypeIn "Changeto ~COD1"
        Moveto [Codigo Cor_Tecido] TypeIn "Changeto ~COD2"
        If Not IsBlank(COD3)
           Then Moveto [Codigo da Etapa  ] TypeIn "Changeto ~COD3"
        EndIf
        Do_It!
        ClearAll

        Add "Answer" "FormulaI"
        ClearAll
        
        Mensagem("F¢rmula Copiada !")
   Else MSG="Item "+CODIGOANT+", Cor "+CORANT+", Etapa "+COD3+"// //"
        MSG=MSG+"F¢rmula n„o copiada !// // Verifique se existe esta F¢rmula."
        Mensagem(MSG)
EndIf

LimpAguarde()
CoEdit "FormulaC"
Moveto [Codigo do Produto]
Locate CODIGOANT, CORANT, ""
PickForm "1"
EndProc


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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

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

    Prompt TECLA

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

    Switch
    Case Retval="F3":
         Del
         Moveto [Fase]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         FASE =[Fase     ]
         SEQIT=[Sequencia]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case Retval="F2":
         Del
         CUSTO()
         Moveto "FormulaI"
         QuitLoop
    Case Retval="PGDN":
         Del
         CHAVEI=9
         Return
    Case RetVal="ESC":
         If Field()="Fase"
            Then Del
                 CHAVEI=9
                 Return
            Else Left
         EndIf
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
          PAGINA("FormulaI","MR")
          If EDITAR="S"
             Then CHAVEI=0
                  FASE =[Fase     ]
                  SEQIT=[Sequencia]
                  Controla_EdicaoI()
             Else If EXCLUIR="S"
                     Then If QuerExcluir("")
                             Then CHAVEI=8
                                  EXCLUSAO("Item")
                             Else UnLockRecord     
                          EndIf
                     Else QuitLoop     
                  EndIf
          EndIf
          SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Field()="Fase"
            Then FASE =[]
                 Right
                 Loop
         EndIf
         SEQIT=[]
         Del
         Locate CODIGOI, CODIGOC, TAMANHO, ETAPA, FASE, SEQIT
         If Retval
            Then CHAVEI=0
            Else CHAVEI=1
                 End
                 Down
                 [Codigo do Produto]=CODIGOI
                 [Codigo Cor_Tecido]=CODIGOC
                 [Tamanho          ]=TAMANHO
                 [Fase             ]=FASE
                 [Sequencia        ]=SEQIT
                 UnLockRecord
                 Locate CODIGOI, CODIGOC, TAMANHO, 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 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 "FormulaI"
          EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"      :
                 If CHAVEI=1
                    Then Del
                    Else CopyFromArray RegItem
                 EndIf
                 CHAVEI=9
                 CancelDialog
            Case Campo="I_Descricao_Item"    : Campo="I_Codigo_Item"
                 If SEQIT<1
                    Then If CHAVEI=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEI=9
                         CancelDialog
                 EndIf
            Case Campo="I_UN_Item"           : Campo="I_Descricao_Item"
            Case Campo="I_Tipo_Item"         : Campo="I_UN_Item"
            Case Campo="I_Porcentagem" Or
                 Campo="I_Quantidade"        :
                 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_Preco_Unitario"    :
                 If [FormulaC->Codigo da Etapa]<>"005"
                    Then Campo="I_Tempo"
                    Else Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Obs"               : Campo="I_Preco_Unitario"
            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]
                                 VSD_I_UN_Item       =[Unidade Interna  ]
                                 KeyPress "ESC"
                                 [Codigo do Material]=VSD_I_Codigo_Item
                                 [Descricao do Item ]=VSD_I_Descricao_Item
                                 [Unidade Interna   ]=VSD_I_UN_Item
                                 Registro_Item("Ler")
                                 If [FormulaC->Codigo da Etapa]<>"005"
                                    Then Campo="I_Porcentagem"
                                    Else Campo="I_Quantidade"
                                 EndIf
                            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()
                         VSD_I_Preco_Unitario=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
                                 If [FormulaC->Codigo da Etapa]<>"005"
                                    Then Campo="I_Porcentagem"
                                    Else Campo="I_Quantidade"
                                 EndIf
                            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")
                 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_Preco_Unitario"
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 Campo="I_Preco_Unitario"
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 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_Preco_Unitario": MSGCAMPO="Valor Unit rio"
  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
       [Valor Unitario            ]=VSD_I_Preco_Unitario

       [Porcentagem               ]=VSD_I_Porcentagem
       [Temperatura               ]=VSD_I_Temperatura
       [Tempo                     ]=VSD_I_Tempo
       [Observacoes               ]=VSD_I_Obs

       [Codigo Cor_Tecido         ]=CODIGOC
       [Tamanho                   ]=""

  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_Preco_Unitario         =[Valor 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
       VSD_I_Porcentagem            =[Porcentagem               ]
       VSD_I_Temperatura            =[Temperatura               ]
       VSD_I_Tempo                  =[Tempo                     ]
       VSD_I_Obs                    =[Observacoes               ]
       
       If [Sequencia]<1
          Then posini=SearchFrom("[",VSD_I_Descricao_Item,1)
               posfim=SearchFrom("]",VSD_I_Descricao_Item,1)
               VSD_I_Descricao_Item=STrim(SubStr(VSD_I_Descricao_Item,(posini+1),((posfim-posini)-1)))
       EndIf        
       
EndSwitch
EndProc   ; (Registro_Item)

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

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

If [FormulaC->Codigo da Etapa]<>"005"
   Then cporcen=06
        ctemper=15
        ctempo =23
        cquant =83
   Else cporcen=86
        ctemper=85
        ctempo =83
        cquant =15
EndIf

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,cporcen "%" For "I_Porcentagem"
   Accept @ 03,cporcen Width 08 "N" picture "#*#.[####]" Tag "I_Porcentagem" to VSD_I_Porcentagem

   Label  @ 02,ctemper "C§" For "I_Temperatura"
   Accept @ 03,ctemper Width 07 "S" picture "#*#"        Tag "I_Temperatura" to VSD_I_Temperatura

   Label  @ 02,ctempo "Tempo" For "I_Tempo"
   Accept @ 03,ctempo Width 08 "A5" picture "##:##"     Tag "I_Tempo"       to VSD_I_Tempo

   Label  @ 02,cquant "Quantidade" For "I_Quantidade"
   Accept @ 03,cquant Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade" to VSD_I_Quantidade
   
   Label  @ 02,32 "Vr.Unit rio" For "I_Preco_Unitario"
   Accept @ 03,32 Width 12 "N" picture "#*#.[####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario

   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
CUSTO()
EndProc   ; (Finaliza_Registro)


;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
Moveto [Codigo do Produto]
Locate CODIGOI, CODIGOC, TAMANHO
LockRecord
While True
  DIGITAC()
  If CHAVEC=9
     Then QuitLoop
  EndIf
  While True
    Etapa()
    If CHAVEI=9
       Then [Codigo da Etapa   ]=""
            [Descricao da Etapa]=""
            QuitLoop
    EndIf

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

    CUSTO()
    Moveto "FormulaC"
    [Lookup_Etapa  ]=""
    [Codigo da Etapa   ]=""
    [Descricao da Etapa]=""
    [Custo Unitario    ]=BlankNum()
    [Custo Total       ]=BlankNum()
    UnLockRecord
  EndWhile
  QuitLoop
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

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

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

COD1=""
COD2=""
COD3=""

CoEdit "FormulaC"
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
