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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2007, 14:47   #1  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
:( И опять временные таблицы
Уважаемые, я все перерыл, все (ВРОДЕ БЫ) делаю правильно...
  1. Создал временную таблицу TmpMyTable
  2. Указал Yes в своистве Temporary
  3. Поместил в датасурс репорта эту временную таблицу и переименовал датасурс в TmpMyTableDS (запрос формируется в классе наследнике RunBaseReport)
  4. В методе Run заполняю ее (предварительно в Class Declarations объявил TmpMyTable _tmp)
X++:
public void run()
{
    Query           q;
    QueryRun        qr;
    RAssetTable     _table;
    RAssetLending   _lending;
    ;
    q = this.query();
    qr = new QueryRun(q);
    while (qr.next())
    {
        _table = qr.get(tablename2id("RAssetTable"));
        _lending = qr.get(tablename2id("RAssetLending"));
        _tmp.AssetGroup = _table.AssetGroup;
        _tmp.AssetId = _lending.assetId;
        _tmp.AssetLendDate = _lending.AssetLendDate;
        _tmp.AssetLocation = _lending.AssetLocationId;
        _tmp.ContractACcount = _lending.ContractACcount;
        _tmp.LendEmployee = _lending.AssetLendEmployee;
        _tmp.insert();
    }
    super();
 
}
проверял с помощью дебаггера и, убрав св-во Temporary, обозревателем таблицы - ВСЕ ЗАПОЛНЯЕТСЯ КАК НАДО.
5. Далее в методе Init добавляю
X++:
TmpMyTableDS.setTmpData(_tmp);
6. Перекрываю Prompt
X++:
public boolean prompt(boolean _enableCopy=TRUE, boolean _enablePages=TRUE, boolean _enableDevice=TRUE, boolean _enableProperties=TRUE, boolean _enablePrintTo=TRUE)
{
    boolean ret;
    ret = super(_enableCopy, _enablePages, _enableDevice, _enableProperties, _enablePrintTo);
    this.queryRun().setCursor(_tmp);
    return ret;
}
Запускаю вывод отчета - ругается
Ошибка времени выполнения. : Неправильный тип аргумента функции.
Трассировка стека:
(C) \Classes\QueryRun\setCursor

Уже полдня и так- и сяк пробую - ничего не выходит (

Последний раз редактировалось ek_Pendulum; 04.05.2007 в 14:49.
Старый 04.05.2007, 14:55   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А если убрать код из prompt() и добавть код в fetch:
X++:
public boolean fetch()
 {
     boolean ret;
 ;
     this.queryRun().setRecord(_tmp);
 
     ret = super();
 
     return ret;
 }
Старый 04.05.2007, 15:05   #3  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
kashperuk, сделал так и снова :
Ошибка времени выполнения. : <пустой класс> Объект не инициализирован.
Трассировка стека :
(C) \Classes\<unknown>\setRecord
(C) \Reports\Report1\Methods\fetch - line 5
(C) \Classes\ReportRun\run
(C) \Reports\Report1\Methods\run - line 25
(C) \Classes\SysReportRun\run - line 16
(C) \Classes\RunBaseReport\run - line 32
(C) \Classes\MyReportDialog\main - line 7

Последний раз редактировалось ek_Pendulum; 04.05.2007 в 15:12.
Старый 04.05.2007, 15:29   #4  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,263 / 982 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от ek_Pendulum Посмотреть сообщение
Уже полдня и так- и сяк пробую - ничего не выходит (
Попробуйте так:
1. в классе создайте метод TmpMyTable generateTmpMyTable(), который заполняет и возвращает таблицу.
2. перепишите init отчета:

X++:
public void init()
{
    MyReportDialog    caller;
;
    super();

    caller = element.args().caller();
    if (!caller)
    {
        throw error(Error::missingRecord(funcName()));
    }

    this.queryRun().setRecord(caller.generateTmpMyTable());
}
3. из run, prompt и прочих методов, код уберите
4. датасорсу можно вернуть нормальное имя TmpMyTable
5. Перестаньте ставить занак "_" перед именем переменных. Этот знак используется чтобы отличать параметры метода. К примеру:
X++:
static CustTable find(CustAccount   _custAccount,
                      boolean       _forUpdate = false)
__________________
Isn't it nice when things just work?
Старый 04.05.2007, 15:41   #5  
pdojn is offline
pdojn
Участник
 
50 / 12 (1) ++
Регистрация: 24.06.2004
Адрес: Москва
Пишите сразу в TmpMyTableDS. Зачем городить огород?
Старый 04.05.2007, 15:43   #6  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
:(
2 macklakov сделал все по вашему совету - итог один (но вылетает уже в дебаггере):
Ошибка времени выполнения. : <пустой класс> Объект не инициализирован.
Трассировка стека :

(C) \Classes\<unknown>\setRecord
(C) \Reports\Report1\Methods\Init - line 15
(C) \Classes\ReportRun\run
(C) \Reports\Report1\Methods\run - line 26
(C) \Classes\SysReportRun\run - line 16
(C) \Classes\RunBaseReport\run - line 32
(C) \Classes\MyReportDialog\main - line 7
Старый 04.05.2007, 15:45   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
по тем сообщениям об ошибках, которые вы получаете, вывод можно сделать только один.
У вас нет запроса. Соответственно не формируется queryRun
А вы в первом посте написали, что запрос есть (источник добавлен в узел DataSources отчета)

Соответственно, ищите где вы ошиблись
Старый 04.05.2007, 15:51   #8  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
Ну да...в источнике отчета лежит временная таблица, которую я пытаюсь заполнять (и она вроде как заполняется , так как в дебагере я вижу сменяющиеся RecId'ы этой таблицы). если в коде ошибок нет, то у меня руки опускаются ((
Вот заполнение временной таблицы как советовал macklakov (уже в классе):
X++:
TmpMyTable generateTmpTable()
{
    Query               q;
    QueryRun            qr;
    RAssetTable         _table;
    RAssetLending       _lending;
    TmpMyTable        tmpTable;
    ;
    q = this.initQuery();
    qr = new QueryRun(q);
    while (qr.next())
    {
        _table = qr.get(tablename2id("RAssetTable"));
        _lending = qr.get(tablename2id("RAssetLending"));
        tmpTable.AssetGroup = _table.AssetGroup;
        tmpTable.AssetId = _lending.assetId;
        tmpTable.AssetLendDate = _lending.AssetLendDate;
        tmpTable.AssetLocation = _lending.AssetLocationId;
        tmpTable.ContractACcount = _lending.ContractACcount;
        tmpTable.LendEmployee = _lending.AssetLendEmployee;
        tmpTable.insert();
    }
    Return tmpTable;
}
а вот сам запрос формируемый в классе
X++:
protected Query initQuery()
{
    Query                   query;
 
    QueryBuildDataSource    qAssetLending;
    QueryBuildDataSource    qAssetTable;
 
    ;
    query = new Query();
   //
    qAssetLending=query.addDataSource(TableNum(RAssetLending), "RAssetLending");
    qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetLendEmployee));
    qAssetLending.addSelectionField(FieldNum(RAssetLending, ContractCode));
    qAssetLending.addSelectionField(FieldNum(RAssetLending, ContractACcount));
    qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetId));
    qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetLendDate));
    qAssetLending.addSelectionField(FieldNum(RAssetLending, AssetLocationId));
    qAssetLending.addSelectionField(FieldNum(RAssetLending, PropertyPart));
    
    qAssetLending.addSortField(FieldNum(RAssetLending, AssetLendEmployee));
 
    qAssetTable=qAssetLending.addDataSource(TableNum(RAssetTable), "RAssetTable");
    qAssetTable.addSelectionField(FieldNum(RAssetTable, Name));
    qAssetTable.addSelectionField(FieldNum(RAssetTable, AssetGroup));
 
    qAssetTable.joinMode(JoinMode::InnerJoin);
    qAssetTable.fetchMode(0);
    qAssetTable.addLink(FieldNum(RAssetLending, AssetId), FieldNum(RAssetTable, AccountNum));
    return query;
}

Последний раз редактировалось ek_Pendulum; 04.05.2007 в 15:57.
Старый 04.05.2007, 16:01   #9  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
если в коде ошибок нет, то у меня руки опускаются ((
рано задаетесь, для начала я бы проверил правильность формирования отчета сняв с таблицы свойство временная, ну а далее если отчет формируется верно пытался корректно передать курсор в query
Старый 04.05.2007, 16:06   #10  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
:(
Цитата:
Сообщение от konopello Посмотреть сообщение
рано задаетесь, для начала я бы проверил правильность формирования отчета сняв с таблицы свойство временная
дак я этим и занимаюсь весь день - таблица заполнена и заполнена правильно

Цитата:
Сообщение от konopello Посмотреть сообщение
ну а далее если отчет формируется верно пытался корректно передать курсор в query
собственно КАК? тоже занимаюсь этим весь день и итог - этот топик
Старый 04.05.2007, 16:11   #11  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,263 / 982 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от ek_Pendulum Посмотреть сообщение
2 macklakov сделал все по вашему совету - итог один (но вылетает уже в дебаггере):
Ошибка времени выполнения. : <пустой класс> Объект не инициализирован.
Значит где-то что-то сломано. "Чистый" наследник от RunBaseReport и "чистый" отчет должны отрабатывать. Как у вас вызывается отчет? Должен вызываться автоматически, через lastValueElementName
__________________
Isn't it nice when things just work?
Старый 04.05.2007, 16:14   #12  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
Так и вызывается
X++:
identifiername lastValueElementName()
{
    return reportStr(Report1);
}
Старый 04.05.2007, 16:17   #13  
KiselevSA is offline
KiselevSA
Злыдни
Аватар для KiselevSA
Злыдни
Лучший по профессии 2015
 
958 / 333 (13) ++++++
Регистрация: 25.01.2002
Адрес: Москва
Первым делом залезьте в использование данных. Удалите настройки класса, которым пользуетесь. Попробуйте вызвать вновь. Половина ошибок с трассировкой возникает из-за того, что в SysLastValue прописывается чушь
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании.
Старый 04.05.2007, 16:21   #14  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
:(
Цитата:
Сообщение от KiselevSA Посмотреть сообщение
Первым делом залезьте в использование данных. Удалите настройки класса, которым пользуетесь. Попробуйте вызвать вновь. Половина ошибок с трассировкой возникает из-за того, что в SysLastValue прописывается чушь
Этим тоже я занимаюсь постоянно...ну не хочет и все тут работать
Старый 04.05.2007, 16:24   #15  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,263 / 982 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от ek_Pendulum Посмотреть сообщение
Этим тоже я занимаюсь постоянно...ну не хочет и все тут работать
Остается проект выкладывать на всеобщее ковыряние
__________________
Isn't it nice when things just work?
Старый 04.05.2007, 16:35   #16  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
:(
Пожалуйста ...
Вложения
Тип файла: xpo a.xpo (355.0 Кб, 249 просмотров)

Последний раз редактировалось ek_Pendulum; 04.05.2007 в 16:45.
Старый 04.05.2007, 16:38   #17  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Не знаю у меня получилось передать курсор вот таким макаром.

X++:
public boolean fetch()
{
    boolean ret;
    TmpInventTableModule            tmpInventTableModuleLocal;
    Counter                         i;
    QueryRun                        queryRuner = new QueryRun(element.query());
    ;

    for (i = 0; i < 10; i++)
    {
        tmpInventTableModuleLocal.ItemId    = int2str(i);
        tmpInventTableModuleLocal.insert();
    }

    queryRuner.setCursor(tmpInventTableModuleLocal);

    while (queryRuner.next())
    {
        tmpInventTableModuleLocal = queryRuner.get(tablenum(TmpInventTableModule));
        info(tmpInventTableModuleLocal.ItemId);
        element.send(tmpInventTableModuleLocal);
    }

    return ret;
}
только element.send() на печать не выкидывает
Вложения
Тип файла: xpo TmpInventTableModule.xpo (6.0 Кб, 266 просмотров)
Старый 04.05.2007, 16:56   #18  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,263 / 982 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от ek_Pendulum Посмотреть сообщение
Пожалуйста ...
Вам в школе не говорили, что copy/paste это очень-очень плохо? У вас отчет вовсе не по TmpAssetLending_RU и фильтры в классе на другие таблицы накладываются
__________________
Isn't it nice when things just work?
Старый 04.05.2007, 17:07   #19  
ek_Pendulum is offline
ek_Pendulum
Участник
 
25 / 10 (1) +
Регистрация: 27.04.2007
:(
Цитата:
Сообщение от macklakov Посмотреть сообщение
Вам в школе не говорили, что copy/paste это очень-очень плохо? У вас отчет вовсе не по TmpAssetLending_RU и фильтры в классе на другие таблицы накладываются
эээ... там два отчета..тот что не Copy.. - он используется, но где вы увидели,что он не по временной таблице...а фильтры накладываются на запрос вроде...что мне делать, я щас свихнусь

Дополню : во временную таблицу я складываю уже отобранные фильтром записи, дабы потом группировку сделать необходимую

Последний раз редактировалось ek_Pendulum; 04.05.2007 в 17:12.
Старый 04.05.2007, 17:17   #20  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,263 / 982 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от ek_Pendulum Посмотреть сообщение
что мне делать, я щас свихнусь
1. читать документацию
2. переписать все вручную и вдумчиво
__________________
Isn't it nice when things just work?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
И снова Query и временные таблицы Def DAX: Программирование 19 08.12.2006 15:46
Временные таблицы в отчете Прокопьева DAX: Программирование 25 02.10.2006 14:54
Временные таблицы vasiliy DAX: Программирование 6 09.11.2004 11:04
Временные таблицы Diamond DAX: Программирование 3 30.12.2003 09:33
Временные таблицы в запросе Dron AKA andy DAX: Программирование 4 06.09.2002 12:14
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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