Отчеты и Аналитика · 11 мин
Как передать параметры в форму отчета в 1С
Как передать параметры в форму отчета 1С: ОткрытьФорму с параметрами, СКД, отборы, программная установка настроек. Примеры кода и типичные ошибки.
Передача параметров в форму отчета — одна из базовых задач при доработке конфигураций 1С. Пользователь нажимает кнопку в документе или списке, а отчет должен открыться уже с заполненными отборами: по контрагенту, периоду, складу или конкретному документу. Если параметры не передать, пользователю придется каждый раз настраивать отчет вручную, что замедляет работу и провоцирует ошибки в аналитике.
В управляемом приложении существует несколько рабочих способов: передача параметров через структуру при вызове ОткрытьФорму(), программная установка настроек компоновки данных (СКД), использование ключей пользовательских настроек и формирование отчета вообще без открытия формы — с выводом результата в табличный документ. Выбор зависит от того, нужно ли пользователю интерактивно менять настройки или достаточно готового результата.
Ниже разобраны все основные сценарии с примерами кода, ограничения каждого подхода и способы проверить, что параметры действительно применились. Примеры ориентированы на управляемые формы и отчеты на СКД — именно так построено большинство типовых конфигураций.
Способы передачи параметров: что выбрать
Первый способ — передать структуру параметров вторым аргументом в ОткрытьФорму(). Форма отчета получит их в обработчике ПриСозданииНаСервере через объект Параметры. Этот вариант подходит, когда отчет должен открыться пользователю с предустановленными отборами, но остаться интерактивным.
Второй способ — программная работа с настройками СКД. Отчет на компоновке данных хранит параметры и отборы в объекте КомпоновщикНастроек, и их можно заполнить из кода до формирования результата. Так делают, когда нужно сформировать отчет в фоне, отправить по почте или вывести в печатную форму.
Третий вариант — стандартные параметры формы отчета в типовых конфигурациях на БСП: Отбор, КлючНазначенияИспользования, СформироватьПриОткрытии, КлючВарианта. Если отчет построен на базе библиотеки стандартных подсистем, эти ключи обрабатываются автоматически, и дорабатывать форму не требуется.
Сравнение вариантов
Подходит для интерактивного открытия с предустановленными отборами. Ограничение: параметры нужно обработать в форме отчета или использовать ключи БСП.
Для фонового формирования, рассылок, печати. Ограничение: требует понимания объектной модели компоновки данных.
Для сохранения и подстановки готовых наборов настроек. Ограничение: работает только в конфигурациях с БСП.
Передача параметров через ОткрытьФорму
Базовый прием — сформировать структуру и передать ее при открытии. Например, из формы документа нужно открыть отчет по взаиморасчетам с отбором по контрагенту:
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Контрагент", Объект.Контрагент));
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ВзаиморасчетыСКонтрагентами.Форма", ПараметрыФормы);
Ключ СформироватьПриОткрытии заставляет отчет сразу выполниться — пользователь увидит готовый результат без нажатия кнопки «Сформировать». Ключ Отбор в конфигурациях на БСП автоматически превращается в отбор компоновки данных, если имя поля совпадает с именем поля в настройках СКД.
В самописном отчете без БСП параметры нужно обработать вручную в обработчике ПриСозданииНаСервере формы отчета: прочитать Параметры.Отбор, найти соответствующие элементы в компоновщике настроек и установить значения. Без этого шага переданные данные просто проигнорируются.
- 1Определите имя поля отбора в схеме компоновки данных отчета — оно должно совпадать с ключом структуры
- 2Сформируйте структуру с ключами Отбор и СформироватьПриОткрытии
- 3Вызовите ОткрытьФорму с полным именем формы отчета и структурой параметров
- 4Откройте отчет и проверьте, что отбор установлен и результат сформирован
Установка параметров и отборов СКД программно
Когда отчет нужно сформировать без открытия формы, работают напрямую с объектом отчета. Получают схему компоновки, загружают настройки по умолчанию, затем находят параметры по имени и задают значения:
ОтчетОбъект = Отчеты.ПродажиПоМенеджерам.Создать();
Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
ПараметрПериод = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Период"));
ПараметрПериод.Значение = Новый СтандартныйПериод(ДатаНачала, ДатаОкончания);
ПараметрПериод.Использование = Истина;
Отборы добавляются в коллекцию Настройки.Отбор.Элементы. Для каждого элемента указывают левое значение (поле компоновки), вид сравнения и правое значение. Флаг Использование = Истина обязателен — без него отбор существует, но не применяется, и это одна из самых частых причин «не работающих» параметров.
Параметры типа «Период» и «СтандартныйПериод» обрабатываются по-разному. Стандартный период передается одним значением, а обычный параметр даты — как Дата. Если в СКД параметр объявлен как дата без времени, а передать дату с временем, граничные записи могут не попасть в выборку.
Формирование отчета без открытия формы
Для регламентных заданий, рассылок и печатных форм отчет формируют программно и выводят в табличный документ. Используются объекты КомпоновщикМакетаКомпоновкиДанных и ПроцессорКомпоновкиДанных:
Схема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(Процессор);
Такой код выполняется на сервере и не требует интерфейса. Результат можно сохранить в файл, приложить к письму или показать пользователю. Важно помнить: тяжелые отчеты в регламентных заданиях стоит ограничивать по периоду и отборам, иначе они создадут нагрузку на сервер СУБД.
Параметры формы отчета в конфигурациях на БСП
Если конфигурация построена на библиотеке стандартных подсистем (УТ, ERP, Бухгалтерия и подобные), форма отчета уже умеет обрабатывать стандартные ключи. Кроме Отбор и СформироватьПриОткрытии доступны КлючВарианта — открывает конкретный вариант отчета, и КлючНазначенияИспользования — позволяет сохранять настройки отдельно для каждого контекста вызова.
Полезный прием — передача произвольных параметров отчета (не отборов) через структуру Отбор невозможна, если параметр не выведен в настройки. В этом случае параметр должен быть включен в пользовательские настройки варианта отчета, либо его устанавливают через расширение формы.
Чтобы понять, какие ключи поддерживает конкретный отчет, откройте модуль его формы и посмотрите обработчик ПриСозданииНаСервере и вызовы общих модулей БСП вида ОтчетыКлиентСервер и Отчеты.УстановитьУсловноеОформление. Там видно, как форма реагирует на переданные параметры.
Проверка результата и отладка
Первый признак корректной передачи — отчет открылся и сразу сформировался с нужным отбором. Если результат пустой или содержит лишние данные, проверьте настройки компоновщика через кнопку «Изменить вариант» в открытом отчете: там видно, какие отборы и параметры реально установлены.
При программном формировании полезно временно вывести настройки в сообщение или журнал: перебрать Настройки.Отбор.Элементы и параметры данных, убедиться, что Использование = Истина и значения заполнены. Это быстрее, чем искать причину в запросе СКД.
Если отбор по ссылочному полю не срабатывает, проверьте тип значения: в параметр должен попасть именно объект нужного типа (ссылка на справочник или документ), а не строка с наименованием. Несовпадение типов — частая причина пустого результата без каких-либо сообщений об ошибке.
Как проверить результат
Поле отбора заполнено переданным значением, флажок включен
Отбор отсутствует или выключен — имя поля не совпадает со схемой
Данные соответствуют переданным параметрам
Пустой или избыточный результат — проверяйте типы значений и флаг Использование
Отчет открывается стабильно с теми же настройками
Настройки сбрасываются — проверьте КлючНазначенияИспользования и сохраненные варианты
Частые вопросы
Как передать в отчет список значений, а не одно значение?
Сформируйте СписокЗначений, заполните его нужными ссылками и передайте в отбор с видом сравнения ВСписке. В программной настройке СКД вид сравнения задается как ВидСравненияКомпоновкиДанных.ВСписке, а правое значение — сам список.
Почему отчет открывается, но отбор не применяется?
Чаще всего имя ключа в структуре отбора не совпадает с именем поля в схеме компоновки данных, либо у элемента отбора не установлено свойство Использование. Откройте настройки варианта отчета и сверьте точные имена полей.
Можно ли передать параметры во внешний отчет?
Да, механизм тот же: внешний отчет открывается через ОткрытьФорму по полному имени либо подключается через дополнительные отчеты и обработки БСП. Параметры передаются структурой и обрабатываются в ПриСозданииНаСервере формы внешнего отчета.
Как открыть отчет с конкретным вариантом настроек?
Передайте в структуре параметров ключ КлючВарианта со значением — именем варианта, заданным в схеме компоновки данных. В конфигурациях на БСП форма автоматически применит этот вариант при открытии.
Как передать период в отчет программно?
Используйте тип СтандартныйПериод: создайте объект, задайте ДатаНачала и ДатаОкончания, присвойте параметру СКД. Если в схеме два отдельных параметра начала и окончания, заполните каждый значением типа Дата и включите использование.
Что делать, если доработку отчета сбрасывает обновление?
Выносите изменения в расширение конфигурации: расширяйте форму отчета или добавляйте внешний отчет с нужной логикой. Прямые правки типовых модулей при обновлении либо теряются, либо блокируют автоматическое обновление.
Что важно запомнить
Для интерактивного открытия передавайте структуру с ключами Отбор и СформироватьПриОткрытии в ОткрытьФорму, для фонового формирования работайте с компоновщиком настроек СКД напрямую. Всегда проверяйте совпадение имен полей, флаг Использование и типы значений — это три главные причины неработающих параметров. Доработки выполняйте через расширения, а не правкой типовых форм.