Скрипт для автоматического обновления баз 1С (загрузка с сайта, применение и др)

Скрипт для автоматической загрузки и обновления баз 1С (скачивание, обновление, тестирование, выгрузка cf, dt, загрузка в 1CD, отправка отчета по email)

Скрипт настраивается под определенную базу. Можно файловую, можно серверную. Через COM соединение определяется версия текущей конфигурации, скачивается из открытой части с серверов 1С файл xml по которому определяется последняя подходящая версия конфигурации которую нужно качать для обновления текущей. Далее используя логин и пароль для доступа к серверу обновления качается подходящее последнее обновление и так поочередно скачиваются и применяются к конфигурации все обновления, промежуточно создаются резервные копии. Можно включить тестирование и реструктуризацию базы без исправления ошибок. Отправляется отчет о текущей версии по электронной почте. Открытый код скриптов, написанный на VBS и в командной строке. Для полной автоматизации достаточно указать необходимые параметры и добавить bat файл в планировщик. Если необходимо обновлять несколько баз, сделайте копию bat файла и положите рядом. Используются утилиты wget, unzip, blat скачанные с официальных сайтов. Скрипт не готов сразу работать, необходимо умелыми ручками править параметры. Не забываем зарегистрировать COM компоненту V83.COMConnector (регистрации dll не достаточно. Гуглите если не знаете как) если используются 8.2 программные файлы, то компоненту V82.COMConnector и исправить ее название в com.vbs и comf.vbs. Для редактирования параметров рекомендую AkelPad и сохранять в 866 OEM кодировке c указанием в начале bat файла chcp 866. Тогда будет корректно отображаться русский язык и читаться пути в кирилице. Либо сохрянять в 1251 ANSI кодировке, chcp 1251, можно править в простом блокноте, но тогда русские буквы могут не отображаться корректно. Если какие-то вопросы, пишите в личку. Не забываем ставить лайк 😉

49 Comments

  1. mixperm

    обнаружена проблема при COM обращении к файловой базе содержащей пробелы. Строка подключения обрезается до пробела. Пытался вставить кавычки не помогает. Может кто знает как исправить?

    Reply
  2. mixperm

    Сделал более понятную настройку параметров. Теперь в скрипте выбирается параметр файловая или серверная база. Добавил утилиту blat для отправки отчетов по электронке. Для себя еще делал выгрузку cf, dt, и загрузка в 1CD. Короче все это создавал для того, чтобы всегда под рукой имелся актуальный 1CD для новых файловых баз, актуальный dt для создания новой базы на сервере и актуальный cf для оперативного обновления старых баз. На элетронке сообщение об актуальной версии))) Теперь все само собой делается. (кстати имеется специальная конфигурация для администрирования и массового обновления баз, но она еще не доработана, хотя и работает, просто не товарного вида)

    Reply
  3. mixperm

    Для исправления ошибки связанной с пробелом в пути к базе в скрипте comf.vbs изменить строку str=»File=»&Wscript.Arguments(0)&»;Usr=»&Wscript.Arguments(1)&»;pwd=»&Wscript.Arguments(2)

    на

    str=»File=»»»&Wscript.Arguments(0)&»»»;Usr=»»»&Wscript.Arguments(1)&»»»;pwd=»&Wscript.Arguments(2)

    Reply
  4. Хегга

    Сама идея отличная, но настройки умелыми ручками сам я не осилил. С админом — тоже не осилил.

    Вероятно дело в разных целях:

    1. Автору нужно было ежедневное автоматическое скачивание последнего релиза. Тогда алгоритм «посмотрели на сервер, сравнили конфы, если не последняя то скачали, потом распаковали, потом накатили, потом сохранили конфу в cf, потом сохранили базу в dt, потом накатили на файловую базу, потом рапортовали по e-mail хозяину «Все готово, хозяин» — логичен.

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

    Причем в заначке на винте все нужные релизы, в шаблонах, уже в cfu лежат, их нужно просто накатить без вопросов.

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

    Я смотрю плюсы то у статьи есть, значит у кого-то руки более прямые, чем у нас с админом. И то хорошо.

    Reply
  5. mixperm

    (4) Хегга, согласен параметров много, но это и придает универсальность скрипту. Готов помочь настроить. В личку вышлите мне параметры всех баз для обновления я вышлю настроенный батник (название конфигурации, путь к базе или имя сервера и название базы если серверная, логин и пароль сами пропишите. Хотя если разбираться в проблемах, то скорей всего ваша проблема это кодировка файла. Батник сохранен в OEM 866 кодировке для поддержки русского языка в путях и корректного отображения процесса обновления. В обычном блокноте отредактировать не получится если есть русские буквы в пути т.к. при сохранении будут записаны неверные данные. Я использовал AkelPad для редактирования. Выложу обновление в кодировке 1251 где добавил еще тестирование (реструктуризация) баз без исправлений, только в командной строке могут отображаться каракули вместо русского языка, но работать должно

    Reply
  6. mixperm

    Выложил версию 2.4 в кодировке 1251 для редактирования в простом блокноте. Русские буквы рекомендую исправить на латиницу для корректного отображения хода обновления. Добавлено тестирование базы.

    Reply
  7. artbear

    ОФФ подписался

    Reply
  8. artbear

    (0) Интересная реализация, практически все через bat-файлы и консольные утилиты + чуть-чуть скрипт-кодинга 🙂

    Reply
  9. connectoid

    Отличная работа, давно искал, даже начинал сам делать, правда на Delphi, но этот вариант гораздо проще и универсальнее. Поправил немного под себя, попробовал на одной из баз, все работает.

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

    Reply
  10. mixperm

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

    Reply
  11. connectoid

    Может кто знает почему по данной ссылке http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/budgethrm/10/82/v8upd11.zip находится список релизов ЗиКБУ только до версии 1.0.28.1 от 2011 года?

    И как получить список актуальных релизов для данной конфигурации?

    Reply
  12. connectoid
  13. mixperm

    (11) connectoid, http://downloads.1c.ru/ipp/ITSREPV/V8Update/Configs/BudgetHRM/10/82/v8upd11.zip Как это ни странно надо тоже с учетом регистра вводить

    Reply
  14. connectoid

    (13) Не странно, ибо сервер на никсах у них, видимо в 2011 создали новую папку BudgetHRM

    Reply
  15. teflon

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

    а автор молодчага, респект.

    Reply
  16. teflon

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

    PS: хотя, наверное это лишнее.

    Reply
  17. mixperm

    (16) teflon, Принято… 1. Сделаю отдельную переменную пути для скачивания обновлений в стандартный каталог с шаблонами. 2. Подумаю как можно хранить пароли в зашифрованном виде, но из меня плохой программист думать буду долго.

    Reply
  18. teflon

    Не удается обновить скриптом Управление торговлей ред. 11.1, если точнее, то не обновляется база данных.

    Бухгалтерия предприятия ред. 3.0 и ред. 2.0, Зарплата и Управление Персоналом ред. 2.5 обновляются прекрасно.

    У кого-нибудь есть положительный опыт обновления Управление торговлей ред. 11.1 в пакетном режиме?

    Reply
  19. mixperm

    (18) teflon, Сколько копался в интернете, вроде отличий для разный конфигураций нет. Отличия только для файловой и серверной базы в параметрах запуска. Обычно все проблемы с ошибками это блокировка базы пользователем или регламентными заданиями в случае серверной базы.

    Reply
  20. mixperm

    Обновление 2.5

    — добавлен параметр для указания пути хранения шаблонов tmplts. Пытался сделать считывание из стандартного 1CUpdate.cfg, но оказалось у него кривая кодировка и не стал заморачиваться с перекодировками.

    — добавлен параметр для указания пути к бэкапу

    — добавлена проверка успешности создания бэкапа (присутствует файл или нет). (Забыл добавить к имени файла дату создания, потом как-нибудь, если не забуду опять)

    — добавлена проверка существования папок куда сохраняются бэкап и обновления

    — убраны лишние сообщения при отключенных доп. опций для создания cf, выгрузки dt и загрузки 1CD

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

    Reply
  21. filin2009

    Неплохо было бы предупредить, что антивирус «Касперский» определяет одну из утилит, входящих в комплект поставки Blat

    как потенциально опасное ПО (не вирус, SMTP-клиент)

    обнаружено: not-a-virus:Client-SMTP.Win32.Blat.ca

    файл: blat.exe blat.dll

    Reply
  22. mixperm

    (21) filin2009, Первый раз слышу. У меня НОД32 ничего не говорил… да и судя по касперскому not-a-virus Client-SMTP чем собственно и является данная утилита. По мне дак лучше сторонняя популярная разработка, чем своя утилита, когда не понятно что она еще кроме делает.

    Reply
  23. mixperm

    В ноябре изменился формат xml файла, по которому определяется версия для скачивания обновления. Привожу текст исправленного скрипта vbs.vbs можно сделать полную замену в блокноте

    if Wscript.Arguments.count = 0 then Wscript.Quit

    With CreateObject(«Scripting.FileSystemObject»).OpenTextFile(Wscript.Arguments(0))

    xmlstr=.ReadAll

    .Close

    End With

    Dim A(1000,1000)

    i=0

    j=0

    tmpstr=xmlstr

    While InStr(xmlstr, «<v8u:version») or InStr(xmlstr, «<v8u:target») <> 0

    verpos=InStr(xmlstr, «<v8u:version»)

    tarpos=InStr(xmlstr, «<v8u:target»)

    if (verpos<tarpos) and (verpos<>0) then

    i=i+1

    j=0

    cutstr=Mid(xmlstr, verpos)

    cutstr=Mid(cutstr, InStr(cutstr, «>»)+1)

    xmlstr=cutstr

    cutstr=Mid(cutstr, 1, InStr(cutstr, «<«) -1)

    A(i,j)=trim(cutstr)

    Else

    j=j+1

    cutstr=Mid(xmlstr, tarpos)

    cutstr=Mid(cutstr, InStr(cutstr, «>»)+1)

    xmlstr=cutstr

    cutstr=Mid(cutstr, 1, InStr(cutstr, «<«) -1)

    A(i,j)=trim(cutstr)

    End If

    Wend

    For i=1 to 1000

    For j=1 to 1000

    If A(i,j)=Wscript.Arguments(1) then

    ver=A(i,0)

    End if

    Next

    Next

    If ver=»» then

    ver=Wscript.Arguments(1)

    End If

    Dim fso, tf

    Set fso = CreateObject(«Scripting.FileSystemObject»)

    Set tf = fso.CreateTextFile(Wscript.Arguments(2), True)

    tf.Write(ver)

    tf.Close

    Set tf = fso.CreateTextFile(Wscript.Arguments(3), True)

    ver=replace(ver, «.», «_»)

    tf.Write(ver)

    tf.Close

    Wscript.Quit

    Reply
  24. mixperm

    Обновление 2.6

    1. Внесено исправление указанное постом выше

    2. Исправление в пути неправильно считывающее наличие уже скаченного обновления с последующим запросом перезаписи

    строка

    if not exist %temp%\%verversion% %temp%wget.exe —directory-prefix=%temp%

    исправлена на

    if not exist %temp%\%type%\%verversion% %temp%wget.exe —directory-prefix=%temp%

    Данные исправления вы можете внести сами не скачивая снова

    P.S. если честно я уже и не помню какие изменения вносил, просто это мой рабочий вариант с удаленными паролями

    Reply
  25. max_vorzhev

    Добрый вечер. Не могу понять. Все настроил правильно (вроде). Скрипт видит базу. Определяет ее версию конфигурации. Скачивает новую версию. На этом все! Открываю конфу — ничего не обновилось!

    Reply
  26. ispan

    (20) mixperm, Привет.

    обновлять будет из каталога обновлений (есть установленные обновления на компе)? если да, то помоги файлик настроить :

    где прописать путь к каталогу обновлений

    Reply
  27. Shamzelia

    Проблема такая

    Скачали…

    Для продолжения нажмите любую клавишу . . .

    checkdir: cannot create extraction directory: C:/1CUpdate/bin/Accounting/2.0.64

    .9

    Для продолжения нажмите любую клавишу . . .

    Уже утютюхался понимать от чего косяк….

    Пробовал напрямую с правами админа… все тоже самое…

    Reply
  28. Shamzelia

    Разобрался )

    Решил проблему добавлением строки md…..

    Наткнулся на новую…

    1-я Не всегда делает бекап

    2-я Проблема с обновлением бд на сервере т.к. есть либо активные блокировки либо активные сеансы

    3-я Нужен лог по каждой базе(батнику) в виде файла (полезная инфа: начало, конец, результат или что за ошибка)

    Думаю как выкидывать пользователей….

    Reply
  29. Shamzelia

    max_vorzhev

    По скрину у тебя таже ошибка как у меня.

    Проблема в том что unrar.exe не может создать директорию для распаковки архива

    Я решил эту задачу путем добавления строки создания дириктории

    echo Скачали…

    md %temp%\%type%\%verversion%\r

    if exist %temp%1cv8.zip %temp%unzip.exe -q %temp%1cv8.zip -d %temp%\%type%\%verversion%\r

    и тогда ошибка как на скрине исчезает…

    Будут вопросы пиши 😉

    Я вроде со всеми вопросами разобрался

    Reply
  30. max_vorzhev

    (29) Shamzelia, Спасибо большое! Все получилось!)

    Reply
  31. Shamzelia

    Джентльмены, а может быть можно реализовать подобный алгоритм для платформы???

    Я готов принять участие и тестирование….

    Reply
  32. webester

    (31)У платформы это реализовывается вроде как средствами самой плафтормы, тонкий клиент точно, а вот толстый не помню.

    Reply
  33. mixperm

    (25) max_vorzhev, добрый день. Прошу прощения за столь поздний ответ. Видимо проблема решилась без меня.

    Reply
  34. mixperm

    (31) Shamzelia, я пытался заставить своего брата сделать из моего скрипта нормальную конфу для обновления. Конфа рабочая есть, но не доделана и заброшена. Конфа может только обновлять (в данный момент постоянно обновляю конфой 150+ баз), скачивать и т.п. не может (скачиваю скриптом).

    Reply
  35. Makrushin

    В чем может быть проблема? Подскажите пожалуйста

    Reply
  36. Makrushin

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

    Reply
  37. Buхter

    (34) mixperm, Добрый день. Можете поделиться опытом обновления 150+ баз? Может вы где-то уже выкладывали данную разработку?

    Reply
  38. mixperm

    (35) Makrushin, скорее всего из-за латиницы в пути

    Reply
  39. mixperm

    Вопросы на емаил mixperm(сабака)yandex.ru

    Reply
  40. sergey279

    Спасибо!, давно не получал такого удовольствия от ковыряния bat-ника. (В far красивая тоже разукрашка)

    Reply
  41. Evil Beaver

    Если мне не изменяет память, то такой скрипт (правда на JScript) уже есть в любой типовой конфигурации, в штатном механизме проверки обновлений. Сидит где-то в макетах, запускается, скачивает все, что нужно, обновляет релиз и снова запускает базу.

    Reply
  42. hibico

    (31) Shamzelia, (37) Buхter

    Гляньте, может моя подойдет: Автоматизированное обслуживание информационных баз 1С версий 7.7 и 8.Х, тестирование, обновление, архивирование и т. д.

    P.S. Странно. Публикация от 2013 года. Когда публиковал свою, плотно рылся поиском по Инфостару и данной публикации не увидел. Сегодня случайно нашел.

    Reply
  43. mixperm

    (42) hibico, У меня скрипт автоматически определяет какую версию качать для обновления и скачивает, и так поочередно, промежуточно делая бэкапы. bat файл размещается в планировщик заданий и никакого ручного кликанья не надо. Править bat файл приходится только когда меняется релиз платформы и то критично только для серверных баз. Кстати да.. поддерживает серверные базы

    Reply
  44. hibico

    (43) mixperm,

    Извини, но я никак не хотел принижать твою разработку (если не заметил, я даже плюсанул).

    В своё время я сам активно пользовался bat-файлами.

    Это пользователям решать какая разработка им больше подходит.

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

    Ручное кликанье в моей конфе — это лишь доп. возможность. Основной запуск «заданий» производится из того же планировщика (лично я предпочитаю nnCron) или по расписанию из запущенного процесса.

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

    Reply
  45. mixperm

    (44) hibico, Если честно, то я вообще не программист. Просто когда стояла задача автоматически обновлять базы перерыл весь интернет и тоже не мог найти того что мне надо. П.э. и родился скрипт по реализации на уровне школьника. Но главное работает как часы если настроить. А вообще у меня есть конфа которая обновляет в данный момент 150 баз и файловые и серверные, но она не доделанная, она не качает обновления, за нее это делает этот скрипт и выдает готовые cf для обновления.

    Reply
  46. chmv

    НЕ НАШЛА ПРОВЕРКИ ЛЕГАЛЬНОСТИ?

    Reply
  47. mixperm

    (46) chmv, используйте программу Обновлятор, решает задачу проверки легальности, этот скрипт больше не поддерживаю, тут этого не появится

    Reply
  48. hibico

    (46) chmv,

    Смотри ссылку в (42) — там есть обновление данных ИБ после обновления конфигурации (в том числе и подтверждение легальности).

    Reply
  49. user1131250

    Я вот тоже начал делать скрипт обновления. Есть вопрос. Максим, можете глянуть на свою почту на яндексе?

    Reply

Leave a Comment

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