Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save pumbaEO/41235ad23388fe7606d74879a670c880 to your computer and use it in GitHub Desktop.
Save pumbaEO/41235ad23388fe7606d74879a670c880 to your computer and use it in GitHub Desktop.
Доработка ДО с автосозданием Ролей исполнителей
Процедура СоздатьПроцессПоЭтапуДоЗаписиПроцесса(КомплексныйПроцессОбъект, СозданныйПроцессОбъект) Экспорт
СозданныйПроцессОбъект.Проект = КомплексныйПроцессОбъект.Проект;
СозданныйПроцессОбъект.ПроектнаяЗадача = КомплексныйПроцессОбъект.ПроектнаяЗадача;
РаботаСБизнесПроцессамиВызовСервера.СкопироватьЗначенияДопРеквизитов(КомплексныйПроцессОбъект, СозданныйПроцессОбъект);
ОсновнойПредметСтрока = СозданныйПроцессОбъект.Предметы.Найти(Перечисления.РолиПредметов.Основной, "РольПредмета");
Если ОсновнойПредметСтрока <> Неопределено Тогда
ОсновнойПредмет = ОсновнойПредметСтрока.Предмет;
МетаданныеПроцесса = СозданныйПроцессОбъект.Метаданные();
ЕстьТаблицаИсполнители = МетаданныеПроцесса.ТабличныеЧасти.Найти("Исполнители") <> Неопределено;
Если ЕстьТаблицаИсполнители Тогда
Для каждого Строка из СозданныйПроцессОбъект.Исполнители Цикл
Строка.Исполнитель = ОпределитьПолнуюРоль(ОсновнойПредмет, Строка.Исполнитель);
КонецЦикла;
Иначе
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Исполнитель", МетаданныеПроцесса) Тогда
СозданныйПроцессОбъект.Исполнитель = ОпределитьПолнуюРоль(ОсновнойПредмет, СозданныйПроцессОбъект.Исполнитель);
КонецЕсли;
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("КонтролерИсполнения", МетаданныеПроцесса) Тогда
СозданныйПроцессОбъект.КонтролерИсполнения = ОпределитьПолнуюРоль(ОсновнойПредмет, СозданныйПроцессОбъект.КонтролерИсполнения);
КонецЕсли;
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Контролер", МетаданныеПроцесса) Тогда
СозданныйПроцессОбъект.Контролер = ОпределитьПолнуюРоль(ОсновнойПредмет, СозданныйПроцессОбъект.Контролер);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ОпределитьОбъектАдресацииПоОсновномуПредмету(ОсновнойПредмет, ТипОбъектаАдресации)
Если ТипОбъектаАдресации.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ШаблоныВнутреннихДокументов")) Тогда
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнойПредмет, "Шаблон");
ИначеЕсли ТипОбъектаАдресации.ТипЗначения.СодержитТип(Тип("СправочникСсылка.Организации")) Тогда
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОсновнойПредмет, "Организация");
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ОпределитьПолнуюРоль(ОсновнойПредмет, Исполнитель)
Если ТипЗнч(Исполнитель) <> Тип("СправочникСсылка.ПолныеРоли") Тогда
Возврат Исполнитель;
КонецЕсли;
РеквизитыАдресации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Исполнитель,
"ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации,Владелец,Владелец.ИспользуетсяСОбъектамиАдресации, Владелец.ТипыДополнительногоОбъектаАдресации, Владелец.ТипыОсновногоОбъектаАдресации");
Если РеквизитыАдресации.ВладелецИспользуетсяСОбъектамиАдресации = Ложь Тогда
Возврат Исполнитель;
КонецЕсли;
ОсновнойОбъектАдресации = РеквизитыАдресации.ОсновнойОбъектАдресации;
ДополнительныйОбъектАдресации = РеквизитыАдресации.ДополнительныйОбъектАдресации;
Если НЕ ЗначениеЗаполнено(ОсновнойОбъектАдресации) И ЗначениеЗаполнено(РеквизитыАдресации.ВладелецТипыОсновногоОбъектаАдресации) Тогда
ОсновнойОбъектАдресации = ОпределитьОбъектАдресацииПоОсновномуПредмету(ОсновнойПредмет, РеквизитыАдресации.ВладелецТипыОсновногоОбъектаАдресации);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ДополнительныйОбъектАдресации) И ЗначениеЗаполнено(РеквизитыАдресации.ВладелецТипыДополнительногоОбъектаАдресации) Тогда
ДополнительныйОбъектАдресации = ОпределитьОбъектАдресацииПоОсновномуПредмету(ОсновнойПредмет, РеквизитыАдресации.ВладелецТипыДополнительногоОбъектаАдресации);
КонецЕсли;
ПолнаяРоль = Справочники.ПолныеРоли.НайтиСоздатьПолнуюРоль(РеквизитыАдресации.Владелец, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации);
Возврат ПолнаяРоль;
КонецФункции //ОпределитьПолнуюРоль
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment