Цитата:
Сообщение от
Silphidae
...
Просто меня удивило, что при любом другом значении, кроме 0 - я получаю тоже самое "Подразделение" (Например, при 2 должно быть "Тип производства", если верить перечислению SysDimension ).
Данное утверждение показалось несколько странным, решил проверить его на практике.
За основу эксперимента был взят совет данный автору топика:
Цитата:
Сообщение от
oip
Создать для нужной аналитики свой ЕДТ-наследние от SysDim и прописать соответствющий релейшн к таблице Dimensions. В диалог подставлять этот ЕДТ.
X++:
DepartmentId extends SysDim
DepartmentId == Dimensions.Num
0 = Dimensions.Code
Создал новый 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):