Показать сообщение отдельно
Старый 30.03.2006, 10:19   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Lightbulb Определить, через какую виртуальную компанию доступна таблица
Ниже приводится пример вспомогательного класса для определения, используется ли та или иная таблица через виртуальную компанию и если да, то через какую. Написан по мотивам этого обсуждения. Надеюсь, кому-нибудь кроме меня еще пригодится
X++:
class TableId2VirtualCompanyId
{
}
static boolean isTableVirtual(TableId _tableId)
{
    DataArea dataArea;
    ;

    return (select firstonly dataArea
            where dataArea.id == new DictTable(_tableId).makeRecord().dataAreaId).isVirtual;
}
static boolean isTableVirtualForCompany(TableId _tableId, CompanyId _companyId = curExt())
{
    return (TableId2VirtualCompanyId::getVirtualCompanyIdForCompany(_tableId, _companyId) != '');
}
static str getVirtualCompanyId(TableId _tableId)
{
    return new DictTable(_tableId).makeRecord().dataAreaId;
}
static str getVirtualCompanyIdForCompany(TableId _tableId, CompanyId _companyId = curExt())
{
    VirtualDataAreaList     virtualDataAreaList;
    TableCollectionList     tableCollectionList;
    SysDictTableCollection  dictTableCollection;
    TableName               tableName;
    ;

    while select virtualDataAreaList
        where virtualDataAreaList.id == _companyId
        join tableCollection from tableCollectionList
        where tableCollectionList.virtualDataArea == virtualDataAreaList.virtualDataArea
    {
        dictTableCollection = new SysDictTableCollection(tablecollectionlist.tableCollection);
        do
        {
            tableName = dictTableCollection.nextTable();
            if (tablename2id(tableName) == _tableId)
                return virtualDataAreaList.virtualDataArea;
        }
        while (tableName);
    }
    return '';
}
После определения кода виртуальной компании можно пробежаться по другим компаниям, в нее входящим, как описано здесь.
P.S. Спасибо Maxim Gorbunov за рецепт с DictTable

Последний раз редактировалось gl00mie; 31.03.2006 в 12:46.