07.12.2006, 08:57 | #1 |
Участник
|
И снова Query и временные таблицы
Есть следующий код (отрывок)
qr3 = new QueryRun(q3); qr3.setCursor(t); while (qr3.next()) { balanceListTable = qr3.get(tablenum(IZH_BalanceListTable)); inventDim = qr3.get(tablenum(inventDim)); inventTable = InventTable::find(balanceListTable.ItemId); ..................... } t инстанс таблицы которая объявлена как Temporary = Yes заполнялась типа на сервере t = IZH_BalanceListTable::initOnServer(); ....... t.insert() клиент работает в 3х звенке Ax3 SP4 вопрос следующий пока таблица временная результат работы query какой то левый то есть InventDim подтянут криво или не подтянут совсем ставлю у таблицы Temporary в No результат выборки выдает как раз то что нужно скажите где еще что я забыл при работе с временными таблицами |
|
07.12.2006, 09:15 | #2 |
Administrator
|
Во-первых проверьте, insert первой записи временной таблицы ТОЧНО на сервере отрабатывает? (кстати - для этого есть смысл заглянуть двухуровневой конфигурацией)
Ну а во-вторых - как уже неоднократно писалось - никто не гарантирует в Аксапте нормальную работу джойна постоянных и временных таблиц. Т.е. если это работает - хорошо... Но это может и не работать.
__________________
Возможно сделать все. Вопрос времени |
|
07.12.2006, 10:02 | #3 |
Участник
|
мда как все запущено
|
|
07.12.2006, 10:30 | #4 |
Злыдни
|
Временные таблицы для трехуровневой конфигурации заполняются на клиенте. Поэтому модификаторы вызова лучше всего поставить в "Called From"
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
07.12.2006, 11:10 | #5 |
Developer
|
Цитата:
Def, покажите, пожалуйста, IZH_BalanceListTable::initOnServer() ... Последний раз редактировалось vallys; 07.12.2006 в 11:16. |
|
07.12.2006, 11:26 | #6 |
Злыдни
|
Я говорил не об общем правиле, а конкретном. Вызов наверняка идет из формы, а не из класса. Так что первая запись будет инициироваться клиентской частью. Может я ошибся, и это обрабочик запихнули в класс, но скорее всего это вывод данных запроса в форму.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
07.12.2006, 11:32 | #7 |
Developer
|
Цитата:
Судя по куску кода - чтобы узнать, где инициализизуется первая запись, нужно увидеть IZH_BalanceListTable::initOnServer()... Хотя я склонен предположить, что там все "чисто" |
|
07.12.2006, 15:39 | #8 |
Участник
|
static server IZH_BalanceListTable initOnServer()
{ IZH_BalanceListTable balanceListTable; ; select firstonly balanceListTable; return balanceListTable; } еще писал для вставки static server void insertOnServer(IZH_BalanceListTable balanceListTable) { balanceListTable.insert(); } |
|
07.12.2006, 15:42 | #9 |
Участник
|
и еще это метод класса у которого стоит CalledFrom
а вызывается класс когда жмут на кнопку на некой форме |
|
07.12.2006, 15:46 | #10 |
Участник
|
кстати получил информацию что в 3х звенке табличка все равно не будет создана на сервере базы данных а будет на AOS и вследствие этого могут быть проблемы (тоже версия)
|
|
07.12.2006, 15:54 | #11 |
Участник
|
всем спасибо Господа!
я решил забить на все и сделать одним из двух вариантов 1. Длеаю таблицу НЕ временной ввожу туда пользователя и сессию для того чтобы данные от двух пользоватлей не клеились и работаю спокойно с табличкой 2. Оставляю табличку временной но денормализую результат, то есть нужные поля InvenDim складываю в эту табличку |
|
07.12.2006, 16:02 | #12 |
Developer
|
Def, а у Вас, случайно, InventDim соеденялся с временной не по QueryFetchMode::One2Many?
Последний раз редактировалось vallys; 07.12.2006 в 16:04. |
|
07.12.2006, 16:26 | #13 |
Участник
|
Def, вы совершенно неправильно работали с временной таблицей - во всяком случае, создается такое впечатление по тем кускам кода, которые вы показали.
Поэтому и не работало |
|
07.12.2006, 17:00 | #14 |
Злыдни
|
while select [поля] from [табличная переменная]
group by [поля] where [условия] { [табличная переменная tmp].[поле] = ...; . . [табличная переменная tmp].insert(); } [datasource].setTmpData([табличная переменная tmp]); все нормально работает
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
07.12.2006, 17:09 | #15 |
Участник
|
Ключевой момент, что вызвается метод setTmpData и что вызывается он в той же области видимости, что и табличная переменная временной таблички (то есть она еще не удалилась)
|
|
08.12.2006, 07:35 | #16 |
Участник
|
|
|
08.12.2006, 07:36 | #17 |
Участник
|
я не использую результат для отображения на форме а просто вывожу этот результат в EXCEL
|
|
08.12.2006, 07:37 | #18 |
Участник
|
|
|
08.12.2006, 08:50 | #19 |
Злыдни
|
А способ вывода данных (форма, файл) уже не играет роли: это только интерфейс вывода.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
08.12.2006, 15:46 | #20 |
Участник
|
Объясните плз цепочку работы объектов? Что где заполняется и как передается? В каком объекте у вас идет вывод в Excel?
Последний раз редактировалось zelen; 08.12.2006 в 16:21. |
|