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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2007, 13:21   #1  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
Отчеты. Динамические секции
Всем добрый день. Меня зовут Сергей. Прошу помощи у более опытных, чем я, разработчиков.
У меня проблема с отчетами( Помогите, пожалуйста. Я создал отчет (товарно-транспортная накладная) по подобию торг12. Но появилась проблема, которую никак не могу решить. У меня после заголовка вставляется секция в которой высота строк динамически изменяется, т.е. кол-во строк может варьироваться от 1ой и до бесконечности. Однако, из-за этого секция печатается некрасиво: перенос на другую страницу делается, но на первом листе секция рвется в прямом смысле этого слова.
На форуме нашел похожую тему(Печать отчета на несколько страниц), однако не пойму как быть с переменными pageHeight и checkHeight.... Я не понял как вычисляется element.currentYmm100()/145 и где взять checkHeight. pageHeight как вы можете увидеть я взял из метода printerPageHeight.

X++:
                while
                    select
                        tmpLines order by itemName
                {

                        lineNum ++;
                        Lines.data(tmpLines);
                        element.send(tmpLines);

                pageHeight = element.printerPageHeight();
                pageHeight -= element.currentYmm100()/145;
                if((pageHeight) < CheckHeight)
                    element.newPage();
                }
Так вот хочу сделать чтобы осуществлялась проверка при отрисовки строк, т.е. если осталось мало места на листе, то остальные строки переносились на другую страницу. Очень надеюсь на вашу помощь
Старый 26.07.2007, 14:48   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Может, вот это поможет?: Просьба по поводу ТТН
Старый 26.07.2007, 15:03   #3  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
К сожалению, не помогло. нужно поправить метод fetch. Сам дизайн я уже нарисовал) но все равно, спасибо.
Старый 26.07.2007, 15:18   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от xenikk Посмотреть сообщение
У меня после заголовка вставляется секция в которой высота строк динамически изменяется, т.е. кол-во строк может варьироваться от 1ой и до бесконечности.
Не понял что именно меняется динамически высота строк или их количетсво. А вы точно пользуетесь ProgrammableSection. Что-то я не помню, чтоб она не правильно переносила. С ней newPage не нужен.
Старый 26.07.2007, 15:23   #5  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
Цитата:
Сообщение от miklenew Посмотреть сообщение
Не понял что именно меняется динамически высота строк или их количетсво. А вы точно пользуетесь ProgrammableSection. Что-то я не помню, чтоб она не правильно переносила. С ней newPage не нужен.
1) В зависимости от документа, высчитывается количество строк
2) при отрисовке строки проверка на высоту строки, если текс не умещается - он переносится, таким образом высота строки увеличивается.
3) А строки в дизайне находятся в Body: LinesBody
Старый 26.07.2007, 15:25   #6  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Не совсем понял, что надо, но вот пример кода (вам надо немного переделать) из отчета EmplAdvance_RU (Ax3)
X++:
public void executeSection()
{
    ReportDesign        design      = element.design("Design");
    real                pageHeight  = design.printerPageHeight() / 100 -
                                      design.bottomMarginValue() -
                                      design.topMarginValue();
    real                restHeight;
    ReportRealControl   rrc1        = element.design().sectionName('ProgrammableSection_4b').
                                                       controlName('Control_13');
    ReportRealControl   rrc2        = element.design().sectionName('ProgrammableSection_4b').
                                                       controlName('Control_14');

    restHeight = pageHeight - element.currentYmm100()/100;

    if (restHeight / pageHeight <= 0.35)
    {
       rrc1.visible(false);
       rrc2.visible(false);
    }

    super();

    if (! rrc1.visible())
    {
        element.newPage();
    }
}
Старый 26.07.2007, 15:42   #7  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
Цитата:
Сообщение от raz Посмотреть сообщение
X++:
    ReportDesign        design      = element.design("Design");

                                      design.bottomMarginValue() -
                                      design.topMarginValue();

не понял что делают bottomMarginValue и topMarginValue - проверка границ?
Старый 26.07.2007, 15:49   #8  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от xenikk Посмотреть сообщение
3) А строки в дизайне находятся в Body: LinesBody
Вы похоже пользуетесь AutoDesignSpec (генератором), а перекрываете fetch. Может стоили бы делать через Generarted Design. К сожаленью никогда AutoDesignSpec не пользовался, мож там есть такая багофича. С границами играться не рекомендую в Аксапте отчёты работают плохо, там можете много граблей собрать.
Старый 26.07.2007, 15:52   #9  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от xenikk Посмотреть сообщение
не понял что делают bottomMarginValue и topMarginValue - проверка границ?
Это похоже отступ с верху и с низу. Зазор.
Старый 26.07.2007, 16:01   #10  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
Цитата:
Сообщение от miklenew Посмотреть сообщение
Вы похоже пользуетесь AutoDesignSpec (генератором), а перекрываете fetch. Может стоили бы делать через Generarted Design. К сожаленью никогда AutoDesignSpec не пользовался, мож там есть такая багофича. С границами играться не рекомендую в Аксапте отчёты работают плохо, там можете много граблей собрать.
Делаю как раз в Generarted Design. Методы перекрыты class declaration, fetch, init.

Вот код на сейчас - на данном этапе печатаются строчки до конца листа...и дальше не переносятся вообще (( т.е. аксапта обрывает список на одном листе
X++:
                select tmpHeader;


                Header. data(tmpHeader);
                element.send(tmpHeader);
                //шапка отчета

                this.execute(7);
                //шапка таблицы
                while
                    select
                        tmpLines order by itemName 
                //динамические строки
                {

                        lineNum ++;
                        Lines.data(tmpLines);
                        element.send(tmpLines);

                pageHeight = element.printerPageHeight();
                pageHeight -= element.currentYmm100()/145;

                if((pageHeight) <= 0.35)
                    element.newPage();
                //здесь я пытаюсь сделать проверку на границы листа, однако не получается(
                }
                //далее печать остальных секций, с ними ошибок не возникло
                element.newPage();
                this.execute(2);
                element.newPage();
                this.execute(8);
AXAPTA отображает отчет хорошо, а печатается из нее не очень, как я уже писал выше обрывает последнюю строчку.

Последний раз редактировалось xenikk; 26.07.2007 в 16:06.
Старый 26.07.2007, 16:08   #11  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от xenikk Посмотреть сообщение
Делаю как раз в Generarted Design.
Странно в нём секции body у меня вообще нет. А чё не хотите, через programmablesection сделать. Пробежали по вашей tmp таблице вызвали execute этой секции. Я покрайней мере таких глюков в ней не находил.
Старый 26.07.2007, 16:44   #12  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
Всем спасибо)) Все заработало))
X++:
pageHeight = element.design().printerPageHeight();
X++:
             while
                    select
                        tmpLines order by itemName
                {

                        lineNum ++;
                        Lines.data(tmpLines);
                        element.send(tmpLines);

                restHeight = element.currentYmm100();

                if((pageHeight - restHeight) < 1000)
                    element.newPage();
                }
Отдельное спасибо моему коллеге)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ширина секции в отчете symba DAX: Программирование 2 06.06.2008 17:46
Фин отчеты: может ли работать по нескольким компаниям сразу Arahnid DAX: Функционал 3 30.05.2007 17:46
Финансовые отчеты. Отбор счетов. ax_f DAX: Функционал 3 15.12.2005 20:34
Отчеты по клиентам Anastasiya DAX: Функционал 2 19.03.2005 12:11
Авансовые отчеты - Копировать из источников mpa DAX: Функционал 11 05.04.2004 09:42

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

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

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