| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Приветствую! 
		
		
		
		
		
		
		
	Необходимо создать элементарный запрос с помощью динамического Query, но при задании Range выводится ошибка "Ошибка расширенного диапазона запроса: Задано недопустимое имя функции в 11." И запрос отрабатывается не корректно, он просто выводит все строки из таблицы, будто ограничений нет. Range задаю таким образом qbr.value(strFmt('((%1 >= %2) && (%1 <= %2))', fieldStr(FISalesPlanLine_ICL, Year), queryValue(int2str(2018)))); Пример брал с http://www.axaptapedia.com/Expressions_in_query_ranges. С Query не часто работал, но по идее все должно отрабатывать нормально, но не работает. Немного понятно как отрабатывает range при задании таким образом: qbr = qbds.addRange(fieldNum(FISalesPlanLine_ICL, Year)); qbr.value(" < 2019"); И ошибки нет, и отрабатывает запрос как надо. Но если задать по этому же полю второе ограничение, то внутри класса между двумя range ставится OR, а мне нужно AND. Если кто то подскажет как при задании двух addRange по одному полю сделать чтобы между ними было AND - буду очень благодарен. Ещё момент, если написать qbr.value(" <= 2019"); вместо qbr.value(" < 2019");, то снова вылезает ошибка о неверном условии.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Имя поля (Year) совпало с именем функции year(), что и вызывает проблемы 
		
		
		
		
		
		
			Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). Если надо только 2 условия, то можно для первого использовать fieldNum(), а для второго global::filedIdExt(). Т.е. для второго условия как для первого элемента поля-массива. Идентификаторы получатся разные и это интерпретируется построителем как разные поля. Соответственно, объединение через AND PS: По приведенной тобой ссылке есть пример с алиасами полей в условии (%1.%2 < %3) попробуй этот вариант решения 
				__________________ 
		
		
		
		
		
			- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 24.01.2019 в 16:59.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			(%1 >= %2) && (%1 <= %2) - условие странное  
		
		
		
		
		
		
			 
		
				__________________ 
		
		
		
		
	Существует 10 типов людей: одни понимают двоичную систему, другие - нет.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот так не пробовали? 
		
		
		
		
		
		
			X++: qbr = qbds.addRange(fieldNum(FISalesPlanLine_ICL, Year));
qbr.value(sysQuery::range(2018,2019));
				__________________ 
		
		
		
		
	- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря...  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: vizir (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Владимир Максимов
			 
 
			Имя поля (Year) совпало с именем функции year(), что и вызывает проблемы 
		
	Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). Если надо только 2 условия, то можно для первого использовать fieldNum(), а для второго global::filedIdExt(). Т.е. для второго условия как для первого элемента поля-массива. Идентификаторы получатся разные и это интерпретируется построителем как разные поля. Соответственно, объединение через AND PS: По приведенной тобой ссылке есть пример с алиасами полей в условии (%1.%2 < %3) попробуй этот вариант решения Алиасы пробовал, но ошибка та же самая была. А вот этот построитель всегда разные поля через AND соединяет, а одни и те же через OR? Нельзя как то это задать самому?  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Владимир Максимов
			 
 
			Вот так не пробовали? 
		
	X++: qbr = qbds.addRange(fieldNum(FISalesPlanLine_ICL, Year));
qbr.value(sysQuery::range(2018,2019)); 
		 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возник ещё один более интересный вопрос. Есть ли возможность в агрегатную функцию SUM() в Query вставить формулу? Например у меня идет SUM(Field1), а мне надо SUM(Field1 + 2). Появилась необходимость пересчета значений поля по ходу запроса. Хотелось бы сделать все сразу, а не плодить промежуточные таблицы.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Делаете View с  Computed Column, суммируете в этом новом View. Смотрите InventValue* views в АОТ. 
		
		
		
		
		
		
		
	https://docs.microsoft.com/en-us/dyn...lumn-to-a-view  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Stitch_MS
			 
 
			Делаете View с  Computed Column, суммируете в этом новом View. Смотрите InventValue* views в АОТ. 
		
	https://docs.microsoft.com/en-us/dyn...lumn-to-a-view  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
вам надо написать что-то вроде: X++: qbr.value(strFmt('((%3.%1 >= %2) && (%3.%1 <= %2))', fieldStr(FISalesPlanLine_ICL, Year), queryValue(int2str(2018) datasourceName)));  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Этот вопрос уже решен с помощью этого X++: qbr.value(sysQuery::range(2018,2019));  
		 | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от vizir
			 
 
			Возник ещё один более интересный вопрос. Есть ли возможность в агрегатную функцию SUM() в Query вставить формулу? Например у меня идет SUM(Field1), а мне надо SUM(Field1 + 2). Появилась необходимость пересчета значений поля по ходу запроса. Хотелось бы сделать все сразу, а не плодить промежуточные таблицы. 
		
	2. напрямую задать формулу в запросе аксапта не умеет ни в какой версии (только через View с Computed Column). поэтому, если вам так уж необходмо формулу, то вам остается только прямой запрос и ResultSet. со всеми вытекающими последствиями ![]() Если будете использовать ResultSet, то посмотрите на мой SysResultSet и вот этот пример с формулой Последний раз редактировалось mazzy; 31.01.2019 в 12:20.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от mazzy
			 
 
			1. как вставляются агрегатные функции в обычный запрос смотрите в SysQuery::countTotal() 
		
	2. напрямую задать формулу в запросе аксапта не умеет ни в какой версии (только через View с Computed Column). поэтому, если вам так уж необходмо формулу, то вам остается только прямой запрос и ResultSet. со всеми вытекающими последствиями ![]() Если будете использовать ResultSet, то посмотрите на мой SysResultSet  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
![]() Цитата: 
	
![]() (майкрософт обязан был это сделать давным давно, сразу как объявил, что MS SQL - единственная поддерживаемая СУБД) частично проблема решается методом sql.sqlLiteral см. пример для SysResultSet: https://github.com/mazzy-ax/SysResul...sultSet_AX.xpp Последний раз редактировалось mazzy; 31.01.2019 в 12:28.  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			SUM(Field1 + 2)
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Там надо коэффициент подставлять, я сумму как пример привел просто.
		 
		
		
		
		
		
		
		
		
			Последний раз редактировалось vizir; 01.02.2019 в 09:59.  | 
| 
	
 |