Разработка отчетов в платформе 1С:Предприятие 8.2 часто требует гибкой настройки фильтров, которые пользователь может изменять непосредственно перед формированием результата. Механизм Системы Компоновки Данных (СКД) позволяет выносить эти настройки на форму отчета, делая интерфейс интуитивно понятным. Однако процесс связывания параметров запроса с полями формы имеет свои технические нюансы, которые необходимо учитывать при написании кода.
Неправильная настройка типов данных или отсутствие явного объявления полей может привести к тому, что параметры просто не отобразятся в диалоге настроек или будут работать некорректно. В этой статье мы разберем полный цикл настройки: от объявления параметра в схеме компоновки до привязки элемента управления на форме отчета.
Основная сложность для начинающих разработчиков заключается в понимании разницы между параметрами макета и параметрами запроса. Важно четко разграничивать эти понятия, чтобы избежать логических ошибок при выполнении отчета. Ниже приведена детальная инструкция, которая поможет вам избежать типичных ошибок и создать качественный отчет.
Подготовка схемы компоновки данных и объявление параметров
Первым шагом является работа непосредственно со схемой компоновки данных (СКД). Вам необходимо открыть конструктор схемы и перейти на вкладку «Параметры». Здесь создается описание переменных, которые будут доступны для ввода пользователем. Тип данных параметра должен строго соответствовать типу поля, которое вы планируете фильтровать в запросе.
Если вы используете параметр для фильтрации по дате, убедитесь, что в свойствах установлен тип Дата, а не строка. Для справочников часто требуется составной тип или ссылка на конкретный вид справочника. Несоответствие типов приведет к ошибке выполнения запроса в момент формирования отчета.
Особое внимание стоит уделить свойству «Использовать». Если галочка снята, параметр будет существовать в схеме, но не будет выведен на форму настроек автоматически. Это полезно для служебных переменных, но для пользовательских фильтров эта опция должна быть активна.
Используйте понятные синонимы для параметров в схеме компоновки, так как именно они будут отображаться в подсказках для пользователя на форме отчета.
После объявления всех необходимых переменных сохраните схему. Теперь эти параметры становятся доступными в тексте запроса через двоеточие, например &ДатаНачала. Это связывает логическую часть отчета с его визуализацией.
Настройка запроса с использованием объявленных переменных
На вкладке «Запрос» схемы компоновки данных вы пишете основной текст SQL-подобного запроса. Для использования ранее созданных параметров необходимо подставлять их имена с префиксом &. Платформа автоматически заменит эти маркеры на реальные значения, введенные пользователем при запуске отчета.
Частой ошибкой является попытка использовать параметры без объявления их в соответствующей вкладке. В таком случае конструктор запроса выдаст предупреждение о неизвестной переменной. Всегда проверяйте список доступных параметров в панели свойств конструктора.
⚠️ Внимание: При использовании параметров в условии ГДЕ убедитесь, что учитываете возможность пустого значения. Если пользователь не заполнит поле, отчет может вернуть пустой результат вместо всех данных.
Для обработки пустых значений часто используют конструкцию ЕСТЬNULL или проверку на неравенство нулю/пустой строке. Это позволяет сделать фильтр опциональным: если параметр не задан, условие игнорируется, и выводятся все записи.
Пример обработки пустого параметра
В условии запроса используйте конструкцию: ГДЕ (Период.ДатаНачала >= &ДатаНачала ИЛИ &ДатаНачала ЕСТЬ NULL). Это позволит получить данные за весь период, если дата не выбрана.
Также важно проверить, что имена параметров в тексте запроса точно совпадают с именами, указанными во вкладке «Параметры». Регистр символов в 1С имеет значение, и опечатка в одной букве приведет к сбою компиляции запроса.
Вывод полей параметров на форму отчета
После сохранения схемы компоновки данных необходимо перейти к редактированию формы самого отчета. Откройте форму в режиме конфигуратора и найдите панель элементов. Параметры, объявленные в СКД с флагом использования, автоматически добавляются в коллекцию параметров формы, но их нужно правильно отобразить.
Обычно для этого используется группа элементов с заголовком «Настройки» или «Параметры». Перетащите нужные параметры из панели свойств формы в эту группу. Система автоматически создаст соответствующие поля ввода: календарь для дат, поле ввода для строк или выбор из списка для справочников.
- 📅 Для параметров типа Дата автоматически создается поле с кнопкой вызова календаря.
- 📂 Для параметров типа СправочникСсылка создается поле с кнопкой выбора значения.
- 🔢 Для числовых параметров создается обычное поле ввода с маской числа.
- ✅ Для булевых параметров создается флажок (CheckBox).
Если автоматическое создание элементов не произошло или вам нужен нестандартный вид, вы можете добавить поле ввода вручную и связать его с параметром через свойство «Данные». Укажите путь к параметру, например Объект.Параметры.ДатаНачала.
Программная установка значений по умолчанию
Часто требуется, чтобы при открытии отчета поля уже были заполнены текущей датой или значением из настроек пользователя. Для этого используется обработчик события ПриСозданииНаСервере или НаСервере перед открытием формы. В этом месте программного кода производится инициализация значений.
Обращение к параметрам формы происходит через коллекцию Объект.Параметры. Вы можете присвоить значение напрямую или вычислить его динамически. Например, для установки даты начала текущего месяца можно использовать встроенные функции работы с датами.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Параметры.ДатаНачала = НачалоМесяца(ТекущаяДата());
Объект.Параметры.ДатаКонца = КонецМесяца(ТекущаяДата());
КонецПроцедуры
Пользователь должен явно нажать кнопку «Сформировать», либо вы можете вызвать формирование программно, если это предусмотрено логикой вашей конфигурации.
Всегда проверяйте типы присваиваемых значений по умолчанию. Попытка записать строку в параметр типа Дата вызовет исключение при выполнении.
Таблица соответствия типов данных и элементов управления
При проектировании формы отчета критически важно понимать, какой элемент управления лучше всего подходит для конкретного типа параметра. Неправильный выбор может затруднить ввод данных пользователем. Ниже приведена справочная таблица соответствий.
| Тип параметра в СКД | Рекомендуемый элемент формы | Особенности настройки |
|---|---|---|
| Дата (ДатаВремя) | Поле ввода (Дата) | Включить кнопку календаря в свойствах |
| Число | Поле ввода (Число) | Задать точность и формат отображения |
| СправочникСсылка | Поле ввода (Справочник) | Указать конкретный вид справочника |
| Булево | Флажок | Настроить заголовок для понятности |
| ПеречислениеСсылка | Поле ввода (Перечисление) | Доступен выбор только из списка значений |
Использование специализированных полей ввода не только улучшает эргономику, но и обеспечивает первичный контроль вводимых данных на клиенте. Это снижает количество ошибок выполнения запроса на стороне сервера.
Если вы используете составные типы, система может предложить пользователю выбор типа значения при вводе. В некоторых случаях целесообразно ограничить составной тип конкретными видами, чтобы упростить интерфейс.
Обработка событий и формирование отчета
Финальным этапом является настройка кнопки «Сформировать». Обычно она вызывает метод формирования отчета, который передается в обработчик события нажатия. В стандартных решениях 1С этот процесс уже реализован, но при кастомной разработке его нужно прописать явно.
В обработчике нажатия кнопки вызывается процедура формирования, которая берет актуальные значения из полей формы и передает их в движок СКД. Движок выполняет запрос с подставленными параметрами и строит результат.
⚠️ Внимание: Если отчет формируется долго, обязательно реализуйте индикацию процесса или блокировку интерфейса, чтобы пользователь не нажимал кнопку повторно.
Для сложных отчетов с большим объемом данных рекомендуется использовать асинхронное формирование или выносить тяжелые вычисления в отдельные потоки, если версия платформы позволяет это сделать. Это предотвратит зависание клиентского приложения.
☑️ Проверка перед запуском
Частые ошибки и способы их устранения
В процессе разработки вы можете столкнуться с ситуацией, когда параметры видны на форме, но отчет формируется некорректно. Чаще всего причина кроется в области видимости переменных или в неправильной передаче контекста.
Проверьте, что в схеме компоновки данных для параметров не стоит ограничение «Только для внутреннего использования». Также убедитесь, что в модуле объекта отчета нет кода, который принудительно очищает значения параметров перед формированием.
Если вы используете динамические списки или дополнительные обработки, убедитесь, что они не перехватывают события формы, блокируя стандартный механизм обновления параметров. Отладка в режиме предприятия с включенным техническим журналом регистрации поможет локализовать проблему.
Почему параметры не сохраняются после закрытия отчета?
По умолчанию значения параметров не сохраняются между сеансами. Для реализации этой функции необходимо использовать хранилище общих настроек (ХранилищеОбщихНастроек) и записывать туда значения в обработчике закрытия формы, а считывать при создании.
Как сделать параметр обязательным для заполнения?
В самой СКД нет прямого флага «Обязательно». Реализация производится программно: перед формированием отчета в обработчике кнопки проверяется заполненность параметра. Если значение пустое, выводится предупреждение и формирование прерывается.
Можно ли скрыть параметр от пользователя?
Да, для этого в схеме компоновки данных снимите галочку «Использовать» у параметра. Такой параметр останется доступным в запросе, но не будет выведен на форму. Значение ему можно присвоить программно.
Что делать, если список значений параметра слишком велик?
Используйте поле ввода с автоподбором или ограничьте выбор с помощью дополнительного фильтра. Для справочников с тысячами записей стандартный выбор может работать медленно, поэтому оптимально использовать ввод по части наименования или коду.
Как изменить заголовок параметра на форме?
Заголовок элемента формы берется из синонима параметра в схеме компоновки данных. Вы можете изменить его в свойствах элемента на форме вручную, если нужно переопределить стандартное имя для конкретного отчета.