Как сделать фоновое задание 1с

Обновлено: 08.07.2024

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

  • Настроить своевременное допреведение документов;
  • Рассчитать остатки и итоги;
  • Обеспечить периодичность почтовой рассылки;
  • Проверить и удалить неактуальные данные.

Фоновое и регламентное задание – что это и где настраивается

Регламентное задание – заложенный в 1С механизм, который позволяет настроить и, в соответствии с заложенным расписанием и периодичностью, выполнить определенную последовательность действий.

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

Создание регламентного задания происходит в режиме конфигуратора:

  • В окне дерева конфигурации находим соответствующую ветку (Рис.1);
  • Нажимаем кнопку добавить;
  • В открывшемся окне необходимо задать имя, позволяющее идентифицировать объект в конфигурации;

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

Особенности фоновых заданий

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

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

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

Особенности работы в клиент-серверном режиме

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

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

До версии платформы 8.3.3.641 работа с фоновыми заданиями в файловом варианте представляла некоторые трудности:

  1. Необходимо было запускать отдельный сеанс, который бы круглосуточно работал, заменяя собой планировщик;
  2. Этот сеанс должен был периодически выполнять метод ВыполнитьОбработкуЗаданий().

Как отключить регламентные задания

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

Регламентные и фоновые задания в УТ 1С

Регламентные и фоновые задания

Как включить или отключить регламентные и фоновые задания в Управление торговлей 1С

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

Регламентные и фоновые задания в УТ 1С

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

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

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

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

Код

Сообщить ( "Кто-то прямо сейчас уже выполняет загрузку заказов с оптового сайта. Подождите немного и, при необходимости, повторите попытку" ) ;

ФоновыеЗадания . Выполнить ( "Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ЗаданиеОбменССайтом" , МассивПараметров , "7b4c3f46-f88c-4a26-a351-f6fa3273bcba" , "Заказы" ) ;

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

Сообщить ( "Не удалось запустить загрузку заказов с оптового сайта. Сообщите о проблеме разработчику" ) ;

Пояснения к коду

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

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

Сообщить ( "Кто-то прямо сейчас уже выполняет загрузку заказов с оптового сайта. Подождите немного и, при необходимости, повторите попытку" ) ;

Если в массиве не ноль элементов, значит есть активное фоновое задание. Сообщаем об этом пользователю.

Если выполняемых фоновых заданий не нашли, то создаем свое.

В массив параметров надо положить код обмена. Посмотреть его можно в плане обмена битрикса:

КодНастроек обмена с Битрикс 1С

КодНастроек обмена с Битрикс

ФоновыеЗадания . Выполнить ( "Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ЗаданиеОбменССайтом" , МассивПараметров , "7b4c3f46-f88c-4a26-a351-f6fa3273bcba" , "Заказы" ) ;

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

Сообщить ( "Не удалось запустить загрузку заказов с оптового сайта. Сообщите о проблеме разработчику" ) ;

Пробуем запустить фоновое задание. Если получилось — сообщаем пользователю, что все ОК, если нет, то рекомендуем ему обратиться к разработчику.

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

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

Лог обмена с Битрикс 1С

Лог обмена с Битрикс

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

Расположение лога обмена с Битрикс

Расположение лога обмена с Битрикс


Материал представленный ниже будет актуален и применим не только для конфигурации Бухгалтерия 3, но также и для других программных продуктов фирмы 1С таких как, к примеру, Зарплата и Управление Персоналом 3, Управление Торговлей 11 и др.

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

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

Сразу следует отметить, что настройку регламентных и фоновых заданий необходимо производить под пользователем с административными правами. Чтобы увидеть список заданий переходим в раздел программы "Администрирование" и далее выбираем пункт "Обслуживание". В открывшемся окне нас будет интересовать подраздел “Регламентные задания”. В нем кликаем по гиперссылке “Регламентные и фоновые задания”.

Настройка регламентных и фоновых заданий в 1С:Бухгалтерии

Перед нами появится список регламентных заданий. Обратите внимание, сверху формы вы находитесь на одноименной закладке “Регламентные задания”. Также в названии закладки указано общее количество заданий. Зеленая галочка в первой колонке списка означает, что задание активировано и работает по заданному расписанию. Соседняя колонка “Состояние” отображает статус выполнения задания. Последняя колонка – когда задание было выполнено. Настроить расписание можно по кнопке “Настроить расписание” в шапке, предварительно выделив его в списке, либо открыть карточку задания и в ней управлять включено оно или выключено, а также настроить расписание нажав на гиперссылку “Расписание”.

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

Для таких операций разработчики систем 1С рекомендуют использовать Фоновые задания. В последних версиях типовых конфигураций они оформляются окошком с котом.

Обработка длительных операций в фоновом режиме или

Мы рассмотрим вариант, в котором дополнительно выводится прогресс выполнения операций в процентах.

В нашем примере длительная операция запускается нажатием кнопки на форме, поэтому на форме были созданы:

  • сама кнопка,
  • команда, привязанная к этой кнопке,
  • клиентская процедура, запускаемая командой.

ОповещениеОЗавершени и = Новый ОписаниеОповещения ( "ПолучитьПлатежныеОперацииЗавершение" , ЭтотОбъект ) ;

ДлительныеОперацииКлиент . ОжидатьЗавершение ( ДлительнаяОперация , ОповещениеОЗавершении , ПараметрыОжидания ) ;

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

ПараметрыПроцедуры . Вставить ( "_Объект" , новый Структура ( "Период, ОтборПравил, СформированныеДокументы, ИдентификаторФормы" , Объект . Период , Объект . ОтборПравил . Выгрузить ( ) , Объект . СформированныеДокументы . Выгрузить ( ) , УникальныйИдентификатор ) ) ;

Возврат ДлительныеОперации . ВыполнитьФункцию ( УникальныйИдентификатор , ВыполняемыйМетод , ПараметрыПроцедуры ) ;

Данная серверная функция запускает выполнение фонового задания. В этой функции нужно определить:

  • НаименованиеЗадания — текстовое описание выполняемой операции.
  • ВыполняемыйМетод — строка, определяющая функцию, которая будет выполняться в фоновом режиме. В данном случае эта функция находится в модуле менеджера обработки.
  • ПарметрыПроцедуры — переменная с типом Структура, в которую можно записать любые параметры, необходимые для выполнения функции из переменной ВыполняемыйМетод.

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

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

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

Эта процедура имеет два обязательных параметра: Результат и ДополнительныеПараметры. В переменной Результат содержится статус выполнения задания и адрес временного хранилища с самим результатом, возвращенным в нашем случае функцией ПолучитьПлатежныеОперации() из модуля менеджера обработки.

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

Читайте также: