| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Полученное значение через QueryBuildDataSource
			 
			
			Как определить, вернулось ли что-нибудь с помощью QueryBuildDataSource?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нужно создать queryRun для всей query (к которой добавлен queryBuildDataSource), и вызвать на нем next() - это вернет true, если квери вернула что-нибудь.
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возвращает true в любом случае. 
		
		
		
		
		
		
		
	Могу предоставить код если необходимо.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не утруждайтесь - это только начинающие программисты смотрят в исходный код, а настоящие гуру умеют всю нужную информацию видеть в хрустальном шаре. 
		
		
		
		
		
		
		
		
			PS. См. также Как правильно задать вопрос, чтобы быть услышанным Последний раз редактировалось gl00mie; 12.04.2015 в 23:14. Причина: PS  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 X++: Query query = new Query(); QueryRun queryRun; QueryBuildDataSource qbds; ; qbds = query.addDataSource(tableNum(RContractTable)); qbds.addRange(fieldNum(RContractTable, RContractAccount)).value(PayRequestTable.RContractAccount); queryRun = new QueryRun(query); if (queryRun.next()) { info("true"); } else if (!queryRun.next()) { info("false"); }  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всегда используйте queryValue() (он же SysQuery::value()) для "обработки" значений, подставляемых в QueryBuildRange, в данном случае для PayRequestTable.RContractAccount. Вероятно, соотв. значение в вашем случае - пустое, поэтому выборка из таблицы договоров фактически идет без фильтрации по рег.номеру - см. также, какое значение возвращает SysQueryValue::unlimited().
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: bitter (1). | |
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: if (queryRun.next()) { info("true"); } else { info("false"); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: bitter (1). | |
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от gl00mie
			 
 
			Всегда используйте queryValue() (он же SysQuery::value()) для "обработки" значений, подставляемых в QueryBuildRange, в данном случае для PayRequestTable.RContractAccount. Вероятно, соотв. значение в вашем случае - пустое, поэтому выборка из таблицы договоров фактически идет без фильтрации по рег.номеру - см. также, какое значение возвращает SysQueryValue::unlimited(). 
		
	Цитата: 
	
Я понял почему всегда возвращает true. Я сравниваю полученное значение со значением в таблице, которое априори там присутствует. Соответственно вопрос был задан некорректно, прошу прощения. Попытаюсь расписать алгоритм, который мне необходимо реализовать. На форме есть лукап, с помощью которого я выбираю значение из таблицы, по этому значению мне необходимо найти строку в другой таблице и выяснить заполнено ли определенное поле в данной строке. От того, заполнено ли это поле, будут зависеть мои дальнейшие действия. Я не совсем понимаю как мне выяснить заполнено ли поле найденной строки. Необходимо добавить еще один рейндж с этим полем в QueryBuildDataSource?  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Для строкового поля: 
		
		
		
		
		
		
		
	X++: qbds.addRange(fieldNum(, )).value(SysQuery::valueNotEmptyString());X++: qbds.addRange(fieldNum(, )).value(SysQuery::valueNot(0));Можно сделать через select X++: /* Выбираем первую попавшуюся запись с искомым RContractAccount и заполненым полем ContractDate */ select firstOnly RecId from rcontractTable where rcontractTable.RContractAccount == payRequestTable.RContractAccount && rcontractTable.ContractDate; /* Ваше поле */ if (rcontractTable) { info("запись существует"); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: bitter (1). | |
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Если "таких" строк в принципе не может быть больше одной (выборка происходит по уникальному ключу), то возможно логичнее сначала прочитать значение этой записи (каким бы оно ни было пустым или заполненным) - проверить что сама запись в таблице есть, а уже вторым шагом проверить заполненность поля в выбранной записи. X++: if (queryRun.next()) { RContractTable = queryRun.get(tableNum(RContractTable)); // получаем выбранную запись if (RContractTable.ContractDate) { info("Поле заполнено"); } else { info("Поле не заполнено"); } } else { info("Запись не найдена"); } Последний раз редактировалось S.Kuskov; 13.04.2015 в 07:54.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: bitter (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 |