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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.09.2008, 16:38   #1  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,286 / 3494 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DocSerzh Посмотреть сообщение
Рекомендую http://www.axaptapedia.com/Infolog_stack_trace...
Очень удобно...

PS на 4.0 не проверял.
Этот подход имеет один существенный недостаток - он не дает самому использовать классы SysInfoAction для собственных нужд. А пользователям очень нравится переходить в инфологе сразу к записи.

В 4.0 поступили по-другому. Там сделали кнопку Правка, которая ведет к месту, откуда была вызвана функция info/error/warning. При этом эта кнопка работает, если не используется механизм SysInfoAction. Т.о. разрекламированный переход к коду - на самом деле используется не везде.

Со своей стороны, мне непонятно - почему нельзя было в 4.0 сделать ОТДЕЛЬНУЮ кнопку Стек вызовов и добавить в табличку SysInfolog поле - контейнер со стеком вызвов. Тогда стек вызовов работал бы независимо от механизма SysInfoAction. Правда - в этом случае пришлось бы подправить большее количество методов в классе Info (+форма инфолога+табличка инфолога). Зато фишка была бы качественнее
__________________
Возможно сделать все. Вопрос времени
Старый 22.09.2008, 15:34   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
приходиться открывать репозитарий, искать класс Info и ставить на методе Add точку останова
Можно проще - Shift + F9 там можно просто включать или отключать галочкой нужную точку. У меня там всегда болтается точка в info->add.
За это сообщение автора поблагодарили: mazzy (10), coolibin (1).
Старый 22.09.2008, 16:26   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Можно проще - Shift + F9 там можно просто включать или отключать галочкой нужную точку. У меня там всегда болтается точка в info->add.
Не проще, поэтому и сделал такую штуку.
Старый 23.09.2008, 16:46   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
он не дает самому использовать классы SysInfoAction
Дает. В последней версии он даже работает при существущих других Info actions. В таких случаях окошко трейса появляется если удерживать Ctrl.


If the record has an action already, you can see stacktrace by holding Ctrl button while clicking on the action button.
Старый 24.09.2008, 16:57   #5  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
Кнопка Включения/Выключения Breakpoint в классе Info
Надеюсь miklenew не будешь против что я выложил твой код в виде plugin для tabax.

Приложенную папку и изображение необходимо разместить в папке tabax\plugs
Вложения
Тип файла: rar DEV_ToggleInfoBreakpoint.rar (5.5 Кб, 127 просмотров)
За это сообщение автора поблагодарили: belugin (5), Link (1).
Старый 24.09.2008, 19:50   #6  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Stainless Посмотреть сообщение
Надеюсь miklenew не будешь против что я выложил твой код в виде plugin для tabax.
Не против. Я ж не жлоб.
Старый 09.10.2008, 16:09   #7  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Как альернативу кнопке в Табаксе, могу предложить кнопку на самой форме с аналогичной функциональностью.

Так же добавленна возможность открывать точки останова клавишей BackSpace.
Или по двойному щелчку левой кнопки мышки.

Модификация для Ax 4, думаю перенести на другую версию труда не составит
Вложения
Тип файла: xpo Form_SysBreakpoints.xpo (18.9 Кб, 433 просмотров)
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 16.10.2008, 00:53   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Если кто-то использует Tabax + AxPath для AX 2009 - см. приложение.
В нем обновленная dll, которая будет работать в новой версии системы.
Вложения
Тип файла: rar axpath.rar (21.8 Кб, 138 просмотров)
Старый 01.11.2008, 17:29   #9  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
Никак не могу заставить работать AxPath на DAX 4.0.
Файл регистрации никаких действий не производит
А при попытке перехода по ссылке выдается сообщение:
Невозможно отобразить страницу
Эта страница сейчас недоступна. Возможно, это вызвано техническими проблемами на веб-узле, или требуется изменение параметров обозревателя.
Старый 01.11.2008, 17:35   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А то, что Иван добавил не работает?
Старый 03.11.2008, 08:42   #11  
Stainless is offline
Stainless
Участник
MCBMSS
Columbus IT
 
34 / 114 (4) +++++
Регистрация: 26.01.2007
В том то и дело, что мне нужна версия dll для 4.0, везде искал, есть только для 3-шки и 2009.
Старый 03.11.2008, 09:13   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Stainless Посмотреть сообщение
В том то и дело, что мне нужна версия dll для 4.0, везде искал, есть только для 3-шки и 2009.
А они вроде по одинаковому должны работать...

Кстати, Вань, ты там что менял и где исходники?
Старый 03.11.2008, 11:31   #13  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Неправильно прописаны пути в реестре к текущей конфигурации.
Это, насколько я помню, все, что я поменял.

Для 4ки, думаю, они отличаются от 5ки и 3ки.
Исходники в архиве, который AndyD изначально выкладывал - я поищу, если не найдешь сам. Но вроде где-то в инете они точно
За это сообщение автора поблагодарили: belugin (4), Stainless (1).
Старый 26.11.2008, 14:58   #14  
Максимка is offline
Максимка
Участник
 
19 / 23 (1) +++
Регистрация: 28.06.2006
В DAX 4.0 cтолкнулся с ситуацией, когда в Windows для "non-Unicode programs" выбран не русский язык. В этом случае, русский языковой файл от tabax показывает кракозябры. Чтобы работало правильно, я перекодировал файл ru.txt в Unicode и в процедуре "LoadLanguageFile" заменил AsciiIO на TextIO.
За это сообщение автора поблагодарили: belugin (5).
Старый 18.12.2008, 16:56   #15  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Отключил вызов метода autoHeight из applyChanges, уменьшил высоту панели "руками". С включенным autoHeight были видны 2 избыточных горизонтальных полосы под вкладками Tabax'a.
Старый 16.04.2009, 15:21   #16  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,286 / 3494 (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).
Старый 16.04.2009, 15:28   #17  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Так если есть объект датасорса, потенциально известно, сколько записей он содержит:
Или я не заметил тонкости?

X++:
for ( localInventTable = inventTable_ds.getFirst() ? inventTable_ds.getFirst() : inventTable_ds.cursor();
          localInventTable ;
          localInventTable = inventTable_ds.getNext())
    {
        info (strFmt("%1", localInventTable.ItemId));
        recordCount ++; // <--------
    }
Т.е. я к тому, что не обязательно связываться с кверёй, и делать поправку на временную таблицу.
Старый 16.04.2009, 16:16   #18  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
DSPIC, так будет долго и нарушится позиционирование

sukhanchik, лучше такое плагином
Старый 16.04.2009, 16:55   #19  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1235 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
DSPIC, так будет долго и нарушится позиционирование
Про быстродействие согласен, будет медленно при очень большом кол-ве записей. Но позиционирование не нарушает. Вы, наверное, спутали _ds.getFirst с _ds.first(), и для next соотв-но ?
Старый 16.04.2009, 18:44   #20  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,286 / 3494 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
2DSPIC: То, что Вы указали - абсолютно верно. Потенциально действительно все известно.
Но реально - получить эту информацию (особенно актуально для временных таблиц либо таблиц, на которые пользователи наложили свой фильтр) - может только человек, который окунется в дебри Х++.

Мне такая фишка потребовалась при обработке и итерационной выверке данных - где нужно быстро оценивать - сколько осталось необработанных данных, сколько можно пройтись джобиком, сколько можно пройтись вручную.

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

Кстати - по поводу временных таблиц. Я с определенной уверенностью считаю, что штатное отсутствие возможности посмотреть их содержимое или посчитать кол-во записей - есть неудобство в системе. Можно конечно сказать что с т.з. идеологии это неверно и т.д. Но учитывая, как легко (!) делается квери по временной таблице или как легко таблица как бы "копируется" в датасорс - можно только удивляться - почему такое несложное расширение не было реализовано.
Но... оставим филисофские рассуждения. Я лично считаю идеологически правильной расширение SysQuery::countTotal для временных таблиц.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 16.04.2009 в 18:53.
За это сообщение автора поблагодарили: DSPIC (3).
Теги
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:38.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.