Настройка внутреннего отчёта БСП: Передача в типовую форму отчёта фиксированных настроек ИЛИ для чего реквизит "ФормаПараметры"

1. Darklight 34 20.11.24 16:39 Сейчас в теме
Пытаюсь разобраться с механизмом подключения своих внутренних отчётов к объектам ИБ посредством механизмом БСП (версия 3.1.2.264; смотрел так же в ERP2 2.5.20.46).

У стандартной типовой формы отчёта "ФормаОтчета" (общая форма, назначенная как "Основная форма отчёта" в корне конфигурации) есть такой реквизит формы "ФормаПараметры" (тип "Произвольный" - реально там "Структура" с заполненными свойствами).

Хочу понять назначение этого реквизита формы! Может пережиток прошлого? В самой ранней БСП, что у меня есть (редакции 2.1) его нет (есть просто лояльная переменная "ЭтаФормаПараметры" при создании формы, заполняемая из параметров формы). Появляется в БСП 2.2, и заполняется свойствами Параметры формы при создании формы. В БСП 3.1 тоже есть - но прямого заполнения я уже не нашёл при создании формы.

Перехожу к сути вопроса.
Хочу задать настройки отбора отчёта - использую БСП-подключаемую процедуру "ПриСозданииНаСервере" модуля объекта отчёта!

Если задать отбор так (пусть это будет поле "Склад"; пример написан немного громоздко для удобства):
Процедура ПриСозданииНаСервере(ФормаОтч, Отказ, СтандартнаяОбработка) Экспорт

//некоторый второстепенный код убрал

Отбор = Новый Структура("Склад", ФормаОтч.Параметры.ПараметрКоманды);
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Отбор", Отбор); //Отбор через структуру "Отбор"
ЗаполнитьЗначенияСвойств(ФормаОтч.ФормаПараметры, ФормаПараметры); //Через реквизит формы "ФормаПараметры", у которого есть свойство "Отбор"

КонецПроцедуры
Показать

То всё работает!


Но - если я хочу применить фиксированные настройки:
Процедура ПриСозданииНаСервере(ФормаОтч, Отказ, СтандартнаяОбработка) Экспорт

//некоторый второстепенный код убрал

Фикс = Новый НастройкиКомпоновкиДанных();
Эл = Фикс.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Эл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
Эл.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии;
Эл.ПравоеЗначение = Список(ФормаОтч.Параметры.ПараметрКоманды);
Эл.Использование = Истина;

ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("ФиксированныеНастройки", Фикс); //Отбор через настройки СКД "ФиксированныеНастройки"
ЗаполнитьЗначенияСвойств(ФормаОтч.ФормаПараметры, ФормаПараметры); //Через реквизит формы "ФормаПараметры", у которого есть свойство "ФиксированныеНастройки"

КонецПроцедуры
Показать

То ничерта не работает!!!

К слову, если не применять этот реквизит "ФормаПараметры", а работать напрямую с Параметрами формы - это оба варианта будут работать

Отбор
Процедура ПриСозданииНаСервере(ФормаОтч, Отказ, СтандартнаяОбработка) Экспорт

//некоторый второстепенный код убрал

Отбор = Новый Структура("Склад", ФормаОтч.Параметры.ПараметрКоманды);
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Отбор", Отбор); //Отбор через структуру "Отбор"
ЗаполнитьЗначенияСвойств(ФормаОтч.Параметры, ФормаПараметры); //Через параметры формы "Параметры", у где есть свойство-параметр "Отбор"

КонецПроцедуры
Показать


ФиксированныеНастройки
Процедура ПриСозданииНаСервере(ФормаОтч, Отказ, СтандартнаяОбработка) Экспорт

//некоторый второстепенный код убрал

Фикс = Новый НастройкиКомпоновкиДанных();
Эл = Фикс.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Эл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");
Эл.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии;
Эл.ПравоеЗначение = Список(ФормаОтч.Параметры.ПараметрКоманды);
Эл.Использование = Истина;

ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("ФиксированныеНастройки", Фикс); //Отбор через настройки СКД "ФиксированныеНастройки"
ЗаполнитьЗначенияСвойств(ФормаОтч.Параметры, ФормаПараметры); //Через параметры формы "Параметры", у где есть свойство-параметр "ФиксированныеНастройки"
КонецПроцедуры
Показать


То есть - "Отбор" через "ФормаПараметры" работает, а "ФиксированныеНастройки" через "ФормаПараметры" не работает. А через "Параметры" всё работает!

Вот я и спрашиваю. Для его реквизит "ФормаПараметры"? И я не правильно его использую - и вообще его не надо использовать?

В 1С ИТС не удалось прояснить данные вопросы!

Ну и на последок замечу, что при программном добавлении БСП-команды (открытия формы) есть такой свойство команды "ПараметрыФормы" (по умолчанию = неопределено)

Это свойство можно настроить при добавлении команды (когда это имеет смысл; ниже искусственный пример, который, конечно, не подходи как решение поставленной задачи):
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт

    Команда = КомандыОтчетов.Добавить();
	Команда.Идентификатор = "ОтчетВедомостьПоТоварам";
    Команда.Представление = НСтр("ru = 'Отчет ведомость'");
    Команда.КлючВарианта = "Ведомость";
	
	Фикс = Новый НастройкиКомпоновкиДанных();
	Эл = Фикс.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Эл.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("МестоХранения");
	Эл.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии;
	Эл.ПравоеЗначение = Список(Справочники._ДемоМестаХранения.НайтиПоКоду("ДМ-000001")); //Чисто для примера
	Эл.Использование = Истина;
	
	Команда.ПараметрыФормы = Новый Структура("ФиксированныеНастройки", Фикс); //Передал ФиксированныеНастройки тут

КонецПроцедуры
Показать

Всё работает (в форме отчёта фиксированные настройки будут заполнены и в параметрах формы и в реквизите "ФормаПараметры".

И ещё один вопрос-оффтопик
Как заставить в БСП 3.1 срабатывать в модуле объекта отчёта процедуру "ПриСозданииНаСервере(ФормаОтч, Отказ, СтандартнаяОбработка)" так, чтобы не прописывать его явно/неявный вызов в "ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов"
Процедура НастроитьВариантыОтчетов(Настройки)
	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ВедомостьПоТоварам);
КонецПроцедуры

при условии включения отчёта в подсистему "ПодключаемыеОтчетыИОбработки"
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот