Подключение "отчетов пользователя" через шаблон

База знаний

Модераторы: m0p3e, edward_K, Модераторы

Подключение "отчетов пользователя" через шаблон

Сообщение edward_K » Вт янв 14, 2014 12:35

Шаблон RS_UsrReports.vip
Код: Выделить всё
!не зя использовать сильно длинные названия фейсов >10
#include UserReport.vih

#IFDEF UserNameFaceDop
#IFDEF UserLongName
VipInterface UserReport_#SetMenuUserR#UserNameFace#UserNameFaceDop Implements
#ELSE
VipInterface UserReport_#UserNameFace#UserNameFaceDop Implements
#ENDIF
#Ifdef ComponentVersion
  F_UserReport::IUserReport
#Else
  IUserReport
#EndIf
#ifdef Atl51
licensed (FREE)
#end
;
#IFDEF UserLongName
Interface UserReport_#SetMenuUserR#UserNameFace#UserNameFaceDop;
#ELSE
Interface UserReport_#UserNameFace#UserNameFaceDop;

#ENDIF
#ELSE // #IFDEF UserNameFaceDop

#IFDEF UserLongName
  VipInterface UserReport_#SetMenuUserR#UserNameFace Implements
#ELSE
  VipInterface UserReport_#UserNameFace Implements
#ENDIF
#Ifdef ComponentVersion
  F_UserReport::IUserReport
#Else
  IUserReport
#EndIf
#ifdef Atl51
licensed (FREE)
#end
;

#IFDEF UserLongName
Interface UserReport_#SetMenuUserR#UserNameFace;
#ELSE
Interface UserReport_#UserNameFace;
#ENDIF

#ENDIF
#IFDEF _USEGROUPONLY_
create view vaaa
As Select  *
From TUNEGR,TuneGrUs
;
#ENDIF

