Показать сообщение отдельно
Старый 16.09.2009, 17:42   #6  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Я такого метода не знаю. Но если программировать, придется чуток покорежить парочку классов.
Можно сделать более "тактичнее", но если делать "в лоб", то примерно вот так.
1. В BaseEnum SysPickListType добавить еще один элемент. Пусть он будет называться FieldsLabels.
2. В классе Global добавить еще один метод, почти такой же, как и метод pickField
X++:
static int pickFieldLabel(tableId tableId)
{
    Object  formRun;
    Args    args;
    ;
    args = new Args(formstr(SysPick));
    args.parm(strRFix(int2str(SysPickListType::FieldsLabels),2)+int2str(tableId));
    formRun = classfactory.formRunClass(args);
    formRun.init();
    formRun.run();
    formRun.wait();
    if (formRun.selection())
        return formRun.selection();
    return 0;
}
3. В класс sysPickList, по аналогии с методом fillFieldsMap, добавить еще один метод:
X++:
public static client container fillFieldsLabelsMap(str _argsParm)
{
    TmpSysTableField    tmpSysTableField;
    DictTable           dictTable       = new DictTable(str2int(_argsParm));
    Map                 map             = new Map(Types::Integer, Types::String);
    ;
    if (dictTable &&
        dictTable.rights() > AccessType::NoAccess)
    {
        tmpSysTableField = TmpSysTableField::findTableFields(tmpSysTableField, dictTable.id());

        while select tmpSysTableField
        {
            map.insert(tmpSysTableField.ExtendedFieldId, tmpSysTableField.FieldLabel);
        }
    }
    return map.pack();
}
4. В методе init этого же класса добавить примерно такие строки (в блоке switch(sysPickListType)):
X++:
//-------------
        case SysPickListType::FieldsLabels :
            imageRes    = #imageField;
            caption     = "@SYS3852";
            designWidth = #designLargeWidth;
            if (!map)
            {
                map = Map::create(sysPickList::fillFieldsLabelsMap(parmTxt));
            }
            break;
//-------------
5. Теперь можно попробовать вызвать наш новый метод:
X++:
    Global::pickFieldLabel(tableNum(InventTable));
За это сообщение автора поблагодарили: mazzy (2), lev (3), Poleax (5), propeller (1), abri (1), MazZzDaI (1).