;** Restruct *******************************************************************
;*  Reestruturacao de Tabelas do Sistema                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 12/08/2005 por Davi Pereira Carrano
;Motivo Alteracao: Disparar automatico depois de atualiza‡Æo
;Ultima Alteracao: 03/11/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Modify e depois CopyFamily
;Ultima Alteracao: 28/11/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Lembretes
;Ultima Alteracao: 15/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Run
;Ultima Alteracao: 10/10/2007 por Antonio Marcelo Alve    
;Motivo Alteracao: Adicao de ESC na linha 444
;Ultima Alteracao: 11/12/2007 por Anivel Augusto Rodrigues    
;Motivo Alteracao: Ajustes proc Barra
;Ultima Alteracao: 05/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tabelas Relacionadas
;Ultima Alteracao: 13/01/2010 por Anivel/Cleber
;Motivo Alteracao: Ajustes Rotina restruturacao table com erro
;Ultima Alteracao: 24/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ignorar tabela Struct
;Ultima Alteracao: 26/03/2011 por Karina Andrade
;Motivo Alteracao: Adicionado Rotina GNRE, TAB_INVC, TAB_INVI, OPAF_ECF, OPAF_TOT, OPAF_FP
;Ultima Alteracao: 07/07/2011 Karina Andrade
;Motivo Alteracao: Add Tabelas do Estoque e Vendas
;Ultima Alteracao: 02/08/2011 Bruno Carvalho
;Motivo Alteracao: Add Tabelas Vendas
;Ultima Alteracao: 03/08/2011 Karina Andrade
;Motivo Alteracao: Add Tabela NOTACTR
;Ultima Alteracao: 14/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem de lembrete para o usuario
;Ultima Alteracao: 25/10/2011 por Bruno Carvalho
;Motivo Alteracao: Add Tabela "NotaOCP" e "FaturOCP"
;Ultima Alteracao: 14/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sort Cartoes
;Ultima Alteracao: 14/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes numero de registros da tabela, novo layout, usar caracteres no pspad
;Ultima Alteracao: 02/04/2013 Karina Andrade
;Motivo Alteracao: Ajustes DELETA_ARQUIVO(...TEMP_?)
;Ultima Alteracao: 08/04/2014 Andrey Fillipe
;Motivo Alteracao: Ajustes na restruturacao para o MDFE
;Ultima Alteracao: 22/10/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem enfatizar o reprocessamento !
;Ultima Alteracao: 11/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibi‡Æo aguarde e Nrecords em localiza‡Æo nova, problema indice diferente para nÆo dar erro
;Ultima Alteracao: 26/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rela‡Æo tabelas relacionamentos, tabelas que nÆo reestrutura + BK.., M_ (menus cadastro)
;Ultima Alteracao: 20/04/2016 por Kamila Gomes
;Motivo Alteracao: Alterada Faticom e Notaicom para FaturICM e  NotaICM
;Ultima Alteracao: 22/04/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ exibir relatorio c/ n§ de registro de tabelas criticas acima de 150.000 registros
;Ultima Alteracao: 30/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Retirado Tabela
;Ultima Alteracao: 09/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao Tabela bxautice
;Ultima Alteracao: 14/06/2016 por Bruno Carvalho
;Motivo Alteracao: Removido "NotaOCP" e "FaturOCP" e adicionado "FaturaCC" 
;Ultima Alteracao: 16/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Documentos Referenciados Entradas     
;Ultima Alteracao: 20/07/2016 por Bruno Carvalho
;Motivo Alteracao: InclusÆo da Tabela "RqTrf"
;Ultima Alteracao: 27/07/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado "GpessoaC" e "GpessoaI"
;Ultima Alteracao: 05/08/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes rela‡Æo de tabela de relacionamento, tabela que nÆo ser  reestruturada TEMP*.*  
;Ultima Alteracao: 13/10/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado diret¢rio Fundic2 e tabelas correspondentes
;Ultima Alteracao: 19/10/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Iten_Tec" p/ copiar familia quando processar o estoque
;Ultima Alteracao: 08/11/2016 por Rafael Matos
;Motivo Alteracao: Adicionado diret¢rio Geec e tabelas correspondentes
;Ultima Alteracao: 05/12/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado "ExpedOfC","ExpedOfI","ConfNeC" e "ConfNeI"                              
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog  
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog MensagemRadioButtons()                 
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 23/05/2017 por Rafael Matos
;Motivo Alteracao: Adicionado "Iten_Bar" p/ copiar familia quando processar o estoque
;Ultima Alteracao: 30/05/2017 por Rafael Matos
;Motivo Alteracao: Removido tabelas "Pedido TG", "Pedido TF", "Fatura G", "Fatura TG"
;Ultima Alteracao: 04/07/2017 por Rafael Matos
;Motivo Alteracao: Removido tabela Tempor ria Nota
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao Grava_Logt()
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Removido "NotaCF" e incluido "NotaCC"
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "Notacavl", "Notactr" e "Notaocp"
;Ultima Alteracao: 15/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao montar os diret¢rios a serem reestruturados de acordo com utiliza‡Æo por empresa
;Ultima Alteracao: 28/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes otimizado deletar e copiar arquivos
;Ultima Alteracao: 18/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes otimizado deletar arquivos *.R*/*.f* reports e forms
;Ultima Alteracao: 27/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes fazer relacionamento()
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Iten_Eco" p/ copiar familia quando processar o estoque
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado Grava_Logt() no Grava_LogEx()
;Ultima Alteracao: 03/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado "FatC","FatI" e"FatD" p/ copiar familia quando processar o Ctapag
;Ultima Alteracao: 26/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado "DupRat", MovRat" e "MovCont" p/ copiar familia quando processar o CtaCor
;Ultima Alteracao: 01/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TC
;Ultima Alteracao: 10/01/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado "bar_inat" p/ copiar familia quando processar o estoque
;Ultima Alteracao: 11/02/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel LIST_NAME p/ armazenar o nome da tabela ao executar o scan na LIST
;                  Quando ocorrer um problema na restrutura‡Æo e nÆo for poss¡vel identificar a tabela com problema, conferir pela vari vel LIST_NAME  
;Ultima Alteracao: 17/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado "LPresenC" e "LPresenI" p/ copiar familia quando processar VENDAS
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho
;Motivo Alteracao: Removido "Expedie"
;Ultima Alteracao: 06/06/2019 por Bruno Carvalho
;Motivo Alteracao: Removido "ExpedOfC"
;Ultima Alteracao: 01/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Iten_Loc" p/ copiar familia quando processar o estoque
;Ultima Alteracao: 29/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes fazer relacionamento()
;Ultima Alteracao: 26/03/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado "PedObsC" e "PedLote"
;Ultima Alteracao: 21/07/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado "SdLote", "NotaeIL", "ExpedIL", "FaturaIL" e "NotaIL"
;Ultima Alteracao: 31/07/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado "RqLote"

;*******************************************************************************
;*  Rotina para mostrar as horas                                               *
;*******************************************************************************
Proc Tempohrs(tini)
private tini,hrs,seg,h,m,s, tfim

tfim=ticks()
if tfim<tini
   then seg=(86400000-tini)
        seg=(seg+tfim)/1000
   else seg=(tfim-tini)/1000
endif

h=seg/3600
m=(h-int(h))*60
s=(m-int(m))*60

hrs=AlinhM(StrVal(int(h)),2)+":"+
    AlinhM(StrVal(int(m)),2)+":"+
    AlinhM(StrVal(Round(s,0)),2)
return hrs
Endproc ; (Tempohrs)

;*******************************************************************************
;* MASCARA                                                                     *
;*******************************************************************************
Proc Mascara()
Array Porcent[3]
Array Coluna[3]

@ 04,3 ?? "                 0                       50                        100% "

Frame Single From 05,19 To 07,72
@ 06,03 ?? "        Pastas:"
Limpa_Pasta(06,1)

Frame Single From 07,19 To 09,72
@ 08,03 ?? "     SubPastas:"
Limpa_Pasta(08,2)

Frame Single From 09,19 To 11,72
@ 10,03 ?? "       Tabelas:"
Limpa_Pasta(10,3)

Frame Single From 12,19 To 14,72
@ 12,20 ?? Fill(" ",52)

Frame Single From 15,19 To 17,30
@ 15,20 ?? " Tabela "

Frame Single From 15,31 To 17,43
@ 15,32 ?? " Registros "

Frame Single From 15,63 To 17,72
@ 15,64 ?? " Tempo "
@ 16,64 ?? "00:00:00"

EndProc

Proc Limpa_Pasta(wl,wa)
@ wl,20 ?? Chr(219)+Fill(Chr(176),51)
Porcent[wa]=0
Coluna[wa] =20
EndProc

Proc barra2(wl,wa,vc,vt)
While Porcent[wa]<=Int(((vc/vt)*100))
  Coluna[wa]=Coluna[wa]+1
  @ wl, Coluna[wa] ?? Chr(219)
  Porcent[wa]=Porcent[wa]+2
EndWhile
EndProc    ; (Mascara)

;*******************************************************************************
; Rotina Restruturacao                                                         *
;*******************************************************************************
Proc Reestrutura()
private tabok, comando

tini=ticks()
ClearAll
Mascara()
Limpa_Pasta(10,1)
@ 06,8 ?? Format("W2,AR",StrVal((PASTA_FIM+1)-PASTA_INI))
For wi From PASTA_INI to PASTA_FIM
  Aguarde("Aguarde, Checando pasta")
  If Diretorio[wi]="\\SISTEMAS\\UTILITAR" Then Loop EndIf
  If OPTIT="Fechames"
     Then MontaSubDiretorios()
     Else wcs=1
  EndIf
  Barra2(06,1,wi,PASTA_FIM)
  Limpa_Pasta(08,2)

  For wis From 1 to wcs
    Aguarde("Aguarde, Checando pasta "+Diretorio[wi])
    Limpa_Pasta(10,3)
    
    If OPTIT="Fechames"
       Then Caminho=Diretorio[wi]+"\\FECHAMES\\"+SubDiretorio[wis]
            @ 08,5 ?? Format("W2,AR",StrVal(wcs))
            Barra2(08,2,wis,wcs)
            @ 12,20 ?? Completa(" Pasta ["+StrVal(wi)+"] * SubPasta ["+StrVal(wis)+"] ",52,Chr(196))
       Else Caminho=Diretorio[wi]
            @ 5,5 ?? spaces(2)
            @ 12,20 ?? Completa(" Pasta ["+StrVal(wi)+"] ",52,Chr(196))
    EndIf
    
    @ 13,20 ?? Completa(Caminho,52," ")
    If DirExists(Caminho)=0 Then Loop EndIf

    SetDir Caminho

    If IsTable("List") Then Delete "List" EndIf

    If OPTIT<>"Fechames"
       Then 
            Aguarde("Refazendo indices")
            FileWrite        PrivDir()+"cmddos.bat"  From "del *.Y* >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From "del *.X* >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From "del *.F* >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From "del *.R* >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From "del Temp_*.* >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From "del *.Bak >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From "del "+SubStr(Directory(),1,2)+"\\BASE"+Diretorio[wi]+"\\Temp_*.* >nul \n"

            Switch
              Case IsFile("c:\\windows\\system32\\Xcopy.exe"): comando="c:\\windows\\system32\\"
              Case IsFile("c:\\vise\\util\\Xcopy.exe")       : comando="c:\\vise\\util\\"
              OtherWise                                      : comando=""
            EndSwitch
            comando=comando+"Xcopy "
            FileWrite append PrivDir()+"cmddos.bat"  From comando+"\\BASE"+Diretorio[wi]+"\\*.Y* /y >nul \n"
            FileWrite append PrivDir()+"cmddos.bat"  From comando+"\\BASE"+Diretorio[wi]+"\\*.X* /y >nul \n"
            @ 22,00 Run NoRefresh PrivDir()+"cmddos.bat"

            If Diretorio[wi]="\\SISTEMAS\\CADASTRO"
               Then Empty("C_ClieC")
                    Empty("C_ClieCQ")
                    Empty("C_ClieP")
                    Empty("C_ClieAV")
                    Empty("C_ClieV")
                    Empty("C_ClieTC")
            EndIf
            If Diretorio[wi]="\\SISTEMAS\\ESTOQUE"
               Then Empty("FoMaster")
                    Empty("PrMaster")
                    Empty("SdMaster")
            EndIf
            
            If Diretorio[wi]="\\SISTEMAS\\CTACOR"
               Then Empty("SdMaster")
            EndIf
            
    EndIf
    {Tools} {Info} {Inventory} {Tables}
    If OPTIT="Completo"
       Then TypeIn "\\BASE"+Diretorio[wi] Enter
       Else {}
    EndIf

    If Not IsTable("List") Or
       IsEmpty("List")
       Then Loop
    EndIf


    For cont2 From 1 To 2
      Limpa_Pasta(10,3)
  
      primeiravez=true
  
      NR = NRecords("List")
      @ 10,7 ?? Format("W2,AR",StrVal(NR))
      @ 10,7
      Scan
  
        LimpaRodape(0)
        If cont2=1
           Then
                @ 15,33 ?? "          "
                Aguarde("[1/3] Aguarde, reestruturando tabelas")
           Else 
                @ 15,33 ?? "Registros "
                If primeiravez
                   then Aguarde("[2/3] Aguarde, Verificando relacionamentos das tabelas")
                   Else Aguarde("[3/3] Aguarde, Verificando fam¡lias das tabelas")
                 endIf
        EndIf
         
        LIST_NAME = [List->Name] 
        tabok=true
        if [List->Name]= "List"                     then tabok=false endif
        if [List->Name]= "Systable"                 then tabok=false endif
        if [List->Name]= "Struct"                   then tabok=false endif
        if [List->Name]= "Tools"                    then tabok=false endif
        if Search("BKP",Upper([List->Name]))>0      then tabok=false endif
        if substr(Upper([List->Name]),1,2)= "BK"    then tabok=false endif
        if SubStr(Upper([List->Name]),1,3)= "RM_"   then tabok=false endif
        if SubStr(Upper([List->Name]),1,3)= "RC_"   then tabok=false endif
        if SubStr(Upper([List->Name]),1,3)= "GR_"   then tabok=false endif
        if SubStr(Upper([List->Name]),1,4)= "TEMP"  then tabok=false endif
        if SubStr(Upper([List->Name]),1,2)= "M_" 
           and Diretorio[wi]="\\SISTEMAS\\CADASTRO" then tabok=false endif
        
        if tabok
           then 
                @ 16,32 ?? "          "
                @ 16,20 ?? Completa([Name],8," ")
                Aguarde(LIST_NAME)
    
                wsrestr=false
    
                For llk from 1 to 4
                  Lock [List->Name] FL
                  If RetVal
                     Then wsrestr=true
                          Quitloop
                  EndIf
    
               ;;;If Not RetVal
               ;;;   Then If Rebuild()
               ;;;           Then Lock [List->Name] FL
               ;;;                If Not RetVal
               ;;;                   Then ErroValid()
               ;;;                   Else QuitLoop
               ;;;                EndIf
               ;;;           Else ErroValid()
               ;;;        EndIf
               ;;;   Else QuitLoop
               ;;;EndIf
    
                EndFor
                                
                If wsrestr
                   Then if cont2=1
    											 Then
                                Switch
                                  Case IsTable([List->Name]):
                                     If NKeyFields([List->Name])<>NKeyFields("\\BASE"+Diretorio[wi]+"\\"+[List->Name])
                                        Then Reestruturar([List->Name])
                                             {Tools} {Copy} {Table} TypeIn "\\BASE"+Diretorio[wi]+"\\"+[List->Name] Enter {Temp_Key}
                                             Empty("Temp_key")
                                             Add [List->Name] "Temp_key"
                                             ClearImage
                                             Rename "Temp_key" [List->Name]
                                     EndIf
    
                                     Reestruturar([List->Name])
                                  Case IsFile([List->Name]+".DB"):
                                     Reestruturar([List->Name])
                                     {Tools} {Copy} {Table} TypeIn "\\BASE"+Diretorio[wi]+"\\"+[List->Name] Enter {Temp_Key}
                                     Empty("Temp_key")
                                     Add [List->Name] "Temp_key"
                                     ClearImage
                                     Rename "Temp_key" [List->Name]
    
                                     Reestruturar([List->Name])
                                  OtherWise:
                                     {Tools} {Copy} {Table} TypeIn "\\BASE"+Diretorio[wi]+"\\"+[List->Name] Enter
                                     TypeIn [List->Name] Enter                                
                                EndSwitch
    
                           Else 
                                @ 16,32 ?? Format("W10,EIC,AR",NRecords([Name]))
                                If primeiravez
                                   then primeiravez=false
                                        
                                        Relacionamento()
                                        
                                EndIf
                                Copia_Familia(Diretorio[wi],[List->Name])
                        EndIf
    
                        UnLock [List->Name] FL
                EndIf
        EndIf
    
        @ 16,64 ?? Tempohrs(tini)
        Barra2(10,3,Recno(),NR)
      EndScan
    EndFor
    ClearAll
    Delete "List"

    @ 16,20 ?? Completa("Ok !",8," ")

  EndFor
  
EndFor
ClearAll
LimpAguarde()
EndProc    ; (Reestrutura)


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Relacionamento()

Switch
  Case Diretorio[wi]=Upper("\\Sistemas\\cadastro"):
       Sort "Cartoes" On "Nome do Cartao"
       Moveto "Cartoes" ClearImage

       Copia_Familia(Diretorio[wi],"c_clieav")
       Copia_Familia(Diretorio[wi],"c_cliecp")
       Copia_Familia(Diretorio[wi],"c_cliep")
       Copia_Familia(Diretorio[wi],"c_cliev")
       Copia_Familia(Diretorio[wi],"c_cliec")
       
       Copia_Familia(Diretorio[wi],"GpessoaI")
       Copia_Familia(Diretorio[wi],"GpessoaC")
       
       Copia_Familia(Diretorio[wi],"Destmsg")
       Copia_Familia(Diretorio[wi],"Destexp")
       Copia_Familia(Diretorio[wi],"Destaut")
       Copia_Familia(Diretorio[wi],"Destinfo")
       Copia_Familia(Diretorio[wi],"Destlmk")
       Copia_Familia(Diretorio[wi],"Destobs")
       Copia_Familia(Diretorio[wi],"Destrel")
       Copia_Familia(Diretorio[wi],"End_cob")
       Copia_Familia(Diretorio[wi],"Fichacli")
       Copia_Familia(Diretorio[wi],"Destinat")

       Copia_Familia(Diretorio[wi],"Repreobs")
       Copia_Familia(Diretorio[wi],"Represen")

  Case Diretorio[wi]=Upper("\\Sistemas\\cheqrec"):

       Copia_Familia(Diretorio[wi],"BordChi")
       Copia_Familia(Diretorio[wi],"BordChtx")
       Copia_Familia(Diretorio[wi],"BordChc")

       Copia_Familia(Diretorio[wi],"Chequei")
       Copia_Familia(Diretorio[wi],"Chequec")

       Copia_Familia(Diretorio[wi],"Mediai")
       Copia_Familia(Diretorio[wi],"Mediac")

  Case Diretorio[wi]=Upper("\\Sistemas\\compras"):

       Copia_Familia(Diretorio[wi],"Oci")
       Copia_Familia(Diretorio[wi],"Ocv")
       Copia_Familia(Diretorio[wi],"Occ")

  Case Diretorio[wi]=Upper("\\Sistemas\\ctacor"):

       Copia_Familia(Diretorio[wi],"Bxautice")
       Copia_Familia(Diretorio[wi],"Bxautie")
       Copia_Familia(Diretorio[wi],"Bxautip")
       Copia_Familia(Diretorio[wi],"Bxautir")
       Copia_Familia(Diretorio[wi],"Bxautis")
       Copia_Familia(Diretorio[wi],"Bxautt")
       Copia_Familia(Diretorio[wi],"Bxautts")
       Copia_Familia(Diretorio[wi],"Bxautc")
       
       Copia_Familia(Diretorio[wi],"MovRat")
       Copia_Familia(Diretorio[wi],"MovCont")
       
       Copia_Familia(Diretorio[wi],"Saldcont")
       Copia_Familia(Diretorio[wi],"Sdmaster")

  Case Diretorio[wi]=Upper("\\Sistemas\\ctapag"):

       Copia_Familia(Diretorio[wi],"Altconti")
       Copia_Familia(Diretorio[wi],"Altcontc")

       Copia_Familia(Diretorio[wi],"Bxauti")
       Copia_Familia(Diretorio[wi],"Bxautt")
       Copia_Familia(Diretorio[wi],"Bxautc")

       Copia_Familia(Diretorio[wi],"Mediai")
       Copia_Familia(Diretorio[wi],"Mediac")
       
       Copia_Familia(Diretorio[wi],"FatV")
       Copia_Familia(Diretorio[wi],"FatD")
       Copia_Familia(Diretorio[wi],"FatC")

       Copia_Familia(Diretorio[wi],"Titbaixa")
       Copia_Familia(Diretorio[wi],"Titcheq")
       Copia_Familia(Diretorio[wi],"Titnota")
       Copia_Familia(Diretorio[wi],"Titrat")
       Copia_Familia(Diretorio[wi],"Titulos")

  Case Diretorio[wi]=Upper("\\Sistemas\\ctarec"):

       Copia_Familia(Diretorio[wi],"Altboli")
       Copia_Familia(Diretorio[wi],"Altbolc")

       Copia_Familia(Diretorio[wi],"Alttiti")
       Copia_Familia(Diretorio[wi],"Alttitc")

       Copia_Familia(Diretorio[wi],"Bxauti")
       Copia_Familia(Diretorio[wi],"Bxautt")
       Copia_Familia(Diretorio[wi],"Bxautc")

       Copia_Familia(Diretorio[wi],"Dupbaixa")
       Copia_Familia(Diretorio[wi],"Dupnotas")
       Copia_Familia(Diretorio[wi],"DupRat")
       Copia_Familia(Diretorio[wi],"Duplic")

       Copia_Familia(Diretorio[wi],"Mediai")
       Copia_Familia(Diretorio[wi],"Mediac")

  Case Diretorio[wi]=Upper("\\Sistemas\\estoque"):

       Copia_Familia(Diretorio[wi],"Itens_cb")
       Copia_Familia(Diretorio[wi],"Iten_bar")
       Copia_Familia(Diretorio[wi],"Iten_com")
       Copia_Familia(Diretorio[wi],"Iten_cor")
       Copia_Familia(Diretorio[wi],"Iten_eco")
       Copia_Familia(Diretorio[wi],"Iten_exc")
       Copia_Familia(Diretorio[wi],"Iten_loc")
       Copia_Familia(Diretorio[wi],"Iten_tec")
       Copia_Familia(Diretorio[wi],"bar_inat")
       Copia_Familia(Diretorio[wi],"Itens")

       Copia_Familia(Diretorio[wi],"Notaer")
       Copia_Familia(Diretorio[wi],"Notaecp")
       Copia_Familia(Diretorio[wi],"Notaecv")
       Copia_Familia(Diretorio[wi],"Notaei")
       Copia_Familia(Diretorio[wi],"Notaeia")
       Copia_Familia(Diretorio[wi],"NotaeIL")
       Copia_Familia(Diretorio[wi],"Notaec")

       Copia_Familia(Diretorio[wi],"Cotacao")
       Copia_Familia(Diretorio[wi],"Prmaster")

       Copia_Familia(Diretorio[wi],"Sdmaster")
       Copia_Familia(Diretorio[wi],"Sdestq")
       Copia_Familia(Diretorio[wi],"SdLote")

       Copia_Familia(Diretorio[wi],"Rqitem")
       Copia_Familia(Diretorio[wi],"Rqitemg")
       Copia_Familia(Diretorio[wi],"Rqmatpri")
       Copia_Familia(Diretorio[wi],"Rqtrf")
       Copia_Familia(Diretorio[wi],"RqLote")
       Copia_Familia(Diretorio[wi],"Rqcabeca")

       Copia_Familia(Diretorio[wi],"Tab_InvI")
       Copia_Familia(Diretorio[wi],"Tab_InvC")
       
       Copia_Familia(Diretorio[wi],"ConfNeC")
       Copia_Familia(Diretorio[wi],"ConfNeI")
 
  Case Diretorio[wi]=Upper("\\Sistemas\\faccao"):

       Copia_Familia(Diretorio[wi],"Cfacp")
       Copia_Familia(Diretorio[wi],"Cfacri")
       Copia_Familia(Diretorio[wi],"Cfacrig")
       Copia_Familia(Diretorio[wi],"Cfacc")

       Copia_Familia(Diretorio[wi],"Pcfacri")
       Copia_Familia(Diretorio[wi],"Pcfacrig")
       Copia_Familia(Diretorio[wi],"Pcfac")

       Copia_Familia(Diretorio[wi],"Pfacri")
       Copia_Familia(Diretorio[wi],"Pfacrig")
       Copia_Familia(Diretorio[wi],"Pfac")

       Copia_Familia(Diretorio[wi],"Rfacri")
       Copia_Familia(Diretorio[wi],"Rfacrig")
       Copia_Familia(Diretorio[wi],"Rfacrir")
       Copia_Familia(Diretorio[wi],"Rfac")
       
  Case Diretorio[wi]=Upper("\\Sistemas\\fundic2"):
       Copia_Familia(Diretorio[wi],"Progfp")
       Copia_Familia(Diretorio[wi],"Progfri")
       Copia_Familia(Diretorio[wi],"Progfrm")
       Copia_Familia(Diretorio[wi],"Progfc")
       Copia_Familia(Diretorio[wi],"Progfpp")
       Copia_Familia(Diretorio[wi],"Progfcp")
       Copia_Familia(Diretorio[wi],"Progfcv")
       
  Case Diretorio[wi]=Upper("\\Sistemas\\Geec"):
  
       Copia_Familia(Diretorio[wi],"TpContra")
       Copia_Familia(Diretorio[wi],"MsgRecib")
       Copia_Familia(Diretorio[wi],"GrpVenc")
       Copia_Familia(Diretorio[wi],"Contrato")
       Copia_Familia(Diretorio[wi],"Cobtmpc")
       Copia_Familia(Diretorio[wi],"Cobtmpi")
       Copia_Familia(Diretorio[wi],"Contratv")       

  Case Diretorio[wi]=Upper("\\Sistemas\\Mdfe"):

       Copia_Familia(Diretorio[wi],"Mdfe_mdd")
       Copia_Familia(Diretorio[wi],"Mdfe_rvc")
       Copia_Familia(Diretorio[wi],"Mdfe_rvp")
       Copia_Familia(Diretorio[wi],"Mdfe_rvr")
       Copia_Familia(Diretorio[wi],"Mdfe_uc")
       Copia_Familia(Diretorio[wi],"Mdfe_ut")
       Copia_Familia(Diretorio[wi],"Mdfe_C")

  Case Diretorio[wi]=Upper("\\Sistemas\\producao"):

       Copia_Familia(Diretorio[wi],"Formulai")
       Copia_Familia(Diretorio[wi],"Formulac")


  Case Diretorio[wi]=Upper("\\Sistemas\\vendas"):

       Copia_Familia(Diretorio[wi],"Accarrgf")
       Copia_Familia(Diretorio[wi],"Accarrgi")
       Copia_Familia(Diretorio[wi],"Accarrgv")
       Copia_Familia(Diretorio[wi],"Accarrgc")

       Copia_Familia(Diretorio[wi],"Agenci")
       Copia_Familia(Diretorio[wi],"Agencc")

       Copia_Familia(Diretorio[wi],"Balcxi")
       Copia_Familia(Diretorio[wi],"Balcxc")

       Copia_Familia(Diretorio[wi],"Contfrtn")
       Copia_Familia(Diretorio[wi],"Contfrtc")

       Copia_Familia(Diretorio[wi],"Correioi")
       Copia_Familia(Diretorio[wi],"Correioc")

       Copia_Familia(Diretorio[wi],"Dupi")
       Copia_Familia(Diretorio[wi],"Dupnf")
       Copia_Familia(Diretorio[wi],"Dupc")

       Copia_Familia(Diretorio[wi],"Ecf_s")
       Copia_Familia(Diretorio[wi],"Ecf_t")
       Copia_Familia(Diretorio[wi],"Ecf_c")

       Copia_Familia(Diretorio[wi],"Expedi")
       Copia_Familia(Diretorio[wi],"Expediq")
       Copia_Familia(Diretorio[wi],"Expedtg")
       Copia_Familia(Diretorio[wi],"ExpedOfi")
       Copia_Familia(Diretorio[wi],"ExpedIL")
       Copia_Familia(Diretorio[wi],"Expedc")
       
       Copia_Familia(Diretorio[wi],"Faturicm")
       Copia_Familia(Diretorio[wi],"Faturai")
       Copia_Familia(Diretorio[wi],"Faturaic")
       Copia_Familia(Diretorio[Wi],"Faturaid")
       Copia_Familia(Diretorio[wi],"Faturaig")
       Copia_Familia(Diretorio[wi],"Faturacc")
       Copia_Familia(Diretorio[wi],"Faturar")
       Copia_Familia(Diretorio[wi],"Faturav")
       Copia_Familia(Diretorio[wi],"FaturaIL")
       Copia_Familia(Diretorio[wi],"Faturiad")
       Copia_Familia(Diretorio[wi],"Faturidd")
       Copia_Familia(Diretorio[wi],"Faturac")
       
       Copia_Familia(Diretorio[wi],"Fnotai")
       Copia_Familia(Diretorio[wi],"Fnotav")
       Copia_Familia(Diretorio[wi],"Fnotac")
       
       Copia_Familia(Diretorio[wi],"Notai")
       Copia_Familia(Diretorio[wi],"Notaiad")
       Copia_Familia(Diretorio[wi],"Notaic")
       Copia_Familia(Diretorio[wi],"Notaicm")
       Copia_Familia(Diretorio[wi],"Notaidd")
       Copia_Familia(Diretorio[wi],"Notaidv")
       Copia_Familia(Diretorio[wi],"Notaig")
       Copia_Familia(Diretorio[wi],"Notacc")
       Copia_Familia(Diretorio[wi],"Notar")
       Copia_Familia(Diretorio[wi],"Notav")
       Copia_Familia(Diretorio[wi],"NotaIL")
       Copia_Familia(Diretorio[wi],"Notac")
       
       Copia_Familia(Diretorio[wi],"Notas2i")
       Copia_Familia(Diretorio[wi],"Notas2v")
       Copia_Familia(Diretorio[wi],"Notas2c")

       Copia_Familia(Diretorio[wi],"Of_nfed")
       Copia_Familia(Diretorio[wi],"Of_nfei")
       Copia_Familia(Diretorio[wi],"Of_nfev")
       Copia_Familia(Diretorio[wi],"Of_nfec")

       Copia_Familia(Diretorio[wi],"Opaf_fp")
       Copia_Familia(Diretorio[wi],"Opaf_ref")
       Copia_Familia(Diretorio[wi],"Opaf_tot")
       Copia_Familia(Diretorio[wi],"Opaf_us")
       Copia_Familia(Diretorio[wi],"Opaf_ecf")

       Copia_Familia(Diretorio[wi],"Orcai")
       Copia_Familia(Diretorio[wi],"Orcacpg")
       Copia_Familia(Diretorio[wi],"Orcac")

       Copia_Familia(Diretorio[wi],"Pedidog")
       Copia_Familia(Diretorio[wi],"Pedidoi")
       Copia_Familia(Diretorio[wi],"Pedidov")
       Copia_Familia(Diretorio[wi],"Pedidoc")
       Copia_Familia(Diretorio[wi],"Pedidogt")
       Copia_Familia(Diretorio[wi],"PedObsC")
       Copia_Familia(Diretorio[wi],"PedLote")

       Copia_Familia(Diretorio[wi],"Pendenti")
       Copia_Familia(Diretorio[wi],"Pendentc")

       Copia_Familia(Diretorio[wi],"Tbprcit")
       Copia_Familia(Diretorio[wi],"Tbprcli")
       Copia_Familia(Diretorio[wi],"Tbprcpg")
       Copia_Familia(Diretorio[wi],"Tbprite")
       Copia_Familia(Diretorio[wi],"Tbprrep")
       Copia_Familia(Diretorio[wi],"Tbprrit")
       Copia_Familia(Diretorio[wi],"Tbprcab")

       Copia_Familia(Diretorio[wi],"Tccompdd")
       Copia_Familia(Diretorio[wi],"Tcdescto")
       Copia_Familia(Diretorio[wi],"Tcmarcas")

       Copia_Familia(Diretorio[wi],"Trcompdd")
       Copia_Familia(Diretorio[wi],"Trdescto")
       Copia_Familia(Diretorio[wi],"Trvender")
       
       Copia_Familia(Diretorio[wi],"LPresenC")
       Copia_Familia(Diretorio[wi],"LPresenI")

;  Case Diretorio[wi]=Upper("\\Sistemas\\posto"):
;
;       Copia_Familia(Diretorio[wi],"Abast_p")
;       Copia_Familia(Diretorio[wi],"Abast_c")
;
;  Case Diretorio[wi]=Upper("\\Sistemas\\os2"):
;
;       Copia_Familia(Diretorio[wi],"Cont_i")
;       Copia_Familia(Diretorio[wi],"Cont_c")
;
;       Copia_Familia(Diretorio[wi],"Cotac_i")
;       Copia_Familia(Diretorio[wi],"Cotac_c")
;
;       Copia_Familia(Diretorio[wi],"Ficha_i")
;       Copia_Familia(Diretorio[wi],"Ficha_d")
;       Copia_Familia(Diretorio[wi],"Ficha_c")
;
;       Copia_Familia(Diretorio[wi],"Oscons")
;       Copia_Familia(Diretorio[wi],"Osequip")
;       Copia_Familia(Diretorio[wi],"Osserv")
;       Copia_Familia(Diretorio[wi],"Ossolic")
;       Copia_Familia(Diretorio[wi],"Osvenc")
;       Copia_Familia(Diretorio[wi],"Osvisita")
;       Copia_Familia(Diretorio[wi],"Oscab")
;
;  Case Diretorio[wi]=Upper("\\Sistemas\\os"):
;
;       Copia_Familia(Diretorio[wi],"Oscons")
;       Copia_Familia(Diretorio[wi],"Osite")
;       Copia_Familia(Diretorio[wi],"Osserv")
;       Copia_Familia(Diretorio[wi],"Ostmg")
;       Copia_Familia(Diretorio[wi],"Osven")
;       Copia_Familia(Diretorio[wi],"Oscab")
;
;  Case Diretorio[wi]=Upper("\\Sistemas\\oficina"):
;
;       Copia_Familia(Diretorio[wi],"Osi")
;       Copia_Familia(Diretorio[wi],"Osiav")
;       Copia_Familia(Diretorio[wi],"Osick")
;       Copia_Familia(Diretorio[wi],"Osimo")
;       Copia_Familia(Diretorio[wi],"Osipc")
;       Copia_Familia(Diretorio[wi],"Osc")
;
;  Case Diretorio[wi]=Upper("\\Sistemas\\latcinio"):
;
;       Copia_Familia(Diretorio[wi],"Eli")
;       Copia_Familia(Diretorio[wi],"Elc")
;
;       Copia_Familia(Diretorio[wi],"Recibocc")
;       Copia_Familia(Diretorio[wi],"Reciboci")
;       Copia_Familia(Diretorio[wi],"Reciboc")
;
;       Copia_Familia(Diretorio[wi],"Reciboe")

  Case Diretorio[wi]=Upper("\\Sistemas\\curtume"):

       Copia_Familia(Diretorio[wi],"Remolh_i")
       Copia_Familia(Diretorio[wi],"Remolh_o")
       Copia_Familia(Diretorio[wi],"Remolh_p")
       Copia_Familia(Diretorio[wi],"Remolh_s")
       Copia_Familia(Diretorio[wi],"Remolh_c")

       Copia_Familia(Diretorio[wi],"Curtim_i")
       Copia_Familia(Diretorio[wi],"Curtim_p")
       Copia_Familia(Diretorio[wi],"Curtim_c")

       Copia_Familia(Diretorio[wi],"Recurt_i")
       Copia_Familia(Diretorio[wi],"Recurt_w")
       Copia_Familia(Diretorio[wi],"Recurt_c")

       Copia_Familia(Diretorio[wi],"Acabam_i")
       Copia_Familia(Diretorio[wi],"Acabam_p")
       Copia_Familia(Diretorio[wi],"Acabam_s")
       Copia_Familia(Diretorio[wi],"Acabam_c")

EndSwitch

EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Copia_Familia(caminho,tabela)
Private caminho,tabela

{Tools} {Copy} {JustFamily} TypeIn "\\BASE"+caminho+"\\"+tabela Enter TypeIn tabela Enter
If MenuChoice()="Cancel"
   Then Down
        If MenuChoice()="Replace"
           Then {Replace}
           Else {Cancel}
                Esc Esc Esc Esc
                MSG="Tabela [ "+tabela+" ] em [ "+caminho+" ], //"
                MSG=MSG+"com estrutura diferente !// //"
                MSG=MSG+"Anote o nome da tabela e pasta !//"
                MSG=MSG+"Depois entre em contato com o suporte Ok !"
                Mensagem(MSG)
                CONT_TABLE_ERROR =CONT_TABLE_ERROR + 1
        Endif
EndIf
Esc Esc Esc Esc
EndProc

Proc Reestruturar(tabela)
Private tabela

{Modify} {Restructure} TypeIn tabela Enter 
If MenuChoice()="Cancel" Then {Replace} EndIf
Do_It! ClearImage

Endproc

;*******************************************************************************
;*  Reestrutura Tabela pelo Tutility                                           *
;*******************************************************************************
Proc Rebuild()
If IsTable("Bkp001")
   Then Delete "Bkp001"
EndIf

Caminho_TUtility="C:\\Vise\\Pdox45\\"
If Not IsFile(Caminho_TUtility+"Tutility.exe")
   Then Caminho_TUtility="\\Pdox45\\"
        If Not IsFile(Caminho_TUtility+"Tutility.exe")
           Then Msg="Aten‡„o! N„o foi possivel executar o Tutility.//"+
                    "Se voce estvier executando a reestrutura‡„o numa esta‡„o de trabalho,//"+
                    "Por Favor execute-a no Servidor. Se persistir esta mensagem entre em Contato com o Suporte."
                Mensagem(Msg)
                Return False
        EndIf
EndIf
TabelaBkp="Bkp001"

Executa_Programa(Caminho_TUtility+"Tutility -password=\"*********\" -Rebuild "+[List->Name]+ " " +TabelaBkp+ " -Pdox40")

If IsTable(TabelaBkp)
   Then Delete TabelaBkp
        Return True
   Else Return False
EndIf

EndProc    ; (Rebuild)

;*******************************************************************************
; Rotina Procura SubDiretorios                                                 *
;*******************************************************************************
Proc MontaSubDiretorios()
Private AnoMesA, WWII

Aguarde("Aguarde, Verificando SubPastas")

DynArray SubDiretorio[]
If DirExists(Diretorio[wi]+"\\FECHAMES")=0
   Then wcs=1
        SubDiretorio[wcs]=""
        Return
EndIf

;---- Carrega Lista Diretorios -------------------------------------------------
Lista_Diretorio(SubStr(Directory(),1,2)+Diretorio[wi]+"\\FECHAMES")
wcs=0
For wwii From 1 to DynArraySize(Array_Lista_Diretorios)
  AnoMesA=NumVal(SubStr(Array_Lista_Diretorios[wwii],1,4)+
                 SubStr(Array_Lista_Diretorios[wwii],6,2))
  If AnoMesA>=AnoMesI And AnoMesA<=AnoMesF
     Then wcs=wcs+1
          SubDiretorio[wcs]=Array_Lista_Diretorios[wwii]
  EndIf
EndFor

Release Vars Array_Lista_Diretorios
;-------------------------------------------------------------------------------

EndProc    ; (MontaSubDiretorios)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc Seleciona_Fechames()
While True
 Janela_Show=2

 ShowDialog "Seleciona Per¡odo p/ op‡„o Fechames" Proc "SD_Dialog"
   Trigger "OPEN","ARRIVE"
   Key "ENTER","ESC"
    @ 03,16 Height 07 Width 45

   Label @ 01,02 "Inicial" For "I_PeriodoI"
   Accept @ 01,11 Width 10 "A7" Picture "##.####" Tag "I_PeriodoI" to VSD_I_PeriodoI

   Label @ 01,23 "Final" For "I_PeriodoF"
   Accept @ 01,30 Width 10 "A7" Picture "##.####" Tag "I_PeriodoF" to VSD_I_PeriodoF

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

 EndDialog
 If Not RetVal
    Then Return False
 EndIf

 If IsBlank(VSD_I_PeriodoI) Or
    IsBlank(VSD_I_PeriodoF)
    Then Mensagem("Periodo Inv lido !")
         Loop
 EndIf
 If NumVal(SubStr(VSD_I_PeriodoI,1,2))<1  Or
    NumVal(SubStr(VSD_I_PeriodoF,1,2))<1  Or
    NumVal(SubStr(VSD_I_PeriodoI,1,2))>12 Or
    NumVal(SubStr(VSD_I_PeriodoF,1,2))>12
    Then Mensagem("Mes Inv lido")
         Loop
 EndIf

 AnoMesI=NumVal(SubStr(VSD_I_PeriodoI,4,4)+SubStr(VSD_I_PeriodoI,1,2))
 AnoMesF=NumVal(SubStr(VSD_I_PeriodoF,4,4)+SubStr(VSD_I_PeriodoF,1,2))

 If AnoMesF<AnoMesI
    Then Mensagem("Periodo final menor que periodo inicial !")
         Loop
 EndIf
 QuitLoop
EndWhile
Return True
EndProc      ; (Seleciona_Fechames)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"
   Then AoCriarShowDialog()
        If IsAssigned(RESTRUTURACAO_AUTOMATICA)
           Then AcceptDialog
        EndIf
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="Opcao"            : Campo="NO"
            Case Campo="TG_INICIAL"       : Campo="Opcao"
            Case Campo="TG_FINAL"         : Campo="TG_INICIAL"
            Case (Campo="YES" Or Campo="NO") And Janela_Show=1 : Campo="Opcao"

            Case Campo="I_PeriodoI"       : Campo="NO"
            Case Campo="I_PeriodoF"       : Campo="I_PeriodoI"
            Case (Campo="YES" Or Campo="NO") And Janela_Show=2 : Campo="I_PeriodoI"
          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="Opcao"      : Campo="TG_INICIAL"
                    Case Campo="TG_INICIAL" : Campo="TG_FINAL"
                         PASTA_INI=ControlValue("TG_INICIAL")
                    Case Campo="TG_FINAL"   : Campo="YES"
                         PASTA_FIM=ControlValue("TG_FINAL")

                    Case Campo="I_PeriodoI" : Campo="I_PeriodoF"
                         VSD_I_PeriodoI=ControlValue("I_PeriodoI")
                    Case Campo="I_PeriodoF" : Campo="YES"
                         VSD_I_PeriodoF=ControlValue("I_PeriodoF")
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="Opcao":
       MensagemRadioButtons()
  Case Campo="TG_INICIAL":
       MSG_CAMPO="Informe o n£mero da Pasta Inicial"
  Case Campo="TG_FINAL":
       MSG_CAMPO="Informe o n£mero da Pasta Final"
  Case Campo="TG_PASTAS":
       MSG_CAMPO="."
  Case Campo="I_PeriodoI":
       MSG_CAMPO="Informe o Mes/Ano Inicial (MM.AAAA)"
  Case Campo="I_PeriodoF":
       MSG_CAMPO="Informe o Mes/Ano Final (MM.AAAA)"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc      ; (SD_Dialog)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
LimpAguarde()
SYS_VALOR()
wc=0
If Not IsAssigned(RESTRUTURACAO_AUTOMATICA)
   Then COR_MENSAGEM="1"
        MSG=    "Se vocˆ vai efetuar a reestrutura‡„o por  qualquer  motivo//"
        MSG=MSG+"de falha que tenha ocorrido, siga os seguinte passos:     // //"
        MSG=MSG+"1 - Reinicie ou fa‡a logoff das esta‡”es e do sevidor para//"
        MSG=MSG+"    que e o VISEBOOT elimie poss¡veis arquivos de controle//"
        MSG=MSG+"    *.NET e *.LCK do Sistema !                            // //"
        MSG=MSG+"2 - No caso de falta de energia el‚trica, execute primeiro//"
        MSG=MSG+"    o SCANDISK (Verifica‡Æo de erros do disco) no servidor//"
        MSG=MSG+"    de dados para corrigir eventuais erros de grava‡Æo!   // //"
        MSG=MSG+"3 - Acesse o sistema novamente e execute a REESTRUTURA€¶O!"
        Mensagem(MSG)
        Release Vars COR_MENSAGEM
EndIf

;---- Carrega Lista Diretorios -------------------------------------------------
DynArray Array_Diretorios[]
DynArray        Diretorio[]
DynArray    Aux_Diretorio[]

Lista_Diretorio(SubStr(Directory(),1,2)+"\\Sistemas")

;---- Ajusta Diretporios para visualiza‡Æo conforme cliente --------------------
wr = 0
While wc<DynArraySize(Array_Lista_Diretorios)
  wc = wc + 1
  Switch
    Case SubStr(Upper(Array_Lista_Diretorios[wc]),1,3) = "NAO"                          : Loop
    Case Upper(Array_Lista_Diretorios[wc]) = "COBRANCA" And SYS_CODIGO_CLIENTE<>"0092"  : Loop 
    Case Upper(Array_Lista_Diretorios[wc]) = "CURTUME"  And SYS_CODIGO_CLIENTE<>"0053"  : Loop 
    Case Upper(Array_Lista_Diretorios[wc]) = "FACCAO"   And SYS_CLIENTE_CONFEC=""       : Loop 
    Case Upper(Array_Lista_Diretorios[wc]) = "FUNDIC2"  And SYS_CODIGO_CLIENTE<>"0377"  : Loop
    Case Upper(Array_Lista_Diretorios[wc]) = "FUNDICAO"                                 : Loop ;NÆo h  clientes utilizando 
    Case Upper(Array_Lista_Diretorios[wc]) = "GEEC"     And SYS_CODIGO_CLIENTE<>"0371"  : Loop
    Case Upper(Array_Lista_Diretorios[wc]) = "VISITA"   And SYS_CODIGO_CLIENTE<>"0112"  : Loop 
  EndSwitch  
  wr=wr+1
  Aux_Diretorio[wr] = Array_Lista_Diretorios[wc]
EndWhile
Release Vars Array_Lista_Diretorios 
;-------------------------------------------------------------------------------

wc=0
While wc<DynArraySize(Aux_Diretorio)
  wc=wc+1
  Array_Diretorios[wc]=Format("W3,AR",wc)+": "+Aux_Diretorio[wc]
  Diretorio[wc]       ="\\SISTEMAS\\"+Aux_Diretorio[wc]
EndWhile
Release Vars Aux_Diretorio
;-------------------------------------------------------------------------------

CONT_TABLE_ERROR =0
PASTA_INI=1
PASTA_FIM=wc
opcao=1
While True
  Janela_Show=1
  ShowDialog "Reestrutura‡„o das Tabelas" Proc "SD_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 05,09   Height 19 Width 72

    Label @ 00,00 "Op‡„o" For "Opcao"
    RadioButtons @ 01,01 Height 2 Width 58
       "~C~ompleto = Padr„o + Integridade do Banco de Dados",
       "~F~echames = Padr„o + Completo (Somente Meses Fechados)"
       Tag "Opcao"
       To Opcao

     Label  @ 04,00 "N§ Pasta Inicial"  For "TG_INICIAL"
     Accept @ 04,18 Width 05 "S" Picture "#*#" Tag "TG_INICIAL"   To PASTA_INI

     Label  @ 05,00 "N§ Pasta Final  "  For "TG_FINAL"
     Accept @ 05,18 Width 05 "S" Picture "#*#" Tag "TG_FINAL"   To PASTA_FIM

     PickDynArray @8,01 Height 06 width 63
      Columns 4
       Array_Diretorios
        Tag "TG_PASTAS"
         To ArrayElement
     Label @ 07,00 "Pastas"  For "TG_PASTAS"

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If DirExists("\\BASE")=0
     Then Mensagem("Reestrutura‡„o n„o disponivel !//Entre em contato com o suporte Ok !")
          Loop
  EndIf

  PASTA_OK=True
  If PASTA_FIM<1 Or IsBlank(PASTA_FIM) Then PASTA_OK=False EndIf
  If PASTA_INI<1 Or IsBlank(PASTA_INI) Then PASTA_OK=False EndIf
  If PASTA_INI > wc                    Then PASTA_OK=False EndIf
  If PASTA_FIM > wc                    Then PASTA_OK=False EndIf
  If PASTA_INI > PASTA_FIM             Then PASTA_OK=False EndIf
  If Not PASTA_OK
     Then Mensagem("Pasta Inicial ou Final inv lida !")
          Loop
  EndIf
  If Not Verifica_Usuario() Then Loop EndIf

  Switch
    Case Opcao=1: OPTIT="Completo"
    Case Opcao=2: OPTIT="Fechames"
         If Not Seleciona_Fechames() Then Loop EndIf
  EndSwitch

  If Not IsAssigned(RESTRUTURACAO_AUTOMATICA)
     Then JANELAR("Reestrutura‡„o de Tabelas do Sistema/"+OPTIT,03,03,18,75)
     Else If IsAssigned(SYS_NV)
             Then JANELAR("Reestrutura‡„o de Tabelas Vers„o "+SYS_NV,03,03,18,75)
             Else JANELAR("Reestrutura‡„o de Tabelas do Sistema/"+OPTIT,03,03,18,75)
          EndIf
  EndIf
  
  Grava_LogEx("Reestruc")
  Reestrutura()
  
  INFO_TABELAS_CRITICAS=True
  If INFO_TABELAS_CRITICAS
     Then Play "\\Sistemas\\Cadastro\\INFO_TAB"
  EndIf
  
  MENSAGEM("Opera‡„o Finalizada !")
  Echo Normal
  Echo Off
  If IsAssigned(RESTRUTURACAO_AUTOMATICA) Then Quitloop EndIf

If Not IsAssigned(RESTRUTURACAO_AUTOMATICA)
   Then COR_MENSAGEM="1"
        MSG=    "Se vocˆ efetuou esta reestrutura‡„o por qualquer motivo  de//"
        MSG=MSG+"falha que tenha ocorrido, siga os seguinte passos:         // //"
        MSG=MSG+"1 - Fique atento e fa‡a o REPROCESSAMENTO do ESTOQUE e  do //"
        MSG=MSG+"    CAIXA/BANCO para que os SALDOS fiquem corretos !       // //"
        MSG=MSG+"2 - Fa‡a uma verifica‡„o dos £ltimos procedimentos  feitos,//"
        MSG=MSG+"    para certificar-se que n„o ouve perda de dados !       // //"
        Mensagem(MSG)
        Release Vars COR_MENSAGEM
EndIf

EndWhile
ClearAll
If Not IsAssigned(RESTRUTURACAO_AUTOMATICA)
   Then Release Vars All
        Release Procs All
EndIf
SetDir "\\Sistemas\\Cadastro"
