#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НаименованиеОрганизации = "";
Если Параметры.Отбор.Свойство("ГоловнаяОрганизация") Тогда
ВыборПоГоловнойОрганизации = Истина;
Если Не ЗначениеЗаполнено(Параметры.Отбор.ГоловнаяОрганизация) Тогда
Параметры.Отбор.Удалить("ГоловнаяОрганизация");
КонецЕсли;
КонецЕсли;
Если Параметры.Отбор.Свойство("Организация") Тогда
Если ЗначениеЗаполнено(Параметры.Отбор.Организация) Тогда
ВыборПоГоловнойОрганизации = Ложь;
Иначе
Параметры.Отбор.Удалить("Организация");
КонецЕсли;
КонецЕсли;
Если Параметры.Отбор.Свойство("Роль") И ЗначениеЗаполнено(Параметры.Отбор.Роль) Тогда
Если ТипЗнч(Параметры.Отбор.Роль) = Тип("Массив") Тогда
РольФизическогоЛица = Новый ФиксированныйМассив(Параметры.Отбор.Роль);
Иначе
РольФизическогоЛица = Параметры.Отбор.Роль;
КонецЕсли;
Параметры.Отбор.Удалить("Роль");
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Роль", РольФизическогоЛица);
Иначе
РольФизическогоЛица = Перечисления.РолиФизическихЛиц.ПустаяСсылка();
Если Параметры.Отбор.Свойство("Роль") Тогда
Параметры.Отбор.Удалить("Роль");
КонецЕсли;
КонецЕсли;
Если Параметры.Отбор.Свойство("Организация") Тогда
Организация = Параметры.Отбор.Организация;
ИначеЕсли Параметры.Отбор.Свойство("ГоловнаяОрганизация") Тогда
Организация = Параметры.Отбор.ГоловнаяОрганизация;
Иначе
ЗапрашиваемыеЗначения = Новый Структура("Организация", "Организация");
ЗарплатаКадры.ЗаполнитьЗначенияВФорме(ЭтаФорма, ЗапрашиваемыеЗначения);
Если ВыборПоГоловнойОрганизации И ЗначениеЗаполнено(Организация) Тогда
Организация = ЗарплатаКадры.ГоловнаяОрганизация(Организация);
Параметры.Отбор.Вставить("ГоловнаяОрганизация", Организация);
Иначе
Параметры.Отбор.Вставить("Организация", Организация);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Организация) Тогда
ВызватьИсключение НСтр("ru='Необходимо указать организацию'");
КонецЕсли;
НаименованиеОрганизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "Наименование");
Если ТипЗнч(РольФизическогоЛица) = Тип("ФиксированныйМассив") Тогда
РольВоМножественномЧисле = НСтр("ru = 'Получатели доходов'");
Иначе
РольВоМножественномЧисле = ФизическиеЛицаЗарплатаКадрыРасширенный.ПредставлениеРолиВоМножественномЧисле(РольФизическогоЛица);
КонецЕсли;
Заголовок = РольВоМножественномЧисле + " (" + НаименованиеОрганизации +")";
КомандаУдалитьИзСпискаЗаголовок = "";
КомандаУдалитьИзСпискаВидимость = Истина;
Если РольФизическогоЛица = Перечисления.РолиФизическихЛиц.Акционер Тогда
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок = НСтр("ru = 'Выбирать из полного списка физических лиц'");
Элементы.Инфонадпись.Заголовок =
НСтр("ru = 'Сейчас в списке отображаются только те акционеры, которые ранее уже вводились в документы.
|Вы можете создать нового акционера.
|Не создавайте нового акционера если он является сотрудником организации и уже введен в систему - просто установите флажок ""Выбирать из состава сотрудников"".'");
КомандаУдалитьИзСпискаЗаголовок = НСтр("ru = 'Удалить из списка акционеров'");
ИначеЕсли РольФизическогоЛица = Перечисления.РолиФизическихЛиц.Сотрудник Тогда
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок = НСтр("ru = 'Выбирать из полного списка лиц'");
Элементы.Инфонадпись.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В списке отображаются только те лица, с которыми заключались трудовые договора или договора на выполнение работ.
|Для того, чтобы снять это ограничение, установите флажок ""%1"".'"),
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок);
КомандаУдалитьИзСпискаВидимость = Ложь;
ИначеЕсли РольФизическогоЛица = Перечисления.РолиФизическихЛиц.БывшийСотрудник Тогда
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок = НСтр("ru = 'Выбирать из полного списка сотрудников'");
Элементы.Инфонадпись.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В списке отображаются только те сотрудники, которым ранее уже выполнялись выплаты после прекращения трудового договора (увольнения).
|Для того, чтобы снять это ограничение, установите флажок ""%1"".'"),
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок);
КомандаУдалитьИзСпискаЗаголовок = НСтр("ru = 'Удалить из списка бывших сотрудников'");
ИначеЕсли РольФизическогоЛица = Перечисления.РолиФизическихЛиц.ПрочийПолучательДоходов
Или ТипЗнч(РольФизическогоЛица) = Тип("ФиксированныйМассив") Тогда
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок = НСтр("ru = 'Выбирать из полного списка физических лиц'");
Элементы.Инфонадпись.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В списке отображаются только те лица, которые ранее уже получали доходы.
|Для того, чтобы снять это ограничение, установите флажок ""%1"".'"),
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок);
КомандаУдалитьИзСпискаЗаголовок = НСтр("ru = 'Удалить из списка получателей доходов'");
ИначеЕсли РольФизическогоЛица = Перечисления.РолиФизическихЛиц.РаздатчикЗарплаты Тогда
Элементы.Инфонадпись.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В списке отображаются только те раздатчики зарплаты, которые ранее уже выбирались.
|Для того, чтобы выбрать раздатчика зарплаты из полного списка сотрудников, установите флажок ""%1"".'"),
Элементы.ВыбиратьИзСотрудниковОрганизации.Заголовок);
КомандаУдалитьИзСпискаЗаголовок = НСтр("ru = 'Удалить из списка раздатчиков'");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"Список",
"ИзменятьСоставСтрок",
Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"СписокСоздать",
"Видимость",
Ложь);
ИначеЕсли ЗначениеЗаполнено(РольФизическогоЛица) Тогда
РольВРодительномПадеже = ФизическиеЛицаЗарплатаКадрыРасширенный.ПредставлениеРолиВРодительномПадеже(РольФизическогоЛица);
Элементы.Инфонадпись.Заголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Сейчас в списке отображаются только те %1, которые ранее уже вводились в документы.
|Вы можете создать нового %2.
|Не создавайте нового %3 если он является сотрудником организации и уже введен в систему - просто установите флажок ""Выбирать из состава сотрудников"".'"),
НРег(РольВоМножественномЧисле),
РольВРодительномПадеже,
РольВРодительномПадеже);
КомандаУдалитьИзСпискаЗаголовок =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Удалить из списка %1'"), РольВоМножественномЧисле);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"НадписиГруппа",
"Видимость",
Ложь);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"СписокУдалитьИзСписка",
"Заголовок",
КомандаУдалитьИзСпискаЗаголовок);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"СписокУдалитьИзСписка",
"Видимость",
КомандаУдалитьИзСпискаВидимость);
Если Параметры.РежимВыбора И Параметры.ЗакрыватьПриВыборе = Ложь Тогда
Элементы.Список.МножественныйВыбор = Истина;
Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный;
КонецЕсли;
АдресСпискаПодобранныхФизическихЛиц = "";
Если Параметры.Свойство("АдресСпискаПодобранныхФизическихЛиц", АдресСпискаПодобранныхФизическихЛиц) Тогда
Если НЕ ПустаяСтрока(АдресСпискаПодобранныхФизическихЛиц) Тогда
СписокПодобранных.ЗагрузитьЗначения(ПолучитьИзВременногоХранилища(АдресСпискаПодобранныхФизическихЛиц));
КонецЕсли;
КонецЕсли;
УстановитьСписокПодобранныхФизическихЛиц();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьЗапросДинамическогоСписка();
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
Если ВыбранныеФизическиеЛица.Количество() > 0 Тогда
ОповеститьОВыборе(ВыбранныеФизическиеЛица.ВыгрузитьЗначения());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ЭтотОбъект.ЗакрыватьПриВыборе И ИмяСобытия = "СозданоФизическоеЛицо" И Источник = Элементы.Список Тогда
ОповеститьОВыборе(Параметр);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ВыбиратьИзСотрудниковОрганизацииПриИзменении(Элемент)
ИзменитьСоставФизическихЛиц();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
&НаКлиенте
Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВыбиратьИзСоставаСотрудников Тогда
ЗаписатьНовуюРоль(Значение);
КонецЕсли;
Если ТипЗнч(Значение) = Тип("Массив") Тогда
СписокЗначений = Значение;
Иначе
СписокЗначений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
КонецЕсли;
Если СписокЗначений.Количество() > 0 Тогда
Если Элементы.Список.МножественныйВыбор Тогда
ОбновитьСписокПодобранных(СписокЗначений);
Если СписокЗначений.Количество() > 1 Тогда
Закрыть();
КонецЕсли;
Иначе
Если СписокПодобранных.НайтиПоЗначению(СписокЗначений[0]) = Неопределено Тогда
ОповеститьОВыборе(СписокЗначений[0]);
Иначе
Закрыть();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если ЗначениеЗаполнено(РольФизическогоЛица) Тогда
Отказ = Истина;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("РольФизическогоЛица", РольФизическогоЛица);
ПараметрыОткрытия.Вставить("Организация", Организация);
ПараметрыОткрытия.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ПараметрыОткрытия.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Справочник.ФизическиеЛица.ФормаОбъекта", ПараметрыОткрытия, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьИзСписка(Команда)
УдалитьИзСпискаНаСервере();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
&НаСервере
Процедура СписокПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка)
УстановитьЗапросДинамическогоСписка();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ИзменитьСоставФизическихЛиц()
Если ТипЗнч(РольФизическогоЛица) = Тип("ФиксированныйМассив") Тогда
РольФизическогоЛицаДляПроверки = Перечисления.РолиФизическихЛиц.ПрочийПолучательДоходов;
Иначе
РольФизическогоЛицаДляПроверки = РольФизическогоЛица;
КонецЕсли;
Если ВыбиратьИзСоставаСотрудников Тогда
Если РольФизическогоЛицаДляПроверки <> Перечисления.РолиФизическихЛиц.ПрочийПолучательДоходов
И РольФизическогоЛицаДляПроверки <> Перечисления.РолиФизическихЛиц.Акционер Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Роль", Перечисления.РолиФизическихЛиц.Сотрудник);
Иначе
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Роль");
КонецЕсли;
Если РольФизическогоЛицаДляПроверки = Перечисления.РолиФизическихЛиц.ПрочийПолучательДоходов
ИЛИ РольФизическогоЛицаДляПроверки = Перечисления.РолиФизическихЛиц.Акционер Тогда
Если ВыборПоГоловнойОрганизации Тогда
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "ГоловнаяОрганизация");
Иначе
ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Организация");
КонецЕсли;
КонецЕсли;
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Роль", РольФизическогоЛица);
КонецЕсли;
Если НЕ ВыбиратьИзСоставаСотрудников
ИЛИ РольФизическогоЛицаДляПроверки <> Перечисления.РолиФизическихЛиц.ПрочийПолучательДоходов
И РольФизическогоЛицаДляПроверки <> Перечисления.РолиФизическихЛиц.Акционер Тогда
Если ВыборПоГоловнойОрганизации Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ГоловнаяОрганизация", Организация);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", Организация);
КонецЕсли;
КонецЕсли;
УстановитьЗапросДинамическогоСписка();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНовуюРоль(Знач ФизическоеЛицо)
Если ТипЗнч(РольФизическогоЛица) = Тип("ПеречислениеСсылка.РолиФизическихЛиц") Тогда
НазначаемаяРоль = РольФизическогоЛица;
Иначе
НазначаемаяРоль = Перечисления.РолиФизическихЛиц.ПрочийПолучательДоходов;
КонецЕсли;
РегистрыСведений.РолиФизическихЛиц.УстановитьРольФизическогоЛица(
ФизическоеЛицо, Организация, НазначаемаяРоль);
КонецПроцедуры
&НаСервере
Процедура УдалитьИзСпискаНаСервере()
РегистрыСведений.РолиФизическихЛиц.УдалитьРольФизическогоЛица(
Элементы.Список.ТекущаяСтрока, Организация, РольФизическогоЛица);
Элементы.Список.Обновить();
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокПодобранных(Значение)
Если ТипЗнч(Значение) = Тип("Массив") Тогда
СписокЗначений = Значение;
Иначе
СписокЗначений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Значение);
КонецЕсли;
Для каждого ВыбранноеЗначение Из СписокЗначений Цикл
Если СписокПодобранных.НайтиПоЗначению(ВыбранноеЗначение) = Неопределено Тогда
СписокПодобранных.Добавить(ВыбранноеЗначение);
ВыбранныеФизическиеЛица.Добавить(ВыбранноеЗначение);
КонецЕсли;
КонецЦикла;
УстановитьСписокПодобранныхФизическихЛиц();
КонецПроцедуры
&НаСервере
Процедура УстановитьСписокПодобранныхФизическихЛиц()
ЭлементУсловногоОформления = Неопределено;
Для каждого ЭлементОформления Из УсловноеОформление.Элементы Цикл
Если ЭлементОформления.Представление = НСтр("ru='Выделение подобранных'") Тогда
ЭлементУсловногоОформления = ЭлементОформления;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементУсловногоОформления <> Неопределено Тогда
ЭлементУсловногоОформления.Отбор.Элементы[0].ПравоеЗначение = СписокПодобранных;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗапросДинамическогоСписка()
НастройкиСписка = Новый Структура;
НастройкиСписка.Вставить("УстановленОтборПоРоли", Ложь);
НастройкиСписка.Вставить("УстановленОтборПоОрганизации", Ложь);
НастройкиСписка.Вставить("ОтборПоРоли");
НастройкиСписка.Вставить("ОтборПоОрганизации");
НастройкиСписка.Вставить("ОтборыСписка", Новый Массив);
КоллекцияОтборов = Новый Массив;
КоллекцияОтборов.Добавить(Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы);
КоллекцияОтборов.Добавить(Список.КомпоновщикНастроек.Настройки.Отбор.Элементы);
ПользовательскиеОтборы = СотрудникиКлиентСерверРасширенный.ПользовательскиеОтборы(Список);
Если ПользовательскиеОтборы <> Неопределено Тогда
КоллекцияОтборов.Добавить(ПользовательскиеОтборы);
КонецЕсли;
Для каждого ЭлементыОтбора Из КоллекцияОтборов Цикл
Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Если ЭлементОтбора.Использование Тогда
Если ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Тогда
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
НастройкиСписка.ОтборыСписка, Строка(ЭлементОтбора.ЛевоеЗначение),
СотрудникиФормыРасширенный.ВидСравненияЗапроса(ЭлементОтбора.ВидСравнения), ЭлементОтбора.ПравоеЗначение);
КонецЕсли;
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Роль") Тогда
НастройкиСписка.УстановленОтборПоРоли = Истина;
НастройкиСписка.ОтборПоРоли = ЭлементОтбора.ПравоеЗначение;
КонецЕсли;
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация") Тогда
НастройкиСписка.УстановленОтборПоОрганизации = Истина;
НастройкиСписка.ОтборПоОрганизации = ЭлементОтбора.ПравоеЗначение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если Не СотрудникиФормыРасширенный.ОтборыУстанавливались(ЭтаФорма, ОбщегоНазначения.СкопироватьРекурсивно(НастройкиСписка.ОтборыСписка)) Тогда
ЗапросСписка = ЗапросДинамическогоСписка(НастройкиСписка.ОтборыСписка);
Если ЗапросСписка.Параметры.Количество() > 0 Тогда
Список.ТекстЗапроса = ЗапросСписка.Текст;
Для каждого ПараметрЗапроса Из ЗапросСписка.Параметры Цикл
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(
Список, ПараметрЗапроса.Ключ, ПараметрЗапроса.Значение);
КонецЦикла;
КонецЕсли;
УстановленныеОтборыСписка = Новый ФиксированныйМассив(НастройкиСписка.ОтборыСписка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗапросДинамическогоСписка(ОтборыСписка)
Запрос = Новый Запрос;
ТекстОтбораДанных = "";
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СправочникФизическиеЛица.Ссылка КАК Ссылка,
| СправочникФизическиеЛица.ПометкаУдаления КАК ПометкаУдаления,
| СправочникФизическиеЛица.Родитель КАК Родитель,
| СправочникФизическиеЛица.ЭтоГруппа КАК ЭтоГруппа,
| СправочникФизическиеЛица.Код КАК Код,
| СправочникФизическиеЛица.Наименование КАК Наименование,
| СправочникФизическиеЛица.ДатаРождения КАК ДатаРождения,
| СправочникФизическиеЛица.Пол КАК Пол,
| СправочникФизическиеЛица.ИНН КАК ИНН,
| СправочникФизическиеЛица.СтраховойНомерПФР КАК СтраховойНомерПФР,
| СправочникФизическиеЛица.МестоРождения КАК МестоРождения,
| СправочникФизическиеЛица.ГруппаДоступа КАК ГруппаДоступа,
| СправочникФизическиеЛица.ИмеетНаучныеТруды КАК ИмеетНаучныеТруды,
| СправочникФизическиеЛица.ИмеетИзобретения КАК ИмеетИзобретения,
| РолиФизическихЛиц.Организация КАК Организация,
| РолиФизическихЛиц.Роль КАК Роль,
| РолиФизическихЛиц.Организация.ГоловнаяОрганизация КАК ГоловнаяОрганизация
|ИЗ
| Справочник.ФизическиеЛица КАК СправочникФизическиеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РолиФизическихЛиц КАК РолиФизическихЛиц
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 0
| 1 КАК Поле1
| ГДЕ
| 1 В (&ПараметрЗапроса01)
| И 1 В (&ПараметрЗапроса02)
| И 1 В (&ПараметрЗапроса03)
| И 1 В (&ПараметрЗапроса04)
| И 1 В (&ПараметрЗапроса05)
| И 1 В (&ПараметрЗапроса06)
| И 1 В (&ПараметрЗапроса07)
| И 1 В (&ПараметрЗапроса08)
| И 1 В (&ПараметрЗапроса09)
| И 1 В (&ПараметрЗапроса10)
| И 1 В (&ПараметрЗапроса11)
| И 1 В (&ПараметрЗапроса12)
| И 1 В (&ПараметрЗапроса13)
| И 1 В (&ПараметрЗапроса14)
| И 1 В (&ПараметрЗапроса15)
| И 1 В (&ПараметрЗапроса16)
| И 1 В (&ПараметрЗапроса17)
| И 1 В (&ПараметрЗапроса18)
| И 1 В (&ПараметрЗапроса19)
| И 1 В (&ПараметрЗапроса20)) КАК ТаблицаПараметров
| ПО (ИСТИНА)
| ПО СправочникФизическиеЛица.Ссылка = РолиФизическихЛиц.ФизическоеЛицо
| И (РолиФизическихЛиц.ИдентификаторЗаписи В
| (ВЫБРАТЬ
| МАКСИМУМ(РолиФизическихЛицОтбор.ИдентификаторЗаписи)
| ИЗ
| РегистрСведений.РолиФизическихЛиц КАК РолиФизическихЛицОтбор
| ГДЕ
| РолиФизическихЛицОтбор.ФизическоеЛицо = СправочникФизическиеЛица.Ссылка
| И &ТекстОтбораДанных))";
НомерПараметра = 1;
Для каждого ЭлементОтбора Из ОтборыСписка Цикл
ПозицияТочки = СтрНайти(ЭлементОтбора.ЛевоеЗначение, ".");
Если ПозицияТочки = 0 Тогда
ПолеВВерхнемРегистре = ВРег(ЭлементОтбора.ЛевоеЗначение);
Иначе
ПолеВВерхнемРегистре = ВРег(Прав(ЭлементОтбора.ЛевоеЗначение, ПозицияТочки - 1));
КонецЕсли;
Если ПолеВВерхнемРегистре = ВРег("Организация")
Или ПолеВВерхнемРегистре = ВРег("ГоловнаяОрганизация")
Или ПолеВВерхнемРегистре = ВРег("Роль") Тогда
Если Не ПустаяСтрока(ТекстОтбораДанных) Тогда
ТекстОтбораДанных = ТекстОтбораДанных + Символы.ПС + "И ";
КонецЕсли;
ИмяПараметра = "ПараметрЗапроса" + Формат(НомерПараметра, "ЧЦ=2; ЧВН=");
Если ПолеВВерхнемРегистре = ВРег("ГоловнаяОрганизация") Тогда
ЛевоеЗначение = "Организация.ГоловнаяОрганизация";
Иначе
ЛевоеЗначение = ЭлементОтбора.ЛевоеЗначение;
КонецЕсли;
ТекстОтбораДанных = ТекстОтбораДанных + "РолиФизическихЛицОтбор." + ЛевоеЗначение;
ТекстОтбораДанных = ТекстОтбораДанных + " " + ЭлементОтбора.ВидСравнения + " ";
ТекстОтбораДанных = ТекстОтбораДанных + "(&" + ИмяПараметра + ")";
Запрос.УстановитьПараметр(ИмяПараметра, ЭлементОтбора.ПравоеЗначение);
НомерПараметра = НомерПараметра + 1;
КонецЕсли;
КонецЦикла;
Для НомерНеЗаданногоПараметра = НомерПараметра По 20 Цикл
ИмяПараметра = "ПараметрЗапроса" + Формат(НомерНеЗаданногоПараметра, "ЧЦ=2; ЧВН=");
Запрос.УстановитьПараметр(ИмяПараметра, Null);
КонецЦикла;
Если ПустаяСтрока(ТекстОтбораДанных) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ТекстОтбораДанных", "");
Иначе
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ТекстОтбораДанных", "(" + ТекстОтбораДанных + ")");
КонецЕсли;
Возврат Запрос;
КонецФункции
#КонецОбласти