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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выгрузка данных из 1С, программа на VBS 
V
    Опции темы
mihanik
Дата 8.2.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Привет всем!!! smile 

Представляю вашему вниманию программу, которая автоматически делает выгрузку базы 1С в zip-архив.

Может кому пригодиться...

Строка запуска

1CBackUp.vbs или
1CBackUp.vbs [параметры]

Пример 
1CBackUp.vbs Path:="C:\Program Files\1Cv77"

Поддерживает следующие ИМЕНОВАНЫЕ параметры
  • PATH
  • USER
  • PASSWORD
  • BACKUPPATH
  • 1CNAME
Если параметры не указаны, то берутся параметры, заложеные в программу...

Может, пригодиться кому...
Сегодня полдня писАл...  smile 

(Кое-где коментарии к тексту программы "левые".)

Код

''''''''''''''''''''''''''''''''''''''''''''''
' Скрипт для резервного копирования (выгрузки)
' данных из базы данных 1С
'
' (с) Михаил Медведев. 2007 год.
''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''
' Определяем глобальные переменные
''''''''''''''''''''''''''''''''''''''''''''''
Public CName                                  ' ПОЛНОЕ имя исполняемого файла 1С
Public MyPath                                 ' Размещение базы данных 1С
Public MyUser                                 ' Имя пользователя с правами администратора
Public MyPassword                             ' Пароль пользователя
Public MyBackUpPath                           ' Место расположения архива
Public MyExtforms                             ' Признак необходимости архивирования EXTFORMS

Public fso                                    ' Переменная для работы с файловой системой
Public MyLogFile                              ' Объект "log-файл"
Public MyLogFileName                          ' Имя log-файла

