Разработка отчетов в системе 1С:Предприятие часто требует предоставления пользователю возможности выбора временного интервала. Наиболее удобным и привычным механизмом для конечного пользователя является выбор Стандартного периода, такого как "Текущий месяц", "Прошлый квартал" или "Год". Встроенный механизм платформы 1С 8.3 позволяет реализовать этот функционал через объект СКД.КомпоновкаНастроек.

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

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

Подготовка схемы компоновки данных

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

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

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

💡

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

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

Настройка выводимых полей и ресурсов

Чтобы значение выбранного периода попало в тело отчета или его шапку, его необходимо добавить в коллекцию выводимых полей. Перейдите в узел Выводимые поля в схеме компоновки данных. Здесь вы увидите список всех доступных для отображения сущностей.

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

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

📊 Как вы обычно добавляете параметры в СКД?
Через конструктор
Вручную в XML
Копирую из другого отчета
Использую готовые библиотеки

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

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

Наиболее эстетичный вариант использования СтандартногоПериода — вывод его в шапку отчета. Для этого необходимо отредактировать макет Макет (обычно это табличный документ). В ячейке, предназначенной для заголовка, разместите поле, связанное с вашим параметром.

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

Если автоматическое форматирование вас не устраивает, можно использовать функцию Формат прямо в выражении поля макета. Например, для даты начала периода можно использовать конструкцию Формат(Период.Начало, "ДФ=dd.MM.yyyy"). Это позволяет гибко управлять отображением, независимо от настроек региональных стандартов пользователя.

☑️ Проверка вывода заголовка

Выполнено: 0 / 4

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

Обработка значений в коде модуля объекта

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

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

Процедура ПриКомпоновкеРезультата(Компоновщик, ДанныеРезультата, ОсновнойМакет, ОсновныеПараметры)

ПараметрыКомпоновки = Новые ПараметрыКомпоновкиДанных;

// Получаем значение стандартного периода

СтандартныйПериод = Параметры.СтандартныйПериод;

Если СтандартныйПериод <> Неопределено Тогда

// Вычисляем границы периода

Границы = СтандартныеПериоды.ПолучитьПериод(СтандартныйПериод, РабочаяДата());

// Добавляем отбор по датам

Отбор = Новые КомпоновкаНастроекКомпоновкиДанныхОтбор;

Отбор.Использование = Истина;

Отбор.ЛевоеЗначение = Новый КомпоновкаНастроекКомпоновкиДанныхПоле("ДатаРегистрации");

Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;

Отбор.ПравоеЗначение = Границы.Начало;

Настройки.Отбор.Добавить(Отбор);

КонецЕсли;

КонецПроцедуры

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

⚠️ Внимание: При программном изменении настроек в событии ПриКомпоновкеРезультата будьте осторожны с рекурсивными вызовами. Убедитесь, что ваши изменения не приводят к бесконечному циклу пересчета параметров компоновщика.

Типичные ошибки и способы их устранения

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

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

Тип ошибки Симптом Причина Решение
Ошибка типов Отчет не формируется, сообщение о невозможности сравнения Сравнение СтандартныйПериод с Датой Использовать поле Начало/Конец периода
Пустое значение В шапке отчета пусто Поле не добавлено в "Выводимые поля" Добавить параметр в коллекцию вывода
Неверный интервал Данные за другой период Неверная настройка отбора в СКД Проверить связи параметров отбора

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

Секрет работы с произвольными периодами

Если пользователь выбирает "Произвольный", система ожидает ввода двух дат. Убедитесь, что в вашей схеме предусмотрены параметры "НачалоПериода" и "КонецПериода", которые становятся видимыми только при выборе этого варианта.

Расширенные возможности форматирования

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

Для сложных отчетов полезно использовать ресурсы СКД. Ресурс — это вычисляемое поле, которое может агрегировать данные. Вы можете создать ресурс, который concatenates (объединяет) название стандартного периода с дополнительным комментарием, например: "Отчет за " + СтрЗаписатьВремя(ТекущаяДата()).

Форматирование числовых показателей внутри периода также зависит от выбранного интервала. Например, при выборе "Год" целесообразно выводить суммы в тысячах или миллионах, а при выборе "День" — в полных единицах. Это настраивается через динамическое выражение в поле формата числа.

💡

Правильная настройка СтандартногоПериода повышает удобство работы пользователя на 30%, избавляя его от ручного ввода дат и снижения риска ошибок выбора диапазона.

⚠️ Внимание: Интерфейс и названия пунктов меню в различных версиях платформы 1С (8.3.10, 8.3.20 и новее) могут незначительно отличаться. Всегда сверяйтесь с документацией к конкретной версии вашей платформы, если какой-то пункт не находится на привычном месте.

Часто задаваемые вопросы (FAQ)

Как сделать параметр СтандартныйПериод обязательным для заполнения?

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

Можно ли скрыть стандартный период от пользователя, но использовать его внутри?

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

Почему не работает автоподстановка дат при выборе периода?

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

Как добавить свой вариант в список стандартных периодов?

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

Влияет ли часовой пояс на расчет стандартного периода?

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