К статье
Практический материал

Отчеты и Аналитика · 11 мин

Как передать параметры в форму отчета в 1С

Как передать параметры в форму отчета 1С: ОткрытьФорму с параметрами, СКД, отборы, программная установка настроек. Примеры кода и типичные ошибки.

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

В управляемом приложении существует несколько рабочих способов: передача параметров через структуру при вызове ОткрытьФорму(), программная установка настроек компоновки данных (СКД), использование ключей пользовательских настроек и формирование отчета вообще без открытия формы — с выводом результата в табличный документ. Выбор зависит от того, нужно ли пользователю интерактивно менять настройки или достаточно готового результата.

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

Способы передачи параметров: что выбрать

Первый способ — передать структуру параметров вторым аргументом в ОткрытьФорму(). Форма отчета получит их в обработчике ПриСозданииНаСервере через объект Параметры. Этот вариант подходит, когда отчет должен открыться пользователю с предустановленными отборами, но остаться интерактивным.

Второй способ — программная работа с настройками СКД. Отчет на компоновке данных хранит параметры и отборы в объекте КомпоновщикНастроек, и их можно заполнить из кода до формирования результата. Так делают, когда нужно сформировать отчет в фоне, отправить по почте или вывести в печатную форму.

Третий вариант — стандартные параметры формы отчета в типовых конфигурациях на БСП: Отбор, КлючНазначенияИспользования, СформироватьПриОткрытии, КлючВарианта. Если отчет построен на базе библиотеки стандартных подсистем, эти ключи обрабатываются автоматически, и дорабатывать форму не требуется.

Сравнение вариантов

ОткрытьФорму с параметрами

Подходит для интерактивного открытия с предустановленными отборами. Ограничение: параметры нужно обработать в форме отчета или использовать ключи БСП.

Программная настройка СКД

Для фонового формирования, рассылок, печати. Ограничение: требует понимания объектной модели компоновки данных.

Ключи пользовательских настроек

Для сохранения и подстановки готовых наборов настроек. Ограничение: работает только в конфигурациях с БСП.

Передача параметров через ОткрытьФорму

Базовый прием — сформировать структуру и передать ее при открытии. Например, из формы документа нужно открыть отчет по взаиморасчетам с отбором по контрагенту:

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Отбор", Новый Структура("Контрагент", Объект.Контрагент));

ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму("Отчет.ВзаиморасчетыСКонтрагентами.Форма", ПараметрыФормы);

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

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

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

Установка параметров и отборов СКД программно

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

ОтчетОбъект = Отчеты.ПродажиПоМенеджерам.Создать();

Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;

ПараметрПериод = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(

Новый ПараметрКомпоновкиДанных("Период"));

ПараметрПериод.Значение = Новый СтандартныйПериод(ДатаНачала, ДатаОкончания);

ПараметрПериод.Использование = Истина;

Отборы добавляются в коллекцию Настройки.Отбор.Элементы. Для каждого элемента указывают левое значение (поле компоновки), вид сравнения и правое значение. Флаг Использование = Истина обязателен — без него отбор существует, но не применяется, и это одна из самых частых причин «не работающих» параметров.

Параметры типа «Период» и «СтандартныйПериод» обрабатываются по-разному. Стандартный период передается одним значением, а обычный параметр даты — как Дата. Если в СКД параметр объявлен как дата без времени, а передать дату с временем, граничные записи могут не попасть в выборку.

Формирование отчета без открытия формы

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

Схема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

Макет = КомпоновщикМакета.Выполнить(Схема, Настройки);

Процессор = Новый ПроцессорКомпоновкиДанных;

Процессор.Инициализировать(Макет);

ТабДок = Новый ТабличныйДокумент;

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ТабДок);

ПроцессорВывода.Вывести(Процессор);

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

Параметры формы отчета в конфигурациях на БСП

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

Полезный прием — передача произвольных параметров отчета (не отборов) через структуру Отбор невозможна, если параметр не выведен в настройки. В этом случае параметр должен быть включен в пользовательские настройки варианта отчета, либо его устанавливают через расширение формы.

Чтобы понять, какие ключи поддерживает конкретный отчет, откройте модуль его формы и посмотрите обработчик ПриСозданииНаСервере и вызовы общих модулей БСП вида ОтчетыКлиентСервер и Отчеты.УстановитьУсловноеОформление. Там видно, как форма реагирует на переданные параметры.

Типичные ошибки
01
Передан отбор по имени, которого нет в СКД, — параметр молча игнорируется, отчет формируется по всем данным
02
Не установлен флаг Использование у параметра или отбора — значение задано, но не применяется
03
Передана дата со временем в параметр типа Дата без времени — теряются записи на границе периода
04
Код формирования размещен в клиентской процедуре — в тонком клиенте возникает ошибка вызова серверных объектов
05
Доработана типовая форма отчета без расширения — изменения теряются при обновлении конфигурации

Проверка результата и отладка

Первый признак корректной передачи — отчет открылся и сразу сформировался с нужным отбором. Если результат пустой или содержит лишние данные, проверьте настройки компоновщика через кнопку «Изменить вариант» в открытом отчете: там видно, какие отборы и параметры реально установлены.

При программном формировании полезно временно вывести настройки в сообщение или журнал: перебрать Настройки.Отбор.Элементы и параметры данных, убедиться, что Использование = Истина и значения заполнены. Это быстрее, чем искать причину в запросе СКД.

Если отбор по ссылочному полю не срабатывает, проверьте тип значения: в параметр должен попасть именно объект нужного типа (ссылка на справочник или документ), а не строка с наименованием. Несовпадение типов — частая причина пустого результата без каких-либо сообщений об ошибке.

Контрольные точки

Как проверить результат

Отбор в открытом отчете
Норма

Поле отбора заполнено переданным значением, флажок включен

Тревожный признак

Отбор отсутствует или выключен — имя поля не совпадает со схемой

Результат формирования
Норма

Данные соответствуют переданным параметрам

Тревожный признак

Пустой или избыточный результат — проверяйте типы значений и флаг Использование

Повторное открытие
Норма

Отчет открывается стабильно с теми же настройками

Тревожный признак

Настройки сбрасываются — проверьте КлючНазначенияИспользования и сохраненные варианты

Частые вопросы

Как передать в отчет список значений, а не одно значение?

Сформируйте СписокЗначений, заполните его нужными ссылками и передайте в отбор с видом сравнения ВСписке. В программной настройке СКД вид сравнения задается как ВидСравненияКомпоновкиДанных.ВСписке, а правое значение — сам список.

Почему отчет открывается, но отбор не применяется?

Чаще всего имя ключа в структуре отбора не совпадает с именем поля в схеме компоновки данных, либо у элемента отбора не установлено свойство Использование. Откройте настройки варианта отчета и сверьте точные имена полей.

Можно ли передать параметры во внешний отчет?

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

Как открыть отчет с конкретным вариантом настроек?

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

Как передать период в отчет программно?

Используйте тип СтандартныйПериод: создайте объект, задайте ДатаНачала и ДатаОкончания, присвойте параметру СКД. Если в схеме два отдельных параметра начала и окончания, заполните каждый значением типа Дата и включите использование.

Что делать, если доработку отчета сбрасывает обновление?

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

Итог

Что важно запомнить

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