24.09.2014, 20:00 | #21 |
Участник
|
Э... Может, я чего не понимаю, но разве названия фин.аналитик автоматически не появляются из EDT? Ну, стандартная форма LedgerJornalTable - закладки "Аналитика". Или что-то другое имеется в виду?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
24.09.2014, 21:35 | #22 |
Участник
|
|
|
24.09.2014, 22:29 | #23 |
Banned
|
Только сейчас въехал в то что хочет автор. Так как при корректном добавлении финансовой аналитики, она прекрасно автоматически распадается на элементы массива на формах.
А вот когда значение аналитики "111" а пользователь хочет человеческое наименование справа то да, это задача частая и популярная. Всегда ее решал на автомате и без проблем. Дополнительный контрол справа с дисплейным методом. В принципе эти "Value's name" контролы можно добавлять автоматически при каждом запуске формы. Реализуемо, но я такое делать никогда не буду в силу бизнес-модели работы и нелепости самой задумки. Интересно как часто добавляются финансовые аналитики Если часто то да можно сделать кнопку на форму - "Обновить контролы". Но это явно не так. Если же как учебно-абстрактная задача то действительно достаточно азартно. Но я бы просто уточнил что хочет пользователь и изменил дизайн решения начиная с cамого начала. Например tooltips, mouseOver, hotkeys или просто показ комбинированного имени "ID (NAME)" вместо ID аналитики (в этом случае надо думать о длине или о новом EDT на форме что тоже неэлегантно). Пойнт в том что если требуется сложное решение то значит надо менять дизайн. Сложность решения на уровне кодирования это признак плохого дизайна или плохой идеи. Самое простое это тупо ручками добавлять контрол для "Value's name". Не так часто это и случится. Но безусловно задача интересная, не могу этого не признать - просто я такие себе позволить просто не могу В порядке бреда. Вариант 1 EDT akaDimensionName. Добавить массив контролов "Value's name" на форму. Связь между контролами через одинаковый индекс в массивах. Вариант 2 Показ грида [ID, NAME] с таблицей финансовой аналитики и фильтром по данному значению. Вариант/Мысль? 3 Исходить из того у нас коллекция контролов в группе на форме и мы может их перебрать и что надо добавить. Declaimer: это все несерьезно однако. Последний раз редактировалось ax_mct; 24.09.2014 в 23:10. |
|
25.09.2014, 01:25 | #24 |
Banned
|
Нет. Дешевого и элегантного решения здесь нет. Исходя из того что система сама раскладывает Dimensions на контролы то тот же layout на форме дорого может обойтись если динамически работать. А если это "авто-раскладывание" убрать то тогда и смысл пропадает. Лезть же в процесс генерации контролов явно перебор.
Cамое лучшее со всех точек зрения это тупо ручками добавлять контролы для "Value's name". Или использовать подсказки. IMHO. Последний раз редактировалось ax_mct; 25.09.2014 в 01:31. |
|
25.09.2014, 01:39 | #25 |
Дмитрий Ерин
|
В порядке страдания ерундой
1. Создаем EDT DimDescription (массив той же размерности, что и Dimension). 2. Делаем временную таблицу TmpDimDescription с единственным полем DimDescription (EDT из п.1), входящим в единственную группу DimDescription. 3. Добавляем примерно такой метод на эту таблицу: X++: void initFromCommon(Common _common) { int idx; FieldId dimFieldId; ; for (idx = 1; idx <= dimof(this.dimDescription); idx++) { dimFieldId = fieldId2Ext (fieldname2id (_common.TableId, "Dimension"), idx); this.DimDescription[idx] = Dimensions::find (Dimensions::arrayIdx2Code (idx), _common.(dimFieldId)).Description; } } 5. На "главном" датасорсе (в котором собственно хранятся аналитики), перекрываем метод active(): X++: public int active() { int ret; ; ret = super(); TmpDimDescription.initFromCommon(this.cursor()); TmpDimDescription_ds.executeQuery(); return ret; }
__________________
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
25.09.2014, 02:40 | #26 |
Banned
|
Если только режим чтения то такое решение (список полного описания) имеет право на короткую жизнь.
А если это обычный режим где возможно редактирование? Тогда только контрол к контролу. Но чтобы не было проблем с layout на форме надо парные контролы (ID и новое NAME) класть в подгруппу. И такая необходимость убивает всю задумку элегантности "автоматизации" процесса. В принципе значения финансовых аналитик должны быть понятны сами по себе. И если есть такая проблема как нечеловеческие цифры или непонятная нумерация то на мой взгляд проблему надо решать более глобально и системно чем идентификация контрола в методе. |
|
25.09.2014, 05:24 | #27 |
Участник
|
Пардон, за невнятное объяснение. Терминологию видимо не ту использовал)
надо будет еще например modified перекрыть для обновления описаний на случай правки аналитик, что возвращает к задаче "забыть"при росте аналитик. Ну и способ с перекрытием active у нас есть - без временной таблицы, но тоже рабочий. Но для него есть не достаток про который я уже указывал: Цитата:
Цитата:
Ну в общем тренд ответов я примерно уловил). Мысль с модификацией оставляю в покое.. |
|
25.09.2014, 10:32 | #28 |
Талантливый разгвоздяй
|
Можете уточнить версию системы? Это ведь не AX 2012? В ней такая задача уже решена уже в стандарте - рядом с кодом финаналитики выводится и наименование.
Последний раз редактировалось Kabardian; 25.09.2014 в 11:06. |
|
|
За это сообщение автора поблагодарили: Perc (1). |
25.09.2014, 11:25 | #29 |
Участник
|
Цитата:
Тогда действительно.. что это я.. стимул улучшений устаревающих версий потерян..) |
|
25.09.2014, 12:06 | #30 |
Талантливый разгвоздяй
|
..и появился стимул перехода на новую ;-)
|
|
25.09.2014, 12:23 | #31 |
Участник
|
|
|
25.09.2014, 13:24 | #32 |
Участник
|
Цитата:
X++: // Метод на той таблице, где поле Dimension //BP Deviation documented display DimDescription getDimDescription() { DimDescription dimDescription; int idx; FieldId dimFieldId; ; for (idx = 1; idx <= dimof(this.dimDescription); idx++) { dimDescription[idx] = Dimensions::find(Dimensions::arrayIdx2Code(idx), this.Dimension[idx]).Description; } return dimDescription; } Другой вариант - это создать поле на основе DimDescription в той же таблице, где и Dimension. Собственно, стандартный способ решения, когда требуется код и его расшифровка. Код клиента - Название клиента, Код номенклатуры - Название номенклатуры и т.д., и т.п. Ну, а то, что после изменения кода надо менять (обновлять) расшифровку, так опять же, стандартное поведение. Для Dimension можно "не мелочиться" и обновлять все аналитики при изменении одного. Тогда не теряется универсальность.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
25.09.2014, 13:41 | #33 |
Дмитрий Ерин
|
Почему-то такие финты не срабатывают, по крайней мере на AX2009. То есть, когда мы перетаскиваем в дизайн формы группу с полем-массивом - в этой группе автоматом создается нужное кол-во контролов, корректно привязанных к элементам массива. А вот если в группе - дисплей метод, возвращающий тот же EDT (массив) - то фигушки - контрол создается всего один и отображается он пустым. Я даже пробовал руками добавлять несколько контролов и играть свойством ArrayIndex - результат тот же. Может быть что-то упускаю?
|
|
25.09.2014, 14:30 | #34 |
Участник
|
Цитата:
Сообщение от Ruff
Почему-то такие финты не срабатывают, по крайней мере на AX2009. То есть, когда мы перетаскиваем в дизайн формы группу с полем-массивом - в этой группе автоматом создается нужное кол-во контролов, корректно привязанных к элементам массива. А вот если в группе - дисплей метод, возвращающий тот же EDT (массив) - то фигушки - контрол создается всего один и отображается он пустым. Я даже пробовал руками добавлять несколько контролов и играть свойством ArrayIndex - результат тот же. Может быть что-то упускаю?
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|