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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.05.2012, 15:02   #21  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Насторожило, что код этот выполняется до вашего. А в чьём executequery (т.е. в методе какого датасурса) он находится?
my table.
public void executeQuery()

{
QueryBuildDataSource qbds = this.query().dataSourceTable(tablenum(myTable));
;
if (radioCharGroup.text() == '<Пусто>')
{
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
}
else
findOrCreateRange_W(qbds, fieldnum(myTable, key), radioCharGroup.text());

super();

this.filltmptable();
}

filltmptable(); и до и после super() ставил. Результат одинаковый.

в filltmptable() пытаюсь соединить их.

P.S. Похоже что действительно что-то не то с кодом, написанным до меня. Эти старые фильтры как то не хотять жить с моей временной таблицей. Поразбираюсь.

Последний раз редактировалось uskutus; 02.05.2012 в 15:51.
Старый 02.05.2012, 17:22   #22  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Закомментировал старые фильтры. Декларативный join с временной таблицей работает нормально. Если включить эти фильтры, то без всякого моего кода будет ошибка времени выполнения "QueryBuildRange - объект не инизиализирован." еще на этапе init.

Если убрать все фильтры, декларативный join и попробовать программно:

qbds = this.query().dataSourceTable(tablenum(mytmptable));
qbds = qbds.addDataSource(tablenum(myTable)); - "QueryBuildDataSource, объект не инициализирован."

qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key));
qbds.joinMode(JoinMode::InnerJoin);

Видимо явления одного порядка.

Еще вот так попробовал:

qbds = this.query().dataSourceTable(tablenum(mytmptable));
qbds = this.query().addDataSource(tablenum(myTable));

Ошибка - "Источник данных не входит в состав родительского источника данных." Эта ошибка уже возникает в Classes\info\View.

Последний раз редактировалось uskutus; 02.05.2012 в 17:37.
Старый 03.05.2012, 08:11   #23  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Закомментировал старые фильтры. Декларативный join с временной таблицей работает нормально. Если включить эти фильтры, то без всякого моего кода будет ошибка времени выполнения "QueryBuildRange - объект не инизиализирован." еще на этапе init.
Т.е. это ещё до той ошибки в executeQuery на строке
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
?

А на какой строчке в методе init() выдаётся ошибка?
Старый 03.05.2012, 09:31   #24  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Т.е. это ещё до той ошибки в executeQuery на строке
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
?

А на какой строчке в методе init() выдаётся ошибка?
Да, тут была как раз ошибка, о которой вы писали:

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
переменная qbds как инициализируется? через dataSourceNo?
При добавлении новых датасурсов нумерацию изменяется. Если дело в этом, то просто замените dataSourceNo, на dataSourceTable или dataSourceName.
Поставил datasourcetable, ошибка исчезла. Правда теперь функции findOrCreateRange_W не ограничивают запрос. tmpTable pаполняю в executequery ее датасоурса. Попробую разобраться. А не дадите ссылочку, с описанием что делает SetCursor ? Ни в MSDN ни в встроенной справке не нашел.
Старый 03.05.2012, 10:35   #25  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от uskutus Посмотреть сообщение
А не дадите ссылочку, с описанием что делает SetCursor ? Ни в MSDN ни в встроенной справке не нашел.
Ссылочки нет, к сожалению. Но этот метод передает курсор на временную таблицу в QueryRun. Пример его использования можно посмотреть:
1) В поиске по АОТ / по перекрестным ссылкам
2) В гугле. Например, здесь: http://www.cnblogs.com/Jimmyx/archiv...7/2030411.html
__________________
Возможно сделать все. Вопрос времени
Старый 03.05.2012, 10:43   #26  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
А не дадите ссылочку, с описанием что делает SetCursor ? Ни в MSDN ни в встроенной справке не нашел.
Чего-то вменяемого описания не смог найти. Попробую объяснить сам

