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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Напутствие

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

Фоновые задания в «1С» могут запускаться автоматически по расписанию (т.е. являться экземплярами регламентных заданий), или разработчик сам может инициировать запуск фонового задания для выполнения произвольного алгоритма (яркий пример формирование отчетов в фоне).
ВАЖНО!!! Для файловых баз, начиная с версии платформы 8.3.3.641, не требуется запуск отдельного сеанса, в котором будут выполняться фоновые задания. Т.е. раньше в файловых базах для запуска фоновых заданий требовалось выполнять метод глобального контекста «ВыполнитьОбработкуЗаданий()» . Подробности по этой ссылке .

Процедура запуска произвольного алгоритма в фоновом задании

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

Процедура выполнения фонового задания

В нашем случае мы будем использовать экспортную процедуру расположенную в общем модуле «ОбщийМодульСервер» (думаю излишне пояснять что модуль должен быть серверным) Процедура ЗаписатьИнформациюОТоварахВФоне(ПараметрФоновогоЗадания) Экспорт ЗапросДанных = Новый Запрос("ВЫБРАТЬ | Товары.Ссылка КАК Номенклатура |ИЗ | Справочник.Номенклатура КАК Товары"); Выборка = ЗапросДанных.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл МЗ = РегистрыСведений.ДанныеОТоварах.СоздатьМенеджерЗаписи(); МЗ.Период = ТекущаяДата(); МЗ.Номенклатура = Выборка.Номенклатура; МЗ.Информация = ПараметрФоновогоЗадания; МЗ.Записать(); КонецЦикла; КонецПроцедуры В целях демонстрации работы фонового задания, мы будем формировать записи в нашем регистре сведений, для каждой номенклатуры, при этом параметр будет передаваться из формы в которой происходит запуск фонового задания.

Команда запуска фонового задания

Параметр который будем передавать в процедуру выполнения, будем брать из реквизита управляемой формы (реквизит с типом «Строка»):

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

Результат выполнения

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

КонецЦикла ;

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


1С фоновое задание имеет некоторые ограничения. Поскольку оно выполняется на стороне сервера, то нет возможности интерактивной работы с пользователем. К примеру нельзя вывести сообщение, ну и вообще какую-то информацию. Все эти данные нужно сохранять в рамках информационной базы и дальше каким-то образом обрабатывать.
Обратившись к синтакс-помощнику можно получить более детальные сведения о фоновых заданиях 1С. Здесь следует отметить, что это объект исключительно программный и он никак не сохраняется в базе данных. То есть мы создаем экземпляр класса, инициализируем свойства и запускаем его на выполнение.

Какие же средства мы имеем для управления фоновыми заданиями? Этим средством является объект метаданных"МенеджерФоновыхЗадания" . У этого объекта есть метод "Выполнить" , с помощью этого метода, как раз и запускается фоновое задание.

Имеет он следующие параметры:
"ИмяМетода" - имя процедуры или функции, которую нужно выполнить, причем это должна быть процедура или функция серверного контекста;

"Параметры" - массив параметров, количество элементов которого должно соответствовать количеству параметров нашей процедуры/функции, указанной в параметре "ИмяМетода" ;

"Ключ" - некий ключ уникальности, представляющий из себя строчку, по которой система понимает нужно ли запускать фоновое задание либо такое задание уже запущено;

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

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

Фоновое задание 1С 8.2, 8.3 - Пример использования

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

Для этого:

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


2. Опишем в нем экспортную процедуру "ПроизветиФоновоеВычисление(Параметр)" , которая принимает один параметр строкового типа;

Процедура ПроизветиФоновоеВычисление(Параметр) Экспорт ВремНач = ТекущаяДата() ; Пока ТекущаяДата() - ВремяНач < = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("Какой-то параметр" ) ; КонецПроцедуры
Готово. Теперь при запуске обработки и нажатии на кнопку происходит подвисание системы на несколько секунд, в процессе которого ничего нельзя сделать. Это как раз то, что нам и нужно было сделать.

Теперь обеспечим произведение этих вычислений в фоне, то есть чтобы фоновое задание 1С 8.2, 8.3 выполнялось, но нам не мешало.

Для этого:

1. В обработке, в событии нажатия кнопки пропишем следующий код.

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

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







2024 © uzbek-seks.ru.