AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 12.08.2004, 10:50   #21  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,726 / 1208 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Это все замечательно, но как вытащить из AXAPTA реальные, физические имена полей таблицы?

Т.е. поле типа Dimension - это поле типа массив. Хорошо, по DictField я определяю, что это массив из 4 элементов. Но ведь я получу имена вроде:

Dimension[1]
Dimension[2]
Dimension[3]
Dimension[4]

Но физически, на MS SQL им соответсвуют поля
Dimension
Dimension2_
Dimension3_
Dimension4_

Еще одна неприятность заключается в том, что количество символов в именах таблиц на MS SQL сервере ограничено 30 символами. В AXAPTA - несколько больше. В этом случае в MS SQL имя таких таблиц искусственно обрезается до 26 символов+4 цифры.

Короче, я просто не представляю как решить в общем случае задачу однозначной идентификации имен полей и таблиц AXAPTA и физических имен на MS SQL.

Поэтому, лучше не мудрить и писать скрипты напрямую в MS SQL (хранимые процедуры) и вызывать их из Crystal Reportе (если это возможно).

Правда, не совсем понятно, почему нельзя то же самое сделать через Connection напрямую из AXAPTA. И не нужно "лишний" продукт покупать.
Old 12.08.2004, 10:59   #22  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Join Date: 27.11.2001
Location: Dubai, UAE
PHP Code:
SysDictField sysDictField 
                    new 
SysDictField(tableNum(SalesLine), fieldNum(SalesLineDimension));
int          i;
;
for (
1<= sysDictField.arraySize(); i++) {
    
info(sysDictField.name(DbBackend::Sqli));

Также можно поступить и с названиями таблиц.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Old 12.08.2004, 11:29   #23  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,726 / 1208 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Это какая версия AXAPTA? У меня 2.5 и функция sysDictField.name() вообще не имеет параметров.

А явное задание

PHP Code:
SysDictField sysDictField 
                    new 
SysDictField(tableNum(SalesLine), fieldid2ext(fieldNum(SalesLineDimension),2));
;

    
info(sysDictField.name()); 
Отображает не ожидаемое "Dimension2_", а все то же "Dimension"
Old 12.08.2004, 12:08   #24  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
на текущий момент у меня стоит цикл по полям запроса, создается строка " Create ...", с помощью connection создается таблица на сервере с теми же полями, что и в запросе. Отчет строится на основе этой единственной таблицы и мне не важны реальные имена полей, при конструировании отчета и так понятно, что какое поле значит. Добавить запись в эту новую таблицу тоже не составляет труда. Единственная проблема - как вытащить запись из Query или QueryRun. Даже не всю запись, а просто значения полей.
Old 12.08.2004, 12:15   #25  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Join Date: 27.11.2001
Location: Dubai, UAE
Это в 3.0.

В 2.5 можно, например, так:
PHP Code:
SysDictField    sysDictField 
                    
= new SysDictField(tableNum(SalesLine), fieldNum(SalesLineDimension));
SqlDictionary   SqlDictionary;
int             i;
;
for (
1<= sysDictField.arraySize(); i++) {
    
select firstonly sqlName from SqlDictionary
        where SqlDictionary
.tabId   == sysDictField.tableid() &&
              
SqlDictionary.fieldId == sysDictField.id()      &&
              
SqlDictionary.array   == i;
    
info(SqlDictionary.sqlName);

Кстати, в 3.0 такой вариант тоже будет работать.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Old 12.08.2004, 12:17   #26  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Join Date: 27.11.2001
Location: Dubai, UAE
2mne2001
Вам же уже несколько раз ответили.

Исходные данные: tableId, fieldId.

Common common;
...
common = queryRun.get(tableId);
value = common.(fieldId);

Результат: value.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Old 12.08.2004, 12:26   #27  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
Ну не работает так! Возникает ошибка при выполнении: 'поле с идентификатором 1 в таблице common не обнаружено'
Old 12.08.2004, 12:42   #28  
George Nordic is offline
George Nordic
Модератор
George Nordic's Avatar
Злыдни
 
4,480 / 1255 (50) ++++++++
Join Date: 17.12.2003
Location: Moscow
Blog Entries: 9
Все работает!

PHP Code:
    ProdTable   prodTable;
    
Common      common;
    
fieldId     fieldId;
    
str         value;
    ;
    
    
select firstonly prodTable
        where prodTable
.ItemId like "??*"
        
&& prodTable.ProdStatus == ProdStatus::StartedUp;
    
    
common prodTable;
    
    
fieldId fieldnum(ProdTableItemId);
    
value common.(fieldId);
    
info(value);

    
fieldId fieldnum(ProdTableStUpDate);
    
value common.(fieldId);
    
info(value);

    
fieldId fieldnum(ProdTableQtyStUp);
    
value common.(fieldId);
    
info(value); 
Old 12.08.2004, 12:55   #29  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
работает, когда прямое присвоение
common = prodTable

а так? common = queryRun.get(tableId); мне то дан объект queryRun и ничего больше!
Old 12.08.2004, 12:56   #30  
George Nordic is offline
George Nordic
Модератор
George Nordic's Avatar
Злыдни
 
4,480 / 1255 (50) ++++++++
Join Date: 17.12.2003
Location: Moscow
Blog Entries: 9
попробуйте:
getNo(1);
Old 12.08.2004, 13:05   #31  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
Та же ошибка, common просто не получает никаких полей, как будто не было никакого присвоения
Old 12.08.2004, 15:08   #32  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Join Date: 27.11.2001
Location: Dubai, UAE
Интересно...

А так:
Common common;
;
common = new DictTable(tableId).makeRecord();
common = queryRun.get(tableId);
value = common.(fieldId);

?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Old 13.08.2004, 05:09   #33  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
то же самое пишет
Old 13.08.2004, 07:20   #34  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
Все заработало! Глюк видно был какой-то... Правда вылезла новая проблема с полем dimension, непонятно как обратится к массиву через синтаксис common.(_fieldID)
Old 13.08.2004, 09:42   #35  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Join Date: 23.07.2004
Location: г. Новокузнецк
Quote:
непонятно как обратится к массиву через синтаксис common.(_fieldID)
/*
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 )


Метод класса Global. Руководство по языку внимательнее читать не забываем.
Old 13.08.2004, 10:06   #36  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Join Date: 27.11.2001
Location: Dubai, UAE
Это известная проблема c Map'ами (а Common тоже можно рассматривать как Map). Нельзя передать в Map значение типа Common и ожидать, что он сам разберется, какой Mapping использовать. Надо сначала явно указать тип либо значения, либо Mapping'а. В данном случае сначала явно указывается, что будет использоватся Mapping "Таблица(tableId) --> Common".
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Old 13.08.2004, 10:44   #37  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
наконец-то заработало!
оказывается надо так, и в запросе должны быть записи обязательно, иначе common не присваиваеся
for (i=1; i <= _query.DatasourceCount(); i++)
{
queryBuildDataSource = query.dataSourceNo(i);
tableId =queryBuildDataSource.table();
queryBuildFieldList = queryBuildDataSource.fields();
common = queryRun.get(_tableId);

for(j=1; j <= queryBuildFieldList.fieldCount(); j++)
{
fieldId = _queryBuildFieldList.field(j);
dictField = new DictField(_tableId, _fieldId);
if (dictField.arraySize()==1)
{
value=common.(fieldID)
...
}
else
{
for(k=1;k<=_dictField.arraySize();k++)
{
value=common.(fieldID)[k];
...
}
}
}
}
Old 13.08.2004, 12:54   #38  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Join Date: 11.08.2004
mne2001 Интересно, как исходная задача формулировалась? Любой "стандартный" отчет Вы так не перехватите, перекрытый fetch - обычная практика. Для "внешнего" автоотчета свой SysReportWizard и SysQueryForm под Crystal реализовать быстрее и надежней. Про производительность совсем забыли -ВСЕ даные запроса в Аксапту, из нее на SQL и собственно отчет..

Зачем такие сложности???
Old 13.08.2004, 13:22   #39  
mne2001 is offline
mne2001
Участник
 
29 / 10 (1) +
Join Date: 10.08.2004
задача - делать отчеты в Crystal reports. А так как я с axaptой неделю работаю, то ее возможностей практически не знаю, а делать надо, причем срочно...
наверное есть путь проще, но я его не знаю.
Old 13.08.2004, 13:34   #40  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Join Date: 11.08.2004
Quote:
Изначально опубликовано mne2001
задача - делать отчеты в Crystal reports. ...
Тогда зачем Вам query ? Как Вы его получаете?
Tags
crystal reports, ax2.5, ax3.0

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
как программно создать документ в DocuView алька DAX: Программирование 5 03.04.2007 18:44
Как программно создать платежное поручение? AK9 DAX: Программирование 3 13.09.2006 09:37
создать и передать временную таблицу kitty DAX: Программирование 11 13.07.2006 14:40
Создать программно складскую проводку с количеством = 0. vasiliy DAX: Программирование 5 26.12.2005 16:46
Невозможно создать таблицу chel DAX: Программирование 0 21.04.2004 21:02
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:48.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.