| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Добрый день. Только начинаю программировать в Ax. Столкнулся с проблемой. 
		
		
		
		
		
		
		
	Есть метод, вызывается с параметрами. X++: void insertInToTestPerfomanceTable(..., TimeInMS duration, ..., date periodFrom, date periodTo) { ... ; ... testPerfomanceTable.Duration = duration; if (duration <= 999) { testPerfomanceTable.Duration2 = Int2Str(duration) + " мс"; } else if ((duration > 999) && (duration < 59999)) { testPerfomanceTable.Duration2 = Int2Str(duration div 1000) + " с " + Int2Str(duration mod 1000) + " мс"; } ... testPerfomanceTable.PeriodFrom = periodFrom; testPerfomanceTable.PeriodTo = periodTo; ttsbegin; testPerfomanceTable.insert(); ttscommit; } Проблемы две. 1. testPerfomanceTable.PeriodFrom = periodFrom; testPerfomanceTable.PeriodTo = periodTo; В поля кладутся верные даты. Но в БД иногда записывается нулевая дата 1900-01-01. В общем как повезет. 50/50. Через отладчик проверяю, всегда кладется нужная дата, а зписывается не всегда она. Тип полей Date. 2. testPerfomanceTable.Duration2 = ... В поле кладется верная строка. Но в БД ничего не записывается. Через отладчик проверяю, всё норм. Тип поля String. Size 1024. Хотя это слишком много. Простите, если что не так объяснил. Помогите, пожалуйста. AX2009 SQL2008R2  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я бы написал так: 
		
		
		
		
		
		
		
		
			X++: void insertInToTestPerfomanceTable(..., TimeInMS duration, ..., TransDate periodFrom, TransDate periodTo) { ttsbegin; testPerfomanceTable.clear() if (duration <= 999) { testPerfomanceTable.Duration2 = strfmt("%1: mc", duration ); } .... ttscommit; UPD: еще одна штука, если эти поля: Duration2, PeriodFrom, PeriodTo были добавлены толко что, то иногда когда добавляешь в них инфромацию она сразу не отображаеться в форме например, надо синхронизировать/востановить таблицу/форму где были добавлены эти поля в крайнем случае, перезапустить приложение ахапты/АОС. Последний раз редактировалось rDenis2; 06.08.2012 в 12:30. Причина: add  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: eon (1). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Сделал. Даты ставятся верно. duration2 теперь стало 50/50, то записывается верная строка, то записывается пустое значение. ![]() Спасибо. Что еще можно сделать?  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
X++: if (duration <= 999) { testPerfomanceTable.Duration2 = Int2Str(duration) + " мс"; } else if ((duration > 999) && (duration < 59999)) { testPerfomanceTable.Duration2 = Int2Str(duration div 1000) + " с " + Int2Str(duration mod 1000) + " мс"; } X++: if (duration <= 999) { testPerfomanceTable.Duration2 = Int2Str(duration) + " мс"; } else if ((duration > 999) && (duration < 59999)) { testPerfomanceTable.Duration2 = Int2Str(duration div 1000) + " с " + Int2Str(duration mod 1000) + " мс"; } else { testPerfomanceTable.Duration2 = ......... .......... } 
				__________________ 
		
		
		
		
	-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			rDenis2 
		
		
		
		
		
		
		
	Спасибо за UPD ![]() Сейчас вроде всё заполняется как надо. Спасибо за помощь  
		 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Для таких ветвлений кмк лучше switch использовать. он как-то понагляднее
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: str 1024 strDuration; ; // Сначала формируем секунды // Ограничение на меньше 59999 - смысла не имеет, поскольку в противном случае // нужна еще ветка по формированию часов и минут, если значение больше 59999 if (duration > 999) { strDuration = Int2Str(duration div 1000) + " с "; } // Теперь формируем миллисекунды strDuration += Int2Str(duration mod 1000) + " мс"; testPerfomanceTable.Duration2 = strDuration; 
				__________________ 
		
		
		
		
	- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря...  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 
			
			если нет ветвления, то switch по определению не нужен. а нужен он там, где ветвление есть и его не обойти. как будто десяток вложенных else if выглядит лучше...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
   А конструкция switch (true) однозначно указывает на ошибку проектирования. Такая конструкция - это то же самое, что и десяток вложенных else if, но "вид сбоку"   И то и другое выглядит "не естесственно". Как следствие, возникает желание проверить логику на предмет отказа от ветвления. Проверил. Не нужна она в данном случае.
		
				__________________ 
		
		
		
		
	- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря...  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 северный Будда 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Владимир, я полностью согласен с тем, что switch(true) - явная нелепость. Видимо, надо было в исходном посте написать просто "используйте для ветвлений switch", тогда бы и вопросов не было 
		
		
		
		
		
		
			 
		
				__________________ 
		
		
		
		
	С уважением, Вячеслав  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Про switch(true) уже обсуждали: 
		
		
		
		
		
		
		
	if (a == true) к какому-то общему знаменателю не пришли - кому-то нравится, кому-то нет.  | 
| 
	
 |