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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2013, 16:00   #1  
Aquarius is offline
Aquarius
Участник
 
139 / 29 (1) +++
Регистрация: 08.02.2007
Адрес: Одесса
Всегда ли правильно работает queryrun().query().dataSourceCount() при присоединении пользователем таблиц в настройках стандартного запроса?
Добрый день, Уважаемые господа,

Подскажите, пожалуйста,

Акс 2009. Sp 5.

Я обнаружила ,что в некоторых случаях у меня в коде неправильно работает queryrun().query().dataSourceCount() , а именно при присоединении пользователем таблиц в стандартный запрос,- возвращает правильное количество датосорсов- учитывает присоединенные,
но затем при последующем отсоединении этих таблиц, создается впечатление, что Аксапта не учитывает то что таблицы были отсоединены, и возвращает все тоже самое количество датосорсов в queryrun().query().dataSourceCount() как и в первом случае.
При этом, если в дебагере посмотреть содержимое запроса , то в запросе нет этих отсоединенных таблиц. Т.е. запрос правильный.
Искала на форуме ответ на свой вопрос, но не нашла.

Подскажите пожалуйста, что я сделала неправильно?
Метод Choose::Clicked формы формы InventAdjTransaction
.............................................

QueryBuildDatasource CurrentDS;
QueryBuildRange rangeCurrencyCode;
integer ds_Count,i;
tableid tableid;
…………………………………
if (inventAdjTransactSelect.prompt())
{
inventAdjTransactSelect.run();
tmpformlookup_ds.executeQuery();
//XXXXXXXXXXXXXXXXXXX 17.09.2013 - >
ds_Count=inventAdjTransactSelect.queryrun().query().dataSourceCount();
//ds_Count=tmpFormLookUp_q.dataSourceCount();
//ds_Count=tmpFormLookUp_ds.query().dataSourceCount();
for (i=1; i<= ds_Count ; i++)
{
CurrentDS=inventAdjTransactSelect.queryrun().query().dataSourceNo(i);
// CurrentDS=tmpFormLookUp_ds.query().dataSourceNo(i);
tableId= CurrentDS.table();
switch (tableid)
{
case tablenum(PurchTable):
{
rangeCurrencyCode = CurrentDS.findRange(fieldNum(PurchTable, currencyCode));
if (rangeCurrencyCode)
if (rangeCurrencyCode.value()!="")
purchcurrency=rangeCurrencyCode.value();
// значение из переменной purchcurrency будет записано в примечание при разноске
break;
}
case tablenum(InventTable):
{
rangeCurrencyCode = CurrentDS.findRange(fieldNum(InventTable,ContractCurrency_LPP));
if (rangeCurrencyCode)
if (rangeCurrencyCode.value()!="")
inventtablecurrency=rangeCurrencyCode.value();
// значение из переменной inventtablecurrency будет записано в примечание при разноске

break;
}
}
//<-XXXXXXXXXXXXXXXXXXX 17.09.2013
}
…………………………………………………………….

Исходно стояла следующая задача:
В форме корректировать проводок (вызваемой из формы закрытие и коррекция ) пользователь выбирает проводки через запрос, вызываемый кнопкой выбрать.
В запросе пользователь может присоединить к таблице складские проводки таблицу справочник номенклатуры и таблицу заголовки закупки, и в настройках запроса указать дополнительно в условиях отбора значения полей этих таблиц (валюта закупки, валюта номенклатуры ) .
Необходимо при разноске корректировки проводок ( кнопка разноска в форме корректировать проводки) в примечании к операции записывать автоматически значения полей присоединенных таблиц, указанных пользователем в фильтре. Т.е. в примечании будет выводится сообщение типа: « у скорректированных проводок валюта прихода «евро», валюта справочника «евро, длр» . Если пользователь не присоединял таблицы, или присоединил , но не указал значения условий по ним, то выводить сообщение: у скорректированных проводок валюта прихода «все», валюта справочника «все».
Для реализации этой задачи в методе Choose::Clicked кнопки Choose формы InventAdjTransaction я пыталась получить значение условия range для присоединенных пользователем таблиц. Я получала количество источников данных - inventAdjTransactSelect.queryrun().query().dataSourceCount().Затем просматривала какие таблицы связаны с данным источником, получала и range, и range.value
Сначала показалось, что все работает.
Случай 1. Запустив форму Корректировать проводки, я нажала кнопку выбор в появившемся запросе, присоединила таблицы InventTable , PurchTable, задала условия отбора по полям этих таблиц. Выбранные проводки скорректировала и разнесла. Все отработало корректно. В переменные purchcurrency, inventtablecurrency в методе Choose записались верные значения.
Случай 2. Но затем я повторила тестирование- в появившемся запросе удалила ранее присоединенные таблицы InventTable , PurchTable, но функционал отработал некорректно, он как будто бы не увидел новых настроек. Результат отработки был точно такой же как и при настройках запроса в случае 1.
Я проверила, что inventAdjTransactSelect.queryrun().query().dataSourceCount() вернул 4 (как и в случае 1.). И были найдены таблицы InventTable , PurchTable, и range, и range.value были такие же, как в случае 1. Т.е. новые настройки запроса не вступили в силу. И сколько бы раз я не запускала тест описанный в случае 2, он всегда отрабатывал неправильно, выдавал данные как в случае 1 .
Если в дебагере посмотреть cодержимое запрос для случая 2, то в запросе нет ограничений по InventTable , PurchTable

Последний раз редактировалось Aquarius; 25.09.2013 в 16:04.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00
как работает QueryRun.reset() ??? 6apcyk DAX: Программирование 1 08.10.2005 22:10
QueryRun, Query ald DAX: Программирование 3 10.02.2004 21:59
Не работает Query Dimitry DAX: Программирование 3 17.07.2003 16:36
Как же все-таки организованиы Query и QueryRun? VIS DAX: Программирование 4 03.07.2003 15:22

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:39.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.