0. Drak0n 170 14.07.16 13:21 Сейчас в теме

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

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

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

Комментарии
Избранное Подписка Сортировка: Древо
1. Evil Beaver 6447 14.07.16 14:02 Сейчас в теме
было замечено что в каталоги с базой пользователи часто кидаю посторонние файлы - будь то выгрузки, различные архиви и т.п.

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


Эта информация верна?
ИМХО запуск обработок в режиме Предприятия очень важен, миграция данных идет именно в них.
3. artbear 1171 14.07.16 14:15 Сейчас в теме
ИМХО в статье перепутан код скриптов очистки кеша и переноса файлов :(
5. artbear 1171 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 170 15.07.16 12:56 Сейчас в теме
Обновил текст скриптов.
Автоматическое обновление теперь умеет:
- Выполнять отложенные обработчики обновления (только для конфигураций на БСП);
- Выполнять тестирование и исправление;
- Принимать обновления в информационной базе (только для конфигураций на БСП).

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


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

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


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

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

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

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

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

Интеграция в скрипты работы с библиотеками logos, v8runner.
18. ret-Phoenix 466 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 170 22.07.16 13:38 Сейчас в теме
(18) ret-Phoenix, parserv8i полностью устроил, спасибо за ссылку.
20. hibico 254 22.07.16 15:02 Сейчас в теме
(17)
		Пока ТекущаяДата() - Интервал <= ДатаСтарта Цикл 
			Если Не ФайлНаличияСоединений.Существует() Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
- сюда лучше вставить задержку, например также через "WScript.Shell". А то это ненужная нагрузка на процессор.

Ну а так осталось, похоже, только отправка сообщения (или лога) по почте.
21. pumbaE 630 22.07.16 15:05 Сейчас в теме
(20) hibico, в oscript в отличии от 1с есть sleep(1000) = 1 секунда поспать.
JohnyDeath; artbear; +2 Ответить
22. artbear 1171 22.07.16 15:47 Сейчас в теме
(21) pumbaE, Дополню: в 1скрипт для русского кода реализован Приостановить
23. hibico 254 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 704 05.01.17 01:07 Сейчас в теме
Пытаюсь выполнить резевное копирование серверной ИБ. Пример скрипта ниже.

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

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

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

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

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


Получаю исключение от платформы. На скриншоте видно, что платформа пытается работать с временным файлом по несуществующему пути.
Прикрепленные файлы:
27. JohnyDeath 295 05.01.17 10:47 Сейчас в теме
(26) Случайно не ConEmu (или cmder) для запуска используете?
28. biz-intel 704 05.01.17 12:09 Сейчас в теме
(27) нет не использую. Исключение обошёл переопределением переменной temp. Но теперь борюсь с ошибкой "Информационная база не определена". Вообще скрипт нормально работает с файловыми базами, но с серверными лично у меня много проблем, а хочется чтобы скрипты именно с серверными базами помогали
29. JohnyDeath 295 05.01.17 15:17 Сейчас в теме
31. biz-intel 704 05.01.17 20:03 Сейчас в теме
(29) спасибо, но я уже там:) Интересный проект, уверен что это прорыв для нас.
30. Drak0n 170 05.01.17 19:19 Сейчас в теме
Это как раз ошибка создания/доступа к файлу лога, создаваемое скриптом библиотеки v8runner (она используется в моей библиотеке для указания параметров запуска конфигуратора). Попробуйте обновить v8runner или свяжитесь с разработчиками. Ссылка выше.
32. biz-intel 704 05.01.17 20:14 Сейчас в теме
(30) у меня последняя версия стоит, у вас в скрипте есть метод "УстановитьКаталог" с аргументом "КаталогВременныхФайлов". Если переопределить путь лог создается, но дальше возникает не особо обработанное исключение (см. скриншот). Я понимаю что это не в коде скрипта, сейчас как раз смотрю v8runner
Прикрепленные файлы:
33. 4iga-buga 18.09.18 09:40 Сейчас в теме
Помогите пожалуйста, как лог скрипта обновления конфигураций сохранить в файл?
34. 4iga-buga 18.09.18 10:19 Сейчас в теме
35. mirco 72 27.12.18 23:02 Сейчас в теме
Помогите. Почему выдает ошибку
package-loader.os / Ошибка в строке 184 /неверное значение аргумента
Библиотека лежит в C:\OS\lib\AutoUpdateIB

в oscript.cfg
lib.additional = C:\OS\lib\AutoUpdateIB;
36. Niki_Pro 23.01.19 10:10 Сейчас в теме
(35)
Проверь корректность наименований в папке "Классы". Аналогичная ошибка была, потому что скачал архив с github, и все русские буквы в наименовании стали крокозябрами. Я их переименовал, но допустил ошибку. Обнаружил ее, и ошибка ушла.
37. dis_2015 13 05.03.19 00:33 Сейчас в теме
При запуске обновления серверной базы получаю вот такую ошибку (см. скрин). Подскажите как побороть?
Прикрепленные файлы:
38. Drak0n 170 05.03.19 12:56 Сейчас в теме
В папке со временными файлами есть логи - попробуйте посмотреть там более детальную информацию.
Скорее всего что-то напутал с кавычками или заменой в функции УстановитьУправлениеКонфигуратором в строке
СтрокаСоединения = "/IBConnectionString""Srvr = """"&ИмяСервера1СПредприятия""""; Ref = """"&ИмяИнформационнойБазыНаСервере1СПредприятия""""""";

Сейчас негде проверить. Попробуйте заменить на
СтрокаСоединения = "/IBConnectionString""Srvr = '&ИмяСервера1СПредприятия'; Ref = '&ИмяИнформационнойБазыНаСервере1СПредприятия'""";
39. dis_2015 13 05.03.19 15:48 Сейчас в теме
40. dis_2015 13 05.03.19 20:24 Сейчас в теме
Серверные базы с Бухгалтерией обновились. А с зарплатой получаю не очень понятную ошибку. Как это побороть?
ПараметрыОбновленияКонфигурации = ПолучитьПараметрыОбновленияКонфигурации("HRM", "3.0");  
	Если ПараметрыОбновленияКонфигурации <> Неопределено Тогда  

	    ПараметрыПодключения = ПолучитьПараметрыПодключения(1,,"server1","zp3_base");
	    ОбновитьИнформационнуюБазу(ПараметрыОбновленияКонфигурации, ПараметрыПодключения,,Ложь,,Ложь,Ложь);  
		
	
	КонецЕсли;
Показать


Релиз зупа 3.1. Вставлять "HRM", "3.1" я тоже пробовал. Без результатов.
Ошибка на скрине
Прикрепленные файлы:
41. Drak0n 170 06.03.19 09:35 Сейчас в теме
Откройте архив на который ссылается ошибка - там текстовый файл с описанием проблемы. Скорее всего по указанному логину и паролю нет доступа к конфигурации.
Так же для Базовой, проф и корп версии разные дистрибутивы. Уверены что, например, не HRMBase?
42. dis_2015 13 06.03.19 10:09 Сейчас в теме
(41) Архив при попытке его извлечь падает с ошибкой. Но при попытке открыть его блокнотом он оказывается html такого содержания:
<ht ml>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.12.1</center>
</body>
</html>
Показать

По логину и паролю доступ к обновлениям точно есть. Но зуп у нас корп и я попробовал "HRMCorp" и "HRMCorp30","HRM30" результат одинаковый
43. dis_2015 13 06.03.19 11:57 Сейчас в теме
(42)
Разобрался правильно в моем случае "HRM", "31"
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Чебоксары
зарплата от 50 000 руб. до 70 000 руб.
Полный день

Программист 1С
Новосибирск
зарплата от 80 000 руб. до 120 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата до 160 000 руб.
Полный день

Консультант 1С
Москва
зарплата от 100 000 руб. до 140 000 руб.
Временный (на проект)