Введение
Всем доброго времени! В текущей статье - новой публикации я рассмотрю основы работы с регламентными заданиями в рамках функционала Библиотеки стандартных подсистем - модуля "Регламентные задания". Тема довольно заезженная, я сам разбирал пару лет назад что-то подобное - модули длительных операций в двух статьях и даже приводил примеры. В данной статье я, как всегда, приведу исключительно практические рабочие примеры - так сказать для "копи-паста" и использования сразу.
Статья будет полезна для программистов, администраторов баз данных, а так же всех пользователей, желающих ознакомиться с возможностями системы 1с - функционирования типовых конфигураций.
Разработка примеров будет вестись на конфигурации Библиотеки стандартных подсистем 3.1.7.34 (далее БСП) на платформе 1С:Предприятие 8.3.19.1264. Так получилось, что все примеры разрабатывались в серверном варианте базы.
Статью не будем делить на части - сразу разберем все основные возможности - создание, изменение, удаление регламентного задания и описание установки расписания для этого задания. Практический раздел назовем так:
Основные возможности библиотеки стандартных подсистем по регламентным операциям
Для начала, я подготовлю пару простых объектов метаданных в моей рабочей конфигурации. Во-первых, я вручную создам пустой шаблон фонового задания с пустым расписанием выполнения. Назову его "МоеРегЗадание" и привяжу к нему метод исполнения из собственного общего (серверного) модуля. Выглядит это вот так:
Рис.1. Создание шаблона фонового задания в конфигурации.
А код модуля исполнения - процедура, которая создает элемент в справочнике "ДемоНоменклатура" в зависимости от тех параметров, которые передаются регламентным заданием:
&НаСервере
Процедура СоздатьНоменклатуру(Наименование, Артикул, ТипНоменклатуры) Экспорт
// заполним по-порядку параметры этой процедуры
// 0 - это наименоваание
// 1 - это артикул
// 2 - это тип номенклатуры
НовЗап = Справочники._ДемоНоменклатура.СоздатьЭлемент();
Если ТипНоменклатуры = "Товар" Тогда // по наименованию чисто для примераа
НовЗап.ВидНоменклатуры = Справочники._ДемоВидыНоменклатуры.НайтиПоНаименованию("Товар");
Иначе
НовЗап.ВидНоменклатуры = Справочники._ДемоВидыНоменклатуры.НайтиПоНаименованию("Услуга");
КонецЕсли;
НовЗап.Наименование = Наименование;
НовЗап.Артикул = Артикул;
НовЗап.Записать();
КонецПроцедуры
Далее, пошагово рассмотрим функционал. Весь функционал, который следует ниже, уже можно размещать в дополнительной обрботке. Пример этой обработки вы можете скачать у меня на на гитхаб. Но, предварительно, я опишу и задам расписание регламентного задания, воспользовавшись РасписаниеРегламентногоЗадания(). Код создания расписания будет вот такой (опишем его в комментариях самого кода):
// я создаю регламентное задание, которое работаеет с 9 до 11 часов утра
// с промежутком 10 секунд
// по дням недели - понедельник, вторник, суббота
// по месяцам - май, июль, август, сентябрь
Расписание = Новый РасписаниеРегламентногоЗадания();
Расписание.ВремяНачала = Дата("01.01.2022 09:00:00");
Расписание.ВремяКонца = Дата("01.01.2022 11:00:00");
Расписание.ПериодПовтораВТечениеДня = 60; // каждые 60 секунд повторять
ДниНедели = Новый Массив(); // понедельник, вторник, суббота
ДниНедели.Добавить(1);
ДниНедели.Добавить(2);
ДниНедели.Добавить(6);
Расписание.ДниНедели = ДниНедели;
Месяцы = Новый Массив(); // май, июль, август, декабрь, сентябрь
Месяцы.Добавить(5);
Месяцы.Добавить(7);
Месяцы.Добавить(8);
Месяцы.Добавить(12);
Месяцы.Добавить(9);
Расписание.Месяцы = Месяцы;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодНедель = 1;
Вот так настройки этого расписания будут выглядеть визуально на форме
Рис.2. Получились настройки расписания (каждый день, по дням недели [понедельник, вторник, суббота], по месяцам [Июль, Август, Сентябрь, Декабрь]; с 9:00:00 по 11:00:00 каждые 60 секунд).
Сейчас, используя созданный ранее шаблон регламентного задания и мое расписание, программно создам (с помощью возможностей БСП) рабочий экземпляр фонового задания. Для этого напишу вот такой код:
&НаСервере
Функция СоздатьРасписаниеФоновогоЗадания()
Расписание = Новый РасписаниеРегламентногоЗадания();
Расписание.ВремяНачала = Дата("01.01.2022 09:00:00");
Расписание.ВремяКонца = Дата("01.01.2022 11:00:00");
Расписание.ПериодПовтораВТечениеДня = 60; // каждые 60 секунд повторять
ДниНедели = Новый Массив(); // понедельник, вторник, суббота
ДниНедели.Добавить(1);
ДниНедели.Добавить(2);
ДниНедели.Добавить(6);
Расписание.ДниНедели = ДниНедели;
Месяцы = Новый Массив(); // май, июль, август, декабрь, сентябрь
Месяцы.Добавить(5);
Месяцы.Добавить(7);
Месяцы.Добавить(8);
Месяцы.Добавить(12);
Месяцы.Добавить(9);
Расписание.Месяцы = Месяцы;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодНедель = 1;
Возврат Расписание;
КонецФункции
&НаСервере
Процедура СоздатьРегламентноеЗадание()
// конструктор параметров задания
ПараметрыЗадания = Новый Структура;
// обращение метаданным конфигурации
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.МоеРегЗадание);
// потребуется, чтобы передать в выполняемую функцию
МассивПараметров = Новый Массив();
МассивПараметров.Добавить("Тестовое наименование 1 "+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy")); // Наименование
МассивПараметров.Добавить("Арт " +Формат(ТекущаяДата(),"ДЛФ=T")); // артикул
МассивПараметров.Добавить("Услуга"); // если не товар, то услуга
ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
ПараметрыЗадания.Вставить("Расписание", СоздатьРасписаниеФоновогоЗадания());
ПараметрыЗадания.Вставить("Наименование", "Тест Создание номенклатуры");
ПараметрыЗадания.Вставить("Ключ", "КлючПоСозданиюНоменклатуры"); // например, по нему будем искать
ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 60);
ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1);
ПараметрыЗадания.Вставить("Использование", Истина);
НовРег = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
Сообщить(НовРег.УникальныйИдентификатор);
КонецПроцедуры
В списке регламентных заданий, у нас появился наш экземпляр с заданным ключом и расписанием запуска.
Рис.3. Создали регламентное задание программно.
Далее, рассмотрим поиск и удаление этого регламентного задания.
Получить регламентное задание можно вот таким кодом:
&НаСервере
Процедура ПолучитьРегЗадание()
// гуид, например, я записал при его создании
РегЗадание = РегламентныеЗаданияСервер.Задание("f8964eb2-6ca9-4255-8632-d4e927ac6b14");
КонецПроцедуры
Отладчиком смотрю, что содержит данное задание (что выполняется, какие параметры)
Рис.4.Содержание полученного регламентного задания по ГУИД.
Чтобы изменить задание, я воспользуюсь вот таким кодом:
&НаСервере
Функция СоздатьРасписаниеФоновогоЗадания()
Расписание = Новый РасписаниеРегламентногоЗадания();
Расписание.ВремяНачала = Дата("01.01.2022 09:00:00");
Расписание.ВремяКонца = Дата("01.01.2022 11:00:00");
Расписание.ПериодПовтораВТечениеДня = 10; // каждые 10 секунд повторять
ДниНедели = Новый Массив(); // понедельник
ДниНедели.Добавить(1);
Расписание.ДниНедели = ДниНедели;
Месяцы = Новый Массив(); // май, июль
Месяцы.Добавить(5);
Месяцы.Добавить(7);
Расписание.Месяцы = Месяцы;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодНедель = 1;
Возврат Расписание;
КонецФункции
&НаСервере
Процедура ИзменитьРеегламентноеЗадание()
// конструктор параметров задания
ПараметрыЗадания = Новый Структура;
// обращение метаданным конфигурации
ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.МоеРегЗадание);
// потребуется, чтобы передать в выполняемую функцию
МассивПараметров = Новый Массив();
МассивПараметров.Добавить("Новое наименование "+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy")); // Наименование
МассивПараметров.Добавить("Артикул" +Формат(ТекущаяДата(),"ДЛФ=T")); // артикул
МассивПараметров.Добавить("Товар"); // если не товар, то услуга
ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
ПараметрыЗадания.Вставить("Расписание", СоздатьРасписаниеФоновогоЗадания());
ПараметрыЗадания.Вставить("Наименование", "Новая номенклатуры");
ПараметрыЗадания.Вставить("Ключ", "КлючПоСозданиюНоменклатуры"); // например, по нему будем искать
ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении", 60);
ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1);
ПараметрыЗадания.Вставить("Использование", Истина);
РегламентныеЗаданияСервер.ИзменитьЗадание("f8964eb2-6ca9-4255-8632-d4e927ac6b14",ПараметрыЗадания);
КонецПроцедуры
Чтобы удалить - код вот такой:
&НаСервере
Процедура ИзменитьРеегламентноеЗадание()
РегламентныеЗаданияСервер.УдалитьЗадание("f8964eb2-6ca9-4255-8632-d4e927ac6b14");
КонецПроцедуры
Итак, основные возможности работы с регламентными заданиями посмотрели - создание, получение, изменение и удаление. Теперь перейдём к заключению материала и сделаем небольшие выводы.
Заключение и выводы
В статье был рассмотрен основной базовый функционал модулей "Регламентные задания" БСП - это создание, поиск, изменение параметров и удаление для применении в современных типовых конфигурациях. Все процедуры и функции готовы - ничего не нужно придумывать - только правильно используйте. Практическое развитие данных возможностей стандартных подсистем оставляю на ваше усмотрение.
Небольшие рабочие примеры по последним моим статьям вы всегда можете скачать на моем гит-хабе https://github.com/quazareline
Для выхода новых статей и дальнейшего развития материалов практического использования библиотеки стандартных подсистем в современных типовых конфигурациях, вы можете подписаться на данный профиль этого ресурса Инфостарт, а так же другие мои профессиональные профили и каналы.
Прошу так же обратить внимание на другие мои актуальные материалы по существующим возможностям функционала библиотеки стандартных подсистем - разным модулям и подсистемам. Данные статьи так же пригодятся вам на практике.
Актуальные материалы для применения функционала библиотеки стандартных подсистем
Шаблоны сообщений пользователю - подсистема БСП
Базовые приемы работы с кластером 1С при помощи БСП
Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП
Печать макета MS Word в любом документе с помощью БСП
Генерация штрихкодов с помощью БСП для программистов
Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки
Все предложения, уточнения и благодарности принимаются в личку этого профиля. Всем спасибо и до новых встреч!