03.02.2003, 10:06 | #1 |
Moderator
|
Ограничить вывод записей master таблицы, наложением фильтра на detail таблицу
Есть форма SalesTable - на ней 2 dataSourc'а - SalesTable и SalesLine.
Задача - при нажатии на определенную клавишу на форме, выводить только те заказы, в которых фигурирует заданная номенклатура. Вопрос - как это реализовать ? Честно говоря ничего не лезет в голову. Код номенклатуры находится в SalesLine - значит фильтр мы должны накладывать на SalesLine. Но при этом не осуществляется фильтрация SalesTable. Нужно нечто типа programable section в отчете, но на Gride - то есть проверка какого-то условия, а затем вывод/или "не вывод" этой строки в Grid. Может у кого-то есть какие нибудь идеи по этому поводу. |
|
03.02.2003, 10:53 | #2 |
Moderator
|
Решали близкую по смыслу задачу; ничего, кроме переопределения query на SalesTable_DS, не нашлось...
__________________
Андрей. |
|
03.02.2003, 11:17 | #3 |
Moderator
|
Если не трудно, объясни поподробнее. Где и когда нужно переопределять query() ? Спасибо.
|
|
03.02.2003, 11:43 | #4 |
Moderator
|
Как обычно, на SalesTable_DS.init(). К SalesTable добавляешь SalesLine, на котором описываешь те же условия, как и в SalesLine_DS.init(). Здесь важный момент: нужно задать тип join`а для QueryBuildDataSource SalesLine: qbdsSalesLine.joinMode(JoinMode::ExistsJoin). Это все на init() SalesTable`а. Между самими датасорсами на форме никаких join`ов нет.
Немного путано , но, если напишешь текст своего SalesLine_DS.init(), попытаюсь описать SalesTable_DS.init().
__________________
Андрей. |
|
03.02.2003, 12:13 | #5 |
Moderator
|
Цитата:
но, если напишешь текст своего SalesLine_DS.init(), попытаюсь описать SalesTable_DS.init().
Вот Class Declararion формы: PHP код:
PHP код:
PHP код:
PHP код:
executeQuery() SalesTable: PHP код:
При нажатии пользователем на button происходит примерно следующее: PHP код:
|
|
|
За это сообщение автора поблагодарили: alex55 (1). |
03.02.2003, 12:55 | #6 |
Moderator
|
Сразу про dataSourceNo(1) : команда возвращает 1-й QueryBuildDataSource у query. После super() на SalesLine_DS это как раз qbdsSalesLine.
Далее: В classDeclaration добавить PHP код:
PHP код:
PHP код:
__________________
Андрей. |
|
03.02.2003, 13:19 | #7 |
Moderator
|
Спасибо за помощь, но похоже мне это не помогло.
Я тут создал свою формочку (очень облегченный вариант SalesTable), в которой и попробовал реализовать все то, что ты мне советовал. Если будет время, можешь взглянуть и подсказать, где и что я делаю не так ? Заранее благодарен. |
|
03.02.2003, 14:13 | #8 |
Moderator
|
Поправки следующие:
1. Цитата:
Изначально опубликовано Dron AKA andy
Между самими датасорсами на форме никаких join`ов нет. 2. В Button.clicked() вместе с SalesTable_DS.executeQuery() нужно обновить также и SalesLine_DS, добавляем туда SalesLine_DS.executeQuery(); 3. Каюсь, моя недоработка. Но если ты не первый раз столкнулся с переопределением query, мог бы и сам просечь . В SalesTable_DS.init(): PHP код:
__________________
Андрей. |
|
03.02.2003, 14:26 | #9 |
Moderator
|
ОК. Спасибо. Давай попорядку.
Цитата:
2. В Button.clicked() вместе с SalesTable_DS.executeQuery() нужно обновить также и SalesLine_DS, добавляем туда SalesLine_DS.executeQuery();
Цитата:
3. Каюсь, моя недоработка.....
Цитата:
Между самими датасорсами на форме никаких join`ов нет.
|
|
03.02.2003, 14:40 | #10 |
Moderator
|
Пропадание заказа без строк - у нас допускалось это (нет строк - и заказ не нужен, все равно его не надо обрабатывать), поэтому как убрать - пока не скажу.
Ну и следующее, про join: непроизвольно спроецировал свою задачу на твою . Мне надо было, чтобы были видны и все заказы, и все строки всех заказов. А тебе, судя по всему, надо join оставить.
__________________
Андрей. |
|
03.02.2003, 14:44 | #11 |
Moderator
|
Цитата:
Пропадание заказа без строк - у нас допускалось это (нет строк - и заказ не нужен, все равно его не надо обрабатывать), поэтому как убрать - пока не скажу.
|
|
03.02.2003, 14:49 | #12 |
Moderator
|
Ну у меня это была форма для обработки заказов, а не замена SalesTable`у.
__________________
Андрей. |
|
03.02.2003, 14:52 | #13 |
Moderator
|
Ясно. Большое спасибо за помощь.
|
|