Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Отборы в 1С 8.3 (Управляемые формы)

Часто возникают ситуации, когда в 1С 8.3 нужно произвести отбор в таблице определенных строк по определенным критериям. Рассмотрим, как это сделать в динамическом списке и в таблице значений.

Отборы в динамическом списке 1С 8.3

Тут мы имеем два пути: создать отбор на форме списка и установить отбор программно.

Отбор в настройка формы

В конфигураторе добавим динамический список на форму, назначим ему основную таблицу и зайдем в свойства списка. В свойствах есть раздел «Настройка списка», нажмем ссылку «Открыть». Появится такое вот окно:

отборы в динамических списках 1с

Здесь мы можем задать любой отбор для динамического списка. Потом этим отбором можно управлять программно.

Установка отбора в динамическом списке 1С программно

Дело в том, что Отбор является свойством динамического списка. Этим мы и воспользуемся. Сначала добавим в свойство отбора новый элемент:

НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

Чтобы отбор заработал, нужно прописать параметры «ЛевоеЗначение», «ВидСравнения» и «ПравоеЗначение». Кроме того необходимо свойство «Использование» установить в «Истина».

НовЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПолеКомп_1"); НовЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

НовЭлементОтбора.Использование = Истина;

НовЭлементОтбора.ПравоеЗначение = Знач_1;

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Таким образом, мы создаем простой отбор. Кроме простого, можно задать условия по нескольким полям. Для этого используем тип данных «ГруппаЭлементовОтбораКомпоновкиДанных»:

Гр_Отбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); Гр_Отбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ; НовЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовЭлементОтбора.Родитель = Гр_Отбора;

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

НовЭлементОтбора.ПравоеЗначение = Знач_1;

Отборы в таблице значений 1С

Тут у нас также имеется несколько вариантов.

  • Можно просто перебрать таблицу в цикле и выбрать нужные строки либо скрыть ненужные. Считаю этот способ самым неоптимальным, но для новичков пойдет.
  • Второй способ – использовать метод таблицы «НайтиСтроки». Иногда очень хороший способ, но есть серьезный недостаток. Это единственный тип для сравнения – «Равно».
  • Третий вариант отбора – мой любимый, так как лишен в итоге всех недостатков. В этом варианте я использую «ПостроительЗапроса». Вот пример:
&НаСервере

Процедура ОтборВТЗНаСервере()

   ПостроительЗапр = Новый ПостроительЗапроса;

   ПостроительЗапр.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабЗнач);

   т_Отбор = ПостроительЗапр.Отбор.Добавить("Кол_1");

   т_Отбор.ВидСравнения = ВидСравнения.Больше;

   т_Отбор.Значение = 1000;

   т_Отбор.Использование = Истина;

   ПостроительЗапр.Выполнить();

   ТабРезультат = Построитель.Результат.Выгрузить();

КонецПроцедуры

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 8 на “Отборы в 1С 8.3 (Управляемые формы)
  1. ТабРезультат = Построитель.Результат.Выгрузить();
    От куда вы взяли Переменную «Построитель», вместо неё вроде должно быть ПостроительЗапр?

    Ответить

    • Взял чужую статью, переменные в коде переименовал, но не все ))

      Ответить

  2. Имеется справочник, у которого есть форма списка. При открытии видим все строки справочника. Нажимаем кнопочку ещё (8.3 Управляемые формы, тонкий клиент) выбираем «Настроить список» . В нём выбираем вкладку отбор и задаём условия отбора. Например: «Организация», «Равно», … И о чудо! На форме появляется поле с выбором организации и с галочкой для включения этого отбора! Вопрос такой: как этот фильтр вызвать программно при запуске этой формы??? Расскажите пожалуйста.

    Ответить

    • Я так понимаю, речь не о справочнике, а о таблице, которая заполняется динамически. У меня такая таблица в обработке и команд вроде Настроить список там нет.

      Ответить

  3. Перед установкой нового отбора нужно очистить старый Список.Отбор.Элементы.Очистить()

    Ответить

  4. На НовЭлементОтбора.Родитель = Гр_Отбора;
    Ответ: Поле объекта недоступно для записи (Родитель)

    Ответить

    • Нужно так: НовЭлементОтбора.Родитель.Значение = Гр_Отбора;
      Или так: НовЭлементОтбора.Родитель.Установить(Гр_Отбора);

      Ответить

      • И то и другое выдает ошибку

        Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.