AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 12.11.2008, 11:17   #1  
jiller ist offline
jiller
Участник
 
13 / 11 (1) +
Registriert seit: 18.09.2008
Финансовые аналитики
Добрый день!
У меня вопрос, подскажите пожалуйста кто знает: как программно получить список финансовых аналитик, а точнее их названия?

P.S. DAX 4.0 SP2
Alt 12.11.2008, 11:27   #2  
Jox ist offline
Jox
Developer
Benutzerbild von Jox
 
112 / 24 (1) +++
Registriert seit: 26.07.2005
Ort: Питер
X++:
while select Dimensions {...}
Alt 12.11.2008, 12:01   #3  
lev ist offline
lev
Ищущий знания...
Benutzerbild von lev
Oracle
MCBMSS
Axapta Retail User
 
1.723 / 491 (20) +++++++
Registriert seit: 18.01.2005
Ort: Москва
если речь идёт просто о том какие фин аналитики есть в системе, то можно вот так:
X++:
    SysDictEnum dictEnum = new SysDictEnum(enumnum(SysDimension));
    int         i, cnt, iSearch;
    ;

    cnt = dictEnum.lastValue();

    for(i=dictEnum.firstValue(); iSearch <= cnt; i = dictEnum.nextValue(i))
    {
        iSearch++;
        info(dictEnum.value2Label(i));
    }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Alt 12.11.2008, 12:08   #4  
jiller ist offline
jiller
Участник
 
13 / 11 (1) +
Registriert seit: 18.09.2008
Zitat:
Zitat von lev Beitrag anzeigen
если речь идёт просто о том какие фин аналитики есть в системе, то можно вот так:
X++:
    SysDictEnum dictEnum = new SysDictEnum(enumnum(SysDimension));
    int         i, cnt, iSearch;
    ;

    cnt = dictEnum.lastValue();

    for(i=dictEnum.firstValue(); iSearch <= cnt; i = dictEnum.nextValue(i))
    {
        iSearch++;
        info(dictEnum.value2Label(i));
    }
Спасибо! Это как раз и надо было.
Alt 12.11.2008, 12:47   #5  
petergunn ist offline
petergunn
Участник
 
118 / 279 (10) ++++++
Registriert seit: 30.08.2005
Ort: Tyumen
Возможная избыточность цикла
Zitat:
Zitat von lev Beitrag anzeigen
если речь идёт просто о том какие фин аналитики есть в системе, то можно вот так:
X++:
    SysDictEnum dictEnum = new SysDictEnum(enumnum(SysDimension));
    int         i, cnt, iSearch;
    ;

    cnt = dictEnum.lastValue();

    for(i=dictEnum.firstValue(); iSearch <= cnt; i = dictEnum.nextValue(i))
    {
        iSearch++;
        info(dictEnum.value2Label(i));
    }
Приведенный алгоритм содержит потенциальный bug

Мастером финансовых аналитик (или просто в AOT) добавляем новый элемент со значением 101 (т.е. не последовательно 0,1,2,3,4,...) в enum SysDimension - в итоге цикл начинает отрабатывать 102 итерации т.к. сравнение идет iSearch <= 101 начиная с 0.

Если необходим список активных значений, то дополнительно можно проверить на предмет активности конфигурационного ключа на значении enum'а, что-то в таком духе:
X++:
static void jbDimensionListByEnum(Args _args)
{
    DictEnum    dictEnum = new DictEnum( enumNum( SysDimension ) ) ;
    Counter     enumIdx ;
    
    #define.OnlyActive
    ;

    for( enumIdx = 0; enumIdx < dictEnum.values(); enumIdx++ )
    {
#if.OnlyActive
        if( !isConfigurationKeyEnabled( dictEnum.index2ConfigurationKey( enumIdx ) ) )
            continue ;
#endif
        info( dictEnum.index2Label(enumIdx));
    }
}
This post has been rated by: jiller (1).
Alt 12.11.2008, 12:57   #6  
jiller ist offline
jiller
Участник
 
13 / 11 (1) +
Registriert seit: 18.09.2008
И еще такой вопрос: как получить информацию о EDT, используемых в массиве типа Dimension?
Alt 12.11.2008, 13:02   #7  
Eldar9x ist offline
Eldar9x
MCTS
Benutzerbild von Eldar9x
Oracle
MCBMSS
 
1.064 / 166 (8) ++++++
Registriert seit: 29.09.2006
Ort: Казань
Еще более короткий вариант, тут вообще ничего проверять не надо
X++:
    int c;
    ;
    for (c = 1; c <= new DictType(extendedtypenum(Dimension)).arraySize(); c++)
        info(new DictType(extendedtypenum(Dimension)).label(c));
Можете соптимизировать, дабы один и тот же объект два раза не создавать.
Отвечая на последний вопрос, new DictType(extendedtypenum(Dimension)) вам в помощь, там большинство методов этого объекта требуют указания индекса элемента.

Geändert von Eldar9x (12.11.2008 um 13:15 Uhr)
This post has been rated by: lev (1).
Alt 12.11.2008, 13:03   #8  
lev ist offline
lev
Ищущий знания...
Benutzerbild von lev
Oracle
MCBMSS
Axapta Retail User
 
1.723 / 491 (20) +++++++
Registriert seit: 18.01.2005
Ort: Москва
Zitat:
Zitat von petergunn Beitrag anzeigen
Приведенный алгоритм содержит потенциальный bug
Согласен.
Просто в разрезе описанной задачи посчитал, что такого кода достаточно, т.к. сомневаюсь что в финансовых аналитиках, кто то добавит элемент со значением 101.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Alt 12.11.2008, 13:33   #9  
jiller ist offline
jiller
Участник
 
13 / 11 (1) +
Registriert seit: 18.09.2008
Всем огромное спасибо за помощь!
Alt 12.11.2008, 14:05   #10  
petr ist offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Registriert seit: 30.05.2005
Ort: Швейцария
Просто раз уж тему открыл, то предложу и свое решение задачи:

X++:
static void Job2(Args _args)
{
    SetEnumerator   dimensionsEnumerator = Dimensions::dimensionCodesSet().getEnumerator();
    SysDimension    sysDimension;
    ;

    while (dimensionsEnumerator.moveNext())
    {
        sysDimension = dimensionsEnumerator.current();
        print enum2str(sysDimension);
    }
    
    pause;
}
This post has been rated by: lev (1), player (1).
Alt 14.07.2011, 07:47   #11  
gefr ist offline
gefr
Участник
Benutzerbild von gefr
MCBMSS
 
147 / 17 (1) ++
Registriert seit: 01.11.2004
Ort: МО, Котельники
А если нужно добавить поля на форму?
У меня есть расширение этой задачи - добавление на форму "отвязанных" контролов по фин. аналитикам. Вариант с добавлением всех и последующим скрытием не интересен, т.к. заранее не известно, сколько аналитик будет.
Делаю так:
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);
            }
        }
Элементы появляются, но выпадающие списки не работают, т.е. тип не подцепляется. Не делать showlabel, label и lookupbutton пробовал, получается простое текстовое поле, что еще раз подтверждает, что тип не подхватывается.
Не подскажете, в чем дело?

Geändert von gefr (14.07.2011 um 08:07 Uhr)
Alt 14.07.2011, 08:25   #12  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von gefr Beitrag anzeigen
У меня есть расширение этой задачи - добавление на форму "отвязанных" контролов по фин. аналитикам.
...
выпадающие списки не работают, т.е. тип не подцепляется
А вы попробуйте для начала решить задачу не программно а в ручную. Получится?
Когда будете создавать unbound контрол вручную какой расширенный тип выберете?
Что, по-вашему, должен вернуть метод global::extendedTypeName2Id(strfmt("Dimension[%1]",i))?
Alt 14.07.2011, 08:35   #13  
sukhanchik ist offline
sukhanchik
Administrator
Benutzerbild von sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.343 / 3563 (125) ++++++++++
Registriert seit: 13.06.2004
Ort: Москва
Zitat:
Zitat von gefr Beitrag anzeigen
У меня есть расширение этой задачи - добавление на форму "отвязанных" контролов по фин. аналитикам.
...
Не подскажете, в чем дело?
В свое время для 4.0 пытался также решать похожую задачу и не тоже смог победить. Причем - такой вариант, как задание строкового типа Dimension[i] не катит - это точно - нет такого типа в системе.

Нашел для себя 2 "обходных" пути.
1. Для диалогов - наследников RunBase есть класс DialogAddDimensionType_CheckButton_RU. Он добавляет в диалог флажки, по количеству элементов в массиве в типе Dimension. По сути здесь простой цикл и все. Но это решает задачу добавления именно "отвязанных" контролов. Важно! Здесь список контролов подготавливается ДО init формы. Т.к. после - уже не получается (ну у меня тогда не получилось). При этом лукапы для каждого элемента массива тут работать не будут (если пытаться заменить галки на строковые поля). Т.е. если хочется добавить контрол с лукапом в случае массива - он должен быть "связанным"

2. Если нужно сделать лукап со списком полей (а может и лукап со списком значений) аналогично форме расширенного запроса (SysQueryForm) - то нужно использовать класс SysQueryForm (его можно использовать, предварительно подготовив всякие таблички и Query). При этом, обращаю внимание - там используется табличка TmpSysQuery и у контрола типа Dimension проставлен не EDT, а FieldId, причем свойство ArraySize не используется (оно не работает), а в FieldId подставлено значение fieldId2Ext(fieldnum(Dimension), i), где i - индекс массива. Здесь видно, что лукап у поля "Значения" строится в зависимости от выбранного элемента массива.
__________________
Возможно сделать все. Вопрос времени

Geändert von sukhanchik (14.07.2011 um 08:46 Uhr)
This post has been rated by: Sergey Petrov (1).
Alt 14.07.2011, 08:45   #14  
gefr ist offline
gefr
Участник
Benutzerbild von gefr
MCBMSS
 
147 / 17 (1) ++
Registriert seit: 01.11.2004
Ort: МО, Котельники
2 S.Kuskov: да, вы правы, тупанул переделал так - все равно не помогло.
X++:
                c.extendedDataType(typeid(Dimension));
                c.arrayIndex(i);
Alt 14.07.2011, 08:47   #15  
sukhanchik ist offline
sukhanchik
Administrator
Benutzerbild von sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.343 / 3563 (125) ++++++++++
Registriert seit: 13.06.2004
Ort: Москва
Zitat:
Zitat von gefr Beitrag anzeigen
2 S.Kuskov: да, вы правы, тупанул переделал так - все равно не помогло.
X++:
                c.extendedDataType(typeid(Dimension));
                c.arrayIndex(i);
Я ж сказал - не работает это свойство. Ошибся в названии - не ArraySize, а arrayIndex
__________________
Возможно сделать все. Вопрос времени
Alt 14.07.2011, 08:53   #16  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von sukhanchik Beitrag anzeigen
Я ж сказал - не работает это свойство. Ошибся в названии - не ArraySize, а arrayIndex
Сейчас попробовал. В AX2009 arrayIndex как минимум влияет на Label

Вот тут ещё было обсуждение этой проблемы Статьи аналитик

Geändert von S.Kuskov (14.07.2011 um 08:55 Uhr)
Alt 14.07.2011, 09:40   #17  
gefr ist offline
gefr
Участник
Benutzerbild von gefr
MCBMSS
 
147 / 17 (1) ++
Registriert seit: 01.11.2004
Ort: МО, Котельники
Там, к сожалению, про диалоги. В диалогах проблем нет, я это и так знал, сразу попробовал и здесь, на форме. На форме не срастается
Alt 14.07.2011, 12:44   #18  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
X++:
public void init()
{
    FormBuildDesign             formBuilddesign = form.design();
    FormBuildGroupControl       formBuildGroupControl = form.design().control('AddGroup');
    formBuildStringControl      bc;
    ;

    bc = formBuildGroupControl.addControl(FormControlType::STRING,'RunTimeControl');
    bc.extendedDataType(typeId2ExtendedTypeId(typeId(Dimension)));
    bc.arrayIndex(2);

    super();
}
This post has been rated by: sukhanchik (4), S.Kuskov (3), Player1 (1).
Alt 14.07.2011, 14:33   #19  
gefr ist offline
gefr
Участник
Benutzerbild von gefr
MCBMSS
 
147 / 17 (1) ++
Registriert seit: 01.11.2004
Ort: МО, Котельники
К сожалению, не могу добавить благодарность 2Wamr - сайт артачится. Но все равно - спасибо.
Stichworte
dimensions

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
финансовые аналитики в диалог longson DAX: Программирование 6 02.07.2008 03:23
Код новой фин. аналитики DAX 4.0 Ivanhoe DAX: Программирование 4 13.05.2008 15:23
Сравнение в разрезе складской аналитики. longson DAX: Программирование 3 14.01.2008 13:45
Учёт остатков в разрезе фин. аналитики miklenew DAX: Программирование 11 06.11.2007 20:01
Допустимо ли так использовать фин. аналитики kosenkov DAX: Функционал 5 26.02.2006 18:17

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.