На своей работе я смоделировал рабочий контур, чтобы можно было разрабатывать и проверять функционал с настройками конкретной информационной базы, а не каждый раз перенастраивать. Есть базы, которые обновляются быстро, затягивают изменения из хранилища и обновляются, а есть, которые не очень, например, ERP.
Каждый день, перед началом рабочего дня, мне приходилось заходить во все базы и обновлять их. Так как когда поступала задача, хотелось сразу приступить к ее выполнению, а не заниматься обновлением базы.
Как результат: создал скрипт обновления, сделал его копии под каждую базу, сделал отдельный bat-файл для одновременного запуска всех скриптов обновления. Запуск скрипта по расписанию. Когда приезжаю на работу - весь контур уже находиться в актуальном состоянии. Данный скрипт можно применять и к рабочим базам.
Переменные выделял через {ИмяПеременной}
Служебное сообщение для определения, какая база обновляется
rem Is <ИмяБазыОбновления>
Для RAS: код для получения даты начала и окончания блокировки базы. Этот код нужен, если у вас поднят RAS. Получаем текущее время. Оно будет использоваться как дата начала блокировки базы. А дата окончания блокировки +1 час. Не нашел быстрых способов корректного вычисления времени в командной строке для всех случаев. У меня скрипты запускаются утром, и для меня это не настолько критично. Если у вас его нет, тогда просто пропускайте этот кусок.
For /f "tokens=1-3 delims=/. " %%a in ('date /t') do (set dateBegin=%%c-%%b-%%a)
set "minutesBegin=%time:~3,2%"
set /a "hoursBegin=%time:~0,2%"
set /a "hoursEnd=%hoursBegin:~-2%+1"
set hoursBegin=0%hoursBegin%
set hoursBegin=%hoursBegin:~-2%
set hoursEnd=0%hoursEnd%
set hoursEnd=%hoursEnd:~-2%
set dateTimeBegin=%dateBegin%T%hoursBegin%:%minutesBegin%:00
set dateTimeEnd=%dateBegin%T%hoursEnd%:%minutesBegin%:00
Устанавливаем переменные, которые будут содержать пусть к платформе(dirPlatform), адрес хранилища конфигурации(repositoryConfiguration), адрес хранилища расширения(repositoryExtension)
set dirPlatform=C:\Program Files\1cv8\{НомерПлатформы}\bin\
set repositoryConfiguration={АдресХранилищаКонфигурации}
set repositoryExtension={АдресХранилищаРасширения}
Для RAS: вносим идентификаторы кластера и информационной базы. Их можно взять из файла "C:\Program Files\1cv8\srvinfo\reg_1541\1CV8Clst.lst"
set clusterId={ИдентификаторКластера}
set infobaseId={ИдентификаторИнформационнойБазы}
set racExe="%dirPlatform%rac.exe"
Далее определяем исполняемый файл 1С.
set v8Exe="%dirPlatform%1cv8.exe"
Устанавливаем переменные с данными базы, кластера, логинами и паролями. Название расширение лучше иметь на латинице. У меня возникли проблемы с кодировкой. И чтобы на разных компьютерах с этой проблемой не связываться - переименовал на латиницу. Для работы скриптов я создал в каждой базе отдельного пользователя, через который скрипт будет авторизоваться в базах. "codAccessInfobase" - нужно, если используете RAS. Ранее была установлена блокировка и скрипт не сможет авторизоваться. Данный параметр устанавливается в свойствах базы в поле "Код разрешения".
set base={СерверКластера1С:Порт}\{ИмяБазыВКластере}
set extensionName={НазваниеРасширение}
set repositoryUser={ЛогинХранилищаОсновнойКонфигурации}
set repositoryPassword={ПарольХранилищаОсновнойКонфигурации}
set repositoryUserExtension={ЛогинХранилищаРасширения}
set repositoryPasswordExtension={ПарольХранилищаРасширения}
set configurationUser={ЛогинИнформационнойБазы}
set configurationPassword={ПарольИнформационнойБазы}
set codAccessInfobase={КодДоступаИнформационнойБазы}
Для RAS: устанавливаем имя сервера, где находится RAS(hostname), его порт(portHostName), и время паузы(timeoutLenght) - она нужна, чтобы после блокировки базы прошло указанное количество секунд. Тогда завершатся активные сеансы и не запустятся новые.
set hostname=dats-1cpprod-01.8bitov.com
set portHostName=1845
set timeoutLenght=180
Для RAS: первая строка подключается к RAS и устанавливает время начало и окончания обновления, блокировку фоновых заданий, блокировку сеансов. Вторая ставит на паузу скрипт, чтобы активные сеансы успели завершиться.
start "" /wait %racExe% infobase update --cluster=%clusterId% --infobase=%infobaseId% --infobase-user=%configurationUser% --infobase-pwd=%configurationPassword% --sessions-deny=on --scheduled-jobs-deny=on --denied-from=%dateTimeBegin% --denied-to=%dateTimeEnd% %hostname%:%portHostName%
start "" /wait TIMEOUT /T %timeoutLenght% /NOBREAK
Одна особенность: нельзя одной строкой подключения сразу авторизоваться в нескольких хранилищах. Поэтому нужно подключаться последовательно к каждому хранилищу отдельно.
В первой строке происходит вход в конфигуратор, подключение к хранилищу основной конфигурации. Во второй строке также происходит вход в конфигуратор и обновление основной конфигурации. Третья и четвертая строки повторяют первые две, но только для расширения.
start "" /wait %v8Exe% DESIGNER /S %base% /UC %codAccessInfobase% /N %configurationUser% /P %configurationPassword% /ConfigurationRepositoryF%repositoryConfiguration% /ConfigurationRepositoryN %repositoryUser% /ConfigurationRepositoryP %repositoryPassword% /ConfigurationRepositoryUpdateCfg -force /DisableStartupDialogs
start "" /wait %v8Exe% DESIGNER /S %base% /UC %codAccessInfobase% /N %configurationUser% /P %configurationPassword% /UpdateDBCfg -Server /DisableStartupDialogs
start "" /wait %v8Exe% DESIGNER /S %base% /UC %codAccessInfobase% /N %configurationUser% /P %configurationPassword% /ConfigurationRepositoryF%repositoryExtension% /ConfigurationRepositoryN %repositoryUserExtension% /ConfigurationRepositoryP %repositoryPasswordExtension% /ConfigurationRepositoryUpdateCfg -Extension %extensionName% -force /DisableStartupDialogs
start "" /wait %v8Exe% DESIGNER /S %base% /UC %codAccessInfobase% /N %configurationUser% /P %configurationPassword% /UpdateDBCfg -Extension %extensionName% /DisableStartupDialogs
Также я очищаю журнал регистрации, так как на базах разработки он мне нужен только за последние сутки.
start "" /wait %v8Exe% DESIGNER /S %base% /UC %codAccessInfobase% /N %configurationUser% /P %configurationPassword% /DisableStartupDialogs /ReduceEventLogSize %dateBegin%
Для RAS: снимаем блокировку с фоновых заданий и клиентский сеансов и закрываем окно исполнение скрипта.
start "" /wait %racExe% infobase update --cluster=%clusterId% --infobase=%infobaseId% --infobase-user=%configurationUser% --infobase-pwd=%configurationPassword% --sessions-deny=off --scheduled-jobs-deny=off %hostname%:%portHostName%
exit
Буду признателен за критику и замечания.