|
20.01.2004, 18:36 | #1 |
Участник
|
Многоуровневый справочник
Недавно я убил немного времени чтобы создать многоуровневый справочник в Аксапта. Причем решение работает на MsSQL2000 и не используется рекурсия.
В группе дерева отображаются как элементы самой группы так и элементы вложенной подветви.Что у меня получилось можно посмотреть на вложенном скрин шоте. Если что обращайтесь. |
|
19.02.2007, 16:22 | #2 |
Участник
|
кстати про controlMethodOverloadObject.
можно ли использовать более одного обхекта обработчика одновременно (у меня не получилось) |
|
19.02.2007, 16:52 | #3 |
Участник
|
controlMethodOverloadObject это метод класса FormRun, поэтому у каждого его наследника может быть свой обработчик. Я делал у нескольких форм разные обработчики. Что касается моего классификатора, то если у формы уже был обработчик controlMethodOverloadObject, а я заменяю его своим, то естейственно первый обработчик действовать не будет. Я не нашел в Аксапте форм, которые используют controlMethodOverloadObject, поэтому это не существенно.
|
|
19.02.2007, 17:27 | #4 |
Administrator
|
SysDataAreaVirtual, например. Правда в ней вряд ли классификатор Ваш будет использоваться.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
20.02.2007, 10:15 | #5 |
Участник
|
|
|
20.02.2007, 10:40 | #6 |
Administrator
|
\Forms\SysDataAreaVirtual
X++: class FormRun extends ObjectRun { // ... SysListPanelRelationTable listPanel1; // ... } void init() { // ... listPanel1 = sysListPanelRelationTable::newForm(element, ... ); // .... } X++: static SysListPanelRelationTable newForm(FormRun formRun, ... ) { // ... SysListPanelRelationTable SysListPanel = SysListPanelRelationTable::construct(); // ... SysListPanel.parmFormRun(formRun); // ... SysListPanel.build(); // ... } X++: protected void build() { // ... formRun.controlMethodOverload(true); if (!formRun.controlMethodOverloadObject()) formRun.controlMethodOverloadObject(this); // ... } То есть два списка, в одном из которых перечислены выбранные элементы, а в другом - оставшиеся.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
20.02.2007, 12:11 | #7 |
Участник
|
Вы правы. Я не увидел, где formRun передается в класс. Оказывается вместо него element, что одно и тоже
X++: listPanel1 = sysListPanelRelationTable::newForm(element, ... ); |
|
21.02.2007, 14:27 | #8 |
Участник
|
Многоуровневый классификатор
Внимание!!! Проект содержит системный класс SysSetupFormRun. Будьте внимательны при импорте.
Краткое руководство по настройке классификатора: 1. Указать список форм, на которых будет использоваться классификатор на форме AbstractClassSetup. 2. Создать уровни классификатора на форме AbstractClassTree. Для этого необходимо выбрать форму, на вкладке обзор создать корневой уровень классификатора, а затем добавить остальные уровни на вкладке дерево. 3. Указать какие записи принадлежат каким классам, нажав кнопку "Открыть" на форме AbstractClassTree. После этого выделить требуемые записи и нажать кнопку "Добавить". 4. Чтобы выводилась информация о том, каким уровням пренадлежит запись необходимо в метод active источника добавить следующий код: (например, для InventTable) X++: AbstractClass::loadItemClassName(element.design().controlName('AbstractClassList'), TableNum(InventTable), inventTable.RecId); Принимаются любые замечания и пожелания. А также идеи по поводу того, как избавиться от последней модификации формы (добавление кода в метод active). Последний раз редактировалось Lucky13; 21.02.2007 в 15:19. |
|
|
За это сообщение автора поблагодарили: raz (6). |
21.02.2007, 17:46 | #9 |
Участник
|
Попробовал загрузить в 4-ку
Отругалось: Ошибка времени выполнения: В SysSetupFormRun (Объект), не найден исполнимый код метода "new". Трассировка стека (C)\Classes\SysSetupFormRun\new (C)\Classes\SysSetupFormRun\construct - line 13 (C)\Classes\ClassFactory\formRunClassOnClient - line 5 (C)\Classes\ClassFactory\FormRunClass - line 3 (C)\Classes\HelpGenerator\showURL (C)\Forms\SysInfologBrowser\Methods\executeAction - line 20
__________________
С уважением Шатохин Святослав. |
|
22.02.2007, 09:09 | #10 |
Участник
|
Не факт что в 4-ке класс SysSetupFormRun остался таким же как в 3.0. Если Вы просто загрузили проект, то возможны ошибки. Лучше взять код, добавленный мной в метод init данного класса (он отмечен) и добавить его в аналогичный метод в 4-ке. Ну и соответственно объявить все недостающие переменные. Если Вы именно так и сделали, то даже не знаю что посоветовать. Метод new не изменялся, менялся только init. В какой строке выдается ошибка?
|
|
22.02.2007, 13:22 | #11 |
Участник
|
Мне нехватает следующих функций:
1. strdelRight; 2. strleftpos; Можно их выложить? С SysSetupFormRun разобрался. Еще проблемы с методом Icon: не может найти идентификатор ресурса: 827. Пока подставил 0.
__________________
С уважением Шатохин Святослав. Последний раз редактировалось slava09; 22.02.2007 в 13:28. |
|
22.02.2007, 13:43 | #12 |
Участник
|
Цитата:
X++: static str strdelright(str s, int cnt) { return strdel(s, strlen(s)-cnt+1, cnt); } static str strdelleft(str s, int cnt) { return strdel(s, 1, cnt); } static int strLeftPos(str s, str ss) { return strfind(s, ss, 1, strlen(s)); } static int strRightPos(str s, str ss) { int len = strlen(s); ; return strfind(s, ss, len, -len); } static str strRight(str s, int p) { return substr(s, strlen(s)-p+1, p); } static str strMid(str s, int p1, int p2) { return substr(s, p1, p2-p1+1); } static str strLeft(str s, int p) { return substr(s, 1, p); } |
|
22.02.2007, 13:59 | #13 |
Участник
|
Спасибо. Помогло.
Теперь при добавлении записи в иерархию матюкается так: Сообщение (12:56:13) Невозможно создать запись в Ссылки абстрактного классификатора (AbstractClassReference). Запись уже существует.
__________________
С уважением Шатохин Святослав. |
|
22.02.2007, 14:34 | #14 |
Участник
|
Наверное эта запись уже добавлена в данный класс. Это ошибка. Выложил hotfix
|
|
22.02.2007, 16:04 | #15 |
Участник
|
Теперь при выборе элемента дерева (у меня это в справочнике номенклатур) ругается таким образом:
Сообщение (15:02:56) Недопустимая комбинация поля/поля ссылки.
__________________
С уважением Шатохин Святослав. |
|
22.02.2007, 16:15 | #16 |
Участник
|
А какое у Вас получилось название класса в дереве, который Вы выбираете?
Попробуйте импортировать вложенный файл, если не поможет может проблема в RecId? Я слышал что в 4-ке recID по другому считается. Последний раз редактировалось Lucky13; 22.02.2007 в 16:30. |
|
23.02.2007, 13:43 | #17 |
Участник
|
Помогло. А что делают кнопки "Вверх", "Вниз"?
__________________
С уважением Шатохин Святослав. |
|
24.02.2007, 18:26 | #18 |
Участник
|
|
|
26.02.2007, 13:03 | #19 |
Участник
|
Глючновато работает. Какие-то непонятные вещи делает...
__________________
С уважением Шатохин Святослав. |
|
26.02.2007, 14:00 | #20 |
Участник
|
Если Вы про кнопки Вверх/вниз, то они действительно немного глючные. Этот функционал добавлен недавно и я еще пока не до конца понимаю как все это должно работать. Изначальная задача - добавить возможность изменять порядок классов в дереве, но коды уровня должны сохранять первоначальный порядок.
|
|