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






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

Досталось мне по наследству выполнение обновления баз 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) Отчет по уплаченным налогам с разбивкой по бюджетам и ИФНС

18 Comments

  1. Sedaiko

    я без расширений все провернул https://infostart.ru/public/1041193/

    просто в после обновления и принятия изменений запустил внешнюю обработку в командной строке (через пользователя с отключеной защитой от опасных действий) с вызовом процедуры глобального модуля «обновить» и последующем закрытием формы. И ни какого расширения не нужно.

    Reply
  2. Sedaiko

    Кстати, для управление кластером есть целый модуль в БСП

    Reply
  3. VPanin56

    (1) В твоем посте расписана работа скрипта, и ни слова про запуск и прохождение легальности обновления. Вариант с запуском внешней обработки рассматривался, но был откинут.

    Кстати один из вариантов был другой — не запуск в режиме Предприятия, а соединение по COM и запуск определенных процедур из БСП. Но тоже был откинут, т.к. результаты тестов были 50 / 50. Это не устроило.

    Поэтому и пришел к расширению.

    Reply
  4. Sedaiko

    (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)

    Reply
  5. VPanin56

    (4) Так вот как раз «Кто то должен поставить галочку и начать ОК» меня и не устраивало при обновлении 80 баз. Мое расширение активируется только при первом запуске в режиме Предприятия после обновления конфигурации, перехватывает событие подтверждения легальности, подтверждает его и запускает процедуры обновления. И все это происходит автоматически и без участия человека. А потом закрывает 1С Предприятие.

    Reply
  6. Sedaiko

    (5) Я в своем варианте говорю Вам про то, что процедуры обновления однозначно выполняются. Можно cfu-хи друг за другом загружать, выполняя процедуры обработки. Просто после всего (всех загрузок cfu и выполнений процедур в режиме предприятия) -кто первый запустит, тот и нажмет флажек и сразу можно работать.

    Reply
  7. VPanin56

    (6) Отлично, спорить не буду.

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

    Reply
  8. Sedaiko

    (7) Да норм все, однофамилец. Идею дарю)))

    Reply
  9. Mx00

    я остановился на программе Обновлятор-1С, не бесплатно, но экономит кучу времени, плюс всякие регламентные процедуры делает и отчет высылает. Программа поддерживается разработчиком и можно попробовать попросить сделать настройки под себя, в общем рекомендую 🙂

    Reply
  10. VPanin56

    (9) Там где я обслуживаю 4 базы я тоже использую Обновлятор, но бесплатную версию. Мне ее там хватает.

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

    Процедуры пакетного обновления были написаны еще до меня, я лишь их модернизировал до полного автоматизма и дополнил в пакетном режиме все наши базы своим расширением. Теперь я не трачу кучи времени на запуск 160 баз и подтверждение легальности получения обновления. Утром бухи открывают обновленные базы и начинают работать, все регламентные процедуры тоже отработали, если что.

    Reply
  11. Mx00

    (10) вам сложно судить об «обновляторе» по бесплатной версии и даже как-то не приятно когда вы _утверждаете_ что «чего к сожалению не умеет Обновлятор даже в платной версии», а не уточняете может ли он это делать 🙁

    https://helpme1c.ru/istoriya-izmenenij-programmy-obnovlyator-1s

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

    я сам люблю что-нибудь делать супер полезное и «ни кто кроме меня не сделает лучше» 🙂 , но в данном случае есть готовое решение, которое делает всё что нужно для обслуживания баз 1С 🙂

    Reply
  12. VPanin56

    (11) Не поленился полез еще раз на сайт Обновлятора.

    Да в описаниях новостей что то есть про механизм подтверждения легальности. но это новость от 2015 года и за эти 4 года могло многое измениться со стороны 1С.

    Иду в описание Проф версии — «Как вы успели заметить бесплатная версия программы вполне функциональна и подходит для большинства пользователей. Поэтому было принято решение выпускать ещё и проф-версию — более функциональную по сравнению с бесплатной.» В описании преимуществ проф версии ни слова про легальность нету.

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

    Если вы пользуетесь Обновлятором Проф версии , продемонстрируйте такую возможность этой программы, хотя бы скринами

    И да, я не утверждал что Обновлятор плохой а я сделал круче. Я этого не увидел в нем, поэтому сделал свое.

    Reply
  13. Mx00

    (12) Не поленился, достал архив базы, настроил автоматическое обновление и обновил — при входе в базу никакого вопроса подтверждения легальности не появилось 🙂

    Подтвердить это скринами не получится, а заморачиваться с видео мне ну совсем лениво 😉

    я не знаю есть ли «специальная настройка», но в проф версии при автоматическом обновлении по расписанию легальность подтверждается без участия пользователя.

    Reply
  14. Mx00

    Спросил автора Обновлятора 1С — настройка называется «Не выполнять обработчики обновления», т.е. по умолчанию всё выполняется и только по желанию пользователя можно отключить все процессы после обновления.

    https://helpme1c.ru/obnovlyator-1s-chto-takoe-sluzhebnye-dejstviya-v-baze-zachem-oni-nuzhny-i-v-kakix-sluchayax-i-kak-ix-luchshe-otklyuchit

    Reply
  15. VPanin56

    Спасибо что заморочился с архивом.

    Такую настройку «Не выполнять обработчики обновления» видел и она доступна в бесплатной версии. И при обновлении бесплатным Обновлятором обработчики тоже выполняются, но почему то после обновления через Обновлятор с выполнением обработчиков, база при первом запуске просит подтвердить легальность получения обновлений. Неужели это «фишка» бесплатной версии ?

    Надо мне проверить на своем бесплатном Обновляторе какую нибудь базу еще раз.

    Reply
  16. sinops

    В последних релизах можно запускать с параметром /C»ВыполнитьОбновлениеИЗавершитьРаботу»

    база стартует, сама автоматом проставляет легальность обновления и выполняет обработку обновления .

    Reply
  17. VPanin56

    (16)

    ВыполнитьОбновлениеИЗавершитьРаботу

    Круто конечно, 1С как всегда жизнь тока портит, т.к. эта фигня(автоматическое подтверждение) работала на файловых базах и без этого ключа, а тепрь тока с ключиком 🙂

    Бухгалтерия предприятия, редакция 3.0 (3.0.73.54)

    Если ИнформационнаяБазаФайловая

    И СтрНайти(ПараметрЗапуска, «ВыполнитьОбновлениеИЗавершитьРаботу») > 0 Тогда

    ЗаписатьПодтверждениеЛегальностиПолученияОбновлений();

    А на серверных базах, которых мне надо обновлять уже около 100 шт, эта хрень никогда не работала автоматом, ни с к ключем ни без него.

    А мое расширение продолжило работать, я даже не знал что изменили и добавили ключ такой

    Reply
  18. stanislav1esnik

    (9)Обновлятор — отличная программа. Использую её коммерческую версию у двух клиентов. Если всё настроено, то программа сама всё бэкапит, обновляет, подтверждает легальность обновления (!) и запускает обработчики обновления. Остаётся только проверить на почте отчет об обновлении.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *