Скрипт для обновления базы с расширением из хранилища

22.01.24

База данных - Обновление 1С

Небольшая оптимизация рабочего времени через скрипт обновления базы 1С с расширением из хранилища конфигураций.

На своей работе я смоделировал рабочий контур, чтобы можно было разрабатывать и проверять функционал с настройками конкретной информационной базы, а не каждый раз перенастраивать. Есть базы, которые обновляются быстро, затягивают изменения из хранилища и обновляются, а есть, которые не очень, например, 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

 

 
 Полный текст скрипта, чтобы было проще копировать

 

Буду признателен за критику и замечания.

Хранилище скрипт обновление пакетный.

См. также

Рефакторинг и качество кода Обновление 1С Программист 1С v8.3 Бесплатно (free)

Тестовая база обновлена через все ключевые релизы, всё протестировано, остатки сведены, вы готовы обновить «боевую» базу, но…по замерам для этого потребуется целая неделя, а у вас есть всего пара выходных. Знакомая ситуация? Расскажем, как увеличить скорость отработки промежуточных конфигураций!

18.06.2025    1533    1c-izh    12    

8

Обновление 1С Программист Стажер 1С v8.3 Бесплатно (free)

Наша компания перманентно занимаемся обновлением «старых» и, к тому же, сильно нетиповых конфигураций. Хочется поделиться опытом по работе с важным этапом подобных проектов — поиску и оптимизации промежуточных конфигураций 1С. Первый материал будет полезен начинающим специалистам 1С, а в последующих, надеемся, найдется интересная информация и для матерых разработчиков.

04.06.2025    2957    1c-izh    6    

16

Обновление 1С 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Абонемент ($m)

Добавление в Справочник "Статьи затрат" отсутствующих предопределённых элементов.

1 стартмани

23.05.2025    380    0    qrw    0    

0

БСП (Библиотека стандартных подсистем) Обновление 1С Программист 1C:ERP Бесплатно (free)

В данной статье рассмотрен один из вариантов добавления собственных обработчиков обновления в расширении конфигурации. При смене версии расширения - автоматический вызов процесса обновления информационной базы.

29.04.2025    2212    krasnoshchekovpavel    7    

17

Рефакторинг и качество кода Обновление 1С Программист 1С v8.3 Бесплатно (free)

Методика, описанная в статье, выработана при переезде с 1С:ДО 2.1 на 1С:ДО 3.0. Может также применяться при переходе с 1С:УПП на 1C:ERP, 1C:ERP на 1C:ERP УХ и т. п. Учтены все необходимые доработки при переезде на новую конфигурацию и предупреждены возможные ошибки.

21.04.2025    2487    PROSTO-1C    4    

4

Обновление 1С Программист 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1C:ERP Абонемент ($m)

Внешняя обработка для обновления расширений и дополнительных обработок 1С из GitHub. Поддерживает как публичные, так и приватные репозитории, фильтрацию релизов по версии конфигурации, скачивание .cfe, .epf, .erf.

1 стартмани

15.04.2025    1954    7    Aleksandr    0    

21

Обновление 1С Системный администратор Программист 1С v8.3 Абонемент ($m)

Скрипт для загрузки конфигурации в 1С, обновления базы и архивации файла с логированием.

1 стартмани

02.04.2025    1060    3    DoubleT    8    

5

Обновление 1С Linux Системный администратор Программист Бесплатно (free)

Пошаговая инструкция для обновления платформы 1С на сервере Linux Debian.

28.03.2025    1922    California_Dreaming    2    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. корум 288 22.01.24 22:51 Сейчас в теме
(0) Спасибо, занимательно и полезно.

Интересно, почему именно скриптами, не привлекая тот же обновлятор?
2. ke.92@mail.ru 110 23.01.24 05:53 Сейчас в теме
(1)Хотелось самому разобраться в пакетном режим. Когда знаешь особенности, можешь написать что-то специализированное для себя. + у нас в компании немного сложно с установкой новых программ.
dj_tol; корум; +2 Ответить
3. jcuken 18.04.24 09:01 Сейчас в теме
Название расширение лучше иметь на латинице. У меня возникли проблемы с кодировкой.


В начало скрипта добавь
chcp 1251
Aleksandr; Apiar; +2 Ответить
Оставьте свое сообщение