| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Работа с данными в отчете
			 
			
			Добрый день коллеги, 
		
		
		
		
		
		
		
	помогите новичку Столкнулся со следующей задачей - в отчете 1.делаю группировку по оределенному полю 2.собираю сумму 2 полей qbds.addSelectionField(fieldNum(......,PassengersTotalArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(......,PassengersTotalDeparture),SelectionField::Sum); как сделать,если во всех 2 колонках результат нули ету строку не показывать например: 122 45 15 0 0 0 - не показывать 0 12 в Oracle сделал бы так: select from where... having nul(sum(PassengersTotalArrival))+nul(sum(PassengersTotalDeparture)>0 Спасибо  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 MCP 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Внутри цикла queryRun.Next() можно проверять значение этих полей (поставить условие). Вычисляемые поля в запросах аксапты пока не работают. Т.е. Можно использовать агрегатные функции, но сумму 2-х полей вычислить запросом не получится.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А если метод fetch по каким либо причинам не перекрыт (используется стандартный обход заранее настроенного query), то проверку можно выполнить в методе send отчёта или даже непосредственно в executeSection секции.  
		
		
		
		
		
		
		
	Одно можно сказать абсолютно точно, без вложенной проверки не обойтись.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			cоздал дисплейный метод 
		
		
		
		
		
		
		
	display int getPassengersTotal() { return this.FlxNumPassengersTotalArrival + this.FlxNumPassengersTotalDeparture; } пытаюсь обработать в фильтре, но не получается qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalDeparture),SelectionField::Sum); qbds.addRange(element....????? должно быть больше нуля  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Фильтром такого ограничение добиться нельзя. Нужно внутри цикла проверять if'ом.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			не подскажите, как реализовать циклом, 
		
		
		
		
		
		
		
	чтобы два поля не равнялись нулю пытаюсь qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if }  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
![]() X++: qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (PortJournal.FlxNumPassengersTotalArrival == 0 && PortJournal.FlxNumPassengersTotalDeparture == 0) continue; // ... } Последний раз редактировалось S.Kuskov; 31.03.2011 в 11:27.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			чего то не пойму, у меня  
		
		
		
		
		
		
		
	datasourse FlxPortJournal_1 cтавлю проверку, фильтрую ни чего не происходит X++: qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (FlxPortJournal_1.FlxNumPassengersTotalArrival == !0 && FlxPortJournal_1.FlxNumPassengersTotalDeparture == !0) continue; qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalDeparture),SelectionField::Sum); }  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Зачем вы искозили мой пример? Зачем вы поставили отрицание перед нулём? Далее, датасурс может иметь любое имя. Доступ к курсору вы получаете командой  
		
		
		
		
		
		
		
		
			X++: portJournal = qr.get(tableNum(FlxPortJournal));И ещё ваш addSelectionField должен настраиваться один раз перед циклом, а не внутри него. Ведь это просто команда запросу применить агрегирующую функцию Sum к указаным полям Последний раз редактировалось S.Kuskov; 31.03.2011 в 11:22.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			может не работает что у меня еще одно querry работает 
		
		
		
		
		
		
		
	щас у меня так void getRangeValues() { QueryRun qr; FlxPortJournal portJournal; QueryBuildDataSource qbds = this.queryRun().query().dataSourceTable(tableNum(FlxPortJournal)); ; if (this.queryRun()) { qbds = this.queryRun().query().dataSourceTable(tableNum(FlxPortJournal)); } else { qbds = this.query().dataSourceTable(tableNum(FlxPortJournal)); } qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalDeparture),SelectionField::Sum); qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (portJournal.FlxNumPassengersTotalArrival == 0 && portJournal.FlxNumPassengersTotalDeparture == 0) continue; }  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			вы не указали поля по котрым должна идти группировка 
		
		
		
		
		
		
		
	X++: qbds.addSortField(FieldNum(FlxPortJournal,ShipsType));
qbds.orderMode(OrderMode::GroupBy);P.S.: Какую литературу по аксапте вы читали?  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			да она есть у меня просто забыл вынести 
		
		
		
		
		
		
		
	и так в общем код void getRangeValues() { QueryRun qr; FlxPortJournal portJournal; QueryBuildDataSource qbds = this.queryRun().query().dataSourceTable(tableNum(FlxPortJournal)); ; if (this.queryRun()) { qbds = this.queryRun().query().dataSourceTable(tableNum(FlxPortJournal)); } else { qbds = this.query().dataSourceTable(tableNum(FlxPortJournal)); } qbds.addSortField(FieldNum(FlxPortJournal,ShipsType)); qbds.orderMode(OrderMode::GroupBy); qbds.addSelectionField(fieldNum (FlxPortJournal,FlxNumPassengersTotalArrival),SelectionField::Sum); qbds.addSelectionField(fieldNum(FlxPortJournal,FlxNumPassengersTotalDeparture),SelectionField::Sum); qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (portJournal.FlxNumPassengersTotalArrival == 0 && portJournal.FlxNumPassengersTotalDeparture == 0) continue; } } не судите строго, сейчас изучаю Inside Microsoft Dynamics AX 4.0  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Внутри цикла, после того как убедились что обе суммы не пустые, что делаете?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			похоже ничего, 
		
		
		
		
		
		
		
	но думаю надо запустить внутри цикла после проверки querry c настроенным фильтром, while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (portJournal.FlxNumPassengersTotalArrival == 0 && portJournal.FlxNumPassengersTotalDeparture == 0) continue; this.query()................... } this.query().  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Что по вашему должен делать метод "void getRangeValues()", который вы пишите? В какой момент и откуда он вызыается?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			это метод служит для формирования данных (настройка фильтров) 
		
		
		
		
		
		
		
	в дальнейшем вызываю в fetch-e this.getRangeValues(); public boolean fetch() { boolean ret; QueryBuildDataSource qbds; .......... this.getRangeValues(); ret = super(); ....... return ret; }  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Стандартное назначение метода fetch - это вывод данных запроса в отчёт. Т.е. если метод fetch не перекрывать, то в отчёт автоматически выведуться все строки запроса. Если нужно управлять выводом данных (например заблокировать вывод некоторых строк), то нужно перекрыть метод fetch и организовать самостоятельный обход запроса и вручную посылать нужные строки запроса в отчёт. Делается это при помощи методов element.send() или element.execute, в зависимости от используемых вами типов секций отчёта
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			эта мне нужно писать select в цикле с условием 
		
		
		
		
		
		
		
	и отправлять qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (portJournal.FlxNumPassengersTotalArrival == !0 && portJournal.FlxNumPassengersTotalDeparture == !0) continue; Select...... element.send(portJournal); }  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		  Что-то у вас полнейший сумбур в голове.Никакого дополнительного select'а не нужно. У вас уже есть QueryRun. QueryRun - это такой способ пробежаться по запросу Query, структуру, которого вы заблоговременно сконструировали всякими там addRange, addSortField, addSelectionField и т.д. т.е цикл "while (qr.next()) {}" делает не что иное как перебирает записи сконструированного вами запроса. Строчка кода "portJournal = qr.get(tableNum(FlxPortJournal));" нужна для того чтобы получить текущую запись перебираемого запроса. "qr.next()" переходит на следующую строку. Итого: в send вам нужно отправить portJournal. Дополнительно ничего выбирать не нужно  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: kornix (1). | |
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ничего не понимаю, она у меня не удалила, а  
		
		
		
		
		
		
		
	добавела запись с двумя 0 qr = new QueryRun(queryRun.query()); while (qr.next()) { portJournal = qr.get(tableNum(FlxPortJournal)); if (portJournal.FlxNumPassengersTotalArrival == 0 && portJournal.FlxNumPassengersTotalDeparture == 0) element.send(portJournal); }  | 
| 
	
 | 
| 
	
	 | 
	
		
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| DAX2009 EP: Работа с данными в C# | 3 | |||
| Данные в отчете | 1 | |||
| Динамические контролы в отчете основанные на display-методе | 19 | |||
| Работа с полями-массивами в отчете | 2 | |||
		
  |