&НаСервере Процедура МагазиныПриИзмененииНаСервере() КонецПроцедуры &НаКлиенте Процедура МагазиныПриИзменении(Элемент) МагазиныПриИзмененииНаСервере(); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СписокМагазинов=Новый СписокЗначений(); Пользователь=ОмСлужебный.ТекущийПользователь(); //Магазин=ОмСлужебный.ТекущийМагазин(); //Если ЗначениеЗаполнено(Магазин) Тогда // СписокМагазинов.Добавить(Магазин); //Иначе // //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА //// Данный фрагмент построен конструктором. //// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! // //Запрос = Новый Запрос; //Запрос.Текст = // "ВЫБРАТЬ // | Магазины.Ссылка КАК Ссылка // |ИЗ // | Справочник.Магазины КАК Магазины"; // //РезультатЗапроса = Запрос.Выполнить(); // //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); // //Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // СписокМагазинов.Добавить(ВыборкаДетальныеЗаписи.Ссылка); //КонецЦикла; // Если не ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.Администратор) Тогда Для каждого маг из пользователь.магазины цикл СписокМагазинов.Добавить(маг.Магазин); КонецЦикла; Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Магазины.Ссылка КАК Ссылка |ИЗ | Справочник.Магазины КАК Магазины"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СписокМагазинов.Добавить(ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("Магазины",СписокМагазинов); КонецПроцедуры &НаСервере Процедура ТекущийМагазинПриИзмененииНаСервере() // Вставить содержимое обработчика. ПараметрыСеанса.ТекущийМагазин=Магазин; // Взято из БСП // ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка УстановитьЭлементОтбораДинамическогоСписка(Список, "Магазин", Магазин, ВидСравненияКомпоновкиДанных.Равно, , ЗначениеЗаполнено(Магазин)); КонецПроцедуры &НаКлиенте Процедура ТекущийМагазинПриИзменении(Элемент) ТекущийМагазинПриИзмененииНаСервере(); КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) ПараметрыСеанса.ТекущийМагазин=Магазин; КонецПроцедуры Функция ИзменитьЭлементыОтбора(ОбластьПоиска, Знач ИмяПоля = Неопределено, Знач Представление = Неопределено, Знач ПравоеЗначение = Неопределено, Знач ВидСравнения = Неопределено, Знач Использование = Неопределено, Знач РежимОтображения = Неопределено, Знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт Если ЗначениеЗаполнено(ИмяПоля) Тогда ЗначениеПоиска = Новый ПолеКомпоновкиДанных(ИмяПоля); СпособПоиска = 1; Иначе СпособПоиска = 2; ЗначениеПоиска = Представление; КонецЕсли; МассивЭлементов = Новый Массив; НайтиРекурсивно(ОбластьПоиска.Элементы, МассивЭлементов, СпособПоиска, ЗначениеПоиска); Для Каждого Элемент Из МассивЭлементов Цикл Если ИмяПоля <> Неопределено Тогда Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); КонецЕсли; Если Представление <> Неопределено Тогда Элемент.Представление = Представление; КонецЕсли; Если Использование <> Неопределено Тогда Элемент.Использование = Использование; КонецЕсли; Если ВидСравнения <> Неопределено Тогда Элемент.ВидСравнения = ВидСравнения; КонецЕсли; Если ПравоеЗначение <> Неопределено Тогда Элемент.ПравоеЗначение = ПравоеЗначение; КонецЕсли; Если РежимОтображения <> Неопределено Тогда Элемент.РежимОтображения = РежимОтображения; КонецЕсли; Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки; КонецЕсли; КонецЦикла; Возврат МассивЭлементов.Количество(); КонецФункции Процедура УстановитьЭлементОтбора(ОбластьПоискаДобавления, Знач ИмяПоля, Знач ПравоеЗначение = Неопределено, Знач ВидСравнения = Неопределено, Знач Представление = Неопределено, Знач Использование = Неопределено, Знач РежимОтображения = Неопределено, Знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт ЧислоИзмененных = ИзменитьЭлементыОтбора(ОбластьПоискаДобавления, ИмяПоля, Представление, ПравоеЗначение, ВидСравнения, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки); Если ЧислоИзмененных = 0 Тогда Если ВидСравнения = Неопределено Тогда Если ТипЗнч(ПравоеЗначение) = Тип("Массив") Или ТипЗнч(ПравоеЗначение) = Тип("ФиксированныйМассив") Или ТипЗнч(ПравоеЗначение) = Тип("СписокЗначений") Тогда ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; Иначе ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; КонецЕсли; Если РежимОтображения = Неопределено Тогда РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; КонецЕсли; ДобавитьЭлементКомпоновки(ОбластьПоискаДобавления, ИмяПоля, ВидСравнения, ПравоеЗначение, Представление, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки); КонецЕсли; КонецПроцедуры Функция ДобавитьЭлементКомпоновки(ОбластьДобавления, Знач ИмяПоля, Знач ВидСравнения, Знач ПравоеЗначение = Неопределено, Знач Представление = Неопределено, Знач Использование = Неопределено, знач РежимОтображения = Неопределено, знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); Элемент.ВидСравнения = ВидСравнения; Если РежимОтображения = Неопределено Тогда Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; Иначе Элемент.РежимОтображения = РежимОтображения; КонецЕсли; Если ПравоеЗначение <> Неопределено Тогда Элемент.ПравоеЗначение = ПравоеЗначение; КонецЕсли; Если Представление <> Неопределено Тогда Элемент.Представление = Представление; КонецЕсли; Если Использование <> Неопределено Тогда Элемент.Использование = Использование; КонецЕсли; // Важно: установка идентификатора должна выполняться // в конце настройки элемента, иначе он будет скопирован // в пользовательские настройки частично заполненным. Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки; ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля; КонецЕсли; Возврат Элемент; КонецФункции Процедура УстановитьЭлементОтбораДинамическогоСписка(ДинамическийСписок, ИмяПоля, ПравоеЗначение = Неопределено, ВидСравнения = Неопределено, Представление = Неопределено, Использование = Неопределено, РежимОтображения = Неопределено, ИдентификаторПользовательскойНастройки = Неопределено) Экспорт Если РежимОтображения = Неопределено Тогда РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; КонецЕсли; Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор; Иначе ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор; КонецЕсли; УстановитьЭлементОтбора( ОтборДинамическогоСписка, ИмяПоля, ПравоеЗначение, ВидСравнения, Представление, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки); КонецПроцедуры Процедура НайтиРекурсивно(КоллекцияЭлементов, МассивЭлементов, СпособПоиска, ЗначениеПоиска) Для каждого ЭлементОтбора Из КоллекцияЭлементов Цикл Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда Если СпособПоиска = 1 Тогда Если ЭлементОтбора.ЛевоеЗначение = ЗначениеПоиска Тогда МассивЭлементов.Добавить(ЭлементОтбора); КонецЕсли; ИначеЕсли СпособПоиска = 2 Тогда Если ЭлементОтбора.Представление = ЗначениеПоиска Тогда МассивЭлементов.Добавить(ЭлементОтбора); КонецЕсли; КонецЕсли; Иначе НайтиРекурсивно(ЭлементОтбора.Элементы, МассивЭлементов, СпособПоиска, ЗначениеПоиска); Если СпособПоиска = 2 И ЭлементОтбора.Представление = ЗначениеПоиска Тогда МассивЭлементов.Добавить(ЭлементОтбора); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры