При работе с управляемыми формами в 1С:Предприятии вывод параметров на форму происходит практически автоматически — достаточно установить галочку «Включать в пользовательские настройки». Однако в обычных формах этот механизм работает иначе. Если вы используете собственную или автогенерируемую обычную форму, параметры периода часто остаются «спрятанными» под кнопкой настройки. В этой статье мы подробно разберем, как вывести удобный выбор периода на обычную форму отчета СКД несколькими способами.
Рассмотрим самый быстрый способ, который позволяет вывести параметры периода (и любые другие настройки) на форму вообще без написания программного кода. Этот вариант идеально подходит, если вам нужно дать пользователю доступ к параметрам прямо на форме отчета.
Для реализации этого способа выполним следующие шаги:
КомпоновщикНастроек.Настройки.ПараметрыДанных.КомпоновщикНастроек.Настройки.Отбор.При запуске отчета платформа автоматически сгенерирует в этом табличном поле строки для всех доступных параметров. Пользователь сможет редактировать даты начала и окончания периода непосредственно на форме, не заходя в окно настроек.
Вводить даты вручную пользователям часто бывает неудобно. Гораздо приятнее выбирать периоды с помощью стандартных интервалов (например, «Текущий месяц», «Прошлый квартал», «Прошлый год»). Разберем по шагам, как настроить такую возможность в схеме компоновки данных (СКД) с помощью типа данных СтандартныйПериод:
Период и установим для него тип данных СтандартныйПериод.НачалоПериода и КонецПериода (которые используются в тексте вашего запроса) установим галочку Ограничение доступности. Это скроет их от пользователя, чтобы не загромождать интерфейс.НачалоПериода укажем выражение:
&Период.ДатаНачала
КонецПериода укажем выражение:
&Период.ДатаОкончания
После этого, используя Способ 1, выведем параметры на форму. Теперь вместо двух полей с точными датами пользователь увидит одно удобное поле Период с кнопкой выбора стандартных интервалов 1С.
Проанализируем ситуацию, когда вам требуется полный контроль над расположением элементов управления, дизайном формы и поведением полей ввода. В этом случае мы можем создать отдельные реквизиты на форме и передавать их значения в СКД программно в момент формирования отчета.
Для реализации этого механизма выполним совместную работу по следующему алгоритму:
ДатаНачала и ДатаОкончания с типом Дата.ЭтотОбъект.ДатаНачала, для второго — ЭтотОбъект.ДатаОкончания.
Процедура КнопкаВыбораПериодаНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(ДатаНачала, ?(ЗначениеЗаполнено(ДатаОкончания), КонецДня(ДатаОкончания), ДатаОкончания));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
ДатаНачала = НастройкаПериода.ПолучитьДатуНачала();
ДатаОкончания = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Теперь выясним, как связать эти поля ввода с СКД. Самый надежный способ передачи значений — использование предопределенного события модуля объекта отчета ПриКомпоновкеРезультата. Откроем модуль объекта нашего отчета и добавим туда следующий код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Получаем доступ к параметрам настроек компоновщика
ПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных;
// Устанавливаем значения параметров СКД из реквизитов нашего отчета
Если ЗначениеЗаполнено(ДатаНачала) Тогда
ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоДня(ДатаНачала));
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончания) Тогда
ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецДня(ДатаОкончания));
КонецЕсли;
КонецПроцедуры
Данный код сработает автоматически при нажатии пользователем стандартной кнопки «Сформировать». Платформа возьмет актуальные даты из полей ввода на форме, обработает их функции начала и конца дня и передаст в параметры схемы компоновки данных непосредственно перед выводом результата.
При использовании автогенерируемых форм разработчики часто сталкиваются с неприятным визуальным багом: заголовок окна отчета дублируется и выглядит как «Отчет Отчет по продажам...». Выясним причину этого поведения платформы в обычных формах.
По умолчанию платформа 1С автоматически добавляет слово «Отчет » к синониму вашего объекта конфигурации при выводе формы на экран. Если в синониме вашего отчета в метаданных написано «Отчет по продажам», то на выходе мы получим задвоение слова.
Для исправления этой проблемы воспользуемся одним из следующих вариантов:
ПриОткрытии явно переопределите свойство заголовка формы:
Процедура ПриОткрытии()
ЭтаФорма.Заголовок = "Анализ продаж компании";
КонецПроцедуры
Используя предложенные методики, мы можем легко адаптировать интерфейс отчетов на обычных формах под нужды конечных пользователей, сделав работу с периодами максимально удобной и интуитивно понятной.