;** RE_0010G *******************************************************************
;*  Digitacao do Item de Grade do Modulo de Etiquetas do Etoque - RE_0010      *
;*******************************************************************************
;;Autor          : Vise Informatica (VISERP)
;Desenvolvido    : 14/05/2018 por Bruno Carvalho
;Ultima Alteracao: 24/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajsutes ao gravar o item, adicionado [Lookup_Item] 
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 11/04/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado parametro de controle RE0010G_UTILIZA_COR p/ permitir digitar referˆncia sem informar a cor
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0429# -> PegaCodigoRaiz()
;Ultima Alteracao: 02/07/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado [Producao Esgotada] da tabela "Iten_Com" p/ a tabela "Itens"
;Ultima Alteracao: 06/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado proc Array_Monta_Grade() p/ Array_Monta_Grade_RE0010()
;Ultima Alteracao: 06/05/2020 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Grade_RE0010() p/ Monta_Grade() *Particularidades 

;Script PLAY -> RE_0010

;*******************************************************************************
;* 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
        CHAVEF=0
EndIf

If Disparo="OPEN"
   Then TiraSombraShowDialog()
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Codigo_Cor_Tecido"  
             Then If Campo="I_Codigo_Cor_Tecido"  
                     Then Monta_Opcoes("Codigo da Cor_Tecido","")
                          Seleciona_Opcoes("Codigo da Cor_Tecido","")
                     Else 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_Item         ] EndIf
                          If Campo="I_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido] EndIf
                          
                          ConsultaF1()                   
          
                          Window Select JANELA
                          WinArray5["FLOATING"]=True
                          Window SetAttributes JANELA From WinArray5
                  EndIf
                 
                  echo Normal
                  echo off
                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_Referencia    =[Referencia       ]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_CST_Item      =[Tipo Tributacao  ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]

                          [Lookup_Item]=""
                          Campo="I_Codigo_Item"
                  EndIf
                  If Campo="I_Codigo_Cor_Tecido"
                     Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                          VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                          Campo="I_Codigo_Cor_Tecido"
                 EndIf
          EndIf
          Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
           Case Campo="I_Codigo_Item"          : CHAVEF=9
                                                 CancelDialog
           Case Campo="I_Descricao_Cor_Tecido" : Campo="I_Codigo_Cor_Tecido"
           Case SubStr(Campo,1,5)="I_Qtd"      : Campo=VoltaCampo(Campo)
           Case Campo="I_Flag"                 : Campo=VoltaCampo(Campo)
           Case Campo="I_Descricao_Item" Or Campo="I_Codigo_Cor_Tecido" Or Campo="I_Tamanho":
                Switch 
                  Case Campo="I_Descricao_Item"    : Campo="I_Codigo_Item"
                  Case Campo="I_Codigo_Cor_Tecido" : Campo="I_Codigo_Item"
                  OtherWise                        : Campo="I_Codigo_Item"
                                                     VSD_I_Codigo_Item   =""
                                                     VSD_I_Descricao_Item=""
                                                     VSD_I_Referencia    =""
                                                     VSD_I_UN_Item       =""
                                                     VSD_I_Tipo_Item     =""
                EndSwitch
          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 Mensagem("Item n„o cadastrado !")
                    Else If LOCALIZA_CODIGO = "LOC_CODBAR"
                            Then CODIGO_BARRA = VSD_I_Codigo_Item
                                 ORIGEM = "Codigo_Barras"
                            Else ORIGEM = ""
                         EndIf
                         AUX_REF = VSD_I_Codigo_Item
                         If Pega_Dados_Item(ORIGEM)
                            Then FAZ_PROCESSO=True
                                 Home
                                 Moveto [Referencia]
                                 Locate AUX_REF
                                 If RetVal
                                    Then ConfGeral("Referencia "+AUX_REF+" j  foi inserida anteriormente.//"+
                                                   "Deseja continuar a inserir essa referˆncia?")
                                         If OK="N"
                                            Then FAZ_PROCESSO=False 
                                         EndIf  
                                 EndIf
                                 End
                                 If FAZ_PROCESSO
                                    Then Monta_Opcoes("Codigo da Cor_Tecido","")
                                         Switch
                                           Case Not RE0010G_UTILIZA_COR : VSD_I_Preco_Unitario=BlankNum()
                                                                          Pega_Preco()                                   
                                                                          Campo=AvancaCampo("I_Qtd0")
                                           OtherWise                    : Campo="I_Codigo_Cor_Tecido"
                                         EndSwitch
                                    Else VSD_I_Descricao_Item=""
                                         VSD_I_Referencia    =""
                                         VSD_I_UN_Item       =""
                                         VSD_I_Tipo_Item     =""     
                                 EndIf
                            Else VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_Referencia    =""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf        
                 EndIf
            Case Campo="I_Descricao_Item" :
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 Campo="I_Codigo_Cor_Tecido"
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=AlinhM(ControlValue("I_Codigo_Cor_Tecido"),4)
                 If Checa_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                    Then MSG_REF="Referˆncia n„o Cadastrada !"
                         If Pega_Dados_Item("Cor_Tecido")
                             Then VSD_I_Preco_Unitario=BlankNum()
                                  Pega_Preco()                                   
                                  Campo=AvancaCampo("I_Qtd0")   
                             Else If MSG_REF <> "" 
                                     Then Mensagem(MSG_REF)
                                  EndIf   
                                  KeyPress "ESC"   
                          EndIf
                    Else Mensagem("Cor/Tecido n„o cadastrado para esta referˆncia !")
                         VSD_I_Codigo_Cor_Tecido   =""
                         VSD_I_Descricao_Cor_Tecido=""
                         KeyPress "ESC"    
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 Campo=AvancaCampo("I_Qtd0")
            Case SubStr(Campo,1,5)="I_Qtd" : Campo=AvancaCampo(Campo)
            Case Campo="I_Flag"            : 
                 Del
                 grdant="***"
                 Seq=0 
                 For jk From 1 To ArraySize(Array_TM)
                   Barra(ArraySize(Array_TM),jk)
                   Aguarde("Aguarde, inserindo itens "+BARRA_STRING)
                   TM=RTrim(SubStr(Array_TM[jk],4,2))
                   If TM="" 
                      Then Loop 
                   EndIf
                   Switch
                     Case jk=1 : Qtd=VSD_I_Qtd1   
                     Case jk=2 : Qtd=VSD_I_Qtd2   
                     Case jk=3 : Qtd=VSD_I_Qtd3   
                     Case jk=4 : Qtd=VSD_I_Qtd4   
                     Case jk=5 : Qtd=VSD_I_Qtd5   
                     Case jk=6 : Qtd=VSD_I_Qtd6   
                     Case jk=7 : Qtd=VSD_I_Qtd7
                     Case jk=8 : Qtd=VSD_I_Qtd8
                     Case jk=9 : Qtd=VSD_I_Qtd9
                     Case jk=10: Qtd=VSD_I_Qtd10
                     Case jk=11: Qtd=VSD_I_Qtd11
                     Case jk=12: Qtd=VSD_I_Qtd12
                   EndSwitch
                   
                   If Qtd<=0 
                      Then Loop
                   EndIf
                   
                   If Len(TM)=1
                      Then Item=SubStr(VSD_I_Codigo_Item,1,9)+TM
                      Else Item=SubStr(VSD_I_Codigo_Item,1,8)+TM
                   EndIf
                   
                   GetRecord "\\Sistemas\\Estoque\\Itens" Item To REG_ITEM
                   If Not RetVal
                      Then Mensagem("Item "+Item+" n„o localizado no cadastro de itens.")
                           Loop
                   EndIf
                   
                   End Down
                   [Lookup_Item       ] = Item
                   [Codigo do Item    ] = Item
                   ;[Descricao do Item ] = REG_ITEM["Descricao do Item"] 
                   ;[Referencia        ] = REG_ITEM["Referencia"] 
                   ;[Unidade Fiscal    ] = REG_ITEM["Unidade Fiscal"] 
                   ;[Codigo de Barras  ] = REG_ITEM["Codigo de Barras"] 
                   [Quantidade        ] = Qtd
                   [Preco Unitario    ] = VSD_I_Preco_Unitario        
                   UnLockRecord
                   
                   Re_0010_qtd = Re_0010_qtd + qtd 
                 EndFor
                 End Down
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "          
If Campo="I_Codigo_Item"        Or
   Campo="I_Codigo_Cor_Tecido"                      
   Then TECLA=TECLA+"F1=Tabelas  "  
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case SubStr(Campo,1,5)="I_Qtd" :
       MSGCAMPO="Quantidade ["+SubStr(Array_TM[NumVal( RTrim( SubStr(Campo,6,2) ) )],2,2)+"] "
  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_Codigo_Cor_Tecido"       : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"    : MSGCAMPO="Descri‡Æo da cor/tecido"

  Case Campo="I_Quantidade"              : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                 : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Flag"                    : MSGCAMPO="Pausa para conferir"
  OtherWise                              : MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
MontaRodapeSD(MSGCAMPO, TECLA)
Mouse Hide
RefreshDialog
Return TEMP
EndProc   ;  (Item_Dialog)

;*******************************************************************************
;* Rotina para Pegar o Pre‡o                                                   *
;*******************************************************************************
Proc Pega_Preco()                                  
                                  
If IsAssigned(VSDGTABELA) And VSDGTABELA<>""
   Then coditem=VSD_I_Codigo_Item
        GetRecord "\\Sistemas\\Estoque\\Itens" coditem To REG_ITEM         
        If Not IsBlank(REG_ITEM["Codigo da Grade"])
           Then CodItem=PegaCodigoRaiz(CodItem)
           Else If SYS_CODIGO_CLIENTE="0239" Or
                   SYS_CODIGO_CLIENTE="0388" Or
                   SYS_CODIGO_CLIENTE="0427" Or
                   SYS_CODIGO_CLIENTE="0171" Or
                   SYS_CODIGO_CLIENTE="0390" Or
                   SYS_CODIGO_CLIENTE="0396" Or
                   SYS_CODIGO_CLIENTE="0345" Or
                   SYS_CODIGO_CLIENTE="0419" Or
                   SYS_CODIGO_CLIENTE="0444" Or
                   SYS_CODIGO_CLIENTE="0429"
                   Then CodItem=PegaCodigoRaiz(CodItem)
                EndIf
        EndIf
        
        GetRecord "\\sistemas\\vendas\\Tbprite" VSDGTABELA, coditem To PRECO
        If RetVal
           Then VSD_I_Preco_Unitario = PRECO["Preco Unitario"]
           Else VSD_I_Preco_Unitario = BlankNum()
        EndIf

        If IsBlank(VSD_I_Preco_Unitario)
            Then Mensagem("Este Item esta sem pre‡o na tabela escolhida ! ")
        EndIf
