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