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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.10.2005, 15:35   #1  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Полный перебор строк FormListControl
Допустим есть уже заполненный FormListControl, хочеться сделать вывод, например в эксель(хотя не важно куда). На форуме нашел вот такой пример:

PHP код:
idx formListControl.getNextItem(FormListNext::All);

    while (
idx != -1)
    {
        for (
0<= colCountc++)
        {
            
formListItem formListControl.getItem(idxc);
            
cell                  ComExcelDocument_RU::numToNameCell(1i);
        
//...    
        //formListItem.text();
        //...
        
}
        
idx        formListControl.getNextItem(FormListNext::Allidx);
     } 
Но проблема в том, что после некоторого кол-ва записей(порядка 30), перебор прекращается. Опытным путем выяснилось, что если в FormListControl, пока он еще на форме, проскролить данные до самой последней записи, то он вернет все записи, ну или ~ столько сколько проскролить вниз. То есть, он каким то образом буферизирует данные и по мере скролинга подтягивает их. У этого контрола есть метод public final boolean scroll(int _dx, int _dy), но как им воспользоваться, ума не приложу
Старый 10.10.2005, 16:36   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Странно.

По идее сколько в него закачал - столько и получишь. Может быть какае-то хитрость при загрузке данных?
__________________
Axapta v.3.0 sp5 kr2
Старый 10.10.2005, 17:19   #3  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Изначально опубликовано AndyD
Может быть какае-то хитрость при загрузке данных?
Да вроде нет, это форма RLedgerSheet...Нужно вывести оборотку в эксель, если бы разобраться как перебрать FormListControl, то можно было бы получить довольно универсальный отчет. Но увы, как это сделать не совсем ясно...вот и сижу, ковыряю map из которого формируется ListView.
Старый 10.10.2005, 18:31   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Проверил RLedgerSheet - пробегаю по всем строкам turnoverAmount.

Возникло два вопроса
1.
Цитата:
for (c = 0; c <= colCount; c++)
colCount - это кол-во колонок? Если да то надовыбирать colCount-1

2. Сколько у вас счетов в запросе?
В Excel есть ограничение - 256 колонок максимум.
__________________
Axapta v.3.0 sp5 kr2
Старый 10.10.2005, 18:43   #5  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Изначально опубликовано AndyD

Возникло два вопроса
1.

colCount - это кол-во колонок? Если да то надовыбирать colCount-1
В целом так и делаю, только в другой части кода. То есть с этим понятно.

Цитата:
Изначально опубликовано AndyD

2. Сколько у вас счетов в запросе?
В Excel есть ограничение - 256 колонок максимум.
Колонок не много(5 или 8 не больше), проблема не в них.

Цитата:
Изначально опубликовано AndyD
Проверил RLedgerSheet - пробегаю по всем строкам turnoverAmount.
У меня выбрать все строки не получается, если не "проскролить" данные до конца, то выбирается только часть, причем маленькая...точно не могу сказать сколько(не установил от чего зависят конкретные цыфры), но чем больше экранов прокручиваю вниз, тем больше могу вытащить данных при переборе строк.

Сколько строк Вы пробовали перебрать? Если не сложно, попробуйте две, три сотни или даже больше.
Старый 10.10.2005, 22:23   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробовал пробежать по демоданным и выгрузить в Excel. Получилось более 200 строк и под 200 столбцов. Проблем не возникло.
__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2005, 08:58   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
По поводу Scroll попробуйте так
PHP код:
turnoverAmount.scroll(0turnoverAmount.getCount()*16); 
__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2005, 10:52   #8  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
:(
Некоторые наблюдения: метод getCount() по всей видимости должен возвращать кол-во строк. Так вот в моем случае он возвращает 31, столько и выгружается. Если "проскролить" контрол, то он возвращает уже больше. Увы, вариант вызвать метод scroll(), как Вы предложили не приводит ни к чему

getCount(), как до вызова scroll, так и после возвращает 31...Просто ерунда какая -то.
Старый 11.10.2005, 10:58   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Попробуйте подствить вместо getCount() число, заведомо большее чем кол-во строк и посмотрите, что будет.
__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2005, 11:06   #10  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Изначально опубликовано AndyD
Попробуйте подствить вместо getCount() число, заведомо большее чем кол-во строк и посмотрите, что будет.
Результат тот же...
Старый 11.10.2005, 11:07   #11  
Anais is offline
Anais
Участник
Аватар для Anais
 
182 / 10 (1) +
Регистрация: 16.06.2003
Адрес: Москва
Цитата:
Изначально опубликовано Lemming
getCount(), как до вызова scroll, так и после возвращает 31...Просто ерунда какая -то.
Да ни фига не ерунда. Контрол возвращает число элементов, о которых он знает - то есть число элементов, которое в его закачано, а не которое есть в базе. Равно такой же результать Вы получите, если попытаетесь узнать, число записей в результате запроса (оно будет равно числу просмотренных записей). Нормальная работа нормального _умного_ контрола - который не засасывает на память весь огромный массив данных из базы, но подсасывает только элементы, которые нужны (которые смотрит пользователь то бишь). А вы как хотели? Чтобы Вам всю память замусорили?
__________________
Улыбаемся и машем, парни! Улыбаемся и машем...
Старый 11.10.2005, 11:47   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Нормальная работа нормального _умного_ контрола - который не засасывает на память весь огромный массив данных из базы, но подсасывает только элементы, которые нужны (которые смотрит пользователь то бишь).
В данном случае это не так (я про "умный контрол"). formListControl ничего не знает о базе данных. Как было правильно замечено он отображает то, что в него было загружено. Загрузка данных происходит в наследниках класса RLedgerSheetEngine в методе fetchNextRows().

А тут автор вопроса уже невнимательно смотрел на эти методы, потому что, например, в классе RLedgerSheetEngine_AccountOrder (Журнал ордер/ведомость) есть такие строки

PHP код:
while(fetchQueryRun.next())
{
    ...
    
curNo ++;
    if (
curNo >= #BufferSize)
    
{
        
showTotal false;
        break;
    }    

__________________
Axapta v.3.0 sp5 kr2
Старый 11.10.2005, 12:01   #13  
Anais is offline
Anais
Участник
Аватар для Anais
 
182 / 10 (1) +
Регистрация: 16.06.2003
Адрес: Москва
Цитата:
Изначально опубликовано AndyD
В данном случае это не так (я про "умный контрол"). formListControl ничего не знает о базе данных. Как было правильно замечено он отображает то, что в него было загружено. Загрузка данных происходит в наследниках класса RLedgerSheetEngine в методе fetchNextRows().

А тут автор вопроса уже невнимательно смотрел на эти методы, потому что, например, в классе RLedgerSheetEngine_AccountOrder (Журнал ордер/ведомость) есть такие строки
...
Согласна. И все же, в итоге, имеем все тот же _умный_ контрол. Точнее, зд., "уму-разуму обученный"
__________________
Улыбаемся и машем, парни! Улыбаемся и машем...
Старый 11.10.2005, 12:18   #14  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Thumbs up
AndyD, Anais Спасибо!

Все, разобрался, как перед выводом собрать все данные.
Старый 20.12.2005, 19:45   #15  
Tuple is offline
Tuple
Участник
 
13 / 10 (1) +
Регистрация: 07.05.2003
Lemming, добрый вечер

Как Вы решили проблему? Мы у нас точно такая же ситуация.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Тормозит копирование строк в буфер обмена ivas DAX: Программирование 20 21.08.2007 15:05
Пользовательский генератор строк-перечислений...- 2: Доп.вкладка для SysQueryForm Gustav DAX: База знаний и проекты 1 04.05.2007 18:04
Очень маленькая высота строк в таблице формы (1-2 мм) Gustav DAX: Программирование 11 17.06.2006 11:57
Предельное количество строк в Report Владимир Максимов DAX: Программирование 1 22.12.2005 15:02
БАГ: копирование строк накладных в новый заказ Антон Солдатов DAX: Функционал 2 03.12.2004 09:02

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

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

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