Регламентные и фоновые задания. Регламентные и фоновые задания Расписание регламентных заданий 1с


В данной статье приведен пример работы с фоновыми заданиями, как в 1С производится запуск фоновых заданий , каким образом можно получить список заданий при помощи метода "ПолучитьФоновыеЗадания()" . Итак, данный метод возвращает нам некоторый массив. Посмотрим что же он содержит.

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

На рисунке представленном выше видно содержимое данного массива.

Обратите внимание на поле "Состояние" . Оно содержит информацию о том, успешно ли было выполнено запущенное фоновое задание или же оно еще выполняется.

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

Пример работы с фоновым заданием 1C - Метод "ПолучитьФоновыеЗадания"

Давайте также рассмотрим работу с фоновыми заданиями на примере метода "ПолучитьФоновыеЗадания()" . В данном методе есть возможность установить отбор на получаемые записи. То есть в качестве параметра метода нам нужно передать структуру.

Структура может содержать поля: Уникальный идентификатор, Ключ, Состояние, Начало, Конец, Наименование, ИмяМетода, РегламентноеЗадание .

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


Для реализации примера сделаем следующее:
1. Создадим общий модуль "ОбработчикиФоновыхЗаданий" , выполняемый на сервере.

И добавим в него следующий код:

Процедура ПроизвестиФоновоеВычисление(Параметр) Экспорт

ВремНач = ТекущаяДата() ;

Пока ТекущаяДата() - ВремНач Цикл

КонецЦикла ;

КонецПроцедуры

2. Создадим обработку, разместим на форме кнопку "Выполнить задание в фоне" и в процедуре обработки события нажатия на кнопку добавим код:

&НаКлиенте Процедура ВыполнитьЗадание(Команда) ВыполнитьФоновоеЗаданиеНаСервере() ; КонецПроцедуры

Описание вызываемой процедуры:

&НаСервере Процедура ВыполнитьФоновоеЗаданиеНаСервере() ПараметрыФоновогоЗадания = Новый Массив; ПараметрыФоновогоЗадания. Добавить("Какой-то параметр" "Тестовое задание" ) ; ПараметрыФоновогоЗадания = Новый Массив; ПараметрыФоновогоЗадания. Добавить("Какой-то параметр" ) ; ФоновыеЗадания. Выполнить ("ОбработчикиФоновыхЗаданий.ПроизвестиФоновоеВычисление" , ПараметрыФоновогоЗадания, Новый УникальныйИдентификатор, "Тестовое задание 2" ) ; КонецПроцедуры // ВыполнитьФоновоеЗаданиеНаСервере()

Теперь запустим 1С в режиме предприятия и запустим выполнение фонового задания.


Готово. Этими действиями мы добились того, что в нашей демонстрационной базе появились записи о выполнении фоновых заданий 1С и теперь можно продемонстрировать пример получения их массива, содержащегося в нашей базе.

Добавим на форму еще одну кнопку "Получить фоновые задания" . Напишем в процедуре обработки нажания следующий код:

&НаКлиенте Процедура ПолучитьФоновыеЗадания(Команда) ПолучитьФоновыеЗаданияНаСервере() ; КонецПроцедуры

Текст процедуры на сервере:

&НаСервере Процедура ПолучитьФоновыеЗаданияНаСервере() ПараметрыОтбора = Новый Структура("Наименование" , "Тестовое задание 2" ) ; СписокФоновыхЗаданий = ФоновыеЗадания. ПолучитьФоновыеЗадания(ПараметрыОтбора) ; Для каждого Задание Из СписокФоновыхЗаданий Цикл Сообщить(Задание. Наименование) ; КонецЦикла ; КонецПроцедуры // ПолучитьФоновыеЗаданияНаСервере()

Запустим 1С на выполнение и нажмем кнопку "Получить фоновые задания" .

Концепция асинхронного программирования

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

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

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

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

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

Фоновые задания в «1С:Предприятие 8»

В «1С:Предприятие 8» фоновые задания предназначены для выполнения прикладных задач асинхронно. Они могут порождать дочерние фоновые задания, например, для распараллеливания сложных вычислений по различным рабочим серверам кластера в клиент-серверном варианте работы.

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

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

Клиент-серверный вариант

В клиент-серверном варианте планированием выполнения заданий занимается планировщик заданий, который физически располагается в менеджере кластера.

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

Файловый вариант

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

Раньше для автоматического выполнения заданий требовалось запускать отдельный, дополнительный сеанс «1С:Предприятия», используемый в качестве планировщика заданий. И в этом сеансе нужно было периодически выполнять метод встроенного языка ВыполнитьОбработкуЗаданий(). Такой подход был довольно громоздким, неудобным и сильно ограничивал использование фоновых и регламентных заданий в файловом варианте работы.

Теперь всё стало гораздо проще. Если стартует тонкий или толстый клиент, а также если у веб-сервера есть клиентские соединения, то в каждом из этих приложений автоматически запускается еще один поток с подключением к базе данных. Эти потоки занимаются тем, что выполняют фоновые и регламентные задания.

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

Очевидный минус 1С фоновых заданий : поскольку они выполняются на стороне сервера, то нет возможности интерактивной работы с пользователем (к примеру, нельзя вывести сообщение или какую-нибудь другую информацию; все эти данные нужно сохранять в рамках информационной базы и дальше каким-то образом обрабатывать).

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

Пример асинхронного выполнения кода в «1С:Предприятие 8»

«Писать программы, в которых результат вызова функции приходит неизвестно когда - куда сложнее, чем обычные. Вложенные вызовы, обработка ошибок, контроль над происходящим - все усложняется», - так скажут только те, кто не умеет правильно пользоваться возможностями платформы, но не мы!

Продемонстрируем всю простоту и изящество асинхронного выполнения кода в «1С:Предприятие 8»!

Шаг 1. Создадим новую ИБ для разработки конфигурации

Шаг 2. В конфигурации добавим общий модуль «АсинхронныеОбработчики»

Почему мы добавили общий модуль? Тут все просто: для выполнения асинхронных операций в «1С:Предприяте 8» применяются фоновые задания, у которых имеется свой менеджер - «МенеджерФоновыхЗадания». У этого объекта есть метод «Выполнить», с помощью которого как раз и запускается фоновое задание.

Обратимся к синтакс-помощнику.

Таким образом, нам понадобится общий модуль.

Шаг 3. В общем модуле «АиснхронныеОбработчики» добавим экспортную процедуру НашаДлительнаяОперация()

Процедура НашаДлительнаяОперация(Длительность) Экспорт // Имитация продолжительного действия (Длительность сек.). ДатаНачалаОперации = ТекущаяДата(); Пока ТекущаяДата() - ДатаНачалаОперации < Длительность Цикл КонецЦикла; КонецПроцедуры

Шаг 4. Добавляем в конфигурацию обработку «АсинхроннаяКонцепцияПрограммирования» (можно создать внешнюю обработку)

На форму добавляем один реквизит:

Длительность (Число)

и две команды

ВыполнитьДлительнуюОперацию;

ВыполнитьДлительнуюОперациюАсинхронно.

Шаг 5. Согласно синтакс-помощнику заполняем модуль формы

&НаКлиенте Процедура ВыполнитьДлительнуюОперацию(Команда) ВыполнитьДлительнуюОперациюНаСервере(); КонецПроцедуры &НаСервере Процедура ВыполнитьДлительнуюОперациюНаСервере() АсинхронныеОбработчики.НашаДлительнаяОперация(Длительность); КонецПроцедуры &НаКлиенте Процедура ВыполнитьДлительнуюОперациюАсинхронно(Команда) ВыполнитьДлительнуюОперациюАсинхронноНаСервере(); КонецПроцедуры &НаСервере Процедура ВыполнитьДлительнуюОперациюАсинхронноНаСервере() Параметры = Новый Массив; Параметры.Добавить(Длительность); ФоновыеЗадания.Выполнить("АсинхронныеОбработчики.НашаДлительнаяОперация", Параметры, Новый УникальныйИдентификатор, "Пример асинхронной концепции программирования"); КонецПроцедуры

Шаг 6. Запускаем и проверяем!

Результат:

Если мы нажимаем на кнопку «Выполнить длительную операцию», то пользовательский интерфейс на «Длительность» секунд блокируется;

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

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

Отладить программный код, который выполняется в «фоне» мы можем, если в параметрах отладки установим соответствующее свойство.

Пример асинхронного выполнения кода в «1С:Предприятие 8» с использование БСП

Пример реализации асинхронной концепции программирования в «1С:Предприятие 8» в БСП рассмотрим на примере обработки «Текущие дела».

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

Проанализируем программный код формы.

Событие формы «ПриСозданииНаСервере» вызывает процедуру «ЗапуститьФоновоеЗадание» - это то, что нам и нужно.

Не отвлекаясь на нюансы, анализируем данную процедуру

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

Для этого разработчики применяют метод ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>).



В подключаемой процедуре Подключаемый_ПроверитьВыполнениеЗадания() разработчики вызывают функцию ЗаданиеВыполнено(ИдентификаторЗадания)


Данная функция по идентификатору проверяет выполнения фонового задания.

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

Таким образом, асинхронная концепция программирования в «1С:Предприятие 8» незначительно увеличивает трудоемкость решения задач для разработчика, но заметно улучшает функциональность программы с точки зрения пользователя.

Управление регламентными заданиями баз 1С из обновлятора

2018-11-20T15:18:30+00:00

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

Прежде всего в пункте "Ещё" -> "Управление регламентными заданиями...":

В контекстном меню выделенной базы (или группы баз):

И, наконец, в шаблонах для пакетных скриптов (это позволяет выполнять операции над регламентными заданиями из скрипта по расписанию):

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

Какие задачи он позволяет решать в нужной группе баз (или одной базе)?

Выбор регламентных заданий

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

Но в диалоге выбора может не быть регламентных заданий именно для вашей базы:

В этом случае вы можете указать имена нужных вам регламентных заданий в разделе "Свои задания...", например, так:

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

Выводим текущее состояние заданий

Для этого переходим на закладку "Вывести" нажимаем кнопку "Вывести...":

В результатах мы можем видеть:

  1. Включен или выключен запуск новых регламентных заданий на сервере 1С.
  2. Список регламентных заданий в базе.
  3. Их расписание.
  4. Включены задания или выключены.
  5. Если последний запуск задания был с ошибкой - эта ошибка выводится красным цветом рядом с заданием.

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

Выключаем все или некоторые задания

Для этого переходим на закладку "Выключить":

Для всех или выбранных регламентных заданий будет снят флажок "Использование".

Вот результат для одной базы (нажмите, чтобы раскрыть)

Включаем все или некоторые задания

Для этого переходим на закладку "Включить":

Для всех или выбранных регламентных заданий будет установлен флажок "Использование".

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

Вот результат для одной базы (нажмите, чтобы раскрыть)

Управляем запуском регламентных заданий на сервере 1С

Для этого переходим на закладку "Сервер 1С":

Выбираем "блокировать" или "разблокировать" и нажимаем кнопку "Выполнить".

Настраиваем расписание заданий

А что если нам нужно настроить расписание запуска какого-нибудь задания (или группы заданий) сразу во многих базах?

Для этого переходим на закладку "Настроить расписание":

Настраиваем расписание (диалог и его возможности полностью совпадают с штатным в самой 1С) и нажимаем "Настроить...".

Запускаем задания на выполнение

Для этого переходим на закладку "Запустить":

Выбираем нужные задания и нажимаем кнопку "Запустить":

Сохраняем настройки заданий во внешний файл

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

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

Восстанавливаем настройки заданий из внешнего файла

А затем загружаем этот файл с настройками заданий во все остальные базы:

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

Напутствие

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

Как ускорить работу в 1С:Бухгалтерия 8.3 (редакция 3.0) или отключаем регламентные и фоновые задания

2019-01-15T13:28:19+00:00

Те из вас, кто уже успел перейти на новую редакцию 1С:Бухгалтерия 8.3 (редакция 3.0) успели заметить, что работать она стала медленнее, чем двойка. Какие-то непонятные подтормаживания, бесконечные фоновые задачи по нескольку раз в день, которые её никто не просил выполнять без нашего ведома.

