| 
			
			 | 
		#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();
                } | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может, вот это поможет?: Просьба по поводу ТТН
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Axapta Retail User 
		
			
	 | 
	
	
	
		
		
		
		 
			
			К сожалению, не помогло. нужно поправить метод fetch. Сам дизайн я уже нарисовал) но все равно, спасибо.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не понял что именно меняется динамически высота строк или их количетсво. А вы точно пользуетесь ProgrammableSection. Что-то я не помню, чтоб она не правильно переносила. С ней newPage не нужен.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Axapta Retail User 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
2) при отрисовке строки проверка на высоту строки, если текс не умещается - он переносится, таким образом высота строки увеличивается. 3) А строки в дизайне находятся в Body: LinesBody  | 
| 
	
 | 
| 
			
			 | 
		#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(); } }  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Axapta Retail User 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вы похоже пользуетесь AutoDesignSpec (генератором), а перекрываете fetch. Может стоили бы делать через Generarted Design. К сожаленью никогда AutoDesignSpec не пользовался, мож там есть такая багофича. С границами играться не рекомендую  в Аксапте отчёты работают плохо, там можете много граблей собрать.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#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();
                } | 
| 
	
 |