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

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

При работе с управляемыми формами в 1С:Предприятии вывод параметров на форму происходит практически автоматически — достаточно установить галочку «Включать в пользовательские настройки». Однако в обычных формах этот механизм работает иначе. Если вы используете собственную или автогенерируемую обычную форму, параметры периода часто остаются «спрятанными» под кнопкой настройки. В этой статье мы подробно разберем, как вывести удобный выбор периода на обычную форму отчета СКД несколькими способами.

Способ 1. Использование табличного поля настроек компоновщика

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

Для реализации этого способа выполним следующие шаги:

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

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

Способ 2. Использование типа «СтандартныйПериод» для удобного выбора

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

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

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

Способ 3. Создание собственных полей ввода на форме и программная передача

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

Для реализации этого механизма выполним совместную работу по следующему алгоритму:

  1. В конфигураторе откроем свойства нашего отчета и на вкладке Данные добавим два реквизита объекта: ДатаНачала и ДатаОкончания с типом Дата.
  2. На нашей форме разместим два элемента управления типа Поле ввода. В свойстве Данные первого поля укажем ЭтотОбъект.ДатаНачала, для второго — ЭтотОбъект.ДатаОкончания.
  3. Для удобства добавим кнопку выбора периода, которая будет вызывать стандартный диалог настройки периода. Напишем обработчик для этой кнопки в модуле формы:

Процедура КнопкаВыбораПериодаНажатие(Элемент)
    
    НастройкаПериода = Новый НастройкаПериода;
    НастройкаПериода.УстановитьПериод(ДатаНачала, ?(ЗначениеЗаполнено(ДатаОкончания), КонецДня(ДатаОкончания), ДатаОкончания));
    НастройкаПериода.РедактироватьКакИнтервал = Истина;
    НастройкаПериода.РедактироватьКакПериод = Истина;
    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
    
    Если НастройкаПериода.Редактировать() Тогда
        ДатаНачала = НастройкаПериода.ПолучитьДатуНачала();
        ДатаОкончания = НастройкаПериода.ПолучитьДатуОкончания();
    КонецЕсли;
    
КонецПроцедуры

Теперь выясним, как связать эти поля ввода с СКД. Самый надежный способ передачи значений — использование предопределенного события модуля объекта отчета ПриКомпоновкеРезультата. Откроем модуль объекта нашего отчета и добавим туда следующий код:


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

Данный код сработает автоматически при нажатии пользователем стандартной кнопки «Сформировать». Платформа возьмет актуальные даты из полей ввода на форме, обработает их функции начала и конца дня и передаст в параметры схемы компоновки данных непосредственно перед выводом результата.

Решение проблемы с заголовком окна («Отчет Отчет по продажам»)

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

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

Для исправления этой проблемы воспользуемся одним из следующих вариантов:


Процедура ПриОткрытии()
    ЭтаФорма.Заголовок = "Анализ продаж компании";
КонецПроцедуры

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

← На главную