AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.02.2004, 10:22   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
? Как в AddRange() добавить поле Dimension[2]
Как в AddRange() добавить поле Dimension[2] ?

Ругается на строку

qdbs.AddRange(FieldNum(SalesTable,Dimension[2]))

Это и понятно, физически нет такого поля. Но как тогда программно задать Range по не первому элементу поля типа массив? Т.е. как получить ID такого поля?
Старый 26.02.2004, 10:53   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Сам нашел. Если еще кому надо:

qdbs.AddRange(fieldid2ext(fieldnum(SalesTable,dimension),2))

fieldid2ext - это метод класса Global
Старый 26.02.2004, 11:02   #3  
YVAS is offline
YVAS
1C
Аватар для YVAS
1C
 
265 / 10 (1) +
Регистрация: 31.07.2003
Описываем переменные

PHP]
Dimension analitik;
QueryBuildRange rangeDep;
[/PHP]

PHP код:
 if (analitik[1])
      {
       
rangeDep query.dataSourceTable(tablenum(MyTable)).findRange(fieldnum(MyTable,Dimension));
        if (!
rangeDep)
            
rangeDep query.dataSourceTable(tablenum(MyTable)).addRange(fieldnum(MyTable,Dimension));

            
rangeDep.value(SysQuery::value(analitik[1]));
      } 
Естественно поля Dimension[1] в таблице нет, но есть поле Dimension типа Dimension. Посмотрите этот тип.
Старый 26.02.2004, 11:03   #4  
YVAS is offline
YVAS
1C
Аватар для YVAS
1C
 
265 / 10 (1) +
Регистрация: 31.07.2003
Цитата:
fieldid2ext - это метод класса Global
Да конечно, можно и так...
Старый 26.02.2004, 13:39   #5  
NeveB is offline
NeveB
Участник
 
60 / 16 (1) ++
Регистрация: 14.11.2003
Адрес: Mosсow
У меня вот как работает:
QueryBuildDataSource qB;
QueryBuildRange qr;

qr = qB.addRange(fieldnum(LedgerBudget,dimension)+(idx<<16));

где idx - номер аналитики
Старый 26.02.2004, 14:13   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Содержание метода fieldId2Ext класса Global

PHP код:
/*
    Returns an extended FieldId, based on the fieldId and the Array index
    (an extended FieldId is a fieldId including the array index)
*/
static fieldId fieldId2Ext(fieldId  fieldId,
                           
ArrayIdx arrayIndex
                           
)
{
    return ((
arrayIndex << 16) | fieldId);

Т.е. здесь выполняется тот же сдвиг адреса
Старый 26.02.2004, 14:15   #7  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
[QUOTE]Изначально опубликовано Владимир Максимов
[B]Сам нашел. Если еще кому надо:

qdbs.AddRange(fieldid2ext(fieldnum(SalesTable,dimension),2))
________________________________________________
А я так делаю:
qbr = qr.dataSourceTable(tablenum(SalesTable)).addRange(fieldname2id(tablename2id('SalesTable'),'Dimension[5]'));
Старый 26.02.2004, 14:22   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а вот так писать не стоит.
названия полей, таблиц, методов могут изменится.

в qdbs.AddRange(fieldid2ext(fieldnum(SalesTable,dimension),2))
будет синтаксиеская ошибка на этапе компиляции

а в ...addRange(fieldname2id(tablename2id('SalesTable'),'Dimension[5]'));
будет run-time ошибка.

Почувствуйте разницу
Старый 26.02.2004, 14:26   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано NeveB
qr = qB.addRange(fieldnum(LedgerBudget,dimension)+(idx<<16));
никто не гарантирует, что это будет работать в следующих версиях.
fieldid2ext - будет.
Старый 26.02.2004, 16:16   #10  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Регистрация: 26.02.2004
Адрес: Санкт-Петербург
[QUOTE]Изначально опубликовано mazzy
[B]а вот так писать не стоит.
названия полей, таблиц, методов могут изменится.
__________________________________________
Как это могут измениться!?
При смене названия таблицы (да ещё такой как SalesTable) сколько кода навернётся.
Старый 26.02.2004, 19:02   #11  
levsha is offline
levsha
Участник
 
22 / 14 (1) ++
Регистрация: 20.10.2003
Адрес: СПб
Цитата:
в qdbs.AddRange(fieldid2ext(fieldnum(SalesTable,dimension),2))
будет синтаксиеская ошибка на этапе компиляции

а в ...addRange(fieldname2id(tablename2id('SalesTable'),'Dimension[5]'));
будет run-time ошибка.
Но зато вторым способом можно передавать имя таблицы в качестве параметра.
Более качественным в этом отношении мне видится такой код:

SalesTable table;
addRange(fieldname2id(table.tableId,'Dimension[5]'));
Старый 27.02.2004, 10:02   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ошибка будет в любом случае в Run-Time вне зависимости от способа. На этапе компиляции не даст ошибки никакой из приведенных способов. Это легко проверить:

PHP код:
static void Job_Query(Args _args)
{
    
QueryBuildDataSource    qbds
    Query                   querySales
;
    
QueryRun                queryRunSales;
    ;

    
querySales  = new Query();
    
qbds querySales.addDataSource(tablenum(SalesTable));
    
qbds.addRange(fieldid2ext(fieldnum(SalesTable,dimension),10));
    
queryRunSales = new QueryRun(querySales);
    
queryRunSales.next();

Разумеется, нет поля Dimension[10], однако синтаксически, все абсолютно правильно. Компиляция проходит без ошибок! (у меня 2.5, может в 3.0 компилятор как-то поумнел?)

Ссылка на то, что название полей, таблиц и методов могут изменится в данном случае неуместна! В обоих случаях я должен писать имя таблицы и имя поля. Разница только в способе указания индекса массива - либо в качестве отдельного параметра, либо как реквизит имени поля.

Так что оба способа в данном случае абсолютно равноправны. Вопрос исключительно личных предпочтений.
Старый 27.02.2004, 11:21   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано levsha
Но зато вторым способом можно передавать имя таблицы в качестве параметра.
ИМХО лучше передавать в качестве параметра ID таблицы, а не имя
Старый 27.02.2004, 11:27   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Владимир Максимов
Ошибка будет в любом случае в Run-Time вне зависимости от способа.
Ок. Спасибо, проверю.

Цитата:
Изначально опубликовано Владимир Максимов
Так что оба способа в данном случае абсолютно равноправны. Вопрос исключительно личных предпочтений.
Точно знаю, что названия объектов в виде строк не попадут в перекрестные ссылки. Попадают ли в перекрестные ссылки названия в функциях fieldnum, tablenum,querystr?... Хорошо. Спасибо. Тоже проверю.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Программно добавить поле Salha DAX: Программирование 4 22.03.2007 11:12
Как в query добавить фильтр по аналитике (Dimension)? Roman812 DAX: Программирование 21 15.07.2005 09:53
Как добавить в addRange условие по "или" на контейнерные поля? Lora DAX: Программирование 9 29.11.2004 13:52
Как в таблице rassetDeprAccount.Dimension[8] добавить значение аналитики velk DAX: Программирование 2 25.08.2004 16:37
Добавить поле в таблицу -> обновление Datasource Surok DAX: Программирование 1 21.10.2002 14:03

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:30.