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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.10.2014, 19:45   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Приходилось решать такую задачу.
- Делаете View custTransDisputeView на базе Query, в которой линкуете custTrans и CustDispute по outerJoin. [У view будут поля CustTransRecId, Status]
- В форму где нужен фильтр добавляете custTransDisputeView как дополнительный датасорс и джоините его с custTrans по innerJoin. [линкуете по полям CustTrans.RecId == custTransDisputeView.CustTransRecId].

Вот вкратце и всё.

Последний раз редактировалось DSPIC; 02.10.2014 в 19:56.
За это сообщение автора поблагодарили: Logger (3), IKA (1).
Старый 02.10.2014, 20:11   #2  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Спасибище, попробую
Старый 02.10.2014, 20:17   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DSPIC Посмотреть сообщение
У view будут поля CustTransRecId, Status
А в случае outer join какое значение в аксаптовском View будет иметь поле Status для несуществующих строк CustDispute? Это будет значение по умолчанию соответствующего типа? Т.е. в случае enum (int) - это будет ноль? Тогда принципиально (ну и это на самом деле логично) чтобы custVendDisputeStatus::None имел именно такое значение. Так?
Старый 02.10.2014, 20:27   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Т.е. в случае enum (int) - это будет ноль?
Да, скорее всего так и будет.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Тогда принципиально (ну и это на самом деле логично) чтобы custVendDisputeStatus::None имел именно такое значение. Так?
Да, видимо так.

Вообще, в AX2012 появилась возможность во вьюхи добавлять вычисляемые поля. Таким образом, можно расширить поле статус, в зависимости от того, есть запись или нет - скажем [-1, 1, 0], а потом фильтровать по желанию.
За это сообщение автора поблагодарили: AndyD (2).
Старый 02.10.2014, 21:10   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2499 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Вообще, в AX2012 появилась возможность во вьюхи добавлять вычисляемые поля. Таким образом, можно расширить поле статус, в зависимости от того, есть запись или нет - скажем [-1, 1, 0], а потом фильтровать по желанию.
А вот это уже правильная идея
Можно использовать такую функцию на View
X++:
public static server str isNullExpression(str _expression)
{
    return strFmt('COALESCE(T2.STATUS, %1)', int2str(CustVendDisputeStatus::None));
}
И фильтровать по вычисляемому полю - значение 0 будет для отсутствия связи
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 02.10.2014, 20:36   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2499 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Приходилось решать такую задачу.
- Делаете View custTransDisputeView на базе Query, в которой линкуете custTrans и CustDispute по outerJoin. [У view будут поля CustTransRecId, Status]
- В форму где нужен фильтр добавляете custTransDisputeView как дополнительный датасорс и джоините его с custTrans по innerJoin. [линкуете по полям CustTrans.RecId == custTransDisputeView.CustTransRecId].

Вот вкратце и всё.
Хм.
А рейнж по Status точно преобразовывает значение 0 в NULL?
__________________
Axapta v.3.0 sp5 kr2
Старый 03.10.2014, 16:58   #7  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Приходилось решать такую задачу.
- Делаете View custTransDisputeView на базе Query, в которой линкуете custTrans и CustDispute по outerJoin. [У view будут поля CustTransRecId, Status]
- В форму где нужен фильтр добавляете custTransDisputeView как дополнительный датасорс и джоините его с custTrans по innerJoin. [линкуете по полям CustTrans.RecId == custTransDisputeView.CustTransRecId].

Вот вкратце и всё.
Чот в теории должно работать, а на практике - нет.
Если этот VIew открыть, то оно отображает данные правильно. Но вот накладывать фильтр - по "Not disputed" (отображаемое значение, соответствующее Enum 0, т.е те строки View, где поля из custDispute отсутствуют) не позволяет. При этом, пробовала 0, null - тоже не получается, т.е возвращается просто пустая выборка.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Добавить хитрый фильтр в Query ackid DAX: Программирование 5 16.12.2013 08:14
Фильтр. Как сделать? Apollon33 DAX: Программирование 9 30.01.2013 12:51
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
Как сделать хитрый лукап miklenew DAX: Программирование 11 08.10.2007 17:28
Как сделать фильтр с "ИЛИ"? MIkeFW DAX: Программирование 8 19.01.2004 15:25

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

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

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