2015-03-27 15:32:50 +03:00
# TaskManagerFor1C
Библиотека TaskManagerFor1C предназначена для создания асинхронных и параллельных алгоритмов с гарантированным выполнением в среде 1С Предприятия на базе фоновых заданий.
2015-03-27 16:00:33 +03:00
2015-10-14 15:12:42 +03:00
Файлы поставки доступны на [закладке с релизами ](https://github.com/wizi4d/TaskManagerFor1C/releases ).
2015-04-07 01:45:03 +03:00
## Цели TaskManagerFor1C:
- Повышение производительности программных продуктов за счет добавления параллелелизма в программный код;
- Повышение продуктивности разработчиков за счет упрощения работы по управлению заданиями.
## Область применения
2015-04-08 14:50:06 +03:00
- Использование параллельных вычислений в автоматизации бизнес процессов;
- Параллельное выполнение запросов в долгих отчетах/обработках;
2015-04-07 01:45:03 +03:00
- Процессы загрузки/выгрузки данных;
- Организация нагрузочного тестирования.
2015-04-08 14:50:06 +03:00
## Принцип работы
2015-09-18 14:52:52 +03:00

2015-04-08 14:50:06 +03:00
2015-04-07 01:45:03 +03:00
## Настройка
2015-04-08 14:50:06 +03:00
Для настройки нужно использовать обработку "Управление менеджером заданий".
2015-04-07 01:45:03 +03:00
2016-04-04 16:14:06 +03:00

2015-04-07 01:45:03 +03:00
Доступные настройки:
- Ограничение на количество исполнителей - для балансировки нагрузки на сервер 1С. Принимает значение от 0 до 9999. При значении 0 задания в работу браться не будут.
- Глубина хранения истории (дни) - если указано значение отличное от 0, тогда подсистема сама будет чистить информацию по старым выполненным заданиям оставляя последние N дней указанных в настройке.
Запуск подсистемы, остановка и очистка очереди выполняется верхними, говорящими за себя кнопками.
В качестве индикатора работы подсистемы выступает флаг `Менеджер запущен` .
2015-09-25 15:18:11 +03:00
При нажатии на кнопку с шестеренкой (рядом с кнопкой `Все действия` ) открываются настройки методов-обработчиков:
- Максимальное количество попыток выполнения - при достижении лимита на количество попыток выполнения задание будет автоматически отменяться;
- Пауза перед новой попыткой выполнения - время отсрочки повторного запуска в секундах. В качестве отправной точки отсчета используется время начала неудачной попытки выполнения. Если НачалоВыполнения + ПаузаПередНовойПопыткой > текущего времени, то задание ставится на паузу. Когда НачалоВыполнения + ПаузаПередНовойПопыткой становится <= текущему времени, задание с паузы снимается;
- Максимальное количество исполнителей - персональное ограничение метода-обработчика на количество исполнителей;
- Приоритет метода-обработчика - задания с максимальным приоритетом всегда выдаются из очереди первыми.
2015-09-18 14:52:52 +03:00
2015-04-07 01:45:03 +03:00
## Жизненный цикл задания
2015-09-18 14:52:52 +03:00

2015-04-07 01:45:03 +03:00
## Программный интерфейс
#### ДобавитьЗадание(ИмяМетода, Параметры)
2015-04-08 14:50:06 +03:00
Добавляет новое задание в очередь. На задания в очереди
распространяется ограничение на количество одновременно
работающих исполнителей.
2015-04-07 01:45:03 +03:00
2015-04-08 14:50:06 +03:00
Параметры:
ИмяМетода - точка входа для выполнения задания.
Сигнатура метода должна быть с одним параметром,
например, МетодЗадания(Параметры).
Параметры - структура содержащая необходимые входные
данные, для выполнения задания. При добавлении
расширяется свойством "КлючЗадания", значением
которого будет идентификатор задания в очереди.
2015-04-07 01:45:03 +03:00
Возвращает:
Идентификатор задания.
#### ДобавитьЗаданиеВнеОчереди(ИмяМетода, Параметры)
Запускает асинхронное выполнение задания минуя очередь.
>*На такие задания ограничение на количество исполнителей НЕ распространяется, НО квота используется*
Параметры:
2015-04-08 14:50:06 +03:00
ИмяМетода - точка входа для выполнения задания.
Сигнатура метода должна быть с одним параметром,
например, МетодЗадания(Параметры).
Параметры - структура содержащая необходимые входные
данные, для выполнения задания. При добавлении
расширяется свойством "КлючЗадания", значением
которого будет идентификатор задания в очереди.
2015-04-07 01:45:03 +03:00
Возвращает:
Идентификатор задания.
#### ПолучитьСостояниеЗадания(КлючЗадания)
Позволяет получить текущее состояние задания.
Параметры:
КлючЗадания - идентификатор задания.
Возвращает:
Состояние задания.
#### ОжидатьСостояниеЗадания(КлючЗадания, ОжидаемоеСостояние, Таймаут = 5)
2015-04-08 14:50:06 +03:00
Усыпляет текущий поток до установления указанного состояния
у задания либо до истечения указанного времени.
2015-04-07 01:45:03 +03:00
Параметры:
КлючЗадания - идентификатор задания.
ОжидаемоеСостояние - состояние, которого хотим дождаться.
Таймаут - максимальное время ожидания, сек.
Возвращает:
Истина, если состояния дождались иначе Ложь.
#### ОжидатьИзмененияСостояния(КлючЗадания, ТекущееСостояние, Таймаут = 5)
2015-04-08 14:50:06 +03:00
Усыпляет текущий поток до изменения состояния у задания
с указанного на любое другое либо до истечения указанного
времени.
2015-04-07 01:45:03 +03:00
Параметры:
КлючЗадания - идентификатор задания.
ТекущееСостояние - состояние с которого хотим уйти.
Таймаут - максимальное время ожидания, сек.
Возвращает:
Истина, если состояния дождались иначе Ложь.
#### ДождатьсяВыполнения(КлючиЗаданий, Таймаут = 5)
2015-04-08 14:50:06 +03:00
Усыпляет текущий поток до выполнения указанного списка
заданий либо до истечения указанного времени.
2015-04-07 01:45:03 +03:00
Параметры:
КлючиЗаданий - массив с идентификаторами заданий.
ТекущееСостояние - состояние с которого хотим уйти.
Таймаут - максимальное время ожидания, сек.
Возвращает:
Истина, если состояния дождались иначе Ложь.
#### ОтменитьЗадание(КлючЗадания)
Отменяет задание, если оно находится в состоянии Ожидает.
Параметры:
КлючЗадания - идентификатор задания.
#### ОтменитьВсеЗаданияВОчереди()
2015-09-25 15:18:11 +03:00
Отменяет все задания в состоянии Ожидает и НаПаузе.
2015-04-07 01:45:03 +03:00
2015-04-08 14:50:06 +03:00
#### СократитьИсториюВыполненияЗаданий( ТребуемаяГлубинаИсторииВДнях)
2015-04-07 01:45:03 +03:00
2015-04-08 14:50:06 +03:00
Очищает информацию по старым выполненным заданиям оставляя
последнее указанное количество дней. Предназначен для "ручного"
управления историей выполнения заданий.
2015-04-07 01:45:03 +03:00
Параметры:
2015-04-08 14:50:06 +03:00
ТребуемаяГлубинаИсторииВДнях - количество дней истории,
которые необходимо оставить.