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