AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.02.2003, 10:06   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Ограничить вывод записей master таблицы, наложением фильтра на detail таблицу
Есть форма SalesTable - на ней 2 dataSourc'а - SalesTable и SalesLine.

Задача - при нажатии на определенную клавишу на форме, выводить только те заказы, в которых фигурирует заданная номенклатура.

Вопрос - как это реализовать ?

Честно говоря ничего не лезет в голову. Код номенклатуры находится в SalesLine - значит фильтр мы должны накладывать на SalesLine. Но при этом не осуществляется фильтрация SalesTable.

Нужно нечто типа programable section в отчете, но на Gride - то есть проверка какого-то условия, а затем вывод/или "не вывод" этой строки в Grid.

Может у кого-то есть какие нибудь идеи по этому поводу.
Старый 03.02.2003, 10:53   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Решали близкую по смыслу задачу; ничего, кроме переопределения query на SalesTable_DS, не нашлось...
__________________
Андрей.
Старый 03.02.2003, 11:17   #3  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Если не трудно, объясни поподробнее. Где и когда нужно переопределять query() ? Спасибо.
Старый 03.02.2003, 11:43   #4  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Как обычно, на 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  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
но, если напишешь текст своего SalesLine_DS.init(), попытаюсь описать SalesTable_DS.init().
ОК. Попробую.

Вот Class Declararion формы:

PHP код:
QueryBuildRange                 statusRange;
dem_SalStatus                   statusValue;
QueryBuildRange                 itemIdRange;
ItemId                          itemIdValue
init() формы:
PHP код:
  statusValue '';
  
itemIdValue ''
init SalesTable_ds:

PHP код:
  //......
  
super();

    
// <-- DemAS
    
statusRange this.query().dataSourceNo(1).addRange(fieldNum(SalesTable,dem_Status));
    
// --> 
init() SalesLine_ds:
PHP код:
    itemIdRange this.query().dataSourceNo(1).addRange(fieldNum(SalesLineItemId)); 
Да-да, здесь тоже надо dataSourceNo(1), иначе itemIdRange не инициализируется. А почему ?

executeQuery() SalesTable:
PHP код:
public void executeQuery()
{
    
statusRange.value(statusValue);
    
itemIdRange.value(itemIdValue);
    
super();

Вот собственно и все.

При нажатии пользователем на button происходит примерно следующее:

PHP код:
        statusValue fldStatus.value();
        
itemIdValue fldItemId.value();

        
salesTable_ds.executeQuery(); 
Будет здорово, даже если ты скажешь, где в Аксапте делается примерно то, что мне нужно. В том смысле, что изучение рабочего примера может очень даже помочь.
За это сообщение автора поблагодарили: alex55 (1).
Старый 03.02.2003, 12:55   #6  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Сразу про dataSourceNo(1) : команда возвращает 1-й QueryBuildDataSource у query. После super() на SalesLine_DS это как раз qbdsSalesLine.
Далее:
В classDeclaration добавить
PHP код:
QueryBuildRange                 itemIdRangeSalesTable
SalesTable_DS.init():
PHP код:
QueryBuildDataSource qbdsSalesLine;
//......
super();
// <-- DemASs
statusRange this.query().dataSourceNo(1).addRange(fieldNum SalesTable,dem_Status));
// -->
qbdsSalesLine this.query().dataSourceNo(1).addDataSource(tableNum(SalesLine));
itemIdRangeSalesTable qbdsSalesLine.addRange(fieldNum(SalesLineItemId));
qbdsSalesLine.joinMode(JoinMode::EXISTSJOIN); 
В SalesTable_DS.executeQuery добавить

PHP код:
itemIdRangeSalesTable .value(itemIdValue); 
Вроде ничего не забыл
__________________
Андрей.
Старый 03.02.2003, 13:19   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Спасибо за помощь, но похоже мне это не помогло.

Я тут создал свою формочку (очень облегченный вариант SalesTable), в которой и попробовал реализовать все то, что ты мне советовал. Если будет время, можешь взглянуть и подсказать, где и что я делаю не так ?

Заранее благодарен.
Вложения
Тип файла: xpo dem_question.xpo (28.6 Кб, 419 просмотров)
Старый 03.02.2003, 14:13   #8  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Поправки следующие:
1.
Цитата:
Изначально опубликовано Dron AKA andy
Между самими датасорсами на форме никаких join`ов нет.
Внимательнее читаем, исправляем на форме.
2. В Button.clicked() вместе с SalesTable_DS.executeQuery() нужно обновить также и SalesLine_DS, добавляем туда SalesLine_DS.executeQuery();
3. Каюсь, моя недоработка. Но если ты не первый раз столкнулся с переопределением query, мог бы и сам просечь .

В SalesTable_DS.init():
PHP код:
qbdsSalesLine this.query().dataSourceNo(1).addDataSource(tableNum(SalesLine));
qbdsSalesLine.addLink(fieldNum(SalesLinesalesId), fieldNum(SalesTablesalesId)); // этой строки не было
itemIdRangeSalesTable qbdsSalesLine.addRange(fieldNum(SalesLineItemId)); 
__________________
Андрей.
Старый 03.02.2003, 14:26   #9  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
ОК. Спасибо. Давай попорядку.

Цитата:
2. В Button.clicked() вместе с SalesTable_DS.executeQuery() нужно обновить также и SalesLine_DS, добавляем туда SalesLine_DS.executeQuery();
Исправил.

Цитата:
3. Каюсь, моя недоработка.....
Вот оно. Вроде заработало. Но - всплыл один неприятный момент - из заказо исчез заказ в котором нет строк заказа. Исчез, хотя фильтр я еще не кнопку "Фильтр" я еще не жал. Как с этим бороться.

Цитата:
Между самими датасорсами на форме никаких join`ов нет.
Попробовал. Знаешь, но на желаемую фильтрацию это никак не повлияло, как фильтровало и до этого(пункт 3 - выполнен), так и сейчас фильтрует - все ОК. Пропавшие заказы без строк так и не появились (да и с чего бы им появиться). Плюс к этому при перемещении по заказам у меня не происходит фильтрация строк заказов. Зачем убирать join c датасоурсов ?
Старый 03.02.2003, 14:40   #10  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Пропадание заказа без строк - у нас допускалось это (нет строк - и заказ не нужен, все равно его не надо обрабатывать), поэтому как убрать - пока не скажу.
Ну и следующее, про join: непроизвольно спроецировал свою задачу на твою . Мне надо было, чтобы были видны и все заказы, и все строки всех заказов. А тебе, судя по всему, надо join оставить.
__________________
Андрей.
Старый 03.02.2003, 14:44   #11  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Пропадание заказа без строк - у нас допускалось это (нет строк - и заказ не нужен, все равно его не надо обрабатывать), поэтому как убрать - пока не скажу.
А как с ситуацией, когда сначала создается заказ, а лишь через некоторое время в него набиваются строки ? Получается, что созданные заказы, в которые мы не успели/забыли забить строки, потеряны для пользователей ?
Старый 03.02.2003, 14:49   #12  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Ну у меня это была форма для обработки заказов, а не замена SalesTable`у.
__________________
Андрей.
Старый 03.02.2003, 14:52   #13  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Ясно. Большое спасибо за помощь.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Set записей таблицы OOuph DAX: Программирование 6 11.02.2008 10:27
Копирование фильтра с таблицы на таблицу PODOL DAX: Программирование 4 05.09.2007 11:17
Как добавить в фильтрацию записей доп. таблицы n:1 или 1:n? Hidden DAX: Программирование 6 11.08.2006 14:04
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Обновление detail-таблицы DreamCreator DAX: Программирование 1 05.04.2005 15:57

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:52.