Имя: Пароль:
1C
 
Хочу отфильтровать динамический список - вопросов куча...
0 mikecool
 
28.07.10
17:48
Список.Отбор.Элементы.Очистить(); // как найти существующий элемент отбора я не знаю
   
   УстановленныйОтбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   
   УстановленныйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
   УстановленныйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОснованиеГрузополучатель");
   УстановленныйОтбор.ПравоеЗначение = Элементы.Список.ТекущиеДанные.ОснованиеГрузополучатель; // а вот здесь ТекущиеДанные = Неопределено
каг бе две проблемы :(
1 EvgeniuXP
 
28.07.10
18:11
ДинамическийСписок.Отбор.Элементы[ИндексЭлемента] - существующие отборы, см. отладчик.
2 Kashemir
 
28.07.10
18:13
Ясно что ничего не ясно...
3 Bober
 
28.07.10
18:18
(0) это все выполняется в каком контексте?
4 Mort
 
28.07.10
18:18
Если отбор будет постоянно использоваться, можно его задать на этапе конфигурирования и установить режим "Недоступный" (перед этим нажать "Подробно"). Тогда пользователь не сможет его удалить, изменить, передвинуть и т.п. и к нему можно будет обращаться просто по номеру. Не знаю насколько это методически правильно.
5 Mort
 
28.07.10
18:18
*будет постоянно использоваться программно
6 Bober
 
28.07.10
18:22
найти существующий элемент отбора:
-обходить коллекцию и смотреть левое значение и правое значение на предмет ТипЗнч("ПолеКомпоновкиДанных")
-при первом создании добавить ИдентификаторПользовательскойНастройки
7 mikecool
 
29.07.10
10:12
(1) для этого как минимум надо знать индекс
(3) контекст - форма списка документов
(4) а вот это попробую
(6) тоже посмотрю
8 Sergeyspb13
 
29.07.10
10:19
а текущие данные выделены? может глянуть значение в
.Элементы.Список.ВыделенныеСтроки


тоже мучаюсь с фильтрами в динамическом списке, но проблемы другие
группирую условия отбора, а срабатывает только если используется одна группа =(
9 mikecool
 
29.07.10
10:27
(8) в том то и дело, что выделены...  :(
выделенные строки тоже пустые
10 Stepa86
 
29.07.10
10:30
можно еще не в отбор пихать данные, а в дин. список параметрами, а там в запросе в ГДЕ прописать
11 mikecool
 
29.07.10
10:31
(10) тоже вариант, но чет у мну не получилось программно обновлять список
никак :(
12 mikecool
 
29.07.10
10:32
(10) секцию Где прописывать как в компоновке?
13 Sergeyspb13
 
29.07.10
10:32
проверь в свойствах элемента установлено РежимВыбора?
и что показывает в Элементы.Список.ТекущаяСтрока
14 Sergeyspb13
 
29.07.10
10:34
если простой отбор то, да проще параметром... обновится само (у меня само все обновляется)
15 Stepa86
 
29.07.10
10:35
в УТ11 все нужные методы для работы с отборами есть:


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

// Удаляет элемент отбора динамического списка
//
//Параметры:
//Список  - обрабатываемый динамический список,
//ИмяПоля - имя поля компоновки, отбор по которому нужно удалить
//
Процедура УдалитьЭлементОтбораСписка(Список, ИмяПоля) Экспорт
   
   УдалитьЭлементОтбораКоллекции(Список.Отбор.Элементы, ИмяПоля);
   
КонецПроцедуры // УдалитьЭлементОтбораСписка()


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

// Устанавливает элемент отбор динамического списка
//
//Параметры:
//Список            - обрабатываемый динамический список,
//ИмяПоля            - имя поля компоновки, отбор по которому нужно установить,
//ВидСравнения        - вид сравнения отбора, по умолчанию - Равно,
//ПравоеЗначение    - значение отбора
//
Процедура УстановитьЭлементОтбораСписка(Список, ИмяПоля, ПравоеЗначение, ВидСравнения = Неопределено) Экспорт
   
   УстановитьЭлементОтбораКоллекции(Список.Отбор.Элементы, ИмяПоля, ПравоеЗначение, ВидСравнения);
   
КонецПроцедуры // УстановитьЭлементОтбораСписка()


// Изменяет элемент отбора динамического списка
//
//Параметры:
//Список         - обрабатываемый динамический список,
//ИмяПоля        - имя поля компоновки, отбор по которому нужно установить,
//ВидСравнения   - вид сравнения отбора, по умолчанию - Равно,
//ПравоеЗначение - значение отбора,
//Установить     - признак необходимости установить отбор
//
Процедура ИзменитьЭлементОтбораСписка(Список, ИмяПоля, ПравоеЗначение = Неопределено, Установить = Ложь, ВидСравнения = Неопределено) Экспорт
   
   УдалитьЭлементОтбораСписка(Список, ИмяПоля);
   
   Если Установить Тогда
       УстановитьЭлементОтбораСписка(Список, ИмяПоля, ПравоеЗначение, ВидСравнения);
   КонецЕсли;
   
КонецПроцедуры // ИзменитьЭлементОтбораСписка()

Процедура УстановитьПараметрДинамическогоСписка(Список, ИмяПараметра, Значение, Использование = Истина) Экспорт
   
   Если Использование Тогда
       Список.Параметры.УстановитьЗначениеПараметра(ИмяПараметра, Значение);
   Иначе
       
       ЗначениеПараметра = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра));
       Если ЗначениеПараметра <> Неопределено Тогда
           Если ЗначениеПараметра.Значение <> Значение Тогда
               ЗначениеПараметра.Значение = Значение;
           КонецЕсли;
           Если ЗначениеПараметра.Использование <> Использование Тогда
               ЗначениеПараметра.Использование = Использование;
           КонецЕсли;
       КонецЕсли;
       
   КонецЕсли;
   
КонецПроцедуры // УстановитьПараметрДинамическогоСписка()
16 Stepa86
 
29.07.10
10:37
(0) код на сервере или на клиенте?
17 mikecool
 
29.07.10
10:46
(16) на клиенте
(13) пусто
18 Sergeyspb13
 
29.07.10
10:48
рули на сервер там все работает, список то динамически должен все равно дергать сервак
19 mikecool
 
29.07.10
10:48
(15) а в упп такого не нахожу )
20 Stepa86
 
29.07.10
10:48
(17) вынеси на сервер и смотри там... ТекущиеДанные это строка таблицы формы, а таблица формы тусуется на сервере, на клиенте только представление
21 mikecool
 
29.07.10
10:49
(18, 20) ага, я уже и сам подумал в этом направлении
всем спасибо, буду ковырять
22 Dmitr
 
29.07.10
10:50
(19) а вроде УПП еще и не сделали на 8.2
23 mikecool
 
29.07.10
10:51
(22) полностью нет, частично - редакция 1.3 уже есть
24 Dmitr
 
29.07.10
10:52
(23) Понятно. Лучше надыбай УТ11 там больше есть где подсмотреть
25 Stepa86
 
29.07.10
10:53
(19) в библиотеки стандартных подсистем вроде тоже есть
26 mikecool
 
29.07.10
10:55
гы, на сервере
этаформа.Элементы.Список.ТекущиеДанные - неопределено
хотя текущаястрока есть
27 mikecool
 
29.07.10
10:55
или так Элементы.Список.ТекущиеДанные, что однобоко
Ошибка чтения значения
28 Stepa86
 
29.07.10
11:03
а строка в списке точно выделена? =) и это не группировка? и в Списке стоит основная таблица и галка "Динамическое считывание данных"?
29 mikecool
 
29.07.10
11:09
(28) все как пишешь
не группировка, строка выделена, основная таблица есть и дин считывание тоже
30 Stepa86
 
29.07.10
11:15
у меня закончились варианты...
31 mikecool
 
29.07.10
11:16
ощущение, что при позиционировании в дин списке курсор не позиционируетсянп строке данных
32 Sergeyspb13
 
29.07.10
11:23
см (8)