Как в отчете 1С на СКД скрыть дату начала периода, оставив только дату окончания?

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

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

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

Способ 1: Использование пользовательского параметра и модификация запроса

Этот метод является наиболее простым, гибким и универсальным. Он позволяет полностью контролировать параметры, видимые пользователю, без сложного программирования.

Разберем процесс по шагам.

  1. Изменение текста запроса

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

    Предположим, в запросе было условие:

    
    ГДЕ
        РеализацииТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    

    Заменим его на новую конструкцию. Дату начала можно задать явно с помощью функции ДАТАВРЕМЯ, а для даты окончания введем новый параметр, например, &ДатаОкончания.

    
    ГДЕ
        РеализацииТоваровУслуг.Дата МЕЖДУ ДАТАВРЕМЯ(2020, 1, 1) И &ДатаОкончания
    

    Если дата начала должна быть началом того же года, что и дата окончания, можно использовать функцию НАЧАЛОПЕРИОДА:

    
    ГДЕ
        РеализацииТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаОкончания, ГОД) И &ДатаОкончания
    

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

    
    {ГДЕ
        РеализацииТоваровУслуг.Дата МЕЖДУ ДАТАВРЕМЯ(2020, 1, 1) И &ДатаОкончания}
    
  2. Настройка параметров в СКД

    Теперь перейдем в конструктор схемы компоновки данных на вкладку "Параметры".

    • Платформа автоматически создаст новый параметр ДатаОкончания, который мы использовали в запросе. Убедитесь, что для него указан тип данных "Дата".
    • Если в списке параметров остались стандартные НачалоПериода и КонецПериода, их можно удалить, так как они больше не используются в запросе.
    • Рекомендуется переименовывать параметры, чтобы их имена не совпадали со стандартными (НачалоПериода, КонецПериода). Это позволит избежать автоматической обработки их платформой как стандартного периода. Например, можно использовать имена ДатаНачалаОтчета и ДатаКонцаОтчета.
  3. Настройка пользовательского интерфейса

    Последний шаг — настроить видимость параметров для пользователя. Перейдем на вкладку "Настройки".

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

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

Способ 2: Программное управление стандартным периодом

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

  1. Настройка параметров в СКД

    На вкладке "Параметры" выполним следующие действия:

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

    На вкладке "Настройки" включим наш новый параметр ДатаКонца в пользовательские настройки, установив соответствующий флажок.

  3. Программная установка значений

    В модуле объекта отчета необходимо создать обработчик события ПриКомпоновкеРезультата. В нем мы получим значение, введенное пользователем, и на его основе установим значения для скрытых стандартных параметров периода.

    Посмотрим на пример кода:

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

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

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

← На главную