Страница 1 из 1

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

Добавлено: 14 янв 2014, 12:35
edward_K
Шаблон 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

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

Добавлено: 16 янв 2014, 14:56
Masygreen
эээ .. что с этим делать ?

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

Добавлено: 16 янв 2014, 17:45
RAJAH
Masygreen писал(а):эээ .. что с этим делать ?
Запускать! Изображение