25.09.2013, 16:00 | #1 |
Участник
|
Всегда ли правильно работает 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 | 10 | |||
как работает QueryRun.reset() ??? | 1 | |||
QueryRun, Query | 3 | |||
Не работает Query | 3 | |||
Как же все-таки организованиы Query и QueryRun? | 4 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|