Имя: Пароль:
   
1C
1С v8
Как программно добавить отбор в динамический список на УФ 8.3?
0 s-n-a-y
 
15.12.14
09:39
На упр. форме есть два динамических списка. Нужно сделать чтобы при выделении строки в первом срабатывал отбор во втором.
Отбор надо добавить так, чтобы его было видно при открытии в командной панели второго списка Все действия->Настроить список->Отбор
Как я пробовал его добавить
1) Добавлял в Список.Отбор.Элементы . Он работает, но в Настроить список->Отбор он не показывается
2) Зашел в Все действия->Настроить список->Отбор добавил отбор вручную. Далее в отладчике нашел, что он ханится в Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы, попробовал добавить туда
Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Пишет ошибку: Коллекция пользовательских настроек не может изменять свой состав, так как она связана с настройками компоновки данных.
Как Добавлять?
1 eklmn
 
15.12.14
09:46
Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
2 s-n-a-y
 
15.12.14
09:47
(1) именно так в (0), пункт 1 и добавлял.
3 olegves
 
15.12.14
09:47
(0) если у тебя 2 списка на форме, зачем добавлять программно, добавь в конфигураторе, а программно будешь только менять правое значение
4 eklmn
 
15.12.14
09:48
(2) неа
5 eklmn
 
15.12.14
09:48
(2) тогда весь код покажи и где добавлял
6 s-n-a-y
 
15.12.14
09:48
(3) попробую
7 s-n-a-y
 
15.12.14
09:50
(5)
Процедура нИсполнителиОтборПриАктивизацииСтроки(Элемент)
    
    Список.Отбор.Элементы.Очистить();
    Если Элемент.ТекущиеДанные.Исполнитель <> "  Все" Тогда
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИсполнителиСтрокой");
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование = Истина;
        ЭлементОтбора.ПравоеЗначение = Элемент.ТекущиеДанные.Исполнитель;
    КонецЕсли;

КонецПроцедуры
8 kortun
 
15.12.14
09:53
(7)
вот еще пример

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

попробуй так
9 s-n-a-y
 
16.12.14
13:42
(0) еще актуально
10 eklmn
 
16.12.14
14:02
(9) еще раз повторю, в (1) рабочий вариант, смотри внимательные что у тебя упущено
11 eklmn
 
16.12.14
14:08
в первом списке
&НаКлиенте
Процедура СписокНоменклатурыПриАктивизацииСтроки(Элемент)

    поз= ВторойСписокГдеНадоОтфильтровать.Отбор.Элементы[0]; //тут и
    поз.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    поз.Использование = истина;
    поз.ПравоеЗначение = поз;

все
12 s-n-a-y
 
16.12.14
14:24
(11) я так делал см (7) и оно работает, но если после этого открыть в командная панель второго списка-> Все действия->Настроить список->Отбор там пусто, моего отбора нет.
13 Адский плющ
 
16.12.14
14:27
Я уже рассказывал как получить элементы этого отбора.
14 eklmn
 
16.12.14
14:28
(12) у меня есть
15 Адский плющ
 
16.12.14
14:29
(14) Вэлкам ту 8.3
16 eklmn
 
16.12.14
14:30
1С:Предприятие 8.2 (8.2.19.90)
17 tesak84
 
16.12.14
14:30
{(18,2)} Неоднозначное поле "Номенклатура.Способ Пополнения"

не могу разобраться в чем ошибка



запрос выглядит так

ВЫБРАТЬ    Спецификации.Ссылка КАК Продукция,    Спецификации.Состав.(    Номенклатура,    Характеристика,    ЕдиницаИзмерения,    Количество,    КоличествоПродукции    ), ЗаказНаПроизводствоПродукция.НоменклатураИЗ    Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификации КАК Спецификации    ПО Номенклатура.Спецификация = Спецификации.Ссылка    ПО ЗаказНаПроизводствоПродукция.Номенклатура = Номенклатура.СсылкаГДЕ    Номенклатура.СпособПополнения = &СпособПополнения
18 Адский плющ
 
16.12.14
14:31
(17) Переименуй псевдоним номенклатуры во что-нить другое:

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК ТабНоменклатура  

И вообще что ты тут делаешь?
19 s-n-a-y
 
16.12.14
14:48
(13) найти можно, но добавить в Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы нельзя, вылазит ошибка
20 Адский плющ
 
16.12.14
14:52
(19) А внимательно почитать?

ПользовательскийОтбор = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);

ЭлементОтбора = ПользовательскийОтбор.Элементы.Добавить();
21 s-n-a-y
 
16.12.14
15:11
(20) Все, отбор работает как надо. Огромное спасибо.

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