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.