;** Voltames *******************************************************************
;*  Programa p/ Restauracao de Meses Fechados                                  *
;*******************************************************************************
;Autor: Vise Informatica (VISERP)
;Desenvolvido    : 14/11/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 09/02/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Carregamentos
;Ultima Alteracao: 29/02/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Tem_tabelas() 
;Ultima Alteracao: 18/02/2010 por Cleber Alves
;Motivo Alteracao: Inclusao Pecasmov 
;Ultima Alteracao: 07/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes diversos
;Ultima Alteracao: 24/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes RQITEMG e GNRE
;Ultima Alteracao: 24/05/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes proc GNRE() onde nÆo estava conferindo se tabela existia
;Ultima Alteracao: 03/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Layout                   
;Ultima Alteracao: 06/09/2014 por Bruno Carvalho
;Motivo Alteracao: Add rotina para quando ano de ficha de estoque estiver fechado
;Ultima Alteracao: 19/03/2015 por Andrey Fillipe          
;Motivo Alteracao: Inclusao Proc BALANCOS()
;Ultima Alteracao: 19/06/2015 por Kamila Gomes                        
;Motivo Alteracao: Inclusao Tabela NotaEIA
;Ultima Alteracao: 03/07/2015 por Bruno Carvalho                        
;Motivo Alteracao: Alterado o nome que estava extenso de "BalanTemp" para "BalanTmp"
;Ultima Alteracao: 16/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Documentos Referenciados Entradas     
;Ultima Alteracao: 15/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes chave Documentos Referenciados Entradas
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "NotaCF" e inclu¡do "NotaCC"      
;Ultima Alteracao: 03/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes familia Nota??             
;Ultima Alteracao: 13/09/2017 por Bruno Carvalho
;Motivo Alteracao: Inclusao tabela EXPEDC, EXPEDI, EXPEDIE, EXPEDIQ, EXPEDTG , EXPEDOFC, EXPEDOFI
;Ultima Alteracao: 06/02/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc NotasFiscais() p/ verificar a se a tabela existe antes de realizar o processo
;Ultima Alteracao: 25/04/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Requisi‡Æo de Mercadoria (RqTrf)

;*******************************************************************************
; NotaEC/NotaEI/NotaECV/NotaECP                                                *
;*******************************************************************************
Proc NotasEntrada()
ClearAll
MSG_AGUARDE="Aguarde, restaurando notas de entrada "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(7,1))
If IsTable("NotaEC")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\NotaEC" Enter
        Moveto [Numero do Lancamento] Example "lanc"
        {Ask} {NotaEC} Check
        Moveto [Numero do Lancamento] Example "lanc"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then MSG_LANCDUP()
                Return
        EndIf

        {Ask} {NotaEC} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then Mensagem("mes sem movimenta‡„o p/ notas de entrada !")
                Return
           Else Rename "Answer" "NTECtemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [NotaEC] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(7,2))
If IsTable("NotaEC") And
   IsTable("NotaEI")
   Then {Ask} {NotaEC}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {NotaEI} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","NotaEI")
EndIf

Aguarde(MSG_AGUARDE+Barra(7,3))
If IsTable("NotaEC") And
   IsTable("NotaECV")
   Then {Ask} {NotaEC}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {NotaECV} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","NotaECV")
EndIf

Aguarde(MSG_AGUARDE+Barra(7,4))
If IsTable("NotaEC") And
   IsTable("NotaECP")
   Then {Ask} {NotaEC}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {NotaECP} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","NotaECP")
EndIf

Aguarde(MSG_AGUARDE+Barra(7,5))
If IsTable("NotaEC") And
   IsTable("NotaEIA")
   Then {Ask} {NotaEC}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {NotaEIA} Check
        Moveto [Numero_do_Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","NotaEIA")
EndIf

Aguarde(MSG_AGUARDE+Barra(7,6))
If IsTable("NotaEC") And
   IsTable("NotaER")
   Then {Ask} {NotaEC}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {NotaER} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","NotaER")
EndIf

Aguarde(MSG_AGUARDE+Barra(7,7))
Add_Sub_Rest_Tabela("NTECtemp","NotaEC")

EndProc   ; (NotasEntrada)


;*******************************************************************************
; Pecasmov                                                                     *
;*******************************************************************************
Proc ESTOQUEPECA()
ClearAll
MSG_AGUARDE="Aguarde, restaurando notas de entrada "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(2,1))
If IsTable("Pecasmov")
   Then {Ask} {Pecasmov} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Moveto [Data             ] TypeIn "...~MESANO"        
        Do_It!
        ClearAll

        If IsEmpty("Answer")
           Then Mensagem("mes sem movimenta‡„o p/ Pe‡as !")
                Return
           Else Rename "Answer" "Pecatemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [Pecasmov] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(2,2))
Add_Sub_Rest_Tabela("Pecatemp","Pecasmov")

EndProc
;*******************************************************************************
; RqCabeca/RqItem/RqMatPri                                                     *
;*******************************************************************************
Proc Requisicoes()
ClearAll
MSG_AGUARDE="Aguarde, restaurando requisicoes "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(4,1))
If IsTable("RQCabeca")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\RQCabeca" Enter
        Moveto [Numero do Lancamento] Example "lanc"
        {Ask} {RQCabeca} Check
        Moveto [Numero do Lancamento] Example "lanc"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then MSG_LANCDUP()
                Return
        EndIf

        {Ask} {RQCabeca} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then Mensagem("mes sem movimenta‡„o p/ requisicoes !")
                Return
           Else Rename "Answer" "RQCTemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [RQCabeca] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(4,2))
If IsTable("RQCabeca") And
   IsTable("RQItem")
   Then {Ask} {RQCabeca}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {RQItem} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","RQItem")
EndIf

Aguarde(MSG_AGUARDE+Barra(4,3))
If IsTable("RQCabeca") And
   IsTable("RQMatPri")
   Then {Ask} {RQCabeca}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {RQMatPri} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","RQMatPri")
EndIf

Aguarde(MSG_AGUARDE+Barra(4,4))
If IsTable("RQCabeca") And
   IsTable("RQItemG")
   Then {Ask} {RQCabeca}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {RQItemG} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","RQItemG")
EndIf


Aguarde(MSG_AGUARDE+Barra(4,5))
Add_Sub_Rest_Tabela("RQCTemp","RQCabeca")

EndProc   ; (Requisicoes)


;*******************************************************************************
; RQTRF                                                                        *
;*******************************************************************************
Proc Requisicoes_Mercadoria()
ClearAll
MSG_AGUARDE="Aguarde, fechando Requisi‡”es de Mercadoria "+ANO_MES+" "
Aguarde(MSG_AGUARDE+Barra(1,1))

If IsTable("RQTRF")
   Then {Ask} {RQTRF} Check
        Moveto [Codigo da Empresa ] TypeIn "~VSDGEMPRESA.."
        Moveto [Data_Inclusao     ] TypeIn "...~MESANO"
        Do_It!
        ClearAll

        If IsEmpty("Answer")
           Then Fastmsg("Mˆs sem movimenta‡„o p/ requisicoes de mercadoria!")
                Return
        EndIf
   Else FastMsg("Tabela [RQTRF] n„o encontrada !")
        Return
EndIf
Add_Sub_Rest_Tabela("Answer","RqTrf")

EndProc

;*******************************************************************************
; NotaC/NotaI/NotaV/NotaIDV/NotaIC/NotaCC                                      *
;*******************************************************************************
Proc NotasFiscais()
Private Arquivo,wi

ClearAll
MSG_AGUARDE="Aguarde, restaurando notas emitidas "+ANO_MES+" "

Array Arquivo[10]
Arquivo[1] ="Notac"
Arquivo[2] ="Notacc"
Arquivo[3] ="Notai"
Arquivo[4] ="Notaiad"
Arquivo[5] ="Notaic"
Arquivo[6] ="Notaicm"
Arquivo[7] ="Notaidd"
Arquivo[8] ="Notaidv"
Arquivo[9] ="Notar"
Arquivo[10]="Notav"

for wi from 1 to 10

  AGUARDE(MSG_AGUARDE+Barra(10,wi-1))
        
  switch
    case wi=1 :
      If Not IsTable("Notac")
         Then FastMsg("Tabela [NotaC] n„o encontrada !")
              Return
      EndIf

      {Ask} {NotaC}
      Moveto [Codigo da Empresa   ] Check TypeIn "~VSDGEMPRESA.."
      Moveto [Numero do Documento ] Check
      Moveto [Serie do Documento  ] Check
      Do_It!
      ClearAll
      
      If IsEmpTy("Answer")
         Then Fastmsg("Mˆs sem movimenta‡„o p/ notas fiscais !")
              Return
      EndIf

      TabelaRNotas=Adiciona_Indice_Temp("Codigo da Empresa,Numero do Documento,Serie do Documento") 
      ClearAll
    
    otherwise :
      If IsTable(Arquivo[wi])
         Then {Ask} typeIn TabelaRNotas Enter
              Moveto [Codigo da Empresa   ] Example "EMPRE"
              Moveto [Numero do Documento ] Example "DOCTO"
              Moveto [Serie do Documento  ] Example "SERIE"
              {Ask} TypeIn Arquivo[wi] Enter Check
              Moveto [Codigo da Empresa   ] Example "EMPRE"
              Moveto [Numero do Documento ] Example "DOCTO"
              Moveto [Serie do Documento  ] Example "SERIE"
              Do_It!
              ClearAll
              Add_Sub_Rest_Tabela("Answer",Arquivo[wi])
      EndIf
  endswitch
        
endfor

Aguarde(MSG_AGUARDE+Barra(10,10))
{Ask} typeIn TabelaRNotas Enter
Moveto [Codigo da Empresa   ] Example "EMPRE"
Moveto [Numero do Documento ] Example "DOCTO"
Moveto [Serie do Documento  ] Example "SERIE"
{Ask} {NotaC} Check
Moveto [Codigo da Empresa   ] Example "EMPRE"
Moveto [Numero do Documento ] Example "DOCTO"
Moveto [Serie do Documento  ] Example "SERIE"
Do_It!
ClearAll
Add_Sub_Rest_Tabela("Answer","NotaC")

Delete TabelaRNotas

EndProc    ; (NotasFiscais)

;*******************************************************************************
; DupC/DupI/DupNF                                                              *
;*******************************************************************************
Proc DUPLICATAS()
ClearAll
MSG_AGUARDE="Aguarde, restaurando duplicatas geradas "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(4,1))
If IsTable("DupC")
   Then {Ask} {DupC} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then Mensagem("mes sem movimenta‡„o p/ duplicatas !")
                Return
           Else Rename "Answer" "DPCTemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [DupC] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(4,2))
If IsTable("DupI") And
   IsTable("DupC")
   Then {Ask} {DupC}
        Moveto [Codigo da Empresa   ] Example "EMPRE" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Numero do Documento ] Example "DOCTO"
        Moveto [Serie do Documento  ] Example "SERIE"
        {Ask} {DupI} Check
        Moveto [Codigo da Empresa   ] Example "EMPRE"
        Moveto [Numero do Documento ] Example "DOCTO"
        Moveto [Serie do Documento  ] Example "SERIE"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","DupI")
EndIf

Aguarde(MSG_AGUARDE+Barra(4,3))
If IsTable("DupNF") And
   IsTable("DupC")
   Then {Ask} {DupC}
        Moveto [Codigo da Empresa   ] Example "EMPRE" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Numero do Documento ] Example "DOCTO"
        Moveto [Serie do Documento  ] Example "SERIE"
        {Ask} {DupNF} Check
        Moveto [Codigo da Empresa   ] Example "EMPRE"
        Moveto [Numero do Documento ] Example "DOCTO"
        Moveto [Serie do Documento  ] Example "SERIE"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","DupNF")
EndIf

Aguarde(MSG_AGUARDE+Barra(4,4))
Add_Sub_Rest_Tabela("DPCTemp","DupC")

EndProc

;*******************************************************************************
; ECF_C/ECF_T                                                                  *
;*******************************************************************************
Proc ECFS()
ClearAll
MSG_AGUARDE="Aguarde, restaurando mapa resumo ecf "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(3,1))
If IsTable("ECF_C")
   Then {Ask} {ECF_C} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then Mensagem("mes sem movimenta‡„o p/ mapa resumo ecf !")
                Return
           Else Rename "Answer" "ECFCTemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [ECF_C] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(3,2))
If IsTable("ECF_T") And
   IsTable("ECF_C")
   Then {Ask} {ECF_C}
        Moveto [Codigo da Empresa   ] Example "EMPRE" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Serie do Documento  ] Example "SERIE"
        Moveto [Data                ] Example "DATA"
        {Ask} {ECF_T} Check
        Moveto [Codigo da Empresa   ] Example "EMPRE"
        Moveto [Serie do Documento  ] Example "SERIE"
        Moveto [Data                ] Example "DATA"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","ECF_T")
EndIf

Aguarde(MSG_AGUARDE+Barra(3,3))
If IsTable("ECF_S") And
   IsTable("ECF_C")
   Then {Ask} {ECF_C}
        Moveto [Codigo da Empresa   ] Example "EMPRE" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Serie do Documento  ] Example "SERIE"
        Moveto [Data                ] Example "DATA"
        {Ask} {ECF_S} Check
        Moveto [Codigo da Empresa   ] Example "EMPRE"
        Moveto [Serie do Documento  ] Example "SERIE"
        Moveto [Data                ] Example "DATA"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","ECF_S")
EndIf

Aguarde(MSG_AGUARDE+Barra(3,4))
Add_Sub_Rest_Tabela("ECFCTemp","ECF_C")

EndProc

;*******************************************************************************
; AcCarrgC/AcCarrgI/AcCarrgV                                                   *
;*******************************************************************************
Proc Carregamentos()
ClearAll
MSG_AGUARDE="Aguarde, restaurando carregamentos "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(4,1))
If IsTable("AcCarrgC")
   Then {Ask} TypeIn "\\Sistemas\\Vendas\\AcCarrgC" Enter
        Moveto [Numero_Carregamento] Example "lanc"
        {Ask} {AcCarrgC} Check
        Moveto [Numero_Carregamento] Example "lanc"
       ;Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then MSG_LANCDUP()
                Return
        EndIf

        {Ask} {AcCarrgC} Check
       ;Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then Mensagem("mes sem movimenta‡„o p/ carregamentos !")
                Return
           Else Rename "Answer" "CarTemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [AcCarrgC] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(4,2))
If IsTable("AcCarrgC") And
   IsTable("AcCarrgI")
   Then {Ask} {AcCarrgC}
        Moveto [Numero_Carregamento] Example "LANCTO"
        ;Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {AcCarrgI} Check
        Moveto [Numero_Carregamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","AcCarrgI")
EndIf

Aguarde(MSG_AGUARDE+Barra(4,3))
If IsTable("AcCarrgC") And
   IsTable("AcCarrgV")
   Then {Ask} {AcCarrgC}
        Moveto [Numero_Carregamento] Example "LANCTO"
        ;Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        {Ask} {AcCarrgV} Check
        Moveto [Numero_Carregamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","AcCarrgV")
EndIf

Aguarde(MSG_AGUARDE+Barra(4,4))
Add_Sub_Rest_Tabela("CarTemp","AcCarrgC")

EndProc   ; (Carregamentos)

;*******************************************************************************
; GNRE                                                                     *
;*******************************************************************************
Proc GNRE()
ClearAll
MSG_AGUARDE="Aguarde, fechando GNRE "+ANO_MES+" "
Aguarde(MSG_AGUARDE+Barra(2,1))

If IsTable("GNRE")
   Then {Ask} {GNRE} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Moveto [Mes Referente    ] TypeIn "~MES"
        Moveto [Ano Referente    ] TypeIn "~ANO"
        Do_It!
        ClearAll

        If IsEmpty("Answer")
           Then Mensagem("Mˆs sem movimenta‡„o p/ GNRE !")
                Return
           Else Rename "Answer" "Pecatemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [GNRE] n„o encontrada !")
        Return
EndIf
Add_Sub_Rest_Tabela("Answer","GNRE")

EndProc

;*******************************************************************************
; BALANCOS                                                                     *
;*******************************************************************************
Proc BALANCOS()
ClearAll
MSG_AGUARDE="Aguarde, restaurando balan‡os "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(3,1))
If IsTable("Tab_InvC")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\Tab_InvC" Enter
        Moveto [Numero do Lancamento] Example "LANCTO"
        {Ask} {Tab_InvC} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then MSG_LANCDUP()
                Return
        EndIf

        {Ask} {Tab_InvC} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then Mensagem("Mˆs sem movimenta‡„o p/ Balan‡os !")
                Return
           Else Rename "Answer" "BalanTmp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [Tab_InvC] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(3,2))
If IsTable("Tab_InvC") And
   IsTable("Tab_InvI")
   Then {Ask} {Tab_InvC}
        Moveto [Numero do Lancamento] Example "LANCTO"
        Moveto [Codigo da Empresa   ] TypeIn "~VSDGEMPRESA.."
        {Ask} {Tab_InvI} Check
        Moveto [Numero do Lancamento] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","Tab_InvI")
EndIf

Aguarde(MSG_AGUARDE+Barra(3,3))
Add_Sub_Rest_Tabela("BalanTmp","Tab_InvC")

EndProc

;*******************************************************************************
; EXPEDC/EXPEDI/EXPEDIE/EXPEDIQ/EXPEDTG                                        *
;*******************************************************************************
Proc Expedicao()
ClearAll

MSG_AGUARDE="Aguarde, restaurando expedi‡„o "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(6,1))
If IsTable("EXPEDC")
   Then {Ask} TypeIn "\\Sistemas\\Vendas\\EXPEDC" Enter
        Moveto [Numero da OE] Example "lanc"
        {Ask} {EXPEDC} Check
        Moveto [Numero da OE] Example "lanc"
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then MSG_LANCDUP("Expedi‡„o")
                Return
        EndIf

        {Ask} {EXPEDC} Check
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then FastMsg("Mˆs sem movimenta‡„o p/ expedi‡”es !")
                Return
           Else Rename "Answer" "ExpTemp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [ExpedC] n„o encontrada !")
        Return
EndIf

Aguarde(MSG_AGUARDE+Barra(6,2))
If IsTable("EXPEDC") And
   IsTable("EXPEDI")
   Then {Ask} {EXPEDC}
        Moveto [Numero da OE] Example "LANCTO"
        {Ask} {EXPEDI} Check
        Moveto [Numero da OE] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","EXPEDI")
EndIf

Aguarde(MSG_AGUARDE+Barra(6,3))
If IsTable("EXPEDC") And
   IsTable("EXPEDIE")
   Then {Ask} {EXPEDC}
        Moveto [Numero da OE] Example "LANCTO"
        {Ask} {EXPEDIE} Check
        Moveto [Numero da OE] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","EXPEDIE")
EndIf

Aguarde(MSG_AGUARDE+Barra(6,4))
If IsTable("EXPEDC") And
   IsTable("EXPEDIQ")
   Then {Ask} {EXPEDC}
        Moveto [Numero da OE] Example "LANCTO"
        {Ask} {EXPEDIQ} Check
        Moveto [Numero da OE] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","EXPEDIQ")
EndIf

Aguarde(MSG_AGUARDE+Barra(6,5))
If IsTable("EXPEDC") And
   IsTable("EXPEDTG")
   Then {Ask} {EXPEDC}
        Moveto [Numero da OE] Example "LANCTO"
        {Ask} {EXPEDTG} Check
        Moveto [Numero da OE] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","EXPEDTG")
EndIf

Aguarde(MSG_AGUARDE+Barra(6,6))
Add_Sub_Rest_Tabela("ExpTemp","EXPEDC")

EndProc ;Expedicao()

;*******************************************************************************
; EXPEDOFC/EXPEDOFI                                                            *
;*******************************************************************************
Proc Expedicao_OF()
ClearAll

MSG_AGUARDE="Aguarde, restaurando expedi‡„o de OF "+ANO_MES+" "

Aguarde(MSG_AGUARDE+Barra(7,1))
If IsTable("EXPEDOFC")
   Then {Ask} TypeIn "\\Sistemas\\Vendas\\EXPEDOFC" Enter
        Moveto [Numero da OE] Example "lanc"
        {Ask} {EXPEDOFC} Check
        Moveto [Numero da OE] Example "lanc"
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then MSG_LANCDUP("Expedi‡„o de OF")
                Return
        EndIf

        {Ask} {EXPEDOFC} Check
        Do_It!
        ClearAll
        If IsEmpty("Answer")
           Then FastMsg("Mˆs sem movimenta‡„o p/ expedi‡”es de OF !")
                Return
           Else Rename "Answer" "ExpOfTmp"
                ClearAll
        EndIf
   Else FastMsg("Tabela [ExpedOFC] n„o encontrada !")
        Return
EndIf


Aguarde(MSG_AGUARDE+Barra(7,2))
If IsTable("EXPEDOFC") And
   IsTable("EXPEDOFI")
   Then {Ask} {EXPEDOFC}
        Moveto [Numero da OE] Example "LANCTO"
        {Ask} {EXPEDOFI} Check
        Moveto [Numero da OE] Example "LANCTO"
        Do_It!
        ClearAll
        Add_Sub_Rest_Tabela("Answer","EXPEDOFI")
EndIf

Aguarde(MSG_AGUARDE+Barra(7,3))
Add_Sub_Rest_Tabela("ExpOfTmp","EXPEDOFC")

EndProc ;Expedicao_OF() 

;*******************************************************************************
;* Rotina Add/Subtract/Reestruct                                               *
;*******************************************************************************
Proc Add_Sub_Rest_Tabela(TABORIG,TABDEST)
Private TABORIG,TABDEST

Add TABORIG Diretorio+TABDEST ClearImage
SaveTables

Subtract TABORIG TABDEST ClearImage
SaveTables

{Modify} {Restructure} TypeIn TABDEST Enter Do_It! ClearImage
Delete TABORIG
SAVETABLES
EndProc ; (Add_Sub_Rest_Tabela)

;*******************************************************************************
;* Rotina Mensagem Lancamentos Duplicados                                      *
;*******************************************************************************
Proc MSG_LANCDUP()
MSG=    "Os lan‡amentos do mes selecionado n„o ser„o restaurados !//"
MSG=MSG+"Existem lan‡amentos em aberto com a mesma numera‡„o a restaurar !//"
MSG=MSG+"Verificar quais os lan‡amentos duplicados Ok !//"
MSG=MSG+"A restaura‡„o dos lan‡amentos ser  cancelada !// //"
MSG=MSG+" Observe abaixo em que rotina ocorreu esta duplica‡Æo !"
Mensagem(MSG)
EndProc ; (Msg_LancDup)

;*******************************************************************************
;* Rotina Bloqueia Tabelas da Pasta                                            *
;*******************************************************************************
Proc BloqueiaTabelas(Pasta)
Private MSG, Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then Lock Pasta+Array_Tabelas[i] FL
          If Not RetVal
             Then MSG="O usu rio "+Upper(ErrorUser())+" esta usando o Sistema !// //"
                  MSG=MSG+Completa("- Contact -lo para liberar o Sistema;",40," ")+"//"
                  MSG=MSG+Completa("- Esta rotina ser  abortado.",40," ")+"// //"
                  MSG=MSG+"Execute esta rotina novamente para que//"
                  MSG=MSG+"a mesma seja concluida corretamente !"
                  Mensagem(MSG)
                  Return False
          EndIf
  EndIf
EndFor

Return True
EndProc

;*******************************************************************************
;* Rotina Desbloqueia Tabelas da Pasta                                         *
;*******************************************************************************
Proc DesbloqueiaTabelas(Pasta)
Private Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then UnLock Pasta+Array_Tabelas[i] FL
  EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Desbloqueia Tabelas da Pasta                                         *
;*******************************************************************************
Proc DesbloqueiaTabelas(Pasta)
Private Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  UnLock Pasta+Array_Tabelas[i] WL
EndFor

EndProc

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelasE()
If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="NotaEC"
Array_Tabelas[02]="NotaEI"
Array_Tabelas[03]="NotaECV"
Array_Tabelas[04]="NotaECP"
Array_Tabelas[05]="NotaEIA"
Array_Tabelas[06]="NotaER"
Array_Tabelas[07]="RqCabeca"
Array_Tabelas[08]="RqItem" 
Array_Tabelas[09]="RqMatPri"
Array_Tabelas[10]="RqTrf"
Array_Tabelas[11]="Pecasmov"
Array_Tabelas[12]="Tab_InvC"
Array_Tabelas[13]="Tab_InvI"

EndProc

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelasV()
If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="NotaC"
Array_Tabelas[02]="NotaI"
Array_Tabelas[03]="NotaIC"
Array_Tabelas[04]="NotaIDV"
Array_Tabelas[05]="NotaR"
Array_Tabelas[06]="NotaV"
Array_Tabelas[07]="NotaCC"
Array_Tabelas[08]="NotaEIA"

Array_Tabelas[09]="DupC"
Array_Tabelas[10]="DupI"
Array_Tabelas[11]="DupNF"

Array_Tabelas[12]="ECF_C"
Array_Tabelas[13]="ECF_T"
Array_Tabelas[14]="ECF_S"

Array_Tabelas[15]="AcCarrgC"
Array_Tabelas[16]="AcCarrgC"
Array_Tabelas[17]="AcCarrgC"

Array_Tabelas[18]="EXPEDC"
Array_Tabelas[19]="EXPEDI"
Array_Tabelas[20]="EXPEDIE"
Array_Tabelas[21]="EXPEDIQ"
Array_Tabelas[22]="EXPEDTG"

Array_Tabelas[23]="EXPEDOFC"
Array_Tabelas[24]="EXPEDOFI"

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DIRETORIOS"    : Campo="TG_EMPRESA"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : 
                         If VSDGEMPRESA = ""
                            Then VSDGNOMEMP = ""
                                 Mensagem("A empresa dever  ser informada !")
                            Else Campo="TG_DIRETORIOS"
                         EndIf   
                    Case Campo="TG_DIRETORIOS" : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc  ;(SD_Dialog)

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGEMPRESA   =""

While True
  Diretorio="\\Sistemas\\Estoque\\"
  Diretorios_Fechames(Diretorio)

  ShowDialog "Restaura‡Æo mensal [ Estoque/Faturamento ]" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 04,17   Height 19 Width 75

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

    PickDynArray @2,01 Height 12 width 69
     Columns 7
      Array_Diretorios
       Tag "TG_DIRETORIOS"
        To ArrayElement
    Label @ 01,00 "Ano_Mes em aberto"  For "TG_DIRETORIOS"

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If DynArraySize(Array_Diretorios)<1
     Then Mensagem("Sem Pasta fechames !")
          Loop
  EndIf

  If VSDGEMPRESA = ""
     Then Mensagem("A empresa dever  ser informada !")
          Loop
  EndIf  
            
  ANO_MES=Array_Diretorios[ArrayElement]
  
  MES=Substr(ANO_MES,6,2)
  ANO=Substr(ANO_MES,1,4)
  If NumVal(ANO) < 2000
     Then MESANO=MES+"."+SubStr(ANO,3,2)
     Else MESANO=MES+"."+ANO
  EndIf
         
  ;---- Rotina para verificar se h  Ficha de Estoque fechadas ------------------  
  If DirExists(Substr(Directory(),1,2)+"\\Fechano\\"+ANO+"\\Estoque")>0
     Then ACHOU_SDESTQ = False
          If IsFile(Substr(Directory(),1,2)+"\\Fechano\\"+ANO+"\\Estoque\\Sdestq.db") 
             Then SetDir Substr(Directory(),1,2)+"\\Fechano\\"+ANO+"\\Estoque\\"
                  View "Sdestq"
                  Moveto [Codigo da Empresa] 
                  Locate VSDGEMPRESA
                  If RetVal
                     Then While VSDGEMPRESA = [Codigo da Empresa]
                            If ANO = [Ano Referencia]
                               Then ACHOU_SDESTQ = True
                                    QuitLoop
                            EndIf   
                            Skip
                            If Eot() Then QuitLoop EndIf
                            Locate Next VSDGEMPRESA
                            If Not RetVal
                               Then QuitLoop
                            EndIf
                          EndWhile
                  EndIf   
          EndIf
          SetDir "\\Sistemas\\Estoque\\"
          If ACHOU_SDESTQ              
             Then MSG =       "Este mˆs/ano que est  tentando restaurar cont‚m Ficha de Estoque//" 
                  MSG = MSG + "com  fechamento  anual,  para  continuar com este processo, ser //"
                  MSG = MSG + "preciso restaurar o ano fechado desta empresa na rotina:        ////"
                  MSG = MSG + "- Utilit rios > Restaura‡”es > Anual-Ficha Estoque              "
                  Mensagem(MSG)
                  Loop
          EndIf   
  EndIf   

  ;** Volta Estoque
  Diretorio="\\Sistemas\\Estoque\\"
  DiretorioFechames=Diretorio+"Fechames\\"+ANO_MES+"\\"
  If DirExists(DiretorioFechames)=0
     Then Mensagem("N„o existe a pasta do "+ANO_MES+" (Estoque) selecionado !")
          Loop
  EndIf

  If Not Verifica_Usuario() Then Loop EndIf
  Bloqueio_Ok=True
  ListadeTabelasE()
  If (BloqueiaTabelas(Diretorio)) And
     (BloqueiaTabelas(DiretorioFechaMes))
     Then SetDir DiretorioFechaMes
          NotasEntrada()
          ESTOQUEPECA()
          Requisicoes()
          Requisicoes_Mercadoria()
          GNRE()
          BALANCOS()
          SetDir Diretorio
     Else Bloqueio_Ok=False
  EndIf
  DesbloqueiaTabelas(Diretorio)
  DesbloqueiaTabelas(DiretorioFechaMes)
  If Not Tem_Tabelas(Diretorio+"Fechames\\"+ANO_MES)
     Then Deleta_Arvore(SubStr(Directory(),1,2)+Diretorio+"Fechames\\"+ANO_MES)
  EndIf

  ;** Volta Vendas
  If Not Bloqueio_Ok        Then Loop EndIf
  If Not Verifica_Usuario() Then Loop EndIf
  Diretorio="\\Sistemas\\Vendas\\"
  DiretorioFechames=Diretorio+"Fechames\\"+ANO_MES+"\\"
  If DirExists(DiretorioFechames)=0
     Then Mensagem("N„o existe a pasta do "+ANO_MES+" (Vendas) selecionado !")
          Loop
  EndIf

  ListadeTabelasV()
  If (BloqueiaTabelas(Diretorio)) And
     (BloqueiaTabelas(DiretorioFechaMes))
     Then SetDir DiretorioFechaMes
          NotasFiscais()
          Duplicatas()
          ECFS()
          CARREGAMENTOS()
          Expedicao()
          Expedicao_OF()
          SetDir Diretorio
  EndIf
  DesbloqueiaTabelas(Diretorio)
  DesbloqueiaTabelas(DiretorioFechaMes)
  If Not Tem_Tabelas(Diretorio+"Fechames\\"+ANO_MES)
     Then Deleta_Arvore(SubStr(Directory(),1,2)+Diretorio+"Fechames\\"+ANO_MES)
  EndIf

  SetDir "\\Sistemas\\Estoque\\"

  LimpAguarde()
  MENSAGEM("Fim de Opera‡„o !")

EndWhile
ClearAll
Release Vars All
Release Procs All
