Регламентное задание для объекта расширения

1. John_Galt 23.10.20 12:37 Сейчас в теме
Добрый день. Необходимо выполнять регламентное задание над объектом добавленным в расширении. Насколько понял реализовать это можно только с помощью внешней обработки.
Вопрос правильно ли я понял?

Нашел еще вот это, но насколько понял это только для 1cfresh.
Угрюмый; +1 Ответить
По теме из базы знаний
Найденные решения
5. Alfn 59 24.10.20 14:54 Сейчас в теме
Я для своих расширений использую вот такую конструкцию

Процедура ДобавитьРегламентноеЗадание()
	КлючРЗ = "РАСШ_ОбщийМодуль.ОбработатьОбъектыРасширенияВФоне";
	РезультатПоиска = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Ключ", КлючРЗ));
	
	Если РезультатПоиска.Количество() = 0 Тогда
		РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
		РЗ.Наименование  = "РАСШ: Обработка объектов";
		РЗ.Ключ			 = КлючРЗ;
		РЗ.Использование = Истина;
		
		РЗ.Расписание.ПериодПовтораДней	= 1;
		РЗ.Расписание.ВремяНачала = Дата('00010101000005');
		РЗ.Расписание.ДатаНачала = ТекущаяДата();
		РЗ.Расписание.ДниНедели.Добавить(1);
		РЗ.Расписание.ДниНедели.Добавить(2);
		РЗ.Расписание.ДниНедели.Добавить(3);
		РЗ.Расписание.ДниНедели.Добавить(4);
		РЗ.Расписание.ДниНедели.Добавить(5);
		РЗ.Расписание.ДниНедели.Добавить(6);
		РЗ.Расписание.ДниНедели.Добавить(7);
		
		РЗ.Параметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
		РЗ.Параметры.Добавить(КлючРЗ);
		РЗ.Записать();
	КонецЕсли;
КонецПроцедуры

//регламентное задание - обработка объектов
Функция ОбработатьОбъектыРасширенияВФоне(АдресРезультата = Неопределено) Экспорт 
	Отказ = Ложь;
	ТекстОшибки = ""; //сюда пишем подробности по ошибкам обработки
	
	ОбработатьОбъектыРасширения(Отказ, ТекстОшибки); //вызываем процедуру обработки
	
	Если Не ПустаяСтрока(ТекстОшибки) Тогда
		ЗаписьЖурналаРегистрации(
			"РАСШ: Ошибка обработки объектов", УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
	КонецЕсли;
	
	Результат = Новый Структура("Успешно, ТекстОшибки", Не Отказ, ТекстОшибки);
	Если АдресРезультата <> Неопределено Тогда
		ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

Показать
andogskiy; Antoska; Угрюмый; CratosX; bizard; John_Galt; user1464234; +7 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Xershi 1484 23.10.20 13:10 Сейчас в теме
(1) следите за возможностями расширений.
Регламентные задания пока отсутствуют в этом списке.
2. spec8s 830 23.10.20 13:00 Сейчас в теме
Да, все верно. Нужно написать внешнюю обработку.
Вариант который описан для Fresh, только там и будет работать.
4. VictorRGB2 13 23.10.20 15:49 Сейчас в теме
если конфа на управляемых формах (а она должна быть на управляемых), то сейчас там можно назначать для внешней доп обработки расписание для команды обработки и она будет выполняться в регламенте

мы так делаем для своих расширений
в самом расширении методы, которые надо выполнять регламентно
во внешней обработке команда, которая пинает нужный метод
обработку в допы и расписание для команды...
все работает
5. Alfn 59 24.10.20 14:54 Сейчас в теме
Я для своих расширений использую вот такую конструкцию

Процедура ДобавитьРегламентноеЗадание()
	КлючРЗ = "РАСШ_ОбщийМодуль.ОбработатьОбъектыРасширенияВФоне";
	РезультатПоиска = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Ключ", КлючРЗ));
	
	Если РезультатПоиска.Количество() = 0 Тогда
		РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
		РЗ.Наименование  = "РАСШ: Обработка объектов";
		РЗ.Ключ			 = КлючРЗ;
		РЗ.Использование = Истина;
		
		РЗ.Расписание.ПериодПовтораДней	= 1;
		РЗ.Расписание.ВремяНачала = Дата('00010101000005');
		РЗ.Расписание.ДатаНачала = ТекущаяДата();
		РЗ.Расписание.ДниНедели.Добавить(1);
		РЗ.Расписание.ДниНедели.Добавить(2);
		РЗ.Расписание.ДниНедели.Добавить(3);
		РЗ.Расписание.ДниНедели.Добавить(4);
		РЗ.Расписание.ДниНедели.Добавить(5);
		РЗ.Расписание.ДниНедели.Добавить(6);
		РЗ.Расписание.ДниНедели.Добавить(7);
		
		РЗ.Параметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
		РЗ.Параметры.Добавить(КлючРЗ);
		РЗ.Записать();
	КонецЕсли;
КонецПроцедуры

//регламентное задание - обработка объектов
Функция ОбработатьОбъектыРасширенияВФоне(АдресРезультата = Неопределено) Экспорт 
	Отказ = Ложь;
	ТекстОшибки = ""; //сюда пишем подробности по ошибкам обработки
	
	ОбработатьОбъектыРасширения(Отказ, ТекстОшибки); //вызываем процедуру обработки
	
	Если Не ПустаяСтрока(ТекстОшибки) Тогда
		ЗаписьЖурналаРегистрации(
			"РАСШ: Ошибка обработки объектов", УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
	КонецЕсли;
	
	Результат = Новый Структура("Успешно, ТекстОшибки", Не Отказ, ТекстОшибки);
	Если АдресРезультата <> Неопределено Тогда
		ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

Показать
andogskiy; Antoska; Угрюмый; CratosX; bizard; John_Galt; user1464234; +7 Ответить
6. Xershi 1484 24.10.20 15:54 Сейчас в теме
(5) единственный минус, при удалении расширения регламентное задание останется. А с доп обработкой нет, потому что при удалении будет удалено и регламентное задание.
Плюс нужно будет думать, где хранить дополнительные параметры для продвинутых алгоритмов.
Дмитрий74Чел; +1 Ответить
7. Alfn 59 24.10.20 17:54 Сейчас в теме
(6) не могу себе представить, что удаляю свое расширение )))
Но озадачиться наверное стоит... тем более что процедуры обработки установки расширения давно написаны.
8. Xershi 1484 24.10.20 17:59 Сейчас в теме
(7) жизнь суровая штука =))
spec8s; Alfn; +2 Ответить
12. mrcamomile 80 07.02.21 00:45 Сейчас в теме
(5) Вопрос - как ваш код доходит до выполнения процедуры расширения, если в параметрах указана пустая ссылка?

