Показать сообщение отдельно
Старый 07.04.2009, 22:47   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Zabr Посмотреть сообщение
Вариант 1: сделать редактируемое поле фильтра прямо на форме - не удается сделать, т.к. не ясно какой расширенный тип данных использовать для выбора группы из выпадающего списка. Ведь таблица UserGroupInfo - системная, и в свойстах тип данных не отображается. В списке расширенных типов ничего подходящего не нашел. Косвенное подтверждение невозможности это сделать - отсутствие в интерфейсе каких-либо мест, где бы группа пользователей именно выбиралась в поле из выпадающего списка, а не перетаскивалась мышкой, как в настройке прав.
Если бы даже такого типа и не было, то кто мешает вам создать собственный?

Цитата:
Сообщение от Zabr Посмотреть сообщение
Вариант 2: использовать стандартный расширенный фильтр. Для этого добавляю на форму еще 2 датасорса: sysuserinfo и usergroupinfo, но ничего не выходит. Как их нужно связать, чтобы можно было использовать стандартный фильтр? В фильтре эти датасорсы видны, только если джойнить их по inner-join, но тогда в гриде полная фигня ("размножаются" записи), а если джойнить другими способами - в расширенном фильтре этих таблиц не видно.
Для работы расширенного фильтра с системными таблицами, придется допилить функционал

Связано это с тем, что для определения названия таблиц используется функция tableId2Name(), которая для системных возвращает пустую строку.

Собственно, допиливание заключается в замене вызова этой функции на использование DictTable, т.е.
X++:
DictTable dt;
...
dt = new DictTable(relatedTableId);
xRefTableRelation.relatedTableName = dt.name();
//вместо
//xRefTableRelation.relatedTableName = tableId2Name(relatedTableId);
Заменять надо в методе updateTableId() таблицы xRefTableRelation (где встречается tableId2Name). После этого, необходимо запустить обновление перекрестных ссылок с включенной галкой "Обновить модель данных"

Для корректной работы формы расширенного фильтра, такую же процедуру необходимо проделать в методе tableLabel() таблицы TmpSysTableField
X++:
static public LabelType tableLabel(TableId _tableId)
{
    LabelType labelType = tableId2pName(_tableId);
    DictTable dt;
    ;

    if (!labelType)
    {
        dt = new DictTable(_tableId);
        labelType = dt.name();
//        labelType = tableId2Name(_tableId);
    }

    return labelType;
}
Вот и все.

Добавлять новые датасорсы на существующие формы не надо. Достаточно будет сделать это стандартным способом: непосредственно в фильтре по правой кнопке мышки
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Zabr (2), sukhanchik (5), Logger (3), plumbum (1).