Модераторы: stron

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматическая архивация баз 1С (8.1 и 7.7) 
:(
    Опции темы
mihanik
Дата 17.5.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 2
Всего: 109



Привет всем!

Сегодня полдня убил на то, чтобы написать скрипт, который бы бэкапил сколько угодно баз 7.7 и 8.1 в нужные папки.

Основные принципы работы:
  •  каждая база 1С бэкапится в отдельную папку
  •  в этой самой "отдельной папке" накапливаются все бэкапы базы 1с (удаляются старые бэкапы вручную)
  •  перед выгрузкой баз закрываются все локально запущенные экземпляры 1С версий 7.7 и 8.1
  •  ведётся максимально подробный лог
  •  работает с ФАЙЛОВЫМИ базами 1С v 8.1 и любыми базами 1С v 7.7
Прошу протестировать!!!
Вот сам скрипт:
Код

'********************************************************************
'* Скрипт для резервного копирования (выгрузки)
'* данных из базы данных 1С 7.7 и 8.1
'*
'* (с) Михаил Медведев. 2009 год.
'********************************************************************
Option Explicit            ' Требуем обязательного объявления всех переменных

' Описание переменных
Dim strLogFileName            ' Имя лог-файла
Dim BackUpFolder            ' "Корневая" папка для архивных коипий
Dim BasesList ()            ' Массив, содержащий список параметров архивируемых баз...
Dim MyBase                    ' Экземпляр объекта "база 1С"
Dim I                        ' Для циклов
Dim WshShell, oExec            ' Для запуска сторонних программ из скрипта
Dim S                        ' Для обработки текстовых величин


ReDim BasesList(0)            ' Очищаем массив, содержащий список параметров архивируемых баз

' Класс, описывающий свойства базы 1С
class Base1C
    Dim Type1C                    ' Тип 1С: 77 или 81
    Dim Program1CName            ' Имя исполняемого файла 1С
    Dim BaseLocationPath        ' Путь к базе данных 1С
    Dim BaseBackUpFolderName    ' Имя папки, где будут хранится архивы конкретной базы 1С
    Dim BaseBackUpFileName        ' Имя файла для архива базы (.dt или .zip) без расширения :-)
    Dim UserName                ' Имя пользователя
    Dim UserPassword            ' Пароль пользователя    

      Private Sub class_Initialize()
             Type1C = ""
             Program1CName = ""
             BaseLocationPath = ""
             BaseBackUpFolderName = ""
             BaseBackUpFileName = ""
             UserName = ""
             UserPassword = ""
      End sub
End class 

'********************************************************************
'********************************************************************
'********************************************************************

' Задаём параметры архивируемых баз данных

' "Корневая" папка для архивных коипий
' Все остальные папки будут создаваться именно в этой корневой папке!!!
BackUpFolder = "c:\1Cbackup"

' Задаём параметры первой базы
Set MyBase = New Base1C
    ReDim Preserve BasesList(UBound(BasesList)+1)
        MyBase.Type1C = "81"
        MyBase.Program1CName = "C:\Program Files\1cv81\bin\1cv8.exe"
        MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\11111"
        MyBase.BaseBackUpFolderName = "Информационная база"
        MyBase.BaseBackUpFileName = "Информационная база"
        MyBase.UserName = "вася"
        MyBase.UserPassword = "123"    
    Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing

' Задаём параметры второй базы
Set MyBase = New Base1C
    ReDim Preserve BasesList(UBound(BasesList)+1)
        MyBase.Type1C = "81"
        MyBase.Program1CName = "C:\Program Files\1cv81\bin\1cv8.exe"
        MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\22222"
        MyBase.BaseBackUpFolderName = "базыща"
        MyBase.BaseBackUpFileName = "базыща"
        MyBase.UserName = "вася"
        MyBase.UserPassword = "123"    
    Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing

' Задаём параметры третьей базы
Set MyBase = New Base1C
    ReDim Preserve BasesList(UBound(BasesList)+1)
        MyBase.Type1C = "77"
        MyBase.Program1CName = "C:\Program Files\1Cv77\BIN\1cv7s.exe"
        MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\33333"
        MyBase.BaseBackUpFolderName = "семёрка"
        MyBase.BaseBackUpFileName = "семёрка"
        MyBase.UserName = "вася"
        MyBase.UserPassword = "123"    
    Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing

'********************************************************************
'********************************************************************
'********************************************************************

' Задаём имя для лог-файла
strLogFileName = "BackUp1CBases.Log"
strLogFileName = ScriptPath + strLogFileName

AppendToFile strLogFileName, "НАЧАЛО"
AppendToFile strLogFileName, "Начинаем процесс автоматической архивации."
AppendToFile strLogFileName, "Лог пишется в файл " & vbTab & strLogFileName
AppendToFile strLogFileName, "Дата: " & vbTab & Date
AppendToFile strLogFileName, "Время: " & vbTab & Time

AppendToFile strLogFileName, " "

AppendToFile strLogFileName, "Ищем все запущенные экземпляры 1С v 8.1 ..."
AppendToFile strLogFileName, "Найдено экземпляров 1С v 8.1: " & vbTab & ProcessCount ("1cv8%")
    If (ProcessCount ("1cv8%")) <> 0 Then
        AppendToFile strLogFileName, "Закрываем все экземпляры 1С v 8.1 ..."
        KillProcess "1cv8%"
        AppendToFile strLogFileName, "Подождём секунд 5..."
        WScript.Sleep 5000
    End If
AppendToFile strLogFileName, "Продолжаем работу."

AppendToFile strLogFileName, " "

AppendToFile strLogFileName, "Ищем все запущенные экземпляры 1С v 7.7 ..."
AppendToFile strLogFileName, "Найдено экземпляров 1С v 7.7: " & vbTab & ProcessCount ("1cv7%")
    If (ProcessCount ("1cv7%")) <> 0 Then
        AppendToFile strLogFileName, "Закрываем все экземпляры 1С v 7.7 ..."
        KillProcess "1cv7%"
        AppendToFile strLogFileName, "Подождём секунд 5..."
        WScript.Sleep 5000
    End If
AppendToFile strLogFileName, "Продолжаем работу."
AppendToFile strLogFileName, " "

AppendToFile strLogFileName, "Проверяем существование корневой папки для архивов"

FolderCreate BackUpFolder
If Not FolderExist (BackUpFolder) then
    AppendToFile strLogFileName, "Корневой папки не существует, и создать её не удалось!!!"
    AppendToFile strLogFileName, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ РАБОТЫ ПРОГРАММЫ!!!"
    WScript.Quit
End If

AppendToFile strLogFileName, "Папка нашлась."
AppendToFile strLogFileName, "Продолжаем работу."
AppendToFile strLogFileName, " "

AppendToFile strLogFileName, "Количество архивируемых баз = " & UBound(BasesList)
AppendToFile strLogFileName, " "

For I = 1 To UBound(BasesList)
    AppendToFile strLogFileName, "Обрабатывается база № " & I
    AppendToFile strLogFileName, "Тип базы: " & BasesList(I).Type1C
    AppendToFile strLogFileName, "Имя исполняющего файла 1С: " & BasesList(I).Program1CName
    AppendToFile strLogFileName, "Исходное расположение базы: " & BasesList(I).BaseLocationPath
    AppendToFile strLogFileName, "Папка для архивной копии: " & BasesList(I).BaseBackUpFolderName
    AppendToFile strLogFileName, "Имя файла для архивной копии: " & BasesList(I).BaseBackUpFileName
    AppendToFile strLogFileName, "Имя пользователя: " & BasesList(I).UserName
    AppendToFile strLogFileName, "Пароль пользователя: " & BasesList(I).UserPassword 
    AppendToFile strLogFileName, " "

    Select Case BasesList(I).Type1C
        Case "77" 
         BackUp77
        Case "81"
            BackUp81
        Case Else    
         AppendToFile strLogFileName, "Неизвестный тип базы 1С!"
    End Select
    
    AppendToFile strLogFileName, "Закончили обработку базы № " & I
    AppendToFile strLogFileName, " "
Next

AppendToFile strLogFileName, " "
AppendToFile strLogFileName, "Архивация закончена." 
AppendToFile strLogFileName, "Дата:" & vbTab & Date
AppendToFile strLogFileName, "Время:" & vbTab & Time
AppendToFile strLogFileName, "КОНЕЦ" 
AppendToFile strLogFileName, " " 
WScript.Quit

'********************************************************************
'*
'*  Процедура   : AppendToFile
'*  Описание    : Дописывает в файл текстовую информацию
'*  Вход        : strFileName - имя файла, в который нужно дописать информацию
'*                strString   - дописываемая информация
'*
'********************************************************************
Sub AppendToFile(ByVal strFileName, ByVal strString)
Const ForAppending = 8
Dim fso, f

    Err.Clear
    On Error Resume Next

    Set fso = CreateObject("Scripting.FileSystemObject")
        Set f = fso.OpenTextFile(strFileName, ForAppending, True)
            f.WriteLine strString
            f.Close
        Set f = Nothing
    Set fso = Nothing
    
End Sub

'********************************************************************
'*
'*  Функция   : ScriptPath
'*  Описание  : Возвращает имя папки, в которой находится скрипт
'*  Вход      : нет
'*  Выход     : имя папки, в которой находится скрипт
'*
'********************************************************************
Function ScriptPath
Dim S 
    
    Err.Clear
    On Error Resume Next    
    ScriptPath = ""

    S = WScript.ScriptFullName
    ScriptPath = mid(S,1,instrrev(S,"\"))
    
End Function

'********************************************************************
'*
'*  Функция   : ProcessCount
'*  Описание  : Возвращает количество запущенных экземпляров процесса с указанным именем
'*  Вход      : PName - имя процесса
'*  Выход     : число запущенных процессов
'*
'********************************************************************
Function ProcessCount (ByVal PName)
Dim N, objService, objProc    
    
    Err.Clear
    On Error Resume Next
    
    ProcessCount = 0
    N = 0
    
    Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
    
    If Err.Number <> 0 Then
        AppendToFile strLogFileName, "ПРОИЗОШЛА ОШИБКА!!!"
        AppendToFile strLogFileName, Err.Number & ": " & Err.Description
        AppendToFile strLogFileName, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ РАБОТЫ ПРОГРАММЫ!!!"
        WScript.Quit
    End If

    For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name like  '" & PName & "'")
        N = N +1
    Next
    
    ProcessCount = N
    
End Function

'********************************************************************
'*
'*  Процедура : KillProcess
'*  Описание  : Выгружает из памяти все экземпляры процесса с указанным именем
'*  Вход      : PName - имя процесса
'*    Выход      : нет
'*
'********************************************************************
Function KillProcess (ByVal PName)
Dim objService, objProc
    
    Err.Clear
    On Error Resume Next
    
    Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
    
    If Err.Number <> 0 Then
        AppendToFile strLogFileName, "ПРОИЗОШЛА ОШИБКА!!!"
        AppendToFile strLogFileName, Err.Number & ": " & Err.Description
        AppendToFile strLogFileName, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ РАБОТЫ ПРОГРАММЫ!!!"
        WScript.Quit
    End If

    For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name like  '" & PName & "'")
        objProc.Terminate
    Next
    
End Function

'********************************************************************
'*
'*  Функция   : MyFileExist
'*  Описание  : Функция проверки существования файла
'*  Вход      : Имя файла
'*  Выход     : true, если файл существует, и false, если файл отсутствует.
'*
'********************************************************************
Function MyFileExist (ByVal FileName)
dim fso

    Err.Clear
    On Error Resume Next
    
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")

        MyFileExist = (fso.FileExists(FileName)) 
    
    Set fso = Nothing
    
end Function

'********************************************************************
'*
'*  Функция   : FolderExist
'*  Описание  : Функция проверки существования папки
'*  Вход      : Имя папки
'*  Выход     : true, если папка существует, и false, если папка отсутствует.
'*
'********************************************************************
Function FolderExist (ByVal FolderName)
dim fso

    Err.Clear
    On Error Resume Next
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
        FolderExist = (FSO.FolderExists(FolderName)) 

    Set fso = Nothing
    
end Function

'********************************************************************
'*
'*  Функция   : FolderCreate
'*  Описание  : Функция создания папки по нужному пути
'*  Вход      : Полный путь к создаваемой папке.
'*  Выход     : нет
'*
'********************************************************************
Sub FolderCreate (ByVal FolderName)
dim objFSO, objFolder
Dim FA, FN, I

    Err.Clear
    On Error Resume Next
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    FA = Split(FolderName, "\")
    FN = FA (0)
    
    For I = 1 To UBound(FA)
        If Len (FA (I)) <> 0 Then
            FN = FN & "\" &  FA (I)
            Err.Clear
            Set objFolder = objFSO.CreateFolder(FN)
            Set objFolder = Nothing
            AppendToFile strLogFileName, FN & " - " & Err.Description
        End If
    Next
    
end Sub

'********************************************************************
'*
'*  Функция   : ReadTextFromFile
'*  Описание  : Функция возвращает весь текст из указанного файла
'*  Вход      : Полное имя файла
'*  Выход     : текст, содержащийся в файле
'*
'********************************************************************
Function ReadTextFromFile (byval FileName)
Dim objFSO, objTextFile
Const ForReading = 1
    
    Err.Clear
    On Error Resume Next
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objTextFile = objFSO.OpenTextFile(FileName, ForReading)
            ReadTextFromFile = objTextFile.ReadAll
        Set objTextFile = Nothing
    Set objFSO = Nothing

end Function

'********************************************************************
'*
'*  Функция   : DeleteTextFile
'*  Описание  : Функция удаления файла
'*  Вход      : Полное имя файла
'*  Выход     : нет
'*
'********************************************************************
Function DeleteTextFile (byval FileName)
Dim objFSO

    Err.Clear
    On Error Resume Next

    Set objFSO = CreateObject("Scripting.FileSystemObject")
        objFSO.DeleteFile FileName, True
    Set objFSO = Nothing
    
end Function

'********************************************************************
'* Функция выгрузки баз 1С 8.1
'********************************************************************
Sub BackUp81
         AppendToFile strLogFileName, "Определили, что тип базы 1С v 8.1"
         AppendToFile strLogFileName, "Проверяем наличие папки для хранения архивной копии..."
         FolderCreate BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName
         
         If Not FolderExist (BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName) then
                AppendToFile strLogFileName, "Папки для хранения архивной копии не существует, и создать её не удалось!!!"
                AppendToFile strLogFileName, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ РАБОТЫ ПРОГРАММЫ!!!"
                WScript.Quit
            End If
            
         AppendToFile strLogFileName, "Папка нашлась."
            AppendToFile strLogFileName, "Продолжаем работу."
            AppendToFile strLogFileName, " "
         
         AppendToFile strLogFileName, "Подготавливаем строку для запуска 1С v 8.1"
         
         S = """" & BasesList(I).Program1CName & """ CONFIG /DumpIB""" & BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\" & BasesList(I).BaseBackUpFileName & " " & Replace(cstr(now()), ":", ".") & ".dt"" /F""" & BasesList(I).BaseLocationPath & """ /n" & BasesList(I).UserName & " /p" & BasesList(I).UserPassword & " /wa- /Out""" & BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\dump.log"" -NoTruncate "
         AppendToFile strLogFileName, "Строка для запуска 1С получилась следующая:"
         AppendToFile strLogFileName, S
         
         AppendToFile strLogFileName, "Запускаем 1C в пакетном режиме..."
         
            Set WshShell = CreateObject("WScript.Shell")
                oExec = WshShell.run( S, 5 , True)
            Set WshShell = Nothing
            
            AppendToFile strLogFileName, "Отчёт самой программы 1С о выгрузке базы следующий:"
            
            AppendToFile strLogFileName, ReadTextFromFile ( BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\dump.log")
         
         AppendToFile strLogFileName, "Удалим файл с отчётом 1С с диска компьютера..."
         DeleteTextFile ( BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\dump.log")
         
         If Err.Number = 0 Then
             AppendToFile strLogFileName, "Файл с отчётом 1С успешно удалён!"
         Else
             AppendToFile strLogFileName, "Файл с отчётом 1С удалить не удалось!"
         End If
End Sub

'********************************************************************
'* Функция выгрузки баз 1С 7.7
'********************************************************************
Sub BackUp77
Dim MyFileName
Dim MyLogName
Dim MyPRMFile 
dim fso
Dim S                         


         AppendToFile strLogFileName, "Определили, что тип базы 1С v 7.7"
         AppendToFile strLogFileName, "Проверяем наличие папки для хранения архивной копии..."
         FolderCreate BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName
         
         If Not FolderExist (BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName) then
                AppendToFile strLogFileName, "Папки для хранения архивной копии не существует, и создать её не удалось!!!"
                AppendToFile strLogFileName, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ РАБОТЫ ПРОГРАММЫ!!!"
                WScript.Quit
            End If
            
         AppendToFile strLogFileName, "Папка нашлась."
            AppendToFile strLogFileName, "Продолжаем работу."
            AppendToFile strLogFileName, " "
         AppendToFile strLogFileName, "Подготавливаем файл с параметрами для запуска 1С v 7.7"
         AppendToFile strLogFileName, "Вычислим имя для пакетного файла."
    
         MyFileName =  BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\1CBackUp.prm"
         
         AppendToFile strLogFileName, "Имя получилось следующим: " & MyFileName
         AppendToFile strLogFileName, "Запишем в файл нужные параметры:"
            AppendToFile strLogFileName, " "
            
                Set fso = WScript.CreateObject("Scripting.FileSystemObject")
                Set MyPRMFile =fso.CreateTextFile(MyFileName, True)
            
                    ' Вычислим имя для log-файла 1С
                    MyLogName = BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\1C_Log_File.txt"
                
                    ' Запись текста в пакетный файл
                    MyPRMFile.WriteLine("[General]")
                    MyPRMFile.WriteLine("Output = """ & MyLogName & """" )
                    MyPRMFile.WriteLine("Quit = 1")
                    MyPRMFile.WriteLine("CheckAndRepair = 0")
                    MyPRMFile.WriteLine("UnloadData = 1")
                    MyPRMFile.WriteLine("SaveData = 0")
                    MyPRMFile.WriteLine("AutoExchange = 0")
                    MyPRMFile.WriteLine("")
                    MyPRMFile.WriteLine("[UnloadData]")
                    MyPRMFile.WriteLine("UnloadToFile = """ & BackUpFolder & "\" & BasesList(I).BaseBackUpFolderName & "\" & BasesList(I).BaseBackUpFileName & " " & Replace(cstr(now()), ":", ".") & ".zip""")
                    MyPRMFile.WriteLine("IncludeUserDef = 1")
                    MyPRMFile.WriteLine("Password =")
                
                    MyPRMFile.Close
            
                Set MyPRMFile = Nothing
                Set fso = Nothing
        
            AppendToFile strLogFileName, ReadTextFromFile (MyFileName)
         
         
         
         AppendToFile strLogFileName, "Подготавливаем строку для запуска 1С v 7.7"
         
            S = """" & BasesList(I).Program1CName & """ config /d""" & BasesList(I).BaseLocationPath & """ /n""" & BasesList(I).UserName & """ /p""" & BasesList(I).UserPassword & """ /@""" & MyFileName & """"
         AppendToFile strLogFileName, "Строка для запуска 1С получилась следующая:"
         AppendToFile strLogFileName, S
         
         AppendToFile strLogFileName, "Запускаем 1C в пакетном режиме..."
         
            Set WshShell = CreateObject("WScript.Shell")
                oExec = WshShell.run( S, 5 , True)
            Set WshShell = Nothing
            
            AppendToFile strLogFileName, "Отчёт самой программы 1С о выгрузке базы следующий:"
            
            AppendToFile strLogFileName, ReadTextFromFile ( MyLogName)
         
         AppendToFile strLogFileName, "Удалим файл с отчётом 1С с диска компьютера..."
         DeleteTextFile ( MyLogName)
         
         If Err.Number = 0 Then
             AppendToFile strLogFileName, "Файл с отчётом 1С успешно удалён!"
         Else
             AppendToFile strLogFileName, "Файл с отчётом 1С удалить не удалось!"
         End If
         
            AppendToFile strLogFileName, " "   
    
         AppendToFile strLogFileName, "Удалим файл параметров выгрузки базы 1С с диска компьютера..."
         DeleteTextFile ( MyFileName)
         
         If Err.Number = 0 Then
             AppendToFile strLogFileName, "Файл параметров выгрузки базы 1С успешно удалён!"
         Else
             AppendToFile strLogFileName, "Файл параметров выгрузки базы 1С удалить не удалось!"
         End If         
End Sub


Параметры архивируемых баз указываются прямо в коде скрипта
Код

' Задаём параметры архивируемых баз данных

' "Корневая" папка для архивных коипий
' Все остальные папки будут создаваться именно в этой корневой папке!!!
BackUpFolder = "c:\1Cbackup"

' Задаём параметры первой базы
Set MyBase = New Base1C
    ReDim Preserve BasesList(UBound(BasesList)+1)
        MyBase.Type1C = "81"
        MyBase.Program1CName = "C:\Program Files\1cv81\bin\1cv8.exe"
        MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\11111"
        MyBase.BaseBackUpFolderName = "Информационная база"
        MyBase.BaseBackUpFileName = "Информационная база"
        MyBase.UserName = "вася"
        MyBase.UserPassword = "123"    
    Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing

' Задаём параметры второй базы
Set MyBase = New Base1C
    ReDim Preserve BasesList(UBound(BasesList)+1)
        MyBase.Type1C = "81"
        MyBase.Program1CName = "C:\Program Files\1cv81\bin\1cv8.exe"
        MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\22222"
        MyBase.BaseBackUpFolderName = "базыща"
        MyBase.BaseBackUpFileName = "базыща"
        MyBase.UserName = "вася"
        MyBase.UserPassword = "123"    
    Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing

' Задаём параметры третьей базы
Set MyBase = New Base1C
    ReDim Preserve BasesList(UBound(BasesList)+1)
        MyBase.Type1C = "77"
        MyBase.Program1CName = "C:\Program Files\1Cv77\BIN\1cv7s.exe"
        MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\33333"
        MyBase.BaseBackUpFolderName = "семёрка"
        MyBase.BaseBackUpFileName = "семёрка"
        MyBase.UserName = "вася"
        MyBase.UserPassword = "123"    
    Set BasesList(UBound(BasesList)) = MyBase
Set MyBase = Nothing


Реально созданный лог:

Код

НАЧАЛО
Начинаем процесс автоматической архивации.
Лог пишется в файл    C:\Documents and Settings\mihanik\Рабочий стол\Создание архивных копий 1С\BackUp1CBases.Log
Дата:    17.05.2009
Время:    20:47:50
 
Ищем все запущенные экземпляры 1С v 8.1 ...
Найдено экземпляров 1С v 8.1:    1
Закрываем все экземпляры 1С v 8.1 ...
Подождём секунд 5...
Продолжаем работу.
 
Ищем все запущенные экземпляры 1С v 7.7 ...
Найдено экземпляров 1С v 7.7:    1
Закрываем все экземпляры 1С v 7.7 ...
Подождём секунд 5...
Продолжаем работу.
 
Проверяем существование корневой папки для архивов
c:\1Cbackup - 
Папка нашлась.
Продолжаем работу.
 
Количество архивируемых баз = 3
 
Обрабатывается база № 1
Тип базы: 81
Имя исполняющего файла 1С: C:\Program Files\1cv81\bin\1cv8.exe
Исходное расположение базы: C:\Documents and Settings\mihanik\Рабочий стол\11111
Папка для архивной копии: Информационная база
Имя файла для архивной копии: Информационная база
Имя пользователя: вася
Пароль пользователя: 123
 
Определили, что тип базы 1С v 8.1
Проверяем наличие папки для хранения архивной копии...
c:\1Cbackup - Файл уже существует
c:\1Cbackup\Информационная база - 
Папка нашлась.
Продолжаем работу.
 
Подготавливаем строку для запуска 1С v 8.1
Строка для запуска 1С получилась следующая:
"C:\Program Files\1cv81\bin\1cv8.exe" CONFIG /DumpIB"c:\1Cbackup\Информационная база\Информационная база 17.05.2009 20.48.00.dt" /F"C:\Documents and Settings\mihanik\Рабочий стол\11111" /nвася /p123 /wa- /Out"c:\1Cbackup\Информационная база\dump.log" -NoTruncate 
Запускаем 1C в пакетном режиме...
Отчёт самой программы 1С о выгрузке базы следующий:
Выгрузка информационной базы успешно завершена

Удалим файл с отчётом 1С с диска компьютера...
Файл с отчётом 1С успешно удалён!
Закончили обработку базы № 1
 
Обрабатывается база № 2
Тип базы: 81
Имя исполняющего файла 1С: C:\Program Files\1cv81\bin\1cv8.exe
Исходное расположение базы: C:\Documents and Settings\mihanik\Рабочий стол\22222
Папка для архивной копии: базыща
Имя файла для архивной копии: базыща
Имя пользователя: вася
Пароль пользователя: 123
 
Определили, что тип базы 1С v 8.1
Проверяем наличие папки для хранения архивной копии...
c:\1Cbackup - Файл уже существует
c:\1Cbackup\базыща - 
Папка нашлась.
Продолжаем работу.
 
Подготавливаем строку для запуска 1С v 8.1
Строка для запуска 1С получилась следующая:
"C:\Program Files\1cv81\bin\1cv8.exe" CONFIG /DumpIB"c:\1Cbackup\базыща\базыща 17.05.2009 20.48.11.dt" /F"C:\Documents and Settings\mihanik\Рабочий стол\22222" /nвася /p123 /wa- /Out"c:\1Cbackup\базыща\dump.log" -NoTruncate 
Запускаем 1C в пакетном режиме...
Отчёт самой программы 1С о выгрузке базы следующий:
Выгрузка информационной базы успешно завершена

Удалим файл с отчётом 1С с диска компьютера...
Файл с отчётом 1С успешно удалён!
Закончили обработку базы № 2
 
Обрабатывается база № 3
Тип базы: 77
Имя исполняющего файла 1С: C:\Program Files\1Cv77\BIN\1cv7s.exe
Исходное расположение базы: C:\Documents and Settings\mihanik\Рабочий стол\33333
Папка для архивной копии: семёрка
Имя файла для архивной копии: семёрка
Имя пользователя: вася
Пароль пользователя: 123
 
Определили, что тип базы 1С v 7.7
Проверяем наличие папки для хранения архивной копии...
c:\1Cbackup - Файл уже существует
c:\1Cbackup\семёрка - 
Папка нашлась.
Продолжаем работу.
 
Подготавливаем файл с параметрами для запуска 1С v 7.7
Вычислим имя для пакетного файла.
Имя получилось следующим: c:\1Cbackup\семёрка\1CBackUp.prm
Запишем в файл нужные параметры:
 
[General]
Output = "c:\1Cbackup\семёрка\1C_Log_File.txt"
Quit = 1
CheckAndRepair = 0
UnloadData = 1
SaveData = 0
AutoExchange = 0

[UnloadData]
UnloadToFile = "c:\1Cbackup\семёрка\семёрка 17.05.2009 20.48.21.zip"
IncludeUserDef = 1
Password =

Подготавливаем строку для запуска 1С v 7.7
Строка для запуска 1С получилась следующая:
"C:\Program Files\1Cv77\BIN\1cv7s.exe" config /d"C:\Documents and Settings\mihanik\Рабочий стол\33333" /n"вася" /p"123" /@"c:\1Cbackup\семёрка\1CBackUp.prm"
Запускаем 1C в пакетном режиме...
Отчёт самой программы 1С о выгрузке базы следующий:
20090517;20:48:22;вася;C;UpDown;UpDownDnldToFile;1;c:\1Cbackup\семёрка\семёрка 17.05.2009 20.48.21.zip;;
20090517;20:48:22;вася;C;UpDown;UpDownDnldSuc;1;;;

Удалим файл с отчётом 1С с диска компьютера...
Файл с отчётом 1С успешно удалён!
 
Удалим файл параметров выгрузки базы 1С с диска компьютера...
Файл параметров выгрузки базы 1С успешно удалён!
Закончили обработку базы № 3
 
 
Архивация закончена.
Дата:    17.05.2009
Время:    20:48:22
КОНЕЦ
 


скрипт в прикреплённом архиве.
Прошу потестировать и высказать своё мнение!!!



Это сообщение отредактировал(а) mihanik - 17.5.2009, 20:53

Присоединённый файл ( Кол-во скачиваний: 522 )
Присоединённый файл  BackUp1C.zip 4,18 Kb


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
GuyverDen
Дата 1.6.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 1.6.2009

Репутация: нет
Всего: нет



Действительно очень полезная весчица, покрайней мере для меня.
Но данный скрипт не запускается на Windows Vista :((
PM MAIL   Вверх
FallenOne
Дата 3.6.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.6.2009

Репутация: нет
Всего: нет



mihanik, огромное спасибо. 

Я искал, я нашел, оно работает.
PM MAIL WWW   Вверх
mihanik
Дата 9.6.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 2
Всего: 109



Цитата(GuyverDen @  1.6.2009,  17:46 Найти цитируемый пост)
Действительно очень полезная весчица, покрайней мере для меня.
Но данный скрипт не запускается на Windows Vista :(( 


Так... А вот с этого места поподробнее!
Ты скрипт запускаешь с правами админа?



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Gextor
Дата 20.7.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 20.7.2009

Репутация: нет
Всего: нет



Спасибо за скрипт. помогло, удобно, быстро + подробный лог! smile 

и есть небольшая просьба..

немогли бы вы помочь в составлении скрипта, после которого, выгрузка заархивировалась, и отправилась на почту через Оутлук.
и после удачной отправки, созданная скриптом папка "Информационная база", с выгрузкой, автоматом удалялась?

Зараннее спасибо!  smile

Добавлено через 9 минут и 39 секунд
Да и еще..

вот здесь:
Цитата
MyBase.BaseLocationPath = "C:\Documents and Settings\mihanik\Рабочий стол\11111"

это для файловой базы, правильно? 
а как прописать путь, если база посаженна на SQL, на сервере?
PM MAIL   Вверх
kopermain
Дата 20.7.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 30.6.2006

Репутация: нет
Всего: нет



Скрипт прикольный, вполне работоспособный.
Могу разве что привнести несколько идей, правда не знаю насколько они нужны! )))
Можно сделать "Первый запуск", при первом запуске скрипт запрашивает все параметры настройки, путь к базе, логин, пароль и т.д. 
Затем все это дело сохранить в файлик, и в дальнейшем использовать настройки из этого файлика.
Так сказать универсальный скрипт. ))) А параметры по умолчанию можно читать из реестра.
В таком случае даже "непутевый админ" сможет настроить этот скрипт без труда.
И еще добавить возможность архивирования, и отправки по FTP, так как по почте большие объемы проходят с трудом.

В случае с SQL, есть вариант архивировать базу с помощью sql.
+ база архивируется быстрее
+ не нужно выгонять пользователей
+ есть мастер и планировщик событий ( в зависимости от версии)
- при разворачивании нужно наличие сервера SQL той же версии
- желательно хотя-бы примерное знание языка запросов.
PM MAIL ICQ   Вверх
Itsys
Дата 20.7.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



mihanik, а зачем надо было огород городить? Так просто интересно... в чем причина написания такого скрипта?

ЗЫ у меня все базы лежат в одной папаке... "Bases", ntbackup-ом все прекрасно архивируется, в случае базы SQL отдельно архивируются SQL-ные базы... 
PM MAIL WWW Skype   Вверх
Gextor
Дата 20.7.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 20.7.2009

Репутация: нет
Всего: нет



kopermain, для меня скрипты еще необученное царство ;-) поэтому прошу вас написать, так как и времени нету копатся искать в нете, а начальство все грузит и грузит)))


PM MAIL   Вверх
Gextor
Дата 23.7.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 20.7.2009

Репутация: нет
Всего: нет



кто нибудь поможет?  smile 
PM MAIL   Вверх
mihanik
Дата 12.8.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


-=Белый Медведь=-
****


Профиль
Группа: Комодератор
Сообщений: 4054
Регистрация: 24.4.2006
Где: г. Тверь

Репутация: 2
Всего: 109



Цитата(Itsys @  20.7.2009,  14:53 Найти цитируемый пост)
mihanik, а зачем надо было огород городить? Так просто интересно... в чем причина написания такого скрипта?


Из лихости.
Часто приходиться автоархивацию баз 1с настраивать.


kopermain, ваши идеи хороши.
Подумаю, но пока нет необходимости скрипт дорабатывать.
Приспичит - доработаю.


Всем спасибо за отклики.



--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
Nastyusha
Дата 7.11.2011, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.11.2011

Репутация: нет
Всего: нет



Благодарю mihanikа за скрипт.Автор просто умница. На локальной (тестовой базе работает)на рабочей еще пока не запускала.Очень приятно, что автор все объяснил доступным языком,как говориться "ежу понятно". Вы очень доступно объясняете Ваш код
PM MAIL   Вверх
Ierror
Дата 10.12.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Простой ламер )



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 28.4.2010
Где: Новороссийск

Репутация: нет
Всего: нет



Работа хорошая. Сам использую либо хранитель либо кобиан бэкап.
PM MAIL WWW   Вверх
sinjevla
Дата 5.2.2012, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.12.2011

Репутация: нет
Всего: нет



А зачем так парится вот список программ и Бэкап 1С будет без лишних заморочек http://1c-md.com/administrirovanie/bekap-1spredpriyatie.html
PM MAIL WWW   Вверх
vladbob
Дата 18.7.2012, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.7.2012

Репутация: нет
Всего: нет



mihanik, Большое спасибо за скриптик. Помог, немного доработал под себя, но могу сказать точно на 8.2 работает идеально.
PM MAIL   Вверх
Nastyusha
Дата 1.11.2016, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.11.2011

Репутация: нет
Всего: нет



mihanik

Благодарю Вас за потрясающий скрипт- я пользуюсь им уже много лет, спасибо большое за Ваш  труд, за подробнейшие комментарии.

Хотелось бы сделать копию только что созданного dt файла  в другое место. Пытаюсь в Вашем скрипте это сделать, к сожалению не получается.
Может быть Вы сможете помощь мне в этом?

Добавила функции

Код


Function MyFileDT (ByVal FileCopy)
dim fso
    On Error Resume Next
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
        MyFileDT = (fso.FileExists(FileCopy)) 
    Set fso = Nothing
end Function

Function FileCopyFun (byval FileCopy , byval FileCopyNew)

        Dim objFSO
        Const OverwriteExisting = True
    ' On Error Resume Next
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        objFSO.CopyFile FileCopy , FileCopyNew, OverwriteExisting
            Set objFSO = Nothing
        AppendToFile strLogFileName, "  "
        AppendToFile strLogFileName, "Что скопировали:      " & FileCopy 
        AppendToFile strLogFileName, "Куда скопировали:     " & FileCopyNew    
        AppendToFile strLogFileName, "Функция копирования сработала!!"
        AppendToFile strLogFileName, "  " 
end Function


к сожалению, не находит пути файла и не копирует.
Подскажите пожалуйста, как сделать это копирование??

Заранее благодарю за помощь.


Это сообщение отредактировал(а) Nastyusha - 1.11.2016, 11:21
PM MAIL   Вверх
mitry
Дата 19.12.2016, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 19.12.2016

Репутация: нет
Всего: нет



Прошу помощи.
Пользовался данным скриптом лет 5, работал он исправно всё это время.
Запускался он у меня от имени АДМИНИСТРАТОРА на SERVER 2003 (x32).
Недавно перевёл свой сервак на SERVER 2008 (x64) и скрипт перестал работать.
Короче, процедура (строки 264-284):.....

Function KillProcess (ByVal PName)
Dim objService, objProc
    
    Err.Clear
    On Error Resume Next
    
    Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
    
    If Err.Number <> 0 Then
        AppendToFile strLogFileName, "ПРОИЗОШЛА ОШИБКА!!!"
        AppendToFile strLogFileName, Err.Number & ": " & Err.Description
        AppendToFile strLogFileName, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ РАБОТЫ ПРОГРАММЫ!!!"
        WScript.Quit
    End If
    For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name like  '" & PName & "'")
        objProc.Terminate
    Next
    
End Function


....не хочет закрывать процессы других пользователей. Зарывает только процессы того, от имени кого скрипт запускается. Соответственно, если кто-то из пользователей не закрыл программу в конце рабочего дня, а архив делается ночью, то база не архивируется.
Подскажите, что изменить в программе, чтобы процессы закрывались.


PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.1913 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.