RepStaffUsage. Поток данных для отчета по исполнителям |
Файл: Example\Src\VIP\PrjMng\RepStaffUsage.vip
Издание 04.2007. Вызовы методов StartNewVisual и StopVisual перенесены из обработчика событий table в обработчик событий datastream.
Издание 01.2007. Добавлены директивы документирования.
Издание 01.2006. В интерфейсе формирования потока данных для отчета по исполнителям RepStaffUsage убран экран с кнопкой "Показать отчет". Запуск отчета перенесен из обработчика события cmShowRep в cmInit
Включен в проект начиная с издания 03.2005.
//****************************************************************************** // (c) корпорация Галактика // Демопроект 1.0 - Управление проектами // Поток данных для отчета по исполнителям //****************************************************************************** #include IKatPersons.vih #include IPRJEXECUTORS.vih #component "C_PRJMNG" //****************************************************************************** objInterface objRepStaffUsage; end; vipInterface RepStaffUsage implements objRepStaffUsage licensed(free); //------------------------------------------------------------------------------ table struct PersByDep ( NRec : comp, FIO : string, Department : string, Post : string ) with index ( byDep = Department+Post+FIO ); //------------------------------------------------------------------------------ table struct StaffUsage ( cPerson : comp, QuantP : double, SummP : double, PrjCode : string ) with index ( byCode = cPerson+PrjCode ); //****************************************************************************** #doc Поток данных для отчета по исполнителям. #end interface RepStaffUsage; create view var wMasterCode : word; // код текущего владельца ресурса sEnterprize : string; sDepChief : string; as select PersByDep.*, StaffUsage.* from PersByDep, StaffUsage, objref KatPersons, Projects, objref PrjExecutors where (( root == PersByDep.Department and PersByDep.NRec == StaffUsage.cPerson )) ; //============================================================================== datastream StaffUsageStream ( sEnterprize; sDepChief; table PersByDep ( [ psnFIO ] PersByDep.FIO; [ psnDepartment ] PersByDep.Department; [ psnPost ] PersByDep.Post; table StaffUsage ( [ suQuantP ] StaffUsage.QuantP; [ suSummP ] StaffUsage.SummP; [ suPrjCode ] StaffUsage.PrjCode; ); ); ) //------------------------------------------------------------------------------ handleEvent cmPreProcess: StartNewVisual(vtRotateVisual, vfTimer+vfBreak+vfConfirm, 'Формируется отчет', 0); cmPostProcess: StopVisual('', 0); end; //------------------------------------------------------------------------------ handleEvent table PersByDep cmOnProcess: if (not NextVisual) BreakProcess; end; //------------------------------------------------------------------------------ handleEvent table StaffUsage cmOnProcess: if (not NextVisual) BreakProcess; end; end; // datastream StaffUsageStream //============================================================================== handleEvent cmInit: { wMasterCode := resProject; sEnterprize := 'Концерн "Богатырь"'; sDepChief := 'Петраковский В.П.'; _loop KatPersons { PersByDep.NRec := KatPersons.NRec; PersByDep.FIO := KatPersons.FIO; PersByDep.Department := KatPersons.Department; PersByDep.Post := KatPersons.Post; if (insert current PersByDep = tsOk) {}; // заполняем StaffUsage - полный список проектов на каждого сотрудника _loop Projects where ((0 == Projects.cProject)) { if (getFirst PrjExecutors where (( wMasterCode == PrjExecutors.MasterCode and Projects.NRec == PrjExecutors.cMaster and resResourceTotal == PrjExecutors.Status and KatPersons.NRec == PrjExecutors.cEmployee )) = tsOK) { StaffUsage.cPerson := KatPersons.NRec; StaffUsage.QuantP := PrjExecutors.QuantP; StaffUsage.SummP := PrjExecutors.SummP; StaffUsage.PrjCode := Projects.Code; } else { StaffUsage.cPerson := KatPersons.NRec; StaffUsage.QuantP := 0; StaffUsage.SummP := 0; StaffUsage.PrjCode := Projects.Code; } if (insert current StaffUsage = tsOk) {}; } } RunFReport(StaffUsageStream, '', false); // только просмотр // RunFReport(StaffUsageStream, '', true); // редактор abort; } end; // handleEvent end.