В своей работе нам часто приходится заниматься рутинными операциями. При небольшом их объеме "ручное" выполнение еще допустимо, но с ростом их числа все мы задумываемся об автоматизации. Вот тут нам на помощь и приходят скрипты. На этом сайте уже выложено немало примеров различных скриптов, вот и я решил внести свою лепту.
(1) Evil Beaver, сотрудники имеют доступ только к каталогам с информационными базами. Специфика деятельности такова, что достаточно часто клиенты приносят выгрузки (или архивы с ИБ),которые нужно загрузить или наоборот нужно выгрузить базу клиенту... В общем весь этот мусор сотрудниками копировался и выгружался в папку с ИБ и соответственно с ней же бекапился... От чего размер ежедневных архивов раздувался просто неимоверно).
(2) artbear, ни коем образом не умоляю важность принятия изменений в режиме Предприятия, однако как уже говорил, у нас принято что бы сам сотрудник, работающий с базой, принимал эти обновления. Но, соглашусь, добавить в код такую возможность надо... Как-нибудь позже...
(3) artbear, каюсь, исправил (уж очень неудобный редактор текста статьи на инфостарте).
(5) artbear, спасибо, учту.
(0) В исходной ветке тобой указано про текущий код обновления
Обновление идет на максимально возможный уже скачанный релиз, если такового не найдено - на максимально возможный в пределах скачка (загружается с сайта). Такая необходимость возникла в связи с тем что была куча баз с различными релизами и вместо того чтобы качать цепочку "максимальных" релизов для каждой все релизы обновлялись на уже скачанный и далее по одной цепочке до финального.
Обработчики в режиме Предприятия не запускаются. Тут принципиальная позиция - соглашение на клиентском компьютере принимает пользователь. Через чур старых ИБ не обновляется - поэтому проблем нет).
Эта информация верна?
ИМХО запуск обработок в режиме Предприятия очень важен, миграция данных идет именно в них.
COMОбъект = Новый COMОбъект("Wscript.Shell");
ИмяПапкиПользователя = COMОбъект.ExpandEnvironmentStrings("%USERPROFILE%");
можно юзать встроенный класс
ПеременныеСреды / EnvironmentVariables()
Возвращает соответствие переменных среды. Ключом является имя переменной, а значением - значение переменной
Пример:
СИ = Новый СистемнаяИнформация();
Для Каждого Переменная Из СИ.ПеременныеСреды() Цикл
Сообщить(Переменная.Ключ + " = " + Переменная.Значение);
КонецЦикла;
Возвращаемое значение
Соответствие
УстановитьПеременнуюСреды / SetEnvironmentVariable()
Позволяет установить переменную среды. Переменная устанавливается в области видимости процесса и очищается после его завершения.
Параметры
varName: Имя переменной
value: Значение переменной
ПолучитьПеременнуюСреды / GetEnvironmentVariable()
Получить значение переменной среды.
Обновил текст скриптов.
Автоматическое обновление теперь умеет:
- Выполнять отложенные обработчики обновления (только для конфигураций на БСП);
- Выполнять тестирование и исправление;
- Принимать обновления в информационной базе (только для конфигураций на БСП).
Возможен случай, когда конфигурация базы данных отличается от основной конфигурации. А в "Соединение.Метаданные.Версия" возвращается версия конфигурации ИБ.
В моей конфигурации сначала проверяется "Соединений.КонфигурацияИзменена()" и если изменена, то производится сначала обновление конфигурации ИБ.
Не понял, а зачем выполняется
"Соединение.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас()"
перед обновлением основной конфигурации?
В функцию передается параметр отключающий отложенные обработчики обновления (для более быстрого обновления). Соответственно если в информационную базу никто после предыдущего обновления не заходил - эти обработчики будут невыполненными.
(15) hibico, риск пропустить какое-нибудь критическое изменение конечно минимален, но, при пакетном обновлении с накатыванием сразу кучи релизов, он присутствует. Да и типовой 1Совский скрипт эту процедуру запускает. Так что лишним не будет.
Новое обновление.
Автоматическое обновление теперь:
- Завершает работу пользователей и устанавливает запрет на подключение новых соединений (только для конфигураций на БСП);
- В случае ошибки пытается восстановиться из резервной копии (для файловых баз);
- Разрешает подключение новых соединений (только для конфигураций на БСП).
Теперь корректно отрабатываются ситуации, когда основная конфигурация отличается от конфигурации базы данных.
Добавлен пример скрипта для работы с файлом списка информационных баз (ibases.v8i).
Интеграция в скрипты работы с библиотеками logos, v8runner.
(17) Чем не устраивает parserv8i из библиотек к 1script (https://github.com/oscript-library/parserV8i)? там есть и чтение и запись и работа с кешем.
https://github.com/ret-Phoenix/autoupdatecfg здесь есть функционал по получению последнего релиза, гораздо более простой, скачка файла обновления и запуск конфигуратора с принятием изменений. Запуск в пользовательском режиме при желании можно взять из приведенных Вами скриптов. Опять же там несколько вариантов создания копии баз, прозрачный API.
https://github.com/ret-Phoenix/scripts здесь на основе выше приведенных реп поиск файловых баз с мертвыми путями и простое архивирование 1cd, вариант с использованием внешнего архиватора.
Не понимаю, зачем создавать все с нуля, когда есть готовое и можно его улучшить, тем более код там простой, и покрыт тестами.
(21) pumbaE,
Честно сознаюсь, о 1Скрипт узнал только случайно попав на эту публикацию. Был приятно удивлен.
Сейчас времени нету, но после отпуска обязательно познакомлюсь поближе. Уже есть идеи использования.
(17) Алексей, можете подсказать в чем возможна проблема?
При загрузке версии релиза возникает ошибка "403 Forbidden". Браузер тоже выдает эту ошибку при попытке загрузки по урл = "http://downloads.v8.1c.ru/get/Info/StateAccounting/1_0_43_5/updsetup.exe".
Но с n-ой попытки загрузка через браузер срабатывает и после этого начинает работать программная загрузка. Код использую следующий:
Соединение = Новый HTTPСоединение("downloads.v8.1c.ru",,Пользователь,Пароль);
HTTPЗапрос = Новый HTTPЗапрос("/get/Info/" + ИмяКонфигурации + "/" + СтрЗаменить(НомерВерсии, ".", "_") + "/updsetup.exe",Заголовки);
Ответ = Соединение.Получить(HTTPЗапрос, мФайл.ПолноеИмя);
(27) нет не использую. Исключение обошёл переопределением переменной temp. Но теперь борюсь с ошибкой "Информационная база не определена". Вообще скрипт нормально работает с файловыми базами, но с серверными лично у меня много проблем, а хочется чтобы скрипты именно с серверными базами помогали
Это как раз ошибка создания/доступа к файлу лога, создаваемое скриптом библиотеки v8runner (она используется в моей библиотеке для указания параметров запуска конфигуратора). Попробуйте обновить v8runner или свяжитесь с разработчиками. Ссылка выше.
(30) у меня последняя версия стоит, у вас в скрипте есть метод "УстановитьКаталог" с аргументом "КаталогВременныхФайлов". Если переопределить путь лог создается, но дальше возникает не особо обработанное исключение (см. скриншот). Я понимаю что это не в коде скрипта, сейчас как раз смотрю v8runner
(35)
Проверь корректность наименований в папке "Классы". Аналогичная ошибка была, потому что скачал архив с github, и все русские буквы в наименовании стали крокозябрами. Я их переименовал, но допустил ошибку. Обнаружил ее, и ошибка ушла.
В папке со временными файлами есть логи - попробуйте посмотреть там более детальную информацию.
Скорее всего что-то напутал с кавычками или заменой в функции УстановитьУправлениеКонфигуратором в строке
Откройте архив на который ссылается ошибка - там текстовый файл с описанием проблемы. Скорее всего по указанному логину и паролю нет доступа к конфигурации.
Так же для Базовой, проф и корп версии разные дистрибутивы. Уверены что, например, не HRMBase?