Репозитарий

База знаний

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

Ответить
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Репозитарий

Сообщение m0p3e »

Понадобилось тут ресурс в базу без купленного репозитария добавить. Решил набросать простенький интерфейсик и ... увлекся. :)
Вроде все работает, но сильно не тестировал.

Код: Выделить всё

#component "U_Poor"

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                      Интерфейс выбора модуля                                     \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Interface PoorGetComponentModule 'Выберите модуль' ( ,,sci1EnEsc ) DoAccept, EscClose, Cyan;
Show At ( ,,50,10 );
Create View
Var cModule : comp;

As Select *
From ComponentModules

Where ((
         0 << ComponentModules.owner
      ))
;
Parameters cModule;

Browse brw;
Table ComponentModules;
 Fields
  ComponentModules.ExeName     'Наименование' : [ 15 ], Protect;
  ComponentModules.Description 'Описание'     : [ 35 ], Protect;
End; //browse

HandleEvent
cmInit :
 {
  If Getfirst ComponentModules Where (( cModule == ComponentModules.atl_nrec )) = tsOk
    ReReadRecord ( #ComponentModules );
 }; //cmInit
cmDefault :
 {
  cModule := ComponentModules.atl_nrec;
 }; //cmDefault
End;
END.

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                Интерфейс выбора группы компонентов                               \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Interface PoorGetComponentGroup 'Выберите группу компанентов' ( ,,sci1EnEsc ) DoAccept, EscClose, Cyan;
Show At ( ,,50,10 );
Create View
Var cGroup : comp;

As Select *
From Components
 Where ( Components.Flags and 1 ) > 0
;
Parameters cGroup;

Browse brw;
Table Components;
 Fields
  Components.Name    'Наименование группы' : [ 15 ], Protect;
  Components.Comment 'Описание'            : [ 35 ], Protect;
End; //browse

HandleEvent
cmInit :
 {
  If Getfirst Components Where (( cGroup == Components.atl_nrec )) = tsOk
    ReReadRecord ( #Components );
 }; //cmInit
cmDefault :
 {
  cGroup := Components.atl_nrec;
 }; //cmDefault
End;
END.


///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                    Интерфейс выбора пользователя                                 \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Interface PoorGetUser 'Выберите пользователя' ( ,,sci1EnEsc ) DoAccept, EscClose, Cyan;
Show At ( ,,50,10 );
Create View
Var cUser : comp;

As Select *
From x$users;

Parameters cUser;

Browse brw;
Table x$users;
 Fields
  x$users.xu$UserOffice 'Офис'        : [  3 ] ,Protect;
  x$users.xu$loginname  'Сетевое имя' : [ 15 ], Protect;
  x$users.xu$FullName   'Полное имя'  : [ 35 ], Protect;
End; //browse

HandleEvent
cmInit :
 {
  If Getfirst x$users Where (( cUser == x$users.atl_nrec )) = tsOk
    ReReadRecord ( #x$users );
 }; //cmInit
cmDefault :
 {
  cUser := x$users.atl_nrec;
 }; //cmDefault
End;
END.


///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                      Основной интерфейс                                          \\
// Components.Flags:                                                                                \\
// 1 бит: 0 - ресурс, 1 - группа                                                                    \\
// 2 бит: 0 - системный, 1 - пользователя ( не уверен )                                             \\
// 3 бит: 1 - критичность высокая                                                                   \\
// 4 бит: 1 - критичность низкая                                                                    \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Interface Repo4Poor 'Репозиторий' ( ,,sci1478EnEscTree ) EscClose, Cyan;
Create View
Var cNode : comp;

As Select *
From Components
    ,ComponentModules
    ,Components loComponents
    ,Components upComponents
    ,ComponentUsers
    ,ComponentUsers vComponentUsers
    ,x$users

Where ((
        cNode                   == Components.owner
    and Components.atl_nrec     == loComponents.owner
    and Components.ModuleCode   == ComponentModules.atl_nrec
    and Components.atl_nrec     == ComponentUsers.ResCode
    and ComponentUsers.UserCode == x$users.atl_nrec
    and Components.owner        == upComponents.atl_nrec
      )) order by Components.Priority
;

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                   Окно редактирования ресурса                                    \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Window EditResource 'Свойства ресурса' ( ,,sci1Esc ), Blue, Dialog;
Show At ( ,,76,12 );

TabbedSheet Tabs;

Screen scrR 'Ресурс';
Table Components;
Fields
 Components.name : noProtect;
 Components.Resource : noProtect, PickButton;
 TranslatePath ( Components.Resource ) : Skip;
 upComponents.name ( ,,sci13Esc ) : Protect, PickButton;
 Components.Priority : noProtect;
 ComponentModules.ExeName ( ,,sci13Esc ) : Protect, PickButton;
 Components.Flags : [ LIST 'Низкая', 'Средняя', 'Высокая' ], Protect;
 Components.Version : noProtect;
 Components.Copyright : noProtect;
 Components.Comment : noProtect;
<<

  Компонент:    .@@@@@@@@@@@@@@@@@@@@@@@@@
  Ресурс:       .@@@@@@@@@@@@@@@@@@@@@@@@@
                .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  Входит в:     .@@@@@@@@@@@@@       Приоритет:   .@@@@@@
  Система:      .@@@@@@@@@@@@@       Критичность: .@@@@@@@@@@@@@@@@@@@@@@@
  Версия:       .@@@@@@@@@
  Производитель:.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  Описание:     .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End; //screen

Screen scrG 'Группа';
Table Components;
Fields
 Components.name : noProtect;
 upComponents.name ( ,,sci13Esc ) : Protect, PickButton;
 Components.Version : noProtect;
 Components.Copyright : noProtect;
 Components.Comment : noProtect;
<<

  Группа:       .@@@@@@@@@@@@@@@@@@@@@@@@@
  Входит в:     .@@@@@@@@@@@@@
  Версия:       .@@@@@@@@@
  Производитель:.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  Описание:     .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End; //screen

HandleEvent
cmPick :
 {
  Case CurField Of
    #ComponentModules.ExeName :
     {
      If RunInterface ( 'PoorGetComponentModule', Components.ModuleCode ) = cmDefault
        RescanPanel ( #Components );
     }
    #upComponents.name :
     {
      var c : comp;
      c := Components.owner;
      If RunInterface ( 'PoorGetComponentGroup', c ) = cmDefault
        set Components.owner := c;
     };
    #Components.Resource :
     {
      var Path : string;
      Path := GetFileName ( '*.*', 'Выберите ресурс' );
      If trim ( Path ) <> ''
        set Components.Resource := trim ( Path );
     };
  End;
 }
End;

Procedure MakeWindow;
{
 SelectFormat ( If ( ( Components.Flags and 1 ) = 0, ScrR, ScrG ) );
 SetTabbedSheetVisible ( scrR, ( Components.Flags and 1 ) = 0 );
 SetTabbedSheetVisible ( scrG, ( Components.Flags and 1 ) = 1 );
}; //Procedure MakeWindow

Procedure SetCriticalList;
{
 var i : array [ 1..3 ] of word;
 i[1] := ( Components.Flags and 1 ) + ( Components.Flags and 2 ) + 8;
 i[2] := ( Components.Flags and 1 ) + ( Components.Flags and 2 ) + 4;
 i[3] := ( Components.Flags and 1 ) + ( Components.Flags and 2 );
 var n : array [ 1..3 ] of string;
 n[1] := 'Низкая';
 n[2] := 'Высокая';
 n[3] := 'Средняя';
 SetEnumList ( scrR, #Components.Flags, n, i );
}; //Procedure SetCriticalList

Browse brwR 'Права доступа';
Table ComponentUsers;
 Fields
  [vUser]  If ( isValid ( tnx$users ), x$users.xu$loginName, 'Общий' ) ( ,,sci1378Esc ) : [ 50 ], Protect, PickButton;
  [vRight] If ( ComponentUsers.DenyFlag, 'запрещен', 'разрешен' ) : [ 15 ], Protect, PickButton;
End; //brose

End; //TabbedSheet

HandleEvent
cmInit :
 {
  MakeWindow;
 }; //cmInit
End;

End; //window

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                                                                                  \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
TableEvent Table ComponentUsers;
 cmSetDefault :
  {
   ClearBuffer ( #ComponentUsers );
    ComponentUsers.GroupCode := 0;
    ComponentUsers.UserCode := 0;
    ComponentUsers.Flags := 0; //приоритет низкий
    ComponentUsers.DenyFlag := false;
    SetModified ( true );
  };
 cmCheckRecord :
  {
   If ( GetFirst vComponentUsers Where (( ComponentUsers.ResCode  == vComponentUsers.ResCode
                                      and ComponentUsers.UserCode == vComponentUsers.UserCode ))
                                      and ComponentUsers.atl_nrec <> vComponentUsers.atl_nrec ) = tsOk
    {
     Message ( 'Дублирование записи!' );
     Abort;
    };
  };
 cmPick :
  {
   Case CurField Of
    #vUser
             : {
                var c : comp;
                c := ComponentUsers.UserCode;

                If RunInterface ( 'U_Poor::PoorGetUser', c ) = cmDefault
                  set ComponentUsers.UserCode := c;
               };
    #vRight
             : set ComponentUsers.DenyFlag := not ComponentUsers.DenyFlag;
   End;
  };
 cmInsertRecord : Insert Current ComponentUsers;
 cmUpdateRecord : Update Current ComponentUsers;
 cmDeleteRecord : If Message ( 'Удалить запись?', YesNo ) = cmYes
                   Delete Current ComponentUsers;
End; //TableEvent ComponentUsers


///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                          Основное окно                                           \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Tree trRepo 'Репа' ( ,,sci1478EscExTreeI );
Table Components;
 Fields
  Components.Name          'Компонент' : [ 20 ], Protect;
  If ( isValid ( tnloComponents ), '', Components.Resource )
                           'Ресурс'    : [ 30 ], Protect;
  Components.Priority      'Приоритет' : [  6 ], noProtect;
  ComponentModules.ExeName 'Система'   : [ 10 ], Protect;
End;

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                                                                                  \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
TableEvent Table Components;
 cmTreeTop      : cNode := 0;
 cmTreeUp       : cNode := Components.owner;
 cmTreeDown     : cNode := Components.atl_nrec;
 cmTreeNodeType : {
                   If ( Components.Flags and 1 ) = 0
                     TreeSetNodeType ( trRepo, 2 );
                  };
 cmTreeNeedOwner: If Components.owner <> 0
                    TreeJumpToRecord ( trRepo, Components.owner )
                   else
                    TreeJumpToRecord ( trRepo, 0 );
 cmUpdateRecord :
  {
   If Update Current Components = tsOk
     TreeJumpToRecord ( trRepo, Components.atl_nrec );
  }
 cmSetDefault :
  {
   ClearBuffer ( #Components );
    Components.Name  := 'Новый ресурс';
    Components.Flags := 10;
    SetCriticalList;
   RunWindowModal ( EditResource );
  };
 cmCheckRecord :
  {
   If trim ( Components.name ) = ''
    {
     Message ( 'Не задано наименование компонента!'#13 + 'Исправьте или удалите запись!', Error );
     Abort; Exit;
    };
   If ( Components.Flags and 1 ) = 0
   If trim ( Components.Resource ) = ''
    {
     Message ( 'Не задано наименование ресурса!'#13 + 'Исправьте или удалите запись!', Error );
     Abort; Exit;
    };
  };
 cmInsertRecord :
  {
   If Insert Current Components = tsOk
    {
     ClearBuffer ( #vComponentUsers );
      vComponentUsers.ResCode  := Components.Atl_nRec;
      vComponentUsers.DenyFlag := false;
     insert current vComponentUsers;
    };
  };
 cmDeleteRecord :
  {
   If GetFirst loComponents = tsOk
     Message ( 'Группа не пуста! Удалять нельзя!', Warning );
    else
     If Message ( 'Вы уверены, что хотите удалить ' + If ( ( Components.Flags and 1 ) = 0, 'компонент', 'группу' ) + ' из репозитория?', YesNo + mfSwapButtons ) = cmYes
      {
       Delete vComponentUsers Where (( Components.atl_nrec == vComponentUsers.ResCode ));
       Delete Current Components;
      };
  };
 cmPositionChanged :
  {
   SetCriticalList;
   MakeWindow;
  };
End; //TableEvent Components

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                                                                                  \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
HandleEvent
cmInit :
 {
  cNode := 0;
 }; //cmInit
cmDefault :
 {
  RunWindowModal ( EditResource );
 }; //cmDefault
cmEdit :
 {
  PutCommand ( cmDefault );
 };
cmInsLevel :
 {
  ClearBuffer ( #Components );
   Components.name  := 'Новая группа';
   Components.Flags := 1;
  RunWindowModal ( EditResource );
 };
End;
END.

///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//                                Добавление в меню отчетов пользователя                            \\
///////////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#include UserReport.vih

VipInterface UserReport_Repo4Poor
  Implements F_UserReport::IUserReport
  Licensed(Free)
;

interface UserReport_Repo4Poor;

create view
  var
    Dummy: Byte;
;

procedure Run;
begin
  RunInterfaceNoModal ( 'U_POOR::Repo4Poor' );
end;

function GetReportName: String;
begin
  Result := 'Репозитарий';
end;

function GetGroupName ( Level: Word ): String;
begin
  Result := '';
end;

function GetPriority: Integer;
begin
  Result := 0;
end;

function VisibleInModule(Ind: Byte): String;
begin
  Result := '';
  case Ind of
    1: If Pr_CurUserAdmin Result := '*';
  end;
end;

end.
За убитые репозитарии ответственности не несу! :)
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Репозитарий

Сообщение Masygreen »

может ты еще саппорт с блэкджеком и .. хм .. свой напишешь ?? ))
Время ведет!
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Репозитарий

Сообщение m0p3e »

Masygreen писал(а):может ты еще саппорт с блэкджеком и .. хм .. свой напишешь ?? ))
Ленивый я... Подстегивать надо! :)
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Репозитарий

Сообщение Maverick »

Серега, давай лучше СЭД на ВИПе на пару сваяем ))
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Репозитарий

Сообщение m0p3e »

Maverick писал(а):Серега, давай лучше СЭД на ВИПе на пару сваяем ))
А оно кому-то надо?
Сейчас компании поголовно на САП да на 1С бегут. Печально все.
RAJAH
Местный житель
Сообщения: 931
Зарегистрирован: 18 фев 2008, 12:49

Re: Репозитарий

Сообщение RAJAH »

m0p3e писал(а):Сейчас компании поголовно на САП да на 1С бегут. Печально все.
С нынешней политикой корпорации, прохладно относящейся к уровню своей репутации, это совсем неудивительно: как было низкое качество обновлений, так эту проблему никто и не решает. Сколько лет занимаюсь "Галактикой", ещё ни разу стабильной работы после установки патчей не замечал: 10 багов лечим, 10 добавляем. К тому же чуть ли не единственное преимущество перед 1С - вменяемое планирование ресурсов - конкуренты постепенно нивелируют, добавляя в свой продукт ERP-функции.
Ответить