draf
Новичок
- Сообщения
- 1
- Репутация
- 0
Доброго времени суток.
Возникла необходимость обновлять на работе несколько баз 1С 7.7 ( так как 1 есник уволился).
Нарыл следующий скрипт
и .ini к нему
bases.ini
update.ini
но работает оно не корректно
прошу помощи......
Версия AutoIt: 3.
Описание:
Примечания:
Возникла необходимость обновлять на работе несколько баз 1С 7.7 ( так как 1 есник уволился).
Нарыл следующий скрипт
Код:
#Include <date.au3>
#include <file.au3>
Opt("TrayIconDebug", 1)
$iniBASES="bases.ini"
$iniSETTINGS="update.ini"
$winSTART=IniRead($iniBASES, "Titles", "START", "")
$winREGISTER=IniRead($iniBASES, "Titles", "REGISTER", "")
$winMAIN=IniRead($iniBASES, "Titles", "cfgMAIN", "")
$winTIP=IniRead($iniBASES, "Titles", "TIP", "")
$winMESSAGE=IniRead($iniBASES, "Titles", "cfgMESSAGE", "")
$winUPDATESTART=IniRead($iniBASES, "Titles", "cfgUPDATESTART", "")
$winUPDATEMAIN=IniRead($iniBASES, "Titles", "cfgUPDATEMAIN", "")
$winUPDATEEND=IniRead($iniBASES, "Titles", "cfgUPDATEEND", "")
$START=IniRead($iniBASES, "Paths", "cfgSTART", "C:\Program Files\1Cv77\BIN\1cv7.exe config")
$UPDATE=IniRead($iniSETTINGS, "Settings", "sourcePATH", "D:\")
$CLEAR=IniRead($iniBASES, "Settings", "CLEAR", 1)
$BASES = IniReadSection($iniBASES, "Bases")
$SPEED=IniRead($iniBASES, "Settings", "SPEED", 1)
;Создание и/или открытие лог-файла
DirCreate(@ScriptDir & "\Logs")
$filename=String(@ScriptDir & "\Logs\" &StringReplace(_NowDate(),"/",".") & " update" & ".log")
If Not FileExists($filename) Then
If Not _FileCreate($filename) Then
MsgBox(4096,"ОШИБКА", " Ошибка создания лог-файла. ошибка:" & @error)
EndIf
EndIf
$file = FileOpen($filename, 1)
If $file = -1 Then
MsgBox(0, "ОШИБКА", "Невозможно открыть лог-файл.")
Exit
EndIf
FileWriteLine($file, _Now() & ": Запуск обновления" & @CRLF)
If @error Then
MsgBox(4096, "", "ОШИБКА: НЕ НАЙДЕН INI ФАЙЛ.")
FileWriteLine($file, _Now() & ": ОШИБКА: НЕ НАЙДЕН INI ФАЙЛ" & @CRLF)
Exit
EndIf
;Запуск 1C
FileWrite($file, _Now() & ": Ожидание запуска 1C... ")
Run($START)
FileWriteLine($file, "ОК" & @CRLF)
FileWrite($file, _Now() & ": Ожидание окна запуска... ")
WinWait($winSTART)
WinActivate($winSTART)
FileWriteLine($file, "ОК" & @CRLF)
;Очистка списка баз
FileWrite($file, _Now() & ": Ожидание окончания очистки списка баз... ")
For $i = 0 To $CLEAR
ControlClick($winSTART, "", "Button6")
Next
FileWriteLine($file, "ОК" & @CRLF)
;Выход
Send("!{F4}")
FileWriteLine($file, @CRLF)
;Обход списка баз
For $k = 1 To $BASES[0][0]
FileWrite($file, _Now() & ": Загрузка данных о следующей базе... ")
$CurBase=$BASES[$k][0]
$CurPath=$BASES[$k][1]
FileWriteLine($file, "ОК (" & $CurBase & ")" & @CRLF)
;Запуск 1C
FileWrite($file, _Now() & " - " & $CurBase & ": Ожидание запуска 1C... ")
Run($START)
FileWriteLine($file, "ОК" & @CRLF)
FileWrite($file, _Now() & " - " & $CurBase & ": Ожидание окна запуска... ")
WinWait($winSTART)
WinActivate($winSTART)
FileWriteLine($file, "ОК" & @CRLF)
;Удаление предыдущей базы
FileWrite($file, _Now() & " - " & $CurBase & ": Удаление предыдущей базы... ")
ControlClick($winSTART, "", "Button6")
FileWriteLine($file, "ОК" & @CRLF)
;Добавление базы
FileWrite($file, _Now() & " - " & $CurBase & ": Добавление базы в окно запуска... ")
ControlClick($winSTART, "", "Button5")
WinWait($winREGISTER)
WinActivate($winREGISTER)
ControlSetText($winREGISTER, "", "Edit1", $CurBase)
ControlSetText($winREGISTER, "", "Edit2", $CurPath)
ControlClick($winREGISTER, "", "Button2")
WinWaitClose($winREGISTER)
FileWriteLine($file, "ОК" & @CRLF)
;Загрузка базы 1C
FileWrite($file, _Now() & " - " & $CurBase & ": Ожидание загрузки базы... ")
ControlClick($winSTART, "", "Button2")
WinWait($winMAIN)
FileWriteLine($file, "ОК" & @CRLF)
;Обработка окна "Совет дня"
FileWrite($file, _Now() & " - " & $CurBase & ": Обработка окна СОВЕТ ДНЯ... ")
$i=WinWait($winTIP,"",Number($SPEED)*2)
If $i=1 Then
WinActivate($winTIP)
ControlCommand($winTIP, "", "Button6", "UnCheck", "")
Sleep (100)
Send("{ENTER}")
WinWaitClose($winTIP)
FileWriteLine($file, "ОК" & @CRLF)
Else
FileWriteLine($file, "НЕТ" & @CRLF)
EndIf
;Обновление базы
FileWrite($file, _Now() & " - " & $CurBase & ": Ввод пути к эталонной базе... ")
$ok=0
Do
WinActivate($winMAIN)
Send("{ALT}")
Send("{RIGHT}")
Send("{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}")
Send("{ENTER}")
WinWait($winUPDATESTART)
WinActivate($winUPDATESTART)
ControlFocus($winUPDATESTART, "", "Edit1")
ControlCommand($winUPDATESTART, "", "Edit1", "EditPaste", $UPDATE)
ControlClick($winUPDATESTART, "", "Button2")
$i=WinWaitClose($winUPDATESTART,"",Number($SPEED)*2)
If $i=1 Then
$ok=1
FileWriteLine($file, "ОК" & @CRLF)
Else
Send("!{F4}")
$ok=0
FileWriteLine($file, "ОШИБКА" & @CRLF)
FileWrite($file, _Now() & " - " & $CurBase & ": Повторный ввод пути к эталонной базе... ")
EndIf
Until $ok=1
FileWrite($file, _Now() & " - " & $CurBase & ": Ожидание обработки обновления... ")
While 1
Sleep(100)
If WinExists($winUPDATEMAIN) = 1 Then
WinActivate($winUPDATEMAIN)
ControlClick($winUPDATEMAIN, "", "Button7")
WinWaitClose($winUPDATEMAIN)
Send("!{F4}")
WinWait($winMESSAGE)
WinActivate($winMESSAGE)
ControlClick($winMESSAGE, "", "Button1")
WinWaitActive($winUPDATEEND)
ControlClick($winUPDATEEND, "", "Button1")
WinWait($winMESSAGE, "Реорганизация")
WinActivate($winMESSAGE, "Реорганизация")
ControlClick($winMESSAGE, "Реорганизация", "Button1")
WinWaitClose($winMESSAGE, "Реорганизация")
FileWriteLine($file, "БАЗА УСПЕШНО ОБНОВЛЕНА" & @CRLF)
exitloop
ElseIf WinExists($winMESSAGE, "идентичны") = 1 Then
WinWait($winMESSAGE, "идентичны")
WinActivate($winMESSAGE, "идентичны")
ControlClick($winMESSAGE, "идентичны", "Button1")
WinActivate($winMAIN)
Send("!{F4}")
FileWriteLine($file, "БАЗЫ ИДЕНТИЧНЫ" & @CRLF)
exitloop
ElseIF WinExists($winMESSAGE, "Ошибка") = 1 Then
WinWait($winMESSAGE)
WinActivate($winMESSAGE)
ControlClick($winMESSAGE, "", "Button1")
WinActivate($winMAIN)
Send("!{F4}")
FileWriteLine($file, "ПРОИЗОШЛА НЕПРИДВИДЕННАЯ ОШИБКА" & @CRLF)
exitloop
EndIf
WEnd
FileWrite($file, _Now() & " - " & $CurBase & ": Ожидание закрытия базы... ")
ProcessWaitClose("1cv7.exe")
FileWriteLine($file, "ОК" & @CRLF)
FileWriteLine($file, @CRLF)
Next
FileClose($file)
и .ini к нему
bases.ini
Код:
[Bases]
;Пути без пробелов могут писаться без кавычек.
;Параметр НазваниеБазы используется для составления имени архива
;Количество путей не орграничено
;Пути могут иметь вид типа: "\\server\1CBD"
НазваниеБазы1=Путь1
НазваниеБазы2=Путь2
[Titles]
;Это текст, который встречается в названии окон 1С.
;Окна, которые используются и в 1С:Предприятие и 1С:Конфигураторе.
START="Запуск 1С:Предприятия"
REGISTER="Регистрация Информационной Базы"
TIP="Совет дня"
;Окна, которые используются в 1С:Предприятие.
entMAIN="1С:Предприятие - Бухгалтерский учет, редакция 4.5"
entMESSAGE="1С:Предприятие"
;Окна, которые используются в 1С:Конфигураторе.
cfgMESSAGE="Конфигуратор"
cfgMAIN="Конфигуратор - Бухгалтерский учет, редакция 4.5"
cfgEXPORT="Выгрузка данных"
cfgUPDATESTART="Открыть файл конфигурации"
cfgUPDATEMAIN="Объединение конфигураций"
cfgUPDATEEND="Реорганизация информации"
[Paths]
;Путь для запуска Конфигуратора 1С.
cfgSTART="C:\Program Files\1Cv77\BIN\1cv7.exe config"
;Путь для стандартного запуска 1С.
nrmSTART="C:\Program Files\1Cv77\BIN\1cv7.exe"
;Путь для запуска 1С-Монопольно.
mnpSTART="C:\Program Files\1Cv77\BIN\1CV7.exe enterprise /m"
[Settings]
;Это количество раз нажатия кнопки "Удалить" в окне запуска 1С при первом запуске обработки
;Необходимо для очищения списка баз в окне запуска 1С (чтобы не обновить что-то не то).
;Если Вы не уверены, то оставьте по умолчанию.
CLEAR=300
;Это относительная скорость работы вашей 1С. 1 - это локальные базы данных, быстрый компьютер. 2-4 по сети
;в зависимости от скорости сети и сервера.
;Это необходимо для задания времени ожидания определенных окон (например,сообщения об идентичности конфигураций).
SPEED=1
update.ini
Код:
Settings]
;Путь к эталонному файлу конфигурации.
sourcePATH="\\server\1C\ЭталоннаяБаза\1cv7.md"
но работает оно не корректно
прошу помощи......
Версия AutoIt: 3.
Описание:
Примечания: