Пакетные скрипты для windows

Пакетные скрипты для windows

Речь идёт о возможности написания пакетных скриптов для автоматизации операций над группой баз вот на этой вкладке обновлятора:

Что такое пакетный скрипт?

Пакетный скрипт — это текстовый файл для Windows, содержащий последовательность команд, предназначенных для исполнения командным интерпретатором (подробнее).

Такие файлы обычно имеют расширение bat или cmd.

Я сам подсматриваю синтаксис таких скриптов здесь и здесь.

Зачем писать и запускать эти скрипты именно в обновляторе?

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

Список баз для обработки

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

Передача параметров базы

При выполнении скрипта обновлятор сам передаёт в него необходимые параметры с информацией о текущей базе:

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

Примеры таких скриптов мы можем найти в списке шаблонов обновлятора:

Предварительная архивация базы

При необходимости обновлятор обеспечит создание резервной копии перед выполнением скрипта:

Эта резервная копия будет согласована с общей системой архивации, то есть её также можно подвергать «тюнингу» в дополнительных настройках обновлятора. Такая копия всегда будет иметь метку «перед опасной операцией».

Блокировка, разблокировка базы

При необходимости обновлятор выполнит полную блокировку базы перед выполнением вашего скрипта и разблокировку после:

И это одна из ключевых «фич» обновлятора — ведь, например, корректное выполнение блокировки серверной базы в общем случае является достаточно нетривиальной задачей.

Нужно «разрулить» текущие подключения пользователей, административные подключения, выполнение фоновых задач. И всё это через общение напрямую с кластером 1с.

Сохранение отчётов

Обновлятор сохраняет историю выполнения таких скриптов в менеджере отчётов.

Как в общем виде:

Так и в детальном:

Кстати, вы обратили внимание, что в отчётах скрываются имя и пароль пользователя, под которым выполнялся пакетный запуск конфигуратора? Эта конфиденциальная информация намеренно заменяется на символ звёздочка.

Уведомление на почту

Если у вас настроены уведомления на почту (все или только при ошибках).

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

Читайте также:  Ubuntu linux с нуля 2 е изд волох сергей васильевич

Запуск скрипта по расписанию

Для добавления скрипта в запуск по расписанию следует сохранить сам скрипт:

Далее у нас есть 2 варианта:

Быстрый, но неудобный способ

При сохранении скрипта мы можем установить опцию «Настроить однократный запуск скрипта . «:

И далее уже отредактировать расписание этого задания непосредственно в планировщике Windows.

Чуть более медленный, но самый удобный способ

После того как вы сохранили скрипт (не добавляя его в планировщик Windows) вернитесь в главное окно Обновлятора на закладку «Настройки программы».

Далее нажмите кнопку «Расписание».

И создайте задачу с типом операции «Запуск скрипта»:

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

Облачный мониторинг

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

Многопоточное выполнение скриптов

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

Что ещё полезно изучить перед написанием скриптов?

Ну, конечно же, пакетные команды конфигуратора. Куда же без них.

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

Чтобы увидеть все возможные команды именно для нашей версии 1с — заходим в конфигуратор и выбираем пункт меню «Справка»-«Содержание справки»:

В открывшемся окне нас интересует вот эта ветка:

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

Ну, поехали!

Хватит говорить про скрипты — давайте их писать

Выводим на экран имя базы

Для этого нам понадобится команда echo (именно она отвечает за вывод на экран) и параметр %base_name% (его нам передаёт в скрипт обновлятор).

И запустим наш скрипт над выбранной группой баз:

Пересчитываем итоги

Здесь уже речь идёт о том, чтобы выполнить пакетную команду конфигуратора, которая называется IBCheckAndRepair с ключом RecalcTotals.

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

Вместо этого мы просто напишем:

%run_1c_d% это параметр скрипта, который включает в себя пакетный вызов конфигуратора к текущей базе, для которой выполняется скрипт.

Почему он называется именно run_1c_d? Это сокращение «run 1c designer». Designer означает режим конфигуратора.

Кстати, для более удобного формирования скрипта для тестирования и исправления базы воспользуйтесь соответствующим шаблоном:

Делаем выгрузку базы

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

Читайте также:  Переустановка защитник windows 10

Получается наша команда могла бы быть такой:

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

Именно для этих целей в скрипт передаётся параметр %stamp% — имя файла, уникальное для текущей базы и текущего момента времени.

Эта метка включает в себя имя базы и текущую дату и время.

Чтобы сделать наш скрипт универсальным перепишем его вот так:

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

А я ещё раз напомню вам вот об этом меню:

Открываем базу с запуском внешней обработки

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

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

А затем пишем следующий пакетный скрипт:

Обратите внимание, что здесь уже не идёт речи о пакетном запуске конфигуратора. Здесь мы запускаем 1с в режиме предприятия с ключом Execute, указав для последнего путь к обработке, которую нужно открыть сразу после запуска базы.

За запуск базы в режиме предприятия отвечает параметр run_1c_e. Почему он называется именно так? Это сокращение от «run 1c enterprise». Enterprise означает запуск базы в режиме предприятия (пользовательский режим).

Выполняем регламентные задачи

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

Да, пакетный режим не позволяет, но вот обновлятор это делать умеет и я вынес эту (и некоторые другие) возможности в специальные команды, доступные для выполнения из пакетного скрипта.

Речь идёт вот об этой группе команд:

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

Например, вот так будет выглядеть команда запуска регламентного задания «ЗагрузкаКурсовВалют»:

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

Подробное пояснение по командам, которые начинаются с @

В чём их смысл

Эти команды на самом деле не исполняются командным интерпретатором системы.

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

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

Строгий формат

Такие команды (все они выбираются из меню ‘Обновлятор’-‘Методы’) имеют строгий формат написания, чтобы обновлятор смог их найти и разобрать в общем тексте пакетного скрипта:

  1. Их вызов всегда начинается с новой строки.
  2. Их имя всегда начинается с @
  3. Если у команды есть параметры, то вызов записывается вот в таком формате:
    @имя_команды(
    имя_параметра_1: «значение»,
    имя_параметра_2: «значение»
    )
    Обратите внимание, что:
    — каждый новый параметр написан с новой строки
    — закрывающая список параметров круглая скобка также вынесена на отдельную строку
Читайте также:  Windows server 2012 timezone update
Возможность сочетания с другими командами интепретатора

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

Для обновления БД из шаблонов мы выбираем такой скрипт:

Эта команда будет передана командному интепретатору системы на выполнение.

А для выполнения обработчиков обновления нам придётся воспользоваться специальной командой для обновлятора, которая начинается с @, выбрав её из меню ‘Обновлятор’-‘Методы’:

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

И если мы напишем такой скрипт.

. то не получим ожидаемого поведения. Обновлятор сначала выполнит команду run_update_handlers и только затем передаст командному интерпретатору оставшуюся часть скрипта (%run_1c_d% /UpdateDBCfg).

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

Теперь такая возможность появилась в виде специальной команды, которая выбирается из меню ‘Обновлятор’-‘Методы’-‘Выполнение пакетного скрипта’.

Вот как выглядит эта команда:

При помощи неё мы сможем переписать наш скрипт (для обновления БД и выполнения обработчиков обновления) вот так:

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

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

Как мне придумывать свои скрипты?

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

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

Я написал классный скрипт и хочу поделиться

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

Хотите прислать мне свой скрипт? Прошу вас сюда (ссылка).

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

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Оцените статью