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