;** ADD_CBAR *******************************************************************
;*  Programa p/ Inserir Codigo de Barras                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 18/05/2017 por Bruno Carvalho
;Ultima Alteracao: 19/07/2017 por Bruno Carvalho      
;Motivo Alteracao: Ajustes ao tentar excluir um cądigo de barras, permitindo apenas inativ -lo *OPAF 
;Ultima Alteracao: 15/01/2017 por Bruno Carvalho      
;Motivo Alteracao: Alterado Tecla F9 p/ Ins, MSG_CAMPO F1 na tecla p/ Tipo do Codigo de Barras e alterado label DEL p/ INATIVAR
;Ultima Alteracao: 08/01/2019 por Bruno Carvalho      
;Motivo Alteracao: Adicionado tabela "Bar_Inat", respons vel em manter todos os itens com cądigos de barras inativados 

;*******************************************************************************
;* Rotina checagem Codigo de Barras                                            *
;*******************************************************************************
Proc Tipo_CdBarras(Tipo)
Private Tipo, Result

Result=True
Switch
  Case Tipo="F1":
       ShowPopup " Tipos " CENTERED
        "~A~-EAN13     " : " EAN13                                      " : "A-EAN13",
        "~B~-EAN8      " : " EAN8                                       " : "B-EAN8",
        "~D~-COD128    " : " COD128 Livre                               " : "D-COD128",
        "~F~-EAN14     " : " EAN14 (DUN-14)                             " : "F-EAN14",
        Separator,
        "~G~-EAN13 II  " : " EAN13 = 00+Cądigo do Item                  " : "G-EAN13",
        "~J~-EAN13 III " : " EAN13 = 78+Cądigo do Item                  " : "J-EAN13",
        "~H~-EAN8 II   " : " EAN8 = Łltimos 7 dĄgitos do Cądigo do Item " : "H-EAN8",
        "~I~-COD128 II " : " COD128 = Cądigo do Item                    " : "I-COD128",
        Separator,
        "~C~ancelar    " : " Cancelar a Operao "  : "CANCELAR"
       EndMenu
       To MenuVar
       Echo Off
       
       If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
          Then VSDGTIPOBARRA=MenuVar     
          Else Return False
       EndIf
  Case Tipo="TipoCodigo":   
       Switch
         Case VSDGTIPOBARRA=""             : Result=True
         Case VSDGTIPOBARRA="A-EAN13"      : Result=True
         Case VSDGTIPOBARRA="B-EAN8"       : Result=True
         Case VSDGTIPOBARRA="F-EAN14"      : Result=True
         Case VSDGTIPOBARRA="D-COD128"     : Result=True
         Case VSDGTIPOBARRA="G-EAN13"      : Result=True
              VSDGCODBARRA=Mod11_CalcEAN13("CALC",VSDGCODIGO)
         Case VSDGTIPOBARRA="J-EAN13"      : Result=True
              VSDGCODBARRA=Mod11_CalcEAN13("CALC","78"+VSDGCODIGO)
         Case VSDGTIPOBARRA="H-EAN8"       : Result=True
              VSDGCODBARRA=Mod11_CalcEAN8("CALC",SubStr(VSDGCODIGO,04,07))
         Case VSDGTIPOBARRA="I-COD128"     : Result=True
              VSDGCODBARRA=VSDGCODIGO
         OtherWise                         : Mensagem("Tipo de Cądigo de Barras inv lido !")
                                             Result=False
       EndSwitch    
  Case Tipo="Codigo":
       CDBAROk=True
       Switch
         Case VSDGTIPOBARRA="F-EAN14"  : 
           Switch
             Case Len(VSDGCODBARRA)<>14 :
               CDBAROK=False
               Mensagem("Cądigo de Barras EAN14 diferente de 14 digitos !")
             Case NumVal(SubStr(VSDGCODBARRA,1,1))<1 Or NumVal(SubStr(VSDGCODBARRA,1,1))>8 :
               CDBAROK=False   
               Mensagem("O primeiro dĄgito esta incorreto para variante logĄstica!//Variante logĄstica deve ser compreendido entre 1 e 8!")
           EndSwitch    
         Case VSDGTIPOBARRA="A-EAN13"      :
           Switch
             Case Len(VSDGCODBARRA)<>13 :
               CDBAROK=False
               Mensagem("Cądigo de Barras EAN13 diferente de 13 digitos !")
             Case Mod11_CalcEAN13("CHEC",SubStr(VSDGCODBARRA,1,12))="":
               CDBAROK=False
               Mensagem("Cądigo de Barras EAN13 inv lido !")
             Case Mod11_CalcEAN13("CHEC",SubStr(VSDGCODBARRA,1,12))<>numVal(SubStr(VSDGCODBARRA,13,1)):
               CDBAROK=False
               Mensagem("Digito verificador inv lido !")
           EndSwitch

         Case VSDGTIPOBARRA="B-EAN8"       :
           Switch
             Case Len(VSDGCODBARRA)<>8 : 
               CDBAROK=False
               Mensagem("Cądigo de Barras EAN8 diferente de 8 digitos !")
             Case Mod11_CalcEAN8("CHEC",SubStr(VSDGCODBARRA,1,7))="":
               CDBAROK=False
               Mensagem("Cądigo de Barras EAN8 inv lido !")
             Case Mod11_CalcEAN13("CHEC",SubStr(VSDGCODBARRA,1,7))<>numVal(SubStr(VSDGCODBARRA,8,1)):
               CDBAROK=False
               Mensagem("Digito verificador inv lido !")
           EndSwitch
       EndSwitch
       Result=CDBAROK
  Case Tipo="VerificaCodigo" :
       CDBAROK=True
       AUX_BARRA=VSDGCODBARRA
       Switch
         Case VSDGTIPOBARRA="G-EAN13"      : AUX_BARRA = Mod11_CalcEAN13("CALC",VSDGCODIGO)
         Case VSDGTIPOBARRA="J-EAN13"      : AUX_BARRA = Mod11_CalcEAN13("CALC","78"+VSDGCODIGO)
         Case VSDGTIPOBARRA="H-EAN8"       : AUX_BARRA = Mod11_CalcEAN8("CALC",SubStr(VSDGCODIGO,04,07))
         Case VSDGTIPOBARRA="I-COD128"     : AUX_BARRA = VSDGCODIGO
       EndSwitch
       If VSDGCODBARRA <> AUX_BARRA
          Then CDBAROK=False
               Mensagem("O cądigo de barras informado  diferente de "+AUX_BARRA+"!")
       EndIf   
       Result=CDBAROK     
EndSwitch
Return Result   
       
EndProc ;Tipo_CdBarras()       

;*******************************************************************************
;* Rotina p/ Verificar Codigo de Barras cadastrado nos itens                   *
;*******************************************************************************
Proc Verifica_CodBar_Itens()
          
Do_it!                        
JanelaItens=AbrirTabela("\\Sistemas\\Estoque\\Itens","V",1,0,1,15)
         
Result=True
Window Select JanelaItens
Moveto "Itens" 
Moveto [Codigo de Barras]
Locate VSDGCODBARRA
If Retval
   Then While True
          If VSDGCODBARRA = [Codigo de Barras]
             Then Result=False
                  Mensagem("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para o item //"+[Codigo do Item]+" "+[Descricao do Item]+" !")
                  QuitLoop
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next VSDGCODBARRA
          If Not RetVal
             Then QuitLoop
          EndIf   
        EndWhile
EndIf
ClearImage

Moveto "Itens"
Moveto [Codigo do Item]
Locate VSDGCODIGO
CoeditKey
KeyPress "F7"
                  
Return Result

EndProc ;Verifica_CodBar_Itens()
                                  
;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Sd_DialgogBarra(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento
            
Temp=True
MSG_CAMPO=""                      
TECLA=""

If Campo="TG_TIPOBARRA"
   Then TECLA="F1=Tabelas"
   Else TECLA="" 
EndIf   

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: If Campo="TG_TIPOBARRA"
                                      Then Tipo_CdBarras("F1")
                                   EndIf     
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_TIPOBARRA" : CancelDialog
            Case Campo="TG_CODBARRA"  : Campo="TG_TIPOBARRA" 
            Case Campo="TG_FLAG2"     : If VSDGTIPOBARRA="G-EAN13"  Or
                                           VSDGTIPOBARRA="J-EAN13"  Or
                                           VSDGTIPOBARRA="H-EAN8"   Or
                                           VSDGTIPOBARRA="I-COD128"
                                           Then Campo="TG_TIPOBARRA"                       
                                           Else Campo="TG_CODBARRA"
                                        EndIf
          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
          Switch
             Case Campo="TG_TIPOBARRA" :
                  VSDGTIPOBARRA=ControlValue("TG_TIPOBARRA")
                  If IsBlank(VSDGTIPOBARRA)
                     Then Campo="TG_TIPOBARRA"
                     Else If Tipo_CdBarras("TipoCodigo")
                             Then If VSDGTIPOBARRA="G-EAN13"  Or
                                     VSDGTIPOBARRA="J-EAN13"  Or
                                     VSDGTIPOBARRA="H-EAN8"   Or
                                     VSDGTIPOBARRA="I-COD128"
                                     Then Campo="TG_FLAG2"
                                     Else Campo="TG_CODBARRA"
                                  EndIf   
                           EndIf                                                       
                  EndIf   
             Case Campo="TG_CODBARRA"  : 
                  VSDGCODBARRA=ControlValue("TG_CODBARRA")
                  Switch
                    Case IsBlank(VSDGTIPOBARRA) ANd Not IsBlank(VSDGCODBARRA) : 
                         FastMsg("Informe o Tipo do Cądigo de Barras!")
                    Case Not IsBlank(VSDGTIPOBARRA) And IsBlank(VSDGCODBARRA) : 
                         FastMsg("Informe o Cądigo de Barras!") 
                    Case IsBlank(VSDGTIPOBARRA) And IsBlank(VSDGCODBARRA)   :
                    OtherWise : If Tipo_CdBarras("Codigo")
                                   Then Campo="TG_FLAG2"
                                EndIf                                                       
                  EndSwitch       
             Case Campo="TG_FLAG2" :
                  VSDGFLAG2=ControlValue("TG_FLAG2")
                  AcceptDialog     
          EndSwitch
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_TIPOBARRA" : MSG_CAMPO = "Tipo de Cądigo de Barras a utilizar"
  Case Campo="TG_CODBARRA"  : MSG_CAMPO = "Cądigo de Barras"
  Case Campo="TG_FLAG2"     : MSG_CAMPO = "Pausa para Prosseguir"                                                
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;Sd_DialgogBarra()

;*******************************************************************************
;* Rotina Principal De Reajuste de Preco                                       *
;*******************************************************************************
Proc Adiciona_CodBar()                
Private POSI, Titulo, indice

Indice        = ControlValue("TG_CDBARRA")
VSDGTIPOBARRA = BlankNum()                            
VSDGCODBARRA  = BlankNum()
VSDGFLAG2     = ""
 
TESTE = "A-EAN13,B-EAN8,D-COD128,F-EAN14,G-EAN13,J-EAN13,H-EAN8,I-COD128"
 
While True
  Result = False
  ShowDialog "Codigo de Barras" Proc "Sd_DialgogBarra"
    Trigger "OPEN","ARRIVE"                                                   
    Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
      @ 00,01 Height 04 Width 41
  
     Label  @ 00,00 "Tipo"  For "TG_TIPOBARRA"
     Accept @ 01,01 Width 13 "A10" Picture TESTE Tag "TG_TIPOBARRA" To VSDGTIPOBARRA
        
     Label  @ 00,14 "Codigo de Barra"  For "TG_CODBARRA"
     Accept @ 01,15 Width 20 "A17" Tag "TG_CODBARRA" To VSDGCODBARRA
     
     Label  @ 01,35 ""  For "TG_FLAG2"
     Accept @ 01,35 Width 1 "A3" Tag "TG_FLAG2" To VSDGFLAG2
     
  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If Not Tipo_CdBarras("Codigo")
     Then Loop
  EndIf
  If Not Isblank(VSDGCODBARRA) And Not IsBlank(VSDGTIPOBARRA)
     Then If Not Tipo_CdBarras("VerificaCodigo")
             Then Loop
          EnDIf   
  EndIf
      
  Achou   = False
  For ty From 1 To DynArraySize(ARRAY_CODIGO_BARRA)
    If Rtrim(SubStr(ARRAY_CODIGO_BARRA[ty],1,10))  = VSDGTIPOBARRA And 
       Rtrim(SubStr(ARRAY_CODIGO_BARRA[ty],12,20)) = VSDGCODBARRA
       Then Achou=True
            INATIVO = Rtrim(SubStr(ARRAY_CODIGO_BARRA[ty],33,1))
    EndIf  
  Endfor
  
  If Achou
     Then If INATIVO="S"
             Then Mensagem("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para este item, com o status INATIVO!")
             Else Mensagem("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para este item!")  
          EndIf
          Loop
     Else GetRecord "\\Sistemas\\Estoque\\Iten_bar" VSDGCODBARRA To REG_BARRA
          If RetVal
             Then If REG_BARRA["Codigo do Item"]<>VSDGCODIGO
                     Then GetRecord "\\Sistemas\\Estoque\\Itens" REG_BARRA["Codigo do Item"] To REG_ITEM
                          If RetVal
                             Then AUX_ITEM = REG_BARRA["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"] 
                             Else AUX_ITEM = REG_BARRA["Codigo do Item"]
                          EndIf   
                          Mensagem("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para o item//"+AUX_ITEM+"!")
                     Else Mensagem("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para este item!") 
                  EndIf
                  Release Vars REG_BARRA
                  Loop
          EnDIf          
  EndIf       
  
  If Not Verifica_CodBar_Itens()
     Then Loop
  EndIf
  Result = True
  QuitLoop
EndWhile          

Release Vars REG_BARRA  
Return Result

EndProc ;Adiciona_CodBar()

;*******************************************************************************
;* Controle do ShowDialog                                                      *
;*******************************************************************************
Proc SD_SDialogCDBAR(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp           = True
MSG_CAMPO      = ""                                               
TECLA          = ""
ANT_VSDGCODIGO = VSDGCODIGO
                                     
If INICIO_DIALOG
   Then Campo = "TG_FLAG"
        INICIO_DIALOG=False
EndIf     

If Disparo="OPEN" Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9 : Temp=False
     Case Evento["KeyCode"] =  27 :
          Temp=False
          Switch
            Case Campo="TG_CODIGO"   : CancelDialog
            Case Campo="TG_FLAG"     : CancelDialog
            Case Campo="TG_CDBARRA"  : Campo="TG_FLAG"
          EndSwitch
     Case Evento["KeyCode"] = -82   : 
          If Adiciona_CodBar()
             Then Moveto "\\Sistemas\\Estoque\\Iten_bar"
                  End Down
                  [Codigo do Item    ] = VSDGCODIGO
                  [Tipo Codigo_Barras] = VSDGTIPOBARRA
                  [Codigo de Barras  ] = VSDGCODBARRA
                  [Data da Manutencao] = Today()
                  [Hora da Manutencao] = Time()
                  [Chapa             ] = SYS_CHAPA_USUARIO
                  UnLockRecord
                 
                  Moveto "\\Sistemas\\Estoque\\Bar_inat"
                  Moveto [Codigo do Item]
                  Locate VSDGCODIGO,VSDGCODBARRA
                  If RetVal
                     Then Grava_LogEx("Ativa_CodBar")
                          Del
                  EndIf
                  ARRAY_CODIGO_BARRA[DynArraySize(ARRAY_CODIGO_BARRA)+1] = Format("W10",VSDGTIPOBARRA)+Spaces(1)+
                                                                           Format("W20",VSDGCODBARRA) +Spaces(1)+
                                                                           Format("W8","") 
                                                                           
          EndIf
          TECLA=""
     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"] = -67 And Campo="TG_CDBARRA" : 
          If DynArraySize(ARRAY_CODIGO_BARRA)>0 
             Then
          Indice       = ControlValue("TG_CDBARRA")
          TIPOBARRA    = Rtrim(SubStr(ARRAY_CODIGO_BARRA[Indice],1,10))
          VSDGCODBARRA = Rtrim(SubStr(ARRAY_CODIGO_BARRA[Indice],12,20))
          INATIVO      = Rtrim(SubStr(ARRAY_CODIGO_BARRA[Indice],33,1))
          
          If INATIVO="S"
             Then FAZ_PROCESSO = "INATIVO"
             Else FAZ_PROCESSO = "ATIVO"
          EndIf     
          
          If FAZ_PROCESSO = "ATIVO" 
             Then
             If Search("PRINCIPAL",ARRAY_CODIGO_BARRA[Indice])>0
                Then Mensagem(Completa("No    possĄvel  excluir  um  cądigo  de  barras  que j  foi",62," ")+"//"+
                              Completa("incluĄdo,  podendo  apenas  inativar  este  cądigo de barras.",62," ")+"////"+
                              Completa("No  entanto,  este  cądigo  de  barras  est  sendo utilizado,",62," ")+"//"+
                              Completa("impossiblitando inativ -lo.",62," ")+"////"+
                              Completa("Se  necess rio, remover  antes  o  cądigo  de  barras que est ",62," ")+"//"+
                              Completa("inserido  no cadastro deste item p/ posteriormente inativ -lo.",62," "))
                Else ConfGeral(Completa("No    possĄvel  excluir  um  cądigo  de  barras  que j  foi",62," ")+"//"+
                               Completa("incluĄdo,  podendo  apenas  inativar  este  cądigo de barras.",62," ")+"////"+
                               Completa("ITEM: "+VSDGCODIGO+" "+VSDGNOMCODIGO,62," ")+"//"+
                               Completa("Deseja INATIVAR o codigo de barras "+VSDGCODBARRA+"?",62," "))
                     If Ok="S"  
                        Then Moveto "\\Sistemas\\Estoque\\Iten_bar" 
                             Moveto [Codigo de Barras]
                             Locate VSDGCODBARRA
                             If RetVal
                                Then Del
                             EndIf
                             
                             Moveto "\\Sistemas\\Estoque\\Bar_inat"
                             Moveto [Codigo do Item]
                             Locate VSDGCODIGO,VSDGCODBARRA
                             If Not RetVal
                                Then Grava_LogEx("Inativa_CodBar")
                                     End Down
                                     [Codigo do Item    ] = VSDGCODIGO
                                     [Codigo de Barras  ] = VSDGCODBARRA
                                     [Tipo Codigo_Barras] = TIPOBARRA
                                     [Data da Manutencao] = Today()
                                     [Hora da Manutencao] = Time()
                                     [Chapa             ] = SYS_CHAPA_USUARIO
                                     UnLockRecord
                             EndIf
                             
                             Release Vars ARRAY_CODIGO_BARRA
                             CONT = 0
                             DynArray ARRAY_CODIGO_BARRA[]
                             
                             Moveto "\\Sistemas\\Estoque\\Iten_bar"
                             Moveto [Codigo do Item]
                             Locate VSDGCODIGO
                             If RetVal
                                Then While VSDGCODIGO=[Codigo do Item]
                                       CONT = CONT + 1
                                       ARRAY_CODIGO_BARRA[CONT] = Format("W10",[Tipo Codigo_Barras])+Spaces(1)+
                                                                  Format("W20",[Codigo de Barras]) +Spaces(1)+
                                                                  Format("W8","")+Format("D13",[Data da Manutencao]) 
                                       Skip
                                       If Eot() Then QuitLoop EnDIf
                                       Locate Next VSDGCODIGO
                                       If Not RetVal Then QuitLoop EndIf
                                     EndWhile  
                             EndIf
                         
                             Moveto "\\Sistemas\\Estoque\\Bar_inat"
                             Moveto [Codigo do Item]
                             Locate VSDGCODIGO
                             If RetVal
                                Then CONT = DynArraySize(ARRAY_CODIGO_BARRA)
                                     While VSDGCODIGO=[Codigo do Item]  
                                       CONT = CONT + 1
                                       ARRAY_CODIGO_BARRA[CONT] = Format("W10",[Tipo Codigo_Barras])+Spaces(1)+
                                                                  Format("W20",[Codigo de Barras]) +Spaces(1)+
                                                                  Format("W8","SIM")+Format("D13",[Data da Manutencao]) 
                                       Skip
                                       If Eot() Then QuitLoop EnDIf
                                     EndWhile  
                             EndIf
                             
                             If Rtrim([Itens->Codigo de Barras])<>""
                                Then ARRAY_CODIGO_BARRA[DynArraySize(ARRAY_CODIGO_BARRA)+1] = Format("W10",[Itens->Tipo Codigo_Barras])+Spaces(1)+
                                                                                              Format("W20",[Itens->Codigo de Barras])+" "+
                                                                                              Format("W8","")+Format("D13",[Data da Manutencao])+
                                                                                              "  <- PRINCIPAL"
                             EndIf
                     EndIf
                     Release Vars AUX_ARRAY_CODIGO_BARRA,CONTADOR,TM,i,Indice,ITEM              
             EnDIf
             Else Result=True
                  While True
                    GetRecord "\\Sistemas\\Estoque\\Iten_bar" VSDGCODBARRA To REG_BARRA
                    If RetVal
                       Then If REG_BARRA["Codigo do Item"]<>VSDGCODIGO
                               Then GetRecord "\\Sistemas\\Estoque\\Itens" REG_BARRA["Codigo do Item"] To REG_ITEM
                                    If RetVal
                                       Then AUX_ITEM = REG_BARRA["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"] 
                                       Else AUX_ITEM = REG_BARRA["Codigo do Item"]
                                    EndIf   
                                    Mensagem(Completa("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para o item",62," ")+"//"+
                                             Completa(AUX_ITEM+".",62," ")+"//"+
                                             Completa("NÆo ser  possĄvel reativ -lo!",62," "))
                               Else Mensagem(Completa("Cądigo de Barras "+VSDGCODBARRA+" j  est  cadastrado para este item.",68," ")+"//"+
                                             Completa("NÆo ser  possĄvel reativ -lo!",68," "))
                            EndIf
                            Release Vars REG_BARRA
                            Result=False 
                            QuitLoop       
                    EnDIf 
                    If Not Verifica_CodBar_Itens()
                       Then Result=False
                            QuitLoop 
                    EndIf
                    ConfGeral(Completa("Deseja ATIVAR o codigo de barras "+VSDGCODBARRA+"?",62," "))
                    If Ok="S"  
                       Then Moveto "\\Sistemas\\Estoque\\Bar_inat" 
                            Moveto [Codigo do Item]
                            Locate VSDGCODIGO,VSDGCODBARRA
                            If RetVal
                               Then CopyToArray REG_BARINAT
                                    Grava_LogEx("Ativa_CodBar")
                                    Del
                                    
                                    Moveto "\\Sistemas\\Estoque\\Iten_bar"
                                    End Down
                                    [Codigo do Item    ] = REG_BARINAT["Codigo do Item"]
                                    [Tipo Codigo_Barras] = REG_BARINAT["Tipo Codigo_Barras"]
                                    [Codigo de Barras  ] = REG_BARINAT["Codigo de Barras"]
                                    [Data da Manutencao] = Today()
                                    [Hora da Manutencao] = Time()
                                    [Chapa             ] = SYS_CHAPA_USUARIO
                                    UnLockRecord
                            EndIf     
                    EndIf
                    QuitLoop
                  EndWhile

                  If Result
                     Then Release Vars ARRAY_CODIGO_BARRA
                          CONT = 0
                          DynArray ARRAY_CODIGO_BARRA[]
                          
                          Moveto "\\Sistemas\\Estoque\\Iten_bar"
                          Moveto [Codigo do Item]
                          Locate VSDGCODIGO
                          If RetVal
                             Then While VSDGCODIGO=[Codigo do Item]
                                    CONT = CONT + 1
                                    ARRAY_CODIGO_BARRA[CONT] = Format("W10",[Tipo Codigo_Barras])+Spaces(1)+
                                                               Format("W20",[Codigo de Barras]) +Spaces(1)+
                                                               Format("W8","")+Format("D13",[Data da Manutencao]) 
                                    Skip
                                    If Eot() Then QuitLoop EnDIf
                                    Locate Next VSDGCODIGO
                                    If Not RetVal Then QuitLoop EndIf
                                  EndWhile  
                          EndIf

                          Moveto "\\Sistemas\\Estoque\\Bar_inat"
                          Moveto [Codigo do Item]
                          Locate VSDGCODIGO
                          If RetVal
                             Then CONT = DynArraySize(ARRAY_CODIGO_BARRA)
                                  While VSDGCODIGO=[Codigo do Item]  
                                    CONT = CONT + 1
                                    ARRAY_CODIGO_BARRA[CONT] = Format("W10",[Tipo Codigo_Barras])+Spaces(1)+
                                                               Format("W20",[Codigo de Barras]) +Spaces(1)+
                                                               Format("W8","SIM")+Format("D13",[Data da Manutencao]) 
                                    Skip
                                    If Eot() Then QuitLoop EnDIf
                                  EndWhile  
                          EndIf
                          
                          If Rtrim([Itens->Codigo de Barras])<>""
                             Then ARRAY_CODIGO_BARRA[DynArraySize(ARRAY_CODIGO_BARRA)+1] = Format("W10",[Itens->Tipo Codigo_Barras])+Spaces(1)+
                                                                                           Format("W20",[Itens->Codigo de Barras])+" "+
                                                                                           Format("W8","")+Format("D13",[Data da Manutencao])+
                                                                                           "  <- PRINCIPAL"   
                          EndIf
                 EndIf
            EndIf
          EndIf
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_CODIGO"       : Campo="TG_CDBARRA"
                         VSDGCODIGO=ControlValue("TG_CODIGO")
                         If Not IsBlank(ANT_VSDGCODIGO) And ANT_VSDGCODIGO<>VSDGCODIGO
                            Then VSDGCODIGO = ANT_VSDGCODIGO
                                 GetRecord "\\Sistemas\\Estoque\\Itens" VSDGCODIGO To REG_CODIGO
                                 If Not RetVal
                                    Then VSDGNOMCODIGO=""
                                         FastMsg("Item "+VSDGCODIGO+" no localizado!")
                                    Else VSDGNOMCODIGO = REG_CODIGO["Descricao do ITem"]
                                 EndIf   
                         EndIf
                    Case Campo="TG_FLAG"     : Campo="TG_CDBARRA"    
                    Case Campo="TG_CDBARRA"  : If DynArraySize(ARRAY_CODIGO_BARRA)>0 
                                                  Then Indice = ControlValue("TG_CDBARRA")
                                                       If Search("PRINCIPAL",ARRAY_CODIGO_BARRA[Indice])>0
                                                          Then Mensagem("Cądigo de Barras j  est  sendo utilizado neste item!")
                                                          Else AcceptDialog
                                                       EnDIf
                                               EndIf           
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

MSG_CAMPO = "Ins=Inserir  "
Switch  
  Case Campo="TG_CDBARRA" : If DynArraySize(ARRAY_CODIGO_BARRA)>0   
                               Then MSG_CAMPO = MSG_CAMPO+"F9=Ativar/Inativar  "
                            EndIf  
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog

;*******************************************************************************
;* EdiÆo do recebimento da Ordem de Compra                                    *
;*******************************************************************************
Proc INSERIR_CDBAR()

While True
  Result = False
  VSDGFLAG = ""
  Echo Normal
  Echo Off
  ShowDialog "Cądigo de Barras" Proc "SD_SDialogCDBAR"
  Trigger "OPEN","ARRIVE","CLOSE","SELECT"
  Key "F1","ENTER","ESC","F9",-82,-67,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
       @ 06,10   Height 14 Width 75
  
      Label  @ 00,00 "Item" For "TG_CODIGO"
      Accept @ 01,01 Width 14 "A10"  Picture "[&,#][#*#]" Tag "TG_CODIGO" To VSDGCODIGO
      Accept @ 01,12 Width 59 "A30"  Picture "!*!" Tag "TG_CODIGO" To VSDGNOMCODIGO
      
      Label  @ 00,53 "" For "TG_FLAG"
      Accept @ 01,54 Width 03 "A1" Picture "!*!" Tag "TG_FLAG" To VSDGFLAG

      Label @ 03,00 ""  For "TG_CDBARRA"
      Label @ 03,00 " Tipo       Cądigo de Barras     Inativo    Data"  For "TG_CDBARRA"
                   ;" 1234567890 12345678901234567890 XXX     1234567890  <- PRINCIPAL"
  
      PickDynArray @04,01 Height 7 width 71
        Columns 1
         ARRAY_CODIGO_BARRA
          Tag "TG_CDBARRA"
           To VSDGCDBARRA
           
      ;Label @ 10,00 "Ins=Inserir"  For "TG_CDBARRA"     
                
  EndDialog
  If Not RetVal 
     Then Result=False
          QuitLoop 
  EndIf
  
  AUX_VSDGTIPOBARRA = Rtrim(SubStr(ARRAY_CODIGO_BARRA[Indice],1,10))
  AUX_VSDGCODBARRA  = Rtrim(SubStr(ARRAY_CODIGO_BARRA[Indice],12,20))
  AUX_INATIVO       = Rtrim(SubStr(ARRAY_CODIGO_BARRA[Indice],33,1))
  Loop
EndWhile
Release Vars REG_OCI,VSDGITENSOC,AUX_ARRAY_COMPRA,ARRAY_CODIGO_BARRA, EDITAR_COMPRA,
             VSDGOC,VSDGNOMOC,VSDGFLAG,VSDGFLAG2,indice,ANT_VSDGQTD,VSDGQTD,VSDGPRUNIT,VSDGPRTOTAL
             
Return Result             
  
EndProc ;INSERIR_CDBAR()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
INICIO_DIALOG=True
              
If SysMode()="Main"
   Then Mensagem("Processo executado no script Itens!")
        Return
EndIf

Release Vars JanelaCdBar,ARRAY_CODIGO_BARRA,CONT_ARRAY

CONT_ARRAY=0
DynArray ARRAY_CODIGO_BARRA[]

VSDGCODIGO        = [Codigo do Item    ]
VSDGNOMCODIGO     = [Descricao do Item ]
AUX_CODBAR        = [Codigo de Barras  ]
TIPO_CODBAR       = [Tipo Codigo_Barras] 
AUX_VSDGTIPOBARRA = ""
AUX_VSDGCODBARRA  = ""
INATIVO           = ""

If Rtrim(AUX_CODBAR)<>""
   Then CONT_ARRAY = CONT_ARRAY+1
        ARRAY_CODIGO_BARRA[CONT_ARRAY] = Format("W10",TIPO_CODBAR)+Spaces(1)+
                                         Format("W20",AUX_CODBAR)+" "+Format("W8",INATIVO)+Spaces(10)+"  <- PRINCIPAL"   
EndIf        

Moveto "\\Sistemas\\Estoque\\Iten_bar" 
Moveto [Codigo do Item]
Locate VSDGCODIGO
If Retval
   Then While True
          If VSDGCODIGO=[Codigo do Item]
             Then Achou=False
                  For ty From 1 To DynArraySize(ARRAY_CODIGO_BARRA)
                    If Rtrim(SubStr(ARRAY_CODIGO_BARRA[ty],12,20)) = [Codigo de Barras] ;Rtrim(SubStr(ARRAY_CODIGO_BARRA[ty],1,10))  = [Tipo Codigo_Barras]
                       Then Achou=True
                    EndIf 
                  Endfor
                  If Not Achou
                     Then CONT_ARRAY = CONT_ARRAY + 1
                          ARRAY_CODIGO_BARRA[CONT_ARRAY] = Format("W10",[Tipo Codigo_Barras]) + Spaces(1) + Format("W20",[Codigo de Barras]) +
                                                           Spaces(1) + Format("W8",INATIVO) + Format("D13",[Data da Manutencao])
                  EndIf         
          EndIf         
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next VSDGCODIGO
          If Not RetVal
             Then QuitLoop
          EndIf  
        EndWhile 
EndIf   

Moveto "\\Sistemas\\Estoque\\bar_Inat" 
Moveto [Codigo do Item]
Locate VSDGCODIGO
If RetVal
   Then CONT_ARRAY = DynArraySize(ARRAY_CODIGO_BARRA)
        While [Codigo do Item] = VSDGCODIGO  
          CONT_ARRAY = CONT_ARRAY + 1
          ARRAY_CODIGO_BARRA[CONT_ARRAY] = Format("W10",[Tipo Codigo_Barras])+Spaces(1)+
                                           Format("W20",[Codigo de Barras]) +Spaces(1)+
                                           Format("W8","SIM")+Format("D13",[Data da Manutencao]) 
          Skip
          If Eot() Then QuitLoop EnDIf
        EndWhile  
EndIf

Moveto "Itens"
Moveto [Codigo do Item]
Locate VSDGCODIGO
ADICIONA_CODBARRA = False
If INSERIR_CDBAR()
   Then ADICIONA_CODBARRA = True
EndIf   

Moveto "Itens"
Moveto [Codigo do Item]
Locate VSDGCODIGO
If ADICIONA_CODBARRA And [Codigo de Barras]<>"" And AUX_VSDGCODBARRA<>"" And AUX_VSDGTIPOBARRA<>""
   Then COR_MENSAGEM="ALERTA"
        ConfGeral("Deseja alterar o cądigo de barras atual?")
        If Ok="S"
           Then ADICIONA_CODBARRA=True
           Else ADICIONA_CODBARRA=False
        EndIf
EndIf           
           
If ADICIONA_CODBARRA
   Then [Tipo Codigo_Barras] = AUX_VSDGTIPOBARRA
        [Codigo de Barras  ] = AUX_VSDGCODBARRA
        
        Moveto "\\Sistemas\\Estoque\\Iten_bar"
        Moveto [Codigo de Barras]
        Locate AUX_VSDGCODBARRA
        If RetVal
           Then Del
        EndIf
EndIf  
Moveto "Itens"

Release Vars CONT_ARRAY,ARRAY_CODIGO_BARRA,VSDGCODIGO,VSDGNOMCODIGO,AUX_CODBAR,JanelaCdBar,ADICIONA_CODBARRA,AUX_VSDGCODBARRA, 
             AUX_VSDGTIPOBARRA
Release Procs INSERIR_CDBAR ,Tipo_CdBarras,Verifica_CodBar_Itens,Sd_DialgogBarra,Adiciona_CodBar,SD_SDialogCDBAR
