|
v8: Программно заменить схему компоновки в тонком клиенте | ☑ | ||
---|---|---|---|---|
0
brato4karik
06.11.13
✎
12:45
|
Добрый день, необходима помощь, поскольку справиться сам не могу.
Есть отчет который доступен разным пользователям в разных режимах запуска 1С. Часть пользователей работают из толстого клиента, часть из веб. Те пользователи которые работают из толстого имеют больше привилегий нежели пользователи браузерной версии(больше полей, больше деталей). Для этого есть две схемы(по умолчанию в отчете в качестве основой стоит схема "подробная" для пользователей толстого клиента) а вот для управляемой формы нужно выбирать другую схему "краткая". вот такой код не дает эффекта: &НаСервере Процедура ЗагрузитьНастройки() ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("краткая"); ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.НастройкаДляВеб.Настройки); ЗначениеВРеквизитФормы(ОтчетОбъект,"Отчет"); КонецПроцедуры при возвращении на клиент, свойство Компоновщик, Реквизита формы Отчет, имеет старый компоновщик, от подробной схемы. Получается что схема и компоновщик не заменились и результат отчета выводиться в подробном виде |
|||
1
H A D G E H O G s
06.11.13
✎
12:51
|
Чтото такое я проходил давно.
|
|||
2
brato4karik
06.11.13
✎
12:54
|
И я прохожу давно, множество способов уйти от такого подхода, но щас обойти не выходит))
|
|||
3
H A D G E H O G s
06.11.13
✎
12:56
|
Во временное хранилище я схему помещал, а адрес Временного Хранилища засовывал... ХЗ куда я его засовывал, не помню.
|
|||
4
H A D G E H O G s
06.11.13
✎
12:58
|
Или даже не сам адрес, а Схему. Важно, чтобы объект схемы не уничтожался после возврата с сервера, а жил все время жизни формы.
|
|||
5
brato4karik
06.11.13
✎
12:59
|
ну я тоже это вроде как подумал, заменил схему, загрузил настройки, инициализировал компоновщик, потом во временное помещать компоновщик и по адресу его сдергивать на клиенте. и обновлять свойство реквизита формы.
Но может у кого есть рабочий пример, наверняка уж ктонить такое делал. |
|||
6
H A D G E H O G s
06.11.13
✎
13:00
|
(5) Это было 3 года назад, уж след простыл тому коду.
|
|||
7
К_Дач
06.11.13
✎
13:02
|
(0) Формировать отчет полностью программно, в зависимости от параметров текущего пользователя (толстый клиент, тонкий клиент) инициализировать ту или иную СКД.
|
|||
8
brato4karik
06.11.13
✎
13:05
|
(7) Нет, на форме есть доступ к полям отборов, сортировок текущего компоновщика. Получается что пользователь с "кратокой " версией отчета может задать в качестве отбора значения тех полей которые ему недоступны. (хоть на выводе он и получить менее детализированную выборку, но будет знать что она по той информации которая ему не положена)
|
|||
9
К_Дач
06.11.13
✎
13:16
|
(8) сделай в лоб. Нарисуй две формы, для толстого и тонкого клиента, на каждой форме вытащи свою СКД и настрой так, как надо. При создании отчета на сервере открывай нужную форму
|
|||
10
Зойч
06.11.13
✎
13:19
|
схему нужно в хранилище класть, а компоновщик инициализировать адресом
|
|||
11
H A D G E H O G s
06.11.13
✎
13:20
|
(10) Во! Точно!
|
|||
12
GenV
06.11.13
✎
13:21
|
(8) Типовой функционал отчета (варианты, настройки, схема СКД в метаданных) рассчитан на одну схему СКД (та, что задана в метаданных). Когда то пытался сделать отчет схема СКД которого подгружалась из сохраненной в справочнике - были грабли из-за конфликта сохраненных настроек.
Могу предложить попробовать настраивать доступность полей программно в зависимости от пользователя в одной общей схеме СКД или программно реализовывать типовой механизм работы с настройками и компоновщиком. ЗЫ Попробуй подменять схему в толстом клиенте, а в тонком родную использовать - в тонком больше ограничений. |
|||
13
zladenuw
06.11.13
✎
13:21
|
(0)
может надо так СхемаКомпоновкиДанныхА = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1"); КомпоновщикНастроекА = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроекА.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхА)); |
|||
14
brato4karik
06.11.13
✎
13:59
|
(12) да такой подход точно работает, но это не решение задачи))
(10),(11) видимо должен согласиться, что это единственный вариант |
|||
15
К_Дач
06.11.13
✎
14:28
|
(0) как-то у меня была задача расшифровывать полученный в результате отчета данные с помощью той же самой СКД, но с другими настройками, я делал так:
///// СКД = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Компоновщик = ЭтаФорма.КомпоновщикДетальный; ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД); Компоновщик.Инициализировать(ИсточникНастроек); Компоновщик.ЗагрузитьНастройки(СКД.ВариантыНастроек.Расшифровка.Настройки); Компоновщик.Восстановить(); ///// где КомпоновщикДетальный - добавленный на форму реквизит с типом КомпоновщикНастроекКомпоновкиДанных |
|||
16
К_Дач
06.11.13
✎
14:29
|
Соответсвенно, у меня в вариантах настроек СКД был вариант "Расшифровка"
|
|||
17
brato4karik
08.11.13
✎
13:40
|
Тему можно закрыть, результат получен.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); ОтчетОбъект.СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("СхемаКомпоновкиДанныхВеб"); ЗначениеВРеквизитФормы(ОтчетОбъект,"Отчет"); КонецПроцедуры |
|||
18
Зойч
08.11.13
✎
13:42
|
(17) Подожди - это еще не вечер )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |