Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 сен 2021, 18:32

Отбор информации в 1С 8.3.

Автор Direx53, 27 июл 2017, 10:46

0 Пользователей и 1 гость просматривают эту тему.

Direx53

Добрый день,уважаемые форумчане.Необходимо сделать отбор в списке по нажатию на кнопку.
Есть динамический список.В данном списке программно создается колонка "ТИП"(см. скрин),при этом "РеестрДокументов.Ссылка" состоит из ссылок на документы(см.скрин).

Возможно, я делаю что-то не так, но вот ход моих действий,возможно, Вам удастся понять в чем проблема:
1.Создаю 2 реквизита (1 реквизит - "Выбор"(строка, 255 символов); 2 реквизит - "Тип_фильтрации"(ссылки на все интересующие документы(составной тип)
2.Далее, перемещаю на форму "Выбор".
3.Создаю на форме событие "При изменении" и вставляю следующий код:
Элементы.Выбор.СписокВыбора.Очистить();
    СписокТиповДокументов = Новый СписокЗначений;

    РеквизитыФормы = ЭтаФорма.ПолучитьРеквизиты();

    РеквизитСоставногоТипа = Неопределено;
    Для Каждого РеквизитФормы Из РеквизитыФормы Цикл
        Если РеквизитФормы.Имя = "Тип_фильтрации" Тогда
            РеквизитСоставногоТипа = РеквизитФормы;
            Прервать;
        КонецЕсли;
    КонецЦикла;

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

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

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

oleg-x

А где у тебя в коде объявление параметра &ПЗ?
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

LexaK

Попробуйте Тип документа через оператор Ссылка собрать, тогда на отбор можете подать массив строк и отбор сработает.
(надеюсь идея понятна)

ВЫБРАТЬ
Рег.*,
Выбор
Когда Рег.Регистратор Ссылка Документ.РасходнаяНакладная Тогда "РасходнаяНакладная"
Когда Рег.Регистратор Ссылка Документ.СборкаКомпьютера Тогда "СборкаКомпьютера"
// и т.д.
конец как Тип
ИЗ
РегистрНакопления.ОстаткиНоменклатуры КАК Рег
ответ Понравился? (в смысле пригодился?)

Direx53

Цитата: LexaK от 27 июл 2017, 12:07
Попробуйте Тип документа через оператор Ссылка собрать, тогда на отбор можете подать массив строк и отбор сработает.
(надеюсь идея понятна)

ВЫБРАТЬ
Рег.*,
Выбор
Когда Рег.Регистратор Ссылка Документ.РасходнаяНакладная Тогда "РасходнаяНакладная"
Когда Рег.Регистратор Ссылка Документ.СборкаКомпьютера Тогда "СборкаКомпьютера"
// и т.д.
конец как Тип
ИЗ
РегистрНакопления.ОстаткиНоменклатуры КАК Рег


Немного непонятно что здесь "Рег.Регистратор"

LexaK

Цитата: Direx53 от 27 июл 2017, 15:06
Немного непонятно что здесь "Рег.Регистратор"

тоже самое что у вас РеестрДокуменов.Ссылка
в общем все понятно, не обращайте на мою подсказку внимание.
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск