![]() |
#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 |
|
|