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

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

Материал будет полезен как начинающим разработчикам, так и тем, кто хочет систематизировать знания. Все примеры тестировались на актуальных релизах платформы 1С:Предприятие 8.3.22 и 8.3.23, но основные принципы работают и в более ранних версиях.

📊 Какой способ передачи параметров вы используете чаще?
Через форму отчета
Программно из модуля
Через компоновщик настроек
Другой вариант

1. Передача параметров через форму отчета

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

Чтобы добавить параметр в форму отчета:

  1. Откройте отчет в режиме Конфигуратор → Отчеты.
  2. Перейдите на вкладку Форма (для управляемых форм) или Формы → ОсновнаяФорма (для обычных форм).
  3. Добавьте новый реквизит формы с типом данных, соответствующим параметру (например, Дата для периода или СправочникСсылка.Организации для выбора организации).
  4. Настройте элемент управления (поле ввода, выпадающий список) и свяжите его с реквизитом.

Пример для управляемой формы:

&НаКлиенте

Процедура ПериодНачалоПриИзменении(Элемент)

Если ЗначениеЗаполнено(ПериодНачало) И ЗначениеЗаполнено(ПериодОкончание) Тогда

КнопкаСформировать.Доступность = Истина;

Иначе

КнопкаСформировать.Доступность = Ложь;

КонецЕсли;

КонецПроцедуры

Важно: если параметр должен быть обязательным, добавьте проверку перед формированием отчета. Например, так:

&НаКлиенте

Процедура КнопкаСформироватьНажатие(Кнопка)

Если НЕ ЗначениеЗаполнено(Организация) Тогда

ПоказатьПредупреждение("Не выбрана организация!");

Возврат;

КонецЕсли;

СформироватьОтчет();

КонецПроцедуры

Указан обязательный период

Выбрана организация (если требуется)

Параметры соответствуют типам данных в отчете

Форма не содержит ошибок валидации-->

2. Программная передача параметров из модуля

Когда параметры формируются автоматически (например, текущая дата или организация по умолчанию), удобнее передавать их программно. Это также полезно при интеграции отчетов с другими подсистемами .

Основные методы:

  • 📌 Через параметры функции ПолучитьОтчет() — если отчет вызывается из другого модуля.
  • 🔄 Через свойство Параметры объекта отчета — если отчет формируется в текущем модуле.
  • 🔗 Через СтруктураПараметров — для передачи нескольких значений одновременно.

Пример программной передачи параметров в отчет ПродажиПоКонтрагентам:

Процедура СформироватьОтчетПоКонтрагенту(Контрагент)

Отчет = Отчеты.ПродажиПоКонтрагентам.Создать();

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

Параметры.Вставить("Контрагент", Контрагент);

Параметры.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДата()));

Параметры.Вставить("ДатаОкончания", КонецМесяца(ТекущаяДата()));

Отчет.Параметры = Параметры;

Отчет.Скомпоновать();

Отчет.Показать();

КонецПроцедуры

Обратите внимание: если параметр — это ссылка на справочник, передавайте именно ссылку, а не строку с наименованием. Например:

Параметры.Вставить("Организация", Справочники.Организации.НайтиПоНаименованию("ООО Ромашка"));
💡

Если отчет используется в нескольких местах, вынесите логику формирования параметров в отдельную функцию. Это упростит поддержку кода.

3. Передача параметров через компоновщик настроек

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

Чтобы добавить параметр в компоновщик:

  1. Откройте схему компоновки данных отчета (Отчет → Схема компоновки данных).
  2. Перейдите на вкладку Параметры.
  3. Добавьте новый параметр, укажите его имя, тип и значение по умолчанию.
  4. В запросе отчета используйте параметр через конструкцию ГДЕ [Поле] = &Параметр.

Пример настройки параметра в схеме компоновки:

Параметр Тип Значение по умолчанию Описание
ДатаНачала Дата НачалоМесяца(ТекущаяДата()) Начальная дата периода отчета
Организация СправочникСсылка.Организации Справочники.Организации.ПустаяСсылка() Фильтр по организации
ТолькоАктивные Булево Истина Флаг для фильтрации активных записей

В запросе компоновщика параметр используется так:

ВЫБРАТЬ

Продажи.Дата КАК Дата,

Продажи.Сумма КАК Сумма

ИЗ

Документ.РеализацияТоваровУслуг КАК Продажи

ГДЕ

Продажи.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

И Продажи.Организация = &Организация

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

Для передачи массива (например, списка организаций) используйте тип Массив в параметрах компоновщика.

В запросе применяйте конструкцию ГДЕ Поле В (&МассивПараметров).

Пример передачи из кода:

Параметры.Вставить("СписокОрганизаций", Новый Массив(Орг1, Орг2));

4. Динамические параметры: формирование на лету

Иногда параметры отчета нужно формировать динамически — например, на основе текущего пользователя, прав доступа или данных из других систем. В таких случаях используется комбинация программного кода и компоновщика.

Пример: передача в отчет только тех организаций, которые доступны текущему пользователю:

Процедура СформироватьОтчетСДинамическимиПараметрами()

Отчет = Отчеты.Продажи.Создать();

// Получаем организации, доступные пользователю

ДоступныеОрганизации = ПолучитьДоступныеОрганизации(ТекущийПользователь());

// Передаем как параметр

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

Параметры.Вставить("Организации", ДоступныеОрганизации);

Отчет.Параметры = Параметры;

Отчет.СкомпоноватьРезультат();

КонецПроцедуры

В схеме компоновки параметр Организации должен иметь тип Массив, а в запросе использоваться с оператором В:

ГДЕ Продажи.Организация В (&Организации)
💡

Динамические параметры позволяют гибко адаптировать отчеты под права пользователей или бизнес-логику, но требуют дополнительной обработки ошибок (например, если массив пуст).

5. Типичные ошибки и их решения

Даже опытные разработчики сталкиваются с проблемами при передаче параметров. Разберем самые распространенные:

  • Параметр не передается в отчет — проверьте, что имя параметра в коде совпадает с именем в схеме компоновки (регистр важен!).
  • Отчет игнорирует параметр — убедитесь, что параметр используется в запросе компоновщика (например, ГДЕ Поле = &Параметр).
  • Ошибка типов данных — если параметр имеет тип СправочникСсылка, а передаете строку, возникнет исключение. Используйте Справочники.Имя.НайтиПоНаименованию().
  • Пустой результат отчета — проверьте, что передаваемые значения существуют в базе (например, организация не помечена на удаление).

Пример ошибки и ее исправления:

⚠️ Внимание: Если вы передаете параметр типа Дата как строку (например, "01.01.2026"), компоновщик не сможет его корректно обработать. Всегда используйте функцию Дата():
Параметры.Вставить("ДатаНачала", Дата(2026, 1, 1));

Еще одна частая проблема — несоответствие имен параметров в коде и схеме компоновки. Например, в коде передаете Параметры.Вставить("ДатаС", ...), а в компоновщике параметр называется ДатаНачала. В этом случае параметр просто игнорируется.

ИмяПараметраДатаНачала = "ДатаНачала";

Затем применяйте эту константу и в коде, и в компоновщике.-->

6. Передача параметров в внешние отчеты

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

Пример для внешнего отчета:

Процедура ЗагрузитьВнешнийОтчет()

ПутьКФайлу = "C:\Отчеты\Продажи.erf";

ВнешнийОтчет = ВнешниеОтчеты.Создать(ПутьКФайлу);

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

Параметры.Вставить("Период", ТекущаяДата());

ВнешнийОтчет.ПараметрыВыполнения = Параметры;

ВнешнийОтчет.Выполнить();

КонецПроцедуры

Важно: во внешнем отчете параметры должны быть объявлены в модуле объекта с атрибутом &Параметры:

&Параметры

Процедура Сформировать(Период) Экспорт

// Логика формирования отчета

КонецПроцедуры

⚠️ Внимание: При работе с внешними отчетами убедитесь, что версия платформы , на которой создан отчет, совместима с текущей версией базы. В противном случае могут возникать ошибки при передаче параметров.

7. Оптимизация: как ускорить работу отчетов с параметрами

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

  • Индексируйте поля, по которым идет фильтрация (например, Дата или Организация).
  • Используйте серверные процедуры для предварительной обработки данных.
  • Ограничивайте период по умолчанию (например, текущий месяц вместо всего года).
  • Кэшируйте часто используемые параметры (например, список организаций пользователя).

Пример оптимизированного запроса с параметрами:

ВЫБРАТЬ ПЕРВЫЕ 1000

Продажи.Дата КАК Дата,

Продажи.Сумма КАК Сумма

ИЗ

Документ.РеализацияТоваровУслуг КАК Продажи

ГДЕ

Продажи.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

И Продажи.Организация = &Организация

УПОРЯДОЧИТЬ ПО

Дата

ИТОГИ

СУММА(Сумма)

ПО

Дата

Критическая ошибка: если в отчете используется параметр типа "Массив" без ограничения размера, это может привести к переполнению памяти при передаче больших данных (например, списка из 10 000 элементов). Всегда ограничивайте размер массивов или используйте постраничную обработку.

FAQ: Частые вопросы по передаче параметров в 1С

Как передать параметр в отчет, если он вызывается из обработки?

Используйте метод Отчет.Параметры = ВашаСтруктураПараметров. Пример:

Отчет = Отчеты.ВашОтчет.Создать();

Параметры = Новый Структура("Период, Организация", ТекущаяДата(), ТекущаяОрганизация());

Отчет.Параметры = Параметры;

Можно ли передать в отчет параметр типа "ТаблицаЗначений"?

Да, но только если схема компоновки поддерживает этот тип. В запросе используйте конструкцию В (&Таблица), где &Таблица — параметр типа ТаблицаЗначений. Пример передачи:

Таблица = Новый ТаблицаЗначений();

Таблица.Колонки.Добавить("Код");

Таблица.Добавить();

Таблица[0].Код = 123;

Параметры.Вставить("ФильтрКоды", Таблица);

Почему отчет не видит передаваемый параметр?

Проверьте:

  1. Совпадают ли имена параметров в коде и схеме компоновки (с учетом регистра).
  2. Передается ли параметр до вызова Скомпоновать().
  3. Соответствует ли тип передаваемого значения типу параметра в схеме.
Как передать параметр в отчет на СКД (система компоновки данных)?

В СКД параметры передаются через коллекцию ПараметрыКомпоновкиДанных. Пример:

Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройкиПоУмолчанию();

Настройки.ПараметрыДанных.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));

Отчет.Скомпоновать(Настройки);

Можно ли передать параметр в отчет через URL (например, для веб-клиента)?

Да, в веб-клиенте параметры можно передавать через строку запроса. Пример URL:

http://server/1c/base?report=Sales¶m1=2026-01-01

В коде отчета параметры читаются из ПараметрыСеанса или ГлобальныйКонтекст.