02.10.2003, 14:48 | #1 |
NavAx
|
Врем.табл.: поведение в 2-х и 3-х уровневой конф.
Привет всем!
Ax2.5Sp5 Есть модификация, в которой решается задача по "отсеиванию" лишних допустим проводок. Оптимальным показалось решение по созданию временной таблицы, ее заполнением нужной областью значений и подключением к существующему query в FormDataSource. Связывание происходило по признаку существования значения во временной таблице (ExistsJoin). Связь с постоянной таблицей. Так повелось, что большая часть рабочих мест орг-ции работает на 2-х уровневой конфигурации. Все замечательно работало, пока не пришлось запустить ахапту в тонком клиенте. И тут трабл: "Невозможно выбрать запись в табл. Скп . . . Временные таблицы должны быть вложенными (inner), когда вы объединяете их оператором join с постоянными таблицами". Звучит вроде понятно, да только, во-первых, таблица и есть вложенная (не то чтобы inner, но exist точно), а, во-вторых, как объяснить прекрасное поведение без участия AOS?! Может кто сталкивался. Вообще, неприятный осадок - столько работы Это приговор? С уважением, Сергей. |
|
02.10.2003, 16:40 | #2 |
----------------
|
временные таблицы
Не советую соединять join-ом постоянные и временные таблицы!!!
Обязяательно посмотрите профайлером какие запросы получает SQL-сервер. Сделать еще один select в цикле по производительности будет тоже самое (при правильном выборе что сверху), а по наглядности и надежности значительно лучше. Если уж очень хочется сделать join, то обратите внимание ГДЕ создается ваша временная таблица на клиенте или сервере (где происходит первый insert) |
|
03.10.2003, 16:05 | #3 |
Участник
|
2Ser:
Короче, Wamr хотел сказать, что джойнить с постоянными можно только временные таблицы, созданные на сервере. Я согласен с ним, что такие джойны не желательны, но иногда (обычно на формах) это нужно... Для того чтобы временная таблица жила на сервере, я лично очень часто создаю на временной таблице статический метод initOnServer с модификатором server, который возвращает курсор: return select firstonly имятаблицы; Надо вызвать этот метод в init'е формы... |
|
03.10.2003, 16:22 | #4 |
NavAx
|
PHP код:
|
|
03.10.2003, 17:17 | #5 |
Moderator
|
Слишком буквально
PHP код:
__________________
Андрей. |
|
06.10.2003, 10:14 | #6 |
NavAx
|
Огромное спасибо Axapta!!!
Это на самом деле гениально и просто! Да, также согласен, поскольку много раз обсуждалось, что нежелательно сцеплять постоянные и временные таблицы, но ситуация как раз заставила. Кстати, это довольно популярная лукап форма Предыдущий постинг нарисовал, неупев как следует обдумать, действительно в лоб. Очевидный факт, прошу прощения, сглупил. Получается, что таблицы, подлежащие Join должны находиться на ОДНОЙ из сторон, либо на клиенте, либо на сервере. У меня они жили раздельно... Спасибо участникам! Сергей. |
|
18.01.2005, 14:20 | #7 |
Developer
|
Возможно ли отобразить содержимое врем. таблицы в гриде на форме?
Привет всем!
Ax3.0Sp3 Сразу отмечу, что перед тем как написать в эту тему - просидел два дня в Аксапте с экспериментами, которые ни к чему не привели... Описание задачи: необходимо отобразить пользователю (например, в гриде) из таблицы InventPosting номенклатуры со счетами начинающимися на 2 (3, 4, ...) + еще некоторые простые условия. Было решено организовать выборку во временную таблицу и затем отобразить либо записи врем. табл. либо объединение (join) временной и InventPosting. Проблема: После заполнения врем. таблицы (в методе Init формы) данные не отображаютя в гриде (на настоящий момент я пытаюсь просто вывести содержимое временной таблицы). При чем через другие новые Query - QueryRun руками эти данные также никак получить не удается. Такое ощущение, что таблица ВСЕГДА создается на клиенте!!! Поведение (правильнее будет сказать - отсутствие такового) одинаковое и на тонком и на толстом клиентах... Что я пропустил??? (кроме "правильных" курсов ) Неужели в Query нельзя использовать временные таблицы? |
|
18.01.2005, 15:07 | #8 |
----------------
|
Вам поможет
QueryRun.setCursor(myTmpTable); |
|
18.01.2005, 16:18 | #9 |
Developer
|
Цитата:
Изначально опубликовано Wamr
Вам поможет QueryRun.setCursor(myTmpTable); А как быть с отображением временной таблицы в гриде формы? DataSource.QueryRun().setCursor(myTmpTable) не помогает... |
|
18.01.2005, 19:18 | #10 |
NavAx
|
Если вставлять записи в TmpTable,
где - TmpTable - имя dataSource - то всё должно работать. Ровно тот же результат даст операция: TmpTable.setTmpData(localTmpTable), где - TmpTable - имя dataSource, - localTmpTable - табличная переменная, используя которую вы добавляли записи
__________________
Чудес не бывает (c), истина где-то рядом (c)... |
|
18.01.2005, 19:37 | #11 |
Developer
|
Мда... Как всегда все просто...
Огромное спасибо, Ser! Сделал, все заработало. Сам ведь наблюдал, что две переменные одного типа "временная таблица" друг с другом совсем не связаны, а про DataSource - даже и не подумал. Записывал в свою переменную и искал причину в другом месте. В отпуск значит пора... |
|
21.12.2005, 10:51 | #12 |
Участник
|
Вроде все делаю как сказано ... но ошибка все та же ... видимо не туда вставляю InitOnServer
на данный момент в ините формы |
|
21.12.2005, 11:38 | #13 |
Участник
|
извиняюсь... все работает. Руки видимо не оттуда.
Метод прописывается в ините после супер.. и вот оно счастье. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|