#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьСостояниеЭлементов();
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект)
Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ОсновнойОбъектАдресации) Тогда
ТекущийОбъект.ОсновнойОбъектАдресации = Неопределено;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ДополнительныйОбъектАдресации) Тогда
ТекущийОбъект.ДополнительныйОбъектАдресации = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_РолеваяАдресация", ПараметрыЗаписи, Запись.РольИсполнителя);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура РольИсполнителяПриИзменении(Элемент)
Запись.ОсновнойОбъектАдресации = Неопределено;
Запись.ДополнительныйОбъектАдресации = Неопределено;
УстановитьСостояниеЭлементов();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьСостояниеЭлементов()
ТипыОсновногоОбъектаАдресации = Неопределено;
ТипыДополнительногоОбъектаАдресации = Неопределено;
ИспользуетсяСОбъектамиАдресации = Ложь;
ИспользуетсяБезОбъектовАдресации = Ложь;
ЗаданаРоль = НЕ Запись.РольИсполнителя.Пустая();
Если ЗаданаРоль Тогда
СвойстваРоли = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Запись.РольИсполнителя,
"ТипыОсновногоОбъектаАдресации,ТипыДополнительногоОбъектаАдресации,ИспользуетсяСОбъектамиАдресации,ИспользуетсяБезОбъектовАдресации");
ТипыОсновногоОбъектаАдресации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
СвойстваРоли.ТипыОсновногоОбъектаАдресации, "ТипЗначения");
ТипыДополнительногоОбъектаАдресации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(
СвойстваРоли.ТипыДополнительногоОбъектаАдресации, "ТипЗначения");
ИспользуетсяСОбъектамиАдресации = СвойстваРоли.ИспользуетсяСОбъектамиАдресации;
ИспользуетсяБезОбъектовАдресации = СвойстваРоли.ИспользуетсяБезОбъектовАдресации;
КонецЕсли;
ЗаголовокОсновногоОбъектаАдресации = ?(ЗаданаРоль, Строка(СвойстваРоли.ТипыОсновногоОбъектаАдресации), "");
ЗаголовокДополнительногоОбъектаАдресации = ?(ЗаданаРоль, Строка(СвойстваРоли.ТипыДополнительногоОбъектаАдресации), "");
ЗаданыТипыОсновногоОбъектаАдресации = ЗаданаРоль И ИспользуетсяСОбъектамиАдресации
И ЗначениеЗаполнено(ТипыОсновногоОбъектаАдресации);
ЗаданыТипыДополнительногоОбъектаАдресации = ЗаданаРоль И ИспользуетсяСОбъектамиАдресации
И ЗначениеЗаполнено(ТипыДополнительногоОбъектаАдресации);
Элементы.ОсновнойОбъектАдресации.Доступность = ЗаданыТипыОсновногоОбъектаАдресации;
Элементы.ДополнительныйОбъектАдресации.Доступность = ЗаданыТипыДополнительногоОбъектаАдресации;
Элементы.ОсновнойОбъектАдресации.АвтоОтметкаНезаполненного = ЗаданыТипыОсновногоОбъектаАдресации
И НЕ ИспользуетсяБезОбъектовАдресации;
Если ТипыОсновногоОбъектаАдресации <> Неопределено Тогда
Элементы.ОсновнойОбъектАдресации.ОграничениеТипа = ТипыОсновногоОбъектаАдресации;
КонецЕсли;
Элементы.ОсновнойОбъектАдресации.Заголовок = ЗаголовокОсновногоОбъектаАдресации;
Элементы.ДополнительныйОбъектАдресации.АвтоОтметкаНезаполненного = ЗаданыТипыДополнительногоОбъектаАдресации
И НЕ ИспользуетсяБезОбъектовАдресации;
Если ТипыДополнительногоОбъектаАдресации <> Неопределено Тогда
Элементы.ДополнительныйОбъектАдресации.ОграничениеТипа = ТипыДополнительногоОбъектаАдресации;
КонецЕсли;
Элементы.ДополнительныйОбъектАдресации.Заголовок = ЗаголовокДополнительногоОбъектаАдресации;
УстановитьДоступностьРоли(Запись.РольИсполнителя);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьРоли(Роль)
РольДоступнаДляВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей");
Если Не РольДоступнаДляВнешнихПользователей Тогда
ВариантНазначения = "ТолькоПользователи";
РольДоступнаДляПользователей = Истина;
Иначе
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РолиИсполнителейНазначение.ТипПользователей
|ИЗ
| Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение
|ГДЕ
| РолиИсполнителейНазначение.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Роль);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
РольДоступнаДляПользователей = Ложь;
УРолиНеНазначеныВнешниеПользователи = Истина;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.ТипПользователей = Справочники.Пользователи.ПустаяСсылка() Тогда
РольДоступнаДляПользователей = Истина;
Иначе
УРолиНеНазначеныВнешниеПользователи = Ложь;
КонецЕсли;
КонецЦикла;
Если УРолиНеНазначеныВнешниеПользователи Тогда
РольДоступнаДляВнешнихПользователей = Ложь;
КонецЕсли;
КонецЕсли;
Если РольДоступнаДляВнешнихПользователей И РольДоступнаДляПользователей Тогда
Элементы.Исполнитель.ВыбиратьТип = Истина;
Иначе
Если РольДоступнаДляВнешнихПользователей И ТипЗнч(Запись.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда
Запись.Исполнитель = Справочники.ВнешниеПользователи.ПустаяСсылка();
ИначеЕсли ТипЗнч(Запись.Исполнитель) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
Запись.Исполнитель = Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
Элементы.Исполнитель.ВыбиратьТип = Ложь;
КонецЕсли;
КонецПроцедуры
#КонецОбласти