12.08.2004, 10:50 | #21 |
Участник
|
Это все замечательно, но как вытащить из 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. И не нужно "лишний" продукт покупать. |
|
12.08.2004, 10:59 | #22 |
Administrator
|
PHP код:
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
12.08.2004, 11:29 | #23 |
Участник
|
Это какая версия AXAPTA? У меня 2.5 и функция sysDictField.name() вообще не имеет параметров.
А явное задание PHP код:
|
|
12.08.2004, 12:08 | #24 |
Участник
|
на текущий момент у меня стоит цикл по полям запроса, создается строка " Create ...", с помощью connection создается таблица на сервере с теми же полями, что и в запросе. Отчет строится на основе этой единственной таблицы и мне не важны реальные имена полей, при конструировании отчета и так понятно, что какое поле значит. Добавить запись в эту новую таблицу тоже не составляет труда. Единственная проблема - как вытащить запись из Query или QueryRun. Даже не всю запись, а просто значения полей.
|
|
12.08.2004, 12:15 | #25 |
Administrator
|
Это в 3.0.
В 2.5 можно, например, так: PHP код:
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
12.08.2004, 12:17 | #26 |
Administrator
|
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 |
|
12.08.2004, 12:26 | #27 |
Участник
|
Ну не работает так! Возникает ошибка при выполнении: 'поле с идентификатором 1 в таблице common не обнаружено'
|
|
12.08.2004, 12:42 | #28 |
Модератор
|
Все работает!
PHP код:
|
|
12.08.2004, 12:55 | #29 |
Участник
|
работает, когда прямое присвоение
common = prodTable а так? common = queryRun.get(tableId); мне то дан объект queryRun и ничего больше! |
|
12.08.2004, 12:56 | #30 |
Модератор
|
попробуйте:
getNo(1); |
|
12.08.2004, 13:05 | #31 |
Участник
|
Та же ошибка, common просто не получает никаких полей, как будто не было никакого присвоения
|
|
12.08.2004, 15:08 | #32 |
Administrator
|
Интересно...
А так: 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 |
|
13.08.2004, 05:09 | #33 |
Участник
|
то же самое пишет
|
|
13.08.2004, 07:20 | #34 |
Участник
|
Все заработало! Глюк видно был какой-то... Правда вылезла новая проблема с полем dimension, непонятно как обратится к массиву через синтаксис common.(_fieldID)
|
|
13.08.2004, 09:42 | #35 |
Участник
|
Цитата:
непонятно как обратится к массиву через синтаксис 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. Руководство по языку внимательнее читать не забываем. |
|
13.08.2004, 10:06 | #36 |
Administrator
|
Это известная проблема 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 |
|
13.08.2004, 10:44 | #37 |
Участник
|
наконец-то заработало!
оказывается надо так, и в запросе должны быть записи обязательно, иначе 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]; ... } } } } |
|
13.08.2004, 12:54 | #38 |
Участник
|
mne2001 Интересно, как исходная задача формулировалась? Любой "стандартный" отчет Вы так не перехватите, перекрытый fetch - обычная практика. Для "внешнего" автоотчета свой SysReportWizard и SysQueryForm под Crystal реализовать быстрее и надежней. Про производительность совсем забыли -ВСЕ даные запроса в Аксапту, из нее на SQL и собственно отчет..
Зачем такие сложности??? |
|
13.08.2004, 13:22 | #39 |
Участник
|
задача - делать отчеты в Crystal reports. А так как я с axaptой неделю работаю, то ее возможностей практически не знаю, а делать надо, причем срочно...
наверное есть путь проще, но я его не знаю. |
|
13.08.2004, 13:34 | #40 |
Участник
|
Цитата:
Изначально опубликовано mne2001
задача - делать отчеты в Crystal reports. ... |
|