|  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();
                } | 
|  |