Регламентное задание
При большом объеме обрабатываемых документов часть задач можно выполнить в фоновом режиме без участия пользователя.
Алгоритм работы описывается в функции ВыполнитьРегламентныеДействия.
Выполнение алгоритма запускается двумя способами:
при нажатии кнопки «Выполнить регламентное задание» в настройках модуля
при запуске регламентного задания программно из конфигурации
В первом случае алгоритм запускается на клиенте. Поэтому он может содержать обращения к экспортным функциям, расположенным в формах основного модуля.
Второй вариант имеет несколько ограничений:
использовать можно только методы, работающие на сервере
обращение к формам модуля невозможно
требуется внесение изменений в конфигурацию (добавление регламентного задания в 1С, описание функции вызова ВыполнитьРегламентныеДействия)
Чаще всего использование регламентного задания предполагает:
обновление ленты событий
проведение анализа документов и запись требуемых действий
отправка на подпись или согласование
выполнение сопоставления документов
подписание документов сертификатом, установленным на сервере 1С, и отправка
Пример получения новых событий и отправка документов:
// ОБРАБОТКА СОБЫТИЙ ЛЕНТЫ, В Т.Ч. ЗАГРУЗКА НОВЫХ ДОКУМЕНТОВ
КоличествоПорцийСобытий = 10; // Кол-во вычитываемых порций событий (каждая порция содержит не более 100 событий)
Для Каждого СтрокаОрганизации Из ОсновнойМодуль.ЭДО_Модуль_ТаблицаОрганизацийПользователя() Цикл
ОписаниеОрганизации = Новый Структура;
ОписаниеОрганизации.Вставить("BoxID", СтрокаОрганизации.BoxID);
ОписаниеОрганизации.Вставить("Наименование", СтрокаОрганизации.Наименование);
ОписаниеОрганизации.Вставить("Ссылка", СтрокаОрганизации.Ссылка);
ОсталосьСобытийВЛенте = ОсновнойМодуль.ЭДО_Модуль_ОбработатьНовыеСобытияДокументов(ОписаниеОрганизации, КоличествоПорцийСобытий);
КонецЦикла;
// ВЫПОЛНЕНИЕ MessagePatchToPost
Режим = ""; // Режим исполнения: ПередатьНаСогласование / ПередатьНаПодпись / ПередатьПоМаршруту / Согласование / ОтказВСогласовании
ПараметрыMessagePatchToPost = Новый Структура;
ПараметрыMessagePatchToPost.Вставить("Действие", Режим); // вариант режима MessagePatchToPost
ПараметрыMessagePatchToPost.Вставить("ИдентификаторСотрудника", Неопределено); // внутренний ID Диадока
ПараметрыMessagePatchToPost.Вставить("ИдентификаторПодразделения", Неопределено); // внутренний ID Диадока
ПараметрыMessagePatchToPost.Вставить("ИдентификаторМаршрута", Неопределено); // внутренний ID Диадока
ПараметрыMessagePatchToPost.Вставить("Комментарий", ""); // произвольный текст
// Произвольная коллекция документов Диадока, которые необходимо пропатчить (необходимо собрать по нужному алгоритму).
// Элементы этой коллекции должны содержать ключ "ДокументДД".
ТаблицаДокументов = Новый ТаблицаЗначений;
Если ЗначениеЗаполнено(Режим) Тогда
ОсновнойМодуль.ЭДО_ОтправитьMessagePatchToPostДляВыбранныхСтрокСпискаДокументов(ТаблицаДокументов, ПараметрыMessagePatchToPost);
КонецЕсли;
При большом объеме документов на отправку возникает потребность убрать эту задачу с пользователя.
В этом случае тот сертификат, которым будет производиться подписание, устанавливается на сервер 1С.
Отпечаток сертификата указывается в настройках основного модуля для организации: элемент организации → закладка «Прочие настройки» → поле «Отпечаток сертификата на сервере 1С»
Пример подписания документов на сервере:
// ПРИМЕР ПОДПИСАНИЯ И ОТПРАВКИ СЕРТИФИКАТОМ УСТАНОВЛЕННЫМ НА СЕРВЕРЕ 1С
// ОГРАНИЧЕНИЯ: сервер под Windows; закрытый ключ сертификата установлен под учеткой агента сервера 1С с сохраненным пин-кодом
// 1. Авторизация под сертификатами сервера 1С
ОсновнойМодуль.ЭДО_АвторизоватьсяПодСертификатомНаСервере1С();
КонтекстСеанса = ОсновнойМодуль.ЭДО_КонтекстСеансаКлиентСервер();
// 2. Параметры для получения списка пакетов на отправку
ТаблицаВидовПакетов = ОсновнойМодуль.ЭДО_СправочникМенеджер_ПолучитьСписокЭлементов("ВидыПакетов");
МассивВидовПакетов = ТаблицаВидовПакетов.ВыгрузитьКолонку("Ссылка");
ПараметрыОбновленияСписка = Новый Структура;
ПараметрыОбновленияСписка.Вставить("Режим", "ОтправкаПакетов");
ПараметрыОбновленияСписка.Вставить("НачалоПериода", ДобавитьМесяц(ТекущаяДата(), -1));
ПараметрыОбновленияСписка.Вставить("КонецПериода", КонецДня(ТекущаяДата()));
ПараметрыОбновленияСписка.Вставить("МассивВыбранныхВидов", МассивВидовПакетов);
//3. Отправка пакетов по организациям, в которых авторизовались под сертом сервера 1С
Для Каждого Элемент Из КонтекстСеанса Цикл
СтрокаКонтекста = Элемент.Значение;
Организация = СтрокаКонтекста.ОрганизацияДиадок.СвязанныйСправочник1;
ПараметрыОбновленияСписка.Вставить("ОтборПоОрганизации", Организация);
ОсновнойМодуль.ЭДО_Модуль_ОбновитьСписокДокументов(ПараметрыОбновленияСписка);
//1 вариант: последовательная отправка
Для Каждого СтрокаТЧ Из ОсновнойМодуль.СписокДокументов Цикл
ОсновнойМодуль.ЭДО_ПодготовитьИОтправитьПакет(СтрокаТЧ);
КонецЦикла;
//2 вариант: фоновая отправка
ОсновнойМодуль.ЭДО_ПодготовитьИОтправитьПакетыВФоне(ОсновнойМодуль.СписокДокументов);
КонецЦикла;
Как настроить регламентное задание с помощью консоли заданий
I. Обновить подсистему Диадок до версии 2.23 и выше
На сайте КонтурСправка есть раздел по установке и обновлению подсистемы Диадок.
II. Открыть консоль заданий из состава подсистемы «Инструменты разработчика»
Стандартная консоль заданий на сайте 1С:ИТС не подходит, т.к. с ее помощью нельзя настроить параметры регламентного задания. Вместо нее будем использовать консоль заданий из состава подсистемы «Инструменты разработчика» (далее ИР).
Рекомендуется использовать портативный вариант ИР, т.к. он не требует изменения конфигурации и подходит для платформы 1С версий 8.2.12+, 8.3.4+. Скачать актуальную версию можно с сайта разработчика.
Для запуска консоли заданий нужно:
Распаковать архив с портативной версией ИР. Проверить, что папка «Модули» в этом архиве тоже распакована.
Запустить 1С:Предприятие и открыть внешнюю обработку ирПортативный.epf.
Работа ИР не поддерживается в режиме управляемого приложения. При открытии в этом режиме обработка предложит вам перезапустить 1С в режиме обычного приложения.
В открывшейся командной панели ИР нажмите на кнопку «Консоль заданий».
III. Добавить регламентное задание
В консоли заданий нажмите кнопку «Добавить».
Заполните открывшуюся форму.
Способы подключения модуля «Диадок» к регламентному заданию
Ниже рассмотрены случаи, когда модуль встроен в конфигурацию и подключен как внешняя обработка.
1. Модуль встроен в конфигурацию
Значение параметра — строка, имя встроенной обработки.
Пример:
2. Модуль подключен как внешняя обработка
Значение параметра — элемент справочника «Внешние обработки» для обычных форм или «Дополнительные отчеты и обработки» для управляемых форм.
Пример:
Если регламентное задание выдает при работе ошибки «Метод задания не найден: Диадок_ФоновыеЗадания:ВыполнитьРегламентныеДействия», значит, версия подсистемы Диадок ниже 2.23. Нужно обновить версию подсистемы через «Конфигурация/Поддержка/Обновить конфигурацию».
Важно
Если используется платформа ниже 8.3.4 версии, то необходимо добавлять второй параметр типа «Не определено». Для этого нажмите на кнопку «Добавить».
В противном случае при выполнении регламентного задания будет возникать ошибка «Количество фактических параметров фонового задания не совпадает с количеством параметров метода фонового задания».