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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2018, 09:40   #1  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,888 / 3797 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как проверить, что можно вызвать оператор 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
Просмотров: 215
Размер:	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
Соотечественники
 
286 / 279 (10) ++++++
Регистрация: 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
 
277 / 366 (13) ++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Не знаю поможет ли это вам, но в 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
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,888 / 3797 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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,672 / 2189 (78) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Глупый вопрос, но конструкция
X++:
if (ct2)
{
    next ct2;
}
не прокатывает? Или я чего-то не понял в задаваемом вопросе?
__________________
Возможно сделать все. Вопрос времени
Старый 04.06.2018, 22:26   #6  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,136 / 1886 (69) ++++++++
Регистрация: 12.10.2004
Записей в блоге: 1
Не прокатывает.
За это сообщение автора поблагодарили: sukhanchik (2), mazzy (2).
Старый 04.06.2018, 22:30   #7  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,672 / 2189 (78) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Понял, спасибо. Я просто очень редко пользовался этой конструкцией и поэтому на такие особенности еще не успел наткнуться
__________________
Возможно сделать все. Вопрос времени
Старый 04.06.2018, 23:19   #8  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,888 / 3797 (184) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 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
 
274 / 186 (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,009 / 1029 (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,419 / 924 (33) +++++++
Регистрация: 13.01.2004
Записей в блоге: 3
У меня получилось обойтись без ошибок так

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, время: 19:15.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.