26.07.2007, 13:21 | #1 |
Axapta Retail User
|
Отчеты. Динамические секции
Всем добрый день. Меня зовут Сергей. Прошу помощи у более опытных, чем я, разработчиков.
У меня проблема с отчетами( Помогите, пожалуйста. Я создал отчет (товарно-транспортная накладная) по подобию торг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 |
Moderator
|
Может, вот это поможет?: Просьба по поводу ТТН
|
|
26.07.2007, 15:03 | #3 |
Axapta Retail User
|
К сожалению, не помогло. нужно поправить метод fetch. Сам дизайн я уже нарисовал) но все равно, спасибо.
|
|
26.07.2007, 15:18 | #4 |
Участник
|
Не понял что именно меняется динамически высота строк или их количетсво. А вы точно пользуетесь ProgrammableSection. Что-то я не помню, чтоб она не правильно переносила. С ней newPage не нужен.
|
|
26.07.2007, 15:23 | #5 |
Axapta Retail User
|
Цитата:
2) при отрисовке строки проверка на высоту строки, если текс не умещается - он переносится, таким образом высота строки увеличивается. 3) А строки в дизайне находятся в Body: LinesBody |
|
26.07.2007, 15:25 | #6 |
NavAx
|
Не совсем понял, что надо, но вот пример кода (вам надо немного переделать) из отчета 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 |
Axapta Retail User
|
|
|
26.07.2007, 15:49 | #8 |
Участник
|
Вы похоже пользуетесь AutoDesignSpec (генератором), а перекрываете fetch. Может стоили бы делать через Generarted Design. К сожаленью никогда AutoDesignSpec не пользовался, мож там есть такая багофича. С границами играться не рекомендую в Аксапте отчёты работают плохо, там можете много граблей собрать.
|
|
26.07.2007, 15:52 | #9 |
Участник
|
|
|
26.07.2007, 16:01 | #10 |
Axapta Retail User
|
Цитата:
Сообщение от miklenew
Вы похоже пользуетесь AutoDesignSpec (генератором), а перекрываете fetch. Может стоили бы делать через Generarted Design. К сожаленью никогда AutoDesignSpec не пользовался, мож там есть такая багофича. С границами играться не рекомендую в Аксапте отчёты работают плохо, там можете много граблей собрать.
Вот код на сейчас - на данном этапе печатаются строчки до конца листа...и дальше не переносятся вообще (( т.е. аксапта обрывает список на одном листе 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); Последний раз редактировалось xenikk; 26.07.2007 в 16:06. |
|
26.07.2007, 16:08 | #11 |
Участник
|
|
|
26.07.2007, 16:44 | #12 |
Axapta Retail User
|
Всем спасибо)) Все заработало))
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(); } |
|