Классы Query, QueryBuildDataSource, QueryBuildRange реализуют/формируют структуру запроса.
Класс QueryRun реализует обход/цикл по сформированному запросу (Query)

На форме перебор записей/обход запроса реализуется ядром системы самостоятельно, без вмешательства прораммиста и явного использования QueryRun.

Датасурс формы (FormDataSource, котрый лежит на форме в узле DataSource) выполняет одновременно и роль элемента query (QueryBuildDatasource) и табличного курсора (Common), через который осуществляется доступ к активной строке таблицы.

На самом деле и при использовании QueryRun неявно создаются подобные табличные курсоры, связанные с каждым QueryBuildDatasource. Именно их возвращает метод queryRun.get().

Метод queryRun.setCursor() позволяет подменить автоматически созданный при инициализации queryRun курсор на свой. Это в частности позволяет подсовывать в QueryRun курсоры от временных таблиц или осуществлять вот такие штуки queryRun метод get

При работе с датасурсами формы нет необходимости в использовании setCursor для связи источника с временной таблицей, т.к. имея непосредственный доступ к табличному курсору источника, связь с временными данными можно сделать через setTmpData.

Каждый раз при объявлении курсора временной таблицы или при вызове метода common.setTmp (преобразовании постоянного курсора во временный) система создаёт отдельный временный буфер данных. Для каждого курсора даже одного и того же типа, будет создан независимый от других курсоров буфер. Метод setTmpData позволяет несколько табличных курсоров связать с одним временным буфером данных. Не путайте с простым присваиванием одного курсора другому. Курсоры, связанные через setTmpData, могут независимо друг от друга перемещаться по данным (т.е. select одного курсора не изменит позицию и выборку другого). В тоже время setTmpData не выполняет копирования данных (происходит именно назначение курсору ссылки на буфер) - это означает, что изменение данных (вставка/изменение/удаление) через один из курсоров будет непосредственно отражаться на всех остальных курсорах связанных с тем же временным буфером.
За это сообщение автора поблагодарили: sukhanchik (2), driller (2), AndyPanda (0).
Старый 03.05.2012, 11:09   #27  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Всем спасибо. С ошибкой в

qbds = this.query().dataSourceTable(tablenum(mytmptable));
qbds = qbds.addDataSource(tablenum(myTable)); - "QueryBuildDataSource, объект не инициализирован."

вроде разобрался.

Этот код был в executequery mytable. Наоборот было нельзя, т.к. временные таблицы не должны быть вложенными. Поставил в executequery mytmptable, ошибка исчезла. Еще много чего не работает. Будем дальше познавать тайны аксапты)
Старый 03.05.2012, 17:07   #28  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Очередная проблема. После джойна с временной таблицей, невозможно выбрать ни одну запись в гриде. Сразу курсор перескакивает на первую запись.
Старый 03.05.2012, 17:54   #29  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Очередная проблема. После джойна с временной таблицей, невозможно выбрать ни одну запись в гриде. Сразу курсор перескакивает на первую запись.
Какой датасурс указан в свойствах grida? Должен быть главный, а не подчинённый. Т.е. в вашем случае датасурс временной таблицы.
Старый 04.05.2012, 09:35   #30  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Какой датасурс указан в свойствах grida? Должен быть главный, а не подчинённый. Т.е. в вашем случае датасурс временной таблицы.
Спасибо, так и есть.
Теги
ax2.5

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передать временную таблицу из формы в класс Eldar9x DAX: Программирование 26 20.06.2008 19:09
Как join'ить временную таблицу и query на форме IvanS DAX: Программирование 1 07.05.2008 09:49
Два DataSource на одну временную таблицу mou DAX: Программирование 4 22.03.2008 11:00
импорт текст.файла во временную таблицу fialka DAX: Программирование 5 07.02.2007 15:42
Как передать временную таблицу Aslan DAX: Программирование 15 23.05.2006 17:34

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

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

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