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

18.07.23

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
PowerShell скрипт обновления из хранилища
.ps1 9,41Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.
AutoIT скрипт (exe), с файлом параметров
.7z 789,41Kb
12
12 Скачать (3 SM) Купить за 2 450 руб.

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

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

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

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

27900 руб.

01.04.2020    147091    649    360    

235

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

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

21.10.2024    2659    mixaeel    18    

17

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

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

1 стартмани

26.09.2024    501    3    milkers    2    

7

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

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

24.09.2024    860    gull22    2    

8

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

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

17.09.2024    4367    vatkir    15    

10

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

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

1 стартмани

22.08.2024    556    0    user1694357    0    

4

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

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

1 стартмани

20.08.2024    681    MikeSh    10    

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

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

https://infostart.ru/public/795197/
skillman; +1 Ответить
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 и все будет работать. Т.е. качать ничего не надо. Файл приложен, если кто-то вдруг ну очень захочет спасибо сказать таким образом.
skillman; user1559647; Ziggurat; PLAstic; antonio_i; Evg-Lylyk; +6 Ответить
4. VPanin56 549 30.08.19 07:29 Сейчас в теме
" ... готового механизма нет, чтобы вот так взять, скачать, установить в планировщик и все заработало."
".... посмотрел примеры кода в интернетах ... и накарябал своего кодового "франкинштейна"
...
"При необходимости не сложно будет адаптировать под свои нужды и запустить в работу, не тратя время на долгие поиски и изучение мануалов"

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

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

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

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

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

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


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

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

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

Соглашусь, что в вашем случае правильнее писать уже полноценное решение. Скрипты не для всех задач подходят, ну это сугубо мое мнение. Данный скрипт поможет людям с небольшим количеством баз.
12. CheBurator 2712 31.08.19 02:31 Сейчас в теме
(8) Может для типовых баз использовать "Обновлятор"?
gubanoff; +1 Ответить
16. VPanin56 549 03.09.19 12:44 Сейчас в теме
(12) "Обновлятор" умеет подтверждать легальность получения обновления на серверных базах ?
13. DonAlPatino 178 03.09.19 11:34 Сейчас в теме
(8)Вы бы выложили конфу на infostart'е :-)
17. VPanin56 549 03.09.19 12:54 Сейчас в теме
(13) Я не являюсь Автором этой конфигурации.
Это групповое творчество по автоматизации обслуживания для отдела 1С.
Разработки делались несколькими людьми и отвечать за работоспособность всей конфы у меня нет желания.
5. Evil Beaver 8243 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 890 30.08.19 16:15 Сейчас в теме
+1. Отличная статья, отлично оформлена! тоже недавно с повершел знакомился) - https://infostart.ru/public/1114012/
14. DonAlPatino 178 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 271 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 26 03.02.23 15:23 Сейчас в теме
А в какое место (что не спрашиваю - хотя буду благодарен)) добавить что-то, чтобы пока есть фоновые задания - обновление рабочей конфигурации не происходило
Оставьте свое сообщение