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

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 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

27900 руб.

01.04.2020    147442    649    362    

235

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

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

21.10.2024    2822    mixaeel    18    

17

Обновление 1С Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Те кто объединял конфигурации находящиеся на поддержке, обновлял подсистемы БСП прекрасно помнят упражнение «10000 тысяч кликов мышкой» или, непонятное словесное заклинание, после которого конфигурация снимается с поддержки целиком.

1 стартмани

26.09.2024    529    3    milkers    2    

7

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Вышел новый релиз для УТ11 5.19.63. На копии базы было выполнено обновление и вылезли проблемы с номенклатурой, подлежащей маркировке. В публикации описаны проблемы, обнаруженные в копии базы конкретной организации.

24.09.2024    962    gull22    2    

8

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

Как исправить медленное сравнение конфигурации с файлом cf, сохраненным из хранилища.

17.09.2024    4463    vatkir    15    

10

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Упрощенное обновление конфигураций 1С (предпочтительно самописных) с помощью батника и Яндекс Диска (по публичной ссылке)

1 стартмани

22.08.2024    593    0    user1694357    0    

4

Обновление 1С Системный администратор Россия Абонемент ($m)

На ИТС есть статья, в которой поверхностно описан процесс автоматического обновления тонких клиентов. В качестве примера, что логично, представлены методы конфигурации 1С. Но, в отличие от того же управления списками баз, для обновления не требуется хранить информацию, потому я решил переписать код на php, чтобы можно было отвязаться от 1С. Не работает для файловых баз, подключенных как File="ПутьКПапкеБазы"; (а жаль), для опубликованных файловых - работает.

1 стартмани

20.08.2024    729    MikeSh    10    

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

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


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