Здравствуйте.
За последнее время профессиональная деятельность нашей команды изменилась и сталкиваться с 1С приходится лишь изредка. Именно поэтому так давно не было обновлений на данном ресурсе.
Однако одна из интересных задач осталась открытой и по сей день. Речь об автоматизации утилиты для проверки физической целостности файловой БД 1С.
В рамках развития проекта «ИТС-помощник» мы публикуем фрагмент скрипта AutoIt, позволяющий получить данные из поля вывода информации утилиты chdbfl.exe и записать в файл.
-
#include <MsgBoxConstants.au3>
-
#include <WinAPISys.au3>
-
#include <WinAPIvkeysConstants.au3>
-
#include <FileConstants.au3>
-
#include <WinAPIFiles.au3>
-
BeforeRun()
-
RunChdbfl()
-
Sleep($cmdline[4])
-
LogToClipboard()
-
ClipboardToFile()
-
Func BeforeRun()
-
Opt(«TrayIconHide», 1)
-
Opt(«SendKeyDelay», 0)
-
; Запуск chdbfl.exe с передачей параметров:
-
; — ПолныйПутьchdbfl.exe — напр. C:\Program Files\1cv8\8.3.9.1850\bin\chdbfl.exe
-
; — ИсправлятьОшибки – исправлять обнаруженные ошибки (0 или 1)
-
; — ИмяФайлаБД – путь к основному файлу базы данных (1Cv8.1CD)
-
; — ВремяПроверки — время в миллисекундах по истечении которого данные chdbfl.exe будут записаны в файл
-
; — ИмяЛогфайла — полный путь для сохранения лог-файла
-
If $cmdline[0] <> 5 Then
-
MsgBox(0, «Описание параметров запуска», «runchdbfl.exe ПолныйПутьchdbfl.exe ИсправлятьОшибки ИмяФайлаБД ВремяПроверки ИмяЛогфайла» & @CRLF & @CRLF & «ПолныйПутьchdbfl.exe: напр. C:\Program Files\1cv8\8.3.9.1850\bin\chdbfl.exe» & @CRLF & «ИсправлятьОшибки: 0 или 1» & @CRLF & «ИмяФайлаБД: путь к файлу 1Cv8.1CD» & @CRLF & «ВремяПроверки: время на проверку в миллисекундах» & @CRLF & «ИмяЛогфайла: напр. C:\Users\username\Documents\1C\logs\1cbdlog.txt»)
-
Exit
-
EndIf
-
EndFunc
-
Func RunChdbfl()
-
Run($cmdline[1])
-
WinWait(«Проверка физической целостности файла БД»)
-
Send($cmdline[3], 1)
-
Send(«{TAB}»)
-
If $cmdline[2] = «1» Then
-
Send(«{SPACE}»)
-
EndIf
-
Send(«{TAB 2}{ENTER}»)
-
EndFunc
-
Func LogToClipboard()
-
; Получение дескриптора окна chdbfl.exe по заголовку
-
Local $hWnd = WinWait(«Проверка физической целостности файла БД», «», 1)
-
; Установка фокуса в поле вывода результата проверки БД
-
ControlFocus($hWnd, «», «[CLASS:V8FormElement;INSTANCE:4]»)
-
; Выделение выведенной информации (эмуляция ctrl+A)
-
_WinAPI_Keybd_Event($VK_CONTROL, 0)
-
_WinAPI_Keybd_Event($VK_A, 0)
-
_WinAPI_Keybd_Event($VK_A, 2)
-
_WinAPI_Keybd_Event($VK_CONTROL, 2)
-
; Копирование выделенного
-
Send(«^{INSERT}»)
-
EndFunc
-
Func ClipboardToFile()
-
; Получение дескриптора окна chdbfl.exe по заголовку
-
Local $hWnd = WinWait(«Проверка физической целостности файла БД», «», 1)
-
; Сохранение в переменную информации из буфера обмена
-
$sData = ClipGet()
-
; Создание локальной переменной с именем файла
-
Local Const $sFilePath = $cmdline[5]
-
; Открытие файла для дозаписи
-
Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
-
If $hFileOpen = —1 Then
-
MsgBox($MB_SYSTEMMODAL, «», «An error occurred whilst writing the log file.»)
-
Return False
-
EndIf
-
; Запись значения переменной $sData в файл
-
FileWrite($hFileOpen, $sData)
-
; Закрытие файла
-
FileClose($hFileOpen)
-
WinClose($hWnd)
-
EndFunc