;** FormulaC *******************************************************************
;*  Cadastro de Formulas                                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Novo Layout
;Ultima Alteracao: 29/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Gera Grade/Cor
;Ultima Alteracao: 22/02/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Cor/Grade
;Ultima Alteracao: 04/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TN
;Ultima Alteracao: 27/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: 18/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TN
;Ultima Alteracao: 30/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 30/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Iten_Cor
;Ultima Alteracao: 03/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Codigo Cor_Tecido/Tamanho = "" na chave
;Ultima Alteracao: 24/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F2/F5/F9 CahveI
;Ultima Alteracao: 21/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Formula_ATUALIZA_Ficha()
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 19/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cria_grade..()
;Ultima Alteracao: 20/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cria semi sem baixa estoque Isabela garcia
;Ultima Alteracao: 27/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 19/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Unlockrecord depois Busca_Loockp e Formula_ATUALIZA_Ficha()
;Ultima Alteracao: 21/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Variavel errada CODNOVO  
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 31/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sleciona_Ficha com tipo do item de estoque
;Ultima Alteracao: 18/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Formula_ATUALIZA_Ficha(), SYS_CODIGO_CLIENTE=0266  
;Ultima Alteracao: 13/05/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Formula_Cria_Grade_Tamanhos() Inclu¡do "Valor Unitario"
;Ultima Alteracao: 11/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Observacoes no FormulaC
;Ultima Alteracao: 13/12/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustado Formula_ATUALIZA_Ficha() "Criando ficha de estoque quando nÆo existir"
;Ultima Alteracao: 23/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina p/ atualizar/adicionar item na tabela de pre‡o
;Ultima Alteracao: 28/01/2014 por Bruno Carvalho
;Motivo Alteracao: Adapta‡Æo p/ quando edita descri‡Æo do item, permitir altera‡Æo
;Ultima Alteracao: 15/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes para posicionamento de campo quando item da formula editado #0227#
;Ultima Alteracao: 27/01/2015 por Luis Gustavo
;Motivo Alteracao: Implementado op‡ao F1(para pesquisar o item) ao Copiar Formula.
;Ultima Alteracao: 18/03/2015 por Luis Gustavo
;Motivo Alteracao: Implementado a Proc Formula_Checa_Empresa_Custo(), para checar se tem empresa padrao no
;                  parametro e buscar o custo da ficha de estoque
;Ultima Alteracao: 28/04/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes Formula_Checa_Empresa_Custo(), somente quando ‚ novo registro
;Ultima Alteracao: 25/05/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina para #0085# na proc Formula_ATUALIZA_Ficha() 
;Ultima Alteracao: 10/07/2015 por Andrey Fillipe                      
;Motivo Alteracao: Ajustes na proc Formula_ATUALIZA_Ficha(), criar ficha quando nao existir e nao dar mensagem
;Ultima Alteracao: 21/09/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustado VSD_I_Tipo_Item p/ quando for Aplica‡Æo Direta, BAE ser igual a "N" (NÆo controla estoque de aplica‡Æo direta)  
;Ultima Alteracao: 05/10/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustado processo para posicionar no campo I_Baixa_Automatica somente se o tipo do item controla estoque
;Ultima Alteracao: 11/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Cria formula cor e tamanho para semiacabados (Lupus e Zuggy-zi)
;Ultima Alteracao: 28/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajuste op‡ao F1(para pesquisar o item) ao Copiar Formula.
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Edita Descricao do Item]
;Ultima Alteracao: 21/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 23/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro(), MSGCAMPO no Form, Carrega_Tabelas()
;Ultima Alteracao: 10/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Formula_NOVAREF() ao concluir a copia da f¢rmula, retornava erro.
;Ultima Alteracao: 12/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Referencia] no FORMULAC
;Ultima Alteracao: 12/07/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao copiar f¢rmula, adicionado [Descricao do Item] e [Tipo do Item] na visualiza‡Æo ao informar o produto 
;Ultima Alteracao: 15/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowPopup
;Ultima Alteracao: 23/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes gerar cores 0388
;Ultima Alteracao: 06/04/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes Formula_ATUALIZA_CUSTO() onde a msg de erro ocorrer  apenas uma vez, 
;                  pois os erros foram armazenados em arquivos p/ ser impresso no final do procedimento  
;Ultima Alteracao: 25/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes criacao de grades e cores
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ nÆo gerar log de itens excluidos quando for excluir a cabe‡a do registro
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado #0419# -> Formula_COR01()
;Ultima Alteracao: 23/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ gerar log de itens excluidos
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 07/01/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes na proc Formula_Cria_Grade() p/ [Baixa_Automatica] no FormulaC ficar de acordo com o REG_ITEM_FORMULA["Baixa_Automatica"] ao ser criado
;Ultima Alteracao: 12/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: Alterado o "i" da estrutura de condi‡Æo FOR para "ib", pois utilizando "i" gerava conflito com outras procedures
;Ultima Alteracao: 24/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes vari vel "ib" Formula_Grade_Cor_Semi()
;Ultima Alteracao: 07/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes Formula_ATUALIZA_Ficha(), SYS_CODIGO_CLIENTE=0428   
;Ultima Alteracao: 10/10/2019 por Bruno Carvalho
;Motivo Alteracao: Liberado o direito de uso da fun‡Æo Formula_ATUALIZA_Ficha()   
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 12/12/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado "Bib_Prod"
;Ultima Alteracao: 12/12/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado "Bib_Proc" 

;*******************************************************************************
;* 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"
        Then TECLA="F1=Tabelas"
        Else TECLA=""
     EndIf

      MSGCAMPO=""
      AguardaTeclasPadrao()
                              
      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
               "F2 ~C~alcular Custos           " : " Recalcular custo das f¢rmulas                                   " : "F2",
               "F5 ~A~tualizar Custos          " : " Atualizar todas f¢rmulas com £ltimo custo da ficha de estoque   " : "F5",
               "F6 Atualizar ~T~abela de Pre‡o " : " Atualizar tabela de pre‡o com o pre‡o de venda das f¢rmulas     " : "F6",
               "F9 Atualizar ~F~icha Estoque   " : " Atualizar ficha de estoque o £ltimo custo com custo das f¢rmulas" : "F9",
               Separator,
               "~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=-94 : MsgTeclasPadrao()
      Case RetVal="F2":
           Del
           Formula_SelecaoRecalcular()
           QuitLoop
           
      Case RetVal="F6":
           Del
           Formula_SelecaoTabelaPreco()
           quitloop

      Case RetVal="F5":
           Del
           Formula_SelecaoFicha("PegarUltimoCusto")
           quitloop

      Case RetVal="F9":
           Del
           Formula_SelecaoFicha("AtualizarFichaEstoque")
           quitloop

      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()=""
                   Then CONSULTAF1()
                EndIf
           EndSwitch    
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
            If OPCAO_FORM="F"
               Then PAGINA("FormulaC","MR")
               Else PAGINA("FormulaC","MT")
            EndIf  
            CODIGOI=[Codigo do Produto]
            CODIGOC=[Codigo Cor_Tecido]
            TAMANHO=[Tamanho          ]
            If EDITAR="S"
               Then CHAVEC=0
                    PickForm "1"
                    Controla_EdicaoC()
               Else If EXCLUIR="S"
                       Then If QuerExcluir("desta formula")
                               Then PickForm "1"
                                    GRAVA_LOG=True
                                    EXCLUSAO("Cabeca")
                               Else UnLockRecord     
                            EndIf
                            If OPCAO_FORM="2"
                               Then PickForm "1"
                               Else PickForm "F"
                            EndIf
                       Else QuitLoop     
                    EndIf
            EndIf
            SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           Switch
             Case Field()="Codigo do Produto":
               CHAVEC=9
               Del
               Return
             Case Field()="":
           EndSwitch
      Case Retval="ENTER":
           Switch
             Case Field()="Codigo do Produto":
                  If IsBlank([]) Then Loop EndIf
                  CODREF =""
                  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
                  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]=""
Moveto [Baixa_Automatica]
While True
      SetaCorRegistro("Editando")

      TECLA=" Esc=Retornar  "

      If CHAVEC=0
         Then TECLA=TECLA + "F8/=Itens  Del=Excluir  Alt+F=Fun‡”es  "
      EndIf
      
      MSGCAMPO=Field()
      Switch
        Case Field()="Baixa_Automatica"     : MSGCAMPO="Baixa autom tica no estoque pela entrada por produ‡„o (Sim/N„o)"
        Case Field()="Quantidade Produzida" : MSGCAMPO="Quantidade Produzida/Lote M¡nimo"
      EndSwitch

      Prompt TECLA
      
      Wait Field
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","DOWN",-65,-33,"F2","F5","F6","F4","F7","F8","F9"

      If RetVal=-33
         Then MSGCAMPO=""
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
               "F2 ~C~alcular Custos           " : " Recalcular custo desta f¢rmula                                     " : "F2",
               "F5 ~A~tualizar Custos          " : " Atualizar esta f¢rmula com £ltimo custo da ficha de estoque        " : "F5",
               "F6 Atualizar ~T~abela de Pre‡o " : " Atualizar tabela de pre‡o com pre‡o de venda desta f¢rmula         " : "F6",
               "F9 Atualizar ~F~icha Estoque   " : " Atualizar ficha de estoque o £ltimo custo com o custo desta f¢rmula" : "F9",
               Separator,
               "F4 Copia~r~ F¢rmula            " : " Copiar esta f¢rmula p/ outra                                       " : "F4",
               "F7 ~O~bserva‡”es               " : " Observa‡”es da Formula                                             " : "F7",
               Separator,                                                                                     
               "~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="F8" or RetVal="DOWN":
           If CHAVEC=0
              Then QuitLoop
           EndIf
      Case RetVal="F2":
           CampoForm=Field()
           MSG=    "Recalcular o Custo desta F¢rmula.// //"
           MSG=MSG+"Confirma opera‡„o ?"
           ConfGeral(MSG)
           If OK<>"S"
              Then Loop
           EndIf

           Moveto "FormulaI"
           Formula_CalcularCusto("Scan")
           Moveto "FormulaC"
           Moveto Field CampoForm
           
           Fastmsg("Processo concluido !")

      Case RetVal="F5":
           Formula_ItemFicha("PegarUltimoCusto",[FormulaC->Codigo do Produto])

      Case RetVal="F9": 
           Formula_ItemFicha("AtualizarFichaEstoque",[FormulaC->Codigo do Produto])
      
      Case RetVal="F6":
           Formula_ItemTabelaPreco()      
      
      Case Retval="F7" Or RetVal=-65 :
           CampoAnt=Field()
           Edita_Memo("Observacoes",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA              

      Case RetVal="F4" And CHAVEC=0: 
           Formula_Nova()
           QuitLoop

      Case Retval="ESC":
           Switch
           Case Field()="Baixa_Automatica":
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then EXCLUSAO("Cabeca")
                           Else Undo
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
           Case Field()="Quantidade Produzida" : Moveto [Baixa_Automatica]
           Otherwise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If QuerExcluir("desta formula")
                      Then GRAVA_LOG=True
                           EXCLUSAO("Cabeca")
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER":
           Switch
           Case Field()="Baixa_Automatica":
                If IsBlank([])
                   Then Loop
                   Else Moveto [Quantidade Produzida]
                EndIf
           Case Field()="Quantidade Produzida":
                If IsBlank([])
                   Then []=1
                EndIf
                [Custo Unitario]=NDecimal([Custo Total]/[Quantidade Produzida],5)
                [Preco de Venda_Calculado]=NDecimal([Custo Unitario]+(([Custo Unitario]*[Indice Preco de Venda])/100),2)
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Valores Calculo                                                             *
;*******************************************************************************
Proc Valores()
SetaCorRegistro("Editando")

Moveto [Indice Preco de Venda]
While True

  TECLA=" Esc=Retornar  "

  MSGCAMPO=Field()
  Switch
    Case Field()="Indice Preco de Venda": MSGCAMPO="Indice sobre Custo para Calculo do Pre‡o de Venda"
    Case Field()="Preco de Venda_Livre" : MSGCAMPO="Informe o Pre‡o de Venda Final a praticar"
    Case Field()="Flag 1"               : MSGCAMPO="[pausa]"
    OtherWise                           : MSGCAMPO=""
  EndSwitch

  Prompt TECLA

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

  Switch
  Case Retval="ESC":
       Switch
       Case Field()="Indice Preco de Venda":
            QuitLoop
       Case Field()="Preco de Venda_Livre" : Moveto [Indice Preco de Venda]
       Otherwise:
            Left
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="ENTER":
       Switch
       Case Field()="Indice Preco de Venda":
            [Custo Unitario]=NDecimal([Custo Total]/[Quantidade Produzida],5)
            [Preco de Venda_Calculado]=NDecimal([Custo Unitario]+(([Custo Unitario]*[Indice Preco de Venda])/100),2)
            Moveto [Preco de Venda_Livre]
       Case Field()="Preco de Venda_Livre":
            Moveto [Flag 1]
       Case Field()="Flag 1":
            []=""
            QuitLoop
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
SetaCorRegistro("Padrao")

EndProc

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

If Not IsAssigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Switch
Case TIPO="Cabeca":
     Moveto "FormulaC"
     PickForm "1"
     Moveto [Codigo do Produto]
     Locate CODIGOI, CODIGOC, TAMANHO
     Moveto "FormulaI"
     While RecordStatus("New")=False
       If GRAVA_LOG Then Grava_LogEx("Item da Formula") EndIf
       Del
     EndWhile
     Moveto "FormulaC"
     If GRAVA_LOG Then Grava_LogEx("Formula") EndIf
     Del
     PickForm "F"
     Release Vars GRAVA_LOG
Case TIPO="Item":
     If GRAVA_LOG Then Grava_LogEx("Item da Formula") EndIf
     Del
     Formula_CalcularCusto("Scan")
EndSwitch
EndProc

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

While True
  Moveto [Sequencia]
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

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

    MSGCAMPO=""
    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGDN","PGUP",-33,"F2","F5","F6"

    If RetVal=-33
       Then MSGCAMPO=""
            Echo Normal
            Echo Off
              ShowPopup " Fun‡”es " CENTERED
               "F2 ~C~alcular Custos           " : " Recalcular custo desta f¢rmula                                     " : "F2",
               "F5 ~A~tualizar Custos          " : " Atualizar esta f¢rmula com £ltimo custo da ficha de estoque        " : "F5",
               "F9 Atualizar ~F~icha Estoque   " : " Atualizar ficha de estoque o £ltimo custo com o custo desta f¢rmula" : "F9",
               Separator,
               "F6 ~V~alores Unit rios         " : " Informar dados Valores Unit rios                                   " : "F6",
               Separator,                                                                                     
               "Gerar Grade de Tamanhos                          " : " Gera f¢rmulas s¢ de Tamanhos para esta F¢rmula"                    : "GRADE",
               "Gerar Grade de Cores/Tamanhos - SemiAcabado      " : " Gera f¢rmulas de Cores e Tamanhos para esta F¢rmula"               : "GRADE/COR/SEMI",
               "Gerar Grade de Cores/Tamanhos - Item Acabado     " : " Gera f¢rmulas de Cores e Tamanhos s¢ com consumo de semi-acabado"  : "GRADE/COR",
               Separator,                                                                                     
               "Gerar Varia‡äes de Cores                         " : " Gera f¢rmulas de Cores para esta F¢rmula"                          : "COR01",
               Separator,                                                                                     
               "~C~ancelar                     " : " Cancelar a Opera‡„o                                                " : "CANCELAR"
              EndMenu
             To MenuVar

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

            If MenuVar="GRADE"
                Then If [FormulaC->Tipo do Item]="D"
                        Then Mensagem("Tipo do Item da Formula Invalido !") 
                             Loop
                     EndIf        
                     Del
                     If Formula_Grade()
                        Then CHAVEI=9
                             Return
                        Else QuitLoop
                     EndIf   
            EndIf
            If MenuVar="GRADE/COR"
                Then If [FormulaC->Tipo do Item]<>"D"
                        Then Mensagem("Tipo do Item da Formula Invalido !// //S¢ Aplica‡Æo Direta !") 
                             Loop
                     EndIf        
                     Del 
                     If Formula_Grade_Cor()
                        Then CHAVEI=9
                             Return
                        Else QuitLoop
                     EndIf   
            EndIf
            If MenuVar="GRADE/COR/SEMI"
                Then If [FormulaC->Tipo do Item]="D"
                        Then Mensagem("Tipo do Item da Formula Invalido !") 
                             Loop
                     EndIf        
                     Del
                     If Formula_Grade_Cor_Semi()
                        Then CHAVEI=9
                             Return
                        Else QuitLoop
                     EndIf   
            EndIf
            If MenuVar="COR01"
                Then If [FormulaC->Tipo do Item]<>"D"
                        Then Mensagem("Tipo do Item da Formula Invalido !// //S¢ Aplica‡Æo Direta !") 
                             Loop
                     EndIf   
                     
                     Del
                     If Formula_COR01()
                        Then CHAVEI=9
                             Return
                        Else QuitLoop
                     EndIf  
            EndIf

            RetVal=MenuVar
    EndIf

    Switch
    Case RetVal="F2":
         MSG=    "Recalcular o Custo desta F¢rmula.// //"
         MSG=MSG+"Confirma opera‡„o ?"
         ConfGeral(MSG)
         If OK<>"S"
            Then Loop
         EndIf

         Del
         Formula_CalcularCusto("Scan")
         Moveto "FormulaI"

         Fastmsg("Processo concluido !")

         QuitLoop

    Case RetVal="F5":
         Del
         Formula_ItemFicha("PegarUltimoCusto",[FormulaC->Codigo do Produto])
         QuitLoop

    Case RetVal="F9": 
         Del
         Formula_ItemFicha("AtualizarFichaEstoque",[FormulaC->Codigo do Produto])
         QuitLoop

    Case RetVal="F6":
         Del
         SetaCorRegistro("Padrao")

         Moveto "FormulaC"
         Valores()
         Moveto "FormulaI"
         QuitLoop
    Case Retval="F3":
         Del
         Moveto [Sequencia]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Sequencia]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case Retval="PGDN":
         Del
         CHAVEI=9
         Return
    Case RetVal="ESC":
         Del
         CHAVEI=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
          PAGINA("FormulaI","MR")
          If EDITAR="S"
             Then CHAVEI=0
                  SEQIT=[Sequencia]
                  Controla_EdicaoI()
             Else If EXCLUIR="S"
                     Then If QuerExcluir("")
                             Then CHAVEI=8
                                  GRAVA_LOG=True
                                  EXCLUSAO("Item")
                                  Release Vars GRAVA_LOG
                             Else UnLockRecord     
                          EndIf
                     Else QuitLoop     
                  EndIf
          EndIf
          SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del           
         Locate CODIGOI,CODIGOC,TAMANHO,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Codigo do Produto]=CODIGOI
                 [Codigo Cor_Tecido]=CODIGOC
                 [Tamanho          ]=TAMANHO
                 [Sequencia        ]=SEQIT
                 UnLockRecord
                 Locate CODIGOI,CODIGOC,TAMANHO,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (CHAVEI)

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

Mouse Show
If INICIO_DIALOG
   Then Switch                               
          Case SYS_CODIGO_CLIENTE = "0227" : 
               ;**** Em 15.04.2014 - Processo antigo, quando permitia a altera‡Æo do item em um lancto existente 02.2013 **** 
               Campo="I_Codigo_Item"
          OtherWise :
               If CHAVEI=0
                  Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To ITEM 
                       If RetVal
                          Then VSD_I_Edita_Descr = ITEM["Edita Descricao do Item"]
                          Else VSD_I_Edita_Descr = "N" 
                       EndIf
                       Switch
                         Case VSD_I_Edita_Descr="S" : Campo="I_Descricao_Item"
                         OtherWise                  : Campo="I_Quantidade"    
                       EndSwitch
                  Else Campo="I_Codigo_Item"
               EndIf 
               
        EndSwitch
        INICIO_DIALOG=False
EndIf

If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then

   If Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
           "F4 ~D~escri‡„o              ": " Descri‡„o do Item                  " :"F4",
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
          EndIf                                         
          Evento["KeyCode"]=MenuVar
   EndIf 

   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Sequencia]
                      Inicia_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"] = -62 Or Evento["KeyCode"] = "F4") :
          Campo_Ant=Campo
          If Not IsAssigned(VSD_I_Edita_Descr)    
             Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To ITEM
                  If RetVal
                     Then VSD_I_Edita_Descr = ITEM["Edita Descricao do Item"]
                     Else VSD_I_Edita_Descr = "N"
                  EndIf
          EndIf   
          If VSD_I_Edita_Descr="S"
             Then Campo="I_Descricao_Item"
             Else Mensagem("Permiss„o bloqueada p/ altera‡„o da descri‡„o do item !")
          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 QuerDesfazer("")
                    Then If CHAVEI=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEI=9
                         CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    : If CHAVEI=1
                                                  Then Campo="I_Codigo_Item"
                                                  Else CHAVEI=9
                                                       CancelDialog
                                               EndIf
            Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
            Case Campo="I_Quantidade"        :
                 Switch
                   Case IsBlank(VSD_I_Codigo_Item)        : Campo="I_Tipo_Item"
                   Case Not IsAssigned(VSD_I_Edita_Descr) :   
                        GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To ITEM
                        If RetVal
                           Then VSD_I_Edita_Descr = ITEM["Edita Descricao do Item"]
                           Else VSD_I_Edita_Descr = "N"
                        EndIf
                        If VSD_I_Edita_Descr="S"
                           Then Campo="I_Descricao_Item"
                           Else If CHAVEI=1
                                   Then Campo="I_Codigo_Item"
                                   Else CopyFromArray RegItem
                                        CHAVEI=9
                                        CancelDialog
                                EndIf
                        EndIf
                   Case IsAssigned(VSD_I_Edita_Descr) :
                        If VSD_I_Edita_Descr="S"
                           Then Campo="I_Descricao_Item"
                           Else If CHAVEI=1
                                   Then Campo="I_Codigo_Item"
                                   Else CopyFromArray RegItem
                                        CHAVEI=9
                                        CancelDialog
                                EndIf
                        EndIf
                 EndSwitch  
            Case Campo="I_UN_Item"           : Campo="I_Quantidade"
            Case Campo="I_Preco_Unitario"    :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Baixa_Automatica"  : Campo="I_Preco_Unitario"
            Case Campo="I_Flag"              : Campo="I_Preco_Unitario"
                 GetRecord "\\Sistemas\\Estoque\\Tpitem" VSD_I_Tipo_Item To REG_TPITEM
                 If RetVal
                    Then If Upper(SubStr(REG_TPITEM["Controla Estoque"],1,1))="S"
                            Then Campo="I_Baixa_Automatica"
                         EndIf 
                 EndIf        
                 Release Vars REG_TPITEM
          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_Tipo_Item     =[Tipo do Item           ]
                                 KeyPress "ESC"
                                 
                                 GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP
                                 If RetVal
                                    Then VSD_I_Edita_Descr = REG_ITEMCOMP["Edita Descricao do Item"]
                                    Else VSD_I_Edita_Descr = "N" 
                                 EndIf       
                                 
                                 [Codigo do Material]=VSD_I_Codigo_Item
                                 [Lookup_Material   ]=VSD_I_Codigo_Item

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

                                 Registro_Item("Ler")
                                 
                                 If VSD_I_Edita_Descr="S"
                                    Then Campo="I_Descricao_Item"
                                    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")
                 Campo="I_Quantidade"
            Case Campo="I_Tipo_Item":
                 VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                 If Not IsBlank(VSD_I_Tipo_Item)
                    Then Moveto [Tipo do Item]
                         Ativa_Lookup()
                         Moveto [Tipo do Item]
                         Locate VSD_I_Tipo_Item
                         If RetVal
                            Then KeyPress "ESC"
                                 [Tipo do Item]=VSD_I_Tipo_Item
                                 Campo="I_Quantidade"
                            Else Mensagem("Tipo do Item n„o Cadastrado !")
                                 VSD_I_Tipo_Item=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Preco_Unitario"
                 EndIf
             Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Interna]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  [Unidade Interna]=VSD_I_UN_Item
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                    Else If VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario
                         EndIf
                 EndIf
                 Campo="I_Flag"
                 GetRecord "\\Sistemas\\Estoque\\Tpitem" VSD_I_Tipo_Item To REG_TPITEM
                 If RetVal
                    Then If Upper(SubStr(REG_TPITEM["Controla Estoque"],1,1))="S"
                            Then Campo="I_Baixa_Automatica"
                            Else VSD_I_Baixa_Automatica="N"
                         EndIf
                 EndIf        
                 Release Vars REG_TPITEM
            Case Campo="I_Baixa_Automatica":
                 VSD_I_Baixa_Automatica=ControlValue("I_Baixa_Automatica")
                 If IsBlank(VSD_I_Baixa_Automatica)
                    Then VSD_I_Baixa_Automatica=[FormulaC->Baixa_Automatica]
                 EndIf
                 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_Baixa_Automatica" : MSGCAMPO="Baixa autom tica no estoque para este item ? <Sim/N„o)"
  Case Campo="I_Flag"          : MSGCAMPO="[pausa]"
  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  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  "  
EndIf

MontaRodapeSD(MSGCAMPO, TECLA)
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
       [Item_Baixa_Automatica     ]=VSD_I_Baixa_Automatica
                                           
       [Codigo Cor_Tecido         ]=CODIGOC
       [Tamanho                   ]=""

  Case Funcao_Registro="Ler": 
       VSD_I_Seq                   =[Sequencia                 ]

       VSD_I_Tipo_Item             =[Tipo do Item              ]
       VSD_I_Codigo_Item           =[Codigo do Material        ]
       VSD_I_Descricao_Item        =[Descricao do Item         ]
       VSD_I_Quantidade            =[Quantidade                ]
       VSD_I_UN_Item               =[Unidade Interna           ]
       VSD_I_Preco_Unitario        =[Valor Unitario            ]
       
       If Not IsBlank(VSD_I_Codigo_Item) And 
              VSD_I_Preco_Unitario <= 0
          Then Formula_Checa_Empresa_Custo()
       EndIf
       
       Moveto "FormulaI"   
             
       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
                  Else VSD_I_Preco_Total=BlankNum()
               EndIf
       EndIf
       VSD_I_Baixa_Automatica       =[Item_Baixa_Automatica     ]
EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()

INICIO_DIALOG=True
Moveto [Sequencia]
Locate CODIGOI,CODIGOC,TAMANHO,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",-33,"ClearArea","HOME","END","PGDN","PGUP"
     @ 11,5 height 06 width 67

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

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

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

   Accept @ 03,58 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
Formula_CalcularCusto("Scan")
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
  Moveto [Codigo do Produto]
  Locate CODIGOI, CODIGOC, TAMANHO
  LockRecord
  While True
    DIGITAC()
    SetaCorRegistro("Padrao")

    If CHAVEC=9
       Then QuitLoop
    EndIf
    Moveto "FormulaI"
    While True
      CHAVEI()
      If CHAVEI=9 Or CHAVEI=5
         Then QuitLoop
      EndIf
      Controla_EdicaoI()
    EndWhile
    SetaCorRegistro("Padrao")
    Formula_CalcularCusto("Scan")
    
    Moveto "FormulaC"
    UnLockRecord
    If CHAVEI=9
       Then QuitLoop
    EndIf
  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()
EndProc

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars Autolib, ErrorProc
  
View NOWINDOW "P_Form"
View NOWINDOW "FormulaI"
CoEdit NOWINDOW "FormulaC"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        return False
EndIf
          
PickForm "1"
Moveto "\\Sistemas\\estoque\\Sdestq" SetaCorRegistro("Invisivel")
Moveto "FormulaI" SetaCorRegistro("Padrao")
Moveto "FormulaC" SetaCorRegistro("Padrao")
PickForm "F"
                             
Return True
EndProc   ; (Carrega_Tabelas)


;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc,\\Sistemas\\Producao\\Bib_Prod"
SYS_VALOR()

If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf

MSG_ERRO  = False
TEVE_ERRO = False
TIT_ERRO  = ""
TIT_FICHA = ""
TIT_CUSTO = ""
CONT_ERRO = 0
ARQ_ERRO  = PrivDir()+"ERRO.ERR"
Deleta_Arquivo(ARQ_ERRO)

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

VSDGEMPRESA     = ""
VSDGMESANO      = ""
VSDGTIPOEST     = ""
VSDGFAMI        = ""
VSDGMARCA       = ""
VSDGGRP         = ""
VSDGDEPART      = ""
VSDGCORTECIDO   = ""
VSDGREFERENCIA  = ""
VSDGTABELA      = ""
VSDGTABPRECO    = 1

Carrega_Tabelas()

OPCAO_FORM="F"
VSD_EMPRESA_CUSTO = False

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
