Отборы в 1С 8.3 (Управляемые формы)
Часто возникают ситуации, когда в 1С 8.3 нужно произвести отбор в таблице определенных строк по определенным критериям. Рассмотрим, как это сделать в динамическом списке и в таблице значений.
Содержание
Отборы в динамическом списке 1С 8.3
Тут мы имеем два пути: создать отбор на форме списка и установить отбор программно.
Отбор в настройка формы
В конфигураторе добавим динамический список на форму, назначим ему основную таблицу и зайдем в свойства списка. В свойствах есть раздел «Настройка списка», нажмем ссылку «Открыть». Появится такое вот окно:
Здесь мы можем задать любой отбор для динамического списка. Потом этим отбором можно управлять программно.
Установка отбора в динамическом списке 1С программно
Дело в том, что Отбор является свойством динамического списка. Этим мы и воспользуемся. Сначала добавим в свойство отбора новый элемент:
НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Чтобы отбор заработал, нужно прописать параметры «ЛевоеЗначение», «ВидСравнения» и «ПравоеЗначение». Кроме того необходимо свойство «Использование» установить в «Истина».
НовЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПолеКомп_1"); НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовЭлементОтбора.Использование = Истина; НовЭлементОтбора.ПравоеЗначение = Знач_1;
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Таким образом, мы создаем простой отбор. Кроме простого, можно задать условия по нескольким полям. Для этого используем тип данных «ГруппаЭлементовОтбораКомпоновкиДанных»:
Гр_Отбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); Гр_Отбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭлементОтбора.Родитель = Гр_Отбора; НовЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПолеКомп_1"); НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; НовЭлементОтбора.Использование = Истина; НовЭлементОтбора.ПравоеЗначение = Знач_1;
Отборы в таблице значений 1С
Тут у нас также имеется несколько вариантов.
- Можно просто перебрать таблицу в цикле и выбрать нужные строки либо скрыть ненужные. Считаю этот способ самым неоптимальным, но для новичков пойдет.
- Второй способ – использовать метод таблицы «НайтиСтроки». Иногда очень хороший способ, но есть серьезный недостаток. Это единственный тип для сравнения – «Равно».
- Третий вариант отбора – мой любимый, так как лишен в итоге всех недостатков. В этом варианте я использую «ПостроительЗапроса». Вот пример:
&НаСервере Процедура ОтборВТЗНаСервере() ПостроительЗапр = Новый ПостроительЗапроса; ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабЗнач); т_Отбор = ПостроительЗапр.Отбор.Добавить("Кол_1"); т_Отбор.ВидСравнения = ВидСравнения.Больше; т_Отбор.Значение = 1000; т_Отбор.Использование = Истина; ПостроительЗапр.Выполнить(); ТабРезультат = Построитель.Результат.Выгрузить(); КонецПроцедуры
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Михаил:
ТабРезультат = Построитель.Результат.Выгрузить();
От куда вы взяли Переменную «Построитель», вместо неё вроде должно быть ПостроительЗапр?
ЗлойАноним:
Взял чужую статью, переменные в коде переименовал, но не все ))
Darkoder:
Имеется справочник, у которого есть форма списка. При открытии видим все строки справочника. Нажимаем кнопочку ещё (8.3 Управляемые формы, тонкий клиент) выбираем «Настроить список» . В нём выбираем вкладку отбор и задаём условия отбора. Например: «Организация», «Равно», … И о чудо! На форме появляется поле с выбором организации и с галочкой для включения этого отбора! Вопрос такой: как этот фильтр вызвать программно при запуске этой формы??? Расскажите пожалуйста.
Melvia:
Я так понимаю, речь не о справочнике, а о таблице, которая заполняется динамически. У меня такая таблица в обработке и команд вроде Настроить список там нет.
Evmil:
Перед установкой нового отбора нужно очистить старый Список.Отбор.Элементы.Очистить()
Alex:
На НовЭлементОтбора.Родитель = Гр_Отбора;
Ответ: Поле объекта недоступно для записи (Родитель)
Oleg:
Нужно так: НовЭлементОтбора.Родитель.Значение = Гр_Отбора;
Или так: НовЭлементОтбора.Родитель.Установить(Гр_Отбора);
Сергей:
И то и другое выдает ошибку