|  22.05.2018, 16:22 | #1 | 
| Участник | UTCDateTime в query range value 
			
			DAX2009 Есть диалоговое окно с парой значений TransDateTime плюс сохраняемый query по некоторым полям таблички RFIDTrans. После нажатия ОК, вызывается метод updateQuery, который добавляет ранг по дате-времени. Все отрабатывает нормально. НО если перед ОК хоть раз нажать кнопку "Выбрать", для смены значений фильтров, то выборка по времени идет на 3 часа раньше (Московская временная зона). X++: protected void updateQuery() { QueryBuildDataSource qbdsRFID; QueryBuildRange rangeTransDateTime; str dateTimeRange; ; qbdsRFID = queryRun.query().dataSourceTable(tablenum(RFIDTrans)); fromDateTime = DateTimeUtil::removeTimeZoneOffset(fromDateTime, tz); toDateTime = DateTimeUtil::removeTimeZoneOffset(toDateTime, tz); rangeTransDateTime = qbdsRFID.addRange(fieldnum(RFIDTrans, TransDateTime)); dateTimeRange = SysQuery::range(fromDateTime, toDateTime); rangeTransDateTime.value(dateTimeRange); Кто-нибудь сталкивался с подобным? ЗЫ: Поковырялся в свойствах типа данных TransDateTime, нашел свойство TimezonePreference. Если его выставить в No Conversion, тогда запрос формируется корректно и после нажимания кнопки "Выбрать", но при этом в форме RFIDTrans время начинает отображаться по Гринвичу, что в общем-то правильно, но неудобно. 
				__________________ Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!   | 
|  | 
|  22.05.2018, 18:04 | #2 | 
| Участник | 
			
			1) точно ли нужен removetimezine offset 2) если сдампить queryRun.query.xml() до и после нажатия на кнопку - есть ли разница? | 
|  | |
| За это сообщение автора поблагодарили: Logger (1). | |
|  22.05.2018, 23:02 | #3 | 
| Участник | 
			
			xml отличается только версией. Version="24" или Version="23", вдругой раз получилась пара 25-26. Все остальное идентично, в том числе и тэг <range Name="TransDateTime" Table="RFIDTrans" Field="TransDateTime" Value=""10.05.2018 18:00:00".."11.05.2018 06:00:00"" Label="" Status="Open" Enabled="Yes" /> Причем диапазон в обоих случаях правильный, по гринвичу с 18:00 до 6:00. В вот сам qbdsRFID в дебагере имеет диапазон (после нажатия "Выбрать") с 15:00 до 3:00: NAME: qbdsRFID VALUE: SELECT FIRSTFAST * FROM RFIDTrans WHERE ((TransState = 4 OR TransState = 2)) AND ((TagType = 19)) AND ((EpcObjectType = 30 OR EpcObjectType = 4)) AND ((RLProcessStage = 2 OR RLProcessStage = 0)) AND ((TransDateTime>='2018-05-10T15:00:00' AND TransDateTime<='2018-05-11T03:00:00')) JOIN FIRSTFAST * FROM InventDim WHERE RFIDTrans.InventDimId = InventDim.inventDimId AND ((InventLocationId = N'БСОХ')) TYPE: QueryBuildDataSource 
				__________________ Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!   | 
|  | 
|  22.05.2018, 23:09 | #4 | 
| Участник | Цитата: 
		
			1) точно ли нужен removetimezine offset
		
	 Отчет писал не я, досталось по наследству. 
				__________________ Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!   | 
|  | 
|  23.05.2018, 09:35 | #5 | 
| Участник | 
			
			Который раз убеждаюсь, что с проблемой надо переспать. Вчера полдня голову ломал, сегодня за 2 минуты разобрался. Этот код в обоих случаях работает одинаково: X++: queryRun.query().removeTimeZoneOffset(true); qbdsRFID = queryRun.query().dataSourceTable(tablenum(RFIDTrans)); qbdsRFID.addRange(fieldnum(RFIDTrans, TransDateTime)).value(SysQuery::range(fromDateTime, toDateTime)); X++: queryRun.query().removeTimeZoneOffset(false); qbdsRFID = queryRun.query().dataSourceTable(tablenum(RFIDTrans)); fromDateTime = DateTimeUtil::removeTimeZoneOffset(fromDateTime, tz); toDateTime = DateTimeUtil::removeTimeZoneOffset(toDateTime, tz); qbdsRFID.addRange(fieldnum(RFIDTrans, TransDateTime)).value(SysQuery::range(fromDateTime, toDateTime)); 
				__________________ Я прибыл к вам из Кантемировской дивизии. А там, как известно, дураков не держат!   | 
|  | |
| За это сообщение автора поблагодарили: belugin (15), Logger (5). | |