Показать сообщение отдельно
Старый 17.12.2008, 15:08   #3  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Да уж, похоже эта функциональность не достаточно тестировалась, либо вообще не доделана.
Посмотрим на метод InventDimCtrl_Frm_OnHandIntercompany.dimFieldActive() :
X++:
container dimFieldsActive(InventDimParm _inventDimParm)
{
    int h,y,f;
    container visibleGrid;
    for (h=1;h<=conlen(this.dimFields());h++)
    {
        Y = InterCompanyInventDim::dim2dimParm(conpeek(this.dimFields(),h));
        f = InterCompanyInventDim::dimParm2dim(y);
        if (_inventDimParm.(y))
            visibleGrid += conpeek(this.dimFields(),f); // Ашипка! Д.б. "h"
    }
    return visibleGrid;
}
Во-первых, по использованию сразу двух конструкций подряд InterCompanyInventDim::dim2dimParm() и InterCompanyInventDim::dimParm2dim() становится понятно, что в методе dim2dimParm() все-таки подразумевается InventDim, а не InterCompanyInventDim. (Тогда, почему бы не использовать соотв. метод на таблице InventDim !?)
Во-вторых, явная "ашипка" при выборе элемента контейнера по fieldId, а не по счетчику.
В-третьих, если "углубиться" в this.dimFields(), приходим в InventDimGlobal.interCompanyDimFieldList() :
X++:
container interCompanyDimFieldList(boolean readNames = false)
{
    int             i,h;
    DictFieldGroup  dfg;
    DictTable       dt;
    ;
    if (readNames && fieldsName_read)
        return fieldsName;
    else if (!readNames && fields_read)
        return fields;
 
    if (xGlobal::isAOS() && xGlobal::clientKind() == ClientType::Client && AOSClientMode() == AOSClientMode::Thin)
    {
        if (readNames)
            fieldsName = InventDimGlobal::getServer_dimFieldList(readNames);
        else
            fields     = InventDimGlobal::getServer_dimFieldList(readNames);
    }
    else
    {
        dt = new DictTable(tablenum(InterCompanyInventDim));
        ...
Условие "if (xGlobal::isAOS() && xGlobal::clientKind() == ClientType::Client && AOSClientMode() == AOSClientMode::Thin)" удовлетворяет "обычному" сеансу AX, и в этом случае перечисляются поля InventDim. А до полей InterCompanyInventDim дело доходит только для специфичных случаев, в которых InterCompanyInventDim::dim2dimParm() будет работать некорректно. Путаница в общем...

В AX2009 - все то же самое.

Интересно, кто-нибудь вообще использовал/тестировал "TradeInterCompany" в AX4 и AX2009?