Примеры скриптов на OneScript

0. Алексей Чесноков (Drak0n) 154 14.07.16 13:21 Сейчас в теме
В своей работе нам часто приходится заниматься рутинными операциями. При небольшом их объеме "ручное" выполнение еще допустимо, но с ростом их числа все мы задумываемся об автоматизации. Вот тут нам на помощь и приходят скрипты. На этом сайте уже выложено немало примеров различных скриптов, вот и я решил внести свою лепту.

Перейти к публикации

Комментарии
1. Андрей Овсянкин (Evil Beaver) 4993 14.07.16 14:02 Сейчас в теме
было замечено что в каталоги с базой пользователи часто кидаю посторонние файлы - будь то выгрузки, различные архиви и т.п.

А можно вопрос - почему они вообще имеют доступ в каталоги бэкапов? А ну как поудаляют их к чертям?
4. Юрий Былинкин (ardn) 78 14.07.16 14:16 Сейчас в теме
(1) Evil Beaver,
Я так понял, что в каталог с базой кидают свои файлы, из-за этого большой размер бекапа получается
6. Алексей Чесноков (Drak0n) 154 14.07.16 14:54 Сейчас в теме
(1) Evil Beaver, сотрудники имеют доступ только к каталогам с информационными базами. Специфика деятельности такова, что достаточно часто клиенты приносят выгрузки (или архивы с ИБ),которые нужно загрузить или наоборот нужно выгрузить базу клиенту... В общем весь этот мусор сотрудниками копировался и выгружался в папку с ИБ и соответственно с ней же бекапился... От чего размер ежедневных архивов раздувался просто неимоверно).
(2) artbear, ни коем образом не умоляю важность принятия изменений в режиме Предприятия, однако как уже говорил, у нас принято что бы сам сотрудник, работающий с базой, принимал эти обновления. Но, соглашусь, добавить в код такую возможность надо... Как-нибудь позже...
(3) artbear, каюсь, исправил (уж очень неудобный редактор текста статьи на инфостарте).
(5) artbear, спасибо, учту.
2. Артур Аюханов (artbear) 921 14.07.16 14:14 Сейчас в теме
(0) В исходной ветке тобой указано про текущий код обновления
Обновление идет на максимально возможный уже скачанный релиз, если такового не найдено - на максимально возможный в пределах скачка (загружается с сайта). Такая необходимость возникла в связи с тем что была куча баз с различными релизами и вместо того чтобы качать цепочку "максимальных" релизов для каждой все релизы обновлялись на уже скачанный и далее по одной цепочке до финального.
Обработчики в режиме Предприятия не запускаются. Тут принципиальная позиция - соглашение на клиентском компьютере принимает пользователь. Через чур старых ИБ не обновляется - поэтому проблем нет).


Эта информация верна?
ИМХО запуск обработок в режиме Предприятия очень важен, миграция данных идет именно в них.
3. Артур Аюханов (artbear) 921 14.07.16 14:15 Сейчас в теме
ИМХО в статье перепутан код скриптов очистки кеша и переноса файлов :(
5. Артур Аюханов (artbear) 921 14.07.16 14:21 Сейчас в теме
(0) Вместо кода с использованием COM-объекта
COMОбъект = Новый COMОбъект("Wscript.Shell");
ИмяПапкиПользователя = COMОбъект.ExpandEnvironmentStrings("%USERPROFILE%");


можно юзать встроенный класс
ПеременныеСреды / EnvironmentVariables()
Возвращает соответствие переменных среды. Ключом является имя переменной, а значением - значение переменной

Пример:

СИ = Новый СистемнаяИнформация();
Для Каждого Переменная Из СИ.ПеременныеСреды() Цикл
Сообщить(Переменная.Ключ + " = " + Переменная.Значение);
КонецЦикла;
Возвращаемое значение

Соответствие

УстановитьПеременнуюСреды / SetEnvironmentVariable()
Позволяет установить переменную среды. Переменная устанавливается в области видимости процесса и очищается после его завершения.

Параметры

varName: Имя переменной

value: Значение переменной

ПолучитьПеременнуюСреды / GetEnvironmentVariable()
Получить значение переменной среды.

Параметры

varName: Имя переменной
Возвращаемое значение

Строка. Значение переменной
Показать


http://oscript.io/syntax/page/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0­%B0%D1%8F%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0­%B8%D1%8F
7. Алексей Чесноков (Drak0n) 154 15.07.16 12:56 Сейчас в теме
Обновил текст скриптов.
Автоматическое обновление теперь умеет:
- Выполнять отложенные обработчики обновления (только для конфигураций на БСП);
- Выполнять тестирование и исправление;
- Принимать обновления в информационной базе (только для конфигураций на БСП).

Очистка кэша больше не использует COM объекты.
11. Артур Аюханов (artbear) 921 19.07.16 18:08 Сейчас в теме
(7)
- Принимать обновления в информационной базе (только для конфигураций на БСП).


Не совсем понял текст.
Здесь говорится об обновлении в режиме Предприятие или о чем-то другом ?
8. Евгений Мартыненков (JohnyDeath) 291 15.07.16 23:56 Сейчас в теме
Не хотите положить скрипты в модный github?
Вот, кстати, еще одна реализация обновлятора баз: https://github.com/ret-Phoenix/autoupdatecfg
bforce; artbear; +2 Ответить
9. Никита Грызлов (nixel) 484 16.07.16 16:47 Сейчас в теме
Удивлен, что в скриптах есть работа с конфигуратором, но нет использования библиотеки v8runner :)
sorb; artbear; ret-Phoenix; ardn; JohnyDeath; +5 Ответить
12. Алексей Чесноков (Drak0n) 154 20.07.16 09:35 Сейчас в теме
(9) nixel, пока только присматриваюсь к возможностям библиотек...

(10) zampollitr, исправился:
	ИмяПапкиПользователя = СистемнаяИнформация.ПолучитьПеременнуюСреды("USERPROFILE");


(11) artbear, выполняется неинтерактивное обновление данных ИБ.
10. 1 1 (zampollitr) 19.07.16 15:08 Сейчас в теме
В скрипте Очистка кэша выдает ошибку:
{Модуль <string> / Ошибка в строке: 21 / Неизвестный символ: ПолучитьПеременнуюСреды}
ИмяПапкиПользователя = ПолучитьПеременнуюСреды("USERPROFILE");
13. Alexandr Kuritsyn (hibico) 250 20.07.16 14:56 Сейчас в теме
Возможен случай, когда конфигурация базы данных отличается от основной конфигурации. А в "Соединение.Метаданные.Версия" возвращается версия конфигурации ИБ.
В моей конфигурации сначала проверяется "Соединений.КонфигурацияИзменена()" и если изменена, то производится сначала обновление конфигурации ИБ.

Не понял, а зачем выполняется
"Соединение.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас()"
перед обновлением основной конфигурации?
14. Алексей Чесноков (Drak0n) 154 20.07.16 16:54 Сейчас в теме
(13) hibico,
Соединение.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(Ложь);
В функцию передается параметр отключающий отложенные обработчики обновления (для более быстрого обновления). Соответственно если в информационную базу никто после предыдущего обновления не заходил - эти обработчики будут невыполненными.
15. Alexandr Kuritsyn (hibico) 250 21.07.16 10:14 Сейчас в теме
(14)
Я не про
Соединение.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(Ложь);

А про строку:
Соединение.ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОтложенноеОбновлениеСейчас();

Насколько понимаю, она вызывает запуск отложенных заданий. Если в ней смысл перед обновлением конфигурации?
16. Алексей Чесноков (Drak0n) 154 21.07.16 12:53 Сейчас в теме
(15) hibico, риск пропустить какое-нибудь критическое изменение конечно минимален, но, при пакетном обновлении с накатыванием сразу кучи релизов, он присутствует. Да и типовой 1Совский скрипт эту процедуру запускает. Так что лишним не будет.
17. Алексей Чесноков (Drak0n) 154 22.07.16 11:15 Сейчас в теме
Новое обновление.
Автоматическое обновление теперь:
- Завершает работу пользователей и устанавливает запрет на подключение новых соединений (только для конфигураций на БСП);
- В случае ошибки пытается восстановиться из резервной копии (для файловых баз);
- Разрешает подключение новых соединений (только для конфигураций на БСП).
Теперь корректно отрабатываются ситуации, когда основная конфигурация отличается от конфигурации базы данных.

Добавлен пример скрипта для работы с файлом списка информационных баз (ibases.v8i).

Интеграция в скрипты работы с библиотеками logos, v8runner.
18. Сергей (ret-Phoenix) 318 22.07.16 12:54 Сейчас в теме
(17) Чем не устраивает parserv8i из библиотек к 1script (https://github.com/oscript-library/parserV8i)? там есть и чтение и запись и работа с кешем.
https://github.com/ret-Phoenix/autoupdatecfg здесь есть функционал по получению последнего релиза, гораздо более простой, скачка файла обновления и запуск конфигуратора с принятием изменений. Запуск в пользовательском режиме при желании можно взять из приведенных Вами скриптов. Опять же там несколько вариантов создания копии баз, прозрачный API.

https://github.com/ret-Phoenix/scripts здесь на основе выше приведенных реп поиск файловых баз с мертвыми путями и простое архивирование 1cd, вариант с использованием внешнего архиватора.

Не понимаю, зачем создавать все с нуля, когда есть готовое и можно его улучшить, тем более код там простой, и покрыт тестами.
JohnyDeath; +1 Ответить
19. Алексей Чесноков (Drak0n) 154 22.07.16 13:38 Сейчас в теме
(18) ret-Phoenix, parserv8i полностью устроил, спасибо за ссылку.
20. Alexandr Kuritsyn (hibico) 250 22.07.16 15:02 Сейчас в теме
(17)
		Пока ТекущаяДата() - Интервал <= ДатаСтарта Цикл 
			Если Не ФайлНаличияСоединений.Существует() Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
- сюда лучше вставить задержку, например также через "WScript.Shell". А то это ненужная нагрузка на процессор.

Ну а так осталось, похоже, только отправка сообщения (или лога) по почте.
21. Евгений Сосна (pumbaE) 598 22.07.16 15:05 Сейчас в теме
(20) hibico, в oscript в отличии от 1с есть sleep(1000) = 1 секунда поспать.
JohnyDeath; artbear; +2 Ответить
22. Артур Аюханов (artbear) 921 22.07.16 15:47 Сейчас в теме
(21) pumbaE, Дополню: в 1скрипт для русского кода реализован Приостановить
23. Alexandr Kuritsyn (hibico) 250 22.07.16 16:44 Сейчас в теме
(21) pumbaE,
Честно сознаюсь, о 1Скрипт узнал только случайно попав на эту публикацию. Был приятно удивлен.
Сейчас времени нету, но после отпуска обязательно познакомлюсь поближе. Уже есть идеи использования.
24. Роман Сюзев (sorb) 26.07.16 08:10 Сейчас в теме
(23) hibico, обязательно поделитесь открытием со своими коллегами, и заходите сюда: https://github.com/EvilBeaver/oscript-library - там уже много идей реализовано :)
Evil Beaver; JohnyDeath; +2 Ответить
25. Татьяна Лозинская (TatiLoz) 01.12.16 22:34 Сейчас в теме
(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Запрос, мФайл.ПолноеИмя);
26. Кирилл Трофимов (biz-intel) 585 05.01.17 01:07 Сейчас в теме
Пытаюсь выполнить резевное копирование серверной ИБ. Пример скрипта ниже.

#Использовать AutoUpdateIB

Обновлятор = Новый Обновлятор();

Обновлятор.УстановитьКаталог("КаталогРезервныхКопий", "D:\");

ПараметрыПодключения = Обновлятор.ПолучитьПараметрыПодключения(1,,"server","base",,"user","passwd",);

Обновлятор.СоздатьРезервнуюКопию(ПараметрыПодключения);
Показать


Получаю исключение от платформы. На скриншоте видно, что платформа пытается работать с временным файлом по несуществующему пути.
Прикрепленные файлы:
27. Евгений Мартыненков (JohnyDeath) 291 05.01.17 10:47 Сейчас в теме
(26) Случайно не ConEmu (или cmder) для запуска используете?
28. Кирилл Трофимов (biz-intel) 585 05.01.17 12:09 Сейчас в теме
(27) нет не использую. Исключение обошёл переопределением переменной temp. Но теперь борюсь с ошибкой "Информационная база не определена". Вообще скрипт нормально работает с файловыми базами, но с серверными лично у меня много проблем, а хочется чтобы скрипты именно с серверными базами помогали
29. Евгений Мартыненков (JohnyDeath) 291 05.01.17 15:17 Сейчас в теме
31. Кирилл Трофимов (biz-intel) 585 05.01.17 20:03 Сейчас в теме
(29) спасибо, но я уже там:) Интересный проект, уверен что это прорыв для нас.
30. Алексей Чесноков (Drak0n) 154 05.01.17 19:19 Сейчас в теме
Это как раз ошибка создания/доступа к файлу лога, создаваемое скриптом библиотеки v8runner (она используется в моей библиотеке для указания параметров запуска конфигуратора). Попробуйте обновить v8runner или свяжитесь с разработчиками. Ссылка выше.
32. Кирилл Трофимов (biz-intel) 585 05.01.17 20:14 Сейчас в теме
(30) у меня последняя версия стоит, у вас в скрипте есть метод "УстановитьКаталог" с аргументом "КаталогВременныхФайлов". Если переопределить путь лог создается, но дальше возникает не особо обработанное исключение (см. скриншот). Я понимаю что это не в коде скрипта, сейчас как раз смотрю v8runner
Прикрепленные файлы:
Оставьте свое сообщение