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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.02.2013, 19:29   #1  
sashanka is offline
sashanka
Участник
 
28 / 10 (1) +
Регистрация: 07.02.2013
Сложный Range
Задаем несложный Range:
X++:
    str60                   wrkgroup                = "W0123*";

    ;

    queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrGroupId )).value(
    strFmt('(%1 == %2)', fieldStr( wrkCtrTable, WrkCtrGroupId ), fieldStr( wrkCtrTable, WrkCtrId ) ) );

   queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrId )).value( wrkgroup );
Имеем:

Название: Безымянный.png
Просмотров: 1135

Размер: 108.2 Кб

Задача:

Убрать верхнюю строчку из lookup, т.е. отображать только тех фрезеровщиков у которых есть разряд.

Читаем:
Expressions in query ranges
Сложный Range с датами

Пытаемся повторить :

X++:
    str60                   wrkgroup                = "W0123*";
    str60                   notwrkgroup             = "W012300000";

queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrGroupId )).value(
    strFmt('(%1 == %2)', fieldStr( wrkCtrTable, WrkCtrGroupId ), fieldStr( wrkCtrTable, WrkCtrId ) ) );
  
   queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrId )).value(
    strFmt('( (%1 == "%2") && (%1 != "%3") )',
    fieldStr(wrkCtrTable, WrkCtrId),
    queryValue( wrkgroup) )
    queryValue( notwrkgroup ) )
     );
НО получаем пустой lookup
Делаем запрос на таблице, убеждаемся что все таки имеются записи удовлетворяющие нашим условиям:

Нажмите на изображение для увеличения
Название: Безымянный1.png
Просмотров: 295
Размер:	97.0 Кб
ID:	8087

Пытаемся решить задачу своими силами:

немного упрощаем Range:
X++:
    str60                   wrkgroup                = "W0123*";

queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrGroupId )).value(
    strFmt('(%1 == %2)', fieldStr( wrkCtrTable, WrkCtrGroupId ), fieldStr( wrkCtrTable, WrkCtrId ) ) );
  
   queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrId )).value(
    strFmt(' (%1 == "%2") ',
    fieldStr(wrkCtrTable, WrkCtrId),
    queryValue( wrkgroup ) )
     );
И все равно получаем пустой lookup.

Что я делаю не так?
Старый 27.02.2013, 19:40   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от sashanka Посмотреть сообщение
Видимо не до конца прочитали
Там в самом конце есть раздел Using wildcards and comma-separated range values
За это сообщение автора поблагодарили: sashanka (1).
Старый 28.02.2013, 01:18   #3  
sashanka is offline
sashanka
Участник
 
28 / 10 (1) +
Регистрация: 07.02.2013
Стыдно то как -___-
Спасибо что не поленились ответить невнимательному новичку. Завтра обязательно проверю

Последний раз редактировалось sashanka; 28.02.2013 в 01:20.
Старый 28.02.2013, 17:50   #4  
sashanka is offline
sashanka
Участник
 
28 / 10 (1) +
Регистрация: 07.02.2013
Все получилось
X++:
    str60                   wrkgroup                = "W0123*";
    str60                   notwrkgroup             = "W012300000";

    queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrGroupId )).value(
    strFmt("(%1 == %2)", fieldStr( wrkCtrTable, WrkCtrGroupId ), fieldStr( wrkCtrTable, WrkCtrId ) ) );

    queryBuildDatasource.addRange( fieldNum( wrkCtrTable, WrkCtrId )).value(
    strFmt('((%1 LIKE "%2") && (%1 != "%3"))', fieldStr( wrkCtrTable, WrkCtrId ), wrkgroup, notwrkgroup ) );
Старый 28.02.2013, 21:43   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Глядя на то куда (на какое поле) вы добавляете расширенный фильтр, хочется предостеречь от возможных ошибок и недопонимания вас и других читающих этот пост.

1) На одно и то же поле таблицы можно устанавливать несколько фильтров (делать addRange на один и тот же fieldNum). В этом случае условия связываются так, как если бы они были перечислены один раз в одном фильтре через запятую. Т.е. грубо говоря связываются через ИЛИ (за исключением отрицаний).

2) Фильтр с расширенным синтаксисом может быть добавлен через любое поле таблицы. Для самого расширенного синтаксиса абсолютно не важно в Range.Value() какого именно поля его добавляют. Значение имеет только содержимое фильтра.

3) 2-ой пункт не отменяет 1-й. Т.е. если забыть о 1-ом пункте, то добавление даже расширенного фильтра на поле, по которому уже был задан ранее фильтр может привести не к запланированному результату.

Мораль. Все расширенные фильтры лучше не разбивать на несколько частей а формировать в один пусть и большой критерий. И добавлять этот критерий лучше через какое-нбудь системное поле (например TableId), что бы исключить его пересечение с пользовательскими фильтрами.


P.S.: А точно для реализации второго критерия необходимо прибегать к расширенному синтаксису? Вот такого критерия strfmt("%1, !%2", wrkgroup, notwrkgroup) не достаточно?

Последний раз редактировалось S.Kuskov; 28.02.2013 в 21:47.
За это сообщение автора поблагодарили: sashanka (1).
Старый 03.03.2013, 13:14   #6  
sashanka is offline
sashanka
Участник
 
28 / 10 (1) +
Регистрация: 07.02.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Глядя на то куда (на какое поле) вы добавляете расширенный фильтр, хочется предостеречь от возможных ошибок и недопонимания вас и других читающих этот пост.

1) На одно и то же поле таблицы можно устанавливать несколько фильтров (делать addRange на один и тот же fieldNum). В этом случае условия связываются так, как если бы они были перечислены один раз в одном фильтре через запятую. Т.е. грубо говоря связываются через ИЛИ (за исключением отрицаний).

2) Фильтр с расширенным синтаксисом может быть добавлен через любое поле таблицы. Для самого расширенного синтаксиса абсолютно не важно в Range.Value() какого именно поля его добавляют. Значение имеет только содержимое фильтра.

3) 2-ой пункт не отменяет 1-й. Т.е. если забыть о 1-ом пункте, то добавление даже расширенного фильтра на поле, по которому уже был задан ранее фильтр может привести не к запланированному результату.

Мораль. Все расширенные фильтры лучше не разбивать на несколько частей а формировать в один пусть и большой критерий. И добавлять этот критерий лучше через какое-нбудь системное поле (например TableId), что бы исключить его пересечение с пользовательскими фильтрами.


P.S.: А точно для реализации второго критерия необходимо прибегать к расширенному синтаксису? Вот такого критерия strfmt("%1, !%2", wrkgroup, notwrkgroup) не достаточно?
Вау, спасибо!

1)Про то, что на одно и то же поле таблицы можно устанавливать несколько фильтров и что они связываются по ИЛИ знала, а вот перечисление через запятую лично для меня это новость.

2) До этого дошла практическим путем

3) Запомню на будущее.

Действительно, расширенный синтаксис излишен в данном случае, для второго критерия.

P.S. strfmt("%1, !%2", wrkgroup, notwrkgroup) это круто ^___^
Старый 03.03.2013, 13:21   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от sashanka Посмотреть сообщение
перечисление через запятую лично для меня это новость
Тогда следующая ссылка для вас будет полезной http://axapta.mazzy.ru/lib/search/
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Сложный Range с датами Отшельник DAX: Программирование 7 31.01.2013 17:53
Сложный Range в Query. axalex DAX: Программирование 7 28.07.2011 13:29
jinx: Dynamics AX LookupForms – FindValue und Range auf gleichem Feld Blog bot DAX auf Deutsch 0 18.09.2009 03:13
axaptapedia: Packing date range values in queries Blog bot DAX Blogs 1 09.11.2007 13:10
и снова про сложный Range sparur DAX: Программирование 1 28.09.2007 15:59
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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