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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.11.2007, 02:05   #1  
kitty is offline
kitty
Участник
 
364 / 26 (1) +++
Регистрация: 24.05.2005
проблема с display методом
Есть форма, на ней нужно сделать "накопительное поле" ну то есть в первой строке Поле = значение Field1 первой записи , во второй строке уже Поле = значение Field1 первой записи + значение Field1 второй записи и тд. Те как бы в каждой строке значение является суммой значения некоторого поля из текущей строки + из предыдущих строк над ней в гриде. Сделала, работает. Делаю то же самое в другом месте - раюотает, но странно: суммирует не с первой строки грида , а откуда-то из середины, доходит до нижней строки, а потом переходит к верхней и спускается все также накапливая сумму вниз. В дебаггере вижу. что первой строкой в Display метод передается не та строка, что верхняя самая в гриде. Решила, что дело в сортировке, сделала принудительную по RecID (для верности и конкретности). Но результате вывожу формируемый запрос - он в init и exQuery с сортировкой, на момент вызова display вывожу - тот же самый все с той же сортировкой, в грид выводятся записи тоже отсортированными по этому полю, но вот в display опять первой передается некая совершенно другая запись, причем даж не понятно почему именно она, на гриде она отображается ниже середины грида.
От чего зависит какая запись datasource-а передается в display-метод первой?
PS: Датасоурс на форме один.
PPS: Склоняюсь к тому, чтобы просчитывать значения заранее в соответствии с конкретной сортировкой, складывать значения в map, в потом в display ток выводить их, но как-то это искусственно и хотелось бы разобраться с причиной происходящего.
Старый 28.11.2007, 06:36   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kitty Посмотреть сообщение
От чего зависит какая запись datasource-а передается в display-метод первой?
От текущей сортировки.

Вообще говоря, в базе данных нет понятия первая запись.
Первая запись может быть только в упорядоченной выборке (важны оба слова).

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

Первую запись формы нельзя получить и на уровне формы. Потому что форма получает далеко не все записи, а только некий буфер.

Накопительные итоги можно сделать, если вы определите понятие "первая запись" и привяжете это понятие к каким-нибуцдь общим понятиям. Например, первый месяц года, первый день месяца, первый по алфавиту, первый с начала деятельности предприятия. Только в этом случае можно говорить о быстрой работе системы при показе накопительных итогов. В остальных случаях вам придется делать тотальный перебор записей в выборке (а их может быть очень много).

Посмотрите как сделаны накопительные итоги в форме Сальдо по периодам, которую можно получить из плана счетов.
__________________
полезное на axForum, github, vk, coub.
Старый 28.11.2007, 10:31   #3  
kitty is offline
kitty
Участник
 
364 / 26 (1) +++
Регистрация: 24.05.2005
Цитата:
Первую запись формы нельзя получить и на уровне формы. Потому что форма получает далеко не все записи, а только некий буфер.
Я мож чего-то недопонимаю, но когда мы форму открываем, то показывается "первая верхняя " выборка все равно, открывается же форма не на середине.... потом да, пусть кусками подгружает...
Цитата:
Первая запись может быть только в упорядоченной выборке (важны оба слова).
Выборку насильно упорядочиваю в init , вы хотите сказать, что не смотря на то, что в запросе стоит order by выборка все равно возвращается неупорядоченной? Почему они тогда в форме отображаются упорядоченными в соответствиии с заданной сортировкой? Грид переупорядочивается заново? Странно было б как-то ..
Старый 28.11.2007, 10:44   #4  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Код посмотреть можно?
Старый 28.11.2007, 11:57   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
1. Я бы на RecId не завязывался - это раз. Он может иметь различные значения, и вовсе не упорядоченные.
2. Я бы добавил поле в таблицу типа Int или int64 (если записей оочень много, что врядли).
3. Сортировку сделал бы по этому полю в порядке возрастания. Создал бы соответствующий индекс (это пригодиться еще и на шаге 4), и указал бы его в свойствах источника данных.
4. Создал бы дисплей метод на уровне таблицы, который бы возвращал сумму значений всех записей таблицы, у которых значение добавленного поля меньше значения этого поля у текущей записи. (меньше или равно, в зависимости от ваших требований)
5. Метод этот скорее всего закэшировал бы (нужно уже смотреть, как работать будет в обоих случаях).
Тогда сортировка не была бы привязана к "порядку выборки".
Но при этом пользователю запрещено было бы сортировать записи по другим полям, или же фильтровать их.
Старый 28.11.2007, 12:59   #6  
kitty is offline
kitty
Участник
 
364 / 26 (1) +++
Регистрация: 24.05.2005
всем спасибо
Ивану: я recid использовала, только чтоб понять в чем дело. Поля добавлять не хочу тк придется жестко закладываться на сортировку плюс(а если кой-то девелопер решит ее в форме поменять?? ) + сколько мест вызова формы столько полей как я понимаю придется и добавлять, точней даже кол-во мест * 2 (инкремент + баланс - на каждый вызов).
решила тем, что после super в exQuery формирую map а в display вывожу его результаты. Минус в отсутствии у пользователя позможности сортировки, но в вашем варианте, как я понимаю, такой же минус будет. Еще интересную вещь заметила. что если поставить infolog в display, то почему-то он вызывается 21 раз, хотя строчек в гриде 11, причем в произвольном порядке почему-то записи ds туда попадают.
Старый 29.11.2007, 19:24   #7  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
?
Формирование map при вызове executeQuery кажется оптимальным вариантом.
Цитата:
Минус в отсутствии у пользователя позможности сортировки
Неужели нет никаой формировать учитывать пользовательскую сортировку?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с EDIT методом и гридом Delfins DAX: Программирование 1 23.01.2007 21:36
Сортировка поля на форме, который отображается Display методом IvanS DAX: Программирование 10 06.12.2006 14:54
Проблема с Edit методом PavelSR DAX: Программирование 12 09.06.2006 10:55
Как воспользоваться display методом таблицы??? VES DAX: Программирование 3 02.04.2003 17:47

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

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

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