Интерфейс selprojs.vip (Проекты) Назад В начало Вперед
//==============================================================================

objInterface SS_Events;
end;

//==============================================================================

vipInterface SelStages implements SS_Events;

//==============================================================================

interface SelProjects 'Проекты';
  show at (6,6,75,25)

create view as

select
  Projects.Stage,
  Projects.ProjectID,
  Projects.ProjectName,
  Projects.ResponsID,
  Projects.AuthorID,
  Projects.ProjectData,
  Projects.ProjectMoney,
  Personal.PersonID,
  Personal.Name,
  Personal.DepID,
  Deps.DepID,
  Deps.DepName

from	 
  Personal,
  Projects,
  Personal  PersonalA,
  Deps	DepsA

where
(( 
	Projects.ResponsID == Personal.PersonID 
  and Projects.AuthorID  == PersonalA.PersonID
  and Personal.DepID	 == Deps.DepID	
  and PersonalA.DepID	== DepsA.DepID
))
;

var
  action: word;
  pID   : comp;
  viSS  : SelStages;
  persNameFormat: longInt;

//------------------------------------------------------------------------------

tabbedSheet tsProjects;
  show at (,,,10);

//------------------------------------------------------------------------------

browse brSelProjs 'Таблица проектов';
  table Projects;

fields
  ProjectName   'Название проекта' : [30], noProtect;
  Personal.Name 'Ответственный'	: [20], pickButton;
  ProjectMoney  'Стоимость проекта': [20];
end;

//------------------------------------------------------------------------------

screen scrSelProjs 'Информация о проекте';
  table Projects;

fields
  ProjectName   :	 noProtect;
  Personal.Name : [20], pickButton;
  PersonalA.Name: [20], pickButton;
  Deps.DepName  :	 protect;
  DepsA.DepName :	 protect;

<<
  Название проекта
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  Ответственный сотрудник	 Автор
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  Ответственный отдел		 Отдел автора
  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
end;

//------------------------------------------------------------------------------

embedded scrSelStage 'Проекты по этапам' interface viSS;
end;
end;

//------------------------------------------------------------------------------

screen scrStage 'Стадия проекта';
  show at (,11,,14);
  table Projects;

fields
  Projects.Stage : NoProtect;

<<
	 (.)  Разработка`
	 (.)  Кодирование`
	 (.)  Тестирование`
>>
end;

//------------------------------------------------------------------------------

panel panText;
  show at (,15,,);

text
  ProjectData;
end;

//------------------------------------------------------------------------------

handleEvent

cmInit:
{
  // Регистрация формата 'PersName' - такой-же как и в SelPers.
  persNameFormat := DNDRegisterFormat('PersName');

  // Эти поля могут принимать данные
  DNDFieldAcceptDrag(brSelProjs,  #Personal.Name);
  DNDFieldAcceptDrag(scrSelProjs, #Personal.Name);
  DNDFieldAcceptDrag(scrSelProjs, #PersonalA.Name);
  DNDFieldAcceptDrag(brSelProjs,  #Projects.ProjectName);
  DNDFieldAcceptDrag(scrSelProjs, #Projects.ProjectName);
}

cmDragEnter: // Что-то хотят перетащить в поле ...
{
  case DNDCurField of
	#Personal.Name,
	#PersonalA.Name:
	if (DNDQueryGetData(persNameFormat) = S_OK) // если данные формата 'PersName',
		DNDSetDropEffect(DROPEFFECT_LINK); 	// то могу подцепить !

	#Projects.ProjectName : 
	if (DNDQueryGetData (CF_TEXT) = S_OK)	 // если текстовые данные,
		DNDSetDropEffect(DROPEFFECT_COPY); 	// то могу скопировать !
  end;
}

cmDragOver: // Продолжается перетаскивание (cmDragEnter прошел успешно)
{
  if (DNDCurField = #ProjectName)
  {
	if DNDCheckKeyState(MK_SHIFT)
	DNDSetDropEffect(DROPEFFECT_COPY)   // Могу скопировать 
	else
	DNDSetDropEffect(DROPEFFECT_MOVE);
  }
}

cmDrop: // Бросили. Выесняем куда и считываем данные в нужное поле.
{
  if DNDCheckKeyState(MK_SHIFT)
  {
	UpdateTable;
	ClearBuffer (tnProjects);
  }

  case DNDCurField of
	#Personal.Name:
	{
	DNDGetData(persNameFormat, Projects.ResponsID);
	set Projects.ResponsID := Projects.ResponsID;

	if DNDCheckKeyState(MK_SHIFT)
		insert current Projects;

	DNDSetDropEffect(DROPEFFECT_LINK);
}

	#PersonalA.Name:
	{
	DNDGetData(PersNameFormat, Projects.AuthorID);
	set Projects.AuthorID := Projects.AuthorID;

	if DNDCheckKeyState(MK_SHIFT)
		insert current Projects;

	DNDSetDropEffect(DROPEFFECT_LINK);
}

	#Projects.ProjectName:
	{
	DNDGetData(CF_TEXT, Projects.ProjectName);
	set Projects.ProjectName := Projects.ProjectName;

	if DNDCheckKeyState(MK_SHIFT)
		insert current Projects;

	// это необходимо сделать, чтобы источник знал, что произошло.
	// иначе ему не придёт событие cmAfterEndDrag:
	DNDSetDropEffect(DROPEFFECT_COPY);
}
  end;

  RescanPanel(tnProjects);
}

cmPick:
{
  var res : word;

  case CurField of

	#Personal.Name:
	res := RunInterface('SelPers', Projects.ResponsID);

	#PersonalA.Name:
	res := RunInterface('SelPers', Projects.AuthorID);
  else
	res := cmCancel;
  end;

  if (res <> cmCancel)
	RescanPanel(tnProjects);
}

cmUpdateRecord:
  update current Projects;

cmDeleteRecord:
  delete current Projects;

cmInsertRecord:
  insert current Projects;

end;

end.