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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.09.2008, 07:25   #1  
Vldmr is offline
Vldmr
Участник
 
11 / 10 (1) +
Регистрация: 26.06.2007
сортировка сотрудников (Axapta 3.0 EE SP 4 FP1 )
необходимо отсортировать сотрудников заданного подразделения на заданное число по должности, разряду и окладу.

пытаюсь реализовать подобным образом
X++:
RPayHrmOrganization = queryRun.get(tableNum(RPayHrmOrganization));//подраздел

while select EmplId from Empl//выбираем сотрудника
{ 
    //находим последнюю запись по сотр на заданное число заданного подразделения (записей по сотруднику может быть несколько)
    select firstonly rPayHistoryGeneral
        order by startDate desc, 
                 TransTime desc, 
                 hrmPositionId asc, 
                 tradeCategory asc
        where rPayHistoryGeneral.StartDate <= toDate &&
              rPayHistoryGeneral.hrmOrganizationId == RPayHrmOrganization.hrmOrganizationId &&
              empl.EmplId == rPayHistoryGeneral.number;

    ... to tempTable //загружаем данные по сотрудникам во временную таблицу и уже от туда выбираем отсортированные данные        
}
хотелось бы обойтись без использования временной таблицы ...
заранее благодарен за конструктивные предложения ...
Старый 25.09.2008, 09:02   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Учитывая способность Set к автоматической сортировке своих элементов, можно как-то так попробовать:
X++:
Set sortedEmpl = new Set(Types::Container);

sortedEmpl.add([, 
                , 
                , 
	        RecId    , 
		   ]);
Старый 25.09.2008, 12:14   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vldmr Посмотреть сообщение
хотелось бы обойтись без использования временной таблицы ...
Цитата:
Сообщение от Gustav Посмотреть сообщение
Учитывая способность Set к автоматической сортировке своих элементов, можно
Set - это конструкция живущая в свопе.
Не, не пойдет.
__________________
полезное на axForum, github, vk, coub.
Старый 25.09.2008, 13:09   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
RecordSortedList?
В нем порядок сортировки можно указать при инициализации
Старый 25.09.2008, 14:03   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от mazzy Посмотреть сообщение
Set - это конструкция живущая в свопе.
Не, не пойдет.
mazzy, что за приговор?
И что, вообще не пользоваться Set'ами теперь?

Цитата:
Сообщение от kashperuk Посмотреть сообщение
RecordSortedList?
Тоже пойдёт. Надо только иметь в виду, что таблицу можно указать только одну. Если поля выборки ограничены одной таблицей, то нормально.

Впрочем, если некоторые поля не будут задействованы, а требуется запомнить данные из других таблиц, то можно подобрать для хранения подходящие из незадействованных (ну и что, что в RecId, например, вес человека похраним? это ж временно )
Старый 25.09.2008, 14:21   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Gustav Посмотреть сообщение
mazzy, что за приговор?
И что, вообще не пользоваться Set'ами теперь?
Если я правильно понял mazzy - то он имел в виду - что Set - это конструкция, которая хранится в памяти (клиента или сервера - это как создашь). Сливать в Set табличку из БД, особенно - если табличка содержит в себе много записей - не есть хорошо, ибо оперативная память гораздо меньше по объему - нежели память на жестком диске - т.е. в этом случае временная табличка предпочтительнее Set-а, т.к. она хранится на диске.

Set-ами пользоваться можно... но не для хранения целых таблиц же...
Иначе будет как в том анекдоте - про японскую пилу и суровых сибирских мужиков...
__________________
Возможно сделать все. Вопрос времени
Старый 25.09.2008, 14:26   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Set-ами пользоваться можно... но не для хранения целых таблиц же...
Иначе будет как в том анекдоте - про японскую пилу и суровых сибирских мужиков...
Точно, спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 25.09.2008, 14:42   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Set-ами пользоваться можно... но не для хранения целых таблиц же...
Таблица таблице - рознь Судя по постановке, речь идёт в худшем случае об EmplTable, а в "менее худшем" - о подразделении, т.е. о подмножестве этой таблицы. Ну сколько записей попадает в фокус проблемы? Думаю, счёт вряд ли более, чем на сотни. Да даже пара-тройка тысяч - думаю, не вопрос для Set из контейнеров на 5-10 полей.
Старый 25.09.2008, 14:44   #9  
coolibin is offline
coolibin
Участник
 
264 / 68 (3) ++++
Регистрация: 07.04.2005
Цитата:
Сообщение от kashperuk Посмотреть сообщение
RecordSortedList?
В нем порядок сортировки можно указать при инициализации
то что Vldmr с помощью RecordSortedList так просто не сделать, потому как там у него сортировка вроде по полям разных таблиц. Но, с другой стороны, кто мешает набить RecordSortedList любыми нужными нам значениями? Например сделать RecordSortedList на основании таблицы EmplTable, а под те поля, которых нет в ней не было, использовать любые другие подходящие.
Старый 25.09.2008, 14:45   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Gustav Посмотреть сообщение
Судя по постановке, речь идёт в худшем случае об EmplTable
С чего это вы взяли? См. первое сообщение.
В нем участвует по крайней мере ТРИ таблицы. Среди них rPayHistoryGeneral
__________________
полезное на axForum, github, vk, coub.
Старый 25.09.2008, 14:56   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от coolibin Посмотреть сообщение
то что Vldmr с помощью RecordSortedList так просто не сделать, потому как там у него сортировка вроде по полям разных таблиц. Но, с другой стороны, кто мешает набить RecordSortedList любыми нужными нам значениями? Например сделать RecordSortedList на основании таблицы EmplTable, а под те поля, которых нет в ней не было, использовать любые другие подходящие.
Цитата:
Сообщение от Gustav Посмотреть сообщение
Надо только иметь в виду, что таблицу можно указать только одну. Если поля выборки ограничены одной таблицей, то нормально.

Впрочем, если некоторые поля не будут задействованы, а требуется запомнить данные из других таблиц, то можно подобрать для хранения подходящие из незадействованных (ну и что, что в RecId, например, вес человека похраним? это ж временно )
coolibin, наверное, долго не постили свой ответ
Цитата:
Сообщение от mazzy Посмотреть сообщение
С чего это вы взяли? См. первое сообщение.
В нем участвует по крайней мере ТРИ таблицы
Цитата:
Сообщение от Vldmr Посмотреть сообщение
X++:
//находим последнюю запись по сотр на заданное число заданного подразделения
т.е.для ОДНОГО сотрудника находим ОДНУ запись - и помещаем ее в "хранилище", о котором с нами человек и советуется
Старый 25.09.2008, 15:11   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Gustav Посмотреть сообщение
т.е.для ОДНОГО сотрудника находим ОДНУ запись - и помещаем ее в "хранилище", о котором с нами человек и советуется
Ок. Я тормоз. Согласен.

Но все равно использование структур, которые работают на клиенте/АОСе, трансфер данных с сервера на клиента/АОС мне не кажется правильным. Однако, предложений у меня нет, поэтому считаем мою критику неконструктивной и не рассматриваем
__________________
полезное на axForum, github, vk, coub.
Старый 25.09.2008, 15:27   #13  
coolibin is offline
coolibin
Участник
 
264 / 68 (3) ++++
Регистрация: 07.04.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Но все равно использование структур, которые работают на клиенте/АОСе, трансфер данных с сервера на клиента/АОС мне не кажется правильным.
Тащить можно не все данные, а только те, которые нужны для выполнения задачи, в данном случае, по которым нужна сортировка. Это не так и много.
Старый 26.09.2008, 05:31   #14  
Vldmr is offline
Vldmr
Участник
 
11 / 10 (1) +
Регистрация: 26.06.2007
Всем спасибо, воспользовался советом "Gustav", через Set, все прекрасно получилось. Уяснил для себя, что контейнер в Set сортируется последовательно, по всем полям.
P.S. Две таблици, сортировка по 2м полям. Кол-во записей 5, строк не более 4000 ...
Кто-нибудь может подсказать по вложенным запросам? Пытался реализовать эту конструкцию через вложенный запрос, что то вида:
X++:
while select EmplId from empl
         where RPayHrmOrganization.hrmOrganizationId == (select firstonly rPayHistory
               order by startDate desc,TransTime desc
               where Empl.EmplId == rPayHistoryLocal.Number &&
               rPayHistoryLocal.StartDate <= toDate).hrmOrganizationId
запрос возвращает null, на вскидку из-за двойного использования Empl.EmplId ...

Последний раз редактировалось Vldmr; 26.09.2008 в 05:42.
Старый 26.09.2008, 09:38   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Что-то у вас каша в запросе получилась.

Во-первых, Аксапта не делает вложенные запросы.

Во-вторых, не помню точно, как называется запрос такого вида, как вы сделали по rPayHistory, по-моему запрос по полю, но у него есть некоторые правила. Для его выполнения необходимо указать имя таблицы, по которой выполняется запрос, в точно так же, как и в AOT. Определять табличную переменную для этого запроса не требуется. В предложении Where в условиях для полей таблицы необходимо так же указывать не имя табличной переменной, а имя таблицы (в данном случае заменить rPayHistoryLocal на rPayHistory). В запросе в том виде, как приведено у вас, вообще может не уйти на сервер, если набранное в where вернет false (а оно будет расчитано по значениям табличных переменных еще до его отправки) или уйдет без where

В-третьих, даже если исправить, вы не получите то, что хотите
На сервер уйдет один запрос по rPayHistory, где rPayHistory.Number == "" (так как Empl обнулится перед выполнением).
А дальше идет запрос по Empl без Where, если значение в RPayHrmOrganization.hrmOrganizationId совпало с тем, что вернул предыдущий запрос. Или вооще ничего не уходит на сервер, если значения не совпали.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 26.09.2008 в 09:46.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX 4 SP2 FP1 EE xshaman DAX: Программирование 8 09.09.2008 15:13
Версия приложение после установки AX 4.0 SP2 FP1 EE IvanOFF DAX: Администрирование 4 04.07.2008 22:45
Как осуществить экспорт данных из Axapta 3.0 CIS SP3 в Axapta 3.0 CIS (без SP)? Кирилл DAX: Администрирование 3 24.05.2006 13:58
Axapta SP4 EE FP1 и Axapta SP4 EE polygris DAX: Администрирование 9 27.01.2006 11:27
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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