Мне мои бухгалтеры сразу после перехода так и заявили, что новая редакция 1С:Бухгалтерия 3.0 в сравнении с предыдущими откровенно тормозит! И работать просто невозможно.

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

Ну, например, зачем нам по сто раз в день запускать задачу "Извлечение текста", если мы не осуществляем полнотекстовый (бухгалтеры, не пугайтесь) поиск по всем объектам нашей базы.

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

То же касается и постоянной попытки 1С подключиться к сайту и проверить и обновить классификаторы банков. Зачем? Я и сам нажму кнопку обновить классификаторы, если не найду нужного банка по его БИК.

О том как это сделать по пунктам ниже.

1. Зайдите в раздел "Администрирование" и в панели действий выберите пункт "Обслуживание" ():

2. В открывшемся окне найдите и выберите пункт "Регламентные и фоновые задания":

3. Откройте каждое задание, у которого в колонке "Вкл." стоит галка.

4. Снимите отметку с пункта "Включено" и нажмите кнопку "Записать и закрыть".

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

При этом некоторые из отключенных вами регламентных заданий платформа всё-равно включит обратно.

Наверное, ни одна серьезная конфигурация на 1С 8.3 или 8.2 не обойдется без использования регламентных и фоновых заданий. Они очень удобны, так как по четко заданному расписанию будут выполняться без вмешательства пользователя и программиста.

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

Для начала разберемся, что же они обозначают и в чем их отличие:

  • Регламентное задание позволяет запускать на выполнение какие-либо конкретные действия по заранее настроенному расписанию.
  • Фоновое задание – это объект, в котором содержатся выполняемые действия.

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

Откройте конфигурацию и добавьте регламентное задание.

Настройка свойств

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

  • В поле «Имя метода » выбирается та процедура какого-то определенного общего модуля, которая будет непосредственно выполняться. В ней будут указаны все действия по выгрузке цен на наш сайт. Обратите внимания, что выполнение будет происходить на сервере. Это логично, ведь регламентные операции выполняются без участия пользователя.
  • Регламентное задание можно отключать или включать по необходимости. Не нужно каждый раз править его расписание. Для этого в палитре свойств установите или снимите флаг «Использование ».
  • Еще одной немаловажной является настройка, будет ли являться данное регламентное задание предопределенным , или нет. Предопределенные регламентные задания запускаются автоматически. Если данный признак не установлен, то вам будет нужно запускать их программно, либо воспользоваться обработкой «Консоль заданий» с ИТС.
  • Так же вы можете указать количество повторов и интервал между ними при аварийном завершении. Под аварийным завершением подразумеваются те ситуации, когда задания не отработали по причине возникновения ошибки.

Настройка расписания

Завершающим шагом мы настроим расписание нашей выгрузки на сайт по соответствующей гиперссылке в палитре свойств.

Перед вами откроется типовая настройка расписания в 1С 8.3. Здесь нет ничего сложного. В рамках данного примера мы настроили запуск нашей выгрузки цен на сайт ежедневно с пяти до семи утра. В том случае, если регламентное задание не успеет отработать до 7:00, оно будет выполнено уже на следующий день.

Блокировка регламентных заданий

Запустите стандартную утилиту «Администрирование серверов 1С Предприятия» и откройте свойства той информационной базы, где вы создали регламентное задание (для клиент-серверных версий 1С).

В открывшемся окне (после ввода логина и пароля для доступа к ИБ) проверьте, чтобы не был установлен флаг на пункте «Блокировка регламентных заданий включена». Если вы столкнулись ситуацией, когда задание не отрабатывает, первым делом проверяйте эту настройку.

Таким же образом можно полностью отключить регламентные задания в 1С 8.3. Для отключения конкретных фоновых заданий можно воспользоваться встроенной в последние релизы обработкой «Консоль фоновых заданий».

Фоновые и регламентные задания в файловом режиме

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

Активация регламентных заданий в данном случае производится при использовании метода «ВыполнитьОбработкуЗаданий()».

Так же вы можете воспользоваться следующей конструкцией:

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

Отслеживание ошибок в фоновых заданиях

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

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







2024 © uzbek-seks.ru.