Не ставится под сомнение, что регламентные задания лучше выполнять.
А как их выполнять если база – файловая?
Тут напрашивается ответ – А пусть пользователь нажмет кнопку Регламентные и фоновые задания – Выполнить сейчас. Так считают разработчики 1С.
Ответ неверный. Во первых не хочется давать административные права, во вторых пользователям неохота нажимать на кнопки.
Хорошо, тут же нагуглим вариант – стартовать 1С с ключом /C»DoScheduledJobs SkipMessageBox AloneIBSession».
Куда девать пароль ? Авторизация по имени пользователя ОС.
Как запускать – в планировщик от имени другого пользователя.
А как останавливать? У планировщика Windows дискретность – полчаса.
В общем грабли на грабельках и костыликами погоняют.
И хотя каждый программист 1С тянется к Delphi, есть выход проще.
AutoIt + русская справка. Через час все готово. Причем в виде исполняемых файлов.
Программа поднимает 1С, выполняет в течении заданного времени регламентные задания и закрывает 1С. Все параметры в ini файле. Кроме пароля.
Пароль генерирует скрипт password.au3.
Сами скрипты несложные, разберетесь:
Не советую только злоупотреблять кириллицей, это не 1С.
reglament1c.au3
;
; AutoIt Version: 3.0
; Language: English
; Platform: Win9x/NT
;
; Script Function:
;
#include
$inifile = @WorkingDir & "setting.auto"
$passwordfile = @WorkingDir & "password.auto"
Break(0) ;Disable break
If not FileExists($passwordfile) Then
MsgBox(4096,"", "Password file does not exist.")
Exit
EndIf
If not FileExists($inifile) Then
MsgBox(4096,"", "Ini file does not exist.")
Exit
EndIf
$strCommand = IniRead($inifile, "1C", "Command", "NotFound")
$strUser = IniRead($inifile, "1C", "User", "NotFound")
$strPath = IniRead($inifile, "1C", "Path", "NotFound")
$iTime = IniRead($inifile, "1C", "Time", "300")
$encrypted_password = FileRead($passwordfile) ;read in encrypted password from file
FileClose($passwordfile) ;close password file
if StringLen($encrypted_password) = 0 Then
$strPassword = ""
Else
$strPassword = _StringEncrypt(0,$encrypted_password,"f2f5f1f7ba",8)
EndIf
;$strCommand = 'C:Program Files (x86)1cv828.2.18.102in1cv8.exe ENTERPRISE /N"Федоров (администратор)" /P"" /IBConnectionString"File=""...Управление торговлей 11"";" /C"DoScheduledJobs SkipMessageBox AloneIBSession"'
$strCommand = $strCommand&' ENTERPRISE /N"'&$strUser&'" /P"'&$encrypted_password&'" /IBConnectionString"File=""'&$strPath&'"";" /C"DoScheduledJobs SkipMessageBox AloneIBSession"'
; Run
$PID = Run($strCommand)
If not $PID Then
MsgBox(4096,"", "Can't start 1C.")
Exit
EndIf
SplashTextOn("Start 1C", "1C started",-1,50)
Sleep(3000)
SplashOff()
Opt("WinTitleMatchMode", 1)
WinWait("Выполнение регламентных заданий:")
WinSetState("Выполнение регламентных заданий:", "", @SW_HIDE)
ProgressOn("Progress", "Please wait while 1C running", "0 percent",10,10,2)
For $i = 10 to 100 step 10
sleep(Int($iTime)*100)
If WinExists("Выполнение регламентных заданий:") Then
WinSetState("Выполнение регламентных заданий:", "", @SW_HIDE)
Else
Exit
EndIf
ProgressSet( $i, $i & " percent, left: "& (Int($iTime) - Int($iTime)/100*$i)& " second")
Next
ProgressSet(100 , "Done", "Complete")
sleep(500)
ProgressOff()
; Now quit by sending a "close" request
If $PID Then
If ProcessExists($PID) Then
ProcessClose($PID)
EndIf
EndIf
sleep(500)
; Finished!
password.au3
#include
Func _Manage_Password()
Local $reset, $encrypted_password, $handle, $pwfile
$pwfile = @WorkingDir & "password.auto"
$reset = msgbox(260,"PASSWORD RESET","Would you like to set your password?",10) ;does user want to rest password
if $reset = 6 OR FileExists($pwfile) = 0 Then ;if resetting pword or pword file doesn't exist
$encrypted_password = _StringEncrypt(1,InputBox("Title","Prompt","","*"),"f2f5f1f7ba",8) ;get pword and encrypt into a string
$handle = FileOpen($pwfile,2) ;open file in overwrite write mode
FileWrite($handle,$encrypted_password) ;write encrypted string into file
FileClose($handle) ;close password file
Else
$encrypted_password = FileRead($pwfile) ;read in encrypted password from file
FileClose($pwfile) ;close password file
EndIf
return $encrypted_password ;return the encrypted password
EndFunc
$encrypted_password = _Manage_Password() ;retrieve ecrypted pw or set a new one
$password = _StringEncrypt(0,$encrypted_password,"f2f5f1f7ba",8) ;decrypt password
MsgBox(1,"password",$password,10)
; Finished!
Мир этому дому!
Плюсанул за статью. Я так же считаю что AutoIT — удобная обертка для запуска приложений. Всегда можно дополнить этот процесс какими-то своими условиями и проверками.
Код немного поправить надо. Что-то вроде:
…
$encrypted_password = FileRead($passwordfile) ;read in encrypted password from file
$password = _StringEncrypt(0,$encrypted_password,»f2f5f1f7ba»,8) ;decrypt password
…
и далее подставлять в командную строку на выполнение уже расшифрованный пароль $password …
(2) LexSeIch,
Тело хозяйское 🙂
За плюс — мерси.
За что отвечает параметр Swith в файле setting.auto ?
В этой версии ни за что не отвечает.
Не обращайте внимания.
Какие параметры нужно указать, чтобы скрипт не закрывался через определенное время, а работал бесконечно долго?
И регламентные задания — в частности — автоматическая синхронизация — не отрабатывает. Скрипт при этом запущен. Информационное окно о состоянии работы скрипта есть. Запуск регламентного задания через 1С в ручную отрабатывает корректно. Автоматически через скрипт — не получается.
Переписал скрипт.
Изменил алгоритм работы:
1) скрипт запускает 1С
2) после авторизации в 1С запускается обработчик регламентных заданий
3) скрипт убивает сам себя, не закрывая 1С.
Таким образом регламентные задания будут выполняться по расписанию и бесконечно долго без привязки к параметру Time.
Дай бог памяти… много лет назад пользовался кажется «startx» не пинайте название точно не помню, висела она в трее, можно было много скриптов отработать и последовательность выдержать и по времени, однозначно выручала она и проще гораздо. Тогда еще AutoIt был совсем детский. Думаю пора вспомнить о ней.
(8) identificator,
Если не сложно, поделитесь скриптом.
И еще вопрос. Почему-то автоматом не отрабатывает запуск 1С, т.е. приходится нажимать ок для авторизации пользователя. Версия платформы 8.2.19.83
(10) LSM, Пустой пароль ?