|
СКД: программно изменить доступность поля | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
12.02.14
✎
14:23
|
Добрый день. Помогите разобраться, сам уже всю голову разбил (
При запуске отчета должен программно устанавливаться отбор по реквизиту, и сам реквизит - удаляться из доступных полей отбора. Вот что делаю: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Если текущий пользователь - партнер, то задам начальные настройки: Если Параметры.Свойство("ПартнерТекущейСесии") Тогда Настройка = Отчет.КомпоновщикНастроек.ПолучитьНастройки(); // Добавлю отбор по текущему партнеру: ЭлементОтбора = Настройка.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Партнер"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение = Параметры.ПартнерТекущейСесии; ЭлементОтбора.Использование = Истина; ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ПериодОтчета = Настройка.ПараметрыДанных.Элементы.Найти("ПериодОтчета").Значение; // Устанавливаю период отчета, от даты последней записи: ПериодОтчета.ДатаНачала = ДобавитьМесяц(Параметры.ДатаПоследнейЗаписи, -1); ПериодОтчета.ДатаОкончания = Параметры.ДатаПоследнейЗаписи; Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройка); КонецЕсли; КонецПроцедуры В отладчике виден после исполнение отбор, все вроде норм. Но когда переформировываю отчет, отбора там нет: &НаСервере Процедура СформироватьИВывестиОтчетВТабличныйДокумент() Результат.Очистить(); ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); СКД = ОтчетОбъект.СхемаКомпоновкиДанных; КомпНастроек = ОтчетОбъект.КомпоновщикНастроек; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, КомпНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанных")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры Если настройки отбора устанавливать не в "ПриСозданииНаСервере", а непосредственно при выводе отчета, оно работает. Но так не хочу, потому что кроме отбора по реквизиту есть еще отбор по периоду, который должен быть доступен для изменения. Отбор для реквизита не должен быть виден в пользовательских настройках, для этого нужно программно нажать эти флажки - http://i59.fastpic.ru/big/2014/0212/69/b9c4e6e63b08fb4a9ecf4adf7d64c169.png, и как это сделать тоже не могу разобраться. |
|||
1
Zhuravlik
12.02.14
✎
14:40
|
ИНтересно, это вопрос очень глупый, или очень сложный....
|
|||
2
Defender aka LINN
12.02.14
✎
14:52
|
Ну вот почему, ПОЧЕМУ, когда нужен отбор среднестатистический одинэснег сразу бежит вкрячивать параметр и потом спамит мисту на предмет "а чо делать, чтобы если не задано, то не отбирало"? Почему, когда нужен параметр, тот же одинэснег, выпучив глаза, сразу фигачит отбор и, пока 1С запускается, уже постит на мисте "а как теперь от пользователя отбор спрятать"?
*бьется головой об стену* |
|||
3
Zhuravlik
12.02.14
✎
15:05
|
(2) Потому что одинэснег ищет и не находит :) И вы несправедливы, я обычно стараюсь держаться подальше от чужих советов, тут просто совсем уже не понимаю ни хрена. Объектов - куча, что с ними делать - непонятно.
Параметр? А в самой схеме можно скрывать отбор в зависимости от настройки параметра? Что-то как-то трехэтажно мне кажеться... Я вот такой пример нарыл на просторах, но не взлетает тоже: &НаСервере Процедура КотораяВызываетсяВПриОткрытии() ТекОтчет=РеквизитФормыВЗначение("Отчет"); СКД=ТекОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); // Задаю параметры периода по-умолчанию: ПериодОтчета = СКД.Параметры.ПериодОтчета.Значение; // Устанавливаю период отчета, от даты последней записи: ПериодОтчета.ДатаНачала = ДобавитьМесяц(Расшифровка.ДатаПоследнейЗаписи, -1); ПериодОтчета.ДатаОкончания = Расшифровка.ДатаПоследнейЗаписи; //ПериодОтчета. //ПараметрСОтбором = СКД.Параметры.Найти("Номенклатура"); //ПараметрВыбора = ПараметрСОтбором.ПараметрыРедактирования.Элементы.Найти("ПараметрыВыбора"); //НовыйОтбор=ПараметрВыбора.Значение.Добавить(); //НовыйОтбор.Имя = "Отбор.Ссылка"; //НовыйОтбор.Значение = СписокДоступныхЗначений(); //ПараметрВыбора.Использование = Истина; АдресСхемы = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор); ТекОтчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы)); ТекОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); ЗначениеВРеквизитФормы(ТекОтчет,"Отчет"); КонецПроцедуры |
|||
4
Zhuravlik
13.02.14
✎
22:15
|
ап...
|
|||
5
Мимохожий Однако
13.02.14
✎
22:54
|
А не проще в структуре полей у этого поля поставить галочку недоступности в отборах?
|
|||
6
Мимохожий Однако
13.02.14
✎
22:57
|
Зачем обязательно программно?
|
|||
7
Zhuravlik
13.02.14
✎
23:05
|
Я хочу в одном отчете использовать ОДНУ схему для разных вариантов запуска. Сейчас таких вариантов 2: в одном поле "партнер" доступно для отборов, в другом нет, и отбор по-умолчанию установлен.
- Еще хочется разобраться в объектной модели СКД раз и навсегда, но своей головы не хватает, уж очень необъятная. - СКД нужна обязательно основная (в см. основной реквизит формы), чтобы были доступны все плюшки УФ (быстрый доступ и т.п.). Т.е. в идеале что хочу получить - в ПриСозданииНаСервере устанавливаются настройки текущей схемы по-умолчанию, и один пользователь видит отбор, другой - нет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |