gifts2017

Управление регламентом

Опубликовал Андрей Калякин (kalyaka) в раздел Отраслевые решения - Прочее

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

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

Введение

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

Все перечисленные выше задачи требовали программирования. Несмотря на разнообразие задач, их объединяет одно – это задачи, которые выполняются по расписанию.

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

Примеры задач использования подсистемы:

  • ·         Загрузка валют
  • ·         Обновление справочника банков
  • ·         Обновление границы запрета редактирования в режиме пользователя
  • ·         Подключение обработок на событие при начале работы системы: поздравление именинников, оповещение начальников кадровых служб о предстоящих днях рождения сотрудников, ограничение доступа группы сотрудников в определенные дни и часы, проведение анкетирования при входе в систему (разовые акции)
  • ·         Снятие резервов товаров на складах
  • ·         Формирование отчетов (например, ночью)
  • ·         Рассылка отчетов
  • ·         Проверка почты и загрузка информации
  • ·         Восстановление последовательности документов
  • ·         Ограничение работы определенного списка пользователей по времени
  • ·         Осуществление обмена между системами (для 1С8 имеется в виду обмен без использования типовой подсистемы обмена данными)

Описание подсистемы «Управление регламентом» для 1С8.2

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

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

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

Работа с подсистемой

Создание регламента

Создание регламента производится через ввод элемента справочника «Регламентные обработки». Создадим для примера регламентную обработку в сеансе пользователя. Назначение регламентной обработки – обновлять границу запрета изменения данных в сеансе пользователя через каждые 15 минут. Для этого нам потребуется следующая последовательность действий:

1.       Ввести новый элемент справочника Регламентные обработки

2.       На элементе формы выбрать реквизит Обработка и открыть список выбора из справочника Внешние обработки

3.       Добавить в справочник Внешние обработки Произвольный алгоритм. Текст произвольного алгоритма:

ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();

4.       Записать произвольный алгоритм во внешние обработки и завершить выбор

5.       Указать признак «Действует в сеансе пользователя» и настроить расписание

6.       В отрывшемся диалоге настройки расписания указать все дни недели, признак Периодичность и период – 900 секунд

7.       Закрыть настройку расписания и сохранить регламент по кнопке ОК

 

 

Рисунок 1. Ввод регламента

 

 

Рисунок 2. Выбор регламентной обработки из внешних обработок

 

Рисунок 3. Ввод произвольного алгоритма

 

 

Рисунок 4. Справочник Регламенты выполнения обработок

Параметры произвольного алгоритма

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

 

Текст = Новый ЗаписьТекста("c:\test.txt");
Текст.ЗаписатьСтроку(ТекущаяДата());

Для Каждого
ЭлементСписка Из Параметры Цикл
   
Текст.ЗаписатьСтроку(ЭлементСписка.Значение);
КонецЦикла;

Текст.Закрыть();

Далее сделаем настройку параметров. В качестве параметров выберем Список значений и зададим, к примеру, список организаций.

Для проверки работы регламента сохраним регламент. В списке регламентных обработок нажмем кнопку «Выполнить». В текстовом файле c:\test.txt должен появиться список параметров.

Тот же алгоритм мы можем применить для выполнения как в сеансе пользователя, так и фоновом задании на сервере. Результатом выполнения алгоритма будет создание файла c:\test.txt либо на компьютере пользователя, либо на сервере 1С – в зависимости от того, какое расписание было задано для выполнения регламентной обработки.

 

Рисунок 5. Редактирование параметров произвольного алгоритма

 

Настройка обработки

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

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

Требования к обработке для выполнения в регламенте

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

В обработке должен быть реквизит «СохраненнаяНастройка» произвольного типа.

В модуле обработке должны быть объявлены экспортные процедуры:

  • ·         СохранитьНастройку
  • ·         ПрименитьНастройку
  • ·         ВыполнитьОбработку

 

Процедура СохранитьНастройку() Экспорт
   
Параметры = Новый Структура;
   
//  Сохранение реквизитов обработки
   
Для каждого Реквизит Из ЭтотОбъект.Метаданные().Реквизиты Цикл
       
//Сообщить("Имя:"+Реквизит.Имя+", значение:"+Строка(ЭтотОбъект[Реквизит.Имя]));
       
Параметры.Вставить(Реквизит.Имя, ЭтотОбъект[Реквизит.Имя]);
    КонецЦикла;
   
СохраненнаяНастройка = Новый ХранилищеЗначения(Параметры);
КонецПроцедуры

Процедура
ПрименитьНастройку() Экспорт
    Попытка
       
Параметры = СохраненнаяНастройка.Получить();
       
//  Восстановление сохраненных реквизитов обработки
       
Для каждого Реквизит Из ЭтотОбъект.Метаданные().Реквизиты Цикл
           
//Сообщить("Имя:"+Реквизит.Имя+", значение:"+Строка(ЭтотОбъект[Реквизит.Имя]));
           
Параметры.Свойство(Реквизит.Имя, ЭтотОбъект[Реквизит.Имя]);
        КонецЦикла;
    Исключение
    КонецПопытки;
КонецПроцедуры

Процедура
ВыполнитьОбработку() Экспорт

   
ЗаписьЖурналаРегистрации("РегламентнаяОбработка",
                               
УровеньЖурналаРегистрации.Информация, , ,
                               
"Выполнение по организации:"+Строка(Организация));


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

 

Редактирование расписания

Как было указано ранее для выполнения регламента можно задать расписание выполнения в сеансе пользователя или в фоновом задании на сервере 1С. Для настройки расписания в сеансе пользователя нужно нажать кнопку «Дополнительные настройки расписания…» в разделе «Работа в сеансе пользователя».

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

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

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

 

Рисунок 6. Расписание регламента в сеансе пользователя

 

Регламентные задания сеанса пользователя

Регламентные задания сеанса пользователя хранятся в регистре сведений «Регламентные задания». Основное назначение регистра – создание плана выполнения регламента.

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

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

 

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

Состав подсистемы

Метаданные

Вид

Общие модули

УправлениеРегламентом

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

РегламентнаяОбработка

Перечисления

ВидыДополнительныхВнешнихОбработок (добавлен вид «Произвольный алгоритм»)

СобытияРегламентногоВыполнения

СостоянияВыполненияРегламента

Справочники

ВнешниеОбработки (добавлен вид «Произвольный алгоритм»)

РегламентыВыполненияОбработок

Регистры сведений

РегламентныеЗадания

Процедуры модуля приложения

ПриНачалеРаботыСистемы

ПриЗавершенииРаботыСистемы

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Всей файлы одним архивом
.zip 409,62Kb
27.12.11
223
.zip 409,62Kb 223 Скачать
Описание подсистемы Управление регламентом
.docx 167,24Kb
27.12.11
11
.docx 167,24Kb 11 Скачать
Установка подсистемы Управление регламентом
.docx 107,67Kb
27.12.11
9
.docx 107,67Kb 9 Скачать
УправлениеРегламентом.cf
.cf 177,15Kb
27.12.11
14
.cf 177,15Kb 14 Скачать
Пример внешней обработки
.epf 7,10Kb
27.12.11
14
.epf 7,10Kb 14 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Андрей Калякин (kalyaka) 26.12.11 13:59
У вас есть ряд задач требующих автоматического выполнения по расписанию? Это может быть: ежедневная загрузка валют, списание просроченных резервов, рассылка прайсов и т.д.

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



Перейти к публикации

1. Alex Misanets (Misanets) 26.12.11 13:59
Что ж, интересно, будем смотреть. А вот файлы можно было-бы и архивом выложить.
2. Алексей Захаров (almas) 29.12.11 09:17
Спасиб. Мне как раз в тему идет. Сейчас задумался об добавлении в свою конфу чего-то подобного.
3. Александр Овсянников (_LEV_) 29.12.11 11:12
Спасибо. Думаю Ваша работа будет востребована.
4. Dima Цвик (D_Rostov) 09.01.12 16:38
С помощью этого дополнения можно настроить в 1С 8.2 еженедельную отправку прайса покупателям?
5. Андрей Калякин (kalyaka) 10.01.12 08:34
(4) D_Rostov, конечно можно! Нужно для этого указать расписание, например, запускать регламентную обработку каждый понедельник в 7:00. В регламентной обработке должны быть объявлены экспортные процедуры: СохранитьНастройку, ПрименитьНастройку, ВыполнитьОбработку. В процедуре ВыполнитьОбработку нужно реализовать сам алгоритм формирования и отправки прайса (можно разделить обработки, одну реализовать для формирования и сохранения прайса, а другую для рассылки - это уже на Ваше усмотрение).
6. Saili 20.01.12 10:12
Спасибо. Актуально. В 1С действительно есть подсистема автоматического обмена данными, но предлагаемый подход к задачам, требующим выполнения по расписанию, более универсален.
7. Евгений Юпринский (Evgeny2009) 11.02.12 12:00
После слияния конфигурации и запуске пользователя выдаёт
{ОбщийМодуль.УправлениеРегламентом.Модуль(374)}: Ошибка при получении значения атрибута контекста (ТекущийПользователь)
ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеанса

В чём может быть причина?
1С:Предприятие 8.2 (8.2.15.294)
КА 1.1.18.1
8. Евгений Юпринский (Evgeny2009) 11.02.12 12:32
Кажеться умну руки из уха... )) обьеденил криво
11. Программулькин (Программулькин) 21.05.12 09:39
12. Влад (Vsaray) 11.09.12 17:22
Без атрибута "Ложь" в ВнешнаяяОбработка = ВнешниеОбработки.Создать(ИмяФайла,Ложь) включался безопасный режим на 8.2.15.310. Остальным весьма доволен.
13. Александр Лыткин (TrinitronOTV) 19.12.12 06:36
14. Евгений Кабанов (kabanoff) 14.01.13 19:37
Судя по скринам написано грамотно.
Спасибо! Протестирую.
15. Игорь Иванов (ketr) 20.03.13 14:56
Используем УПП 8.2. Вот думаю - будет ли актуальна сейчас данная подсистема. или достаточно типовых средств
16. isn Игнатьев (isn) 20.03.13 15:05
(15) ketr, У меня возник аналогичный вопрос. Использую версию 1С обычное приложение. Насколько функционал актуален для использования в сторонних обменах?
17. Андрей Калякин (kalyaka) 20.03.13 21:40
(15) ketr, (16) isn, Давно я не заглядывал в УПП... Скорее всего в последних версиях УПП еще нет такого механизма (запуск обработок по расписанию), а вот в БП3.0 уже есть стандартная возможность запускать внешние обработки по расписанию. Такая подсистема также должна быть в конфигурации 1С Библиотека стандартных подсистем. Так что выбор за Вами: либо дождаться типового функционала, либо использовать предложенное в статье решение, либо самим выдрать из стандартных подсистем нужное Вам решение.
18. isn Игнатьев (isn) 17.04.13 12:16
Идея очень интересная. Возможно "прикрутить" функционал к стандартной УТ 10.3?
P.S.Я использую "ПО", которое было создано очень давно и за основу бралось УТ 10.2, а то и более древние релизы. "ПО" защищено вплоть до выполнения обменов.
19. candy_sk (candy_sk) 28.06.13 21:55
Я не перестаю удивляться - зачем тратить время на то что уже десятки раз сделано и выложено тут совершенно бесплатно.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа