Имя: Пароль:
1C
1С v8
Упростить метод фильтрации списка при НачалеВыбора 1с8.2 управ.приложение
0 ser-korvin
 
30.03.12
11:47
В доке, в табличном поле при начале выбора элемента, необходимо настроить фильтр по заранее выьранному реквизиту в форме этого документа. На 8.1 это легко решается таким кодом:

Процедура НачислениеЗарплатыФИОНачалоВыбора(Элемент, СтандартнаяОбработка)
   
   СтандартнаяОбработка=Ложь;
   Форма = Справочники.Работник.ПолучитьФормуВыбора(,Элемент,);
   Форма.СправочникСписок.Отбор.Отдел.ВидСравнения = ВидСравнения.Равно;    
   Форма.СправочникСписок.Отбор.Отдел.Значение = ЭтотОбъект.Отдел;  
   Форма.СправочникСписок.Отбор.Отдел.Использование = Истина;
   Форма.Открыть();    
   
КонецПроцедуры


А  в 8.2 упр.прилож. я решил тока так:

&НаСервере
Функция ПолучитьСписокПользователей()
   
   Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ
                  |    Сотрудник.Наименование
                  |ИЗ
                  |    Справочник.Сотрудник КАК Сотрудник
                  |ГДЕ
                  |    Сотрудник.Отдел = &Отдел";
   Запрос.УстановитьПараметр("Отдел", Объект.Отдел);
   
   Список = Новый СписокЗначений;
   Выборка = Запрос.Выполнить().Выбрать();    
   Пока Выборка.Следующий() Цикл;
       Список.Добавить(Выборка.Наименование);
   КонецЦикла;    
   Возврат(Список);
   
КонецФункции

&НаКлиенте
Процедура НачислениеЗарплатыФИОНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
       
   Список = ПолучитьСписокПользователей();    
   СтандартнаяОбработка = Ложь;
   Форма = ПолучитьФорму("Справочник.Сотрудник.ФормаВыбора");    
   ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование");
   ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
   ЭлементОтбора.Использование = Истина;
   ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
   ЭлементОтбора.ПравоеЗначение = Список;
   ТекЗнач = Форма.ОткрытьМодально();  
           
КонецПроцедуры


Уверен можно проще решить, подскажите как.
1 Ns33
 
30.03.12
11:57
В 8.2 даже кодить ничего не надо, используй свойство "Связи параметров выбора" реквизитов объектов конфигурации (такое же свойство есть и у элементов формы, отображающие данный реквизит).
2 acsent
 
30.03.12
12:04
&НаКлиенте
Процедура ДоговорКонтрагентаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
   ГоловнаяОрганизация = блОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Организация, "ГоловнаяОрганизация");
   
   Если ЗначениеЗаполнено(ГоловнаяОрганизация) Тогда
       НовыйПараметр = Новый ПараметрВыбора("Отбор.Организация", ГоловнаяОрганизация);
   Иначе
       НовыйПараметр = Новый ПараметрВыбора("Отбор.Организация", Объект.Организация);
   КонецЕсли;
       
   Массив = Новый Массив;
   Массив.Добавить(НовыйПараметр);
       
   ПараметрыВыбора = Новый ФиксированныйМассив(Массив);
       
   Элемент.ПараметрыВыбора = ПараметрыВыбора;
   
КонецПроцедуры
3 ser-korvin
 
30.03.12
12:07
(1) Спасибо, понял. Получилось.
(2) Возьму на заметку, если будет нужен фильр не из формы. Спасибо
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.