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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.06.2013, 14:30   #1  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Отчет с динамич высотой контролов
Может, кому сэкономит время, тк я немного "поразвлекалась" , пока нашла решение.
Задача:
Есть отчет, в котором один из контролов имеет дин высоту. Отчет-сетка т.е выглядит как таблица с разными по высоте строками , высота строки определяется высотой контрола с дин высотой. Графика для отрисовки таблицы создается с помощью Box+ vertical Lines
Проблема:
Для того, чтобы высота строк менялась динамически, и соответствеенно изменялась высота Box, и растягивались линии, логично выставить Height=ColumnHeight у контролов. Все работает, но я так и не поняла , что определяет ColumnHeight, в результате высота строк, что бы я ни делала - выше высоты контролов с тексом приблизительно на 1.5 символа (см описание проблемы тут) . Пользователи не оч рады, тк им не понятно, почему строки в 2 раза выше, чем должны были бы по логике вещей быть("можно было бы в 2 раза больше данных на листе уместить!")
Решение: (основано на замечательном предложении Dronas)
1) Ставим DynHeight на контроле, кот изменяет высоту
2) Всем shapes устанавливаем ColumnHeight
3) На секции указываем высоту 0mm
4) в executeSection пишем:
MySection.height100mm(MyDynHeightControl.heightOfWordWrappedString100mm(StringValue_In_MyDynHeightControl) + 200);
PS: тут я накинула к высоте 200, чтобы текст не был оч близко к границе секции.

5) У всех остальных контролов ставим Height = Auto ( + можно TopMargin = 1mm, BottomMargin=1mm,чтобы контролы не были впритык к границе секции)

Итого у нас в руках замечательный инструмент: используем достоинства ColumnHeight - все контролы замечательно растягиваются и создают нужную сетку, и нивелируем недостаток - высоту секции мы контролируем сами.

Ax2009 RU2

Последний раз редактировалось IKA; 28.06.2013 в 14:35.
За это сообщение автора поблагодарили: gl00mie (3).
Старый 28.06.2013, 15:39   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
См. также \Reports\SalesPurchInvoice_RU\Methods\prepareDynamicSection
Старый 28.02.2014, 10:26   #3  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Предлагаю свое решение
Вот мое решение (для MS DAX 2009)

1. Ставим во всех контролах Section Body, которая у нас является строкой height = auto. DynamicHeight никому не ставим
2. У самой Section Body height также ставим auto
3. В перекрытом методе executeSection пишем такой код

X++:
public void executeSection()
{
    Integer offset = 200;     //смещение, если оно нужно

    //Например: из двух полей, у которых может быть переменная длина выбираем то, которое наибольшее

    Integer Height1 = PlanTable.height100mm(GetCrew.heightOfWordWrappedString100mm(Schedule.GetCrew()));
    Integer Height2 = PlanTable.height100mm(GetRoute.heightOfWordWrappedString100mm(Schedule.GetRoute()));
    Integer resultHeight = (Height1 > Height2? Height1 :Height2) + offset;
    Integer i = PlanTable.controlCount();

    //Перебираем контролы и меняем им высоту
    while (i)
    {
        PlanTable.controlNo(i).height100mm(resultHeight);
        i--;
    }

    super();
}
Работает как надо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Итератор с поддержкой методов обратного вызова для обработки контролов на форме gl00mie DAX: Программирование 18 06.08.2013 22:16
Откуда берется Column Height у контролов отчета? IKA DAX: Программирование 9 04.07.2013 11:08
Отчет по сроку годности ena_ax DAX: Функционал 1 20.10.2009 13:04
Вписать динамический отчет в страницу (DAX 4.0) Qaz Qwerty DAX: Программирование 2 17.07.2008 05:46
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:55.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.