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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.02.2008, 06:30   #1  
OOuph is offline
OOuph
Участник
 
6 / 10 (1) +
Регистрация: 11.02.2008
Set записей таблицы
Прошу прощения за,наверное,глупый вопрос-но я совсем еще новичок
Как самым эффективным способом сохранить записи таблицы в Set?Сперва загнать их в контейнеры,а потом создать сет контейнеров?Или есть способ сохранять строки таблицы напрямую?И если есть,то как потом к ним обращаться?

Последний раз редактировалось OOuph; 11.02.2008 в 06:45.
Старый 11.02.2008, 07:37   #2  
jasper is offline
jasper
Участник
 
13 / 11 (1) +
Регистрация: 22.10.2004
Адрес: Владивосток
Можно сохранять записи на прямую
X++:
    set             set;
    ;
    set = new SET(Types::Record);
    set.add(custTable::find("........"));
Обращаться потом с помощью классов setIterator или setEnumerator
__________________
Нет ничего сложного есть простое и неправильное

Последний раз редактировалось jasper; 11.02.2008 в 07:42.
Старый 11.02.2008, 08:06   #3  
OOuph is offline
OOuph
Участник
 
6 / 10 (1) +
Регистрация: 11.02.2008
Спасибо, рекорды я и ранише пробовал добавлять-но не могу вывести значение поля.Т.е. сохраняем сет рекордов, потом по итератору обращаемся к рекорду-но как вывести его определенное поле?Например,ItemName из записи таблицы InventTable
X++:
 List l = new List(Types::Record);
    InventTable it;
    ListIterator li;
    while select it where it.ItemGroupId == "Тара"{
        l.addEnd(InventTable::find(it.ItemId));
        i++;
    }
    li = new ListIterator(l);
    while (li.more())
    {
      /*  info(li.value().ItemName()); - так не работает,естессно. Как надо? */
        li.next();
    }
Старый 11.02.2008, 08:58   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,308 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
X++:
 List l = new List(Types::Record);
    InventTable it;
    ListIterator li;
    while select it where it.ItemGroupId == "Тара"{
        l.addEnd(InventTable::find(it.ItemId));
        i++;
    }
    li = new ListIterator(l);
    while (li.more())
    {
      /*  info(li.value().ItemName()); - так не работает,естессно. Как надо? */
//----------------------------->
        it = li.value();
        info(it.itemName);
//<-----------------------------
        li.next();
    }
__________________
Возможно сделать все. Вопрос времени
Старый 11.02.2008, 10:16   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от OOuph Посмотреть сообщение
Спасибо, рекорды я и ранише пробовал добавлять-но не могу вывести значение поля.Т.е. сохраняем сет рекордов, потом по итератору обращаемся к рекорду-но как вывести его определенное поле?Например,ItemName из записи таблицы InventTable
В ядре был баг при переборе значений Set при помощи итераторов. (Воспроизводился только при сохранении Types::Record) - поищите на форуме- были сообщения об этом.

чтобы обойти это ограничение ядра, лучше использовать для перебора класс Enumerator

Он работает безглючно и при его использовании меньше способов ошибиться и уйти в бесконечный цикл.
Старый 11.02.2008, 10:17   #6  
OOuph is offline
OOuph
Участник
 
6 / 10 (1) +
Регистрация: 11.02.2008
Все,тему можно закрывать
X++:
    InventTable it;
    li = new ListIterator(l);
    while (li.more())
    {
        it=li.value();
        info(it.itemName());
        li.next();
    }
Старый 11.02.2008, 10:27   #7  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от OOuph Посмотреть сообщение
Все,тему можно закрывать
Замените итератор на енумератор, как советует Logger, и закрывайте
Итераторы - в музей, они оставлены для обратной совместимости.

Подробности в книжке Microsoft Dynamics AX 4.0 на стр.494-496.
Либо здесь http://dax-dilettante.blogspot.com/2...hapter155.html в раздельчике "Перебор элементов в коллекции".
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Как добавить в фильтрацию записей доп. таблицы n:1 или 1:n? Hidden DAX: Программирование 6 11.08.2006 14:04
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Ограничить вывод записей master таблицы, наложением фильтра на detail таблицу Андре DAX: Программирование 12 03.02.2003 14:52
Lookupы при большом количестве записей выводимой таблицы Pavlo AKA Panok DAX: Программирование 9 07.05.2002 22:02
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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