Как настроить выбор одного значения из списка на управляемой форме отчета

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов и обработок на управляемых формах часто возникает задача предоставить пользователю выбор строго определенного варианта из предопределенного набора (например, вариантов «На начало», «Начислено», «Оплачено» или элементов справочника). Начинающие разработчики нередко сталкиваются с ошибкой, назначая реквизиту тип СписокЗначений, в результате чего платформа открывает диалог множественного подбора значений вместо компактного выпадающего списка.

Разберем, почему возникает такая ситуация, как правильно настроить тип реквизита и элементы формы, а также как реализовать одиночный выбор программно и средствами системы компоновки данных (СКД).

Причина ошибки: разница между типом данных и интерфейсным списком

Проанализируем механику работы платформы 1С:Предприятие 8.3:

  1. Тип реквизита СписокЗначений: предназначен для хранения коллекции элементов. При выводе такого реквизита на форму платформа генерирует поле, клик по которому открывает модальное окно для добавления, редактирования и выбора сразу нескольких строк (коллекции значений).
  2. Одиночный выбор из вариантов: если требуется выбрать только одно значение (например, конкретную строку или ссылку), реквизит формы должен иметь целевой тип — Строка, Число или ссылку на конкретный объект конфигурации. Выпадающий список в этом случае реализуется через интерфейсное свойство элемента формы ПолеВвода, а не через тип самого реквизита.

Способ 1. Статическая настройка через свойства элемента формы

Рассмотрим по шагам настройку поля в конфигураторе без написания программного кода:

  1. Создадим реквизит формы или отчета с базовым типом, например Строка (длину укажем достаточной для хранения максимального варианта).
  2. Перетащим реквизит в элементы формы — создастся элемент типа ПолеВвода.
  3. Откроем палитру свойств созданного элемента формы.
  4. Установим флажок у свойства РежимВыбораИзСписка в значение Истина. Это запретит пользователю ручной ввод произвольного текста с клавиатуры.
  5. Убедимся, что свойство КнопкаВыпадающегоСписка установлено в значение Истина.
  6. В свойстве СписокВыбора нажмем кнопку открытия и добавим необходимые варианты, заполнив колонки «Значение» и «Представление» (например, значения «НаНачало», «Начислено», «Оплачено»).

Способ 2. Динамическое заполнение списка выбора программно

Если варианты выбора должны формироваться на основе данных информационной базы (например, выбор шаблона услуги или статуса), заполним список выбора программным кодом при открытии или создании формы на сервере.

Посмотрим на пример заполнения выпадающего списка результатами запроса к справочнику:


&НаСервере
Процедура ЗаполнитьСписокВыбораНаСервере()
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Ссылка КАК Ссылка,
        |   Наименование КАК Наименование
        |ИЗ
        |   Справочник.РТ_ШаблоныУслуг
        |ГДЕ
        |   ПометкаУдаления = ЛОЖЬ";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    // Очищаем список выбора элемента перед заполнением
    Элементы.ТоварыВидРезки.СписокВыбора.Очистить();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Элементы.ТоварыВидРезки.СписокВыбора.Добавить(
            ВыборкаДетальныеЗаписи.Ссылка, 
            ВыборкаДетальныеЗаписи.Наименование
        );
    КонецЦикла;
    
КонецПроцедуры

Обратим внимание: обращение к списку выбора выполняется через коллекцию элементов формы (Элементы.ИмяЭлемента.СписокВыбора), а метод Добавить() первым параметром принимает фактическое сохраняемое значение, а вторым — пользовательское представление.

Способ 3. Настройка списка доступных значений в параметрах СКД

Если отчет строится на базе схемы компоновки данных и значение выбора должно передаваться напрямую в запрос или отбор отчета, удобнее обойтись без создания дополнительных реквизитов формы.

Разберем процесс настройки через схему компоновки данных:

  1. Откроем схему компоновки данных на вкладке Параметры.
  2. Выберем нужный параметр отчета (тип параметра — Строка, Число или ссылочный).
  3. В колонке Доступные значения откроем диалог редактирования списка.
  4. Добавим фиксированные варианты, указав значение и понятное для пользователя представление.
  5. На вкладке Настройки добавим данный параметр в раздел Пользовательские настройки.

В этом случае платформа автоматически создаст на форме отчета компактное поле с выпадающим списком выбора одного варианта из заданного перечня.

Как реализовать несколько вариантов отчета в одной форме

Когда в рамках одного отчета требуется предоставить пользователю несколько принципиально разных вариантов отображения данных, применяют один из следующих подходов:

  1. Варианты настроек в одной СКД (рекомендуемый способ): в схеме на вкладке «Настройки» создаются отдельные варианты отчета со своими группировками, полями и фильтрами. Пользователь переключает их через стандартное меню вариантов. Программно нужный вариант загружается вызовом:
    
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.ИмяВарианта.Настройки);
    
  2. Динамическая подмена макета схемы компоновки: в отчет добавляется несколько макетов типа СхемаКомпоновкиДанных. При смене схемы на сервере требуется обязательно заново инициализировать компоновщик настроек:
    
    Схема = ОтчетОбъект.ПолучитьМакет("ИмяВторойСхемы");
    Отчет.СхемаКомпоновкиДанных = Схема;
    
    Источник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
    Отчет.КомпоновщикНастроек.Инициализировать(Источник);
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
    

Инициализация через ИсточникДоступныхНастроекКомпоновкиДанных критически важна: без нее форма продолжит оперировать структурой полей старой схемы, что приведет к ошибкам при компоновке результата.

← На главную