|
![]() |
#1 |
Administrator
|
Этот подход имеет один существенный недостаток - он не дает самому использовать классы SysInfoAction для собственных нужд. А пользователям очень нравится переходить в инфологе сразу к записи.
В 4.0 поступили по-другому. Там сделали кнопку Правка, которая ведет к месту, откуда была вызвана функция info/error/warning. При этом эта кнопка работает, если не используется механизм SysInfoAction. Т.о. разрекламированный переход к коду - на самом деле используется не везде. Со своей стороны, мне непонятно - почему нельзя было в 4.0 сделать ОТДЕЛЬНУЮ кнопку Стек вызовов и добавить в табличку SysInfolog поле - контейнер со стеком вызвов. Тогда стек вызовов работал бы независимо от механизма SysInfoAction. Правда - в этом случае пришлось бы подправить большее количество методов в классе Info (+форма инфолога+табличка инфолога). Зато фишка была бы качественнее
__________________
Возможно сделать все. Вопрос времени |
|
![]() |
#2 |
Участник
|
Цитата:
приходиться открывать репозитарий, искать класс Info и ставить на методе Add точку останова
|
|
|
За это сообщение автора поблагодарили: mazzy (10), coolibin (1). |
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
Цитата:
он не дает самому использовать классы SysInfoAction
If the record has an action already, you can see stacktrace by holding Ctrl button while clicking on the action button. |
|
![]() |
#5 |
Участник
|
Кнопка Включения/Выключения Breakpoint в классе Info
Надеюсь miklenew не будешь против что я выложил твой код в виде plugin для tabax.
Приложенную папку и изображение необходимо разместить в папке tabax\plugs |
|
|
За это сообщение автора поблагодарили: belugin (5), Link (1). |
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Британский учённый
|
Как альернативу кнопке в Табаксе, могу предложить кнопку на самой форме с аналогичной функциональностью.
Так же добавленна возможность открывать точки останова клавишей BackSpace. Или по двойному щелчку левой кнопки мышки. Модификация для Ax 4, думаю перенести на другую версию труда не составит ![]()
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
![]() |
#8 |
Участник
|
Если кто-то использует Tabax + AxPath для AX 2009 - см. приложение.
В нем обновленная dll, которая будет работать в новой версии системы. |
|
![]() |
#9 |
Участник
|
Никак не могу заставить работать AxPath на DAX 4.0.
Файл регистрации никаких действий не производит А при попытке перехода по ссылке выдается сообщение: Невозможно отобразить страницу Эта страница сейчас недоступна. Возможно, это вызвано техническими проблемами на веб-узле, или требуется изменение параметров обозревателя. |
|
![]() |
#10 |
Участник
|
А то, что Иван добавил не работает?
|
|
![]() |
#11 |
Участник
|
В том то и дело, что мне нужна версия dll для 4.0, везде искал, есть только для 3-шки и 2009.
|
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Участник
|
Неправильно прописаны пути в реестре к текущей конфигурации.
Это, насколько я помню, все, что я поменял. Для 4ки, думаю, они отличаются от 5ки и 3ки. Исходники в архиве, который AndyD изначально выкладывал - я поищу, если не найдешь сам. Но вроде где-то в инете они точно ![]() |
|
|
За это сообщение автора поблагодарили: belugin (4), Stainless (1). |
![]() |
#14 |
Участник
|
В DAX 4.0 cтолкнулся с ситуацией, когда в Windows для "non-Unicode programs" выбран не русский язык. В этом случае, русский языковой файл от tabax показывает кракозябры. Чтобы работало правильно, я перекодировал файл ru.txt в Unicode и в процедуре "LoadLanguageFile" заменил AsciiIO на TextIO.
|
|
|
За это сообщение автора поблагодарили: belugin (5). |
![]() |
#15 |
MCTS
|
Отключил вызов метода autoHeight из applyChanges, уменьшил высоту панели "руками". С включенным autoHeight были видны 2 избыточных горизонтальных полосы под вкладками Tabax'a.
|
|
![]() |
#16 |
Administrator
|
Подсчет количества записей
Решил поделиться небольшой кнопкой подсчета количества записей в активном датасорсе (т.е. в том датасорсе, к которому привязано текущее выбранное поле)
Умеет считать количество записей во временной таблице и в таблице, в которой записи отфильтрованы по диналинкам. При подсчете код ориентируется на 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). |
![]() |
#17 |
Боец
|
Так если есть объект датасорса, потенциально известно, сколько записей он содержит:
Или я не заметил тонкости? X++: for ( localInventTable = inventTable_ds.getFirst() ? inventTable_ds.getFirst() : inventTable_ds.cursor(); localInventTable ; localInventTable = inventTable_ds.getNext()) { info (strFmt("%1", localInventTable.ItemId)); recordCount ++; // <-------- } |
|
![]() |
#18 |
Участник
|
DSPIC, так будет долго и нарушится позиционирование
sukhanchik, лучше такое плагином |
|
![]() |
#19 |
Боец
|
Цитата:
DSPIC, так будет долго и нарушится позиционирование
|
|
![]() |
#20 |
Administrator
|
2DSPIC: То, что Вы указали - абсолютно верно. Потенциально действительно все известно.
Но реально - получить эту информацию (особенно актуально для временных таблиц либо таблиц, на которые пользователи наложили свой фильтр) - может только человек, который окунется в дебри Х++. Мне такая фишка потребовалась при обработке и итерационной выверке данных - где нужно быстро оценивать - сколько осталось необработанных данных, сколько можно пройтись джобиком, сколько можно пройтись вручную. Ваш пример очень быстро "сломается" при оценке даже порядка 500 записей. А мой пример - нет. Плюс он легко вставляется в табакс (или оформляется плагином - по желанию) и превращается в одну легкую универсальную кнопочку, которой может пользоваться человек, не залезая в дебри Х++. При этом учитываются все (как я себе представляю) "особые" ситуации вроде диналинков или временных таблиц. Кстати - по поводу временных таблиц. Я с определенной уверенностью считаю, что штатное отсутствие возможности посмотреть их содержимое или посчитать кол-во записей - есть неудобство в системе. Можно конечно сказать что с т.з. идеологии это неверно и т.д. Но учитывая, как легко (!) делается квери по временной таблице или как легко таблица как бы "копируется" в датасорс - можно только удивляться - почему такое несложное расширение не было реализовано. Но... оставим филисофские рассуждения. Я лично считаю идеологически правильной расширение SysQuery::countTotal для временных таблиц.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 16.04.2009 в 18:53. |
|
|
За это сообщение автора поблагодарили: DSPIC (3). |
Теги |
tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|