EndIf       

EndProc ;Pega_Preco()

;*******************************************************************************
;* Rotina para AvancaCampo                                                     *
;*******************************************************************************
Proc AvancaCampo(Campo)    

VSD_I_Qtd1 =ControlValue("I_Qtd1")
VSD_I_Qtd2 =ControlValue("I_Qtd2")
VSD_I_Qtd3 =ControlValue("I_Qtd3")
VSD_I_Qtd4 =ControlValue("I_Qtd4")
VSD_I_Qtd5 =ControlValue("I_Qtd5")
VSD_I_Qtd6 =ControlValue("I_Qtd6")
VSD_I_Qtd7 =ControlValue("I_Qtd7")
VSD_I_Qtd8 =ControlValue("I_Qtd8")
VSD_I_Qtd9 =ControlValue("I_Qtd9")
VSD_I_Qtd10=ControlValue("I_Qtd10")
VSD_I_Qtd11=ControlValue("I_Qtd11")
VSD_I_Qtd12=ControlValue("I_Qtd12")


VSD_I_Quantidade=VSD_I_QTD1+VSD_I_QTD2+VSD_I_QTD3+VSD_I_QTD4+
                 VSD_I_QTD5+VSD_I_QTD6+VSD_I_QTD7+VSD_I_QTD8+
                 VSD_I_QTD9+VSD_I_QTD10+VSD_I_QTD11+VSD_I_QTD12
        
[Quantidade]=VSD_I_Quantidade

;If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
;   Then CalcularPrecoTotal_Item()
;EndIf

indice=NumVal(RTrim(SubStr(Campo,6,2)))
For i From indice To 12
  If (i+1)=13
     Then Campo="I_Flag"
          QuitLoop
     Else If (i+1) > NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i+1],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i+1)
                  QuitLoop
          EndIf

  EndIf
EndFor

Return Campo
EndProc

;*******************************************************************************
;* Rotina para VoltaCampo                                                      *
;*******************************************************************************
Proc VoltaCampo(Campo)
For i From 12 to 0 Step -1
  If i=0
     Then Campo="I_Codigo_Item"
          VSD_I_Codigo_Item   =""
          VSD_I_Descricao_Item=""
          VSD_I_Referencia    =""
          VSD_I_UN_Item       =""
          VSD_I_Tipo_Item     =""
          VSD_I_Codigo_Cor_Tecido   =""
          VSD_I_Descricao_Cor_Tecido=""
          QuitLoop
     Else If i < NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i)
                  QuitLoop
          EndIf
  EndIf
EndFor

If Campo="I_Qtd13" Then Campo="I_Custo_Unitario" EndIf

Return Campo
EndProc

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
MSGCAMPO=""

While True  
  Echo Normal
  Echo Off
  VSD_I_Tipo_Item             = ""
  VSD_I_Codigo_Item           = ""
  VSD_I_Descricao_Item        = ""
  VSD_I_Referencia            = ""
  VSD_I_Codigo_Cor_Tecido     = ""
  VSD_I_Descricao_Cor_Tecido  = ""
  VSD_I_Tamanho               = ""
  VSD_I_Qtd1                  = BlankNum()
  VSD_I_Qtd2                  = BlankNum()
  VSD_I_Qtd3                  = BlankNum()
  VSD_I_Qtd4                  = BlankNum()
  VSD_I_Qtd5                  = BlankNum()
  VSD_I_Qtd6                  = BlankNum()
  VSD_I_Qtd7                  = BlankNum()
  VSD_I_Qtd8                  = BlankNum()
  VSD_I_Qtd9                  = BlankNum()
  VSD_I_Qtd10                 = BlankNum()
  VSD_I_Qtd11                 = BlankNum()
  VSD_I_Qtd12                 = BlankNum()
  VSD_I_Flag                  = ""
  VSD_I_Preco_Unitario        = BlankNum()
  
  For i From 1 to 12
    Array_TM[i]="F"
  EndFor  
  If IsAssigned(VSDGTABELA) And Not IsBlank(VSDGTABELA)
     Then AUX=27          
     Else AUX=80
  EndIf

  Showdialog "Dados do Item" Proc "Item_Dialog"
     Trigger "OPEN","ARRIVE"
      Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F5","F6","ClearArea","HOME","END","PGDN","PGUP"
     @ 07,0 height 9 width 80

     Label  @ 00,00 "> Codigo Item" For "I_Codigo_Item"
     Accept @ 01,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
     Label  @ 00,17 "Descricao Item" For "I_Descricao_Item"
     Accept @ 01,17 Width 40 "A45" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
     Label  @ 00,57 "Referˆncia" For "I_Referencia"
     Accept @ 01,58 Width 19 "A17" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia

     Label  @ 02,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
     Accept @ 03,00 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
     Accept @ 03,06 Width 20 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido     
     Label  @ 02,AUX "Pr.Unitario" For "I_Preco_Unitario"
     Accept @ 03,AUX Width 12 "N" picture "#*#.[####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
 
     @ 04,12 ?? SubStr(Array_TM[01],2,2)
     @ 04,17 ?? SubStr(Array_TM[02],2,2)
     @ 04,22 ?? SubStr(Array_TM[03],2,2)
     @ 04,27 ?? SubStr(Array_TM[04],2,2)
     @ 04,32 ?? SubStr(Array_TM[05],2,2)
     @ 04,37 ?? SubStr(Array_TM[06],2,2)
     @ 04,42 ?? SubStr(Array_TM[07],2,2)
     @ 04,47 ?? SubStr(Array_TM[08],2,2)
     @ 04,52 ?? SubStr(Array_TM[09],2,2)
     @ 04,57 ?? SubStr(Array_TM[10],2,2)
     @ 04,62 ?? SubStr(Array_TM[11],2,2)
     @ 04,67 ?? SubStr(Array_TM[12],2,2)
  
     @ 05,00 ?? "Quantidade "
     Accept @ 05,11 Width 05 "N" Tag "I_Qtd1"  to VSD_I_Qtd1
     Accept @ 05,16 Width 05 "N" Tag "I_Qtd2"  to VSD_I_Qtd2
     Accept @ 05,21 Width 05 "N" Tag "I_Qtd3"  to VSD_I_Qtd3
     Accept @ 05,26 Width 05 "N" Tag "I_Qtd4"  to VSD_I_Qtd4
     Accept @ 05,31 Width 05 "N" Tag "I_Qtd5"  to VSD_I_Qtd5
     Accept @ 05,36 Width 05 "N" Tag "I_Qtd6"  to VSD_I_Qtd6
     Accept @ 05,41 Width 05 "N" Tag "I_Qtd7"  to VSD_I_Qtd7
     Accept @ 05,46 Width 05 "N" Tag "I_Qtd8"  to VSD_I_Qtd8
     Accept @ 05,51 Width 05 "N" Tag "I_Qtd9"  to VSD_I_Qtd9
     Accept @ 05,56 Width 05 "N" Tag "I_Qtd10" to VSD_I_Qtd10
     Accept @ 05,61 Width 05 "N" Tag "I_Qtd11" to VSD_I_Qtd11
     Accept @ 05,66 Width 06 "N" Tag "I_Qtd12" to VSD_I_Qtd12
     
     Label  @ 05,73 "" For "I_Flag"
     Accept @ 05,73 Width 04 "A1" picture "&" Tag "I_Flag" to VSD_Flag
  Enddialog
  Mouse Show
                                       
  ;If RetVal
  ;   Then Finaliza_Registro(True)
  ;   Else If ItemjaExiste
  ;           Then CHAVEI=0
  ;                SEQIT =[Item do Pedido]
  ;                Inicia_Registro()
  ;                Echo Normal
  ;                Echo Off
  ;                Mensagem("Item j  foi lan‡ado !")
  ;                Loop
  ;           Else Finaliza_Registro(False)
  ;        EndIf   
  ;EndIf
  QuitLoop
EndWhile

EndProc  ; (DigitaI)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_Item(Origem) 
Private Item_ok, Origem, regdestinat, pessoa_regimetributario, pessoacontribuinte, regdestin, tpmovestoque
        
;If ORIGEM<>"Cor_Tecido" And (Not IsAssigned(VSDGTABELA) Or IsBlank(VSDGTABELA))
;   Then ConfGeral("N„o foi selecionado tabela de pre‡o//Deseja continuar o processo?")
;        If Ok="N"
;           Then Return False
;        EndIf
;EndIf        
                     
Item_ok=False

Moveto [Lookup_Item] 
Ativa_Lookup()
Switch
  Case Origem="Cor_Tecido" :                                                    ;Cor_Tecido
       Moveto [Referencia]
       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, "P", VSD_I_Codigo_Cor_Tecido
       If Not Retval
          Then Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, "T", VSD_I_Codigo_Cor_Tecido
       EndIf   
  OtherWise:     
  VSD_I_REFERENCIA = ControlValue("I_Codigo_Item")
  TPITEMREF        = "D"
  Moveto [Referencia]  
  Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TPITEMREF, ""
EndSwitch

If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"
       While True
         ;---- Referˆncia PAI - Aplica‡Æo Direta -------------------------------
         If Origem=""  
            Then If REG_BUSCA_LOOKUP["Inativo"]="S"
                    Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                                   REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                                   REG_BUSCA_LOOKUP["Referencia"]+"//"+
                                   "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta inativo !")
                         QuitLoop
                 EndIf        
         
                 If REG_BUSCA_LOOKUP["Producao Esgotada"] = "S"
                    Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                                   REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                                   REG_BUSCA_LOOKUP["Referencia"]+"//"+
                                  "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta com produ‡„o esgotada !")
                         ;QuitLoop         
                 EndIf    
         EndIf    
         Item_Ok              = True
         FAMILIA              = REG_BUSCA_LOOKUP["Codigo da Familia"]           
         VSD_I_Descricao_Item = REG_BUSCA_LOOKUP["Descricao do Item"]
         VSD_I_Referencia     = REG_BUSCA_LOOKUP["Referencia"]            
        
         VSD_I_Codigo_Item    = REG_BUSCA_LOOKUP["Codigo do Item"]
         CODIGO_BARRA         = REG_BUSCA_LOOKUP["Codigo do Item"]
         
         If Origem="Cor_Tecido" Or Not RE0010G_UTILIZA_COR
            Then If Not Monta_Grade("Valida")
                    Then Item_ok=False
                 EndIf
          EndIf
          QuitLoop
       EndWhile
  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf                 

Echo Off
Return Item_ok
EndProc

;*******************************************************************************
;* Rotina p/ Montar Opcoes p/ Grade                                            *
;*******************************************************************************
Proc Monta_Opcoes(OPCAODIVERSAS, ITEMDESEJADO)
Private OPCAODIVERSAS, ITEMDESEJADO, wcg, icg, icgt, tnovo, nomecampo,opconta
nomecampo=Field()
If IsAssigned(Opcoes)
   Then Release Vars Opcoes
EndIf
DynArray Opcoes[]
Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido":
       Moveto [Lookup_Itens_Cor]
EndSwitch
Ativa_Lookup()
Moveto [Codigo do item]
Locate VSD_I_Codigo_Item 

wcg=0
If NRecords(Table())>0
   Then While [Codigo do Item]=VSD_I_Codigo_Item
          Switch
            Case OPCAODIVERSAS="Codigo da Cor_Tecido" And SYS_CODIGO_CLIENTE="0222":
                 wcg=wcg+1
                 Opcoes[wcg]=AlinhM(StrVal([Sequencia da Cor_Tecido]),4)+"  "+[Codigo da Cor_Tecido]+"-"+Completa([Descricao da Cor_Tecido],30," ")
            Case OPCAODIVERSAS="Codigo da Cor_Tecido":
                 wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao da Cor_Tecido],30," ")+" "+[Codigo da Cor_Tecido]+" - "+Format("W2,AR",[Sequencia da Cor_Tecido])
          EndSwitch
          Skip
          IF EOT() Then QuitLoop EndIf
        EndWhile
Endif
KeyPress "ESC"
Moveto Field nomecampo
EndProc    ; (Monta_Opcoes)

;*******************************************************************************
;* Rotina p/ Checagem Opcoes p/ Grade                                          *
;*******************************************************************************
Proc Checa_Opcoes(OPCAODIVERSAS, VALORDESEJADO)
Private OPCAODIVERSAS, VALORDESEJADO, icg, resultado

If DynArraySize(Opcoes)=0
   Then Return False
EndIf

resultado=false
For icg From 1 To DynArraySize(Opcoes)
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And SYS_CODIGO_CLIENTE="0222":
         If RTrim(SubStr(Opcoes[icg],07,4))=VALORDESEJADO
            Then resultado=true
         EndIf
    Case OPCAODIVERSAS="Codigo da Cor_Tecido":
         If RTrim(SubStr(Opcoes[icg],32,4))=VALORDESEJADO
            Then resultado=true
         EndIf
  EndSwitch
  If resultado
     then MontaRegistro_F1(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc         ;  (Checa_Opcoes)

;*******************************************************************************
;* Rotina Montar Registro_F1 p/ Grade                                          *
;*******************************************************************************
Proc MontaRegistro_F1(OPCAODIVERSAS, indice)
private OPCAODIVERSAS, indice

If IsAssigned(Registro_F1)
   Then Release Vars Registro_F1
EndIf
DynArray Registro_F1[]
Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido" And SYS_CODIGO_CLIENTE="0222":
       Registro_F1["Codigo da Cor_Tecido"]         =RTrim(SubStr(Opcoes[indice],07,4))
       Registro_F1["Descricao da Cor_Tecido"]      =RTrim(SubStr(Opcoes[indice],12,30))
       If IsAssigned(VSDGCORTECIDO)
          Then VSD_I_Codigo_Cor_Tecido   =Registro_F1["Codigo da Cor_Tecido"]
               VSD_I_Descricao_Cor_Tecido=Registro_F1["Descricao da Cor_Tecido"]
       EndIf
  Case OPCAODIVERSAS="Codigo da Cor_Tecido"  :
       Registro_F1["Codigo da Cor_Tecido"]         =RTrim(SubStr(Opcoes[indice],32,4))
       Registro_F1["Descricao da Cor_Tecido"]      =RTrim(SubStr(Opcoes[indice],01,30))
       If IsAssigned(VSDGCORTECIDO)
          Then VSD_I_Codigo_Cor_Tecido   =Registro_F1["Codigo da Cor_Tecido"]
               VSD_I_Descricao_Cor_Tecido=Registro_F1["Descricao da Cor_Tecido"]
       EndIf
EndSwitch
EndProc    ;  (Monta_RegistroF1)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO)
Private OPCAODIVERSAS, LJ, AJ, nc, SEMRETORNO

