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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2009, 15:21   #1  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,289 / 3495 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Подсчет количества записей
Решил поделиться небольшой кнопкой подсчета количества записей в активном датасорсе (т.е. в том датасорсе, к которому привязано текущее выбранное поле)
Умеет считать количество записей во временной таблице и в таблице, в которой записи отфильтрованы по диналинкам. При подсчете код ориентируется на SysQuery::countTotal

X++:
void clicked()
{
    FormRun              formRun = element.currentFormRun();
    FormObjectSet        formObjectSet;
    FormDataSource       formDS;
    Counter              cnt;
    Common               copyCursor;
    Query                copyQuery;
    int                  i;
    QueryBuildDataSource qbds;
    ;
    if (!formRun)
    {
        return;
    }
    formObjectSet = formRun.objectSet();
    if (!formObjectSet)
    {
        return;
    }
    formDS = formObjectSet.cursor().dataSource();
    if (formRun.objectSet().cursor().isTmp())
    {
        copyCursor = new DictTable(formRun.objectSet().cursor().TableId).makeRecord();
        copyCursor.setTmp();
        copyCursor.setTmpData(formRun.objectSet().cursor());
        select firstonly firstfast recId from copyCursor;
        if (copyCursor)
        {
            cnt = SysQuery::countTotal(formDS.queryRun(), copyCursor);
        }
    }
    else
    {
        copyQuery = new Query(formDS.queryRun().query().pack(false));
        for (i = 1; i <= formDS.queryRun().query().dataSourceCount(); i++)
        {
            qbds = formDS.queryRun().query().dataSourceNo(i);
            if (qbds.dynalinkCount())
            {
                SysQuery::queryAddDynaCursorAsRangeAndValue(copyQuery, formDS.queryRun().query(), i);
            }
        }
        cnt = SysQuery::countTotal(new QueryRun(copyQuery));
    }
    info(strfmt("%1 записей", cnt));
}
Здесь мне пришлось немного поправить стандартный код, но его при желании можно откопировать в форму табакса:
Класс SysQuery:
X++:
private server static container countPrim(container _queryPack, Common _tmpBuffer = null) // Корректный подсчет кол-ва записей во временной таблице
{
    Query                   countQuery;
    QueryRun                countQueryRun;
    QueryBuildDataSource    qbds;
    QueryBuildFieldList     qbfl;
    Common                  common;
    Integer                 counter;
    Integer                 loops;
    ;
    countQueryRun   = new QueryRun(_queryPack);
    countQuery      = countQueryRun.query();
    qbds            = countQuery.dataSourceNo(1);
    qbds.update(false);
    qbds.sortClear();
    qbfl = qbds.fields();
    qbfl.dynamic(false);
    qbfl.clearFieldList();
    if (countQuery.dataSourceCount() == 1)
        qbds.addSelectionField(fieldnum(Common,RecId),SelectionField::Count);

    countQueryRun   = new QueryRun(countQuery);
    // Корректный подсчет кол-ва записей во временной таблице -->
    if (_tmpBuffer)
    {
        countQueryRun.setCursor(_tmpBuffer);
    }
    // Корректный подсчет кол-ва записей во временной таблице <--

    while (countQueryRun.next())
    {
        common  = countQueryRun.get(countQuery.dataSourceNo(1).table());
        counter += common.RecId;
        loops++;
    }

    return [counter,loops];
}
и

X++:
public client server static Integer countTotal(QueryRun _queryRun, Common _tmpBuffer = null)// Корректный подсчет кол-ва записей во временной таблице

{
    container c = SysQuery::countPrim(_queryRun.pack(false), _tmpBuffer);

    return conpeek(c,1);
}
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 16.04.2009 в 15:24.
За это сообщение автора поблагодарили: belugin (5), alex55 (1).
Теги
tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
[ANN] Sidax 0.3.6 - многоцелевая боковая панель для Axapta belugin DAX: База знаний и проекты 104 30.06.2008 11:32
axaptafreak: Tabax: tabbed Axapta interface !!!! Blog bot DAX Blogs 0 10.11.2006 01:14
Панель задач в Аксапте wb DAX: Программирование 14 18.04.2006 17:13
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:47.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.