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

Нашел еще вот это, но насколько понял это только для 1cfresh.
---
Я для своих расширений использую вот такую конструкцию

```1c
    Процедура ДобавитьРегламентноеЗадание()
    КлючРЗ = "РАСШ_ОбщийМодуль.ОбработатьОбъектыРасширенияВФоне";
    РезультатПоиска = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Ключ", КлючРЗ));

    Если РезультатПоиска.Количество() = 0 Тогда
    РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
    РЗ.Наименование = "РАСШ: Обработка объектов";
    РЗ.Ключ = КлючРЗ;
    РЗ.Использование = Истина;

    РЗ.Расписание.ПериодПовтораДней = 1;
    РЗ.Расписание.ВремяНачала = Дата('00010101000005');
    РЗ.Расписание.ДатаНачала = ТекущаяДата();
    РЗ.Расписание.ДниНедели.Добавить(1);
    РЗ.Расписание.ДниНедели.Добавить(2);
    РЗ.Расписание.ДниНедели.Добавить(3);
    РЗ.Расписание.ДниНедели.Добавить(4);
    РЗ.Расписание.ДниНедели.Добавить(5);
    РЗ.Расписание.ДниНедели.Добавить(6);
    РЗ.Расписание.ДниНедели.Добавить(7);

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

    //регламентное задание - обработка объектов
    Функция ОбработатьОбъектыРасширенияВФоне(АдресРезультата = Неопределено) Экспорт
    Отказ = Ложь;
    ТекстОшибки = "; //сюда пишем подробности по ошибкам обработки

    ОбработатьОбъектыРасширения(Отказ, ТекстОшибки); //вызываем процедуру обработки

    Если Не ПустаяСтрока(ТекстОшибки) Тогда
    ЗаписьЖурналаРегистрации(
    "РАСШ: Ошибка обработки объектов", УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
    КонецЕсли;

    Результат = Новый Структура("Успешно, ТекстОшибки", Не Отказ, ТекстОшибки);
    Если АдресРезультата <> Неопределено Тогда
    ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
    КонецЕсли;

    Возврат Результат;
    КонецФункции
```
---
следите за возможностями расширений.
Регламентные задания пока отсутствуют в этом списке.
---
Да, все верно. Нужно написать внешнюю обработку.
Вариант который описан для Fresh, только там и будет работать.
---
если конфа на управляемых формах (а она должна быть на управляемых), то сейчас там можно назначать для внешней доп обработки расписание для команды обработки и она будет выполняться в регламенте

мы так делаем для своих расширений
в самом расширении методы, которые надо выполнять регламентно
во внешней обработке команда, которая пинает нужный метод
обработку в допы и расписание для команды...
все работает
---
Я для своих расширений использую вот такую конструкцию

```1c
    Процедура ДобавитьРегламентноеЗадание()
    КлючРЗ = "РАСШ_ОбщийМодуль.ОбработатьОбъектыРасширенияВФоне";
    РезультатПоиска = РегламентныеЗаданияСервер.НайтиЗадания(Новый Структура("Ключ", КлючРЗ));

    Если РезультатПоиска.Количество() = 0 Тогда
    РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
    РЗ.Наименование = "РАСШ: Обработка объектов";
    РЗ.Ключ = КлючРЗ;
    РЗ.Использование = Истина;

    РЗ.Расписание.ПериодПовтораДней = 1;
    РЗ.Расписание.ВремяНачала = Дата('00010101000005');
    РЗ.Расписание.ДатаНачала = ТекущаяДата();
    РЗ.Расписание.ДниНедели.Добавить(1);
    РЗ.Расписание.ДниНедели.Добавить(2);
    РЗ.Расписание.ДниНедели.Добавить(3);
    РЗ.Расписание.ДниНедели.Добавить(4);
    РЗ.Расписание.ДниНедели.Добавить(5);
    РЗ.Расписание.ДниНедели.Добавить(6);
    РЗ.Расписание.ДниНедели.Добавить(7);

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

    //регламентное задание - обработка объектов
    Функция ОбработатьОбъектыРасширенияВФоне(АдресРезультата = Неопределено) Экспорт
    Отказ = Ложь;
    ТекстОшибки = "; //сюда пишем подробности по ошибкам обработки

    ОбработатьОбъектыРасширения(Отказ, ТекстОшибки); //вызываем процедуру обработки

    Если Не ПустаяСтрока(ТекстОшибки) Тогда
    ЗаписьЖурналаРегистрации(
    "РАСШ: Ошибка обработки объектов", УровеньЖурналаРегистрации.Ошибка,,,ТекстОшибки);
    КонецЕсли;

    Результат = Новый Структура("Успешно, ТекстОшибки", Не Отказ, ТекстОшибки);
    Если АдресРезультата <> Неопределено Тогда
    ПоместитьВоВременноеХранилище(Результат, АдресРезультата);
    КонецЕсли;

    Возврат Результат;
    КонецФункции
```
---
единственный минус, при удалении расширения регламентное задание останется. А с доп обработкой нет, потому что при удалении будет удалено и регламентное задание.
Плюс нужно будет думать, где хранить дополнительные параметры для продвинутых алгоритмов.
---
не могу себе представить, что удаляю свое расширение )))
Но озадачиться наверное стоит... тем более что процедуры обработки установки расширения давно написаны.
---
жизнь суровая штука =))
---
Вопрос - как ваш код доходит до выполнения процедуры расширения, если в параметрах указана пустая ссылка?

Ваш код:

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

Типовой код, который сваливается в неопределено

```1c
    Функция ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата = Неопределено) Экспорт

    Если ТипЗнч(ПараметрыКоманды.ДополнительнаяОбработкаСсылка) <> Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки")
    Или ПараметрыКоманды.ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
    Возврат Неопределено;
    КонецЕсли;
```
---
затягиваем в расширение функцию ВыполнитьКоманду() общего модуля ДополнительныеОтчетыИОбработки с директивой &Вместо
и в ней определяем что делать. Как то так:

```1c
    &Вместо("ВыполнитьКоманду")
    Функция РАСШ_ВыполнитьКоманду(ПараметрыКоманды, АдресРезультата)

    Если СтрНачинаетсяС(ПараметрыКоманды.ИдентификаторКоманды, "РАСШ_") Тогда

    ПутьКОбработчику = СтрРазделить(ПараметрыКоманды.ИдентификаторКоманды, ".");
    Если ПутьКОбработчику.ВГраница() < 1 Тогда
    Возврат Неопределено;
    КонецЕсли;

    ОбщийМодуль = ОбщегоНазначения.ОбщийМодуль(ПутьКОбработчику[0]);
    Если ОбщийМодуль = Неопределено Тогда
    Возврат Неопределено;
    КонецЕсли;

    Возврат ОбщегоНазначения.ВызватьФункциюКонфигурации(ПараметрыКоманды.ИдентификаторКоманды, АдресРезультата);

    КонецЕсли;

    Возврат ПродолжитьВызов(ПараметрыКоманды, АдресРезультата);

    КонецФункции
```
---
Спасибо!
---
Добрый день, можно для начинающих более подробно разъяснить, как вызвать функцию из расширения с помощью внешней обработки
---
Ткните носом. То ли формулирую криво, то ли ещё что, но нагуглить сей процесс не получается.
---
дык я про свои наработки имел в виду... прошу прощения, если ввел в заблуждение

п.с.
если что - копать в сторону модуля приложения и сравнивать какой-нибудь служебный реквизит (константу?) расширения и возврат результата какой-нибудь функции в новой версии расширения ;)
---
Спасибо. Пошёл копать.
---
У Вас что-то получилось?