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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2006, 10:44   #1  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Динамические контролы в отчете основанные на display-методе
Можно ли в Аксапте создавать динамические контролы в отчете основанные на display-методе (не на поле таблицы)?

Суть проблемы: Я узнаю сколько столбцов будет в отчете уже во время выполнения (на основе выбора пользователя в диалоговом окне). Следовательно я добавляю необходимое мне количество столбцов уже во время выполнения (в методе init() отчета). Если контрол основан на поле таблицы, то все просто:

control = element.design().sectionName(#Detailed).addRealControl(tableId, fieldId);

Если же контрол основан на display методе, который определен в отчете?

Я пытаюсь делать так:
control = element.design().sectionName(#Detailed).addRealControl(tableId, fieldId);
control.dataMethod("custBalanceAge");
Но все равно отчет пытается отразить значение в поле таблицы.
Старый 18.09.2006, 10:50   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
А не проще не создавать динамически, а скрывать динамически? Или это невозможно в данной задаче?
Старый 18.09.2006, 10:55   #3  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
addDisplayControl()

Аналитические отчеты с переменным количеством столбцов? Лучше забейте и используйте средство, которое для этого и предназнечено - OLAP
За это сообщение автора поблагодарили: petr (1).
Старый 18.09.2006, 10:57   #4  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
И еще, там есть метод addRealDisplayControl(). Не поможет? Думаю поможет. Но ИМХО лучше скрывать поля, чем добавлять.
За это сообщение автора поблагодарили: petr (1).
Старый 18.09.2006, 11:02   #5  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
To oip.
Именно необходимо создавать динамически, потому что скрывать можно когда есть checkBox и поле либо отображается, либо нет (я такое часто использую). В моей же задаче я не знаю заранее даже примерное количесто, оно зависит от того на сколько подпериодов большой период (м.б. на 2 или на 10). Пользователь выбирает в диалоге количество подпериодов (может поставить любое количество) и на каждый необходимо создать свой столбец.

To db.
Про addDisplayControl(). Сейчас попробую.
Про OLAP. В принципе согласен, хотя в нашей задаче может такой подход и не подойдет. И вообще я пока с OLAP не сильно разобрался, т.ч. приходиться пользоваться стандартными средствами.
Старый 18.09.2006, 11:05   #6  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
To All.
Да. Да!!! Есть такой метод addRealDisplayControl().
Сейчас проверю, как все заработает и пойду к окулисту.
Старый 18.09.2006, 11:08   #7  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от petr Посмотреть сообщение
В моей же задаче я не знаю заранее даже примерное количесто, оно зависит от того на сколько подпериодов большой период (м.б. на 2 или на 10). Пользователь выбирает в диалоге количество подпериодов (может поставить любое количество) и на каждый необходимо создать свой столбец.
Может быть тогда лучше Excel?
Старый 18.09.2006, 11:25   #8  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от petr Посмотреть сообщение
выбирает в диалоге количество подпериодов (может поставить любое количество) и на каждый необходимо создать свой столбец.
OLAP в чистом виде
Старый 18.09.2006, 11:39   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от petr Посмотреть сообщение
...оно зависит от того на сколько подпериодов большой период (м.б. на 2 или на 10). Пользователь выбирает в диалоге количество подпериодов (может поставить любое количество)...
Я опять со своим брюзжанием.
Но я КАТЕГОРИЧЕСКИ против такого программисткого подхода к решаемым задачам.

Пользователь НЕ МОЖЕТ поставить ЛЮБОЕ количество.
Колчество чего бы то ни было более-менее полезного для пользователя ОГРАНИЧЕНО рамками восприятия этого пользователя.

Как проверить утверждение petr?
Есть два проверочных вопроса по сути:
1. Может ли пользователь поставить 1млн. "подпериодов"
2. Может ли пользователь поставить число <1?

Есть еще один проверочный вопрос по форме:
3. Сколько столбцов может уместится на странице, чтобы пользователь еще мог прочитать информацию? (Должен ли пользователь склеивать несколько листов?)

И сразу выясняется, что утверждение petr не является истинным.

Мало того, готов утверждать, что:
Pert просто не разобрался в задаче И не знает что именно надо пользователю от этого отчета. Вместо того, чтобы разобраться petr переносит проблему на пользователя - на тебе, гад пользователь, 30...50...60.. столбцов, разбирайся.

Уважаемые программисты, пожалуйста, не используйте такой принцип!
Уважаемые программисты, пожалуйста, разбирайтесь в задаче.


Что касается вопроса petr...
Petr - скрывать намного легче, чем добавлять. Я бы остановился на том, что бы скрывать.
Однако, если вы хотите именно добавлять, то разберитесь как формируются финансовые отчеты (они формируются именно динамически).
О финансовых отчетах здесь http://axapta.mazzy.ru/lib/ledger_report/
addDisplayControl() - это только начало. Вам придется управлять заголовком, шириной, точностью, форматом вывода, итогами и прочими свойствами (а могли бы просто задать из в свойствах AOT)
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: db (2).
Старый 18.09.2006, 11:45   #10  
kvg6 is offline
kvg6
program-ёр
Аватар для kvg6
1C
 
160 / 81 (3) ++++
Регистрация: 27.09.2005
Адрес: Moscow forever
Цитата:
Сообщение от db Посмотреть сообщение
OLAP в чистом виде
А если расчетные поля из 2-х и более таблиц, то лучше грузить в Excel
__________________
Становись лучше
Старый 18.09.2006, 11:56   #11  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Ok. Предлагаю вашему вниманию полную постановку задачи. Может действительно я избрал не лучший подход к ее решению.

Есть отчеты в "Расчетах с поставщиками" и в "Расчетах с клиентами" которые называются в меню "Список распределения по срокам". (Путь РП/РК - Отчеты - Статус). Они выводят сальдо по клиенту в разрезе периодов, когда проводка сформировалось или когда ее надо оплатить. Периодов жестко 6. И они все одинаковой длины (которую можно изменять).
Я же хочу сделать аналогичный отчет, в котором количество периодов и их продолжительность будет настраиваться в определенной таблице, называемой "График". Т.е. бухгалтер настраивает себе несколько удобных графиков: например 2 интервала: текущий год и до текущего года, либо 4 интервала: месяц назад, два месяца, три месяца и больше чем три месяца. В диалоге отчета бухгалтер выбирает по какому графику от будет анализировать задолженность клиента или поставщику. Понятно, что бухгалтер знает, что если он задаст много интервалов для графика - то отчет отмаштабируется и будет нечитаемым.
Но я не хочу ограничивать бухгалтера максимальным колиеством периодов. В принципе если предложенный oip метод хорошо сработает (а я думаю, что так и будет) я получаю хороший отчет.

По-моему я нашел лучший выход, но если кто-то предложит более грамотное решение, я с удоволтьствием его выслушаю (прочитаю)

Спасибо всем откликнувшимся.
Старый 18.09.2006, 12:02   #12  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Все получилось. addRealDisplayControl() работает замечательно.
Старый 18.09.2006, 12:03   #13  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Рекомендую посмотреть на:
\Classes\RTax25Report_RegisterTrans\buildReportDesign
\Reports\RTax25RegisterTrans
За это сообщение автора поблагодарили: petr (1).
Старый 18.09.2006, 12:05   #14  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Насколько я помню, этот отчет использует табличку TmpAccountSum. Туда тоже "динамически" будете поля добавлять? Или по-другому будете все заполнять?

PS В такой постановке задачи я сильно сомневаюсь в необходимости программного добавления контролов. Никакому бухгалтеру, ИМХО, не потребуется больше, например, 6 периодов. 6 мало? Ну сделайте 10. Или 12. Опять мало? Думаете бухгалтер больше захочет?

Последний раз редактировалось oip; 18.09.2006 в 12:17.
Старый 18.09.2006, 12:22   #15  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
To EVGL.
Да у меня теперь подобное и получается. Только у меня все проще, т.к. все типы Real и соответственно не надо сильно мудрить.
Вообще то вся проблема в том, что я забыл про метод
addRealDisplayControl("custBalanceAge"),
а пытался использовать связку:
control = element.design().sectionName(#Detailed).addRealControl(tableId, fieldId);
control.dataMethod("custBalanceAge");
Хотя раньше точно помню, что уже использовал. Просто забыл и попал в тупик.
Старый 18.09.2006, 12:23   #16  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
А из-за этого разгорелась такая активная дискуссия.
Старый 18.09.2006, 12:47   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от petr Посмотреть сообщение
Вообще то вся проблема в том, что я забыл про метод ********** а пытался использовать***********
И я об этом.
ДОБАВИТЬ можно различными способами.
При ДОБАВЛЕНИИ нужно учесть массу параметров.
Когда программист ДОБАВЛЯЕТ что-либо динамически, то, как правило, он решает НЕ ИЗНАЧАЛЬНО поставленную задачу.
В нашей области практически не бывает задач в которых присутствует формулировка "произвольное число".

Вам предлагается другая парадигма:
1. Выясните максимально возможное значчение.
2. ЕСЛИ количество столбцов меньше 30 ТОГДА
2.1. создайте эти столбцы руками в отчете, установите все необходимые свойства в AOT
2.2. из кода только скрывайте ненужное (и может быть меняйте названия колонок)
3. ИНАЧЕ
3.1. Ваши столбцы не уместятся на бумаге. Попробуйте решить задачу по-другому
4. КОНЕЦЕСЛИ
__________________
полезное на axForum, github, vk, coub.
Старый 18.09.2006, 13:23   #18  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
To Mazzy и oip

Вообщее можно ограничиться 7 периодами. Вообще задача сейчас стоит так:
1-ый период: менее месяцы
2-ой период: от 1 мес. до 2-х
3-ый период: от 2-х до 3-х.
4-ый период: от 3-х до полугода
5-ый период: от полугода до года
6-ой период: от года до 2-х
7-ой период: более 2-х лет.
Итак можно даже создать таблицу с семью полями, добавить их статически в отчет, зашить в код интервалы для каждого периода и отчет полностью удовлетворяет бухгалтерию.

Но!
1. А если им захочется иметь отчет с периодами 1 года, 2 года и более (т.е. более общий)?
2. А если прийдет новый бухгалтер или фин. директор, который сдвинет границы периодов?
3. А если этот отчет использовать на другом предприятии, у фин. директор которого использует другие рамки периодов?

Для того, чтобы решить эти 3 вопроса, т.е. создать отчет, который полностью настраивается их интерфейса программы и без дополнительного программирование дорабатывается под любой возможное предприятие и желание бухг. (или фин. директора), то необходимо:
1. Сделать настраиваемый график (спец. таблицы, хранящая границы периодов)
2. Сделать в данной таблице возможность задания нескольких графиков с произвольным числом периодов
3. В диалоге отчета дать возможность пользователю выбирать по какому графику разбивать задолженность клиента (дебиторку) (или поставщика)
4. В отчете использовать только стандартные Аксаптовские методы, чтобы в случае превышения возможной ширины отчет автоматически масштабировался и умещался на листе.

Вот для всего этого я и использую описаную выше технологию.
Просто есть желание онаписать отчет в соответствии со всеми требованиями BP, в которых написано, что отчет должен быть написан в отрыве от конкретного пользователя и работать на любой инсталяции.
Старый 18.09.2006, 13:33   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
как скажете.
__________________
полезное на axForum, github, vk, coub.
Старый 18.09.2006, 15:29   #20  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
na schet - ispolzovat ili net takoj podhod (addControl) - to u menja pohozee bilo delo - raspechatka tarifnogo plana (record = {period,ref,price} ).. taze gruppirofka po ref-group... to est tot zhe samij OLAP.. no bilo legche samomu dobovljat kontroli na otchet - ne tak to eto i tjazhelo...

PS: ja za metod "prosche i legche", a ne "tankom po muravjam"
Теги
display метод, olap, как правильно, контрол, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
получить контрол в display методе Omeo DAX: Программирование 1 23.01.2009 11:56
axaptapedia: Display method Blog bot DAX Blogs 0 29.08.2007 16:30
Можно ли в display методе узнать для какого FormControl'а этот метод вызван? Dudnik Anton DAX: Программирование 3 01.02.2006 12:22
Отчет: перекрытие fetch() убивает буфер записи в display-методе Zabr DAX: Программирование 1 18.02.2005 18:45
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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