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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2018, 09:40   #1  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Как проверить, что можно вызвать оператор next на таблице?
1. Как проверить, что можно вызвать оператор next на таблице?
2. Как избежать выпадения в дебаггер?

вопросы относятся к любой версии аксапты.

Код:
X++:
static void Job13(Args _args)
{
    CustTrans   ct1;
    CustTrans   ct2;

    // let's assume that method 'one' search a record
    select ct1; // where ct1.AccountNum == 'someAccount'
    ct2.data(ct1.data()); // or ct2.data(ct1);

    // contract postcondition
    Debug::assert(ct1.RecId != 0);
    Debug::assert(ct2.RecId == ct1.RecId);

    //////////////////////////////////

    // let's assume that method 'two' accepts a custTrans record as parameter
    Debug::assert(ct2.RecId != 0);
    try
    {
        // Questions:
        // 1. How to check that 'next' can be used?
        // 2. How to suppress a debugger?
        next ct2;
    }
    catch
    {
        Warning('catch it!');
    }
}
пара скриншотов на ax2009 (в остальных версиях поведение такое же).
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 150
Размер:	40.9 Кб
ID:	11940  
Изображения
 
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 04.06.2018, 10:40   #2  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
271 / 262 (9) ++++++
Регистрация: 27.02.2006
Адрес: Дания
Как вариант, вместо
X++:
ct2.data(ct1.data());
написать
X++:
select ct2 where ct2.RecId == ct1.RecId
Старый 04.06.2018, 11:04   #3  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
271 / 349 (12) ++++++
Регистрация: 08.08.2007
Не знаю поможет ли это вам, но в AX 2012 методы возвращают разные значения
X++:
info(strFmt("%1 %2", ct2.found(), ct1.found()));
__________________
Sergey Nefedov,
IT Magnet
За это сообщение автора поблагодарили: mazzy (5).
Старый 04.06.2018, 12:28   #4  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от Stitch_MS Посмотреть сообщение
...написать...
вопрос не в том "как написать"
вопрос как проверить что именно передает уже написанный код.

Цитата:
Сообщение от SRF Посмотреть сообщение
Не знаю поможет ли это вам, но в AX 2012 методы возвращают разные значения
X++:
info(strFmt("%1 %2", ct2.found(), ct1.found()));
опа. в 2012 действительно добавили методы.
и этот, похоже, то что надо.

а в предыдущих версиях как?
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 04.06.2018, 21:40   #5  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,650 / 2141 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Глупый вопрос, но конструкция
X++:
if (ct2)
{
    next ct2;
}
не прокатывает? Или я чего-то не понял в задаваемом вопросе?
__________________
Возможно сделать все. Вопрос времени
Старый 04.06.2018, 22:26   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,091 / 1807 (67) ++++++++
Регистрация: 12.10.2004
Не прокатывает.
За это сообщение автора поблагодарили: sukhanchik (2), mazzy (2).
Старый 04.06.2018, 22:30   #7  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,650 / 2141 (77) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Понял, спасибо. Я просто очень редко пользовался этой конструкцией и поэтому на такие особенности еще не успел наткнуться
__________________
Возможно сделать все. Вопрос времени
Старый 04.06.2018, 23:19   #8  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,848 / 3764 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
не прокатывает?
угу. не прокатывает. я специально добавил
X++:
Debug::assert(ct2.RecId != 0);
чтобы показать какие предусловия выполняются в данном месте.
__________________
GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 05.06.2018, 08:26   #9  
Dreadlock is offline
Dreadlock
Участник
Аватар для Dreadlock
 
271 / 184 (7) ++++++
Регистрация: 07.05.2009
Адрес: Москва
Я делал всегда так, начиная с Ах3.0..Ах2012 и у меня работало:
X++:
static void nextCursor(Args _args)
{
    SalesTable salesTable;
    
    select noFetch salesTable
        where salesTable.RecId != 5637159589;
    
    next salesTable;
    
    do
    {
        info(strFmt('Sales id is %1', salesTable.SalesId));
        
        if (salesTable)
        {
            next salesTable;  
        }        
    }
    while (salesTable);
    
    info('Done');
}
В моем окружении, в той компании в которой я проверял Job, только один заказ с RecId == 5637159589
Старый 05.06.2018, 15:50   #10  
dmn is offline
dmn
Участник
 
9 / 18 (1) ++
Регистрация: 25.09.2014
На 2009 вот так перестал ругаться и вываливаться в отладчик. И recId вроде как одинаков у обоих курсоров.
X++:
ct2.data(ct1.data()); // or ct2.data(ct1);
ct2.reread();
Правда, вот это
X++:
next ct1
отрабатывает, а после
X++:
next ct2
ct2.recId == 0
За это сообщение автора поблагодарили: Владимир Максимов (2), alex55 (1).
Старый 05.06.2018, 16:34   #11  
DSPIC is offline
DSPIC
Боец
Аватар для DSPIC
MCP
Лучший по профессии 2017
Лучший по профессии 2014
Лучший по профессии 2009
 
1,004 / 1021 (37) ++++++++
Регистрация: 11.04.2008
Адрес: Минск
DEL
__________________
Мой блог

Последний раз редактировалось DSPIC; 05.06.2018 в 16:37.
Старый 05.06.2018, 17:06   #12  
-DocSerzh- is offline
-DocSerzh-
Участник
 
2 / 10 (1) +
Регистрация: 19.04.2006
:(
AX 2012 6.3.3000.111
на строке
next ct2
в debug не выходит, DAX сваливается в дамп и пытается отправиться в MS...
Старый 05.06.2018, 20:33   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,401 / 887 (32) +++++++
Регистрация: 13.01.2004
У меня получилось обойтись без ошибок так

X++:
       ct2.reread();
        next ct2;
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фильтрование записей при "переходе к основной таблице" demID DAX: Программирование 10 18.11.2015 12:52
sumitsaxfactor: Generating Next Number Sequence in SQL Blog bot DAX Blogs 0 03.05.2011 21:11
Накладной расход, переход к основной таблице ZVV DAX: Программирование 0 03.03.2010 16:55
Что и как можно резать? George Nordic DAX: Администрирование 1 11.05.2004 18:44
фильтр по связанной таблице mick_777 DAX: Программирование 13 21.08.2002 16:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:47.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.