AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2009, 13:15   #1  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Поиск разных значений. AX 4.0 sp2.
Доброе.

Ищу способы реализации задачи:
Имеем список значений (контейнер):
1. 00001
2. 00001
3. 00001
4. 00002
5. 00001

Как определить, что четвертое значение отлично от всех остальных. Или задача минимум - как определить что в контейнере (или любой массив). не все значения одинаковы.

Спасибо.
Старый 18.09.2009, 13:37   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,815 / 402 (17) +++++++
Регистрация: 23.03.2006
Пробегитесь по нему. вы программист?
Старый 18.09.2009, 13:46   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,340 / 3558 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Есть еще класс Set, который не допускает хранения неуникальных значений. Можно его задействовать.
А иногда и временную таблицу бывает удобнее использовать. В общем - вопрос не раскрыт
__________________
Возможно сделать все. Вопрос времени
Старый 18.09.2009, 13:47   #4  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от ice Посмотреть сообщение
Пробегитесь по нему. вы программист?
Да. Но меня посетила только одна идея - если текущее значени ене равно предидущему.

Я просто надеюсь на то, что есть калсс или процедура о которой я не знаю, которая примет котейнер или массив, проверит его по моему условию, а вернет bool-занчение. (Я понимаю, что маловероятно, но вдруг.. В 1С есть такой метод. Думаю, что а AX тоже должен быть.).
Старый 18.09.2009, 13:50   #5  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Есть еще класс Set, который не допускает хранения неуникальных значений. Можно его задействовать.
А иногда и временную таблицу бывает удобнее использовать. В общем - вопрос не раскрыт
В таблице ProdBOM требуется проверить, чтобы ItemID во всех строках был одинаковый.
Старый 18.09.2009, 13:50   #6  
anykey is offline
anykey
Участник
 
35 / 26 (1) +++
Регистрация: 04.12.2006
можно так, наверное:
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).
Старый 18.09.2009, 14:58   #7  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от anykey Посмотреть сообщение
можно так, наверное:
.....
Да. Это работает, но в том случае если все значения в списке уникальны (Unique) или хотябы одно повтаряется (Not Unique). А надо наборот в списке не все значения одинаковы - значит ошибка, все одинаковы значит хорошо.
Старый 18.09.2009, 15:16   #8  
anykey is offline
anykey
Участник
 
35 / 26 (1) +++
Регистрация: 04.12.2006
если все одинаковы - в сет добавится только один элемент, т.е.
X++:
info(set::create( [ 1, any2int(mySet.[typeId()), elementsNum ] + myCon ).elements() > 1 ?
        "Плохо" : "Хорошо")
За это сообщение автора поблагодарили: Alexx7 (1).
Старый 18.09.2009, 15:34   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от anykey Посмотреть сообщение
если все одинаковы - в сет добавится только один элемент, т.е.
X++:
info(set::create( [ 1, any2int(mySet.[typeId()), elementsNum ] + myCon ).elements() > 1 ?
        "Плохо" : "Хорошо")
Красиво. Вот еще вариация:
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).
Старый 18.09.2009, 15:35   #10  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Может я не понял задачи, но почему бы обычный запрос к 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);
Ну то есть - это я к тому, что вытаскивать данные в память и там обрабатывать стоит только тогда, когда эту же задачу в принципе не удается переложить на SQL-сервер

Последний раз редактировалось fed; 18.09.2009 в 15:37.
За это сообщение автора поблагодарили: mazzy (2), Alexx7 (1).
Старый 18.09.2009, 15:49   #11  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
В таблице ProdBOM требуется проверить, чтобы ItemID во всех строках был одинаковый.
А зачем делать лишнюю работу по формированию контейнера/массива? Сразу спросите у sql-сервера, есть ли повторяющиеся ItemID...
Вариантов может быть несколько, например так:
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).
Старый 18.09.2009, 16:03   #12  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Всем спасибо. Воспользовался вариантом Господина anykey.
Всё работает стабильно.
Старый 18.09.2009, 16:36   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
Всё работает стабильно.
Только в памяти клиента или AOS'а. С генерацией трафика от SQL-сервера.

Послушайте совета fed и vallys - отдайте работу на SQL.
__________________
полезное на axForum, github, vk, coub.
Старый 18.09.2009, 16:43   #14  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
В таблице ProdBOM требуется проверить, чтобы ItemID во всех строках был одинаковый.
Если в идеологии конкретно вашей системы так должно быть всегда, то возможно вам имеет смысл просто сделать соответствующий уникальный индекс с ItemId для ProdBOM.
Теги
ax4.0, container, distinct, set

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47
AX UK: Microsoft Dynamics AX 4.0 SP2 Demo Toolkit DVDs Blog bot DAX Blogs 0 31.03.2008 16:05
Data migration AX 3.0 SP3 Oracle 9.1 -> AX 4.0 SP2 SQL 2005 dacom DAX: Администрирование 12 30.11.2007 11:25
Dynamics AX: Dynamics AX 4.0 SP2 has been released Blog bot DAX Blogs 0 02.08.2007 03:50

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:01.