Как вывести вид сравнения (условие) для даты на форму отчета СКД

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

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

Способ 1. Настройка свойств пользовательских настроек в схеме СКД

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

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

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

Способ 2. Программный вывод вида сравнения на управляемую форму

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

Проанализируем ситуацию: каждый элемент отбора в КомпоновщикНастроек.ПользовательскиеНастройки.Элементы имеет свойство ВидСравнения. Мы можем связать элемент формы с этим свойством.

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


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

Чтобы вывести ВидСравнения на форму, выполним следующие действия в редакторе формы:

  1. Перейдем на закладку Реквизиты формы.
  2. Найдем реквизит Отчет, раскроем КомпоновщикНастроек, далее ПользовательскиеНастройки и Элементы.
  3. К сожалению, дерево реквизитов не всегда позволяет напрямую перетащить конкретный ВидСравнения, так как состав коллекции динамический.
  4. В этом случае создадим на форме отдельную группу (например, «ГруппаБыстрыеОтборы») и программно добавим в неё элементы управления, связанные с данными компоновщика.

Способ 3. Вывод таблицы пользовательских настроек

Часто самым эффективным решением является вывод всей таблицы пользовательских настроек на форму. Это позволяет пользователю видеть не только значения, но и все условия (виды сравнения) в удобном табличном виде.

Выясним, как это реализовать:

  1. Откроем форму отчета в конфигураторе.
  2. Перетащим реквизит Отчет.КомпоновщикНастроек.ПользовательскиеНастройки на рабочую область формы.
  3. Система автоматически создаст таблицу.
  4. В свойствах созданной таблицы проверим видимость колонок. Нам важна колонка Вид сравнения.

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

Важные технические нюансы работы с типами данных

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

1. Использование СтандартногоПериода. Если поле «Дата» в наборе данных СКД имеет тип СтандартныйПериод, то классические виды сравнения (больше, меньше) для него не применимы в обычном понимании. Система ожидает выбора интервала (начало и конец периода). Чтобы иметь возможность выбирать именно условия сравнения дат, убедитесь, что в наборе данных тип поля строго Дата.

2. Левое значение (Поле компоновки). Если вы программно создаете элемент отбора, обязательно указывайте ЛевоеЗначение. Без этого система не может определить тип данных поля и, соответственно, не знает, какой набор видов сравнения (числовой, строковый или для дат) предложить пользователю.


НовыйОтбор = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатаДокумента");
НовыйОтбор.Использование = Истина;
// Теперь ВидСравнения будет содержать корректный список: Больше, Меньше и т.д.
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;

Особенности для конфигураций на базе БСП

В современных конфигурациях (ЗУП 3.1, ERP 2.5, УТ 11) формы отчетов генерируются динамически. Если при обновлении конфигурации у вас пропали подписи видов сравнения в шапке, это может быть связано с особенностями работы модулей ОтчетыКлиент и ОтчетыСервер.

Проанализируем ситуацию: БСП старается сделать интерфейс компактным (так называемый Compact GUI). Чтобы вернуть отображение условий, можно попробовать переопределить настройки формы в процедуре ПриСозданииНаСервере, принудительно установив состав отображаемых полей для пользовательских настроек.

Посмотрим на пример логики изменения отображения:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Настройка отображения пользовательских настроек
    Для Каждого ЭлементНастройки Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
        // Можно программно задать режим отображения
        // если мы хотим видеть вид сравнения
    КонецЦикла;
КонецПроцедуры

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

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

← На главную