18.02.2014, 07:01 | #1 |
Участник
|
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(); Запись уже существует. Что это значит? Может как-то по-другому можно реализовать данную операцию MS DAX 2009 |
|
18.02.2014, 08:01 | #2 |
Участник
|
Попробуйте не insert(), а doInsert(). Возможно метод insert перекрыт на таблице и несмотря на то что таблица временная все равно что-то делает.
|
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
18.02.2014, 08:20 | #3 |
Участник
|
Не понимаю почему нельзя использовать стандартную lookup форму? Добавьте DS по DirPartyTable и возьмите от туда наименование, ну и свои условия дополнительные какие необходимы, и не нужно никаких временных таблиц и транзакций и работать будет быстрее.
__________________
Sergey Nefedov |
|
18.02.2014, 08:51 | #4 |
Участник
|
вы имеете ввиду Query? А как мне вытащить должность человека? и подразделение? они то идут из EmplTable... если бы в DirPartyTable наподобие метода name были бы методы для извлечения подразделения и должности... тогда да возможно, можно было бы и через фильтр сделать
|
|
18.02.2014, 08:51 | #5 |
Участник
|
|
|
18.02.2014, 09:01 | #6 |
Участник
|
Цитата:
В крайнем случае можете сделать свою лукап форму.
__________________
Sergey Nefedov |
|
18.02.2014, 09:44 | #7 |
NavAx
|
Ну хотя бы like в запрос запихайте. И код отформатируйте по человечески. Глаза режет.
__________________
Isn't it nice when things just work? Последний раз редактировалось macklakov; 18.02.2014 в 09:46. |
|
18.02.2014, 10:16 | #8 |
Участник
|
|
|
18.02.2014, 10:18 | #9 |
Участник
|
Цитата:
Сообщение от SRF
Я имею ввиду lookup форму EmplTableLookup, которая привязана к EDT EmplId, там в стандарте один DS подвешан EmplTable, добавьте к нему DirPartyTable ну и свои DS если нужны еще какие то данные из других таблиц(хотя из вопроса достаточно будет и exists join), ваш запрос рисуется минут за тридцать.
В крайнем случае можете сделать свою лукап форму. |
|
18.02.2014, 10:36 | #10 |
Ищущий знания...
|
Цитата:
Вот вы сделали что то свое, локальное. Которое будет работать в определенных случаях, отвечающих Вашим условиям, а стандарт уже нормально работать не будет. И если вдруг в будущем потребуется использование стандарта, Вам придется либо переделывать то что сделали раньше, либо "уходить дальше в лес" и городить ещё что нибудь свое. Иногда, лишние 20 минут, потраченные сейчас, экономят гораздо больше времени в будущем.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
18.02.2014, 11:34 | #11 |
Участник
|
Цитата:
Из кода вашего метода было понятно что вам нужны данные из 2 разных таблиц в одной лукап форме с возможностью сортировки и фильтрации, а этого можно добиться при помощи формы (ну и временной таблицы, что не всегда выгодно, при нескольких тысячах записей вы уже будет наблюдать подтормаживание при открытии лукапа, которое через некоторое время начнет раздражать пользователей). Прекрасно. Оно и заметно, потратить 30 минут на форму действительно много, гораздо лучше использовать DEL_* поля и метод лукап писать непосредственно на контролах, а потом копировать этот метод при необходимости
__________________
Sergey Nefedov |
|
18.02.2014, 14:13 | #12 |
Участник
|
Цитата:
Кроме этого, я знаю что все эти переписи лукап-методов нужно писать на уровне датасорсов (ох уж это академическое аксаптовское образование), но эта операция настолько редко встречается (в количестве одна штука), что ... ну это не первоочередная задача совсем. |
|
18.02.2014, 14:20 | #13 |
Участник
|
И ведь, даже туториала нет никакого... подскажите, где инфу взять? гугл обычно в таких вещах бессилен
|
|
18.02.2014, 14:43 | #14 |
Участник
|
Не сильное ли утверждение? ) lookup form in axapta Вторая ссылка идет на данный форум )
__________________
Sergey Nefedov |
|
19.02.2014, 06:09 | #15 |
Участник
|
Цитата:
Сообщение от SRF
Не сильное ли утверждение? ) lookup form in axapta Вторая ссылка идет на данный форум )
|
|
19.02.2014, 13:17 | #16 |
Участник
|
Цитата:
Сообщение от SRF
Не сильное ли утверждение? ) lookup form in axapta Вторая ссылка идет на данный форум )
|
|