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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.04.2008, 15:17   #1  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
фильтр Base Enum-a
Нужно в гриде формы фильтровать base enum в зависимости от значения другого поля записи. То есть если значение одного поля А , то в другом поле вываливаются для выбора значения a, b, c, п если значение B, то в энуме должны появляться только b, d, e, f значения.

Привязала edit метод к контролу, при сохранении - заполняю нужное поле в таблице. Думала вот сейчас на modified or selectionChange combobox-a , динамически открывать нужный набор значений, но эти методы не вызываются при выборе значения в combobox-e!

Фильтрование Перечислимого типа - читала .... , но чот так тож не получаицца - как в гриде установить значения в этом контроле для каждой строки свои при открытии формы ..... если он не привязан к edit -методу....

Помогите плз ....

Последний раз редактировалось kitty; 24.04.2008 в 15:20.
Старый 24.04.2008, 15:26   #2  
V777 is offline
V777
совсем зелен
 
249 / 10 (1) +
Регистрация: 15.04.2008
есть книга Алексея Еременко разработка бизнес-приложений??? там чет такое видел...отдельной темой...переписывать сюда много а сам не пробовал..,
Старый 24.04.2008, 15:32   #3  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
А не проще ли будет заменить Base Enum на EDT c relation на таблицу и потом перекрыть метод lookup. Если нужен именно ComboBox, то наверное только так как описано в теме Фильтрование Перечислимого типа
За это сообщение автора поблагодарили: mazzy (2).
Старый 24.04.2008, 15:37   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kitty Посмотреть сообщение
Нужно в гриде формы фильтровать base enum в зависимости от значения другого поля записи. То есть если значение одного поля А , то в другом поле вываливаются для выбора значения a, b, c, п если значение B, то в энуме должны появляться только b, d, e, f значения.
Способ 1
Вместо enum создайте справочник, содержащий два поля
1. Поле со значениями поля A
2. Поле со значениями enum'ов.
Создайте сложный relaion на таблице, который учитывает два поля
Пример - любой журнал, который показывает разные значения и даже разные таблицы в зависимости от выбранного типа счета

Способ 2
См. очень сложный для реализации, но уже готовый функционал для финансовых аналитик
http://axapta.mazzy.ru/lib/dimension_hierarchy/

Способ 3
Создайте два enum
enum1: a:1, b:2, c:3
enum2: b:2, d:4, e:5, f:6

при изменении значения в поле А подменяйте lookup в контроле.
Этот вариант требует очень внимательного программирования и соблюдения соглашений в дальнейшем при развитии системи.
например, если появится еще одно значение в A или в первом enum'е добавится элемент.

При всей кажущейся простоте этот способ самый рисковый с точки зрения труднообнаружимых багов в будущем.

Мне кажется, что будет конструктивным, если вы измените свое ТЗ и "другое поле" будет иметь тип код другого справочника, а не enum. реализовать будет намного легче
__________________
полезное на axForum, github, vk, coub.
Старый 24.04.2008, 15:38   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Могу предложить извращенный метод , на каждый элемент енума вешаем конфигурационный ключ, и далее в зависимости от значения поля, программно вкл./выкл конф. ключи, в результате будут появляться только те енумы, у которых конф. ключ включен.
Старый 24.04.2008, 15:38   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
А не проще ли будет заменить Base Enum на EDT c relation на таблицу и потом перекрыть метод lookup.
сов.согласен.
не видел пока писал.
__________________
полезное на axForum, github, vk, coub.
Старый 24.04.2008, 15:40   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Могу предложить извращенный метод , на каждый элемент енума вешаем конфигурационный ключ
Конфигурационный ключ действует глобально для всей системы.
А здесь нужны разные вписки в зависимости от значения в другом поле.
__________________
полезное на axForum, github, vk, coub.
Старый 24.04.2008, 15:44   #8  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
действительно, разные пользователи....
Старый 24.04.2008, 15:51   #9  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
еще вариант -edit метод, перекрыть лукап в котором выводить темповую таблицу, набивая в нее по ситуации значения

PS - еще вариант - вываливать в лукап все подряд, но при выборе ругаться если выбрали не то
За это сообщение автора поблагодарили: kitty (1).
Старый 24.04.2008, 15:54   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от MironovI Посмотреть сообщение
еще вариант -edit метод, перекрыть лукап в котором выводить темповую таблицу, набивая в нее по ситуации значения
В этом случае будут дико расходоваться номера RecID.
В ax3.0 это совсем не хорошо.
В ax4.0 это не очень хорошо.
__________________
полезное на axForum, github, vk, coub.
Старый 24.04.2008, 15:57   #11  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
В этом случае будут дико расходоваться номера RecID.
В ax3.0 это совсем не хорошо.
В ax4.0 это не очень хорошо.
ну вообще способ 1 от mazzy мне кажется достаточно здравым - создайте таблицу статичную, куда забейте все возможные сочетания первого и второго значений и ее лукапить..
Старый 24.04.2008, 16:14   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
В этом случае будут дико расходоваться номера RecID.
Почему?

Серия RecId для временной таблицы живет в рамках времени жизни табличной переменной. У двух одновременно созданных временных таблиц будут одинаковые recId.

X++:
static void tempTablesRecId(Args _args)
{
    TmpFrmVirtual t1;
    TmpFrmVirtual t2;
;
    t1.Qty = 1;
    t2.Qty = 1;
    t1.insert();
    t2.insert();

    info (int2str(t1.RecId));
    info (int2str(t2.RecId));
}
Цитата:
Сообщение от MironovI Посмотреть сообщение
PS - еще вариант - вываливать в лукап все подряд, но при выборе ругаться если выбрали не то
+1. Или создавать таблицу. BaseEnum - это фиксированный набор значений.
Старый 24.04.2008, 16:28   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oip Посмотреть сообщение
Серия RecId для временной таблицы живет в рамках времени жизни табличной переменной. У двух одновременно созданных временных таблиц будут одинаковые recId.
Вот как? Это в 4ке или в 3ке?
__________________
полезное на axForum, github, vk, coub.
Старый 24.04.2008, 16:30   #14  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Всегда так было. И в тройке и в четверке. Иначе бы отчеты на основе временных таблиц были бы практически под запретом.
За это сообщение автора поблагодарили: mazzy (5), kitty (1).
Старый 25.04.2008, 23:59   #15  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Всем огромное спасибо за советы!
Отлично получилось с помощью временной таблицы на лукапе.
Старый 15.12.2013, 12:21   #16  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
От енума наследовал EDT с лукап формой, на поле поставил EDT, но лукап все равно стандартно отрабатывается по Енуму. Чего я мог упустить?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Можно сделать lookup по полю типа Base Enum? Hidden DAX: Программирование 25 04.10.2017 13:06
Фильтр по enum kalex_a DAX: Программирование 5 03.09.2008 11:50
Как определить наименование Base Enum по его id? vasiliy DAX: Программирование 5 11.07.2005 19:52
Фильтр по enum-полю в select ArturK DAX: Программирование 18 30.03.2004 13:37
Фильтр по полю типа Enum, в котором чиловое значение? slava DAX: Программирование 1 08.05.2002 10:26
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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