Всем добрый день!

Хочу настроить свои варианты автоподстановок в шаблонах процессов в 1С Документооборот.
Чтобы конфигурацию не снимать с замка, создала расширение (режим совместимости у основной конфигурации и у расширения - 8.3.9), куда перенесла общий модуль "ШаблоныБизнесПроцессовПереопределяемый" и там в соответствии с примером, указанным в общем модуле "ШаблоныБизнесПроцессовПереопределяемый", прописала функции своих автоподстановок:

```1c
    #Область ПрограммныйИнтерфейс

    // Возвращает список пользовательских функций для автоподстановки исполнителей в шаблонах бизнес-процессов
    // Параметры:
    // ИменаПредметовДляФункций - массив - массив имен предметов для функций автоподстановки
    //
    &Вместо("ПолучитьСписокДоступныхФункций")
    Функция Изм_ПолучитьСписокДоступныхФункций(ИменаПредметовДляФункций) Экспорт

    ДоступныеФункции = Новый СписокЗначений;
    //ДоступныеФункции.Добавить("ШаблоныБизнесПроцессовПереопределяемый.<ИмяФункции>(Объект)", "<Представление функции>");
    ДоступныеФункции.Добавить("ШаблоныБизнесПроцессовПереопределяемый.ЗДФПоНаправлениюАвтораДокумента(Объект, Предмет)", "ЗДФ по направлению автора документа");
    ДоступныеФункции.Добавить("ШаблоныБизнесПроцессовПереопределяемый.ВсеРуководителиАвтораДокументаБезДиректора(Объект, Предмет)", "Все руководители автора документа без директора");

    Возврат ДоступныеФункции;

    КонецФункции

    Функция ЗДФПоНаправлениюАвтораДокумента(БизнесПроцессОбъект, ИмяПредмета) Экспорт

    СтрокаПредмета = БизнесПроцессОбъект.Предметы.Найти(ИмяПредмета,"ИмяПредмета");

    Если СтрокаПредмета <> Неопределено Тогда

    Если Не ЗначениеЗаполнено(СтрокаПредмета.Предмет) Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Автоподстановка не может быть выполнена, так как не указан предмет "%1" процесса.'"),
    Строка(ИмяПредмета));
    КонецЕсли;

    Если ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ИсходящиеДокументы") И
    ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Автоподстановка не может быть выполнена для предмета "%1" процесса.'"),
    Строка(ИмяПредмета));
    КонецЕсли;

    Иначе

    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Не найден предмет "%1" процесса.'"),
    Строка(ИмяПредмета));

    КонецЕсли;

    АвторДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаПредмета.Предмет, "Подготовил");

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СведенияОПользователяхДокументооборот.Подразделение КАК Подразделение
    |ИЗ
    | РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот
    |ГДЕ
    | СведенияОПользователяхДокументооборот.Пользователь = &Пользователь";
    Запрос.УстановитьПараметр("Пользователь", АвторДокумента);

    Результат = Запрос.Выполнить();
    Подразделение = Неопределено;

    Если Не Результат.Пустой() Тогда
    Выборка = Результат.Выбрать();
    Выборка.Следующий();
    Подразделение = Выборка.Подразделение;
    КонецЕсли;

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

    Возврат СтруктураАдресации;

    КонецФункции

    Функция ВсеРуководителиАвтораДокументаБезДиректора(БизнесПроцессОбъект, ИмяПредмета) Экспорт

    СтрокаПредмета = БизнесПроцессОбъект.Предметы.Найти(ИмяПредмета,"ИмяПредмета");

    Если СтрокаПредмета <> Неопределено Тогда

    Если Не ЗначениеЗаполнено(СтрокаПредмета.Предмет) Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Автоподстановка не может быть выполнена, так как не указан предмет "%1" процесса.'"),
    Строка(ИмяПредмета));
    КонецЕсли;

    Если ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ИсходящиеДокументы") И
    ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ВнутренниеДокументы") Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Автоподстановка не может быть выполнена для предмета "%1" процесса.'"),
    Строка(ИмяПредмета));
    КонецЕсли;

    Иначе

    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Не найден предмет "%1" процесса.'"),
    Строка(ИмяПредмета));

    КонецЕсли;

    МассивРуководителей = Новый Массив;
    АвторДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаПредмета.Предмет, "Подготовил");

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СведенияОПользователяхДокументооборот.Подразделение КАК Подразделение
    |ИЗ
    | РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот
    |ГДЕ
    | СведенияОПользователяхДокументооборот.Пользователь = &Пользователь";
    Запрос.УстановитьПараметр("Пользователь", АвторДокумента);

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
    Возврат МассивРуководителей;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Выборка.Следующий();
    Подразделение = Выборка.Подразделение;

    Пока ЗначениеЗаполнено(Подразделение) Цикл

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

    КонецЦикла;

    Возврат МассивРуководителей;

    КонецФункции

    // Вызывается из ШаблоныБизнесПроцессов.ОбновитьДоступностьЗависимыхШаблонов при
    // обновлении доступности зависимых шаблонов.
    //
    // Параметры:
    // Шаблон - Структура -
    // СтандартнаяОбработка – Булево - В случае значения Истина обновление доступности
    // будет выполнено способом по умолчанию.
    &Вместо("ПриОбновленииДоступностиЗависимыхШаблонов")
    Процедура СМЗ_ПриОбновленииДоступностиЗависимыхШаблонов(Шаблон, СтандартнаяОбработка) Экспорт

    КонецПроцедуры

    #КонецОбласти
```

Но при обновлении списка автоподстановок в шаблонах мои автоподстановки не появляются.

З.Ы. Автоподстановки появились после отключения у расширения галочки "Безопасный режим", спасибо user705522_constantin_h

Настроила процесс, содержащий данные автоподстановки. Но при попытке запуска документа по этому процессу выходит ошибка:
"Ошибка при выполнении автоподстановки <Название автоподстановки>
Ошибка компиляции при вычислении выражения или выполнении фрагмента кода"
---
спасибо, но мне нужно, чтобы автоподстановка из роли исполнителя бралась (не указала этого в теме, каюсь)

помог вот этот пост https://forum.infostart.ru/forum9/topic188789/
---
В расширении снимите флажок Безопасный режим.
---
Спасибо, появились автоподстановки!

Но теперь не запускаются процессы с ними, выходит ошибка
"Ошибка при выполнении автоподстановки <Название автоподстановки>
Ошибка компиляции при вычислении выражения или выполнении фрагмента кода"
видимо, что-то неправильно с предметом процесса...

Попробовала создать автоподстановку без предмета, используя автора процесса, ошибка не появляется, но и роль исполнителя не подставляется, пустая строка... :((
---
Вообще-то в должно быть так:

```1c
    // Возвращает список значений доступных функций автоподстановки исполнителей процессов
    //
    // Параметры:
    // ИменаПредметовДляФункций - массив - массив имен предметов для функций автоподстановки
    // ВключатьНедоступные - булево - признак добавления в список недоступных функций автоподстановки
    //
    // Возвращаемое значение:
    // СписокЗначений
    //
    //Добавлен параметр ВключатьНедоступные
    Функция ПолучитьСписокДоступныхФункций(ИменаПредметовДляФункций = Неопределено, ВключатьНедоступные = Истина) Экспорт

    ДоступныеФункции = Новый СписокЗначений;

    Если ИменаПредметовДляФункций <> Неопределено Тогда
    Если ИменаПредметовДляФункций.Количество() > 0 Тогда
    Для Каждого ИмяПредмета Из ИменаПредметовДляФункций Цикл

    //( Добавлена автоподстановка Руководитель проекта
    ДоступныеФункции.Добавить("ШаблоныБизнесПроцессов.РуководительПроекта(Объект, ИмяПредмета)",
    СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1.Руководитель проекта'"),Строка(ИмяПредмета)));

    //) Добавлена автоподстановка Руководитель проекта
    КонецЦикла;
    ИначеЕсли ВключатьНедоступные Тогда
    СтрокаИмениПредмета = НСтр("ru='Предмет'");

    //( Добавлена автоподстановка Руководитель проекта
    ДоступныеФункции.Добавить("ШаблоныБизнесПроцессов.РуководительПроекта(Объект, ИмяПредмета)",
    СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1.Руководитель проекта'"),Строка(ИмяПредмета)));

    //) Добавлена автоподстановка Руководитель проекта
    КонецЕсли;
    КонецЕсли;

    Возврат ДоступныеФункции;

    КонецФункции

    //( Добавлена автоподстановка Руководитель проекта
    // Возвращает автора документа
    //
    // Параметры:
    // БизнесПроцессОбъект - БизнесПроцессОбъект.<Тип бизнес процесса> - процесс, для которого
    // вычисляется автоподстановка
    // ИмяПредмета - СправочникСсылка.ИменаПредметов - имя предмета в процессе
    //
    // Возвращаемое значение:
    // СправочникСсылка.Пользователи
    //
    Функция РуководительПроекта(БизнесПроцессОбъект, ИмяПредмета) Экспорт

    СтрокаПредмета = БизнесПроцессОбъект.Предметы.Найти(ИмяПредмета,"ИмяПредмета");

    Если СтрокаПредмета <> Неопределено Тогда

    Если Не ЗначениеЗаполнено(СтрокаПредмета.Предмет) Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Автоподстановка не может быть выполнена, так как не указан предмет "%1" процесса.'"),
    Строка(ИмяПредмета));
    КонецЕсли;

    Если ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ИсходящиеДокументы") И
    ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ВнутренниеДокументы") И
    ТипЗнч(СтрокаПредмета.Предмет) <> Тип("СправочникСсылка.ВходящиеДокументы") Тогда
    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Автоподстановка не может быть выполнена для предмета "%1" процесса.'"),
    Строка(ИмяПредмета));
    КонецЕсли;

    Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаПредмета.Предмет.Проект, "Руководитель");

    Иначе

    ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
    НСтр("ru = 'Не найден предмет "%1" процесса.'"),
    Строка(ИмяПредмета));

    КонецЕсли;

    КонецФункции
```
---
спасибо, но мне нужно, чтобы автоподстановка из роли исполнителя бралась (не указала этого в теме, каюсь)

помог вот этот пост https://forum.infostart.ru/forum9/topic188789/