27.01.2009, 14:50 | #1 |
Участник
|
Статьи аналитик
Добрый день. Подскажите, пожалуйста, решение такой проблемы:
В описании класса пишу: Dimension dimension; Создаю диалог: public Object dialog() { DialogRunbase dialog = super(); DialogField dialogBKNumber; ; dialog.addGroup("Фильтры"); dialogBKNumber = dialog.addField(typeid(Dimension),"Статья БК","Выбор статьи БК"); dialogBKNumber.value(dimension); return dialog; } В результате получаю на форме семь полей аналитик, а мне нужно только одно поле. Проблема в том, что Dimesion - это массив из семи аналитик. Как мне указать, что мне нужна конкретно 7-я аналитика в качестве типа dimension? Вариант Dimension[7] dimesion; не работает. Спасибо. |
|
27.01.2009, 14:58 | #2 |
Axapta
|
Создать для нужной аналитики свой ЕДТ-наследние от SysDim и прописать соответствющий релейшн к таблице Dimensions. В диалог подставлять этот ЕДТ.
X++: DepartmentId extends SysDim
DepartmentId == Dimensions.Num
0 = Dimensions.Code |
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
27.01.2009, 14:58 | #3 |
Участник
|
нужно создать расшитенный тип со ссылкой на аналитику кот вам нужна или используйте функцию extendedTypeName2Id_RU
з.ы упс попередили)
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy |
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
27.01.2009, 15:16 | #4 |
Участник
|
вариант без создания отдельных EDT
Посмотрите тему финансовые аналитики в диалог
Там в обсуждении был пример job'а в котором программно скрывались 'ненужные' поля финансовых аналитик в диалоге: X++: static void jobDimensionFields(Args _args) { Dialog dialog ; DialogField dialogFieldDimension; FormStringControl formStringControl ; Counter idx ; ; dialog = new Dialog() ; dialogFieldDimension = dialog.addField(typeId(Dimension)); for( idx=2; idx<=Dimensions::numOfDimensions(); idx++ ) { formStringControl = dialogFieldDimension.fieldControl(idx) ; formStringControl.visible( false ) ; } dialog.run() ; } |
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
27.01.2009, 15:55 | #5 |
Участник
|
Спасибо всем за помощь.
Извиняюсь, но мне непонятно, что значит строка в связях: 0 == Dimensions.DimensionCode Почему 0? Объясните, пожалуйста. Последний раз редактировалось Silphidae; 27.01.2009 в 16:41. |
|
27.01.2009, 16:57 | #6 |
Участник
|
Цитата:
Цитата:
Сообщение от oip
...
DepartmentId == Dimensions.Num 0 = Dimensions.Code В данном случае создана доп.связь (ограничение) типа 'Поле ссылки фиксировано' по таблице Dimensions с ограничением по полю Dimensions.DimensionCode = "Подразделение" Если Вам необходим какой-либо другой вид аналитики, то смотрите числовое значение этого кода в enum SysDimension (например SysDimension::SomeValue = 10) и подставляете в связь вместо 0. Последний раз редактировалось petergunn; 27.01.2009 в 17:22. Причина: орфография |
|
27.01.2009, 17:13 | #7 |
Участник
|
Цитата:
Сообщение от petergunn
В основе поля таблицы Dimensions.DimensionCode лежит перечисление (base enum) SysDimension в котором 0 = SysDimension:: Department
Создана доп.связь (ограничение) типа 'Поле ссылки фиксировано' по таблице Dimensions с ограничением по полю Dimensions.DimensionCode = "Подразделение" |
|
29.01.2009, 16:42 | #8 |
Участник
|
DAX 4.0 SP2
Цитата:
Данное утверждение показалось несколько странным, решил проверить его на практике. За основу эксперимента был взят совет данный автору топика: Цитата:
Создал новый EDT, который должен был отображать штатную аналитику 'Центр затрат' (SysDimension::Center=1) X++: DimensionSysDemo extends SysDim
DimensionSysDemo == Dimensions.Num
1 = Dimensions.DimensionsCode Однако на диалоге, в поле на основе созданного EDT DimensionSysDemo, в lookup действительно отображался список аналитик соответствующих типу 'Подразделение'. Причина этого в том что на EDT SysDim, взятого в качестве 'родителя', указана своя lookup форма (FormHelp=DimensionsLookup), в методе run() которой происходит определение значения переменной sysDimension на основании индекса массива поля с которого открывается lookup. X++: void run() { ... callerControl = SysTableLookup::getCallerStringControl(element.args()); ... callerFieldId = callerControl.dataField() ; sysDimension = Dimensions::arrayIdx2Code(fieldExt2Idx(callerFieldId)); callerFieldId = fieldExt2Id(callerFieldId); if (!callerFieldId) { sysDimension = Dimensions::arrayIdx2Code(callerControl.arrayIndex()); } ... } У созданного EDT DimensionSysDemo нет дополнительных array elements и преобразование Dimensions::arrayIdx2Code( <arrayIdx> ) давало 0 (SysDimension:: Department). Т.е. если наследование определенной аналитики идет от SysDim, то вне зависимости от указанных relations на новом EDT отображаться в lookup будет аналитика 'Подразделение', что и подтвердили слова Silphidae. Наследование новых EDT от SysGroup (как родителя SysDim) избавляет от такого вида lookup. (работает штатная функциональность по отображению lookup на основе EDT relations ) В качестве следующей цели эксперимента стало обеспечение возможности форме DimensionsLookup (помимо работы с массивами) корректно отображать список аналитик для EDT унаследованных от SysDim и не являющихся массивом - для единобразия вида lookup отображающего аналитику (форма DimensionsLookup содержит дополнительные вкладки). Суть внесенных модификаций в форму: для вызывающего control формы определить extended data type, в случае если EDT не является массивом (для них остается штатная логика) определить значение sysDimension на основе информации о relation с типом 'Поле ссылки фиксировано' на поле Dimensions.DimensionCode. Вот что получилось в первом приближении (для включения дополнительной функциональности нужно в \Forms\DimensionsLookup\Methods\classDeclaration определить значение макроса dimensionsLookup(1) - в проекте значение =0 ). P.S. В проект включил job и форму которую использовал для тестирования. Выгружено с приложения DAX 4.0 SP2 (application version: 4.0.2501.122): |
|
|
За это сообщение автора поблагодарили: aao_p (1). |
29.01.2009, 17:06 | #9 |
Участник
|
Большое спасибо, petergunn.
Очень доступное объяснение. Тему можно закрыть. |
|
02.11.2012, 10:05 | #10 |
Участник
|
В продолжение темы... Чтобы особо не заморачиваться, делаем следующее. Создаем EDT на основе SysGroup, Добавляем необходимые relations и ничего танцору не мешает.
__________________
// no comments |
|
Теги |
edt, extended data type, dimensions |
|
|