Имя: Пароль:
1C
1С v8
v8: УФ. Как задать отбор динамическому списку?
0 ptrtss
 
26.04.12
12:42
Форма документа. На ней таблица с регистром сведений, который нужно отобрать по измерению-ссылке текущего документа. Регистр сведений независимый

В конфигураторе, в настройках динамического списка добавил отбор по документу, но с пустым значением. Нужно при открытии этот элемент отбора найти и поставить вместо пустого значения отбора ссылку

Я начал копать вот так:

ДинамическийСписок.Отбор и т.д.

но это компоновочный отбор, а компоновку я не очень знаю.

Как там искать элемент-отбор по документу, полным перебором коллекции ДинамическийСписок.Отбор.Элементы? Нет там каких-нибудь найти, получить и т.п. но только не по индексу, а по наименованию?

Или вообще по другому надо?
1 Mort
 
26.04.12
12:47
Кнопку "Я" нажми справа от заголовка темы.
2 YFedor
 
26.04.12
12:49
//------- ©  YF --------------------
// Устанавливает отбор в динамическом списке
// Параметры:
//    _список                        : динамический список отбор в котором хотим установить
//    _имяОтбора                    : имя реквизита для отбора
//    _видСравнения                : вид сравнения
//    _значениеОтбора                : значение по которому хотим установить отбор
//     _отборПоПустомуЗначению    : Если истина, то при передаче пустого значения в качестве значения отбора
//                                 по нему и устанавливается отбор, если Ложь, то при передаче пустого значения в качестве значения отбора
//                                 отбор отключается
//
// Отбор устанавливается только на равенство (во всяком случае пока)
Процедура УстановитьОтборВСписке(_список, _имяОтбора, _видСравнения = Неопределено, _значениеОтбора, _отборПоПустомуЗначению = Ложь, _скрытьОтбор = Ложь) Экспорт
   // Если вид сравнения не передавали, то установим сравнение по равенству
   Если _видСравнения = Неопределено Тогда
       _видСравнения = ВидСравненияКомпоновкиДанных.Равно;
   КонецЕсли;//_видСравнения = Неопределено
   //
   элементОтбора_    = Неопределено;
   // Поищем а есть ли уже элемент отбора по указанному реквизиту
   Для каждого элемент_ из _список.Отбор.Элементы Цикл
       Если ВреГ(элемент_.ЛевоеЗначение)    = ВреГ(_имяОтбора) Тогда
           элементОтбора_ = элемент_;
           Прервать;
       КонецЕсли;//ВреГ(элемент_.ЛевоеЗначение)    = ВреГ(_имяОтбора)
   КонецЦикла;//каждого элемент_ из Список.Отбор.Элементы
   // Установим отбор по реквизиту
   Если элементОтбора_ = Неопределено Тогда    
       элементОтбора_                    = _список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
       элементОтбора_.ВидСравнения        = _видСравнения;
       элементОтбора_.ЛевоеЗначение    = Новый ПолеКомпоновкиДанных(_имяОтбора);
   КонецЕсли;//элементОтбора_ = Неопределено
   элементОтбора_.ПравоеЗначение    = _значениеОтбора;
   // Если значение для отбора не заполнено, значит нужно убрать отбор по
   //данному реквизиту
   Если ЗначениеЗаполнено(_значениеОтбора) Тогда
       элементОтбора_.Использование    = Истина;
   ИначеЕсли _отборПоПустомуЗначению Тогда
       элементОтбора_.Использование    = Истина;    
   Иначе
       элементОтбора_.Использование    = Ложь;
   КонецЕсли;//ЗначениеЗаполнено(_значениеОтбора)
   // Если нужно - скроем от пользователя отбор
   Если _скрытьОтбор Тогда
       элементОтбора_.РежимОтображения    = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
   КонецЕсли;//_скрытьОтбор
КонецПроцедуры//УстановитьОтборвСписке


Эта функция вызывается из управляемых форм, чтобы устанавливать в них отбор, например ПриСозданииНаСервере
3 gavrikprog
 
26.04.12
12:51
(2) счас он код для применения еще попросит =)
4 gavrikprog
 
26.04.12
12:52
(2)
вообще похоже немного на копипаст из типовых
5 YFedor
 
26.04.12
12:53
(4) х.з., не помню, вроде сам писал :-)
6 ptrtss
 
26.04.12
12:58
Мдя, 1С думает о нас! (прастигоспади)


&НаКлиенте
Процедура УстановитьОтборИсторииСообщений()
   ПолеЗаявка = ИсторияСообщений.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Заявка").Поле;
   Для каждого ЭлементОтбора из ИсторияСообщений.Отбор.Элементы Цикл
       Если ЭлементОтбора.ЛевоеЗначение = ПолеЗаявка Тогда
           ЭлементОтбора.ПравоеЗначение = Объект.Ссылка;
           Возврат;
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой