|
Программное добавление доступных полей выбора СКД | ☑ | ||
---|---|---|---|---|
0
1stypen
09.08.11
✎
17:22
|
нашел такую тему, но её так видимо и не решили
v8: Как добавить Вычисляемое поле СКД на Тонком Клиенте? v8: Как добавить Вычисляемое поле СКД на Тонком Клиенте? У меня подобная проблема. Делаю отчет на СКД. В качестве набора данных есть внешний объект. Поля не описаны, т.к. формируются динамически. ПриКомпоновкеРезультата в модуле отчета формирую этот внешний источник(обычная таблица) - добавляю его колонки как поля в СКД, в выбор настройкиКД тоже их добавляю - инициализирую отчет - выводится всё отлично НО эти поля не попадают в доступные для выбора - в итоге пользователь не может их добавить никуда, т.к. не видит их при изменении варианта. И так же не видно что этим колонкам сопаставлено поле СКД - красный крестик вводится. Хотя все данные выводятся правильные Подскажите, пожалуйста, как добавить эти поля в доступные для выбора. Програмно эта коллекция только на чтение, а при формировании таблицы консткрукции {} использовать бесполезно |
|||
1
1stypen
09.08.11
✎
17:44
|
код такой
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоляВнешнегоИсточника = СхемаКомпоновкиДанных.НаборыДанных.ВидыОпераций_Выбранные.Поля; ТабСвойствОЗ = ПолучитьТабСвойствОЗ(); ТабСвойствОЗ.Колонки.Добавить("ПутьКДанным",Новый ОписаниеТипов("Строка",)); н=0; Для Каждого стрСвОз Из ТабСвойствОЗ Цикл тПоле = "а"+Строка(н); стрСвОз.ПутьКДанным = тПоле; ньюПоле = ПоляВнешнегоИсточника.Найти(тПоле); Если ньюПоле = Неопределено Тогда ньюПоле = ПоляВнешнегоИсточника.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ньюПоле.Поле = тПоле; ньюПоле.ПутьКДанным = тПоле; КонецЕсли; ньюПоле.Заголовок = стрСвОз.СвойствоНаименование; ньюПоле.ТипЗначения = стрСвОз.СвойствоТипЗначения; ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = стрСвОз.СвойствоНаименование; ВыбранноеПоле.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(тПоле); н=н+1; КонецЦикла; ВидыОпераций_Выбранные = ПолучитьТабЗначенийСвойствОЗ(ПоляВнешнегоИсточника,ТабСвойствОЗ); ВнешниеНаборыДанных = Новый Структура(); ВнешниеНаборыДанных.Вставить("ВидыОпераций_Выбранные", ВидыОпераций_Выбранные); НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры |
|||
2
Паучог
09.08.11
✎
17:55
|
(0) А может быть нужно
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Перед тем как в него добавлять выбранные поля? |
|||
3
1stypen
09.08.11
✎
18:38
|
При инициализации в компоновщик настроек в доступные полях добавляются эти поля. Но при изменении варианта пользователь их не видит всё равно. Я даже пытался делать свой компановщик настроек - не помогало. Может компоновать надо как то по хитрому
Наверное нужно было задавать вопрос "чтобы пользователь видел", а в настройке в доступных поля выбора они есть, если в отладчике смотреть. |
|||
4
1stypen
09.08.11
✎
18:45
|
ВыбранноеПоле = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = стрСвОз.СвойствоНаименование; ВыбранноеПоле.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(тПоле); это делать не обязательно - это я чтоб хоть увидеть эти данные - главное чтоб юзер их смог выбрать потом в настройке варианта |
|||
5
GANR
09.08.11
✎
18:50
|
Прямого ответа у меня нет. Даю подсказку, как отладить СКД:
#Если ТолстыйКлиентУправляемоеПриложение Тогда Конструктор = Новый КонструкторСхемыКомпоновкиДанных; Конструктор.УстановитьСхему(ПолучитьСхемуКомпоновкиДанных(АдресСКД)); Конструктор.Редактировать(ЭтаФорма); #КонецЕсли Потом открытую схему копируем в консоль и правим, в консоли можно посмотреть как схема исправленная "ручками" выглядит в окнах отладчика. Только так и можно отладить отчеты на СКД. Как по-другому - не представляю. |
|||
6
1stypen
09.08.11
✎
18:58
|
у меня управляемое приложение - только тонкий клиент - нет толстого клиента(
|
|||
7
GANR
10.08.11
✎
10:21
|
(6) Так отлаживать, вроде, можно в разных режимах ??? Добейся чтоб был толстый ))). Эта штука (5) только под толстым и работает.
|
|||
8
1stypen
10.08.11
✎
10:35
|
Дык вить пользователи будут поля то выбирать, а у них тонкий)
будем искать( |
|||
9
GANR
10.08.11
✎
11:58
|
(8)Толстый клиент нужен исключительно для отладки. Отладил - и работай себе под тонким когда всё налажено.
|
|||
10
1stypen
10.08.11
✎
13:21
|
Конструктор тоже результатов не дал - он тоже не показывает те поля, которые я добавил руками - он показывает только те поля, которые были обозначены в СКД изначально
|
|||
11
GANR
10.08.11
✎
14:37
|
(10) Вероятно, программа в коде затерла настройки, которые были внесены руками и переформировала всё заново. С свойстве "Структура", вроде отображаются настройки, добавленные руками.
|
|||
12
GANR
10.08.11
✎
14:48
|
ЛЮБОЕ действие с СКД, которое можно выполнить руками, можно выполнить и программно
|
|||
13
1stypen
10.08.11
✎
15:18
|
"ЛЮБОЕ действие с СКД, которое можно выполнить руками, можно выполнить и программно" - это бесспорно.
Но пользователь пока руками то ничего не делал))) ПриКомпоновкеРезультата() програмно эти поля внесены как в СКД, потом после инициализации настроек эти поля попали так и в доступные поля для выбора. Я в отладчике их вижу везде. После КомпоновщикМакета.Выполнить - они есть После ПроцессорКомпоновкиДанных.Инициализировать - они есть После ПроцессорВывода.Вывести - они тоже есть А когда пользователь редактирует вариант - их нет. Где они перетерлись програмно? |
|||
14
GANR
15.08.11
✎
17:02
|
(13) А вот так можно ещё и настройки сохранить
#Если ТолстыйКлиентУправляемоеПриложение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда Конструктор = Новый КонструкторСхемыКомпоновкиДанных; Конструктор.УстановитьСхему(ПолучитьСхемуКомпоновкиДанных(АдресСКД)); Конструктор.Редактировать(ЭтаФорма); ПолноеИмяФайла = "C:\Documents and Settings\Руслан_Ганеев\Рабочий стол\NKD_Save.xml"; Настройки = Компоновщик.Настройки; НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO); Запись = Новый ЗаписьXML; Запись.ОткрытьФайл(ПолноеИмяФайла); Запись.ЗаписатьОбъявлениеXML(); НовыйСXDTO.ЗаписатьXML(Запись, Настройки, НазначениеТипаXML.Явное, ФормаXML.Элемент); Запись.Закрыть(); #КонецЕсли |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |