Имя: Пароль:
1C
1С v8
Как установить отбор на реквизит типа дата "Между" в динамическом списке?
0 al_zzz
 
23.08.14
17:31
Пытаюсь сделать так:
&НаСервере
Процедура УстановитьПериодОтбора()
        ЭлементОтбора = "";
    Для н = 0 По Бронирования.Отбор.Элементы.Количество()-1 Цикл
        ЭлементОтбора = Бронирования.Отбор.Элементы[н];
        Если СокрЛП(Бронирования.Отбор.Элементы[н].ЛевоеЗначение) = "Период" Тогда
            Прервать;
        Иначе
            ЭлементОтбора = "";
        КонецЕсли;
    КонецЦикла;
    Если ЭлементОтбора = "" Тогда
        ГруппаОтбора =  Бронирования.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора.ИдентификаторПользовательскойНастройки = "Период";
        ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        ЭлементОтбораН = Бронирования.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбораН.Родитель = ГруппаОтбора;
        ЭлементОтбораН.ИдентификаторПользовательскойНастройки = "НачалоПериода";
        ЭлементОтбораН.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Старт");
        ЭлементОтбораН.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
        ЭлементОтбораН.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
        ЭлементОтбораК = Бронирования.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбораК.Родитель = ГруппаОтбора;
        ЭлементОтбораК.ИдентификаторПользовательскойНастройки = "КонецПериода";
        ЭлементОтбораК.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Старт");
        ЭлементОтбораК.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
        ЭлементОтбораК.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
    Иначе
        ЭлементОтбораН = Бронирования.Отбор.Элементы["НачалоПериода"];
        ЭлементОтбораК = Бронирования.Отбор.Элементы["КонецПериода"];
    КонецЕсли;    
    ЭлементОтбораН.ПравоеЗначение = ДатаОтбораНачало;
    ЭлементОтбораК.ПравоеЗначение = ДатаОтбораОкончание;
    
    //НастройкаПериода = Элементы.ДокументыПоКассе.Период;
    //НастройкаПериода.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод;
    //НастройкаПериода.ДатаНачала = ДатаОтбораНачало;
    //НастройкаПериода.ДатаОкончания = ДатаОтбораОкончание;
    //Элементы.ДокументыПоКассе.Обновить();
    
КонецПроцедуры // УстановитьПериодОтбора()
Ругается на присвоение родителя элементу.
Подскажите, как правильно делать сие.
1 zulu_mix
 
23.08.14
17:36
на клиенте
2 al_zzz
 
23.08.14
17:46
(1)А можно поподробнее или пример(ссылку)?
Я только это нашел: http://1c-uroki.ru/articles/1C_otbor_v_dinamicheskom_spiske , но так не работает у меня.
3 ShoGUN
 
23.08.14
17:59
(2) ЭлементОтбора.Родитель - только чтение, пример некорректный. Чтобы добавить вложенный в группу элемент, добавляй его не на верхний уровень, а в соответствующую группу:
  ЭлементОтбораН = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
4 al_zzz
 
23.08.14
18:11
(3) Так получилось! Спасибо!
А как-то тможно обратиться к элементу отбора по идентификатору или индексу, без перебора?
5 ShoGUN
 
23.08.14
18:17
(4) Да, индексация с 0, как обычно - через квадратные скобки. Но есть две проблемы: 1)поскольку это дерево, то напрямую к определенному вложенному элементу обратиться нельзя, сначала надо получить соответствующую группу. 2)При перемещении элементов индексы меняются, а перемещение можно сделать не только программно, но и интерактивно.
6 milan
 
23.08.14
18:45
(4)  юзай функции общих модулей из типовых, там все есть
7 al_zzz
 
23.08.14
19:07
(6) Не понял, как тут юзать функции типовых. Конфа - УНФ.
Пример блока, который мне нужен, взял из журнала "Документы по кассе", только там используется Период(отбор накладывается на дату документа), а у меня свой реквизит.
Есть ещё такая функция: УправлениеНебольшойФирмойКлиентСервер.УстановитьЭлементОтбораСписка(ОказанияУслуг, "СостояниеДокумента", Статус, Использование);
но там, видимо, только равенство.
Интересует, как на клиенте установить отбор, такой, как у меня - этот как-то медленно отрабатывает.
8 ShoGUN
 
23.08.14
19:15
(7) Ровно то же самое - делай на клиенте.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн