|
Программная установка отбора в СКД | ☑ | ||
---|---|---|---|---|
0
red14_88
28.11.11
✎
19:55
|
Сабж. В управляемых формых. Порывшись на форуме нашёл такой способ:
в команде открытия формы пишем: &НаКлиенте Процедура ОтчетОтгрузок(Команда) СтруктураНастроек = ОткрытьОтчет("RedСостоянияОтгрузок",Элементы.Список.ТекущиеДанные.Грузополучатель); ОткрытьФорму("Отчет.RedСостоянияОтгрузок.Форма.ФормаОтчета",СтруктураНастроек); КонецПроцедуры &НаСервере Функция ОткрытьОтчет(ТипОтчета,Грузополучатель) СтруктураНастроек = Новый Структура; ОтчетОбъект = Отчеты[ТипОтчета].Создать(); КомпоновщикНастроек = ОтчетОбъект.КомпоновщикНастроек; КомпоновщикНастроек.Настройки.Отбор.Элементы[0].ПравоеЗначение = Грузополучатель; КомпоновщикНастроек.Настройки.Отбор.Элементы[0].Использование = Истина; СтруктураНастроек.Вставить("Настройки",КомпоновщикНастроек.Настройки); Возврат СтруктураНастроек; КонецФункции В модуле формы отчета пишем: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.СформироватьОтчет(Параметры.Настройки,Результат,ДанныеРасшифровки); ЗначениеВРеквизитФормы(ОтчетОбъект,"Отчет"); КонецПроцедуры В модуле объекта отчета соответственно: Процедура СформироватьОтчет(Настройки, Результат, ДанныеРасшифровки) Экспорт ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ЭтотОбъект.СкомпоноватьРезультат(Результат, ДанныеРасшифровки); КонецПроцедуры В результате отчет формируется с моим отбором. Верно, собака, фомируется. Но в форме отчета отбор не устанавливается (вынесен как таблица с источником данных Отчет.КомпоновщикНастроек.Настройки.Отбор. И поле результата неактивно, висит сплешка "нажмите сформировать чтобы тря-ля-ля". А надо мне не формировать отчет, мне надо отбор установить и фрому открыть. Помогите, люди добрые, спасибо. |
|||
1
QLgKR
28.11.11
✎
20:12
|
А не проще ли использовать параметры формы отчета Отбор и СформироватьПриОткрытии и не лепить все это?
|
|||
2
red14_88
28.11.11
✎
20:17
|
у формы нет параметра Отбор. Отбор это настройки компоновщика настроек. И как в СформироватьПриОткрытии передать значения отбора? Возможно, способ который я применил не самый лучший, но другого не знаю(
Изначально задача такая - форма списка документов, нажимем кнопку, открывается отчет с отбором по контрагенту, который в документе из активной строки. Как то так. Причем не обязательно сразу формировать отчет, надо именно установить отбор. Ибо форма под шибко умных юзверей. Выбрать из дерева контрагента задача непосильная. |
|||
3
QLgKR
28.11.11
✎
20:28
|
(2)
Допустим есть отчет, у которого есть поле доступное для отбора Контрагент. Контрагент = Элементы.Список.ТекущиеДанные.Грузополучатель; Отбор = Новый Структура("Контрагент", Контрагент); ПараметрыОтчета = Новый Структура("Отбор,СформироватьПриОткрытии", Отбор, Истина); ОткрытьФорму("Отчет.RedСостоянияОтгрузок.Форма.ФормаОтчета", ПараметрыОтчета); |
|||
4
red14_88
28.11.11
✎
20:40
|
Попробовал сделать так. Только у меня поле для отбора это "Заказ.Грузополучатель", соответственно ругается на
Отбор = Новый Структура("Заказ.Грузополучатель", Элементы.Список.ТекущиеДанные.Грузополучатель); говорит "Параметр №1 недопустимое значение". Надо обязательно отдельным полем выносить в запросе? |
|||
5
QLgKR
28.11.11
✎
20:49
|
(4) это конструктор структуры ругается.
Да надо делать отдельным полем или идти другим путем. |
|||
6
red14_88
28.11.11
✎
21:04
|
Добавил поле. Отчет формируется, причем с верным отбором. Но, в форме отчета отбор по-прежнему не заполнен. Как и в случае, когда отбор накладывался моим способом. Мб надо как-то именно к элементу формы обратиться? Хотя врядли, он связан с отчетом, а отчет сформирован по нужному отбору...
|
|||
7
teapot123
28.11.11
✎
21:50
|
пользовательские настройки
идОтбор = КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки; ЭлементОтбора = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(идОтбор).Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.Использование = Истина; ЭлементОтбора.ПравоеЗначение = Значение; |
|||
8
red14_88
29.11.11
✎
15:31
|
(7) не совсем понял, в каком месте этот код должен быть выполнен? И под "ИдентификаторПользовательскойНастройки" подразумевается идентификатор поля отбора, который в СКД назначен? В Вашем коде написано Добавить "(Тип("ЭлементОтбораКомпоновкиДанных")", а у меня поле отбора уже настроено в СКД, надо только значение установить.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |