30.03.2006, 10:19
|
#1
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Определить, через какую виртуальную компанию доступна таблица
Ниже приводится пример вспомогательного класса для определения, используется ли та или иная таблица через виртуальную компанию и если да, то через какую. Написан по мотивам этого обсуждения. Надеюсь, кому-нибудь кроме меня еще пригодится 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.
|
|