;** Bib_PROD *******************************************************************
;*  Biblioteca pasta producao-formulas                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 12/12/2019 por Anivel Auguusto Rodrigues
;Ultima Alteracao: 19/12/2019 por Anivel Auguusto Rodrigues 
;Motivo Alteracao: Ajustes Formula_Monta_Array_Grade()
;Ultima Alteracao: 27/04/2020 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 29/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 17/06/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes no campo [Item_Baixa_Automatica] na proc Formula_Cria_Grade_Semi() 
;Ultima Alteracao: 17/06/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste nÆo pegar item inativo para cor Formula_Cria_Grade_Semi()

;*******************************************************************************
@ 22,28 ?? "Gerando Biblioteca Bib_Prod.Lib"
Style Blink
?? "... "

If IsFile("\\Sistemas\\Producao\\Bib_Prod.Lib")
   Then Run NoRefresh "Del \\Sistemas\\Producao\\Bib_Prod.Lib>Nul"
EndIf
CreateLib "\\Sistemas\\Producao\\Bib_Prod" Size 200

;*******************************************************************************
;* Rotina para atualizar/adicionar item na tabela de pre‡o                     *
;*******************************************************************************
Proc Formula_Tabela_Preco(PARAM)
Private PARAM, PRECO 

COD_ITEM=[Codigo do Produto]
 
If [Tipo do Item]="P"
  Then COD_ITEM=PegaCodigoRaiz(COD_ITEM)
EndIf
 
Switch
 Case PARAM=1 : PRECO = [Preco de Venda_Calculado]  
 Case PARAM=2 : PRECO = [Preco de Venda_Livre    ]   
EndSwitch 

If PRECO="" Or PRECO=BlankNum()
  Then return
EndIf
 
Moveto "\\Sistemas\\Vendas\\TbprIte"
Moveto [Codigo da Tabela]
Locate VSDGTABELA,COD_ITEM
If RetVal
  Then If [Preco Unitario]<>PRECO
          Then 
               [Taxa Ultimo Reajuste]=((PRECO-[Preco Unitario])*100)/[Preco Unitario]  
               [Preco Unitario      ]=PRECO
               [Data Ultimo Reajuste]=Today()
               UnLockRecord
       endif
  Else 
       End Down
       [Codigo da Tabela    ]=VSDGTABELA
       [Codigo do Item      ]=COD_ITEM
       [Preco Unitario      ]=PRECO
       [Lookup_Item         ]=COD_ITEM
       UnLockRecord
EndIf
 
EndProc ;Tabela_Preco()

;*******************************************************************************
;* Rotina grava registro conciliacao c/ erro                                   *
;*******************************************************************************
Proc Formula_Linha_Erro()
Private linha

if TIT_ERRO=""
   Then TIT_ERRO="1"
        Print File ARQ_ERRO "\""+"0-1"+ "Ocorrencias de erros na atualiza‡Æo de custos"+"\""+"\n"
        Print File ARQ_ERRO "\""+"0-2"+"\""+ "\n"
        Print File ARQ_ERRO "\""+"0-3"+"\""+ "\n"
Endif

If TIT_FICHA="1"
   Then TIT_FICHA="2"
        Print File ARQ_ERRO "\""+"1-1"+ "N„o foi encontrada a ficha de estoque referente a "+VSDGMES+"/"+VSDGANO+"\""+"\n"
        Print File ARQ_ERRO "\""+"1-2"+"\""+ "\n"
        Print File ARQ_ERRO "\""+"1-3"+ Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+
                                        Format("W30,AL","Descri‡„o")+"\""+"\n"
EndIf

If TIT_CUSTO="1" 
   Then TIT_CUSTO="2"
        Print File ARQ_ERRO "\""+"2-0"+"\""+ "\n"
        Print File ARQ_ERRO "\""+"2-1"+ "Sem custo informado na ficha de estoque referente a "+VSDGMES+"/"+VSDGANO+"\""+"\n"
        Print File ARQ_ERRO "\""+"2-2"+"\""+ "\n"
        Print File ARQ_ERRO "\""+"2-3"+ Format("W08,AL","Empresa")  +"| "+Format("W11,AL","Item")   +"| "+
                                        Format("W30,AL","Descri‡„o")+"\""+"\n"
EndIf        

CONT_ERRO=CONT_ERRO+1
TEVE_ERRO=True

EndProc ;Linha_Erro()

;*******************************************************************************
;* Rotina para Imprimir Erros                                                  *
;*******************************************************************************
Proc Formula_Imprime_Erro() 

If not TEVE_ERRO
   Then 
        TEVE_ERRO=False
        MSG_ERRO =False
        
        return
endif   
      
MSG=    "Foram detectados erros no processo!////"
MSG=MSG+"Verificar relatorios de erros !                "
Mensagem(MSG)

echo normal
echo off

DISPOSITIVO()
If OK<>"" 
   Then  
        AGUARDE("Aguarde, gerando o relat¢rio")
         
        Tabela_ERRO=Cria_Temp(PrivDir())
        Copy "\\Base\\Sistemas\\Estoque\\RM_tx250" Tabela_ERRO
        
        {Tools} {ExportImport} {Import} {ASCII} {AppendDelimited} TypeIn ARQ_ERRO Enter
        TypeIn Tabela_ERRO Enter 
            
        Sort Tabela_ERRO on "Text"
        
        Moveto Tabela_ERRO
        ClearImage
        
        TAB_ERRO = Cria_Temp(PrivDir())                       
        Cria_Tabela(TAB_ERRO,"Tipo(A3),"+
                            "Empresa(A4),"+
                            "Codigo do Item(a10),"+ 
                            "Descricao(A30)")
           
        View TAB_ERRO 
        CoEdit Tabela_ERRO
        Scan
         TEXTO = [Text]
         
         SEQ  = Rtrim(SubStr(TEXTO,1,3))
         EMPR = Rtrim(SubStr(TEXTO,4,8))
         ITEM = Rtrim(SubStr(TEXTO,14,11))
         DESC = Rtrim(SubStr(TEXTO,27,30))
         
         If SEQ<>"1-4" And SEQ<>"2-4"
            Then Loop 
         EndIf
         
         Moveto TAB_ERRO
         End Down
         [Tipo          ] = SEQ   
         [Empresa       ] = EMPR
         [Codigo do Item] = ITEM
         [Descricao     ] = DESC
         
         Moveto Tabela_ERRO
        EndScan
        Do_it!
        Moveto Tabela_ERRO  ClearImage
        Moveto TAB_ERRO     ClearImage
        
        ;---- Apenas uma ocorrˆncia de cada registro ----------
        {Ask} TypeIn TAB_ERRO Enter Check
        Do_it!
        Moveto TAB_ERRO  ClearImage
        Moveto "Answer"  ClearImage
        
        {Ask} TypeIn Tabela_ERRO Enter TypeIn "Fast Delete" 
        Moveto [Text] TypeIn "..1-4.. Or ..2-4.."
        Do_it!
        Moveto Tabela_ERRO  ClearImage
        
        View Tabela_ERRO
        Coedit "Answer"
        Scan
         SEQ  = [Tipo          ]   
         EMPR = [Empresa       ]
         ITEM = [Codigo do Item]
         DESC = [Descricao     ]
         
         TEXTO = SEQ + Format("W08,AL",EMPR) + "| " + Format("W11,AL",ITEM) + "| " + Format("W30,AL",DESC)
                                     
         Moveto Tabela_ERRO
         End Down                            
         [Text] = TEXTO
         
         Moveto "Answer"
        EndScan
        Do_it!
        Moveto Tabela_ERRO ClearImage
        Moveto "Answer"    ClearImage
        
        Sort Tabela_ERRO on "Text"
        Moveto Tabela_ERRO ClearImage
        
        ;---- Apenas uma ocorrˆncia de cada registro ----------
        Coedit Tabela_ERRO
        Scan
         [Text] = SubStr([Text],4,Len([Text]))
        EndScan
        Do_it!
        ClearImage  
                  
        OPCAOPAG="Todas"
        IMPRIREL(Tabela_ERRO,"2")
        
        Delete Tabela_ERRO
        Delete TAB_ERRO
        
