При разработке отчетов на базе Системы компоновки данных (СКД) часто возникает задача сделать интерфейс более дружелюбным для пользователя. Стандартная панель быстрых настроек выводит параметры "в столбик" или "в ряд" без логического разделения. В этой статье мы разберем, как с помощью программных методов Библиотеки стандартных подсистем (БСП) объединить параметры в группы, задать им заголовки и добавить поясняющий текст.
В современных конфигурациях 1С (таких как УТ 11, ERP 2, ЗУП 3) отчеты работают на базе механизмов БСП. Самый гибкий способ изменить внешний вид панели настроек — перехватить момент, когда платформа уже создала элементы формы для параметров, но еще не вывела их пользователю. Рассмотрим, как это сделать через модуль отчета или форму.
Для начала нам нужно сообщить системе, что мы хотим вмешаться в процесс формирования настроек. Проанализируем процедуру ОпределитьНастройкиФормы, которая обычно располагается в модуле отчета:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
// Включаем признак того, что будем обрабатывать панель быстрых настроек
Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
КонецПроцедуры
После этого в модуле формы отчета (или в модуле объекта, если это предусмотрено логикой вызова) необходимо реализовать саму процедуру ПослеЗаполненияПанелиБыстрыхНастроек. Выясним причину, по которой это удобно: здесь у нас есть прямой доступ к коллекции ЭтаФорма.Элементы.
Разберем пример кода, который находит нужные параметры и помещает их в созданную программно группу:
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(ЭтаФорма, ПараметрыЗаполнения) Экспорт
ЭлементыФормы = ЭтаФорма.Элементы;
// 1. Ищем элементы, которые создала СКД для наших параметров
// Важно: Имена элементов обычно начинаются с "ГруппаПользовательскихНастроек_"
// Но в простом случае можно искать по заголовкам (хотя поиск по имени надежнее)
ЭлементЗаказ = Неопределено;
ЭлементПодразделение = Неопределено;
Для Каждого Элемент Из ЭлементыФормы Цикл
Если ТипЗнч(Элемент) <> Тип("ПолеФормы") Тогда
Продолжить;
КонецЕсли;
Если Элемент.Заголовок = "Заказ" Тогда
ЭлементЗаказ = Элемент;
ИначеЕсли Элемент.Заголовок = "Подразделение" Тогда
ЭлементПодразделение = Элемент;
КонецЕсли;
КонецЦикла;
// Если элементы не найдены, выходим
Если ЭлементЗаказ = Неопределено И ЭлементПодразделение = Неопределено Тогда
Возврат;
КонецЕсли;
// 2. Создаем новую группу для объединения параметров
// Определяем родителя (обычно это колонка в панели быстрых настроек)
Родитель = ЭлементЗаказ.Родитель;
НоваяГруппа = ЭлементыФормы.Добавить("ГруппаДополнительныхНастроек", Тип("ГруппаФормы"), Родитель);
НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
НоваяГруппа.Заголовок = "Дополнительные фильтры";
НоваяГруппа.ОтображатьЗаголовок = Истина;
НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
// 3. Перемещаем параметры в новую группу
ЭлементыФормы.Переместить(ЭлементЗаказ, НоваяГруппа);
ЭлементыФормы.Переместить(ЭлементПодразделение, НоваяГруппа);
КонецПроцедуры
Если нам нужно не просто сгруппировать поля, но и вставить текст (например, инструкцию для пользователя или разделитель), воспользуемся типом ДекорацияФормы. Посмотрим на пример реализации внутри того же события ПослеЗаполненияПанелиБыстрыхНастроек:
// Создаем поясняющую надпись
НадписьПояснение = ЭлементыФормы.Добавить("ДекорацияПояснение", Тип("ДекорацияФормы"), НоваяГруппа);
НадписьПояснение.Вид = ВидДекорацииФормы.Надпись;
НадписьПояснение.Заголовок = "Внимание: заполнение данных полей обязательно для корректного расчета прибыли.";
НадписьПояснение.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
Этот подход позволяет гибко управлять дизайном формы. Рассмотрим подробнее: вы можете установить шрифт НадписьПояснение.Шрифт, сделать текст жирным или изменить его положение на форме относительно полей ввода.
Часто программисты сталкиваются с тем, что стандартный период не всегда удобен, если нужно оставить одну из границ (начало или конец) незаполненной. Проанализируем ситуацию: в 1С СтандартныйПериод всегда содержит обе даты, но они могут быть "пустыми" (01.01.0001).
Чтобы корректно обрабатывать такие параметры в СКД, выполним следующие шаги:
СтандартныйПериод (например, &ПериодОтчета).ГДЕ Дата МЕЖДУ &ПериодОтчета.ДатаНачала И &ПериодОтчета.ДатаОкончания.ВЫБОР КОГДА или использовать флаг "Игнорировать значения NULL".Если панель быстрых настроек перегружена текстом, хорошей практикой считается использование всплывающих подсказок. Это позволяет не загромождать интерфейс, сохраняя информативность. В СКД это настраивается программно или в конструкторе:
Найдите ваш параметр в списке элементов формы и установите свойство Подсказка. В режиме предприятия при наведении на знак вопроса рядом с параметром пользователь увидит ваш текст.
ЭлементЗаказ.Подсказка = "Выберите заказ, по которому необходимо сформировать ведомость остатков.";
ЭлементЗаказ.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Малоизвестный, но эффективный прием — применение Условного оформления к полям ввода параметров. В настройках отчета (закладка "Настройки" -> "Условное оформление") можно добавить правило, где в качестве оформляемого поля выбрать не колонку отчета, а именно Параметр.
Например, можно выделить поле ввода периода красным цветом, если оно не заполнено. Это визуально подскажет пользователю, что отчет не сформируется без этих данных.
Резюмируем: Для качественного оформления панели настроек в 1С 8.3 не обязательно рисовать форму "с нуля". Достаточно использовать программные интерфейсы БСП, которые позволяют динамически управлять составом элементов, создавать иерархию групп и добавлять декоративные надписи прямо в процессе работы отчета.