Что нового

[Автоматизация] Пакетное обновление нескольких конфигураций 1C 7.7

draf

Новичок
Сообщения
1
Репутация
0
Доброго времени суток.
Возникла необходимость обновлять на работе несколько баз 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.

Описание:

Примечания:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: [Автоматизация] Пакетная обработка нескольких конфигураций 1C 7.7

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Верх