If DynArraySize(Opcoes)=0
   Then Mensagem("Tabela sem Registros !")
        Return False
EndIf

AJ=DynArraySize(Opcoes)
If AJ>15
   Then AJ=15
   Else If AJ<3 Then AJ=3 EndIf
EndIf

Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido"   : LJ=43 nc=1
EndSwitch

ArrayElement=0
Showdialog "Consulta "+OPCAODIVERSAS Proc "Opcoes_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC"
     @ 08,08 height AJ+2 width LJ+5

   PickDynArray @0,01 Height AJ width LJ
   Columns nc
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
Mouse Show
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Codigo da Cor_Tecido":
                  [Codigo da Cor_Tecido   ]=Registro_F1["Codigo da Cor_Tecido"]
                  [Descricao da Cor_Tecido]=Registro_F1["Descricao da Cor_Tecido"]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (Seleciona_Opcoes)

;*******************************************************************************
;* Rotina para Montar Grade dos Itens do Pedido                                *
;*******************************************************************************
Proc Monta_Grade(Tipo)
Private i,tm,ItemPesq,Itok,ContIt,Tipo

If Not IsAssigned(grdant) Then grdant = "***" EndIf     
ItemPesq=VSD_I_Codigo_Item

GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM
If REG_ITEM["Codigo da Grade"]<>grdant Or Rtrim(grdant)=""
   Then grdant=REG_ITEM["Codigo da Grade"]
   
        GetRecord "\\Sistemas\\Estoque\\Tpgrade" grdant To REG_BUSCA_LOOKUP
        If Not Retval
           Then Mensagem("Item "+ItemPesq+" com defini‡„o de grade incorreta !//Verificar !")
                Return False
        EndIf
        
        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"]))
Endif

If Tipo<>"Valida"
   Then	Return True
EndIf       

For i From 1 to 12
  Tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))
  Switch
    Case Len(Tm)=1 : ItemPesq=SubStr(VSD_I_Codigo_Item,1,9) QuitLoop
    Case Len(Tm)=2 : ItemPesq=SubStr(VSD_I_Codigo_Item,1,8) QuitLoop
  EndSwitch
EndFor
If Len(Tm)=0
   Then Return False
Endif

For i From 1 to 12
  Array_TM[i]="F"+SubStr(Array_TM[i],2,Len(Array_TM[i]))
EndFor

ItOk=True
Moveto [Lookup_Item]
Ativa_Lookup()
Moveto [Codigo do Item]
Locate Pattern ItemPesq+".."
If Not RetVal
   Then ItOk=False
        Mensagem("Itens "+ItemPesq+".. sem cadastrado !//Verificar !")
   Else ContIt=0
        While True
          Switch
            Case Len(Tm)=1 : vr=SubStr([Codigo do Item],10,1)
            Case Len(Tm)=2 : vr=SubStr([Codigo do Item],09,2)
          EndSwitch
          If vr<>"0" And vr<>"00"
             Then If [Inativo]<>"S" And [Producao Esgotada]<>"S"
                     Then For i From 1 to 12
                            If LTrim(RTrim(SuBstr(Array_TM[i],4,2)))=vr
                               Then Array_TM[i]="T"+RTrim(SubStr(Array_TM[i],2,4))
                                    ContIt=ContIt+1
                                    QuitLoop
                            EndIf
                          EndFor
                  EndIf
          EndIf
          Skip
          If EOT()
             Then QuitLoop
          EndIf
          Locate Next Pattern ItemPesq+".."
          If Not Retval
             Then QuitLoop
          EndIf
        EndWhile
        If ContIt=0
           Then Mensagem("Itens "+ItemPesq+".. Inativos//Verificar !")
                ItOk = False
        EndIf
EndIf
KeyPress "ESC"
Return ItOk

EndProc ;Monta_Grade()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
INICIO_DIALOG=True

If SYS_CODIGO_CLIENTE="0434"
   Then RE0010G_UTILIZA_COR=False
   Else RE0010G_UTILIZA_COR=True
EndIf 

DigitaI()
Moveto [Codigo do Item]
Release Procs Monta_Grade,Item_Dialog,AvancaCampo,VoltaCampo,DigitaI,Pega_Dados_Item,
              Monta_Opcoes,Checa_Opcoes,MontaRegistro_F1,Seleciona_Opcoes
