1С и PowerShell - обновление из хранилища

18.07.23

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

Пример скрипта, упрощающего работу.

Скачать файлы

Наименование Файл Версия Размер
PowerShell скрипт обновления из хранилища
.ps1 9,41Kb
10
.ps1 9,41Kb 10 Скачать
AutoIT скрипт (exe), с файлом параметров
.7z 789,41Kb
11
.7z 789,41Kb 11 Скачать

И снова здравствуйте.

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

В итоге я поступил так, как привык в таких случаях. Открыл PowerShell ISE, посмотрел примеры кода в интернетах, которые реализован на VBS, либо CMD, либо PS и накарябал своего кодового "франкинштейна", который работает так как надо*, и при этом не требует тратить временные ресурсы на повторную разработку. Этот кусок кода и выкладываю, чтобы каждый желающий мог посмотреть и если подходит взять. При необходимости не сложно будет адаптировать под свои нужды и запустить в работу, не тратя время на долгие поиски и изучение мануалов, чтобы автоматизировать простую по своей сути операцию.

И так. Что делают эти вот буквы, что под спойлером ниже:
0. Если в первую функцию передать флаг "выкинуть конфигуратор" - ЛОЖЬ, то скрипт не будет выкидывать пользователей и блокировать базу, если запущен конфигуратор. Если истина, то прибьет сеанс с конфигуратором тоже.
1. Подключается к консоли управления серверами 1С через com, находит по имени нужную базу данных, устанавливает на нее блокировку сеансов и блокировку регламентных заданий, пароль UС;
2. Завершает сеансы всех пользователей, если требуется;
3. Через конфигуратор получает все данные из хранилища, для обновления;
4. Обновляет конфигурацию из хранилища;
5. Выключает блокировку регламентных заданий и блокировку сеансов;
6. Обо всем этом пишет в лог (что-то пишет)))...

*-когда я пишу, что работает так как надо, то надо понимать, что это самое "надо" исходит из той задачи которую решал я. У вас может быть сходная задача но не по всем параметрам повторять мою, и это решение может на 100% не подойти, но поможет разобраться с вашей задачей, сэкономив время.

 
 Код на PowerShell (в приложенном файле тоже самое, поэтому просто скопируйте листинг себе, если нужен):
 
Код старался комментировать максимально подробно, чтобы все было понятно.

При создании, были пришиты части тел от статей: Параметры командной строки 1СУправление сервером приложений 1С с помощью PowerShell и куча информации по самому PowerShell из интернетов.

В файле ровно то же самое, что под спойлером!

UPD: Не выдержала душа поэта. Написал скрипт на AutoIT. В архиве приложенном ниже лежит скрипт для 32 и 64 битных систем и пример файла параметров. Все протестировал. В целом выполнение с PS скриптом схожее, сам PS скрипт тоже в архиве.

UPD (21.12.2020): Доработал скрипт Autoit, теперь он ставит блокировку базы в периоде от начала работы скрипта, до завершения, которое вычисляется путем прибавления минут к дате начала, указывается в ini файле (по умолчанию 30 минут). После того, как скрипт отработает и снимет блокировки, время ставит от 1 января 2000 года, до 31 декабря 2999 года (пустую дату подкидывать не хочет, поэтому если кто-то упрется в дату, то напишите и я ее подвину дальше).

Power Shell AutoIT Хранилище Обновление Автоматизация

См. также

Обновление для КА 1.1, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

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

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

19900 руб.

01.04.2020    140422    676    352    

232

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Расширение для конфигураций 1С для автоматического подтверждения легальности обновления и выполнения обработчиков обновления при пакетном автоматическом обновлении большого числа баз 1С. А также сам модуль обработки по автоматическому обновлению баз.

2400 руб.

08.05.2019    24117    58    26    

26

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

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

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

22.01.2024    1053    ke.92@mail.ru    2    

24

Многопоточное обновление 1С: Управление холдингом

Обновление 1С 8.3.14 1С:Управление холдингом Абонемент ($m)

Что делать, если обновление базы в режиме предприятия выполняется значительно больше вашего технологического окна, даже если это окно - с вечера пятницы и до утра понедельника.

1 стартмани

10.01.2024    3117    saver77    18    

24

Не обновляется типовая конфигурация 1С через конфигуратор

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

