Как установить отбор в динамическом списке 1С программно?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как установить отбор в динамическом списке 1С программно?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38343
      Фото аватараOdineski
      Участник

        Как програмно установить значение отбора в динамическом списке?

      • #38344
        bot_avaOdin — Одинэсник
        Участник

          Чтобы программно установить значение отбора в динамическом списке на управляемой форме 1С, нужно работать с объектом динамического списка и его параметрами отбора. Основной способ — через объект Параметры динамического списка и метод УстановитьЗначениеПараметра().

          Пример пошагово:

          1. В форме должен быть элемент типа «Динамический список» (DynamicList), у которого в настройках стоит «Произвольный запрос» с параметрами отбора.

          2. В событии формы на сервере (обычно ПриСозданииНаСервере или ПриОткрытииНаСервере) пишем код, который задаёт значение параметра отбора.

          3. Для этого обращаемся к элементу динамического списка, к его свойству Параметры и вызываем метод УстановитьЗначениеПараметра(«ИмяПараметра», Значение).

          4. После установки параметра нужно обновить список, чтобы отбор применился.

          Пример кода:

          |&НаСервере
          |Процедура ПриСозданииНаСервере(Отказ)
          | // Устанавливаем значение параметра отбора «Клиент»
          | Элементы.ДинамическийСписок.Параметры.УстановитьЗначениеПараметра(«Клиент», Справочники.Клиенты.НайтиПоНаименованию(«Иванов Иван»));
          |КонецПроцедуры

          Если нужно изменить отбор в процессе работы формы (например, по нажатию кнопки), то:

          |&НаКлиенте
          |Процедура КнопкаУстановитьОтборНажатие(Кнопка)
          | // Передаём значение параметра на сервер
          | Знач Клиент = Справочники.Клиенты.НайтиПоНаименованию(«Петров Петр»);
          | // Вызываем серверную процедуру для установки параметра
          | ВыполнитьОбработку(«УстановитьОтбор», Клиент);
          | // Обновляем динамический список
          | Элементы.ДинамическийСписок.Обновить();
          |КонецПроцедуры
          |
          |&НаСервере
          |Процедура УстановитьОтбор(Клиент)
          | Элементы.ДинамическийСписок.Параметры.УстановитьЗначениеПараметра(«Клиент», Клиент);
          |КонецПроцедуры

          Если в запросе динамического списка в условии отбора используется параметр с именем «Клиент», то при установке этого параметра динамический список отфильтрует данные по этому значению.

          Если нужно программно установить отбор не через параметры, а через объект ЭлементыОтбораКомпоновкиДанных, то можно так:

          |&НаСервере
          |Процедура ПриСозданииНаСервере(Отказ)
          | Отбор = Элементы.ДинамическийСписок.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Отбор;
          | Если Отбор.Свойство(«Клиент») Тогда
          | Отбор.Клиент.Значение = Справочники.Клиенты.НайтиПоНаименованию(«Иванов Иван»);
          | Отбор.Клиент.ТипСравнения = ТипСравненияКомпоновкиДанных.Равно;
          | КонецЕсли;
          |КонецПроцедуры

          Но чаще и удобнее работать именно с параметрами динамического списка.

          Рекомендую посмотреть здесь, там подробно про параметры динамического списка и отборы:

          https://helpf.pro/faq/view/1657.html

          https://infostart.ru/public/1226445/

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С