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