21.09.2008, 09:58 | #261 |
Участник
|
Решил поделиться одной нужной кнопочкой.
У себя я её прикрутил к Tabax-у. Если нужно потрэйсить где ошибка, то приходиться открывать репозитарий, искать класс Info и ставить на методе Add точку останова. Хоть и занимает пару секунд, но с какой-нибудь нужной мысли может сбить. А так не надо касаться клавиатуры и времени меньше занимает. X++: void clicked() { container bpCon; container newBpCon; str path = "\\Classes\\Info\\add"; int i; boolean isDelete; ; bpCon = infolog.breakpoint(); newBpCon += conpeek(bpCon,1); for(i=1; i<conlen(bpCon); i+=3) { if(conpeek(bpCon,i+1) != path) { newBpCon += [conpeek(bpCon,i+1)]; newBpCon += [conpeek(bpCon,i+2)]; newBpCon += [conpeek(bpCon,i+3)]; } else isDelete = true; } if(isDelete) { infolog.breakpoint(newBpCon); info("Снята точка останова с Info\Add"); } else { newBpCon += [path]; newBpCon += [11]; newBpCon += [true]; info("Установлена точка останова на Info\Add"); infolog.breakpoint(newBpCon); } } Последний раз редактировалось miklenew; 21.09.2008 в 10:06. |
|
|
За это сообщение автора поблагодарили: mazzy (2), belugin (5), vc (1), Link (1), alex55 (1). |
22.09.2008, 15:34 | #262 |
Участник
|
Цитата:
приходиться открывать репозитарий, искать класс Info и ставить на методе Add точку останова
|
|
|
За это сообщение автора поблагодарили: mazzy (10), coolibin (1). |
22.09.2008, 16:26 | #263 |
Участник
|
|
|
23.09.2008, 12:10 | #264 |
Участник
|
Цитата:
Сообщение от miklenew
Решил поделиться одной нужной кнопочкой.
У себя я её прикрутил к Tabax-у. Если нужно потрэйсить где ошибка, то приходиться открывать репозитарий, искать класс Info и ставить на методе Add точку останова. Хоть и занимает пару секунд, но с какой-нибудь нужной мысли может сбить. А так не надо касаться клавиатуры и времени меньше занимает. Очень удобно... PS на 4.0 не проверял. |
|
23.09.2008, 16:38 | #265 |
Administrator
|
Этот подход имеет один существенный недостаток - он не дает самому использовать классы SysInfoAction для собственных нужд. А пользователям очень нравится переходить в инфологе сразу к записи.
В 4.0 поступили по-другому. Там сделали кнопку Правка, которая ведет к месту, откуда была вызвана функция info/error/warning. При этом эта кнопка работает, если не используется механизм SysInfoAction. Т.о. разрекламированный переход к коду - на самом деле используется не везде. Со своей стороны, мне непонятно - почему нельзя было в 4.0 сделать ОТДЕЛЬНУЮ кнопку Стек вызовов и добавить в табличку SysInfolog поле - контейнер со стеком вызвов. Тогда стек вызовов работал бы независимо от механизма SysInfoAction. Правда - в этом случае пришлось бы подправить большее количество методов в классе Info (+форма инфолога+табличка инфолога). Зато фишка была бы качественнее
__________________
Возможно сделать все. Вопрос времени |
|
23.09.2008, 16:46 | #266 |
Участник
|
Цитата:
он не дает самому использовать классы SysInfoAction
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 | #267 |
Участник
|
Кнопка Включения/Выключения Breakpoint в классе Info
Надеюсь miklenew не будешь против что я выложил твой код в виде plugin для tabax.
Приложенную папку и изображение необходимо разместить в папке tabax\plugs |
|
|
За это сообщение автора поблагодарили: belugin (5), Link (1). |
24.09.2008, 19:50 | #268 |
Участник
|
|
|
09.10.2008, 16:09 | #269 |
Британский учённый
|
Как альернативу кнопке в Табаксе, могу предложить кнопку на самой форме с аналогичной функциональностью.
Так же добавленна возможность открывать точки останова клавишей BackSpace. Или по двойному щелчку левой кнопки мышки. Модификация для Ax 4, думаю перенести на другую версию труда не составит
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
16.10.2008, 00:53 | #270 |
Участник
|
Если кто-то использует Tabax + AxPath для AX 2009 - см. приложение.
В нем обновленная dll, которая будет работать в новой версии системы. |
|
01.11.2008, 17:29 | #271 |
Участник
|
Никак не могу заставить работать AxPath на DAX 4.0.
Файл регистрации никаких действий не производит А при попытке перехода по ссылке выдается сообщение: Невозможно отобразить страницу Эта страница сейчас недоступна. Возможно, это вызвано техническими проблемами на веб-узле, или требуется изменение параметров обозревателя. |
|
01.11.2008, 17:35 | #272 |
Участник
|
А то, что Иван добавил не работает?
|
|
03.11.2008, 08:42 | #273 |
Участник
|
В том то и дело, что мне нужна версия dll для 4.0, везде искал, есть только для 3-шки и 2009.
|
|
03.11.2008, 09:13 | #274 |
Участник
|
|
|
03.11.2008, 11:31 | #275 |
Участник
|
Неправильно прописаны пути в реестре к текущей конфигурации.
Это, насколько я помню, все, что я поменял. Для 4ки, думаю, они отличаются от 5ки и 3ки. Исходники в архиве, который AndyD изначально выкладывал - я поищу, если не найдешь сам. Но вроде где-то в инете они точно |
|
|
За это сообщение автора поблагодарили: belugin (4), Stainless (1). |
26.11.2008, 14:58 | #276 |
Участник
|
В DAX 4.0 cтолкнулся с ситуацией, когда в Windows для "non-Unicode programs" выбран не русский язык. В этом случае, русский языковой файл от tabax показывает кракозябры. Чтобы работало правильно, я перекодировал файл ru.txt в Unicode и в процедуре "LoadLanguageFile" заменил AsciiIO на TextIO.
|
|
|
За это сообщение автора поблагодарили: belugin (5). |
18.12.2008, 16:56 | #277 |
MCTS
|
Отключил вызов метода autoHeight из applyChanges, уменьшил высоту панели "руками". С включенным autoHeight были видны 2 избыточных горизонтальных полосы под вкладками Tabax'a.
|
|
16.04.2009, 15:21 | #278 |
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). |
16.04.2009, 15:28 | #279 |
Боец
|
Так если есть объект датасорса, потенциально известно, сколько записей он содержит:
Или я не заметил тонкости? 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 | #280 |
Участник
|
DSPIC, так будет долго и нарушится позиционирование
sukhanchik, лучше такое плагином |
|
Теги |
tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами |
|
|