Реальный пример логической таблицы |
В работающем примере необходимо учитывать то факт, что задействованные объекты (таблицы) относятся к разным областям прикладной деятельности и, соответственно, к разным компонентам.
В рассматриваемом примере исполнители выбираются из числа сотрудников предприятия. Следовательно, эти данные относятся к подсистеме управления персоналом.
Таблица "Исполнители" в соответствии с проектными решениями выделена в подсистему "Ядро приложения". Подробнее см. раздел "Объектный интерфейс ресурса. ".
Поэтому вместо физических таблиц используются табличные объекты KatPersons и PrjExecutors, что помечается ключевым словом objref:
from objref KatPersons, objref PrjExecutors, Projects, synonym Projects Stages
Табличный объект PrjExecutors просто отображает таблицу за пределы своего компонента. Табличный объект KatPersons содержит сводную информацию по сотруднику. Фамилия, имя и отчество заменяются одной строкой "Фамилия и инициалы". Ссылки на каталоги должностей и подразделений разрешаются внутри объекта.
В результате пользователь табличного объекта KatPersons непосредственно получает названия подразделения и должности сотрудника: KatPersons.Department и KatPersons.Post.
Таблица "Исполнители" имеет два служебных поля, которые в нашем примере не учитываются. Чтобы отсечь лишние записи использованы фильтры по этим полям:
and (1 = PrjExecutors.MasterCode) and (0 = PrjExecutors.Status)
//****************************************************************************** // (c) корпорация Галактика // Демопроект 1.0 - Управление проектами // Интерфейс демонстрации описания логической таблицы //****************************************************************************** #include IKatPersons.vih #include IPrjExecutors.vih #component "C_PRJMNG" //****************************************************************************** interface LotDemo 'Описание логической таблицы' EscClose, Cyan; show at (0,0,79,25); create view as select KatPersons.FIO, KatPersons.Department, KatPersons.Post, Projects.Name, Stages.Name from objref KatPersons, objref PrjExecutors, Projects, synonym Projects Stages where (( root == KatPersons.FIO and (KatPersons.FIO <> 'Смирнов Ф.В.') and KatPersons.NRec == PrjExecutors.cEmployee (noIndex) and (1 = PrjExecutors.MasterCode) and (0 = PrjExecutors.Status) and PrjExecutors.cMaster == Stages.NRec and Stages.cProject == Projects.NRec )) ; //------------------------------------------------------------------------------ browse brwPersons 'Исполнители'; show at (1,1,78,10); table KatPersons; fields KatPersons.FIO #3'ФИО' : [15], protect; KatPersons.Department #3'Подразделение' : [15], protect; KatPersons.Post #3'Должность' : [15], protect; end; //------------------------------------------------------------------------------ browse brwProj 'Проекты'; show at (1,11,78); table PrjExecutors; fields Stages.Name #3'Этап' : [30], protect; Projects.Name #3'Проект' : [30], protect; end; end.