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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.02.2014, 07:01   #1  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Lookup с сотрудниками конкретного подразделения
Добрый день! Задача такая: нужно в лукапе вывести только тех сотрудников, которые работают в определенном подразделении. Написан такой код

X++:
    EmplTable                   tempEmplTableLookup, employees;
    DirPartyTable               emplNames;
    RpayHrmOrganization         HrmOrganization;

    SysTableLookup              sysTableLookup;

    Query                       query = new Query();
    QueryBuildDataSource        queryBDS;
    ;


    //Делаем таблицу временной
    tempEmplTableLookup.setTmp();

    //Выбираем из таблицы рейсов
    sysTableLookup = SysTableLookup::newParameters(tablenum(EmplTable), this);

    //Добавляем столбцы
    sysTableLookup.addLookupfield(fieldnum(EmplTable, EmplId));
    sysTableLookup.addLookupfield(fieldnum(EmplTable, Del_Name));
    sysTableLookup.addLookupfield(fieldnum(EmplTable, Title));


    //Перебираем сотрудников и ищем там тех, кто в ЛО. При этом, они должны быть не уволенными
    ttsbegin;
    while select * from employees join emplNames join HrmOrganization
        where employees.PartyId == emplNames.PartyId
        && HrmOrganization.hrmOrganizationId == employees.PayHRMOrganizationId_RU
        && !employees.PayResignedDate_RU
        {
            if (HrmOrganization.parentOrganizationId like 'ЛО*')
            {
                tempEmplTableLookup.clear();
                tempEmplTableLookup.data(employees);
                tempEmplTableLookup.DEL_Name = employees.name();
                tempEmplTableLookup.insert();
            }
            
        }
    ttscommit;

    //Добавляем сотрировку
    queryBDS = query.addDataSource(tablenum(EmplTable));
    queryBDS.addSortField(fieldnum(EmplTable, DEL_Name), SortOrder::Ascending);
    sysTableLookup.parmQuery(query);


    //BP Deviation Documented
    sysTableLookup.parmTmpBuffer(tempEmplTableLookup);
    sysTableLookup.performFormLookup();
При выполнении дает ошибку: Невозможно создать запись в Окружение (RHRMVirtualNetworkTable). Респондент: 6666, 6666.
Запись уже существует.


Что это значит? Может как-то по-другому можно реализовать данную операцию

MS DAX 2009
Старый 18.02.2014, 08:01   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Попробуйте не insert(), а doInsert(). Возможно метод insert перекрыт на таблице и несмотря на то что таблица временная все равно что-то делает.
За это сообщение автора поблагодарили: Vasiliusis (1).
Старый 18.02.2014, 08:20   #3  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Не понимаю почему нельзя использовать стандартную lookup форму? Добавьте DS по DirPartyTable и возьмите от туда наименование, ну и свои условия дополнительные какие необходимы, и не нужно никаких временных таблиц и транзакций и работать будет быстрее.
__________________
Sergey Nefedov
Старый 18.02.2014, 08:51   #4  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от SRF Посмотреть сообщение
Не понимаю почему нельзя использовать стандартную lookup форму? Добавьте DS по DirPartyTable и возьмите от туда наименование, ну и свои условия дополнительные какие необходимы, и не нужно никаких временных таблиц и транзакций и работать будет быстрее.
вы имеете ввиду Query? А как мне вытащить должность человека? и подразделение? они то идут из EmplTable... если бы в DirPartyTable наподобие метода name были бы методы для извлечения подразделения и должности... тогда да возможно, можно было бы и через фильтр сделать
Старый 18.02.2014, 09:01   #5  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
вы имеете ввиду Query? А как мне вытащить должность человека? и подразделение? они то идут из EmplTable... если бы в DirPartyTable наподобие метода name были бы методы для извлечения подразделения и должности... тогда да возможно, можно было бы и через фильтр сделать
Я имею ввиду lookup форму EmplTableLookup, которая привязана к EDT EmplId, там в стандарте один DS подвешан EmplTable, добавьте к нему DirPartyTable ну и свои DS если нужны еще какие то данные из других таблиц(хотя из вопроса достаточно будет и exists join), ваш запрос рисуется минут за тридцать.

В крайнем случае можете сделать свою лукап форму.
__________________
Sergey Nefedov
Старый 18.02.2014, 10:18   #6  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от SRF Посмотреть сообщение
Я имею ввиду lookup форму EmplTableLookup, которая привязана к EDT EmplId, там в стандарте один DS подвешан EmplTable, добавьте к нему DirPartyTable ну и свои DS если нужны еще какие то данные из других таблиц(хотя из вопроса достаточно будет и exists join), ваш запрос рисуется минут за тридцать.

В крайнем случае можете сделать свою лукап форму.
спасибо, конечно, но я сделал как сделал (убрал DirPartyTable, она не нужна оказалась) и работает быстро и выводит что нужно. Доп. формы под это писать времени нет. Без формы EmplTableLookup тоже ИМХО я обошелся прекрасно
Старый 18.02.2014, 08:51   #7  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Попробуйте не insert(), а doInsert(). Возможно метод insert перекрыт на таблице и несмотря на то что таблица временная все равно что-то делает.
Сработало. Вы как всегда на высоте!
Старый 18.02.2014, 09:44   #8  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,267 / 982 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Сработало.
Ну хотя бы like в запрос запихайте. И код отформатируйте по человечески. Глаза режет.
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 18.02.2014 в 09:46.
Старый 18.02.2014, 10:16   #9  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от macklakov Посмотреть сообщение
Ну хотя бы like в запрос запихайте. И код отформатируйте по человечески. Глаза режет.
спасибо за советы...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: Lookup form returning more than one value Blog bot DAX Blogs 0 29.01.2010 18:05
palleagermark: Use keyboard lookup in Product Builder enumerated fields Blog bot DAX Blogs 0 18.08.2009 23:06
gatesasbait: How to define a custom lookup form for an extended datatype Blog bot DAX Blogs 0 09.07.2008 22:05
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07

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

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

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