''''''''''''''''''''''''''''''''''''''''''''''
' Основная программа
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

     Call InitialiseMyVariables               ' инициализируем переменные

     Call OpenLogFile                         ' открываем log-файл

     Call ReadScriptsArguments                ' Считываем имеющиеся параметры запуска скрипта

     Call RarExtforms                         ' Архивируем файлы .ert из Extforms

     call Create1CPRM                         ' Создаём командный файл для 1С

     call ExportFrom1C                        ' Запускаем 1С в пакетном режиме

     call Delete1CPRM                         ' Удаляем командный файл для 1С

     Call CloseLogFile                        ' закрываем log-файл

     WScript.Quit                             ' Завершаем работу скрипта...

''''''''''''''''''''''''''''''''''''''''''''''
' Конец основной программы
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''
' Подпрограмма инициализации глобальных переменных
''''''''''''''''''''''''''''''''''''''''''''''
Sub InitialiseMyVariables ()

    ' Устанавливаем значения по умолчанию
    CName        = "C:\Program Files\1Cv77\BIN\1cv7.exe"          ' Имя исполняемого файла 1С
    MyPath       = "D:\Документы Миханика\Бухгалтерия Алвист"     ' Размещение базы данных 1С
    MyBackUpPath = "D:"                                           ' Место расположения архива
    MyUser       = "МихаилМедведев"                               ' Имя пользователя с правами администратора
    MyPassword   = "миханик"                                      ' Пароль пользователя
    MyExtforms   = True                                           ' Признак необходимости архивирования EXTFORMS
                                                                  ' параметр задаётся ТОЛЬКО в программе
                                                                  ' возможные значения True / False
End sub

''''''''''''''''''''''''''''''''''''''''''''''
' Подпрограмма создания пакетного файла для 1С
''''''''''''''''''''''''''''''''''''''''''''''
Sub Create1CPRM ()

dim fso                                    ' Переменная для работы с файловой системой
dim MyPRMFile                              ' Объект "log-файл"
dim MyFileName                             ' Имя log-файла
Dim I

On Error Resume Next

    MyLogFile.WriteLine(cstr(now()) & " - Попытка создать временный пакетный файл для 1С.")

    ' Вычислим имя для пакетного файла
    MyFileName = mid(Wscript.ScriptFullName,1,instrrev(Wscript.ScriptFullName,"\")) & "1CBackUp.prm"

    ' Откроем пакетный файл для вывода
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set MyPRMFile =fso.CreateTextFile(MyFileName, True)

    ' Вычислим имя для log-файла 1С
    MyFileName = mid(Wscript.ScriptFullName,1,instrrev(Wscript.ScriptFullName,"\")) & "1C_Log_File " & Replace(cstr(now()), ":", ".") & ".txt"

    ' Запись текста в пакетный файл
    MyPRMFile.WriteLine("[General]")
    MyPRMFile.WriteLine("Output = """ & MyFileName & """" )
    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 = """ & MyBackUpPath & "\1CBackUp " & Replace(cstr(now()), ":", ".") & ".zip""")
    MyPRMFile.WriteLine("IncludeUserDef = 1")
    MyPRMFile.WriteLine("Password =")

    MyPRMFile.Close

    Set MyPRMFile = Nothing
    Set fso = Nothing

    MyFileName = mid(Wscript.ScriptFullName,1,instrrev(Wscript.ScriptFullName,"\")) & "1CBackUp.prm"

    If MyFileExist ( MyFileName ) Then
       MyLogFile.WriteLine(cstr(now()) & " - Файл успешно создан.")
    else
       MyLogFile.WriteLine(cstr(now()) & " - Не удалось создать файл.")
       MyLogFile.WriteLine(cstr(now()) & " - Выполнения скрипта прервано...")

       Call CloseLogFile

       WScript.Quit
    end If

end sub

''''''''''''''''''''''''''''''''''''''''''''''
' Подпрограмма удаления пакетного файла для 1С
''''''''''''''''''''''''''''''''''''''''''''''
Sub Delete1CPRM ()
dim fso                                    ' Переменная для работы с файловой системой
dim MyFileName                             ' Имя log-файла

On Error Resume Next

    MyLogFile.WriteLine(cstr(now()) & " - Попытка удалить временный пакетный файл для 1С.")

    ' Вычислим имя файла для программы для 1С
    MyFileName = mid(Wscript.ScriptFullName,1,instrrev(Wscript.ScriptFullName,"\")) & "1CBackUp.prm"

    If MyFileExist ( MyFileName ) Then

       MyLogFile.WriteLine(cstr(now()) & " - Файл найден.")

       ' Удалим файл с программой для 1С
       Set fso = WScript.CreateObject("Scripting.FileSystemObject")
       fso.DeleteFile(MyFileName)
       Set fso = Nothing
    else
       MyLogFile.WriteLine(cstr(now()) & " - Не удалось найти файл.")
       MyLogFile.WriteLine(cstr(now()) & " - Этап удаления файла пропущен.")
       Exit Sub
    end If

    If MyFileExist ( MyFileName ) Then
       MyLogFile.WriteLine(cstr(now()) & " - Не удалось удалить файл.")
    else
       MyLogFile.WriteLine(cstr(now()) & " - Файл был успешно удалён.")
    end if

end sub

''''''''''''''''''''''''''''''''''''''''''''''
' Функция проверки существования файла
''''''''''''''''''''''''''''''''''''''''''''''
Function MyFileExist (ByVal Name)

dim fso                                    ' Переменная для работы с файловой системой

    Set fso = WScript.CreateObject("Scripting.FileSystemObject")

    If (fso.FileExists(Name)) Then
      MyFileExist = True
    Else
      MyFileExist = False
    End If

end Function

''''''''''''''''''''''''''''''''''''''''''''''
' Подпрограмма открытия log-файла
''''''''''''''''''''''''''''''''''''''''''''''
Sub OpenLogFile ()

    ' Определим полное имя файла со скриптом
    MyLogFileName = Wscript.ScriptFullName

    ' Вычислим имя файла для лога
    MyLogFileName = mid(MyLogFileName,1,instrrev(MyLogFileName,"\"))
    MyLogFileName = MyLogFileName & "1CBackUp " & Replace(cstr(now()), ":", ".") & ".log"

    ' Откроем log-файл для вывода
    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set MyLogFile =fso.CreateTextFile(MyLogFileName, True)

    ' Запись в log-файл первой записи об его успешном создании
    MyLogFile.WriteLine(cstr(now()) & " - Log-файл успешно создан.")

End sub

'''''''''''''''''''''''''''''''''''''''''''''' 
' Подпрограмма закрытия log-файла
''''''''''''''''''''''''''''''''''''''''''''''
Sub CloseLogFile ()

    ' Закрываем log-файл
    MyLogFile.WriteLine(cstr(now()) & " - Скрипт закончил свою работу.")
    MyLogFile.Close
    set MyLogFile = Nothing
    Set fso = Nothing

End sub

''''''''''''''''''''''''''''''''''''''''''''''                               
' Подпрограмма считывания аргументов скрипта
''''''''''''''''''''''''''''''''''''''''''''''                               
Sub ReadScriptsArguments ()
Dim objArgs
Dim S, P, MyErr, I

    ' Проверим наличие аргументов у скрипта
    Set objArgs = WScript.Arguments

    If objArgs.Count=0 then
       ' Запись в log-файл о том, что аргументы скрипта не заданы
       MyLogFile.WriteLine(cstr(now()) & " - Скрипт был запущен без параметров.")
       MyLogFile.WriteLine(cstr(now()) & " - Были установлены параметры по умолчанию.")
    else
       ' Запись в log-файл о том, что были обнаружены аргументы скрипта
       MyLogFile.WriteLine(cstr(now()) & " - Скрипт был запущен с использованием параметров.")
       MyLogFile.WriteLine(cstr(now()) & " - Параметры по умолчанию будут изменены.")

        ' Если аргументы есть, то выделим их...
        MyErr = ""

        For I = 0 to (objArgs.Count - 1)

            P = instrrev(objArgs(I), ":=")

            If P = 0 Then
               MyLogFile.WriteLine(cstr(now()) & " - синтаксическая ошибка в параметре " & """" & objArgs(I) & """")
               MyErr = MyErr & "                    - " & objArgs(I) & VbCrLf
            else
               S = ucase (mid ( objArgs(I), 1, P - 1))
               Select Case S
                      Case "PATH"
                           MyPath = mid ( objArgs(I), P + 2, len(objArgs(I))-2)
                      Case "USER"
                           MyUser = mid ( objArgs(I), P + 2, len(objArgs(I))-2)
                      Case "PASSWORD"
                           MyPassword = mid ( objArgs(I), P + 2, len(objArgs(I))-2)
                      Case "BACKUPPATH"
                           MyBackUpPath = mid ( objArgs(I), P + 2, len(objArgs(I))-2)
                      Case "1CNAME"
                           CName = mid ( objArgs(I), P + 2, len(objArgs(I))-2)
                      Case Else
                           MyLogFile.WriteLine(cstr(now()) & " - синтаксическая ошибка в параметре " & """" & objArgs(I) & """")
                           MyErr = MyErr & "                    - " & objArgs(I) & VbCrLf
               End Select
            end if
        Next

        ' Если в аргументах были ошибки, то сообщим об этом
        If len(MyErr) <> 0 Then
           MyLogFile.WriteLine(cstr(now()) & " - В параметрах вызова скрипта были обнаружены ошибки.")
           MyLogFile.WriteLine(cstr(now()) & " - Ниже расположен список ошибочных параметров:")
           MyLogFile.WriteLine(MyErr)
           MyLogFile.WriteLine(cstr(now()) & " - Ошибочные параметры не обработаны.")
        end if

    end if
    Set objArgs = Nothing

    ' Выведем в log-файл установленные параметры работы скрипта
    S =     "                    - Path = """       & MyPath       & """" & VbCrLf
    S = S & "                    - User = """       & MyUser       & """" & VbCrLf
    S = S & "                    - Password = """   & MyPassword   & """" & VbCrLf
    S = S & "                    - BackUpPath = """ & MyBackUpPath & """" & VbCrLf
    S = S & "                    - 1CName = """     & CName        & """" & VbCrLf

    MyLogFile.WriteLine(cstr(now()) & " - Установлены следующие параметры работы скрипта:")
    MyLogFile.WriteLine(S)

End sub

''''''''''''''''''''''''''''''''''''''''''''''                               
' Подпрограмма архивирования файлов
' .ert из каталога Extforms
''''''''''''''''''''''''''''''''''''''''''''''                               
Sub RarExtforms ()
Dim WshShell, oExec
Dim S

    ' Если необходимо архивировать Extforms, делаем это.
    If MyExtforms Then
        ' Начинаем архивировать файлы .ert
        ' Выводим запись в log-файл
        MyLogFile.WriteLine(cstr(now()) & " - Начало архивирования EXTFORMS")

        ' Формируем строку с командой для WinRAR
        S = "winrar a -ep """ & MyBackUpPath & "\EXTFORMS "" """ & MyPath & "\EXTFORMS\*.ert"" -r -agDD-MM-YY"

        ' Выводим команду для WinRAR в log-файл
        MyLogFile.WriteLine("                    - " & S)

        ' Запускаем WinRAR с нужными параметрами
        Set WshShell = CreateObject("WScript.Shell")
        oExec = WshShell.run( S, 5 , True)
        Set WshShell = Nothing

        ' Выводим запись в log-файл
        MyLogFile.WriteLine(cstr(now()) & " - Конец архивирования EXTFORMS")
    End If

end sub

''''''''''''''''''''''''''''''''''''''''''''''                               
' Подпрограмма выгрузки данных из 1С
''''''''''''''''''''''''''''''''''''''''''''''                               
Sub ExportFrom1C ()
Dim WshShell, oExec
Dim S

        MyLogFile.WriteLine(cstr(now()) & " - Начало выгрузки базы 1С.")

        ' Формируем строку с командой для запуска 1С
        S = """" & CName & """ config /d""" & MyPath & """ /n""" & MyUser & """ /p""" & MyPassword & """ /@""" & _
            mid(Wscript.ScriptFullName,1,instrrev(Wscript.ScriptFullName,"\")) & "1CBackUp.prm"""

        ' Выводим команду для 1C в log-файл
        MyLogFile.WriteLine("                    - " & S)

        ' Запускаем 1C в пакетном режиме
        Set WshShell = CreateObject("WScript.Shell")
        oExec = WshShell.run( S, 5 , True)
        Set WshShell = Nothing

        ' Выводим запись в log-файл
        MyLogFile.WriteLine(cstr(now()) & " - Конец выгрузки из 1С.")

end sub





Это сообщение отредактировал(а) mihanik - 8.2.2007, 16:24

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  1CBackUp.vbs 13,44 Kb


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



А зачем? Это все делается стандартными средствами самой 1С.

Хотя, разве-что одной строкой...


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
mihanik
Дата 8.2.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Naghual, я написал эту программку по двум причинам

1. Мне лень дожидаться вечером, когда все бухи выйдут из 1С и уйдут домой.
У меня рабочий день до 17.00.
Они же часто сидят до 18.00 ... 20.00...
Утром же хочется поспать...

А вопрос резервного копирования решать надо...
Ночью же запускается задание, которое выполняет выгрузку данных в нужное место.
Каждый день своё имя файла...
Планирую и другие вкусности забацать...

2. Просто из лихости.  smile  Делать было нечего на работе...

Добавлено @ 20:31 
И потом...

Ты пробовал запускать 1С в командном (пакетном) режиме?
Прикольно!!!

 smile 


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



Цитата(mihanik @  8.2.2007,  20:28 Найти цитируемый пост)
Ты пробовал запускать 1С в командном (пакетном) режиме?


Конечно. Все путем работает.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Akina
Дата 9.2.2007, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



mihanik, у нас 1С архивится по шедулеру... БД из комстроки, ключами, юзерские настройки РАРятся... причем команды одинаковы и для файловой, и для SQL-версии... и делается это в полночь, когда заведомо никто в сервере не сидит - ибо отшибаются, да и нет никого.
Это не считая Maintainance Plans SQL-сервера.

Скрипт - оно тоже хорошо... но кое-что упущено. Например, срежется по какой-то причине Shell  - как ты узнаешь причину? Уж коли пишешь лог - так разливайся соловьем...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 9.2.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Akina, можешь дать пример вашего командного файлика?
Хочется посмотреть...  smile 
Я ж 1С недавно связался. Всех тонкостей ещё не знаю...

Добавлено @ 08:10 
Где и что можно ещё по этому вопросу почитать?


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


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(mihanik @  9.2.2007,  09:08 Найти цитируемый пост)
Где и что можно ещё по этому вопросу почитать? 

Наши девчонки, отвечающие за 1С, сделали все, пользуя исключительно книжки, поставляемые с дистрибутивом 1С.

Цитата(mihanik @  9.2.2007,  09:08 Найти цитируемый пост)
можешь дать пример вашего командного файлика?

Вот как выглядит строка основной команды шедулера:
Код

"C:\Program Files\1Cv77\BIN\1cv7s.exe" config /De:\base /NUserName /PPassword /@c:\1_c_arx\prm

А вот содержимое файла c:\1_c_arx\prm.prm
Код

[general]
Output=c:\1_c_arx\out.txt
UnloadData=1
[UnloadData]
UnloadToFile=c:\1_c_arx\arx.zip

Дальнейшие обработки ведутся другим заданием - уже утром. А упаковка каталогов форм РАРом тебе и так известна.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
mihanik
Дата 9.2.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Akina...

Похоже, что книжки по 1С хошь - не хошь, а читать придётся...  smile 

Ну, да ладно...  smile  smile 


--------------------
Программистами не рождаются, - это родовая травма...
user posted imageuser posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




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


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

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