| 
			
			 | 
		#1 | 
| 
			
			 Сам.AX 
		
			
	 | 
	
	
	
		
		
			
			
			Поиск разных значений. AX 4.0 sp2.
			 
			
			Доброе. 
		
		
		
		
		
		
		
	Ищу способы реализации задачи: Имеем список значений (контейнер): 1. 00001 2. 00001 3. 00001 4. 00002 5. 00001 Как определить, что четвертое значение отлично от всех остальных. Или задача минимум - как определить что в контейнере (или любой массив). не все значения одинаковы. Спасибо.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Пробегитесь по нему. вы программист?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Есть еще класс Set, который не допускает хранения неуникальных значений. Можно его задействовать. 
		
		
		
		
		
		
			А иногда и временную таблицу бывает удобнее использовать. В общем - вопрос не раскрыт 
				__________________ 
		
		
		
		
	Возможно сделать все. Вопрос времени  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Сам.AX 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да. Но меня посетила только одна идея - если текущее значени ене равно предидущему.  
		
		
		
		
		
		
		
	Я просто надеюсь на то, что есть калсс или процедура о которой я не знаю, которая примет котейнер или массив, проверит его по моему условию, а вернет bool-занчение. (Я понимаю, что маловероятно, но вдруг.. В 1С есть такой метод. Думаю, что а AX тоже должен быть.).  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Сам.AX 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			можно так, наверное: 
		
		
		
		
		
		
		
	X++: void isConRecUnique(Args _args) { Container myCon; Set mySet = new set(Types::String); Int elementsNum; ; //... fill in container elementsNum = conlen(mycon); info(elementsNum == set::create( [ 1, any2int(mySet.typeId()), elementsNum ] + myCon ).elements() ? "Unique" : "Not unique") ; }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2). | |
| 
			
			 | 
		#7 | 
| 
			
			 Сам.AX 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			если все одинаковы - в сет добавится только один элемент, т.е. 
		
		
		
		
		
		
		
	X++: info(set::create( [ 1, any2int(mySet.[typeId()), elementsNum ] + myCon ).elements() > 1 ? "Плохо" : "Хорошо")  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Alexx7 (1). | |
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: static void CheckItems(Args _args) { itemid FirstItem; // itemid первой строки str AllItems; // список itemid всех строк int N; // record count ; // fill in FirstItem & AllItems ... info( (AllItems == strrep(FirstItem,N)) ? "Хорошо" : "Плохо"); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Alexx7 (1). | |
| 
			
			 | 
		#10 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Может я не понял задачи, но почему бы обычный запрос к ProdBOM не использовать ? 
		
		
		
		
		
		
		
		
			Типа X++: select prodBom where prodBom.prodId==value exists join prodBom2 where prodBOM2.prodId==prodBom.prodId && prodBom2.itemId!=prodBom.itemId ; if (prodBom) throw "Непорядок!"; X++: select itemId group by itemId from prodBOM where prodBOM.prodId==value; itemId1=prodBom.itemId; next prodBom; if (ProdBom) throw StrFmt("Непорядок - есть номенклатуры %1 и %2", itemId1,prodBom.itemId); Последний раз редактировалось fed; 18.09.2009 в 15:37.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2), Alexx7 (1). | |
| 
			
			 | 
		#11 | 
| 
			
			 Developer 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Вариантов может быть несколько, например так: X++: static void TestJob(Args _args) { ProdBOM prodBOM; ProdBOM prodBOM2; ; select firstonly ItemId from ProdBOM where ...; select firstonly ItemId from prodBOM2 where ... && prodBOM2.ItemId != prodBOM.ItemId; if (prodBOM2) info(strfmt("В таблице ProdBOM встречаются как минимум два значения ItemId: '%1'; '%2'", prodBOM.ItemId, prodBOM2.ItemId)); else info(strfmt("В таблице ProdBOM встречается только одно значение ItemId: '%1'", prodBOM.ItemId)); } ![]() З.Ы.Ы. to fed: select (без while и next) желательно использовать c firstonly Последний раз редактировалось vallys; 18.09.2009 в 15:56.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2), Alexx7 (1). | |
| 
			
			 | 
		#12 | 
| 
			
			 Сам.AX 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всем спасибо. Воспользовался вариантом Господина anykey. 
		
		
		
		
		
		
		
	Всё работает стабильно.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Только в памяти клиента или AOS'а. С генерацией трафика от SQL-сервера. 
		
		
		
		
		
		
			
		
		
		
		
	Послушайте совета fed и vallys - отдайте работу на SQL.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| Теги | 
| ax4.0, container, distinct, set | 
| 
	
	 | 
	
		
  |