Столкнулся с проблемой. Нужно было поднять до текущего релиза Розницу 2.3. Обновлял по старинке, через конфигуратор (база клиент-серверная). Указывал логин и пароль, ждал скачивания обновления и обновлял. Но после накатывания 5 релизов следующий устанавливаться не хотел, а точнее конфигуратор гордо говорил, что обновлений больше нет. Решение нашел здесь на форуме и хочу зафиксировать. Чтобы самому не забыть и передать опыт начинающим.

29.11.2023    1264    shestopalovpro    4    

7

Принудительный запуск дополнительных процедур обработки данных после обновления

Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Ручной запуск процедур обработки обработчиков после обновлений. Может быть полезно стажерам, консультантам, разработчикам, администраторам, всем, кто обновляет информационные базы.

1 стартмани

20.11.2023    560    6    IvanTerentev    0    

2

Ошибка SDBL "Нет таблицы или отсутствует RefSelf"

Инструменты администратора БД Обновление 1С Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Известно несколько способов разной степени шаманства. Предлагаю ещё один, проверенный на практике и базирующийся на точном понимании своих действий.

15.11.2023    1467    Yashazz    1    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ktb 618 29.08.19 21:35 Сейчас в теме
Т.е. десяток готовых решений на github не подошёл? Интересно чем?
2. ArchLord42 83 30.08.19 06:52 Сейчас в теме
(1) Ну что вы ругаетесь, автор ж написал не нашел на ИС :)

Хотя как автор искал, непонятно, например вот целое how to, в которую вложения в виде СМ не нужны.

https://infostart.ru/public/795197/
24. segatron 27.07.20 04:31 Сейчас в теме
(2) Главное преимущество публикации автора в том, что он решил данную задачу на PowerShell. Он не озвучил приимущество данного выбора, сделаю это за него

Данныей компонент:
1. Установлен в любой современной ОС Windows, бесплатен и не требует установки ПО третьих фирм.
Соответственно при запуске на другом Windows-сервере все просто как с bat-файлом - скопировал и оно работает.
2. Стандартно доступна простенькая но функциональная IDE. Просто запускай и начинай кодить.
3. Возможности у PowerShell как у хорошего мощного языка программирования, а библиотеке готовых функций позавидуют многие.
3. ArchLord42 83 30.08.19 06:53 Сейчас в теме
Те, которые нашел на Инфостарте, стоят стартмани, а вот реально рабочий, бесплатный скрипт что-то я не смог найти.


А ваша то чем отличается от других? она так же стоит СМ и тд...
6. Jokemas 192 30.08.19 08:55 Сейчас в теме
(3) Она не стоит ничего. Файл просто приложен, по сути листинг на странице и в файле идентичны. Просто скопируйте текст в файл, назовите его любым именем с расширением ps1 и все будет работать. Т.е. качать ничего не надо. Файл приложен, если кто-то вдруг ну очень захочет спасибо сказать таким образом.
user1559647; Ziggurat; PLAstic; antonio_i; Evg-Lylyk; +5 Ответить
4. VPanin56 527 30.08.19 07:29 Сейчас в теме
" ... готового механизма нет, чтобы вот так взять, скачать, установить в планировщик и все заработало."
".... посмотрел примеры кода в интернетах ... и накарябал своего кодового "франкинштейна"
...
"При необходимости не сложно будет адаптировать под свои нужды и запустить в работу, не тратя время на долгие поиски и изучение мануалов"

очередной НЕ ГОТОВЫЙ вариант?

А почему только из хранилища обновление? А где обновление типовых баз ?

При обновлении кучи баз через автоматизатор, как решен вопрос с запусков в режиме Предприятия, подтверждением легальности обновления и выполнением отложенных обработчиков?
7. Jokemas 192 30.08.19 09:01 Сейчас в теме
(4) Это готовый вариант под ту задачу, которую я описал. Прописал пароли, логины, пути в скрипте и он обновил из хранилища конфигурацию.

Вы там что употребляли, что обновление типовых баз и обновление из хранилища в одну шеренгу поставили?

Объясняю на пальцах. Вот у вас конфигурация, пусть даже типовая, которую вы решили дорабатывать с использованием хранилища конфигураций (ну чтобы много людей работало). Написали код, поместили в хранилище. Теперь, чтобы его увидели пользователи нужно обновить вашу конфигурацию на ту, что находится в хранилище с внесенными изменениями, вот для того, чтобы не делать это руками и предназначен скрипт.

Соответственно отпадает вопрос о проверке легальности. Вы обновляетесь ИЗ ХРАНИЛИЩА конфигураций. Если вы не знаете что такое хранилище... то я даже не знаю что еще сказать )))). Короче ваш комментарий мимо кассы. Вы внимательно прочитайте, что там написано.
8. VPanin56 527 30.08.19 09:44 Сейчас в теме
(7)
Вы там что употребляли,


Да собственно то же что и все употребляют.

ну если из хранилища обновлять тот же релиз, что и рабочая, то естественно никакой проверки легальности не будет. А если в хранилище обновить релиз? вы же не сидите вечно на одном релизе, если это только не самописка.

У меня на поддержке 80 типовых Бух баз из них 10 с дописками и 80 Зупов. Есть самописная конфа по администрированию и обслуживанию этих баз. И в ней были написаны (до меня) модули по групповому обновлению всех баз, только все последовательные операции надо было запускать вручную, в том числе и запуск каждой базы для подтверждения легальности получения обновления. Меня это не сильно радовало. Перелопатил что нашел в инете по автоматизации и что имелось у нас. Сделал расширение для автоматического подтверждения легальности обновления. И вуаля, у меня теперь полностью в автоматическом режиме (даже обновления релизов скачиваются сами). И обновление 80 баз проходит за 5 часов и без моего участия.
И не стал мудрить со скриптами, а написал на родном и понятном языке
9. Jokemas 192 30.08.19 10:07 Сейчас в теме
(8) Да, ваша задача совсем про другое уже. Масштаб не тот. У меня ситуация гораздо проще, поэтому и решение проще. Т.е. только обновление из хранилища одной базы, доступы к которой прописаны в скрипте.

Соглашусь, что в вашем случае правильнее писать уже полноценное решение. Скрипты не для всех задач подходят, ну это сугубо мое мнение. Данный скрипт поможет людям с небольшим количеством баз.
12. CheBurator 3119 31.08.19 02:31 Сейчас в теме
(8) Может для типовых баз использовать "Обновлятор"?
gubanoff; +1 Ответить
16. VPanin56 527 03.09.19 12:44 Сейчас в теме
(12) "Обновлятор" умеет подтверждать легальность получения обновления на серверных базах ?
13. DonAlPatino 176 03.09.19 11:34 Сейчас в теме
(8)Вы бы выложили конфу на infostart'е :-)
17. VPanin56 527 03.09.19 12:54 Сейчас в теме
(13) Я не являюсь Автором этой конфигурации.
Это групповое творчество по автоматизации обслуживания для отдела 1С.
Разработки делались несколькими людьми и отвечать за работоспособность всей конфы у меня нет желания.
5. Evil Beaver 8100 30.08.19 07:58 Сейчас в теме
Что только не придумают, чтоб на картошку не ездить... (с) возьмите vrunner или deployka
NeviD; ander_; litonchik; ArchLord42; +4 Ответить
21. Jokemas 192 26.01.20 16:49 Сейчас в теме
(5) Сво
(20) Есть только один простой способ в рамках данного решения. Я отслеживаю открыт ли конфигуратор и если открыт, то записываю в лог невозможность обновления и отменяю все операции. Фишка в том, что конфигуратор повисает на модальном окне. Пока его не закроешь окно не закроется, а пока оно открыто войти в конфигуратор нельзя. Есть еще один способ, уже сложнее. Можно попробовать по заголовку окна "поймать" нужный процесс и по его pid убить процесс конфигуратора.

З.Ы. Мы в организации используем конфигуратор как "флаг", чтобы не обновлять базу. Например идет серьезное перепроведение или кто-то запустил в базе данных тяжелую обработку, так вот чтобы автообновление не сломало всю работу сделанную за ночь, запускаем конфигуратор. Скрипт видит это и прекращает работу, никого не выкидывая.

Насколько я помню, в AutoIT скрипте я точно это все описал. Посмотрел код повер шел. Там тоже это все есть. Просто нужно указать нужный параметр в коде.

Там внизу, при вызове функции BlockDB, третий параметр DropDesigner - отвечает как раз за это поведение. Если запущен конфигуратор, то отмена всего. По умолчанию он как раз выведет строку, что запущен конфигуратор и ничего делать дальше не будет.
10. tsukanov 30.08.19 10:19 Сейчас в теме
Спасибо! Продолжай. Нужно больше статей про повершел )
Natain14; wowik; Evg-Lylyk; +3 Ответить
11. wowik 884 30.08.19 16:15 Сейчас в теме
+1. Отличная статья, отлично оформлена! тоже недавно с повершел знакомился) - https://infostart.ru/public/1114012/
14. DonAlPatino 176 03.09.19 11:36 Сейчас в теме
Нубский вопрос на тему "а можно такой же,но с перламутровыми пуговицами" :-) В Powershell есть возможность несколько задач запустить параллельно? Чтобы 10 идентичных баз разом обновлять, а не по одной?
15. Jokemas 192 03.09.19 11:57 Сейчас в теме
(14)По идее можно, PowerShell поддерживает асинхронный вызов с помощью заданий (job). Если проще, то командлет Start-Job стартует код в фоне.Копайте в эту строну.

З.Ы. Т.е. на каждую базу создать свой скрипт на основе того, что здесь. После этого написать еще один скрипт, который будет запускать нужные скрипты в задачи параллельно. Как-то так.
18. asved.ru 36 05.09.19 07:46 Сейчас в теме
Все же PS - нечитаемый язык. Что-то в нем есть от Perl.
19. Jokemas 192 05.09.19 10:42 Сейчас в теме
(18) да, согласен. Но мне он показался похожим на ActionScript, что используется при программировании на Flash. Помнится давно я писал на AS, даже игра платформер есть =)). В целом для своих задач замечательный инструмент, но всему нужна мера. Если задача охватывает сложные процессы, либо объемную цепочку операций, то скриптами такие вещи решать не всегда корректно, иногда правильнее разработать полноценный инструмент. Просто есть люди, которые все на скриптах делают даже там, где это просто глупо. В моей статье про ректальное администрирование как раз этот нюанс описан. Статья, кстати, с реального админа списана, но личность его раскрывать не буду - не этично =)).
20. sokir 2 24.01.20 10:40 Сейчас в теме
Если зайти в конфигуратор и завершить этот сеанс через консоль 1С, то в списке подключений к хранилищу этот пользователь продолжает светиться жирным (то есть типа подключен).
И при попытке заново зайти в конфигуратор не закрывается окно авторизации с хранилищем и так пока в старом окне конфигуратора в окне "сеанс работы завершен администраторм" не нажать кнопку "Завешить работу".

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

Есть способы борьбы с этим?
22. Zlohobbit 240 15.06.20 14:32 Сейчас в теме
Добрый день!
$PathHRN = '/ConfigurationRepositoryF"\\' + $SrvName + '\hrn\TLE"'
Правильно я понимаю, что вместо этого:
+ $SrvName + '\hrn\TLE"' можно просто свой путь к хранилищу дописать tcp://1cHran/Konfa_2_UT?
23. Jokemas 192 15.06.20 18:07 Сейчас в теме
(22) Да. Просто свой указывать здесь.
Zlohobbit; +1 Ответить
25. GEle 26.09.20 19:02 Сейчас в теме
Уважаемый автор, а что нужно добавить в ваш скрипт, если требуется обновить из хранилищ не только основную конфигурацию, а еще и расширение?
32. Region_64 36 26.11.22 13:59 Сейчас в теме
(25) Присоединяюсь к вопросу, может кто-то сталкивался, когда к одному хранилищу подключена основная конфигурация и к другому хранилищу подключено одно из расширений. И нужно сразу обновить и основную конфигурацию и хранилище.
Ключи авторизации в хранилище срабатывают для основной конфигурации.
Если указать ключ:
-Extension"Имя_расширения"
то авторизация происходит в хранилище расширения, но не происходит в основной конфигурации.
Справка к 1С ничего не говорит, отдельных ключей для расширения и основной конфигурации нет.
26. plyshu 13.10.20 07:49 Сейчас в теме
Товарищи, будьте добры, подскажите, что такое "$PassUC = 'ПарольUC' #Пароль разрешения на подключение к БД (UC)". Когда БД разворачивал, не помню, чтобы вводил подобную вещь
27. Jokemas 192 13.10.20 09:25 Сейчас в теме
(26) В Консоли администрирования серверов 1С можно установить специальный пароль, который позволяет войти в конфигуратор или предприятие, даже когда установлен режим блокировки входа. Это как раз пароль UC, устанавливается в свойствах базы, в консоле.

Для чего нужно. Во время регламентных работ пользователей надо выкинуть и "обезопасить" базу от новых сессий, чтобы в промежутке между освобождением от пользователей и обновлением никто не вошел, вот в этом случае этот пароль и помогает.
28. plyshu 21.10.20 04:01 Сейчас в теме
(27) Антон, можно еще у вас спросить. Так как слаб в программировании, не могу понять, что нужно написать, чтобы обновляло хранилище со включенным конфигуратором. Причем, чтобы вы понимали, обновляемый конфигуратор выключен, включен другой, который также привязан к хранилищу.
29. Jokemas 192 21.10.20 18:09 Сейчас в теме
(28) Со включенным конфигуратором оно не обновит, потому что не сможет войти в конфигуратор, он попытается выйти из конфигуратора всех, чтобы зайти самому.

Механика, которая есть в скрипте, позволяет использовать эту особенность, чтобы отменить процесс обновления. Т.е., при установке ключа $WorkBegin в $True, скрипт остановит свое выполнение и запишет в лог сообщение, что обновление отменено, если этот параметр установить в значение $False, то скрипт попробует завершить все сеансы, в том числе конфигуратор (может не получится, если там были изменения, то повиснет модальное окно и скрипт ничего не сможет сделать. Процессы убивать я не стал, так как считаю это слишком топорным методом для автоматизации.

Поэтому рекомендую использовать проверку на конфигуратор, чтобы отменять обновление.
Еще раз. Нельзя зайти в конфигуратор двум пользователям одновременно. Чтобы автоматически обновить, в конфигуратор должен зайти пользователь "робота" и сделать все операции и ему никто не должен мешать.
30. plyshu 22.10.20 03:51 Сейчас в теме
(29) Все предельно понятно, но один момент все же остался, почему он не может обновить, если включен конфигуратор, который мы не обновляем через скрипт.
Чтобы было максимально понятно - из Konf1 мы передаем измененные данные в хранилище, затем с помощью скрипта обновляем Konf2. Если в момент выполнения скрипта, кто-то сидит в Konf1 (само собой в Konf2 никто не сидит), то скрипт выдаст, что пользователь использует конфигуратор.
31. Jokemas 192 22.10.20 18:02 Сейчас в теме
(30)речь о конфигураторе одной базы. Т.е. той. которую обновляют.

Попробуйте одновременно с кем нибудь еще, зайти в конфигуратор одной базы из под разных учетных записей. Вот тоже самое получается при пакетной работе. Он не может войти. если кто-то уже вошел.
33. rasti_chrome 27.12.22 09:32 Сейчас в теме
Автор, большое спасибо за статью, все шикарно отрабатывает! У меня так же стояла задача вместе с основной конфой обновлять расширение.

Для тех кому нужно обновить так же расширение,
1. добавляете переменную
$Rashirenie = '-Extension ИмяРасширения'

2. добавляете 2 параметра работы
$UpdateFromHRNRasshirenie = '/ConfigurationRepositoryUpdateCfg' + $Rashirenie
$UpdateDBRasshirenie = '/UpdateDBCfg' + $Rashirenie

3. Добавляете путь к хранилищу расширения
$HRNRashirenie = '/ConfigurationRepositoryF"' + 'D:\Storage\HRN_Rashirenie"' (логин и пасс соответственно)

4. Добавляете шаги исполнения, аналогичные тем, что в этой статье, только для расширения (1-2 для основной конфы, 3-4 для расширения соответственно)

5. В самом низу функция UpdateDB стартуете ваши процессы для 3-4 шага

P.S. советую опробывать параметр $OffDialog = '/DisableStartupDialogs' вы удивитесь
34. user785225 17 03.02.23 15:23 Сейчас в теме
А в какое место (что не спрашиваю - хотя буду благодарен)) добавить что-то, чтобы пока есть фоновые задания - обновление рабочей конфигурации не происходило
Оставьте свое сообщение