Список дополнительных функций:
Описание.
Динамические роли.
Данная функция позволяет автоматически подставлять объекты адресации из предмета процесса в роль с объектом адресации. Для добавления новых автоподстановок в адресной книге необходимо нажать кнопку "Обновить автоподстановки":
После обновления появятся автоподстановки для ролей, которые используются с объектами адресации:
Пример использования.
Допустим у нас есть роль "_Тест":
Исполняет данную роль пользователь "Администратор" по организации "ООО Управляющая компания" и по подразделению "Администрация":
Автоподставнока "_Тест (Роль)" со скришота выше сможет автоматически определить объекты адресации по предмету для роли "_Тест".
Код модуля "ШаблоныБизнесПроцессов" из расширения
// Возвращает список значений доступных функций автоподстановки исполнителей процессов
//
// Параметры:
// ИменаПредметовДляФункций - массив - массив имен предметов для функций автоподстановки
// ВключатьНедоступные - булево - признак добавления в список недоступных функций автоподстановки
//
// Возвращаемое значение:
// СписокЗначений
//
&Вместо("ПолучитьСписокДоступныхФункций")
функция ДФ_ПолучитьСписокДоступныхФункций(ИменаПредметовДляФункций = Неопределено, ВключатьНедоступные = Истина)
ДоступныеФункции = ПродолжитьВызов(ИменаПредметовДляФункций, ВключатьНедоступные);
ДФ_ДобавитьАвтоподстановки(ДоступныеФункции, ИменаПредметовДляФункций, ВключатьНедоступные);
Возврат ДоступныеФункции;
Конецфункции
// Процедура - Дф добавить автоподстановки
//
// Параметры:
// ДоступныеФункции - Список значений с доступными функциями
// ИменаПредметовДляФункций - массив - массив имен предметов для функций автоподстановки
// ВключатьНедоступные - булево - признак добавления в список недоступных функций автоподстановки
//
// Добавляет функции в список значений "ДоступныеФункции"
//
Процедура ДФ_ДобавитьАвтоподстановки(ДоступныеФункции, ИменаПредметовДляФункций, ВключатьНедоступные) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РолиИсполнителей.Код КАК Код,
| РолиИсполнителей.Наименование КАК Наименование
|ИЗ
| Справочник.РолиИсполнителей КАК РолиИсполнителей
|ГДЕ
| РолиИсполнителей.ИспользуетсяСОбъектамиАдресации
| И РолиИсполнителей.ТипыОсновногоОбъектаАдресации <> &ВсеОбъектыАдресации
| И РолиИсполнителей.ТипыДополнительногоОбъектаАдресации <> &ВсеОбъектыАдресации
| И РолиИсполнителей.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("ВсеОбъектыАдресации",
ПланыВидовХарактеристик.ОбъектыАдресацииЗадач.ВсеОбъектыАдресации);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если ИменаПредметовДляФункций <> Неопределено Тогда
Если ИменаПредметовДляФункций.Количество() > 0 Тогда
Для Каждого ИмяПредмета Из ИменаПредметовДляФункций Цикл
Пока Выборка.Следующий() Цикл
ДоступныеФункции.Добавить("ШаблоныБизнесПроцессов.ДФ_РольСбъектамиАдресации(Объект, ИмяПредмета,""" + Выборка.Код + """)",
Строка(ИмяПредмета) + "." + Выборка.Наименование + " " + "(Роль)");
КонецЦикла;
Выборка.Сбросить();
КонецЦикла;
ИначеЕсли ВключатьНедоступные Тогда
СтрокаИмениПредмета = НСтр("ru='Предмет'");
Пока Выборка.Следующий() Цикл
ДоступныеФункции.Добавить("ШаблоныБизнесПроцессов.ДФ_РольСбъектамиАдресации(Объект, ИмяПредмета,""" + Выборка.Код + """)",
Строка(ИмяПредмета) + "." + Выборка.Наименование + " " + "(Роль)", Истина);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Функция - Дф роль сбъектами адресации
//
// Параметры:
// БизнесПроцессОбъект - БизнесПроцессОбъект
// ИмяПредмета - СправочникСсылка.ИменаПредметов
// КодРоли - Строка, код роли из справочника "РолиИсполнителей"
//
// Возвращаемое значение:
// СправочникСсылка.ПолныеРоли в том случае, если найдена нужная роль с объектами адресации
// иначе возвращается значение "Неопределено"
//
Функция ДФ_РольСбъектамиАдресации(БизнесПроцессОбъект, ИмяПредмета, КодРоли) Экспорт
Роль = Справочники.РолиИсполнителей.НайтиПоКоду(КодРоли);
ОсновнойОбъектАдресации = ДФ_ПолучитьОбъектАдресацииПоПредмету(БизнесПроцессОбъект,
ИмяПредмета,
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Роль,"ТипыОсновногоОбъектаАдресации"));
ДополнительныйОбъектАдресации = ДФ_ПолучитьОбъектАдресацииПоПредмету(БизнесПроцессОбъект,
ИмяПредмета,
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Роль,"ТипыДополнительногоОбъектаАдресации"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ПолныеРоли.Ссылка КАК ПолнаяРоль
|ИЗ
| Справочник.ПолныеРоли КАК ПолныеРоли
|ГДЕ
| ПолныеРоли.Владелец = &РольИсполнителя
| И ПолныеРоли.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации
| И ПолныеРоли.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации";
Запрос.УстановитьПараметр("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации);
Запрос.УстановитьПараметр("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации);
Запрос.УстановитьПараметр("РольИсполнителя", Роль);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.ПолнаяРоль;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
// Функция - Дф получить объект адресации по предмету
//
// Параметры:
// БизнесПроцессОбъект - БизнесПроцессОбъект
// ИмяПредмета - СправочникСсылка.ИменаПредметов
// ОбъектАдресации - ПланВидовХарактеристикСсылка.ОбъектыАдресацииЗадач
//
// Возвращаемое значение:
// Реквизит предмета бизнес-процесса по имени реквизита (тип значения - СправочникСсылка.Контрагенты,
// СправочникСсылка.Проекты, СправочникСсылка.СтруктураПредприятия, СправочникСсылка.Организации.
// Если ОбъектАдресации не заполнен, тогда возвращается значение "Неопределено"
//
Функция ДФ_ПолучитьОбъектАдресацииПоПредмету(БизнесПроцессОбъект, ИмяПредмета, ОбъектАдресации) Экспорт
СтрокаПредмета = БизнесПроцессОбъект.Предметы.Найти(ИмяПредмета,"ИмяПредмета");
Если СтрокаПредмета <> Неопределено Тогда
Если Не ЗначениеЗаполнено(СтрокаПредмета.Предмет) Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Автоподстановка не может быть выполнена, так как не указан предмет ""%1"" процесса.'"),
Строка(ИмяПредмета));
КонецЕсли;
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не найден предмет ""%1"" процесса.'"),
Строка(ИмяПредмета));
КонецЕсли;
ЗначениеРеквизита = Неопределено;
Предмет = СтрокаПредмета.Предмет;
ИмяРеквизита = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектАдресации,"ИмяПредопределенныхДанных");
Если ЗначениеЗаполнено(ИмяРеквизита) Тогда
Если Предмет.Метаданные().Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
ЗначениеРеквизита = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Предмет, ИмяРеквизита);
Если Не ЗначениеЗаполнено(ЗначениеРеквизита) Тогда
ЗначениеРеквизита = Неопределено;
КонецЕсли;
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не найден реквизит предмета ""%1"" процесса.'"),
Строка(ИмяПредмета));
КонецЕсли;
КонецЕсли;
Возврат ЗначениеРеквизита;
КонецФункции
В расширении изменения объекта проверяются другим способом. Если хотя бы один реквизит из документа изменен, тогда файлы, которые не заняты на редактирование, созданы по шаблону, не помечены на удаление обновляются данными документа.
Настройка данной функции выполняется в виде внутреннего/исходящего документа.
Отключение создания задачи ознакомления для бизнес-процессов "Согласование", "Утверждение", "Регистрация" (//infostart.ru/public/1161532/).
Данная функция работает только при создании процесса по шаблону. В шаблоне процесса добавлен реквизит "Создавать задачу ознакомления":
В данном реквизите настраивается вариант создания задачи ознакомления.
Для заполнения реквизита "Создавать задачу ознакомления" после обновления расширения запустите обработку "Перенос значения реквизита не создавать задачу ознакомления".
Запрет повторного запуска комплексного процесса по предмету.
При открытии формы комплексного процесса стоит проверка, если пользователь пытается запустить более 1 комплексного процесса по документу форма нового процесса не открывается и пользователю выдается предупреждение.
Настройки расширения находятся в отдельной подсистеме "Дополнительные функции":
Динамические роли включены по умолчанию без возможности отключения.
Пользовательские автоподстановки.
Добавлена новая функция "Пользовательские автоподстановки". С помощью данной функции можно добавлять собственные автоподстановки для шаблонов бизнес-процессов в режиме предприятия. Пользовательские автоподстановки находятся в подсистеме "Дополнительные функции":
В карточке пользовательской автоподстановки на закладке "Алгоритм" нужно написать программный код автоподстановки. Результат автоподстановки необходимо присвоить переменной "РезультатФункции". В коде можно обращаться к параметрам "Объект" (тип - БизнесПроцессОбъект), "ИмяПредмета" (тип - СправочникСсылка.ИменаПредметов), "ВходящиеЗначения" (значения, которые заполняются на закладке "Входящие значения" помещаются в структуру, к данным значениям можно обращаться в коде как к элементам обычной структуры по ключу). Если автоподстановка зависит от предмета процесса необходимо установить флаг "Зависит от предмета":
На закладке "ВходящиеЗначения" можно задать константы, к которым в дальнейшем можно будет обращаться в коде автоподстановки как к элементам обычной структуры (ВходящиеЗначения.тест):
Идею передачи входящих значений заимствовал в публикации //infostart.ru/public/1111403/.
Технически входящие значения реализованы с помощью реквизита типа "ХранилищеЗначения". В данный реквизит сохраняются данные в виде структуры, которые вводятся в таблице "Входящие значения".
На закладке "Тестирование" можно проверить автоподстановку с нужными параметрами (если они требуются), результат работы кода автоподстановки выводится в список значений:
Технически пользовательские автоподстановки реализованы следующим образом:
- В функции"ПолучитьСписокДоступныхФункций" общего модуля "ШаблоныБизнесПроцессов" добавляются автоподстановки из справочника.
Код добавления автоподстановок:
// Процедура - ДФ Добавить Пользовательские Автоподстановки
//
// Параметры:
// ДоступныеФункции - Список значений с доступными функциями
// ИменаПредметовДляФункций - массив - массив имен предметов для функций автоподстановки
// ВключатьНедоступные - булево - признак добавления в список недоступных функций автоподстановки
//
// Добавляет функции в список значений "ДоступныеФункции"
//
Процедура ДФ_ДобавитьПользовательскиеАвтоподстановки(Доступныефункции, ИменаПредметовДляФункций, ВключатьНедоступные) Экспорт
СтруктураОтбора = Новый Структура("ЗависитОтПредмета");
//Добавление автоподстановок, которые не зависят от предмета {{
СтруктураОтбора.ЗависитОтПредмета = Ложь;
ВыборкаАвтоподстановки = Справочники.ДФ_ПользовательскиеАвтоподстановки.ДФ_ПолучитьИспользуемыеАвтоподстановки();
Пока ВыборкаАвтоподстановки.НайтиСледующий(СтруктураОтбора) Цикл
ДоступныеФункции.Добавить("ПользовательскаяАвтоподстановка_" + ВыборкаАвтоподстановки.Наименование,
ВыборкаАвтоподстановки.Наименование);
КонецЦикла;
ВыборкаАвтоподстановки.Сбросить();
//Добавление автоподстановок, которые не зависят от предмета }}
//Добавление автоподстановок, которые зависят от предмета {{
СтруктураОтбора.ЗависитОтПредмета = Истина;
Если ИменаПредметовДляФункций <> Неопределено Тогда
Если ИменаПредметовДляФункций.Количество() > 0 Тогда
Для Каждого ИмяПредмета Из ИменаПредметовДляФункций Цикл
Пока ВыборкаАвтоподстановки.НайтиСледующий(СтруктураОтбора) Цикл
ДоступныеФункции.Добавить("ПользовательскаяАвтоподстановка_" + ВыборкаАвтоподстановки.Наименование,
Строка(ИмяПредмета) + "." + ВыборкаАвтоподстановки.Наименование);
КонецЦикла;
ВыборкаАвтоподстановки.Сбросить();
КонецЦикла;
ИначеЕсли ВключатьНедоступные Тогда
СтрокаИмениПредмета = НСтр("ru='Предмет'");
Пока ВыборкаАвтоподстановки.НайтиСледующий(СтруктураОтбора) Цикл
ДоступныеФункции.Добавить("ПользовательскаяАвтоподстановка_" + ВыборкаАвтоподстановки.Наименование,
Строка(ИмяПредмета) + "." + ВыборкаАвтоподстановки.Наименование, Истина);
КонецЦикла;
КонецЕсли;
КонецЕсли;
//Добавление автоподстановок, которые зависят от предмета }}
КонецПроцедуры
К имени функции автоподстановки добавляется префикс "ПользовательскаяАвтоподстановка_" для поиска элемента справочника с программным кодом при получении значения автоподстановки.
- В функцию "ПолучитьЗначениеАвтоподстановки" общего модуля "ШаблоныБизнесПроцессов" добавлена дополнительная проверка. В функции автоподстановки выполняется поиск префикса "ПользовательскаяАвтоподстановка_", если данный префикс найден, тогда выполняется поиск элемента справочника пользовательской автоподстановки по наименованию. Далее выполняется программный код элемента справочника. Запись пользовательских автоподстановок с одинаковым наименованием запрещена, поэтому при поиске элемента по наименованию будет найдено не более 1 автоподстановки.
Код дополнительной проверки
Попытка
//Дополнительные функции {{
Если СтрНайти(ФункцияАвтоподстановки,"ПользовательскаяАвтоподстановка_") > 0 Тогда
ФункцияАвтоподстановки = СтрЗаменить(ФункцияАвтоподстановки, "ПользовательскаяАвтоподстановка_", "");
ПользовательскаяАвтоподстановка = Справочники.ДФ_ПользовательскиеАвтоподстановки.ДФ_ПолучитьАвтоподстановку(ФункцияАвтоподстановки);
ВходящиеЗначения = ПользовательскаяАвтоподстановка.ВходящиеЗначения.Получить();
Выполнить(ПользовательскаяАвтоподстановка.ПрограммныйКод);
Иначе //Типовая обработка
Выполнить("РезультатФункции = " + ФункцияАвтоподстановки);
КонецЕсли;
//Дополнительные функции }}
Ограничение запуска бизнес-процессов по видам внутренних, входящих, исходящих документов.
Добавлена возможность ограничения запуска бизнес-процессов по видам внутренних, входящих, исходящих документов. Для того, чтобы включить данную функцию необходимо заполнить таблицу "Недоступные типы процессов для запуска по видам документов":
В таблице заполняется полная роль, подразделение, рабочая группа, пользователь для ограничения запуска определенного типа процесса. С помощью флага "Доступность" можно разрешить доступ определенному пользователю или группе пользователей к типу процесса. Например, если заполнить таблицу следующим образом:
То все исполнители роли "Директор" не смогут запускать указанные типы процессов, а пользователь "Федоров О.П." получит доступ к процессу "Исполнение":
Технически данная функция реализована следующим образом:
- Добавлена процедура "ДФ_ДобавитьВДеревоВариантыСозданияПроцессов" в общий модуль "ПомощникОтправить", которая вызывается после процедуры "ДобавитьВДеревоВариантыСозданияПроцессов" основной конфигурации. В данной процедуре происходит удаление недоступных типов процессов для запуска из дерева значений вариантов отправки согласно настройке.
Код общего модуля "ПомощникОтправить" из расширения
#Область ТиповыеПроцедурыИФункции
&После("ДобавитьВДеревоВариантыСозданияПроцессов")
Процедура ДФ_ДобавитьВДеревоВариантыСозданияПроцессов(Помощник) Экспорт
ДФ_ЗаполнитьДеревоВариантовПоПравамДоступа(Помощник)
КонецПроцедуры
#КонецОбласти
// Процедура - Д ф заполнить дерево вариантов по правам доступа
//
// Параметры:
// Помощник - Структура, см. общий модуль "ПомощникОтправить", функция "Помощник"
// Изменяет дерево вариантов отправки согласно записям в регистре сведений "ДФ_НедоступныеТипыПроцессовДляЗапуска"
Процедура ДФ_ЗаполнитьДеревоВариантовПоПравамДоступа(Помощник)
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
//Установка значений параметров
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Запрос.УстановитьПараметр("ОбъектыОтправки", Помощник.ОбъектыОтправки);
Запрос.УстановитьПараметр("РабочаяГруппаВсеПользователи", Справочники.РабочиеГруппы.ВсеПользователи);
Запрос.Текст = "ВЫБРАТЬ
| ДФ_НедоступныеТипыПроцессовДляЗапуска.ВидДокумента КАК ВидДокумента,
| ДФ_НедоступныеТипыПроцессовДляЗапуска.ТипПроцесса КАК ТипПроцесса,
| МАКСИМУМ(ДФ_НедоступныеТипыПроцессовДляЗапуска.Доступность) КАК Доступность
|ИЗ
| РегистрСведений.ДФ_НедоступныеТипыПроцессовДляЗапуска КАК ДФ_НедоступныеТипыПроцессовДляЗапуска
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ВнутренниеДокументы.ВидДокумента КАК ВидДокумента
| ИЗ
| Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
| ГДЕ
| ВнутренниеДокументы.Ссылка В(&ОбъектыОтправки)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ИсходящиеДокументы.ВидДокумента
| ИЗ
| Справочник.ИсходящиеДокументы КАК ИсходящиеДокументы
| ГДЕ
| ИсходящиеДокументы.Ссылка В(&ОбъектыОтправки)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВходящиеДокументы.ВидДокумента
| ИЗ
| Справочник.ВходящиеДокументы КАК ВходящиеДокументы
| ГДЕ
| ВходящиеДокументы.Ссылка В(&ОбъектыОтправки)) КАК ТаблицаВидыДокументов
| ПО ДФ_НедоступныеТипыПроцессовДляЗапуска.ВидДокумента = ТаблицаВидыДокументов.ВидДокумента
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СведенияОПользователяхДокументооборот.Подразделение КАК Контейнер
| ИЗ
| РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияОПользователяхДокументооборот
| ГДЕ
| СведенияОПользователяхДокументооборот.Пользователь = &Пользователь
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РабочиеГруппыСостав.Ссылка
| ИЗ
| Справочник.РабочиеГруппы.Состав КАК РабочиеГруппыСостав
| ГДЕ
| РабочиеГруппыСостав.Пользователь = &Пользователь
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ИсполнителиЗадач.РольИсполнителя
| ИЗ
| РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач
| ГДЕ
| ИсполнителиЗадач.Исполнитель = &Пользователь
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| &Пользователь
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| &РабочаяГруппаВсеПользователи) КАК ТаблицаКонтейнерыПользователя
| ПО ДФ_НедоступныеТипыПроцессовДляЗапуска.Пользователь = ТаблицаКонтейнерыПользователя.Контейнер
|
|СГРУППИРОВАТЬ ПО
| ДФ_НедоступныеТипыПроцессовДляЗапуска.ВидДокумента,
| ДФ_НедоступныеТипыПроцессовДляЗапуска.ТипПроцесса";
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
КоллекцияСтрокВариантов = Помощник.ДеревоВариантов.Строки;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не Выборка.Доступность Тогда
Если Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Исполнение Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныИсполнения.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.КомплексныйПроцесс Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныКомплексныхБизнесПроцессов.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Ознакомление Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныОзнакомления.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Приглашение Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныПриглашения.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Рассмотрение Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныРассмотрения.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Регистрация Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныРегистрации.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Согласование Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныСогласования.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.ОбработкаВнутреннегоДокумента Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныСоставныхБизнесПроцессов.ОбработкаВнутреннегоДокументаПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.ОбработкаВходящегоДокумента Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныСоставныхБизнесПроцессов.ОбработкаВходящегоДокументаПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.ОбработкаИсходящегоДокумента Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныСоставныхБизнесПроцессов.ОбработкаИсходящегоДокументаПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.Утверждение Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти(Справочники.ШаблоныУтверждения.ПоУмолчанию, "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
ИначеЕсли Выборка.ТипПроцесса = Перечисления.ДФ_ТипыПроцессов.ДругиеВарианты Тогда
СтрокаДерева = КоллекцияСтрокВариантов.Найти("ДругиеВариантыСозданияПроцессов", "Вариант");
Если ЗначениеЗаполнено(СтрокаДерева) Тогда
КоллекцияСтрокВариантов.Удалить(СтрокаДерева);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Указание минут и секунд в правилах эскалации задач.
В правила эскалации задач добавлена возможность указания минут и секунд:
Автоматическое расширение рабочей группы связанных документов.
В справочник "Типы связей" добавлен реквизит "Автоматически вести состав участников рабочей группы":
При установке данного флага состав рабочей группы для связанных документов по данному типу связи будет вестись автоматически.
Пример:
При установке связи "Договор" из документа "Закупка дисков для СХД" участники рабочей группы документа "Закупка дисков для СХД" будут автоматически перенесены в связанный договор:
При дальнейшем изменении рабочей группы документа "Закупка дисков для СХД" новые пользователи, которые были добавлены в рабочую группу документа будут автоматически перенесены в документ "Договор на поставку бетона".
Автоматическое создание делегирования прав заместителям при создании отсутствия.
При создании документа "Отсутствие" автоматически создаются делегирования прав доступа заместителям. Данная функция работает только для новых документов отсутствия.
Алгоритмы обработки задач и бизнес-процессов.
В шаблоны бизнес-процессов добавлены закладки "Назначения алгоритмов обработки задач", "Назначения алгоритмов обработки процессов":
На данных закладках можно назначить произвольные алгоритмы, которые будут выполняться перед записью задачи или бизнес-процесса. В дальнейшем будут добавлено событие "При записи".
На данный момент для выбора доступно только событие перед записью:
Для переноса настроенных алгоритмов из старой версии (до 2.1.27.1) расширения запустите обарботку "Перенос алгоритмов в новые объекты" из подсистемы "Дополнительные функции". В обработке нажмите кнопку "Запустить перенос".
Для переноса алгоритмов в единый справочник из старой версии (до 2.1.18.12) запустите обработку "Перенос алгоритмов в новый справочник, изменение назначений алгоритмов обработки". В обработке нажмите кнопку "Запустить перенос".
Отображение связей предметов на формах выполнения задач.
Добавлено отображение связанных документов, файлов связанных документов на формах выполнения задач, на форме "Задачи мне":
Отображение листа согласования на форме выполнения бизнес-процесса "Утверждение/Подписание".
Добавлено отображение листа согласования на форму выполнения утверждения/подписания:
Перенос файлов из задачи в предметы процесса.
Настройка переноса файлов из задачи в предметы процесса настраивается в шаблоне процесса:
В настройке необходимо указать имя предмета, в который необходимо переносить файл. При включенной настройке файлы не будут дублироваться в задаче. При добавлении файла в задачу файл будет добавлен в предмет в процесса.
Автоматическое добавление подразделения ответственного/подготовившего/подразделения из документа в рабочую группу документа.
Добавлена функция "Автоматическое добавление подразделения ответственного/подготовившего/подразделения из документа в рабочую группу документа" для внутренних, входящих, исходящих документов.
Настройка выполняется в виде документа:
Запрет интерактивного создания документов.
Добавлена функция "Запрет интерактивного создания документов" для внутренних, входящих, исходящих документов.
Настройка выполняется в виде документа:
Обновление 2.1.18.1:
- Добавлен механизм пользовательских автоподстановок
Обновление 2.1.18.11:
- Добавлена возможность отключения создания задачи ознакомления для регистрации и утверждения/подписания. Функция работает также как и отключение создания задачи ознакомления для согласования.
- В пользовательскую автоподстановку добавлена возможность прикрепления ссылки на файл (удобно хранить файлы с внешними обработками тестирования и т.д.):
Такой способ является не совсем оптимальным, но через расширение проблематично подключить собственный объект к посистеме хранения файлов, если перенести доработку в основную конфигурацию, то естественно удобнее использовать существующую подсистему хранения файлов.
Обновление 2.1.19.22:
- Поднят режим совместимости расширения до версии 8.3.14.
- Функции расширения переведены на новую версию конфигурации.
Обновление 2.1.25.5:
- В правила эскалации задач добавлена возможность указания минут и секунд
Обновление 2.1.26.2:
- Автоматическое расширение рабочей группы связанных документов
- Автоматическое создание делегирования прав заместителям при создании отсутствия
- Выполнение произвольного алгоритма перед записью задачи
Обновление 2.1.26.2.1:
- Отображение связей предметов в формах выполнения задач
Обновление 2.1.26.2.2:
- Отображение листа согласования в форме выполнения бизнес-процесса "Утверждение/Подписание"
Обновление 2.1.26.2.4:
- В пользовательские автоподстановки добавлен реквизит "ЗависитОтПредмета" для разделения автоподстановок, которые зависят от предмета процесса
- Выполнение произвольного алгоритма перед записью бизнес-процесса
Обновление 2.1.26.2.5:
- Удалены условия на пустую ссылку и состояние бизнес-процесса в произвольных алгоритмах перед записью задачи и перед записью бизнес-процесса
Обновление 2.1.27.1:
- Изменена логика работы алгоритмов перед записью задач и процессов
Обновление 2.1.27.2:
- Изменена логика работы отключения создания задач ознакомления для бизнес-процессов "Утверждение / Подписание", "Регистрация", "Согласование". Добавлена возможность настройки отключения создания задачи ознакомления в зависимости от результата выполнения процесса
- Добавлена новая функция - перенос файлов из задачи в предметы процесса
Обновление 2.1.18.12:
- Добавлена функция "Автоматическое добавление подразделения ответственного/подготовившего/подразделения из документа в рабочую группу документа" для внутренних, входящих, исходящих документов
- Добавлена функция "Запрет интерактивного создания документов"
- Алгоритмы обработки задач и бизнес-процессов перенесены в единый справочник
Обновление 2.1.28.14:
- Настройка функции "Автоматическое обновление файлов данными владельца" перенесена в вид внутреннего/исходящего документа
- Исправлена ошибка записи документа при автоматическом расширении рабочей группы документов
Обновление 2.1.28.15:
- Исправлена ошибка при открытии формы "Задачи мне"
Обновление 2.1.28.16:
- Реквизиты с префиксом "Удалить" убраны с форм "Назначения алгоритмов обработки задач", "Назначения алгоритмов обработки процессов"
Данное расширение тестировалось на версии 2.1.28.14 1С:Документооборот КОРП.