EndIf

Deleta_Arquivo(ARQ_ERRO)
TEVE_ERRO=False
MSG_ERRO =False

echo normal
echo off
  
EndProc

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

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

Moveto [Codigo da Grade]
getrecord "\\sistemas\\estoque\\tpgrade" [Codigo da Grade] to REG_BUSCA_LOOKUP
If Not retval
   Then Mensagem("Grade [ "+[Codigo da Grade]+" ] nÆo cadastrada !// //Verificar !")
        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 varia‡äes de cores                                  *
;*******************************************************************************
Proc Formula_COR01()
Private i,CODLOCATE,NOVOPA,NOVOMP,regitens,regformulac

If SYS_CLIENTE_CONFEC<>"" 
   Then Mensagem("Fun‡Æo Inativa, verificar suporte da VISE !")
        Return False
EndIf   

if sys_Codigo_Cliente="0388" or sys_Codigo_Cliente="0427" or sys_Codigo_Cliente="0419" or sys_Codigo_Cliente="0444"
  then ;ok !
  else Mensagem("Fun‡Æo Inativa, verificar suporte da VISE !")
       return False
endif 

If [FormulaC->Tipo do Item]<>"D"
   Then Mensagem("Tipo do Item da Formula Invalido !// //S¢ Aplica‡Æo Direta !")
        Return False
EndIf   

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

CODLOCATE=[FormulaC->Codigo do Produto]

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

Moveto "FormulaC"
CopyToArray regformulac
UnLockRecord
Formkey

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

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate CODLOCATE
If RetVal
   Then 
        Aguarde("Gerando formulas das Cores")
        
        Moveto "\\Sistemas\\Estoque\\Iten_Cor"
        Moveto [Codigo do Item]
        Locate CODLOCATE
        If not RetVal
           then
                Mensagem("Item "+CODLOCATE+" sem cores cadastradas, Formula n„o criada!")
           else 
                While [Codigo do Item]=CODLOCATE and [Codigo da Cor_Tecido]<>""

                  NOVOPA=Substr(CODLOCATE,1,6)+[Codigo da Cor_Tecido]
                  GetRecord "\\Sistemas\\Estoque\\Itens" NOVOPA To regItens
                  If not RetVal
                     then
                          Mensagem("Item "+NOVOPA+" n„o cadastrado, Formula n„o criada!")
                     else
                          Moveto "FormulaI"
                          Moveto [Codigo do Produto]
                          Locate NOVOPA,"",""
                          If RetVal
                             Then While [Codigo do Produto]=NOVOPA
                                    Del
                                    If EOT() Then QuitLoop EndIf
                                  EndWhile  
                          EndIf

                          Moveto "FormulaC"
                          Moveto [Codigo do Produto]
                          Locate NOVOPA,"",""
                          If RetVal
                             Then Del
                          EndIf        

                          End
                          Down
                          CopyFromArray regformulac
                          [Codigo do Produto   ]=NOVOPA
                          [Lookup_Produto      ]=NOVOPA
                          unLockrecord
            
                          For wi From 1 To DynArraySize(Array_Materiais)
                            
                            NOVOMP=SubStr(Array_Materiais[wi],1,10)
                            
                            GetRecord "\\Sistemas\\Estoque\\Itens" NOVOMP To regitens
                            If not RetVal
                               Then 
                                    Mensagem("Item "+NOVOMP+" n„o cadastrado [C] !// //Item da Formula "+NOVOPA+" n„o adicionado !")
                               else
                                    Moveto "FormulaI"
                                    End
                                    Down
                                    [Codigo do Produto    ]=NOVOPA
                                    [Sequencia            ]=wi
                                    [Codigo do Material   ]=NOVOMP
                                    [Lookup_Material      ]=NOVOMP
      
                                    [Codigo Cor_Tecido    ]=""
                                    [Tamanho              ]=""
      
                                    [Quantidade           ]=NumVal(SubStr(Array_Materiais[wi],12,13))
                                    [Valor Unitario       ]=NumVal(SubStr(Array_Materiais[wi],26,13))
                                    [Item_Baixa_Automatica]=SubStr(Array_Materiais[wi],40,01)
                                    unLockrecord
                            endif
                          EndFor
                  endif
                  
                  Moveto "\\Sistemas\\Estoque\\Iten_Cor"
                  Skip
                  If Eot()
                     Then QuitLoop
                  EndIf
                EndWhile
        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 Formula_Cria_Grade_Tamanhos()
Private CODNOVO,wi,i,regitemdaformula

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

          CODNOVO=CODITEM
          CODNOVO=SubStr(CODNOVO,1,(10-Len(Tm)))+tm
          If CODNOVO=CODITEM Then 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

          Moveto "FormulaC"
          Moveto [Codigo do Produto]
          Locate CODNOVO
          If RetVal
             Then Del
          EndIf

          GetRecord "\\Sistemas\\Estoque\\Itens" CODNOVO To ITEM_F
          If not RetVal
             Then
                  Mensagem("Item "+CODNOVO+" n„o cadastrado, Formula n„o criada!")
                  Loop
          EndIf
          End
          Down
          CopyFromArray REG_ITEM_FORMULA
          [Codigo do Produto   ]=CODNOVO
          [Lookup_Produto      ]=CODNOVO
          unLockrecord

          For wi From 1 To DynArraySize(Array_Materiais)

            CODNOVOS=SubStr(Array_Materiais[wi],1,10)
            getrecord "\\sistemas\\estoque\\itens" CODNOVOS to regitemdaformula
            if not retval
               then 
                    Mensagem("Item "+CODNOVOS+" n„o cadastrado [CGT 1/2] !// //Item da Formula "+CODNOVO+" n„o adicionado !")
                    loop
            endif    

            if regitemdaformula["Tipo do Item"   ]<>"D" and
               regitemdaformula["Codigo da Grade"] =ITEM_F["Codigo da Grade"]
               then              
                    if len(tm)=1 then CODNOVOS=SubStr(CODNOVOS,1,9)+tm endif
                    if len(tm)=2 then CODNOVOS=SubStr(CODNOVOS,1,8)+tm endif

                    getrecord "\\sistemas\\estoque\\itens" CODNOVOS to regitemdaformula
                    if not retval
                       then
                            Mensagem("Item "+CODNOVOS+" n„o cadastrado [CGT 2/2] !// //Item da Formula "+CODNOVO+" n„o adicionado !")
                          Loop
                    endif    
            endif
          
            Moveto "FormulaI"
            Moveto [Codigo do Produto]
            Locate CODNOVO,"","",wi
            If Not RetVal
               Then 
                    End
                    Down
                    [Codigo do Produto    ]=CODNOVO
                    [Sequencia            ]=wi
                    [Codigo do Material   ]=CODNOVOS
                    [Lookup_Material      ]=CODNOVOS

                    [Codigo Cor_Tecido    ]=""
                    [Tamanho              ]=""
                    
                    [Item_Baixa_Automatica]=SubStr(Array_Materiais[wi],40,01)
                    [Quantidade           ]=NumVal(SubStr(Array_Materiais[wi],12,13))
                    [Valor Unitario       ]=NumVal(SubStr(Array_Materiais[wi],26,13))
                    unLockrecord
            EndIf
          EndFor
  EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina para geracao das grades/Tamanhos                                     *
;*******************************************************************************
Proc Formula_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[]
ib=0
Moveto "FormulaI"  
Scan
  ib=ib+1
  Array_Materiais[ib]=[Codigo do Material]+"|"+AlinhM(Strval([Quantidade]),13)+"|"+AlinhM(Strval([Valor Unitario]),13)+
                     "|"+Format("W1",[Tipo do Item])+[Item_Baixa_Automatica]
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 Formula_Monta_Array_Grade()
        
        Aguarde("Gerando formulas das Grades")
        Formula_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 Formula_Cria_Grade_Semi(Cor)
Private CODNOVO,wi,ia,gradeMP, ItemRaiz,regitemformula

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

          CODNOVO=CODITEM
          CODNOVO=SubStr(CODNOVO,1,(10-Len(Cor+Tm)))+Cor+tm
          If CODNOVO=CODITEM Then 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

          Moveto "FormulaC"
          Moveto [Codigo do Produto]
          Locate CODNOVO
          If RetVal
             Then Del
          EndIf        

          GetRecord "\\Sistemas\\Estoque\\Itens" CODNOVO To ITEM_F
          If not RetVal
             Then 
                  Mensagem("Item "+CODNOVO+" n„o cadastrado, Formula n„o criada!")
                  Loop
          endif       
          End
          Down
          CopyFromArray REG_ITEM_FORMULA
          [Codigo do Produto   ]=CODNOVO
          [Lookup_Produto      ]=CODNOVO
          unLockrecord
          
          For wi From 1 To DynArraySize(Array_Materiais)
            
            CODNOVOS=SubStr(Array_Materiais[wi],1,10)
            GetRecord "\\Sistemas\\Estoque\\Itens" CODNOVOS To ITEM_MP
            If not RetVal
               Then Mensagem("Item "+CODNOVOS+" n„o cadastrado [CGS 1/2] !// //Item da Formula "+CODNOVO+" n„o adicionado !")
                    Loop
            endif   

            switch
              case ITEM_MP["Tipo do Item"        ]<>"D"                            and
                   ITEM_MP["Codigo da Grade"     ] =ITEM_F["Codigo da Grade"     ] and
                   ITEM_MP["Codigo da Cor_Tecido"]<>""                             :

                tm2=tm
                Switch 
                  Case SYS_CLIENTE_CONFEC="0185" Or
                       SYS_CLIENTE_CONFEC="0195" Or
                       SYS_CLIENTE_CONFEC="0196":

                       CODNOVOS=SubStr(CODNOVOS,1,7)+Cor+tm2
                       
                  Case SYS_CODIGO_CLIENTE="0003" Or
                       SYS_CLIENTE_CONFEC="0222":

                       CODNOVOS=SubStr(CODNOVOS,1,6)+Cor+tm2
                       
                  Case SYS_CLIENTE_CONFEC="0200" Or
                       SYS_CLIENTE_CONFEC="0204":

                       CODNOVOS=SubStr(CODNOVOS,1,8)+tm2
                       
                EndSwitch

              case ITEM_MP["Tipo do Item"        ]<>"D"                            and
                   ITEM_MP["Codigo da Grade"     ] =ITEM_F["Codigo da Grade"     ] and
                   ITEM_MP["Codigo da Cor_Tecido"] =""                             :

                tm2=tm
                if len(tm2)=1 then CODNOVOS=SubStr(CODNOVOS,1,9)+tm2 endif
                if len(tm2)=2 then CODNOVOS=SubStr(CODNOVOS,1,8)+tm2 endif

              case ITEM_MP["Tipo do Item"        ]<>"D"                            and
                   ITEM_MP["Codigo da Grade"     ] =""                             and
                   ITEM_MP["Codigo da Cor_Tecido"]<>""                             :

                ItemRaiz=CODNOVOS
                Switch 
                  Case (SYS_CLIENTE_CONFEC="0185" Or
                        SYS_CLIENTE_CONFEC="0195" Or
                        SYS_CLIENTE_CONFEC="0196") : 
                        ItemRaiz=SubStr(CODNOVOS,1,7)+".."
               
                  Case (SYS_CODIGO_CLIENTE="0003") : 
                        ItemRaiz=SubStr(CODNOVOS,1,6)+".."
               
                  Case (SYS_CLIENTE_CONFEC="0222") : 
                        ItemRaiz=SubStr(CODNOVOS,1,6)+".."
               
                  Case (SYS_CLIENTE_CONFEC="0200") : 
                        ItemRaiz=SubStr(CODNOVOS,1,8)+".."
               
                  Case (SYS_CLIENTE_CONFEC="0204") : 
                        ItemRaiz=SubStr(CODNOVOS,1,8)+".."
               
                  Case (SYS_CLIENTE_CONFEC="0079") : 
                        ItemRaiz=SubStr(CODNOVOS,1,6)+".."
               
                EndSwitch
  
                Moveto "\\Sistemas\\Estoque\\Itens"
                Moveto [Codigo do Item]
                Locate Pattern ItemRaiz
                If RetVal
                   Then While True

                          if ITEM_MP["Codigo da Grade"] =""                              and
                             [Inativo                 ]<>"S"                             and
                             [Codigo da Grade         ] =""                              and
                             [DTamanho                ] =""                              and 
                             [Tipo do Item            ] =ITEM_MP["Tipo do Item"        ] and 
                             [Codigo da Cor_Tecido    ] = ITEM_F["Codigo da Cor_Tecido"]     
                             then  
                                  CODNOVOS = [Codigo do Item]
                                  QuitLoop
                          endif        
                   
                          Skip
                          If EOT() Then QuitLoop EndIf

                          Locate Next Pattern ItemRaiz
                          If Not RetVal
                             Then QuitLoop
                          EndIf
                        EndWhile
                EndIf

            endswitch

            GetRecord "\\Sistemas\\Estoque\\Itens" CODNOVOS To ITEM_MAT
            If not RetVal
               Then 
                    Mensagem("Item "+CODNOVOS+" n„o cadastrado [CGS 2/2] !// //Item da Formula "+CODNOVO+" n„o adicionado !")
                    Loop
            endif        
            Moveto "FormulaI"
            Moveto [Codigo do Produto]
            Locate CODNOVO,"","",wi
            If Not RetVal
               Then End
                    Down
                    [Codigo do Produto    ]=CODNOVO
                    [Sequencia            ]=wi
                    [Codigo do Material   ]=CODNOVOS
                    [Lookup_Material      ]=CODNOVOS

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

                    [Item_Baixa_Automatica]=SubStr(Array_Materiais[wi],41,01)
                    [Quantidade           ]=NumVal(SubStr(Array_Materiais[wi],12,13))
                    [Valor Unitario       ]=NumVal(SubStr(Array_Materiais[wi],26,13))
                    unLockrecord

                    If SYS_CODIGO_CLIENTE="0079" and ITEM_MP["Tipo do Item"]="S"
                      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
  EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina para geracao das grades/cores                                        *
;*******************************************************************************
Proc Formula_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[]
ib=0
Moveto "FormulaI" 
Scan
  ib=ib+1
  Array_Materiais[ib]=[Codigo do Material]+"|"+AlinhM(Strval([Quantidade]),13)+"|"+AlinhM(Strval([Valor Unitario]),13)+
                      "|"+Format("W1",[Tipo do Item])+[Item_Baixa_Automatica]
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 Formula_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":  
                         Formula_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<>"":
                       Formula_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 Formula_Cria_Grade(Cor)
Private CODNOVO,wi,i,ITEM_F

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

          CODNOVO=CODITEM
          CODNOVO=SubStr(CODNOVO,1,(10-Len(Cor+Tm)))+Cor+tm
          If CODNOVO=CODITEM Then 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

          Moveto "FormulaC"
          Moveto [Codigo do Produto]
          Locate CODNOVO
          If RetVal
             Then Del
          EndIf

          GetRecord "\\Sistemas\\Estoque\\Itens" CODNOVO To ITEM_F
          If not RetVal
             Then 
                  Mensagem("Item "+CODNOVO+" n„o cadastrado, Formula n„o criada!")
                  Loop
          endif       
          End
          Down
          [Codigo do Produto   ]=CODNOVO
          [Lookup_Produto      ]=CODNOVO
          [Codigo Cor_Tecido   ]=""
          [Tamanho             ]=""
          [Baixa_Automatica    ]=REG_ITEM_FORMULA["Baixa_Automatica"]
          [Quantidade Produzida]=1
          unLockrecord
          
          CODNOVOS=MudaCodigoPara(CODNOVO,"S")
          GetRecord "\\Sistemas\\Estoque\\Itens" CODNOVOS To ITEM_F
          If not RetVal
             Then 
                  Mensagem("Item "+CODNOVOS+" n„o cadastrado [CG] !// //Item da Formula "+CODNOVO+" n„o adicionado !")
                  Loop
          endif       

          Moveto "FormulaI"
          End
          Down
          [Codigo do Produto    ]=CODNOVO
          [Sequencia            ]=1
          [Codigo do Material   ]=CODNOVOS
          [Lookup_Material      ]=CODNOVOS

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

          [Item_Baixa_Automatica]="S"
          [Quantidade           ]=1
          unLockrecord
          
          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 para geracao das grades/cores                                        *
;*******************************************************************************
Proc Formula_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"
CopyToArray REG_ITEM_FORMULA
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 Formula_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" :
                         Formula_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<>"":
                       Formula_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 de Troca de Referencia                                               *
;*******************************************************************************
Proc Formula_Muda(Disparo,Campo,Evento,Elemento)
Private Cod_item_Ant
TECLA=""
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="CodProduto"
        INICIO_DIALOG=False
EndIf
If Disparo="OPEN"  Then AoCriarShowDialog() 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="TG_NOMITEM"        : Campo="CodProduto"
                  Case Campo="TG_TPI"            : Campo="CodProduto"
                  Case Campo="TG_NOMTPITEM"      : Campo="CodProduto"
                  Case Campo="TG_REF"            : Campo="CodProduto"
                  Case Campo="YES" Or Campo="NO" : Campo="CodProduto"
                EndSwitch
                TEMP=False
          Case Evento["KeyCode"] = -59 :  
                If Campo="CodProduto" 
                   Then Moveto "FormulaI"
                   
                        Cod_item_Ant = [Lookup_Material]
                        
                        Dynarray WinArray5[]
                        Window Handle Dialog to JANELA
                        Window GetAttributes JANELA To WinArray5
                        WinArray5["FLOATING"]=False
                        Window SetAttributes JANELA From WinArray5
      
                        If Campo="CodProduto" Then Moveto [Lookup_Material] EndIf
                        ConsultaF1()
                        
                        If Campo="CodProduto"
                           Then COD1   =[Lookup_Material  ]
                                GetRecord "\\Sistemas\\Estoque\\Itens" COD1 To REG_ITEM
                                If RetVal
                                   Then VSDGNOMITEM    = REG_ITEM["Descricao do Item"]
                                        VSDGTPI        = "           "+REG_ITEM["Tipo do Item"]+" "+REG_ITEM["Descricao Tipo do Item"]
                                        VSDGREF        = "Referˆncia "+REG_ITEM["Referencia"]     
                                EndIf
                        EndIf
                         
                        [Lookup_Material] = Cod_item_Ant
                        RefreshDialog
                        
                        Window Select JANELA
                        WinArray5["FLOATING"]=True
                        Window SetAttributes JANELA From WinArray5
      
                        echo Normal
                        echo off
      
                        Moveto "FormulaC"
                        RefreshDialog
                EndIf             
           Case Evento["KeyCode"] = 13:
                If Checa_TAG()
                   Then Switch
                          Case Campo="CodProduto" :
                               COD1=AlinhM(ControlValue("CodProduto"),10)
                               If Not IsBlank(COD1)
                                  Then GetRecord "\\Sistemas\\Estoque\\Itens" COD1 To REG_ITEM
                                       If RetVal
                                          Then VSDGNOMITEM    = REG_ITEM["Descricao do Item"]
                                               VSDGTPI        = "           "+REG_ITEM["Tipo do Item"]+" "+REG_ITEM["Descricao Tipo do Item"]
                                               VSDGREF        = "Referˆncia "+REG_ITEM["Referencia"]
                                               Campo="YES"
                                          Else Mensagem("Item "+COD1+" n„o localizado no cadastro de itens!")     
                                       EndIf
                                 EndIf
                          Case Campo="TG_NOMITEM"        : Campo="CodProduto"
                          Case Campo="TG_TPI"            : Campo="CodProduto"
                          Case Campo="TG_NOMTPITEM"      : Campo="CodProduto"
                          Case Campo="TG_REF"            : Campo="CodProduto"
                        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 Formula_Nova()
Private campoant,itemok

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

COD1           = ""
VSDGNOMITEM    = ""
VSDGTPI        = ""
VSDGREF        = "Referˆncia "

Echo Normal
Echo Off
                                  
Campoant=Field()
While True

  INICIO_DIALOG=True
  ShowDialog "Nova F¢rmula" Proc "Formula_Muda"
   Trigger "OPEN","ARRIVE"
   Key "ENTER","ESC","F1"
   @ 09,19 Height 09 Width 49  

    Label  @ 00,00 "Novo Item " for "CodProduto"
    Accept @ 01,01 Width 13 "A10" picture "#*#" Tag "CodProduto" to COD1
    Accept @ 01,12 Width 34 "A30" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM
                         
    Accept @ 02,01 Width 45 "A30" Picture "!"   Tag "TG_TPI" To VSDGTPI
    Accept @ 03,01 Width 45 "A30" Picture "#*#" Tag "TG_REF" To VSDGREF
                  
    Pushbutton @ 05,12 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 05,26 width 11 "~C~ancela" CANCEL                     Tag "NO"  To BottonValue

  EndDialog

  If Not RetVal
     Then QuitLoop
  EndIf

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

  GetRecord "\\Sistemas\\Estoque\\Itens" COD1 To REG_ITEM
  If RetVal
     Then VSDGNOMITEM    = REG_ITEM["Descricao do Item"]
          VSDGTPI        = "           "+REG_ITEM["Tipo do Item"]+" "+REG_ITEM["Descricao Tipo do Item"]
          VSDGREF        = "Referˆncia "+REG_ITEM["Referencia"]
     Else Mensagem("Item "+COD1+" n„o localizado no cadastro de itens!")
          Loop
  EndIf
                           
  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 Formula_NOVAREF()
          QuitLoop
  EndIf
EndWhile

Moveto Field campoant
EndProc

;*******************************************************************************
;* Nova Referencia                                                             *
;*******************************************************************************
Proc Formula_NOVAREF()
Private codok,CODIGOIT

CODIGOIT = [Codigo do Produto]

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()
Carrega_Tabelas()

Moveto [Codigo do Produto]
Locate CODIGOIT
PickForm "1"
                  
Mensagem("F¢rmula Copiada !")
EndProc

;*******************************************************************************
;* Calculo Custo                                                               *
;*******************************************************************************
Proc Formula_CalcularCusto(tipo)
private CFP, CUSTO

;;;;;;;;; **** Sempre deixar os dois casos com a mesma regra !!!

CUSTO=0
CFP  =0

switch
  ;-----------------------------------------------------------------------------
  case tipo="Scan"  :       ; quando estamos no form
  
    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
  
  ;-----------------------------------------------------------------------------
  case tipo="While" :    ; quando estamos fora do form via sele‡Æo de registros

    Moveto "FormulaI"
    moveto [Codigo do Produto]
    locate [FormulaC->Codigo do Produto]
    if retval
       then while [Codigo do Produto]=[FormulaC->Codigo do Produto]
              if Not IsBlank([Codigo do Material])
                 then
                      Switch
                        Case SYS_CODIGO_CLIENTE="0102" and  [Codigo do Material]="0000001437":
                          CFP=[Quantidade]
                             
                        otherwise:
                          If [Quantidade]>0
                             Then CUSTO=CUSTO+([Quantidade]*[Valor Unitario])
                             Else CUSTO=CUSTO+[Valor Unitario]
                          EndIf
                        
                      EndSwitch
              endif
              skip
              if eot() then quitloop endif
            endwhile
    endif           
  
endswitch

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

;*******************************************************************************
;  Rotina pra Checar Ficha de Estoque                                          *
;*******************************************************************************
Proc Formula_Checa_Custo()

If Not IsBlank(VSD_I_Codigo_Item) And TipoItem_ControlaEstoque([Tipo do Item])

   Then 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]
                        If VSD_EMPRESA_CUSTO = True
                           Then Return True
                        EndIf   
                   Else Return False
                EndIf
           Else Return False
        EndIf
   Else Return False     
EndIf                       
Moveto "FormulaI"          

EndProc  ; Formula_Checa_Custo()

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Formula_Checa_Empresa_Custo()

VSD_EMPRESA_CUSTO = True
VSD_COD_EMPRESA   = [P_Form->Codigo_Empresa]
VSD_ULTIMO_CUSTO  = [P_Form->Ultimo_Custo]
If Not IsBlank(VSD_COD_EMPRESA) And VSD_ULTIMO_CUSTO = "S"
   Then VSDGMES     = AlinhM(StrVal(Month(Today())),2)
        VSDGANO     = AlinhM(StrVal(Year(Today())),4)
        VSDGEMPRESA = VSD_COD_EMPRESA
        If Formula_Checa_Custo()
           Then VSD_I_Preco_Unitario = [Valor Unitario]
                Return True
           Else Moveto "FormulaI"
                Return False
        EndIf 
   Else Return False       
EndIf

EndProc   ;Formula_Checa_Empresa_Custo()

;*******************************************************************************
;* Atualiza Custo                                                              *
;*******************************************************************************
Proc Formula_ATUALIZA_CUSTO()
Private REG_ITEM

Moveto "FormulaI"
Scan For Not IsBlank([Codigo do Material]) And TipoItem_ControlaEstoque([Tipo do Item])

  GetRecord "\\Sistemas\\Estoque\\Itens" [FormulaI->Codigo do Material] To REG_ITEM
  If RetVal
     Then If REG_ITEM["Inativo"]="S"
             Then Loop
          EndIf    
  EndIf

  if not Formula_PegarUltimoCusto()
     then return false
  endif   

  Moveto "FormulaI"
EndScan

Formula_CalcularCusto("Scan")

Return True
EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Formula_PegarUltimoCusto()
private regsdestq

getrecord "\\Sistemas\\Estoque\\SdEstq" VSDGEMPRESA,[FormulaI->Codigo do Material],VSDGANO, VSDGMES to regsdestq
If RetVal
   Then If regsdestq["Preco de Custo"]>0
           Then 
                [Valor Unitario]=regsdestq["Preco de Custo"]
           Else 
                If TIT_CUSTO="" Then TIT_CUSTO="1" EndIf
                
                Formula_Linha_Erro()

                Print File ARQ_ERRO "\""+"2-4"+ Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[FormulaI->Codigo do Material])+"| "+
                                                Format("W30,AL",[FormulaI->Descricao do Item])+"\""+"\n"

                If Not MSG_ERRO
                   Then 
                        MSG_ERRO = True
                        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+"Esta mensagem sem custo informado na f¢rmula nÆo ser  mais exibida,"+"//"  
                        MSG=MSG+"pois um relat¢rio ser  impresso no final de todo o processo!"+"//"
                        MSG=MSG+"Deseja continuar ?"
                        ConfGeral(MSG)
                        If OK="N"
                           Then Return False
                        EndIf
                EndIf     
        EndIf
   Else 
        If TIT_FICHA="" Then TIT_FICHA="1" EndIf

        Formula_Linha_Erro()

        Print File ARQ_ERRO "\""+"1-4"+Format("W08,AL",VSDGEMPRESA)+"| "+Format("W11,AL",[FormulaI->Codigo do Material])+"| "+
                                       Format("W30,AL",[FormulaI->Descricao do Item])+"\""+"\n"
        If Not MSG_ERRO
           Then 
                MSG_ERRO = True
                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+"Esta mensagem informando que determinado item esta sem ficha de estoque,"+"//"  
                MSG=MSG+"n„o ser  exibida novamente, pois um relat¢rio ser  impresso no final de"+"//"
                MSG=MSG+"todo o processo!"+"//"
                MSG=MSG+"Deseja continuar ?"
                ConfGeral(MSG)
                If OK="N"
                   Then Return False
                EndIf
        EndIf         
EndIf

return True
endproc

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

Switch
  Case (SYS_CODIGO_CLIENTE="0185"   Or SYS_CODIGO_CLIENTE="0227"   Or SYS_CODIGO_CLIENTE="0266") And 
       [FormulaC->Tipo do Item]="D" And REG_BUSCA_LOOKUP["Codigo da Grade"]<>"" :
       Return True
  
  ;Liberado o direito de uso em 10.10.2019
  ;Case SYS_CLIENTE_CONFEC<>"" And 
  ;     SYS_CODIGO_CLIENTE<>"0227" And
  ;     SYS_CODIGO_CLIENTE<>"0185" And  
  ;     SYS_CODIGO_CLIENTE<>"0266" And
  ;     SYS_CODIGO_CLIENTE<>"0428" 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 End Down
               [Codigo da Empresa     ] = VSDGEMPRESA
               [Codigo do Item        ] = [FormulaC->Codigo do Produto]
               [Ano Referencia        ] = VSDGANO
               [Mes Referencia        ] = VSDGMES
               [Preco de Custo        ] = [FormulaC->Custo Unitario]
               [Data do Preco de Custo] = Today()
               UnLockRecord
       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 Formula_SD_SelecaoFicha(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA    =""

If Disparo="OPEN"  
   Then AoCriarShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9    : Temp=False
     Case Evento["KeyCode"] = -59  : Dialog_F1()
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_MESANO"        : Campo="TG_EMPRESA"
            Case Campo="TG_TIPOEST"       : Campo="TG_MESANO"
            Case Campo="TG_FAMI"          : Campo="TG_TIPOEST"
            Case Campo="TG_GRP"           : Campo="TG_FAMI"
            Case Campo="TG_MARCA"         : Campo="TG_GRP"
            Case Campo="TG_DEPART"        : Campo="TG_MARCA"
            Case Campo="TG_COR_TECIDO"    : Campo="TG_DEPART"
            Case Campo="TG_REFERENCIA"    : Campo="TG_COR_TECIDO"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :
                         VSDGMES=SubStr(VSDGMESANO,1,2)
                         VSDGANO=SubStr(VSDGMESANO,4,4)
                         If NumVal(VSDGMES) > 12 Or NumVal(VSDGMES) = 0
                            Then MENSAGEM("Mˆs Inv lido!")
                            Else Campo = "TG_TIPOEST"
                         EndIf
                    Case Campo="TG_TIPOEST"     : Campo = "TG_FAMI"
                    Case Campo="TG_FAMI"        : Campo = "TG_GRP"
                    Case Campo="TG_GRP"         : Campo = "TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo = "TG_DEPART"
                    Case Campo="TG_DEPART"      : Campo = "TG_COR_TECIDO"
                    Case Campo="TG_COR_TECIDO"  : Campo = "TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA"  : Campo = "YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina empresa, ficha de estoque e criterio de itens                        *
;*******************************************************************************
Proc Formula_SelecaoFicha(Tipo)
private NR, Titulo

Do_It!
ClearAll

Echo Normal
Echo Off

switch
  case Tipo="PegarUltimoCusto"      : Titulo="Atualizar as f¢rmulas com custo da ficha de estoque"

  case Tipo="AtualizarFichaEstoque" : Titulo="Atualizar ficha estoque com custo das f¢rmulas"

endswitch

While True
                                   
  ShowDialog Titulo Proc "Formula_SD_SelecaoFicha"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
    @ 01,00 Height 17 Width 72

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

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

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

    Label  @ 06,00 "Familia"  For "TG_FAMI"
    Accept @ 07,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 07,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 08,00 "Grupo"  For "TG_GRP"
    Accept @ 09,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 09,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 10,00 "Marca"  For "TG_MARCA"
    Accept @ 11,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 11,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 06,35 "Departamento"  For "TG_DEPART"
    Accept @ 07,37 Width 06 "A3"  Picture "#*#" Tag "TG_DEPART"    To VSDGDEPART
    Accept @ 07,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMDEPART" To VSDGNOMDEPART

    Label  @ 08,35 "Cor do Tecido"  For "TG_COR_TECIDO"
    Accept @ 09,36 Width 07 "A4"  Picture "#*#" Tag "TG_COR_TECIDO"    To VSDGCORTECIDO
    Accept @ 09,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMCOR_TECIDO" To VSDGNOMCORTECIDO

    Label  @ 10,35 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 11,36 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA" To VSDGREFERENCIA

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

  EndDialog

  If Not RetVal
     Then Result=False
          quitloop
  EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa inv lida !")
          Loop
  EndIf

  Aguarde("Selecionando registros")
  switch
    ;---------------------------------------------------------------------------
    case Tipo="PegarUltimoCusto" : 
      {Ask} TypeIn "\\sistemas\\estoque\\itens" Enter 
      Moveto [Codigo do Item        ] typein "_citem"
      Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
      Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
      Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
      Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
      Moveto [Codigo do Departamento] TypeIn "~VSDGDEPART.."
      Moveto [Codigo da Cor_Tecido  ] TypeIn "~VSDGCORTECIDO.."   
      Ask_Estoque("Tipo do Item","Opcao")
      {Ask} {FormulaC}
      Moveto [Codigo do Produto     ] check typein "_citem, not blank"
      moveto [Tipo do Item          ]       typein "not D"
      Do_It!
      ClearAll
      
      If IsEmpty("Answer")
         Then MENSAGEM("N„o Existem Registros a Processar")
              Loop
      EndIf


      limparodape(0)
      ExibeRodape(1,"Atualizando f¢rmulas com £ltimo custo !")
      
      NR = NRecords("Answer")
      
      View "\\Sistemas\\Estoque\\Sdestq"
      View "FormulaI"
      View "FormulaC"
      Coedit "Answer"
      Scan 
        Barra(NR, RecNo())
        Aguarde("Aguarde, Processando "+BARRA_STRING)
      
        Moveto "FormulaC"
        moveto [Codigo do Produto]
        locate [Answer->Codigo do Produto]
        if retval
           then
                Moveto "FormulaI"
                moveto [Codigo do Produto]
                locate [FormulaC->Codigo do Produto]
                if retval
                   then while [Codigo do Produto]=[FormulaC->Codigo do Produto]
                          If Not Formula_PegarUltimoCusto()
                             Then QuitLoop
                          EndIf
                          skip
                          if eot() then quitloop endif
                        endwhile
                        Formula_CalcularCusto("While")
                endif   
        endif
      
        Moveto "Answer"
      EndScan
      Do_It!
      ClearAll
      
    ;---------------------------------------------------------------------------
    case Tipo="AtualizarFichaEstoque" : 
      {Ask} TypeIn "\\sistemas\\estoque\\itens" Enter 
      Moveto [Codigo do Item        ] typein "_citem"
      Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
      Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
      Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
      Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
      Moveto [Codigo do Departamento] TypeIn "~VSDGDEPART.."
      Moveto [Codigo da Cor_Tecido  ] TypeIn "~VSDGCORTECIDO.."   
      Ask_Estoque("Tipo do Item","Opcao")
      
      {Ask} {FormulaC} 
      Moveto [Codigo do Produto     ] check typein "_citem, not blank"
      moveto [Tipo do Item          ]       typein "not D"
      moveto [Custo Unitario        ]       typein ">0"
      Do_It!
      ClearAll
      
      If IsEmpty("Answer")
         Then MENSAGEM("N„o Existem Registros a Processar")
              Loop
      EndIf


      limparodape(0)
      ExibeRodape(1,"Atualizando ficha de estoque com custo das f¢rmulas !")
      
      NR = NRecords("Answer")
      
      View "\\Sistemas\\Estoque\\Sdestq"
      View "FormulaC"
      Coedit "Answer"
      Scan 
        Barra(NR, RecNo())
        Aguarde("Aguarde, Processando "+BARRA_STRING)
      
        Moveto "FormulaC"
        moveto [Codigo do Produto]
        locate [Answer->Codigo do Produto]
        if retval
           then
                If Not Formula_ATUALIZA_Ficha()
                   Then QuitLoop
                EndIf   
        endif
      
        Moveto "Answer"
      EndScan
      Do_It!
      ClearAll

  endswitch
  Mensagem("Fim do processo !")

  Formula_Imprime_Erro()

  quitloop
EndWhile
ClearAll

limparodape(0)
Carrega_Tabelas()

Moveto "FormulaC"
If OPCAO_FORM="F"
   Then PickForm "F"
   Else PickForm "1"
EndIf

EndProc

;===============================================================================

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Formula_SD_ItemFicha(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA    =""

If Disparo="OPEN"  
   Then AoCriarShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9    : Temp=False
     Case Evento["KeyCode"] = -59  : 
       ;Dialog_F1()
     
                 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=Reg_ConsultaF1["Codigo da Empresa"    ]
                                 VSDGNOMEMP =Reg_ConsultaF1["Nome Fantasia Empresa"]
                         EndIf
                 EndIf

                 Window Select JANELA
                 WinArray5["FLOATING"]=True
                 Window SetAttributes JANELA From WinArray5
                 
                 Echo Normal
                 Echo off
     
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_MESANO"        : Campo="TG_EMPRESA"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :
                         VSDGMES=SubStr(VSDGMESANO,1,2)
                         VSDGANO=SubStr(VSDGMESANO,4,4)
                         If NumVal(VSDGMES) > 12 Or NumVal(VSDGMES) = 0
                            Then MENSAGEM("Mˆs Inv lido!")
                            Else Campo = "YES"
                         EndIf
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Selecionar empresa e ficha de estoque                                *
;*******************************************************************************
Proc Formula_ItemFicha(Tipo, Item)
private NR, Titulo, ntabela, ncampo, Item, regitens

getrecord "\\sistemas\\estoque\\itens" Item to regitens
if not retval
   then Mensagem("Item desta f¢rmula nÆo existe no cadastro de itens !// //Verificar !")
        return
endif   

ntabela=table()
ncampo =field()

Echo Normal
Echo Off

switch
  case Tipo="PegarUltimoCusto"      : Titulo="Atualizar esta f¢rmula com custo da ficha de estoque"

  case Tipo="AtualizarFichaEstoque" : Titulo="Atualizar ficha estoque com custo desta f¢rmula"

endswitch

While True
                                   
  ShowDialog Titulo Proc "Formula_SD_ItemFicha"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB"
    @ 01,00 Height 09 Width 72

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

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

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

  EndDialog

  If Not RetVal
     Then 
          quitloop
  EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa inv lida !")
          Loop
  EndIf

  Aguarde("Processando")
  
  switch
    ;---------------------------------------------------------------------------
    case Tipo="PegarUltimoCusto"      :  Formula_ATUALIZA_CUSTO()

    ;---------------------------------------------------------------------------
    case Tipo="AtualizarFichaEstoque" :  Formula_ATUALIZA_Ficha()

  endswitch
  Fastmsg("Processo concluido !")

  If TEVE_ERRO
     then
          Moveto "FormulaC"
          Do_It! 
          Formkey
          
          Formula_Imprime_Erro()

          Moveto "FormulaC"
          CoeditKey
          Formkey
          
  endif     

  quitloop
EndWhile

limparodape(0)

moveto ntabela
moveto field ncampo

EndProc

;===============================================================================

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Formula_SD_SelecaoTabelaPreco(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA    =""

If Disparo="OPEN"  
   Then AoCriarShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9    : Temp=False
     Case Evento["KeyCode"] = -59  : Dialog_F1()
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_TABELA"        : Campo="NO"
            Case Campo="TG_TABPRECO"      : Campo="TG_TABELA"
            Case Campo="TG_TIPOEST"       : Campo="TG_TABPRECO"
            Case Campo="TG_FAMI"          : Campo="TG_TIPOEST"
            Case Campo="TG_GRP"           : Campo="TG_FAMI"
            Case Campo="TG_MARCA"         : Campo="TG_GRP"
            Case Campo="TG_DEPART"        : Campo="TG_MARCA"
            Case Campo="TG_COR_TECIDO"    : Campo="TG_DEPART"
            Case Campo="TG_REFERENCIA"    : Campo="TG_COR_TECIDO"
            Case Campo="YES" Or Campo="NO" : Campo="TG_TABELA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_TABELA"      : Campo = "TG_TABPRECO"
                    Case Campo="TG_TABPRECO"    : Campo = "TG_TIPOEST"
                    Case Campo="TG_TIPOEST"     : Campo = "TG_FAMI"
                    Case Campo="TG_FAMI"        : Campo = "TG_GRP"
                    Case Campo="TG_GRP"         : Campo = "TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo = "TG_DEPART"
                    Case Campo="TG_DEPART"      : Campo = "TG_COR_TECIDO"
                    Case Campo="TG_COR_TECIDO"  : Campo = "TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA"  : Campo = "YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
  Case Campo="TG_TABPRECO":
       MensagemRadioButtons()
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina sleciona tabela de preco                                             *
;*******************************************************************************
Proc Formula_SelecaoTabelaPreco()
private NR

Do_It!
ClearAll

Echo Normal
Echo Off

While True

  ShowDialog "Atualizar tabela de pre‡o com pre‡o de venda das f¢rmulas" Proc "Formula_SD_SelecaoTabelaPreco"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC"
    @ 01,00 Height 17 Width 72

    Label  @ 00,00 "Tabela"  For "TG_TABELA"
    Accept @ 01,01 Width 08 "A5"  Picture "[&,#][#*#]" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 01,10 Width 24 "A20" Picture "!*!" Tag "TG_NOMNOMTAB" To VSDGNOMTAB              
    
    Label @ 02,00 "Op‡„o de Pre‡o Venda" For "TG_TABPRECO"
    RadioButtons @ 03,00 Height 1 Width 33
    "~C~alculado",
    "a ~P~raticar"
    Tag "TG_TABPRECO"
    To VSDGTABPRECO            
    
    Label  @ 04,00 "Tipo do Estoque"  For "TG_TIPOEST"
    Accept @ 05,04 Width 04 "A1"  Picture "!" Tag "TG_TIPOEST" To VSDGTIPOEST
    Accept @ 05,09 Width 25 "A30"  Picture "!*!" Tag "TG_DESCTIPOEST" To VSDGDESCTIPOEST

    Label  @ 06,00 "Familia"  For "TG_FAMI"
    Accept @ 07,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 07,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 08,00 "Grupo"  For "TG_GRP"
    Accept @ 09,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 09,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 10,00 "Marca"  For "TG_MARCA"
    Accept @ 11,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 11,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 06,35 "Departamento"  For "TG_DEPART"
    Accept @ 07,37 Width 06 "A3"  Picture "#*#" Tag "TG_DEPART"    To VSDGDEPART
    Accept @ 07,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMDEPART" To VSDGNOMDEPART

    Label  @ 08,35 "Cor do Tecido"  For "TG_COR_TECIDO"
    Accept @ 09,36 Width 07 "A4"  Picture "#*#" Tag "TG_COR_TECIDO"    To VSDGCORTECIDO
    Accept @ 09,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMCOR_TECIDO" To VSDGNOMCORTECIDO

    Label  @ 10,35 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 11,36 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA" To VSDGREFERENCIA

    Pushbutton @ 13,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 13,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  
  EndDialog
  If Not RetVal
     Then quitloop
  EndIf

  If IsBlank(VSDGTABELA)
     Then Mensagem("Tabela inv lida !")
          Loop
  EndIf

  Aguarde("Selecionando registros")

  {Ask} TypeIn "\\sistemas\\estoque\\itens" Enter 
  Moveto [Codigo do Item        ] typein "_citem"
  Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
  Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
  Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
  Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
  Moveto [Codigo do Departamento] TypeIn "~VSDGDEPART.."
  Moveto [Codigo da Cor_Tecido  ] TypeIn "~VSDGCORTECIDO.."   
  Moveto [Tipo do Item          ] Check Ask_Estoque("Tipo do Item","Opcao")
  
  {Ask} {FormulaC}         
  Moveto [Codigo do Produto     ] check typein "_citem, not blank"
  moveto [Tipo do Item          ]       typein "P or D or T"
  Do_It!
  ClearAll
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Registros a Processar")
          Loop
  EndIf


  limparodape(0)
  ExibeRodape(1,"Atualizando tabela de pre‡o !")
  
  NR = NRecords("Answer")
  
  View "\\Sistemas\\Estoque\\Itens"
  View "\\Sistemas\\Vendas\\Tbprite"
  View "FormulaC"
  Coedit "Answer"
  Scan 
    Barra(NR, RecNo())
    Aguarde("Aguarde, Processando "+BARRA_STRING)

    GetRecord "\\Sistemas\\Estoque\\Itens" [Answer->Codigo do Produto] To regitens
    If Not RetVal
      Then Loop
    EndIf      
  
    Moveto "FormulaC"
    moveto [Codigo do Produto]
    locate [Answer->Codigo do Produto]
    if retval
       then Formula_Tabela_Preco(VSDGTABPRECO)
    endif
  
    Moveto "Answer"
  EndScan
  Do_It!
  ClearAll
  
  Mensagem("Fim do processo !")

  Formula_Imprime_Erro()

  quitloop
EndWhile
ClearAll

limparodape(0)
Carrega_Tabelas()

Moveto "FormulaC"
If OPCAO_FORM="F"
   Then PickForm "F"
   Else PickForm "1"
EndIf

EndProc
      
;===============================================================================

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Formula_SD_ItemTabelaPreco(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA    =""

If Disparo="OPEN"  
   Then AoCriarShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9    : Temp=False
     Case Evento["KeyCode"] = -59  : Dialog_F1()
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_TABELA"        : Campo="NO"
            Case Campo="TG_TABPRECO"      : Campo="TG_TABELA"
            Case Campo="YES" Or Campo="NO" : Campo="TG_TABELA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_TABELA"      : Campo = "TG_TABPRECO"
                    Case Campo="TG_TABPRECO"    : Campo = "YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
  Case Campo="TG_TABPRECO":
       MensagemRadioButtons()
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina sleciona tabela de preco                                             *
;*******************************************************************************
Proc Formula_ItemTabelaPreco()
private NR, ncampo

Item=[FormulaC->Codigo do Produto]

getrecord "\\sistemas\\estoque\\itens" Item to regitens
if not retval
   then Mensagem("Item desta f¢rmula nÆo existe no cadastro de itens !// //Verificar !")
        return
   else if regitens["Tipo do Item"]<>"P" and
           regitens["Tipo do Item"]<>"D" and
           regitens["Tipo do Item"]<>"T" 
           then Mensagem("Tipo "+regitens["Descricao Tipo do Item"]+", inv lido para atualizar tabela de pre‡o !// //Verificar !")
                return
        endif
endif   

unlockrecord

ncampo=field()

Do_It!
ClearAll

Echo Normal
Echo Off

While True
                            
  ShowDialog "Atualizar tabela de pre‡o com pre‡o de venda desta f¢rmula" Proc "Formula_SD_ItemTabelaPreco"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC"
    @ 01,00 Height 09 Width 72

    Label  @ 00,00 "Tabela"  For "TG_TABELA"
    Accept @ 01,01 Width 08 "A5"  Picture "[&,#][#*#]" Tag "TG_TABELA" To VSDGTABELA
    Accept @ 01,10 Width 24 "A20" Picture "!*!" Tag "TG_NOMNOMTAB" To VSDGNOMTAB              
    
    Label @ 02,00 "Op‡„o de Pre‡o Venda" For "TG_TABPRECO"
    RadioButtons @ 03,01 Height 1 Width 33
    "~C~alculado",
    "a ~P~raticar"
    Tag "TG_TABPRECO"
    To VSDGTABPRECO            

    Pushbutton @ 05,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 05,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  
  EndDialog
  If Not RetVal
     Then quitloop
  EndIf

  If IsBlank(VSDGTABELA)
     Then Mensagem("Tabela inv lida !")
          Loop
  EndIf

  Aguarde("Selecionando registros")

  {Ask} TypeIn "\\sistemas\\estoque\\itens" Enter 
  Moveto [Codigo do Item        ] typein "_citem"
  
  {Ask} {FormulaC}         
  Moveto [Codigo do Produto     ] check typein "_citem, ~Item"
  Do_It!
  ClearAll
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Registros a Processar")
          Loop
  EndIf


  limparodape(0)
  ExibeRodape(1,"Atualizando tabela de pre‡o !")
  
  NR = NRecords("Answer")
  
  View "\\Sistemas\\Vendas\\Tbprite"
  View "FormulaC"
  Coedit "Answer"
  Scan 
    Barra(NR, RecNo())
    Aguarde("Aguarde, Processando "+BARRA_STRING)

    Moveto "FormulaC"
    moveto [Codigo do Produto]
    locate [Answer->Codigo do Produto]
    if retval
       then
            Formula_Tabela_Preco(VSDGTABPRECO)
    endif
  
    Moveto "Answer"
  EndScan
  Do_It!
  ClearAll
  
  Mensagem("Fim do processo !")
   
  quitloop
EndWhile
ClearAll

limparodape(0)
Carrega_Tabelas()

Moveto "FormulaC"
PickForm "1"

moveto [Codigo do Produto]
locate Item          

moveto Field ncampo
Islockrecord()

EndProc

      
;===============================================================================

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Formula_SD_SelecaoRecalcular(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA    =""

If Disparo="OPEN"  
   Then AoCriarShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9    : Temp=False
     Case Evento["KeyCode"] = -59  : Dialog_F1()
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_TIPOEST"       : Campo="NO"
            Case Campo="TG_FAMI"          : Campo="TG_TIPOEST"
            Case Campo="TG_GRP"           : Campo="TG_FAMI"
            Case Campo="TG_MARCA"         : Campo="TG_GRP"
            Case Campo="TG_DEPART"        : Campo="TG_MARCA"
            Case Campo="TG_COR_TECIDO"    : Campo="TG_DEPART"
            Case Campo="TG_REFERENCIA"    : Campo="TG_COR_TECIDO"
            Case Campo="YES" Or Campo="NO" : Campo="TG_TIPOEST"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_TIPOEST"     : Campo = "TG_FAMI"
                    Case Campo="TG_FAMI"        : Campo = "TG_GRP"
                    Case Campo="TG_GRP"         : Campo = "TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo = "TG_DEPART"
                    Case Campo="TG_DEPART"      : Campo = "TG_COR_TECIDO"
                    Case Campo="TG_COR_TECIDO"  : Campo = "TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA"  : Campo = "YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="":
       MSG_CAMPO=""
  Case Campo="TG_TABPRECO":
       MensagemRadioButtons()
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina sleciona                                                             *
;*******************************************************************************
Proc Formula_SelecaoRecalcular()
private NR

Do_It!
ClearAll

Echo Normal
Echo Off

While True

  ShowDialog "Recalcular custos das f¢rmulas" Proc "Formula_SD_SelecaoRecalcular"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC"
    @ 01,00 Height 13 Width 72

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

    Label  @ 02,00 "Familia"  For "TG_FAMI"
    Accept @ 03,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 03,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 04,00 "Grupo"  For "TG_GRP"
    Accept @ 05,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 05,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 06,00 "Marca"  For "TG_MARCA"
    Accept @ 07,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 07,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 02,35 "Departamento"  For "TG_DEPART"
    Accept @ 03,37 Width 06 "A3"  Picture "#*#" Tag "TG_DEPART"    To VSDGDEPART
    Accept @ 03,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMDEPART" To VSDGNOMDEPART

    Label  @ 04,35 "Cor do Tecido"  For "TG_COR_TECIDO"
    Accept @ 05,36 Width 07 "A4"  Picture "#*#" Tag "TG_COR_TECIDO"    To VSDGCORTECIDO
    Accept @ 05,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMCOR_TECIDO" To VSDGNOMCORTECIDO

    Label  @ 06,35 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 07,36 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA" To VSDGREFERENCIA

    Pushbutton @ 09,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  
  EndDialog
  If Not RetVal
     Then quitloop
  EndIf

  Aguarde("Selecionando registros")

  {Ask} TypeIn "\\sistemas\\estoque\\itens" Enter 
  Moveto [Codigo do Item        ] typein "_citem"
  Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
  Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
  Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
  Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
  Moveto [Codigo do Departamento] TypeIn "~VSDGDEPART.."
  Moveto [Codigo da Cor_Tecido  ] TypeIn "~VSDGCORTECIDO.."   
  Moveto [Tipo do Item          ] Check Ask_Estoque("Tipo do Item","Opcao")
  
  {Ask} {FormulaC}         
  Moveto [Codigo do Produto     ] check typein "_citem, not blank"
  moveto [Tipo do Item          ]       typein "P or D or T"
  Do_It!
  ClearAll
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Registros a Processar")
          Loop
  EndIf


  limparodape(0)
  ExibeRodape(1,"Recalculando custos !")
  
  NR = NRecords("Answer")
  
  View "\\Sistemas\\Estoque\\Itens"
  View "FormulaI"
  View "FormulaC"
  Coedit "Answer"
  Scan 
    Barra(NR, RecNo())
    Aguarde("Aguarde, Processando "+BARRA_STRING)

    GetRecord "\\Sistemas\\Estoque\\Itens" [Answer->Codigo do Produto] To regitens
    If Not RetVal
      Then Loop
    EndIf      
  
    Moveto "FormulaC"
    moveto [Codigo do Produto]
    locate [Answer->Codigo do Produto]
    if retval
       then
            Formula_CalcularCusto("While")
    endif
  
    Moveto "Answer"
  EndScan
  Do_It!
  ClearAll
  
  Mensagem("Fim do processo !")

  Formula_Imprime_Erro()

  quitloop
EndWhile
ClearAll

limparodape(0)
Carrega_Tabelas()

Moveto "FormulaC"
If OPCAO_FORM="F"
   Then PickForm "F"
   Else PickForm "1"
EndIf

EndProc

;******************************************************************************
;* Monta Procedures                                                           *
;******************************************************************************
WriteLib "\\Sistemas\\Producao\\Bib_Prod" 
         Formula_Imprime_Erro, Formula_Linha_Erro, Formula_Tabela_Preco, Formula_Monta_Array_Grade,
         Formula_COR01, Formula_Cria_Grade_Tamanhos, Formula_Grade, Formula_Cria_Grade_Semi, Formula_Grade_Cor_Semi,
         Formula_Cria_Grade, Formula_Grade_Cor, Formula_CalcularCusto, Formula_Checa_Custo, Formula_Checa_Empresa_Custo,
         Formula_Nova, Formula_Muda, Formula_NOVAREF, 
         Formula_ATUALIZA_Ficha, Formula_ATUALIZA_CUSTO,

         Formula_SelecaoTabelaPreco, Formula_SD_SelecaoTabelaPreco,
         Formula_ItemTabelaPreco, Formula_SD_ItemTabelaPreco,

         Formula_PegarUltimoCusto, 
         Formula_SelecaoFicha, Formula_SD_SelecaoFicha, 
         Formula_ItemFicha, Formula_SD_ItemFicha,

         Formula_SelecaoRecalcular, Formula_SD_SelecaoRecalcular
