Как вывести параметры и отборы СКД на обычную форму в 1С

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

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

Использование табличного поля для отображения настроек

Основным инструментом для решения нашей задачи в обычных формах является ТабличноеПоле. В отличие от управляемых форм, где платформа сама генерирует интерфейс, здесь нам нужно самостоятельно подготовить контейнер для данных. Рассмотрим этот процесс по шагам.

Во-первых, откроем форму нашего отчета в конфигураторе. Нам необходимо добавить на форму новое ТабличноеПоле. После добавления элемента перейдем в его палитру свойств. Самым важным свойством здесь является «Данные». Именно оно связывает визуальный элемент с программным объектом КомпоновщикНастроек.

Проанализируем, какие пути к данным мы можем указать:

  1. Для вывода отборов: в поле «Данные» указываем ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор. Это позволит пользователю добавлять новые условия, менять виды сравнения и значения.
  2. Для вывода параметров: прописываем путь ОтчетОбъект.КомпоновщикНастроек.Настройки.ParametrsДанных (в некоторых версиях — ПараметрыДанных). Это выведет список всех доступных параметров, определенных в схеме компоновки.
  3. Для вывода сортировки: используем путь ОтчетОбъект.КомпоновщикНастроек.Настройки.Порядок.

Детальная настройка колонок табличного поля

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

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

Совет: Чтобы интерфейс выглядел компактно, для параметров данных часто отключают колонку «ВидСравнения», так как для параметров она обычно не имеет смысла (параметр всегда имеет конкретное значение или выражение).

Программная инициализация настроек в модуле формы

Разберем ситуацию, когда при открытии формы табличное поле остается пустым, хотя в СКД настройки заданы. Это происходит из-за того, что в обычных формах объект КомпоновщикНастроек требует явной инициализации. Выясним причину: если форма создается «с нуля», компоновщик еще не «знает», с какой схемой данных он работает в контексте данной формы.

Нам необходимо добавить код в обработчик события ПриОткрытии или ПередОткрытием формы. Посмотрим на пример кода:


Процедура ПриОткрытии()
    // Инициализируем источник доступных настроек, чтобы компоновщик понимал структуру схемы
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    
    // Если нужно загрузить настройки по умолчанию из схемы
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КонецПроцедуры

После выполнения этого кода ТабличноеПоле на форме автоматически заполнится теми строками, которые вы определили в конфигураторе в закладке «Настройки» схемы компоновки данных.

Вывод конкретного одиночного параметра

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

  1. Создаем на форме обычное ПолеВвода.
  2. В свойстве «Тип значения» указываем соответствующий тип (например, СтандартныйПериод или СправочникСсылка.Организации).
  3. В обработчике события ПриИзменении этого поля прописываем программную установку параметра в компоновщик.

Рассмотрим пример кода для установки параметра:


Процедура ПолеВводаОрганизацияПриИзменении(Элемент)
    // Находим нужный параметр по имени
    ПараметрОрг = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Организация");
    
    Если ПараметрОрг <> Неопределено Тогда
        ПараметрОрг.Значение = Элемент.Значение;
        ПараметрОрг.Использование = Истина;
    КонецЕсли;
КонецПроцедуры

Важно помнить, что прямое связывание ПоляВвода через путь к данным к значению параметра в коллекции (через индекс или имя) в обычных формах часто работает нестабильно или не работает вовсе. Поэтому программная установка через событие является наиболее надежным методом.

Синхронизация и обновление интерфейса

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

Для принудительного обновления состава колонок и данных в ТабличномПоле используйте метод СоздатьКолонки(). Рассмотрим пошагово:


// Пример принудительного обновления интерфейса
ЭлементыФормы.ТабличноеПолеОтборы.СоздатьКолонки();

Этот метод заново анализирует источник данных и перерисовывает таблицу. Однако будьте осторожны: вызов этого метода сбросит ваши ручные настройки ширины и заголовков колонок, сделанные в конфигураторе, если они не были жестко зафиксированы.

Использование механизма пользовательских настроек (8.2 и выше)

Хотя автор темы изначально упоминал, что хочет избежать сложности УФ, стоит знать, что в поздних версиях платформы 8.2 и в 8.3 при работе с обычными формами можно использовать коллекцию КомпоновщикНастроек.ПользовательскиеНастройки.

Выясним преимущество этого подхода: если вы свяжете ТабличноеПоле не с Настройки.Отбор, а с ПользовательскиеНастройки, то в таблицу попадут только те элементы, у которых в схеме компоновки стоит флаг «Включать в пользовательские настройки». Это позволяет гибко управлять тем, что видит пользователь, не меняя код формы, а просто редактируя саму схему СКД (XML).

Для реализации этого метода в «Данных» табличного поля укажите: ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки. Это наиболее современный и правильный способ работы с СКД даже в старом интерфейсе.

Заключение и рекомендации

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

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

← На главную