|
![]() |
#1 |
Участник
|
Просто раз уж тему открыл, то предложу и свое решение задачи:
X++: static void Job2(Args _args) { SetEnumerator dimensionsEnumerator = Dimensions::dimensionCodesSet().getEnumerator(); SysDimension sysDimension; ; while (dimensionsEnumerator.moveNext()) { sysDimension = dimensionsEnumerator.current(); print enum2str(sysDimension); } pause; } |
|
|
За это сообщение автора поблагодарили: lev (1), player (1). |
![]() |
#2 |
Участник
|
А если нужно добавить поля на форму?
У меня есть расширение этой задачи - добавление на форму "отвязанных" контролов по фин. аналитикам. Вариант с добавлением всех и последующим скрытием не интересен, т.к. заранее не известно, сколько аналитик будет.
Делаю так: X++: DictEnum DictEnum = new DictEnum(enumnum(SysDimension)); FormBuildDesign formBuilddesign = form.design(); FormBuildGroupControl formBuildGroupControl; FormStringControl c; int i; ; if (dictEnum){ for (i=0; i<dictEnum.values(); i++){ c = DimensionList.addControl(FormControlType::String,strfmt("_%1",dictEnum.index2Symbol(i))); c.extendedDataType(global::extendedTypeName2Id(strfmt("Dimension[%1]",i))); c.showLabel(true); c.label(dictEnum.index2Name(i)); c.lookupButton(2); } } Не подскажете, в чем дело? Последний раз редактировалось gefr; 14.07.2011 в 08:07. |
|
![]() |
#3 |
Участник
|
Цитата:
Когда будете создавать unbound контрол вручную какой расширенный тип выберете? Что, по-вашему, должен вернуть метод global::extendedTypeName2Id(strfmt("Dimension[%1]",i))? |
|
![]() |
#4 |
Administrator
|
Цитата:
Нашел для себя 2 "обходных" пути. 1. Для диалогов - наследников RunBase есть класс DialogAddDimensionType_CheckButton_RU. Он добавляет в диалог флажки, по количеству элементов в массиве в типе Dimension. По сути здесь простой цикл и все. Но это решает задачу добавления именно "отвязанных" контролов. Важно! Здесь список контролов подготавливается ДО init формы. Т.к. после - уже не получается (ну у меня тогда не получилось). При этом лукапы для каждого элемента массива тут работать не будут (если пытаться заменить галки на строковые поля). Т.е. если хочется добавить контрол с лукапом в случае массива - он должен быть "связанным" 2. Если нужно сделать лукап со списком полей (а может и лукап со списком значений) аналогично форме расширенного запроса (SysQueryForm) - то нужно использовать класс SysQueryForm (его можно использовать, предварительно подготовив всякие таблички и Query). При этом, обращаю внимание - там используется табличка TmpSysQuery и у контрола типа Dimension проставлен не EDT, а FieldId, причем свойство ArraySize не используется (оно не работает), а в FieldId подставлено значение fieldId2Ext(fieldnum(Dimension), i), где i - индекс массива. Здесь видно, что лукап у поля "Значения" строится в зависимости от выбранного элемента массива.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 14.07.2011 в 08:46. |
|
|
За это сообщение автора поблагодарили: Sergey Petrov (1). |
![]() |
#5 |
Участник
|
2 S.Kuskov: да, вы правы, тупанул
![]() X++: c.extendedDataType(typeid(Dimension));
c.arrayIndex(i); |
|
![]() |
#6 |
Administrator
|
Я ж сказал - не работает это свойство. Ошибся в названии - не ArraySize, а arrayIndex
__________________
Возможно сделать все. Вопрос времени |
|
Теги |
dimensions |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|