Ваш код:
 РЗ.Параметры.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());


Типовой код, который сваливается в неопределено
Функция ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата = Неопределено) Экспорт
	
	Если ТипЗнч(ПараметрыКоманды.ДополнительнаяОбработкаСсылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")
		Или ПараметрыКоманды.ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
		Возврат Неопределено;
	КонецЕсли;


Показать
13. Alfn 59 09.02.21 20:32 Сейчас в теме
(12) затягиваем в расширение функцию ВыполнитьКоманду() общего модуля ДополнительныеОтчетыИОбработки с директивой &Вместо
и в ней определяем что делать. Как то так:

&Вместо("ВыполнитьКоманду")
Функция РАСШ_ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата)
	
	Если СтрНачинаетсяС(ПараметрыКоманды.ИдентификаторКоманды, "РАСШ_") Тогда
		
		ПутьКОбработчику = СтрРазделить(ПараметрыКоманды.ИдентификаторКоманды, ".");
		Если ПутьКОбработчику.ВГраница() < 1 Тогда
			Возврат Неопределено;
		КонецЕсли;
		
		ОбщийМодуль = ОбщегоНазначения.ОбщийМодуль(ПутьКОбработчику[0]);
		Если ОбщийМодуль = Неопределено Тогда
			Возврат Неопределено;
		КонецЕсли;
		
		Возврат ОбщегоНазначения.ВызватьФункциюКонфигурации(ПараметрыКоманды.ИдентификаторКоманды, АдресРезультата);
		
	КонецЕсли;
	
	Возврат ПродолжитьВызов(ПараметрыКоманды, АдресРезультата);
	
КонецФункции
Показать
andogskiy; randomus; VKislitsin; +3 Ответить
15. bizard 29 13.06.21 02:25 Сейчас в теме
16. EkTok 30.07.21 14:55 Сейчас в теме
(5) Добрый день, можно для начинающих более подробно разъяснить, как вызвать функцию из расширения с помощью внешней обработки
9. John_Galt 28.10.20 20:30 Сейчас в теме
(7) Ткните носом. То ли формулирую криво, то ли ещё что, но нагуглить сей процесс не получается.
10. Alfn 59 28.10.20 21:40 Сейчас в теме
(9) дык я про свои наработки имел в виду... прошу прощения, если ввел в заблуждение

п.с.
если что - копать в сторону модуля приложения и сравнивать какой-нибудь служебный реквизит (константу?) расширения и возврат результата какой-нибудь функции в новой версии расширения ;)
11. John_Galt 28.10.20 22:21 Сейчас в теме
(10) Спасибо. Пошёл копать.
14. Refox 04.03.21 11:43 Сейчас в теме
(11) У Вас что-то получилось?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот