;** 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 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 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 Atualiza_Ficha(), SYS_CODIGO_CLIENTE=0266  

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

      AguardaTeclasPadrao()
                              
      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
               "F2 ~C~alcular Custos "        : " Recalcular custo de todas f¢rmulas       " : "F2",
               "F5 ~A~tualizar Custos"        : " Atualizar todas f¢rmulas com £ltimo custo" : "F5",
               "F9 ~A~tualizar Ficha Estoque" : " Atualizar Ficha de Estoque com £ltimo custo das f¢rmulas" : "F9",
               "~C~ancelar           " : " Cancelar a Opera‡„o                      " : "CANCELAR"
              EndMenu
               To MenuVar

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

              RetVal=MenuVar
      EndIf

    Switch
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F2":
           MSG=    "Recalcular o Custo de todas as F¢rmulas.// //"
           MSG=MSG+"Confirma opera‡„o ?"
           ConfGeral(MSG)
           If OK<>"S"
              Then Loop
           EndIf

           Del
           NR = NRecords("FormulaC")
           PickForm "1"
           Scan For Not IsBlank([Codigo do Produto])
              Barra(NR, RecNo())
              Aguarde("Aguarde, Processando "+BARRA_STRING)
              Moveto "FormulaI"
              CUSTO()
              Moveto "FormulaC"
           EndScan

           Mensagem("Fim do processo !")
           If OPCAO_FORM="F"
              Then PickForm "F"
           EndIf
           QuitLoop
      Case RetVal="F5":
           PickForm "1"
           If Not Seleciona_Ficha("Atualizar com £ltimo custo")
              Then Del
              Else Echo Normal
                   Echo Off
                   Del
                   NR = NRecords("FormulaC")
                   PickForm "1"
                   Scan 
                      Barra(NR, RecNo())
                      Aguarde("Aguarde, Processando "+BARRA_STRING)

                      If IsBlank([Codigo do Produto]) Or [Tipo do Item]="D"
                         Then Loop
                      EndIf    

                      If Not IsBlank(VSDGTIPOEST) And
                         [Tipo do Item]<>VSDGTIPOEST
                         Then Loop
                      EndIf

                      If VSDGMARCA<>"000"
                         Then Moveto [Lookup_Produto]
                              If Not Busca_Lookup("Codigo do Item",[Codigo do Produto],"SM")
                                 Then UnLockRecord
                                      Loop
                                 Else UnLockRecord
                                      If REG_BUSCA_LOOKUP["Codigo da Marca"]<>VSDGMARCA
                                         Then Loop
                                      EndIf
                              EndIf
                      EndIf

                      Moveto "FormulaI"
                      If Not ATUALIZA_CUSTO()
                         Then Moveto "FormulaC"
                              QuitLoop
                         Else Moveto "FormulaC"
                      EndIf
                   EndScan
                   Mensagem("Fim do processo !")
           EndIf
           If OPCAO_FORM="F"
              Then PickForm "F"
           EndIf
           QuitLoop
      Case RetVal="F9":
           PickForm "1"
           If Not Seleciona_Ficha("Atualizar ficha estoque com £ltimo custo")
              Then Del
              Else Echo Normal
                   Echo Off
                   Del
                   NR = NRecords("FormulaC")
                   PickForm "1"
                   Scan
                      Barra(NR, RecNo())
                      Aguarde("Aguarde, Processando "+BARRA_STRING)

                      If IsBlank([Codigo do Produto]) Or [Tipo do Item]="D"
                         Then Loop
                      EndIf    

                      If Not IsBlank(VSDGTIPOEST) And
                         [Tipo do Item]<>VSDGTIPOEST
                         Then Loop
                      EndIf

                      If [FormulaC->Custo Unitario]<=0
                         Then Loop 
                      EndIf

                      Moveto [Lookup_Produto]
                      If Not Busca_Lookup("Codigo do Item",[Codigo do Produto],"")
                         Then UnLockRecord
                              Loop
                         Else UnLockRecord
                              If VSDGMARCA<>"000" And
                                 REG_BUSCA_LOOKUP["Codigo da Marca"]<>VSDGMARCA
                                 Then Loop
                              EndIf
                      EndIf
                      
                      If Not ATUALIZA_FICHA()
                         Then Moveto "FormulaC"
                              QuitLoop
                         Else Moveto "FormulaC"
                      EndIf
                   EndScan
                   Mensagem("Fim do processo !")
           EndIf
           If OPCAO_FORM="F"
              Then PickForm "F"
           EndIf
           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"
                                    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
                  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

      TECLA=" Esc=Retornar  "

      If CHAVEC=0
         Then TECLA=TECLA + "F8/=Itens  Del=Excluir  Alt+F=Fun‡”es  "
      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"
        OtherWise                           : MSG_CAMPO=""
      EndSwitch

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

      If RetVal=-33
         Then 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 " : "F5",
               "F9 ~A~tualizar Ficha Estoque" : " Atualizar Ficha de Estoque com £ltimo custo das f¢rmulas" : "F9",
               "F4 Copiar ~F~¢rmula   " : " Copiar esta f¢rmula p/ outra            " : "F4",
               "~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"
           CUSTO()
           Moveto "FormulaC"
           Moveto Field CampoForm
      Case RetVal="F5":
           CampoForm=Field()
           If Seleciona_Ficha("Atualizar com £ltimo custo")
              Then Moveto "FormulaI"
                   ATUALIZA_CUSTO()
                   Moveto "FormulaC"
           EndIf
           Moveto Field CampoForm
      Case RetVal="F9":
           CampoForm=Field()
           If Seleciona_Ficha("Atualizar ficha estoque com £ltimo custo")
              Then Moveto [Lookup_Produto]
                   If Busca_Lookup("Codigo do Item",[Codigo do Produto],"")
                      Then ATUALIZA_Ficha()
                           Moveto "FormulaC"
                   EndIf        
           EndIf
           Moveto Field CampoForm
      Case RetVal="F4" And CHAVEC=0:
           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 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()
Moveto [Indice Preco de Venda]
While True

  TECLA=" Esc=Retornar  "

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

  Prompt TECLA

  Wait Field
       Message MSG_CAMPO
       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
EndProc

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO
Switch
Case TIPO="Cabeca":
     Moveto "FormulaC"
     PickForm "1"
     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
CFP  =0
Scan For Not IsBlank([Codigo do Material])
  Switch
    Case SYS_CODIGO_CLIENTE="0102":
         If [Codigo do Material]="0000001437"
            Then CFP=[Quantidade]
                 Loop
         EndIf
  EndSwitch

  If [Quantidade]>0
     Then CUSTO=CUSTO+([Quantidade]*[Valor Unitario])
     Else CUSTO=CUSTO+[Valor Unitario]
  EndIf
EndScan
Moveto "FormulaC"

Switch
  Case SYS_CODIGO_CLIENTE="0102":
       CUSTO=NDecimal(CUSTO+((CUSTO*CFP)/100),5)
EndSwitch

[Custo Total]=Round(CUSTO,2)
[Custo Unitario]=NDecimal([Custo Total]/[Quantidade Produzida],5)
[Preco de Venda_Calculado]=NDecimal([Custo Unitario]+(([Custo Unitario]*[Indice Preco de Venda])/100),2)
Moveto "FormulaI"
EndProc

;*******************************************************************************
;* Atualiza Custo                                                              *
;*******************************************************************************
Proc ATUALIZA_CUSTO()
Scan For Not IsBlank([Codigo do Material]) And
         [Tipo do Item]<>"C" And
         [Tipo do Item]<>"D" And
         [Tipo do Item]<>"G" And
         [Tipo do Item]<>"H" And
         [Tipo do Item]<>"I"

  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA,[FormulaI->Codigo do Material],VSDGANO, VSDGMES
  If RetVal
     Then If [Preco de Custo]>0
             Then Moveto "FormulaI"
                  [Valor Unitario]=[\Sistemas\Estoque\SdEstq->Preco de Custo]
             Else MSG=" Sem custo informado na ficha de estoque referente a "+VSDGMES+"/"+VSDGANO+" !// //"
                  MSG=MSG+Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+Format("W30,AL","Descri‡„o")+"//"
                  MSG=MSG+Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[FormulaI->Codigo do Material])+"| "+Format("W30,AL",[FormulaI->Descricao do Item])+"//"
                  MSG=MSG+"// "
                  MSG=MSG+"Deseja continuar ?"
                  ConfGeral(MSG)
                  If OK="N"
                     Then Return False
                  EndIf
          EndIf
     Else MSG="N„o foi encontrada a ficha de estoque referente a "+VSDGMES+"/"+VSDGANO+" !// //"
          MSG=MSG+Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+Format("W30,AL","Descri‡„o")+"//"
          MSG=MSG+Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[FormulaI->Codigo do Material])+"| "+Format("W30,AL",[FormulaI->Descricao do Item])+"//"
          MSG=MSG+"Observacoes:                                                           //"
          MSG=MSG+"1. Talvez n„o foi executada a transferencia de saldos do mes anterior; //"
          MSG=MSG+"// "
          MSG=MSG+"Deseja continuar ?"
          ConfGeral(MSG)
          If OK="N"
             Then Return False
          EndIf
  EndIf
  Moveto "FormulaI"
EndScan

CUSTO()
Return True
EndProc

;*******************************************************************************
;* Atualiza Custo Ficha de Estoque                                             *
;*******************************************************************************
Proc ATUALIZA_Ficha()
Private cditem,tpitem

Switch
  Case (SYS_CODIGO_CLIENTE="0227" Or SYS_CODIGO_CLIENTE="0266") And 
       [FormulaC->Tipo do Item]="D" And 
       REG_BUSCA_LOOKUP["Codigo da Grade"]<>"":
       Return True
  Case SYS_CLIENTE_CONFEC<>"" And 
       SYS_CODIGO_CLIENTE<>"0227" And 
       SYS_CODIGO_CLIENTE<>"0266" And 
       [FormulaC->Tipo do Item]="P" And 
       REG_BUSCA_LOOKUP["Codigo da Grade"]<>"":
       Return True
EndSwitch

If [FormulaC->Custo Unitario]<=0
   Then 
       ;MSG="Custo unit rio inv lido na formula !// //"
       ;MSG=MSG+Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+Format("W30,AL","Descri‡„o")+"//"
       ;MSG=MSG+Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[FormulaC->Codigo do Produto])+"| "+Format("W30,AL",[FormulaC->Descricao do Item])+"//"
       ;MSG=MSG+"// "
       ;MSG=MSG+"Deseja continuar ?"
       ;ConfGeral(MSG)
       ;If OK="N"
       ;   Then Return False
       ;   Else Return True
       ;EndIf
        Return True
EndIf

Switch
  Case [FormulaC->Tipo do Item]="P" Or [FormulaC->Tipo do Item]="S":
       Moveto "\\Sistemas\\Estoque\\SdEstq"
       Moveto [Codigo da Empresa]
       Locate VSDGEMPRESA,[FormulaC->Codigo do Produto],VSDGANO, VSDGMES
       If RetVal
          Then [Preco de Custo        ]=[FormulaC->Custo Unitario]
               [Data do Preco de Custo]=Today()
               UnLockRecord
          Else MSG="N„o foi encontrada a ficha de estoque referente a "+VSDGMES+"/"+VSDGANO+" !// //"
               MSG=MSG+Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+Format("W30,AL","Descri‡„o")+"//"
               MSG=MSG+Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[FormulaC->Codigo do Produto])+"| "+Format("W30,AL",[FormulaC->Descricao do Item])+"//"
               MSG=MSG+"Observacoes:                                                           //"
               MSG=MSG+"1. Talvez n„o foi executada a transferencia de saldos do mes anterior; //"
               MSG=MSG+"2. Talvez n„o tenha criado a ficha de estoque; //"
               MSG=MSG+"// "
               MSG=MSG+"Deseja continuar ?"
               ConfGeral(MSG)
               If OK="N"
                  Then Return False
               EndIf
       EndIf

  Case [FormulaC->Tipo do Item]="D":
       cditem=[FormulaC->Codigo do Produto]
       
       Switch;Alterado Karina
         Case (SYS_CLIENTE_CONFEC="0185" Or
               SYS_CLIENTE_CONFEC="0195" Or
               SYS_CLIENTE_CONFEC="0196") And SubStr([FormulaC->Codigo do Produto],8,3)="000":
               cditem=SubStr([FormulaC->Codigo do Produto],1,7)+".."
         Case (SYS_CODIGO_CLIENTE="0003") And SubStr([FormulaC->Codigo do Produto],7,4)="0000":
               cditem=SubStr([FormulaC->Codigo do Produto],1,6)+".."
         Case (SYS_CLIENTE_CONFEC="0222") And SubStr([FormulaC->Codigo do Produto],7,4)="0000":
               cditem=SubStr([FormulaC->Codigo do Produto],1,6)+".."
         Case (SYS_CLIENTE_CONFEC="0200") And SubStr([FormulaC->Codigo do Produto],9,2)="00":
               cditem=SubStr([FormulaC->Codigo do Produto],1,8)+".."
         Case (SYS_CLIENTE_CONFEC="0204") And SubStr([FormulaC->Codigo do Produto],9,2)="00":
               cditem=SubStr([FormulaC->Codigo do Produto],1,8)+".."
         Case (SYS_CLIENTE_CONFEC="0079") And SubStr([FormulaC->Codigo do Produto],7,4)="0000":
               cditem=SubStr([FormulaC->Codigo do Produto],1,6)+".."
       EndSwitch

       Moveto "\\Sistemas\\Estoque\\SdEstq"
       Moveto [Codigo do Item]
       Locate Pattern cditem
       If RetVal
          Then While True
                 If [Codigo da Empresa]=VSDGEMPRESA And
                    [Ano Referencia   ]=VSDGANO     And
                    [Mes Referencia   ]=VSDGMES
                    Then [Preco de Custo        ]=[FormulaC->Custo Unitario]
                         [Data do Preco de Custo]=Today()
                         UnLockRecord
                 Endif
                 Skip
                 If EOT() Then QuitLoop EndIf
                 Locate Next Pattern cditem
                 If Not RetVal
                    Then QuitLoop
                 Endif
               EndWhile
       EndIf
EndSwitch
Return True
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_TIPOEST"       : Campo="TG_EMPRESA"
            Case Campo="TG_MARCA"         : Campo="TG_TIPOEST" 
            Case Campo="TG_MESANO"        : Campo="TG_MARCA"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = -59 :
          If Campo="TG_EMPRESA" Or
             Campo="TG_TIPOEST"
             Then
                  Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="TG_EMPRESA"                 
                     Then Moveto [Lookup_Empresa         ] 
                          If ConsultaF1()
                             Then VSDGEMPRESA   =[Lookup_Empresa]
                                  Moveto [Lookup_Empresa]
                                  Ativa_Lookup()
                                  Moveto [Codigo da Empresa]
                                  Locate VSDGEMPRESA
                                  If Not RetVal
                                     Then VSDGEMPRESA = ""
                                          VSDGNOMEMP  = ""
                                     Else VSDGEMPRESA   =[Codigo da Empresa    ]
                                          VSDGNOMEMP    =[Nome Fantasia Empresa]
                                  EndIf
                                  KeyPress "ESC"
                          EndIf
                  EndIf
                  If Campo="TG_TIPOEST"                 
                     Then Moveto [Tipo do Item           ] 
                          If ConsultaF1()
                             Then VSDGTIPOEST   =[Tipo do Item]
                                  Moveto [Tipo do Item]
                                  Ativa_Lookup()
                                  Moveto [Tipo do Item]
                                  Locate VSDGTIPOEST
                                  If Not RetVal
                                     Then VSDGTIPOEST    =""
                                          VSDGDESCTIPOEST=""
                                     Else VSDGTIPOEST    =[Tipo do Item          ]
                                          VSDGDESCTIPOEST=[Descricao Tipo do Item]
                                  EndIf
                                  KeyPress "ESC"
                          EndIf
                  EndIf

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

                  echo Normal
                  echo off

         EndIf
     Case Evento["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA":
                 VSDGEMPRESA=ControlValue("TG_EMPRESA")
                 If Not IsBlank(VSDGEMPRESA)
                    Then VSDGEMPRESA=AlinhM(VSDGEMPRESA,4)
                         Moveto [Lookup_Empresa]
                         Ativa_Lookup()
                         Moveto [Codigo da Empresa]
                         Locate VSDGEMPRESA
                         If Not RetVal
                            Then Mensagem("Empresa n„o Cadastrada !")
                                 VSDGEMPRESA = ""
                                 VSDGNOMEMP  = ""
                            Else VSDGEMPRESA   =[Codigo da Empresa    ]
                                 VSDGNOMEMP    =[Nome Fantasia Empresa]
                                 Campo="TG_TIPOEST"
                         EndIf
                         KeyPress "ESC"
                         Echo Off
                 EndIf
            Case Campo="TG_TIPOEST" :
                 VSDGTIPOEST=ControlValue("TG_TIPOEST")
                 If IsBlank(VSDGTIPOEST)
                    Then VSDGDESCTIPOEST="TODOS"
                         Campo="TG_MARCA"
                    Else Moveto [Tipo do Item]
                         Ativa_Lookup()
                         Moveto [Tipo do Item]
                         Locate VSDGTIPOEST
                         If Not RetVal
                            Then Mensagem("Tipo do item n„o cadastrado !")
                            Else VSDGDESCTIPOEST=[Descricao Tipo do Item]
                                 Campo="TG_MARCA"
                         EndIf
                         KeyPress "ESC"
                         Echo Off
                 EndIf
            Case Campo="TG_MARCA"   : Campo="TG_MESANO"
                 VSDGMARCA=AlinhM(ControlValue("TG_MARCA"),3)
            Case Campo="TG_MESANO"  :
                 VSDGMESANO=ControlValue("TG_MESANO")
                 If IsBlank(VSDGMESANO)
                    Then VSDGMESANO=AlinhM(StrVal(Month(Today())),2)+"."+AlinhM(StrVal(Year(Today())),4)
                 EndIf
                 VSDGMES=SubStr(VSDGMESANO,1,2)
                 VSDGANO=SubStr(VSDGMESANO,4,4)
                 If NumVal(VSDGMES) > 12 Or NumVal(VSDGMES) <= 0
                    Then MENSAGEM("mes Inv lido!")
                    Else Campo = "YES"
                 EndIf

                 Campo="YES"

            Case Campo="YES"  : AcceptDialog
            Case Campo="NO"   : CancelDialog

          EndSwitch

          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe a Empresa de referlncia p/ ficha de estoque"
  Case Campo="TG_MESANO":
       MSG_CAMPO="Informe o Mes/Ano referlncia (MM.AAAA), Em Branco = Mes/Ano Atual"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Ficha Estoque                                                        *
;*******************************************************************************
Proc Seleciona_Ficha(Titulo)

Echo Normal
Echo Off

VSDGEMPRESA     = ""
VSDGMARCA       = ""
VSDGMESANO      = ""
VSDGTIPOEST     = ""
VSDGDESCTIPOEST = ""

While True

  ShowDialog Titulo Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
    @ 07,14 Height 13 Width 50

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

    Label  @ 02,00 "Tipo do Estoque"  For "TG_TIPOEST"
    Accept @ 03,01 Width 04 "A1"  Picture "!" Tag "TG_TIPOEST" To VSDGTIPOEST
    Accept @ 03,06 Width 25 "A30"  Picture "!*!" Tag "TG_DESCTIPOEST" To VSDGDESCTIPOEST

    Label  @ 04,00 "Marca"  For "TG_MARCA"
    Accept @ 05,01  Width 06 "A03"  Picture "#*#" Tag "TG_MARCA" To VSDGMARCA

    Label  @ 06,00 "mes/Ano Ficha Estoque"  For "TG_MESANO"
    Accept @ 07,01  Width 10 "A07"  Picture "##.####" Tag "TG_MESANO" To VSDGMESANO

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

  EndDialog

  If Not RetVal
     Then Return False
  EndIf

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

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

Moveto [Lookup_Produto]
Ativa_Lookup()
Moveto [Codigo do Item]
Locate COD1
If Retval
   Then codok=True
   Else codok=False
EndIf
KeyPress "ESC"
If not codok
   Then Mensagem("O Item desta formula n„o esta cadastrado !// //F¢rmula n„o copiada.")
        Return
EndIf

Aguarde("Copiando F¢rmula")
CopyToArray REGC
End PgDn
CopyFromArray REGC
[Codigo do Produto]=COD1
[Codigo Cor_Tecido]=""
[Tamanho          ]=""
[Lookup_Produto   ]=COD1
UnLockRecord
Do_It!
{Ask} {FormulaI} Check
Moveto [Codigo do Produto] TypeIn "~CODIGOANT"
Moveto [Codigo Cor_Tecido] TypeIn "~CORANT"
Moveto [Tamanho          ] TypeIn "~TAMANHOANT"
Do_It!
ClearAll
If Not IsEmpty("Answer")
   Then {Ask} {Answer} TypeIn "Fast"
        Moveto [Codigo do Produto] TypeIn "Changeto ~COD1"
        Moveto [Codigo Cor_Tecido] TypeIn "Changeto ~COD2"
        Moveto [Tamanho          ] TypeIn "Changeto ~COD3"
        Do_It!
        Add "Answer" "FormulaI"
        ClearAll
EndIf

LimpAguarde()

View "FormulaI"
CoEdit "FormulaC"
PickForm "1"
Moveto [Codigo do Produto]
Locate CODIGOANT, CORANT, TAMANHOANT
Mensagem("F¢rmula Copiada !")
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="YES" Or Campo="NO" : Campo="CodProduto"
                EndSwitch
                TEMP=False
           Case Evento["KeyCode"] = 13:
                If Checa_TAG()
                   Then Switch
                          Case Campo="CodProduto":
                               COD1=AlinhM(ControlValue("CodProduto"),10)
                               Campo="YES"
                        EndSwitch
                EndIf
                RefreshDialog
                TEMP=False
        EndSwitch
EndIf

Switch
  Case Campo="CodProduto"   : MSG_CAMPO="Informe o Novo C¢digo do Item"
  OtherWise                 : MSG_CAMPO=""
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return TEMP
EndProc

;*******************************************************************************
;* Rotina Para Janela do Novo Produto                                          *
;*******************************************************************************
Proc Nova()
Private campoant,itemok

CODIGOANT =[Codigo do Produto]
CORANT    =[Codigo Cor_Tecido]
TAMANHOANT=[Tamanho]

Echo Normal
Echo Off

Campoant=Field()
While True

  INICIO_DIALOG=True
  ShowDialog "Nova F¢rmula" Proc "Muda"
   Trigger "OPEN","ARRIVE"
   Key "ENTER","ESC"
   @ 09,19   Height 07 Width 30

    Label  @ 0,00 "Novo Item" for "CodProduto"
    Accept @ 1,01  Width 13 "A10" picture "#*#" Tag "CodProduto" to COD1

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

  EndDialog
  If Not RetVal
     Then QuitLoop
  EndIf

  COD1=AlinhM(COD1,10)
  COD2=""
  COD3=""
  itemok=True

  If COD1="0000000000"
     Then Mensagem("Novo c¢digo inv lido !")
          itemok=false
  EndIf
  Moveto [Codigo do Produto]
  Locate COD1, COD2, COD3
  If RetVal
     Then Mensagem("O novo Item ja' existe !")
          itemok=false
  EndIf

  Locate CODIGOANT, CORANT, TAMANHOANT
  If ItemOk
     Then NovaRef()
          QuitLoop
  EndIf
EndWhile

Moveto Field campoant
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  "

    Prompt TECLA

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

    If RetVal=-33
       Then 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 " : "F5",
             "F9 ~A~tualizar Ficha Estoque" : " Atualizar Ficha de Estoque com £ltimo custo das f¢rmulas" : "F9",
             "F6 ~V~alores Unit rios" : " Informar dados Valores Unit rios        " : "F6",
             SEPARATOR,
             "Gera Grade Tamanhos                          " : " Gera formulas de Tamanhos para esta F¢rmula"                 : "GRADE",
             "Gera Grade Cores/Tamanhos                    " : " Gera formulas de Cores/Tamanhos para esta F¢rmula"           : "GRADE/COR/SEMI",
             "Gera Grade Cores/Tamanhos - Item Acabado     " : " Gera formulas de Cores/Tamanhos s¢ consumo de semi-acabado"  : "GRADE/COR",
             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 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 !") 
                             Loop
                     EndIf        
                     Del 
                     If 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 Grade_Cor_Semi()
                        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
         CUSTO()
         Moveto "FormulaI"
         QuitLoop
    Case RetVal="F5":
         Del
         Moveto "FormulaC"
         If Seleciona_Ficha("Atualizar com £ltimo custo")
            Then Moveto "FormulaI"
                 ATUALIZA_CUSTO()
         EndIf
         Moveto "FormulaI"
         QuitLoop
    Case RetVal="F9":
         Del
         Moveto "FormulaC"
         If Seleciona_Ficha("Atualizar ficha estoque com £ltimo custo")
            Then Moveto [Lookup_Produto]
                 If Busca_Lookup("Codigo do Item",[Codigo do Produto],"")
                    Then ATUALIZA_Ficha()
                 EndIf        
         EndIf
         Moveto "FormulaI"
         QuitLoop
    Case RetVal="F6":
         Del
         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
                                  EXCLUSAO("Item")
                             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  "
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="I_Codigo_Item"
        INICIO_DIALOG=False
EndIf
If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Sequencia]
                      Inicia_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 QuerDesfazer("")
                    Then If CHAVEI=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEI=9
                         CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    : Campo="I_Codigo_Item"
            Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
            Case Campo="I_Quantidade"        :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Tipo_Item"
                    Else Campo="I_Codigo_Item"
                 EndIf
            Case Campo="I_UN_Item"           : Campo="I_Quantidade"
            Case Campo="I_Preco_Unitario"    :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Baixa_Automatica"  : Campo="I_Preco_Unitario"
            Case Campo="I_Flag"              : Campo="I_Baixa_Automatica"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Descricao_Item"
                    Else Moveto [Lookup_Material]
                         Ativa_Lookup()
                         Moveto [Codigo do Item]
                         Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                         If RetVal
                            Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                                 VSD_I_Descricao_Item=[Descricao do Item]
                                 KeyPress "ESC"
                                 [Codigo do Material]=VSD_I_Codigo_Item
                                 [Lookup_Material   ]=VSD_I_Codigo_Item

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

                                 Registro_Item("Ler")
                                 Campo="I_Quantidade"
                            Else Mensagem("Item n„o Cadastrado !")
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 Campo="I_Tipo_Item"
            Case Campo="I_Tipo_Item":
                 VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                 If Not IsBlank(VSD_I_Tipo_Item)
                    Then Moveto [Tipo do Item]
                         Ativa_Lookup()
                         Moveto [Tipo do Item]
                         Locate VSD_I_Tipo_Item
                         If RetVal
                            Then KeyPress "ESC"
                                 [Tipo do Item]=VSD_I_Tipo_Item
                                 Campo="I_Quantidade"
                            Else Mensagem("Tipo do Item n„o Cadastrado !")
                                 VSD_I_Tipo_Item=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Preco_Unitario"
                 EndIf
             Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Interna]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  [Unidade Interna]=VSD_I_UN_Item
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                    Else If VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario
                         EndIf
                 EndIf
                 Campo="I_Baixa_Automatica"
            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  "
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
       [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 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","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 geracao das grades/cores                                        *
;*******************************************************************************
Proc Grade_Cor()
Private Campo_Anterior,i,CODITEM,CODANTERIOR

If SYS_CLIENTE_CONFEC=""
   Then Return False
EndIf

MSG="Deseja gerar f¢rmulas com Cores/Tamanhos para este Item-Acabado ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

Moveto "FormulaC"
CODITEM=[Codigo do Produto]
UnLockRecord
Formkey

{TableAdd} {\\Sistemas\\Estoque\\Iten_Cor} 
{TableAdd} {\\Sistemas\\Estoque\\Itens} 

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate CODITEM
If RetVal
   Then Monta_Array_Grade()
        
        Aguarde("Gerando formulas das Grades")
        
        Moveto "\\Sistemas\\Estoque\\Iten_Cor"
        Moveto [Codigo do Item]
        Locate CODITEM
        If RetVal
           Then While [Codigo do Item]=CODITEM
                  Switch                 
                    Case SYS_CLIENTE_CONFEC="0185" Or
                         SYS_CLIENTE_CONFEC="0195" Or
                         SYS_CLIENTE_CONFEC="0196" Or
                         SYS_CLIENTE_CONFEC="0222" Or
                         SYS_CLIENTE_CONFEC="0079" Or
                         SYS_CODIGO_CLIENTE="0003" :
                         Cria_Grade(AlinhM(StrVal(NumVal([Sequencia da Cor_Tecido])),2))
                  EndSwitch
           
                  Moveto "\\Sistemas\\Estoque\\Iten_Cor"
                  Skip
                  If Eot()
                     Then QuitLoop
                  EndIf
                EndWhile
           Else Switch; Alterado Karina
                  Case SYS_CLIENTE_CONFEC<>"":
                       Cria_Grade("")
                EndSwitch  
        EndIf
EndIf
Do_It!

Moveto "\\Sistemas\\Estoque\\Itens"    ClearImage
Moveto "\\Sistemas\\Estoque\\Iten_Cor" ClearImage

Moveto "FormulaC"
CoEditKey
FormKey
Moveto [Codigo do Produto]
Locate CODITEM
Moveto "FormulaI"

LimpAguarde()
Return True
EndProc


;*******************************************************************************
;* Rotina Cria Grade                                                           *
;*******************************************************************************
Proc Cria_Grade(Cor)
Private CODNOVO,wi,i

For i From 1 to 12
    If LTrim(RTrim(SubStr(Array_TM[i],4,2)))<>""
       Then tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))

            CODNOVO=CODITEM
            CODNOVO=SubStr(CODNOVO,1,(10-Len(Cor+Tm)))+Cor+tm

            Moveto "FormulaC"
            Moveto [Codigo do Produto]
            Locate CODNOVO
            If RetVal
               Then Del
            EndIf   
            End
            Down
            Moveto [Lookup_Produto]
            If BUSCA_LOOKUP("Codigo do Item",CODNOVO,"Codigo "+CODNOVO+" n„o cadastrado, Formula n„o criada !")
               Then [Codigo do Produto   ]=CODNOVO
                    [Lookup_Produto      ]=CODNOVO

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

                    [Baixa_Automatica    ]="S"
                    [Quantidade Produzida]=1
                    unLockrecord
               Else Del
                    Loop
            EndIf
            
            Moveto "FormulaI"
            Moveto [Codigo do Produto]
            Locate CODNOVO,"",""
            If RetVal
               Then While [Codigo do Produto]=CODNOVO
                      Del
                      If EOT() Then QuitLoop EndIf
                    EndWhile  
            EndIf

            CODNOVOS=MudaCodigoPara(CODNOVO,"S")
            
            Moveto "FormulaI"
            Moveto [Codigo do Produto]
            Locate CODNOVO
            If Not RetVal
               Then End
                    Down
                    Moveto [Lookup_Material]
                    If BUSCA_LOOKUP("Codigo do Item",CODNOVOS,"Codigo "+CODNOVOS+" n„o cadastrado, Item da Formula "+CODNOVO+" n„o criado!")
                       Then [Codigo do Produto    ]=CODNOVO
                            [Sequencia            ]=1
                            [Codigo do Material   ]=CODNOVOS
                            [Lookup_Material      ]=CODNOVOS

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

                            [Item_Baixa_Automatica]="S"
                            [Quantidade           ]=1
                            unLockrecord
                       Else Del
                    EndIf
            EndIf
            
             If SYS_CODIGO_CLIENTE="0079"
                Then
                      Moveto "FormulaC"
                      Moveto [Codigo do Produto]
                      Locate CODNOVOS
                      If Not RetVal
                         Then 
                              End
                              Down
                              [Codigo do Produto   ]=CODNOVOS
                              [Lookup_Produto      ]=CODNOVOS
                          
                              [Quantidade Produzida]=1
                              [Baixa_Automatica    ]="N"
                              If IsLockRecord()
                                 Then Del
                                 Else UnLockRecord
                              EndIf   
                      EndIf        
             EndIf
            
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Monta Aray Grade                                                     *
;*******************************************************************************
Proc Monta_Array_Grade()

Moveto [Codigo da Grade]
If Not Busca_Lookup("Codigo da Grade",[Codigo da Grade],"")
   Then Return False
EndIf

DynArray Array_TM[]
Array_TM[1] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade1"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item1"]))
Array_TM[2] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade2"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item2"]))
Array_TM[3] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade3"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item3"]))
Array_TM[4] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade4"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item4"]))
Array_TM[5] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade5"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item5"]))
Array_TM[6] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade6"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item6"]))
Array_TM[7] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade7"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item7"]))
Array_TM[8] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade8"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item8"]))
Array_TM[9] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade9"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item9"]))
Array_TM[10]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade10"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item10"]))
Array_TM[11]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade11"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item11"]))
Array_TM[12]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade12"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item12"]))

Return True
EndProc




;*******************************************************************************
;* Rotina para geracao das grades/cores                                        *
;*******************************************************************************
Proc Grade_Cor_Semi()
Private Campo_Anterior,i,CODITEM,CODANTERIOR

If SYS_CLIENTE_CONFEC="" 
   Then Return False
EndIf   

MSG="Deseja gerar f¢rmulas com Cores/Tamanhos para este Item ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

CODLOCATE=[FormulaC->Codigo do Produto]
CODITEM  =[FormulaC->Codigo do Produto]

CODREF =[FormulaC->Codigo do Produto]
CODREF =MudaCodigoPara(CODREF,"P")
CODREF =PegaCodigoRaiz(CODREF)

If IsAssigned(Array_Materiais) Then Release Vars Array_Materiais  EndIf
DynArray Array_Materiais[]
i=0
Moveto "FormulaI"
Scan
  i=i+1
  Array_Materiais[i]=[Codigo do Material]+"|"+AlinhM(Strval([Quantidade]),13)+"|"+AlinhM(Strval([Valor Unitario]),13)
EndScan

Moveto "FormulaC"
CopyToArray REG_ITEM_FORMULA
UnLockRecord
Formkey

{TableAdd} {\\Sistemas\\Estoque\\Iten_Cor} 
{TableAdd} {\\Sistemas\\Estoque\\Itens} 

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate CODITEM
If RetVal
   Then Monta_Array_Grade()
        
        Aguarde("Gerando formulas das Grades")
        
        Moveto "\\Sistemas\\Estoque\\Iten_Cor"
        Moveto [Codigo do Item]
        Locate CODREF
        If RetVal
           Then While [Codigo do Item]=CODREF
                  Switch 
                    Case SYS_CLIENTE_CONFEC="0185" Or
                         SYS_CLIENTE_CONFEC="0195" Or
                         SYS_CLIENTE_CONFEC="0196" Or
                         SYS_CLIENTE_CONFEC="0222" Or
                         SYS_CODIGO_CLIENTE="0003" Or
                         SYS_CLIENTE_CONFEC="0079":  
                         Cria_Grade_Semi(AlinhM(StrVal(NumVal([Sequencia da Cor_Tecido])),2))
                  EndSwitch
           
                  Moveto "\\Sistemas\\Estoque\\Iten_Cor"
                  Skip
                  If Eot()
                     Then QuitLoop
                  EndIf
                EndWhile
           Else Switch ; Alterado Karina
                  Case SYS_CLIENTE_CONFEC<>"":
                       Cria_Grade_Semi("")
                EndSwitch  
        EndIf
EndIf
Do_It!

Moveto "\\Sistemas\\Estoque\\Itens"    ClearImage
Moveto "\\Sistemas\\Estoque\\Iten_Cor" ClearImage

Moveto "FormulaC"
CoEditKey
FormKey
Moveto [Codigo do Produto]
Locate CODLOCATE
Moveto "FormulaI"

LimpAguarde()
Return True
EndProc


;*******************************************************************************
;* Rotina Cria Grade                                                           *
;*******************************************************************************
Proc Cria_Grade_Semi(Cor)
Private CODNOVO,wi,i

For i From 1 to 12
    If LTrim(RTrim(SubStr(Array_TM[i],4,2)))<>""
       Then tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))

            CODNOVO=CODITEM
            CODNOVO=SubStr(CODNOVO,1,(10-Len(Cor+Tm)))+Cor+tm

            Moveto "FormulaC"
            Moveto [Codigo do Produto]
            Locate CODNOVO
            If RetVal
               Then Del
            EndIf        
            End
            Down
            Moveto [Lookup_Produto]
            If BUSCA_LOOKUP("Codigo do Item",CODNOVO,"Codigo "+CODNOVO+" n„o cadastrado, Formula n„o criada !")
               Then CopyFromArray REG_ITEM_FORMULA
                    [Codigo do Produto   ]=CODNOVO
                    [Lookup_Produto      ]=CODNOVO
                    unLockrecord
               Else Del
                    Loop
            EndIf
            
            Moveto "FormulaI"
            Moveto [Codigo do Produto]
            Locate CODNOVO,"",""
            If RetVal
               Then While [Codigo do Produto]=CODNOVO
                      Del
                      If EOT() Then QuitLoop EndIf
                    EndWhile  
            EndIf
            
            For wi From 1 To DynArraySize(Array_Materiais)
              
              
              Switch ; Alterado Karina
                Case SYS_CLIENTE_CONFEC="0185" Or
                     SYS_CLIENTE_CONFEC="0195" Or
                     SYS_CLIENTE_CONFEC="0196":
                     CODNOVOS=SubStr(Array_Materiais[wi],1,10)
                     If SubStr(CODNOVOS,8,2)<>"00"
                        Then CODNOVOS=SubStr(CODNOVOS,1,7)+Cor+SubStr(CODNOVOS,10,1)
                     EndIf
                     If SubStr(CODNOVOS,10,1)<>"0"
                        Then CODNOVOS=SubStr(CODNOVOS,1,9)+tm
                     EndIf
                Case SYS_CODIGO_CLIENTE="0003" Or
                     SYS_CLIENTE_CONFEC="0222":
                     CODNOVOS=SubStr(Array_Materiais[wi],1,10)
                     If SubStr(CODNOVOS,7,2)<>"00"
                        Then CODNOVOS=SubStr(CODNOVOS,1,6)+Cor+SubStr(CODNOVOS,9,2)
                     EndIf
                     If SubStr(CODNOVOS,09,2)<>"00"
                        Then CODNOVOS=SubStr(CODNOVOS,1,8)+tm
                     EndIf
                Case SYS_CLIENTE_CONFEC="0200" Or
                     SYS_CLIENTE_CONFEC="0204":
                     CODNOVOS=SubStr(Array_Materiais[wi],1,10)
                     If SubStr(CODNOVOS,09,2)<>"00"
                        Then CODNOVOS=SubStr(CODNOVOS,1,8)+tm
                     EndIf

                OtherWise: Loop
              EndSwitch
            
              Moveto "FormulaI"
              Moveto [Codigo do Produto]
              Locate CODNOVO,"","",wi
              If Not RetVal
                 Then End
                      Down
                      Moveto [Lookup_Material]
                      If BUSCA_LOOKUP("Codigo do Item",CODNOVOS,"Codigo "+CODNOVOS+" n„o cadastrado, Item da Formula "+CODNOVO+" n„o criado!")
                         Then [Codigo do Produto    ]=CODNOVO
                              [Sequencia            ]=wi
                              [Codigo do Material   ]=CODNOVOS
                              [Lookup_Material      ]=CODNOVOS

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

                              [Item_Baixa_Automatica]="S"
                              [Quantidade           ]=NumVal(SubStr(Array_Materiais[wi],12,13))
                              [Valor Unitario       ]=NumVal(SubStr(Array_Materiais[wi],26,13))
                              unLockrecord
                         Else Del
                      EndIf
             EndIf

             If SYS_CODIGO_CLIENTE="0079"
                Then
                      Moveto "FormulaC"
                      Moveto [Codigo do Produto]
                      Locate CODNOVOS
                      If Not RetVal
                         Then 
                              End
                              Down
                              [Codigo do Produto   ]=CODNOVOS
                              [Lookup_Produto      ]=CODNOVOS
                          
                              [Quantidade Produzida]=1
                              [Baixa_Automatica    ]="N"
                              If IsLockRecord()
                                 Then Del
                                 Else UnLockRecord
                              EndIf   
                      EndIf        
             EndIf

            EndFor
    EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina para geracao das grades/Tamanhos                                     *
;*******************************************************************************
Proc Grade()
Private Campo_Anterior,i,CODITEM,CODANTERIOR

If SYS_CLIENTE_CONFEC="" 
   Then Return False
EndIf   

MSG="Deseja gerar formula com Grade dos tamanhos ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

CODLOCATE=[FormulaC->Codigo do Produto]
CODITEM  =[FormulaC->Codigo do Produto]
  
If IsAssigned(Array_Materiais) Then Release Vars Array_Materiais  EndIf
DynArray Array_Materiais[]
i=0
Moveto "FormulaI"
Scan
  i=i+1
  Array_Materiais[i]=[Codigo do Material]+"|"+AlinhM(Strval([Quantidade]),13)
EndScan

Moveto "FormulaC"
CopyToArray REG_ITEM_FORMULA
UnLockRecord
Formkey

{TableAdd} {\\Sistemas\\Estoque\\Itens} 

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate CODITEM
If RetVal
   Then Monta_Array_Grade()
        
        Aguarde("Gerando formulas das Grades")
        Cria_Grade_Tamanhos()
EndIf
Do_It!

Moveto "\\Sistemas\\Estoque\\Itens"    ClearImage

Moveto "FormulaC"
CoEditKey
FormKey
Moveto [Codigo do Produto]
Locate CODLOCATE
Moveto "FormulaI"

LimpAguarde()
Return True
EndProc


;*******************************************************************************
;* Rotina Cria Grade                                                           *
;*******************************************************************************
Proc Cria_Grade_Tamanhos()
Private CODNOVO,wi,i

For i From 1 to 12
    If LTrim(RTrim(SubStr(Array_TM[i],4,2)))<>""
       Then tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))

            CODNOVO=CODITEM
            CODNOVO=SubStr(CODNOVO,1,(10-Len(Tm)))+tm

            If CODNOVO=CODITEM Then Loop EndIf
            
            
              Moveto "FormulaC"
              Moveto [Codigo do Produto]
              Locate CODNOVO
              If RetVal
                 Then Del
              EndIf
              End
              Down
              Moveto [Lookup_Produto]
              If BUSCA_LOOKUP("Codigo do Item",CODNOVO,"Codigo "+CODNOVO+" n„o cadastrado, Formula n„o criada !")
                 Then CopyFromArray REG_ITEM_FORMULA
                      [Codigo do Produto   ]=CODNOVO
                      [Lookup_Produto      ]=CODNOVO
                      unLockrecord
                 Else Del
                      Loop
              EndIf
              
              Moveto "FormulaI"
              Moveto [Codigo do Produto]
              Locate CODNOVO,"",""
              If RetVal
                 Then While [Codigo do Produto]=CODNOVO
                        Del
                        If EOT() Then QuitLoop EndIf
                      EndWhile  
              EndIf

            For wi From 1 To DynArraySize(Array_Materiais)
              
              Switch ; Alterado Karina
                Case SYS_CLIENTE_CONFEC="0185" Or
                     SYS_CLIENTE_CONFEC="0195" Or
                     SYS_CLIENTE_CONFEC="0196":
                     CODNOVOS=SubStr(Array_Materiais[wi],1,10)
                     If SubStr(CODNOVOS,10,1)<>"0"
                        Then CODNOVOS=SubStr(CODNOVOS,1,9)+tm
                     EndIf
                Case SYS_CODIGO_CLIENTE="0003" Or
                     SYS_CLIENTE_CONFEC="0222" Or
                     SYS_CLIENTE_CONFEC="0200" Or
                     SYS_CLIENTE_CONFEC="0204":
                     CODNOVOS=SubStr(Array_Materiais[wi],1,10)
                     If SubStr(CODNOVOS,09,2)<>"00"
                        Then CODNOVOS=SubStr(CODNOVOS,1,8)+tm
                     EndIf
                OtherWise: Loop
              EndSwitch
            
              Moveto "FormulaI"
              Moveto [Codigo do Produto]
              Locate CODNOVO,"","",wi
              If Not RetVal
                 Then End
                      Down
                      Moveto [Lookup_Material]
                      If BUSCA_LOOKUP("Codigo do Item",CODNOVOS,"Codigo "+CODNOVOS+" n„o cadastrado, Item da Formula "+CODNOVO+" n„o criado!")
                         Then [Codigo do Produto    ]=CODNOVO
                              [Sequencia            ]=wi
                              [Codigo do Material   ]=CODNOVOS
                              [Lookup_Material      ]=CODNOVOS

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

                              [Item_Baixa_Automatica]="S"
                              [Quantidade           ]=NumVal(SubStr(Array_Materiais[wi],12,13))
                              unLockrecord
                         Else Del
                      EndIf
             EndIf
            
            EndFor
    EndIf
EndFor

EndProc

;*******************************************************************************
;* 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
    Moveto "FormulaI"
    While True
      CHAVEI()
      If CHAVEI=9 Or CHAVEI=5
         Then QuitLoop
      EndIf
      Controla_EdicaoI()
    EndWhile
    CUSTO()
    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 Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
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

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

View "FormulaI"
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
