Досталось мне по наследству выполнение обновления баз 1С Бухгалтерии 3 в количестве 80 шт и ЗУП 3 — 80 шт(измененные, но не сильно. Обновлять только из хранилища). У нас конечно написана конфа по обслуживанию такого количества баз и даже пакетное обновление реализовано, в том числе и из хранилища для измененных конфигураций, но … все этапы этого варианта обновления заточены на участие Админа.
1) Сначала надо зайти на сервер и завершить все сеансы оставленные пользователями.
2) Запустить написанную предшественниками не знаю на чем программку по блокировке регламентных заданий на сервере
3) Скачать новый *.cfu файл обновления для типовых баз
3а) Обновить изменную базу в хранилище из скачанного cfu файла
4) Сформировать пакетные bat файлы (обычно делим на 4 потока — 4 файла)
5) Запустить пакетные файлы и дождаться их завершения.
6) Запустить каждый экземпляр базы в режиме Предприятия, подтвердить легальность и закрыть базу.
7) Запустить программку по разблокировке регламентных заданий.
Готово !!! Мы провели незабываемое время у компа и обновили 80 типовых баз, потратив на это все выходные.
Проделав дважды такую операцию, мне стало грустно и начал искать пути полной автоматизации этого процесса. В итоге было обнаружено пару достойных наработок по пакетному обновлению в открытом доступе и начался процесс их переработки и адаптации под мои нужды. Но у всех найденных вариантов был один существенный недостаток — подтвердить легальность и закончить обновление они не могли. Поэтому моя задача не автоматизируется на 100 % без этого.
Начал изучать механизм завершения обновления через отладчик и искать пути решения моей задачи. В итоге были найдены точки перехвата событий при первом открытии обновленной конфигурации и мои труды и старания вылились в расширение для конфигурации, которое умеет само подтверждать легальность обновления, дожидаться выполнения обработчиков и закрывать 1с Предприятие. Выполнено это в виде расширения что бы не вскрывать типовые БУХи . Со вскрытой конфигурацией, в частности ЗУП 3, это расширение тоже работает, т.к. используются точки входа и выхода типовых процедур.
В итоге, собрав все в одну разработку и дополнив ее механизмом отрубания пользователей от текущей базы через COM соединение с агентом сервера 1С перед стартом обновления, получил полностью 100% автоматический механизм обновления типовых баз 1С. Теперь процесс обновления выглядит так :
1) В обработке обновления выбираем тип базы ( Бухгалтерия ) и номер потока (все базы в конфе обслуживания уже поделены на потоки )
2) Нажимаем кнопку "Выполнить"
и … ложимся спать. Все базы выбранного потока обновлены, Легальность обновления подтверждена, Обработчики обновления выполнены.
Что делает обработка автоматически сама:
1) Определяет текущий релиз базы
2) Скачивает с сайта 1с файл с информацией об обновлении данного типа конфигурации. (Бух, ЗУП, УТ…)
3) Проверяет наличие в каталоге конфигураций доступного обновления из списка.
4) Если нужного обновления нет, скачивает его автоматически с сайта 1С (нужен логин и пароль для доступа на сайт 1С) и размещает его в каталог обновлений.
5) Отрубает на сервере 1С все сеансы пользователей от текущей базы
6) Запускает обновление конфигурации и базы данных.
7) Если обновились до последнего релиза и больше обновлять не надо, запускает 1С в режиме Предприятия для подтверждения легальности обновления и выполнения отложенных обработчиков обновления
и так по кругу пока не кончится список баз.
Расширение подтверждения легальности протестировано на БП 3 релиз 3.0.69.32 , ЗУП 3 релиз 3.1.9.159 работающих на MS-SQL сервере. Для файловых вариантов баз тоже должно работать, но мною не тестировалось, т.к. у нас таких баз нет.
Не сомневаюсь что для Торговли, Розницы и других типовых конфигураций от 1С это расширение будет работать.
Дополнительно прилагаю модуль обработки по автоматическому обновлению информационных баз, в котором реализованы все вышеописанные автоматические процедуры обновления. Его с легкостью можно адаптировать под собственные нужды и вариант работы (только для программистов) т.к. написан на родном языке 1С.
Данная обработка работает в самописной конфигурации по обслуживанию информационных баз.
P.S. Да я знаю про "Обновлятор". В бесплатной версии он не работает с таким количеством баз, были мысли приобрести полную версию, но было интересно решить данную задачу самому, т.к. половина функционала уже было в нашей базе обслуживания.
Кусок основного кода из обработки обновления
// Прверка наличия обновлений
МассивОбновлений = ВыполнитьЗагрузкуСпискаОбновлений(ПараметрыComБазы.ТекущаяВерсия);
Если МассивОбновлений = Неопределено Тогда
Возврат;
КонецЕсли;
КоличествоДоступныхОбновлений = МассивОбновлений.Количество();
Если КоличествоДоступныхОбновлений = 0 Тогда
Если ОбновлениеБыло Тогда
СообщитьПользователю(НСтр("ru = 'Обработчики обновления информационной базы.'"));
КомандаПакетногоОбновления = СтрШаблон("""%1"" ENTERPRISE %2 /RunModeManagedApplication",
ПараметрыComБазы.ПутьКПлатформе, СтрокаСоединения);
ЗапуститьПриложение(КомандаПакетногоОбновления, , Истина, КодВозврата);
Если КодВозврата = 0 Тогда
СообщитьПользователю(НСтр("ru = 'Обработчики выполнены.'"));
Иначе
СообщитьПользователю(НСтр("ru = 'Ошибка при выполнении обработчиков.'"));
// Возврат;
КонецЕсли;
КонецЕсли;
СообщитьПользователю(СтрШаблон(НСтр("ru = 'Текущая версия: %1. Обновление не требуется.'"), ПараметрыComБазы.ТекущаяВерсия));
Прервать;
КонецЕсли;
ЗагруженноеОбновлениеНайдено = Ложь;
Для Сч = 1 По КоличествоДоступныхОбновлений Цикл
ВерсияДляОбновления = МассивОбновлений[КоличествоДоступныхОбновлений - Сч];
ФайлОбновленияВерсии = СтрШаблон("%1\%2\%31cv8.cfu", ПараметрыОбновления.КаталогФайловОбновления, ТипКонфигурации, ВерсияДляОбновления.Версия);
ФайлОбновленияВерсииОбъект = Новый Файл(ФайлОбновленияВерсии);
Если ФайлОбновленияВерсииОбъект.Существует() Тогда
ЗагруженноеОбновлениеНайдено = Истина;
СообщитьПользователю(СтрШаблон(НСтр("ru = 'Текущая версия: %1. Доступна для обновления версия: %2.'"),
ПараметрыComБазы.ТекущаяВерсия, ВерсияДляОбновления.Версия));
Прервать;
КонецЕсли;
КонецЦикла;
// Загрузка файлов обновления
Если Не ЗагруженноеОбновлениеНайдено Тогда
ВерсияДляОбновления = МассивОбновлений[КоличествоДоступныхОбновлений - 1];
ФайлОбновленияВерсии = СтрШаблон("%1\%2\%31cv8.cfu", ПараметрыОбновления.КаталогФайловОбновления, ТипКонфигурации, ВерсияДляОбновления.Версия);
СообщитьПользователю(СтрШаблон(НСтр("ru = 'Текущая версия: %1. Доступна для загрузки версия: %2 (Поставщик %3, размер %4).'"),
ПараметрыComБазы.ТекущаяВерсия, ВерсияДляОбновления.Версия, ВерсияДляОбновления.Поставщик, ВерсияДляОбновления.РазмерФайлаОбновления));
Если НЕ ПолучитьФайлыОбновлений(ТипКонфигурации, ВерсияДляОбновления) Тогда
Возврат;
КонецЕсли;
КонецЕсли;
// Отрубим сеансы пользователей для серверной базы
Если ПараметрыПодключения.ВариантРаботыИнформационнойБазы = 1 Тогда
Попытка
СообщитьПользователю(НСтр("ru = 'Отрубаем все сеансы пользователей с информационной базой.'"));
Коннектор = Новый COMОбъект("v83.COMConnector");
Если СтрНайти(ИмяСервера1СПредприятия,":")>0 Тогда // Если используется не стандартный порт 1541 или он передан в имени сервера, то в номере порта "1" надо заменить на "0"
Конект = Лев(ИмяСервера1СПредприятия,СтрДлина(ИмяСервера1СПредприятия)-1) + "0";
Иначе
Конект = строка(ИмяСервера1СПредприятия);
КонецЕсли;
Агент = Коннектор.ConnectAgent(Конект);
Кластеры = Агент.GetClusters();
Для каждого Кластер из Кластеры Цикл
Агент.Authenticate(Кластер,,);
Процессы = Агент.GetWorkingProcesses(Кластер);
.......
.......
// Создание резервной копии выгрузкой DT
// В нашем варианте нет смысла в использовании
//СообщитьПользователю(СтрШаблон(НСтр("ru = 'Создание резервной копии информационной базы (%1).'"), ИмяВременногоФайла));
//КомандаПакетногоАрхивирования = СтрШаблон("""%1"" CONFIG %2 /DumpIB %3 /OUT %4 -NoTruncate",
//ПараметрыComБазы.ПутьКПлатформе, СтрокаСоединения, СтрокаДампа, СтрокаЛогов);
//ЗапуститьПриложение(КомандаПакетногоАрхивирования, , Истина, КодВозврата);
//Если КодВозврата = 0 Тогда
// СообщитьПользователю(НСтр("ru = 'Резервная копия информационной базы успешно создана.'"));
//Иначе
// СообщитьПользователю(НСтр("ru = 'Ошибка при создании резервной копии информационной базы.'"));
// Возврат;
//КонецЕсли;
// Обновление информационной базы
СообщитьПользователю(НСтр("ru = 'Обновление информационной базы.'"));
КомандаПакетногоОбновления = СтрШаблон("""%1"" CONFIG %2 /UpdateCfg ""%3"" /UpdateDBCfg /DisableStartupMessages /OUT %4 -NoTruncate",
ПараметрыComБазы.ПутьКПлатформе, СтрокаСоединения, ФайлОбновленияВерсии, СтрокаЛогов);
ЗапуститьПриложение(КомандаПакетногоОбновления, , Истина, КодВозврата);
Если КодВозврата = 0 Тогда
СообщитьПользователю(НСтр("ru = 'Информационная база успешно обновлена.'"));
ОбновлениеБыло = Истина;
Иначе
СообщитьПользователю(НСтр("ru = 'Ошибка при обновлении информационной базы.'"));
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Другие мои публикации:
1) Прибыль от продаж в УТ без закрытия месяца
2) УТ 11. Автоматическое перемещение товаров между складами и организациями
3) Исправляем пересортицу на 41 счете, легко и быстро. Для Бухгалтерии 3.0 и Бухгалтерии 2.0
4) Отчет по уплаченным налогам с разбивкой по бюджетам и ИФНС
я без расширений все провернулhttps://infostart.ru/public/1041193/
просто в после обновления и принятия изменений запустил внешнюю обработку в командной строке (через пользователя с отключеной защитой от опасных действий) с вызовом процедуры глобального модуля «обновить» и последующем закрытием формы. И ни какого расширения не нужно.
Кстати, для управление кластером есть целый модуль в БСП
(1) В твоем посте расписана работа скрипта, и ни слова про запуск и прохождение легальности обновления. Вариант с запуском внешней обработки рассматривался, но был откинут.
Кстати один из вариантов был другой — не запуск в режиме Предприятия, а соединение по COM и запуск определенных процедур из БСП. Но тоже был откинут, т.к. результаты тестов были 50 / 50. Это не устроило.
Поэтому и пришел к расширению.
(3) я изначально COM откинул — так как под от только под виндой и постоянные проблемы с версиями платформ. И да. у меня все равно придется кому-то поставить флажек «легальность», но после него уже не будут выполняться процедуры обновления, так как они уже выполнены обработкой.
Типа того:
echo $(date +%x/%X)» Выполняем процедуры обновления в режиме Предприятия» >> $LOG_FILE
/opt/1C/v8.3/x86_64/1cv8 ENTERPRISE /IBConnectionString»Srvr=»»»$SERVER»»»;Ref=»»»$DB»»»;» /N$USR /P$PWD /UC$BLOCK_CODE /Out»/home/usr1cv8/out_»$DB».txt» /DumpResult»/home/usr1cv8/DumpResult_»$DB».txt» /Execute»$CUR_PATH/update.epf» /C»ОтключитьЛогикуНачалаРаботыСистемы»
Причем параметр ОтключитьЛогикуНачалаРаботыСистемы заложен в типовые конфигурации для обновления агентом сервиса (см 1СFresh)
(4) Так вот как раз «Кто то должен поставить галочку и начать ОК» меня и не устраивало при обновлении 80 баз. Мое расширение активируется только при первом запуске в режиме Предприятия после обновления конфигурации, перехватывает событие подтверждения легальности, подтверждает его и запускает процедуры обновления. И все это происходит автоматически и без участия человека. А потом закрывает 1С Предприятие.
(5) Я в своем варианте говорю Вам про то, что процедуры обновления однозначно выполняются. Можно cfu-хи друг за другом загружать, выполняя процедуры обработки. Просто после всего (всех загрузок cfu и выполнений процедур в режиме предприятия) -кто первый запустит, тот и нажмет флажек и сразу можно работать.
(6) Отлично, спорить не буду.
Меня мой вариант устраивает завершенностью, не надо объяснять буху что за окошко у него внезапно вылезло при загрузке базы.
(7) Да норм все, однофамилец. Идею дарю)))
я остановился на программе Обновлятор-1С, не бесплатно, но экономит кучу времени, плюс всякие регламентные процедуры делает и отчет высылает. Программа поддерживается разработчиком и можно попробовать попросить сделать настройки под себя, в общем рекомендую 🙂
(9) Там где я обслуживаю 4 базы я тоже использую Обновлятор, но бесплатную версию. Мне ее там хватает.
Тут речь про автоматическое обновление более 80 бух баз и 80 зуп и это количество надо не только обновить, но и открыть каждую и подтвердить легальность, чего к сожалению не умеет Обновлятор даже в платной версии.
Процедуры пакетного обновления были написаны еще до меня, я лишь их модернизировал до полного автоматизма и дополнил в пакетном режиме все наши базы своим расширением. Теперь я не трачу кучи времени на запуск 160 баз и подтверждение легальности получения обновления. Утром бухи открывают обновленные базы и начинают работать, все регламентные процедуры тоже отработали, если что.
(10) вам сложно судить об «обновляторе» по бесплатной версии и даже как-то не приятно когда вы _утверждаете_ что «чего к сожалению не умеет Обновлятор даже в платной версии», а не уточняете может ли он это делать 🙁
https://helpme1c.ru/istoriya-izmenenij-programmy-obnovlyator-1s
новость от 17.06.2015 Переработан механизм подтверждения легальности. Теперь он работает на гораздо большем количестве конфигураций. Проверено практически на всех типовых.
я сам люблю что-нибудь делать супер полезное и «ни кто кроме меня не сделает лучше» 🙂 , но в данном случае есть готовое решение, которое делает всё что нужно для обслуживания баз 1С 🙂
(11) Не поленился полез еще раз на сайт Обновлятора.
Да в описаниях новостей что то есть про механизм подтверждения легальности. но это новость от 2015 года и за эти 4 года могло многое измениться со стороны 1С.
Иду в описание Проф версии — «Как вы успели заметить бесплатная версия программы вполне функциональна и подходит для большинства пользователей. Поэтому было принято решение выпускать ещё и проф-версию — более функциональную по сравнению с бесплатной.» В описании преимуществ проф версии ни слова про легальность нету.
В настройках самого Обновлятора я не увидел никаких галочек по поводу подтверждения легальности. И отличие бесплатной от платной версии программа сама предупреждает что запрошенная функция доступна только в проф версии.
Если вы пользуетесь Обновлятором Проф версии , продемонстрируйте такую возможность этой программы, хотя бы скринами
И да, я не утверждал что Обновлятор плохой а я сделал круче. Я этого не увидел в нем, поэтому сделал свое.
(12) Не поленился, достал архив базы, настроил автоматическое обновление и обновил — при входе в базу никакого вопроса подтверждения легальности не появилось 🙂
Подтвердить это скринами не получится, а заморачиваться с видео мне ну совсем лениво 😉
я не знаю есть ли «специальная настройка», но в проф версии при автоматическом обновлении по расписанию легальность подтверждается без участия пользователя.
Спросил автора Обновлятора 1С — настройка называется «Не выполнять обработчики обновления», т.е. по умолчанию всё выполняется и только по желанию пользователя можно отключить все процессы после обновления.
https://helpme1c.ru/obnovlyator-1s-chto-takoe-sluzhebnye-dejstviya-v-baze-zachem-oni-nuzhny-i-v-kakix-sluchayax-i-kak-ix-luchshe-otklyuchit
Спасибо что заморочился с архивом.
Такую настройку «Не выполнять обработчики обновления» видел и она доступна в бесплатной версии. И при обновлении бесплатным Обновлятором обработчики тоже выполняются, но почему то после обновления через Обновлятор с выполнением обработчиков, база при первом запуске просит подтвердить легальность получения обновлений. Неужели это «фишка» бесплатной версии ?
Надо мне проверить на своем бесплатном Обновляторе какую нибудь базу еще раз.
В последних релизах можно запускать с параметром /C»ВыполнитьОбновлениеИЗавершитьРаботу»
база стартует, сама автоматом проставляет легальность обновления и выполняет обработку обновления .
(16)
Круто конечно, 1С как всегда жизнь тока портит, т.к. эта фигня(автоматическое подтверждение) работала на файловых базах и без этого ключа, а тепрь тока с ключиком 🙂
Бухгалтерия предприятия, редакция 3.0 (3.0.73.54)
И СтрНайти(ПараметрЗапуска, «ВыполнитьОбновлениеИЗавершитьРаботу») > 0 Тогда
ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();
А на серверных базах, которых мне надо обновлять уже около 100 шт, эта хрень никогда не работала автоматом, ни с к ключем ни без него.
А мое расширение продолжило работать, я даже не знал что изменили и добавили ключ такой
(9)Обновлятор — отличная программа. Использую её коммерческую версию у двух клиентов. Если всё настроено, то программа сама всё бэкапит, обновляет, подтверждает легальность обновления (!) и запускает обработчики обновления. Остаётся только проверить на почте отчет об обновлении.