Регламентное задание для объекта расширения
Добрый день. Необходимо выполнять регламентное задание над объектом добавленным в расширении. Насколько понял реализовать это можно только с помощью внешней обработки.
Вопрос правильно ли я понял?
Нашел еще вотэто , но насколько понял это только для 1cfresh.
Вопрос правильно ли я понял?
Нашел еще вот
По теме из базы знаний
- Не работают регламентные задания?
- Программное управление регламентными заданиями в расширении с использованием БСП
- Конфигурирование новых регламентных заданий с помощью расширения
- Подсистема регулярных заданий
- Подсистема "Обмен данными. Конвертация 2.1". Автоматический обмен измененными данными. Управляемые и обычные формы. Включает отдельные подсистемы "Журнал событий", "Регламентные задания"
Найденные решения
Я для своих расширений использую вот такую конструкцию
Процедура ДобавитьРегламентноеЗадание()
КлючРЗ = "РАСШ_ОбщийМодуль.ОбработатьОбъектыРасширенияВФоне";
РезультатПоиска = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Ключ", КлючРЗ));
Если РезультатПоиска.Количество() = 0 Тогда
РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
РЗ.Наименование = "РАСШ: Обработка объектов";
РЗ.Ключ = КлючРЗ;
РЗ.Использование = Истина;
РЗ.Расписание.ПериодПовтораДней = 1;
РЗ.Расписание.ВремяНачала = Дата('00010101000005');
РЗ.Расписание.ДатаНачала = ТекущаяДата();
РЗ.Расписание.ДниНедели.Добавить(1);
РЗ.Расписание.ДниНедели.Добавить(2);
РЗ.Расписание.ДниНедели.Добавить(3);
РЗ.Расписание.ДниНедели.Добавить(4);
РЗ.Расписание.ДниНедели.Добавить(5);
РЗ.Расписание.ДниНедели.Добавить(6);
РЗ.Расписание.ДниНедели.Добавить(7);
РЗ.Параметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
РЗ.Параметры.Добавить(КлючРЗ);
РЗ.Записать();
КонецЕсли;
КонецПроцедуры
//регламентное задание - обработка объектов
Функция ОбработатьОбъектыРасширенияВФоне(АдресРезультата = Неопределено) Экспорт
Отказ = Ложь;
ТекстОшибки = ""; //сюда пишем подробности по ошибкам обработки
ОбработатьОбъектыРасширения(Отказ, ТекстОшибки); //вызываем процедуру обработки
Если Не ПустаяСтрока(ТекстОшибки) Тогда
ЗаписьЖурналаРегистрации(
"РАСШ: Ошибка обработки объектов", УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
КонецЕсли;
Результат = Новый Структура("Успешно, ТекстОшибки", Не Отказ, ТекстОшибки);
Если АдресРезультата <> Неопределено Тогда
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецЕсли;
Возврат Результат;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
если конфа на управляемых формах (а она должна быть на управляемых), то сейчас там можно назначать для внешней доп обработки расписание для команды обработки и она будет выполняться в регламенте
мы так делаем для своих расширений
в самом расширении методы, которые надо выполнять регламентно
во внешней обработке команда, которая пинает нужный метод
обработку в допы и расписание для команды...
все работает
мы так делаем для своих расширений
в самом расширении методы, которые надо выполнять регламентно
во внешней обработке команда, которая пинает нужный метод
обработку в допы и расписание для команды...
все работает
Я для своих расширений использую вот такую конструкцию
Процедура ДобавитьРегламентноеЗадание()
КлючРЗ = "РАСШ_ОбщийМодуль.ОбработатьОбъектыРасширенияВФоне";
РезультатПоиска = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Ключ", КлючРЗ));
Если РезультатПоиска.Количество() = 0 Тогда
РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
РЗ.Наименование = "РАСШ: Обработка объектов";
РЗ.Ключ = КлючРЗ;
РЗ.Использование = Истина;
РЗ.Расписание.ПериодПовтораДней = 1;
РЗ.Расписание.ВремяНачала = Дата('00010101000005');
РЗ.Расписание.ДатаНачала = ТекущаяДата();
РЗ.Расписание.ДниНедели.Добавить(1);
РЗ.Расписание.ДниНедели.Добавить(2);
РЗ.Расписание.ДниНедели.Добавить(3);
РЗ.Расписание.ДниНедели.Добавить(4);
РЗ.Расписание.ДниНедели.Добавить(5);
РЗ.Расписание.ДниНедели.Добавить(6);
РЗ.Расписание.ДниНедели.Добавить(7);
РЗ.Параметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
РЗ.Параметры.Добавить(КлючРЗ);
РЗ.Записать();
КонецЕсли;
КонецПроцедуры
//регламентное задание - обработка объектов
Функция ОбработатьОбъектыРасширенияВФоне(АдресРезультата = Неопределено) Экспорт
Отказ = Ложь;
ТекстОшибки = ""; //сюда пишем подробности по ошибкам обработки
ОбработатьОбъектыРасширения(Отказ, ТекстОшибки); //вызываем процедуру обработки
Если Не ПустаяСтрока(ТекстОшибки) Тогда
ЗаписьЖурналаРегистрации(
"РАСШ: Ошибка обработки объектов", УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
КонецЕсли;
Результат = Новый Структура("Успешно, ТекстОшибки", Не Отказ, ТекстОшибки);
Если АдресРезультата <> Неопределено Тогда
ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
КонецЕсли;
Возврат Результат;
КонецФункции
Показать
(5) единственный минус, при удалении расширения регламентное задание останется. А с доп обработкой нет, потому что при удалении будет удалено и регламентное задание.
Плюс нужно будет думать, где хранить дополнительные параметры для продвинутых алгоритмов.
Плюс нужно будет думать, где хранить дополнительные параметры для продвинутых алгоритмов.
(5) Вопрос - как ваш код доходит до выполнения процедуры расширения, если в параметрах указана пустая ссылка?
Ваш код:
Типовой код, который сваливается в неопределено
Ваш код:
РЗ.Параметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
Типовой код, который сваливается в неопределено
Функция ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата = Неопределено) Экспорт
Если ТипЗнч(ПараметрыКоманды.ДополнительнаяОбработкаСсылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")
Или ПараметрыКоманды.ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
Возврат Неопределено;
КонецЕсли;
Показать
(12) затягиваем в расширение функцию ВыполнитьКоманду() общего модуля ДополнительныеОтчетыИОбработки с директивой &Вместо
и в ней определяем что делать. Как то так:
и в ней определяем что делать. Как то так:
&Вместо("ВыполнитьКоманду")
Функция РАСШ_ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата)
Если СтрНачинаетсяС(ПараметрыКоманды.ИдентификаторКоманды, "РАСШ_") Тогда
ПутьКОбработчику = СтрРазделить(ПараметрыКоманды.ИдентификаторКоманды, ".");
Если ПутьКОбработчику.ВГраница() < 1 Тогда
Возврат Неопределено;
КонецЕсли;
ОбщийМодуль = ОбщегоНазначения.ОбщийМодуль(ПутьКОбработчику[0]);
Если ОбщийМодуль = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ОбщегоНазначения.ВызватьФункциюКонфигурации(ПараметрыКоманды.ИдентификаторКоманды, АдресРезультата);
КонецЕсли;
Возврат ПродолжитьВызов(ПараметрыКоманды, АдресРезультата);
КонецФункции
Показать
(9) дык я про свои наработки имел в виду... прошу прощения, если ввел в заблуждение
п.с.
если что - копать в сторону модуля приложения и сравнивать какой-нибудь служебный реквизит (константу?) расширения и возврат результата какой-нибудь функции в новой версии расширения ;)
п.с.
если что - копать в сторону модуля приложения и сравнивать какой-нибудь служебный реквизит (константу?) расширения и возврат результата какой-нибудь функции в новой версии расширения ;)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот