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

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

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

Путаница в терминах: Табличное поле или Поле табличного документа?

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

  1. Табличное поле — это элемент управления, предназначенный для вывода списков, таблиц значений, деревьев значений. Именно этот элемент используется для вывода настроек, параметров и отборов СКД.
  2. Поле табличного документа — это элемент, аналогичный листу Excel. Он служит исключительно для вывода итогового, сформированного результата отчета.

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

Способ 1: Вывод параметров целиком в Табличное поле

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

Для этого выполним следующие действия:

  1. Откроем форму отчета в конфигураторе.
  2. Добавим на форму элемент управления Табличное поле.
  3. В свойствах этого поля, в свойстве Данные, укажем путь к параметрам СКД: КомпоновщикНастроек.Настройки.ПараметрыДанных.

Важный нюанс: почему параметров может не быть в списке выбора?

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


Процедура ПриОткрытии()
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КонецПроцедуры

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

Способ 2: Вывод периода отдельными полями ввода (рекомендуемый)

Вывод периода в виде строки в общей таблице параметров часто неудобен для пользователей. Практика показывает, что гораздо понятнее, когда на форме есть четко выделенные поля "Начало периода" и "Конец периода", либо единый элемент выбора стандартного периода. Разберем подробнее, как это реализовать.

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

  1. Добавим в реквизиты самой формы новый реквизит. Назовем его НастройкаПериода и зададим ему тип СтандартныйПериод.
  2. Разместим на форме два поля ввода, в данных которых укажем НастройкаПериода.ДатаНачала и НастройкаПериода.ДатаОкончания.

Теперь напишем код, который будет сохранять пользовательские настройки при закрытии отчета, восстанавливать их при открытии, а самое главное — передавать выбранный период в параметры СКД перед формированием отчета.

Добавим код в обработчик ПриОткрытии:


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

В обработчик ПриЗакрытии добавим сохранение:


Процедура ПриЗакрытии()
    СохранитьЗначение("НастройкаПериодаОтчетаПоЗаказам", НастройкаПериода);
КонецПроцедуры

И, наконец, самое важное — программная передача параметров в СКД. Этот код можно поместить в обработчик нажатия кнопки "Сформировать" или в событие изменения периода:


// Находим параметр "Период" в настройках компоновщика
ПериодСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");

Если ПериодСКД <> Неопределено Тогда
    // Устанавливаем значение параметра из нашего реквизита формы
    ПериодСКД.Значение = НастройкаПериода;
    
    // КРИТИЧЕСКИ ВАЖНО: Включаем использование параметра
    ПериодСКД.Использование = Истина;
КонецЕсли;

Обратите внимание: недостаточно просто присвоить значение (ПериодСКД.Значение = НастройкаПериода). Чтобы система компоновки учла переданный параметр, обязательно нужно установить свойство Использование = Истина.

Добавление диалога выбора стандартного периода

Чтобы сделать интерфейс еще более удобным (как в типовых конфигурациях), добавим рядом с полями дат кнопку выбора стандартного периода (например, "Прошлый месяц", "Этот год" и т.д.).

Разместим на форме кнопку (например, с пиктограммой календаря) и назначим ей следующий обработчик нажатия:


Процедура УстановитьПериод(Кнопка)
    // Создаем диалог выбора
    ДиалогПериода = Новый ДиалогРедактированияСтандартногоПериода;
    ДиалогПериода.Период = НастройкаПериода;
    
    // Открываем диалог и ждем действий пользователя
    Если ДиалогПериода.Редактировать() Тогда
        // Применяем выбранные настройки к реквизиту формы
        НастройкаПериода.Вариант = ДиалогПериода.Период.Вариант;
        НастройкаПериода.ДатаНачала = ДиалогПериода.Период.ДатаНачала;
        НастройкаПериода.ДатаОкончания = ДиалогПериода.Период.ДатаОкончания;
        
        // Опционально: можно вывести текстом выбранный вариант периода
        // Кнопка.Текст = "" + ДиалогПериода.Период.Вариант;
    КонецЕсли;
КонецПроцедуры

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

← На главную