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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.10.2005, 11:31   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Временные таблицы
Доброе утро!

Возникли такие вопросы:

1. Как реализовать поиск во временной таблице?

Неработающий пример:
PHP код:
static boolean exist(tmpRetailShopGroupItem _tmpCursor)
{
    
tmpRetailShopGroupItem  tmpCursor _tmpCursor;
    ;

    
select tmpCursor
        index hint ItemIdShopGroupId_Idx
            where   tmpCursor
.itemId == _tmpCursor.ItemId &&
                    
tmpCursor.ShopGroupId == _tmpCursor.ShopGroupId;

    return 
_tmpCursor && tmpCursor.recId != 0;

2. Метод tmpCursor1.SetTmpData(tmpCursor2) позволяет tmpCursor1 запрашивать блок данных tmpCursor2. Почему этого не происходит в примере

PHP код:
boolean tmpCursorExist(TmpRetailShopGroupItem    _tmpCursor)
{
    
TmpRetailShopGroupItem  tmpCursor;
    ;

    
tmpCursor.setTmpData(_tmpCursor);

    
select tmpCursor
        where tmpCursor
.ItemBarCode == _tmpCursor.ItemBarCode;

    return 
_tmpCursor.RecId && tmpCursor.RecId;

Т.е. _tmpCursor имеет заполненное поле, а tmpCursor после SetTmpData нет. У _tmpCursor на момент передачи не заполнено recId.

Цель всего -- реализовать метод exist на временной таблице.

Спасибо за внимание.
Старый 07.10.2005, 11:38   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Проверяй не по наличию RecId.
__________________
Андрей.
Старый 07.10.2005, 11:56   #3  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Изначально опубликовано Dron AKA andy
Проверяй не по наличию RecId.
Спасибо!

Я недооценил SetTmpData! Вот пример статического exist на временной таблице (с условным breakpoint-ом для проверки результата)

PHP код:
static boolean exist(tmpRetailShopGroupItem _tmpCursor)
{
    
TmpRetailShopGroupItem  tmpCursor;
    ;

    
tmpCursor.setTmpData(_tmpCursor);

    
select tmpCursor
        where tmpCursor
.ItemBarCode == _tmpCursor.ItemBarCode;

    if(
tmpCursor.ItemId)
    {
        
breakpoint;
    }

    return 
_tmpCursor.RecId && tmpCursor.RecId;

Старый 07.10.2005, 11:58   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
То что вы хотите сделать вообще не понятно. Что вы передаете в аргументах функций? Таблицу или набор полей?

Если таблицу, то зачем вообще вызывать функции, просто проверяйте на RecId. Если набор полей, то tmpCursor надо связывать не с ним, а с таблицей
__________________
Axapta v.3.0 sp5 kr2
Старый 07.10.2005, 12:13   #5  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Изначально опубликовано AndyD
То что вы хотите сделать вообще не понятно. Что вы передаете в аргументах функций? Таблицу или набор полей?

Если таблицу, то зачем вообще вызывать функции, просто проверяйте на RecId. Если набор полей, то tmpCursor надо связывать не с ним, а с таблицей
Упсс!

Спасибо Андрей!
Передаю набор полей!

PHP код:
static boolean exist(tmpRetailShopGroupItem _tmpCursor)
{
    
TmpRetailShopGroupItem  tmpCursor;
    ;

    
tmpCursor.setTmpData(_tmpCursor);

    
select tmpCursor
        where tmpCursor
.ItemBarCode == _tmpCursor.ItemBarCode;

    if(
tmpCursor.ItemId)
    {
        
breakpoint;
    }

    return 
_tmpCursor && tmpCursor.RecId;

Работает корректно(продолжу тестить..).

Я понимаю так -- устанавливаю переменную tmpCursor на набор данных _tmpCursor (набор данных в широком смысле http://www.axforum.info/forums/showt...0770#post20770 а в _tmpCursor -- набор полей)
Старый 07.10.2005, 13:45   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробуй такой вызов
PHP код:
tmpRetailShopGroupItem tmpCursor;
;
tmpCursor.ItemBarCode "Какой-то существующий штрих-код";
if (
tmpRetailShopGroupItem::exist(tmpCursor))
    
info("Ok!"
Твой код будет работать некорректно.

Для того, чтобы он работал правильно, надо связывать перед вызовом функции передаваемый парамер с временным набором данных и после этого менять значения полей на нужные. Т.е. делать то, на чем в последствии можно споткнуться.

Если есть желание далать метод на таблице, то надо передавать два параметра - таблицу с временным набором данных и искомую запись (набор полей)
__________________
Axapta v.3.0 sp5 kr2
Старый 07.10.2005, 14:02   #7  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо! Согласен, подумаю..

Вот более корректный код (написан до твоего поста и в процессе тестрирования)

PHP код:
static boolean exist(tmpMissedPositionTable _tmpCursor)
{
    
tmpMissedPositionTable  tmpCursor;
    
boolean                 ret false;
    ;

    if(!
_tmpCursor.BestItemId)
    {
        
ret true;
    }

    if(!
ret)
    {
        
tmpCursor.setTmpData(_tmpCursor);

        
select tmpCursor
            where tmpCursor
.BestItemId == _tmpCursor.BestItemId;
    }

    if(
tmpCursor.RecId)
    {
        
ret true;
    }

    return 
ret;

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
И снова Query и временные таблицы Def DAX: Программирование 19 08.12.2006 15:46
Временные таблицы в отчете Прокопьева DAX: Программирование 25 02.10.2006 14:54
Временные таблицы должны быть вложенными (inner)... Deep Dreamer DAX: Программирование 14 08.09.2005 16:23
Временные таблицы в отчетах konfet DAX: Программирование 5 19.01.2005 11:32
Временные таблицы Diamond DAX: Программирование 3 30.12.2003 09:33
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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