!-------------------------------------------------------------------------------
// Запуск отчета на выполнение при выборе его из списка отчетов
procedure Run;
begin
! проверяем фильтр на права по группе
#DEFINE _USEGROUPONLYMES_
#IFDEF _USEGROUPONLY_
#include chkgroup.vpp
#ENDIF   
#Ifdef _USEGROUPONLY2_
#include chkgroup2.vpp
#EndIf
#UNDEF _USEGROUPONLYMES_
#IFDEF UserNameFORM
#IFDEF UserNameFaceVar
  RunForm('#UserNameFace',#UserNameFaceVar);
#ELSe
#IFDEF UserNameTEST
  message('form #UserNameFace')
#endif
  RunForm('#UserNameFace');
#ENDIF 
#ELSE //#IFDEF UserNameFORM
#IFDEF UserNameFaceVar
#ifdef Atl51
#Ifdef UserComponent
  RunInterface('#UserComponent::#UserNameFace',#UserNameFaceVar);
#Else
  RunInterface('#UserNameFace',#UserNameFaceVar);
#ENDIF 
#ELSE 
  RunInterface('#UserNameFace',#UserNameFaceVar);
#ENDIF 
#ELSe //#IFDEF UserNameFaceVar
#ifdef Atl51
#ifdef UserNameFaceModal
#Ifdef UserComponent
  RunInterface('#UserComponent::#UserNameFace');
#Else
  RunInterface(#UserNameFace);
#ENDIF 
#else
#Ifdef UserComponent
  RunInterfaceNoModal('#UserComponent::#UserNameFace');
#Else
  RunInterfaceNoModal(#UserNameFace);
#endif 
#endif 
#ELSe 
  RunAnyView('INTERFACE #UserNameFace',false);
//  RunInterface(#UserNameFace);
#endif
#ENDIF 
#ENDIF
if VisualizationActive Stopvisual('',0) ;
end;
!-------------------------------------------------------------------------------
// Наименование отчета в списке
function GetReportName: String;
begin
  GetReportName := #UserNameWnd;
end;
!-------------------------------------------------------------------------------
// Наименования групп, в которые входит отчет
// Группа n+1 делается подчиненной группе n
// В данном случае будет иерархия:
// [+] Группа 1
//     [+] Группа 2
//         Отчет 1
function GetGroupName (Level : Word) : String;
begin
  GetGroupName := '';
#ifDef UserMenuGroup
  case Level of
  1 : GetGroupName := #UserMenuGroup;
#Ifdef UserMenuGroup2
  2 : GetGroupName := #UserMenuGroup2;
#EndIf
  end;
#ENDIF
end;
!-------------------------------------------------------------------------------
// Приоритет отчета - сортировка внутри группы выполняется сначала
// по приоритету, а затем по наименованию
function GetPriority : Integer;
begin
  GetPriority := 0;
end;
!-------------------------------------------------------------------------------
// ModuleID модулей, в которых будет виден отчет
// '*' - отчет будет виден в любом модуле
function VisibleInModule(Ind : Byte) : String;
begin
  VisibleInModule := '';
#ifdef _ONLY_ADMIN_              //
  if(Not PR_CurUserAdmin) exit; //
#endif
#Define _USEGROUPONLYMES2_
#IFDEF _USEGROUPONLY_
!  message('1');
#include chkgroup.vpp
#ENDIF   

#Ifdef _USEGROUPONLY2_
#include ChkGroup2.vpp
!  message('2');
#EndIf
#UNDEF _USEGROUPONLYMES2_

  case Ind of
    1 : VisibleInModule := '#SetMenuUserR';
#IFDEF SetMenuUserR2   
    2 : VisibleInModule := '#SetMenuUserR2';
#ENDIF   
#IFDEF SetMenuUserR3   
    3 : VisibleInModule := '#SetMenuUserR3';
#ENDIF   
#IFDEF SetMenuUserR4   
    4 : VisibleInModule := '#SetMenuUserR4';
#ENDIF   
#IFDEF SetMenuUserR5   
    5 : VisibleInModule := '#SetMenuUserR5';
#ENDIF   
  end;
end;
!-------------------------------------------------------------------------------
end.

ChkGroup.vpp - для возможности проверки прав пользователя на отчет через принадлежность к группе пользователей в настройках (см модуль "Настройка" - "Настройка" - "Права доступа"
Код: Выделить всё
#IFDEF _USEGROUPONLY_
//'GRUSERTN.WGRINSEDIT.BRUSERGR.USERS.XU$LOGINNAME' -
   var wklgroup : boolean ;
   wklgroup:=false
   if getfirst TuneGrUs
   where (( UserId == TuneGrUs.cUser ))=0
    do {
//      message(UserId+'1')
      if getfirst TuneGr
       where ((TuneGrUs.cGr == TuneGr.nRec))=0
      {
        if pos('#_USEGROUPONLY_',TuneGr.NAME)>0
        { wklgroup:=true
          break ;
        }
      } 
    } while getnext TuneGrUs
    where (( UserId ==  TuneGrUs.cUser ))=0   ;
    if not wklgroup then
    {
#IFDEF _USEGROUPONLYMES_
      message('Пользователь не является членом группы #_USEGROUPONLY_'+chr(13)+
              'Модуль "Настройка"-"=Настройка="-"Права доступа"' )
      exit ;
#ENDIF
#IFDEF _USEGROUPONLYMES2_
      exit ;
#ENDIF
    }
#ENDIF   

ChkGroup2.vpp (вариация ChkGroup.vpp - без учета регистра в наименовании группы)
Код: Выделить всё
#IFDEF _USEGROUPONLY2_
//'GRUSERTN.WGRINSEDIT.BRUSERGR.USERS.XU$LOGINNAME' -
   var wklgroup2 : boolean ;
   wklgroup2:=false
   if getfirst TuneGrUs
   where (( UserId == TuneGrUs.cUser ))=0
    do {
//      message(UserId+'1')
      if getfirst TuneGr
       where ((TuneGrUs.cGr == TuneGr.nRec))=0
      {
        //if pos('#_USEGROUPONLY2_',TuneGr.NAME)>0
        if InStr(LoCase(TuneGr.NAME),LoCase('#_USEGROUPONLY2_'))>0
        { wklgroup2:=true
          break ;
        }
      } 
    } while getnext TuneGrUs
    where (( UserId ==  TuneGrUs.cUser ))=0   ;
    if not wklgroup2 then
    {
#IFDEF _USEGROUPONLYMES_
      message('Пользователь не является членом группы #_USEGROUPONLY2_'+chr(13)+
              'Модуль "Настройка"-"=Настройка="-"Права доступа"' )
      exit ;
#ENDIF
#IFDEF _USEGROUPONLYMES2_
      exit ;
#ENDIF
    }
#ENDIF   



Использование в проекте vip (я обычно создаю файл с именем проекта, расширение mnu)
Здесь пример для вызова интерфейса без параметров.
Для всех define лучше делать undef (для модуля например в конце объявления группы отчетов)
Код: Выделить всё
// *********************** Зарплата ************************
// модуль
#define SetMenuUserR MenuZarp
//===================================
// папка в отчетах пользователя
#define UserMenuGroup 'Отчеты'
//===================================
//===================================
// заголовок
#define UserNameWnd 'Мои отчеты по заработной плате'
// наименование интерфейса / формы (раскомментировать строки с UserNameFORM
// запуск формы 
// #define UserNameFORM
// определение параметров пример #define UserNameFaceVar 1,0,date(0,0,0),date(0,0,0),'',True
// для генерации повторного запуска интерфейса с другими параметрами требуется определить UserNameFaceDop
#define UserNameFace Zar_report
#make "RS_UsrReports.vip"
#undef UserNameWnd
// #undef UserNameFORM

#undef UserNameFace
//===================================
#undef UserMenuGroup

в запуск vip.exe следует добавить параметр "/b " для включения опции полной перекомпиляции без учета даты изменений интерфейса - в противном случае скомпилиться только первый пункт меню.
Детали по генерации списка отчетов смотрите в документации к Галактике в UserReport.pdf
edward_K
Заслуженный деятель интернет-сообщества
 
Сообщения: 5164
Зарегистрирован: Вт мар 29, 2005 17:49
Откуда: SPB galaxy spb
Reputation point: 115

Re: Подключение "отчетов пользователя" через шаблон

Сообщение Masygreen » Чт янв 16, 2014 14:56

эээ .. что с этим делать ?
Время ведет!
Masygreen
Местный житель
 
Сообщения: 1088
Зарегистрирован: Чт сен 04, 2008 11:27
Откуда: Москва
Reputation point: 26

Re: Подключение "отчетов пользователя" через шаблон

Сообщение RAJAH » Чт янв 16, 2014 17:45

Masygreen писал(а):эээ .. что с этим делать ?

Запускать! Изображение
RAJAH
Местный житель
 
Сообщения: 929
Зарегистрирован: Пн фев 18, 2008 13:49
Reputation point: 57


Вернуться в Опыт

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


cron