Формирование отчета из формы документа

1. mistr00 03.08.23 11:41 Сейчас в теме
Салют уважаемые. В базе создал отчет на СКД "МероприятиеПоИтогамТренировок". Теперь нужно сделать возможным вызов этого отчета из формы документа по нажатию с данными, отображаемыми в этом документе. На самом отчете есть отбор по этому документу "СправкаОбИтогахТренировки". Написал такой код:
 ПараметрыКоманды = Новый Структура("СформироватьПриОткрытии", Истина);
    ПараметрыКоманды.Вставить("Отбор", Новый Структура("СправкаОбИтогахТренировки", Объект.Ссылка));  
    ОткрытьФорму("Отчет.МероприятиеПоИтогамТренировок.Форма", ПараметрыКоманды);

Всё выводится с соответствиями с этим документом, но прикол в том, что должна быть возможность при открытии этого отчета выбрать другой документ в отборе( или даже несколько) что-бы выводилось в соответствиями с ними,(сейчас ошибка вылезает " Невозможно применить фиксированные настройки. Пересекаются элементы отбора.") .
Как при открытии отчета мне установить новый отбор в виде другого документа, что-бы отчет выводился в соответствии с выбранным документом?
По теме из базы знаний
Найденные решения
5. mistr00 03.08.23 15:58 Сейчас в теме
Спасибо откликнувшимся, но решения я добился таким кодом (наверняка можно лучше , проще, эффективнее и пр., но мне в силу недостатка опыта пока только такое под силу)
Получил фиксированные настройки кодом из формы отчета и очистил их, ошибка таким образом пропала, а формирование самого отчета решил реализовать другим способом, как по мне более интересным:

&НаКлиенте
Процедура СформироватьОтчетПоИтогамТренировокПосле(Команда) 
	
	ФиксНастройки = Новый НастройкиКомпоновкиДанных;
	
	ОтборПоФиксНастройкам = ФиксНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборПоФиксНастройкам.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СправкаОбИтогахТренировки");
	ОтборПоФиксНастройкам.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборПоФиксНастройкам.ПравоеЗначение = Объект.Ссылка;
	ОтборПоФиксНастройкам.Использование = Истина;
	
	ОтборПоФиксНастройкам.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ФиксированныеНастройки", ФиксНастройки); 
	ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);	 
	ОткрытьФорму("Отчет.МероприятиеПоИтогамТренировок.Форма", ПараметрыФормы);  
	
	ФормаОтчета = ПолучитьФорму("Отчет.МероприятиеПоИтогамТренировок.Форма");
	КомпоновщикНастроек = ФормаОтчета.Отчет.КомпоновщикНастроек;   
	
	ЭлементыОтбораФиксированныхНастроек = КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы;
	ЭлементыОтбораФиксированныхНастроек.Очистить();
                                                      
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. newlogin1 03.08.23 12:27 Сейчас в теме
(1) Отбор как сделан? в самом запросе или при компоновке ставите?
Если у вас стоят с самом отчете проверьте что у отбора стоит включать в пользовательские настройки. Вероятно у вас не включено в пользовательские (или галки не правлиьно стоят) и отбор по документу считается не пользовательским. А если создаете программно, то отбор либо добавляется в пользовательский сразу (тоже программно) либо у него ставится возможность редактирования пользователем.
3. mistr00 03.08.23 12:30 Сейчас в теме
(2)Отчет на скд. Галочки стоят, отбор по документу считается не пользовательским это что значит(извините за тупость заранее)
Прикрепленные файлы:
4. newlogin1 03.08.23 12:49 Сейчас в теме
(3)
читается не пользовательским это что значит
- это значит отбор не доступен для редактирования пользователю. Как отбор добавляете в СКД? У элемента отбора есть свойство (не помню как оно называется) - и там есть значения, чтото вроде Недоступен, Доступен, Быстрый доступ. Как в пользовательской настройке которую вы показали. Вот при добавлении элемента отбора это свойство можно изменить и заблокировать или разблокировать отбор пользователю.

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

Вот посмотрите процедуру и как она работает, можете даже попробовать свой отбор через нее наложить
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОбластьПоискаДобавления, ИмяПоля, ПравоеЗначение, ВидСравнения, Представление, Использование, РежимОтображения, ИдентификаторПользовательскойНастройки)

ИдентификаторПользовательскойНастройки - этот тот самый ид настройки, доступной пользователю
5. mistr00 03.08.23 15:58 Сейчас в теме
Спасибо откликнувшимся, но решения я добился таким кодом (наверняка можно лучше , проще, эффективнее и пр., но мне в силу недостатка опыта пока только такое под силу)
Получил фиксированные настройки кодом из формы отчета и очистил их, ошибка таким образом пропала, а формирование самого отчета решил реализовать другим способом, как по мне более интересным:

&НаКлиенте
Процедура СформироватьОтчетПоИтогамТренировокПосле(Команда) 
	
	ФиксНастройки = Новый НастройкиКомпоновкиДанных;
	
	ОтборПоФиксНастройкам = ФиксНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборПоФиксНастройкам.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СправкаОбИтогахТренировки");
	ОтборПоФиксНастройкам.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборПоФиксНастройкам.ПравоеЗначение = Объект.Ссылка;
	ОтборПоФиксНастройкам.Использование = Истина;
	
	ОтборПоФиксНастройкам.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ФиксированныеНастройки", ФиксНастройки); 
	ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);	 
	ОткрытьФорму("Отчет.МероприятиеПоИтогамТренировок.Форма", ПараметрыФормы);  
	
	ФормаОтчета = ПолучитьФорму("Отчет.МероприятиеПоИтогамТренировок.Форма");
	КомпоновщикНастроек = ФормаОтчета.Отчет.КомпоновщикНастроек;   
	
	ЭлементыОтбораФиксированныхНастроек = КомпоновщикНастроек.ФиксированныеНастройки.Отбор.Элементы;
	ЭлементыОтбораФиксированныхНастроек.Очистить();
                                                      
КонецПроцедуры
Показать
Оставьте свое сообщение

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