Mемо-поле в табл.AOBJRIGHTS

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

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

Ответить
Irina_
Местный житель
Сообщения: 555
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Mемо-поле в табл.AOBJRIGHTS

Сообщение Irina_ »

Здравствуйте.
Надеюсь на вашу помощь в следующей задаче. Нужно разработать отчет по правам доступа пользователей к пунктам меню Галактики. Отчеты по теме, найденные в Support, не подходят вообще по многим причинам.
Нашла таблицу, в которой похоже хранится инфо: табл. AOBJRIGHTS (47). В ней мемо-поле VALUE, в котором виден список интерфейсов (например, L_MCU::KATMC, L_OSTATKI::TEKSALDO(0), L_SKLAD::COUNTSAL(1), др.), но нет наименования пункта меню. Есть ли возможность сопоставить наименованию интерфейса имя пункта меню? Может, инфо о соответствии хранится в какой-то таблице или есть ф-ция, которая по имени интерфейса возвращает наименование пункта меню или описание интерфейса?
KVS
Посетитель
Сообщения: 36
Зарегистрирован: 03 фев 2020, 10:38

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение KVS »

Добрый день.
Тоже задавался этим вопросом, выяснил только, что в этом поле хранится сортированный контейнер, однако выгрузить его в структуры ВИП'а для дальнейшей обработки не удалось - техподдержка сказала, что функции для этого есть, но они живут где-то в недрах атлантиса и для простых смертных недоступны.

В качестве решения сделал прилинкованную форму к USERRIGHTSREPORT, там в цикле USERRIGHTSREPORT_MENULOOP1 из переменной FRMENU получал данные, потом их дополнительно парсил.

Форма USERRIGHTSREPORT вызывается в SUPPORT ПраваПользователей-Отчёты-ПраваПользователей.

Мб тоже будет полезно: если понадобится программно узнать, какие группы пользователей в SUPPORT в какие группы входят, то сделать это можно так:

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

_loop X$RESOURCES where((24 == XR$TYPE)){
      var mResGroups: longint;
      //В мемо поле содержится сортированный контейнер
      //Функция SortedContainer_Load в справке не описана...
      mResGroups := SortedContainer_Load(x$Resources.xr$Data);
      if mResGroups <> 0
      {
        var i: longint;
        var aMemb: comp;
        for (i := 0; i < SortedContainer_GetCount(mResGroups); i++)
        {
          aMemb := SortedContainer_AtC(mResGroups, i);
          if aMemb <> 0 then
            insert tmpGroups set
              cOwner := x$Resources.XR$CODE 
            , cGroup := aMemb; //В какую группу входит текущая группа
        }
        SortedContainer_Done(mResGroups, '');
      }
    }                        
Irina_
Местный житель
Сообщения: 555
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение Irina_ »

Здравствуйте.
KVS, спасибо за Ваш ответ!
К поставленной з-че еще условие: не выводить пользователей, которым запрещен доступ в Галактику (их немало).
Я ранее смотрела указанную Вами форму, и у меня была мысль написать присоединенную форму. В списке форм только одна форма UserRightsReport, и в параметрах отчета (настройка форм) указаны только:
-Ресурс: \\...\Support\EXE\Support.res
-Имя формы: USERRIGHTSREPORT
-Таблица и интерфейс: PR_USERREPORT.
Прототип не указан. Поэтому тогда вариант отпал. Но после Вашего ответа нажала на форме F4 и получила исходник. Спасибо! Буду пробовать писать присоединенку.
Указанная Вами форма доступна еще: Support – Права доступа – Администрирование – Пользователей, пометка пользователей, по ПКМ пункт «Отчет о правах».
Смотрела еще:
- Support – Права доступа – Отчеты – Права на функции системы. Отчет в неудобном виде и работать с ним невозможно.
- Support - Права доступа – Администрирование – Пользователей, пометка пользователей, по ПКМ пункт «Сравнить права». Здесь в отчет не попадают админы, которым все доступно. И для сравнения доступно мах 5 пользователей. Т.е. когда пользователей много (более 500), то тогда придется формировать по 5 чел, а потом все это как-то объединять. Да и к сформированному отчету есть замечания, в частности не выводятся полные имена пользователей.
При анализе имеющихся форм по правам доступа неоднократно возникал вопрос: для кого разработчик сделал такие формы, с которыми невозможно работать? Неужели нельзя было разработать такую, чтобы все было понятно, например, по строкам пункты меню, а по столбцам пользователи, на пересечении признак доступа. Можно было бы дать возможность формировать блоками по N столбцов (пользователей).

Спасибо Вам и за дополнение. Только я не поняла Вашу фразу: «какие группы пользователей в SUPPORT в какие группы входят».
Вы пишите о 2 видах групп: группы пользователей (это понятно) и еще какие-то группы (непонятно).
Конкретно у нас нет ни одной записи по условию X$RESOURCES.XR$TYPE =24.
О входимости пользователей в группы как-то писала:

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

//Пользователи (только без запрета входа в Галактику) и группы, в которые они входят
sql
select
  X$USERS.ATL_NREC as "X$USERS_NREC"
  ,X$USERS.XU$FULLNAME as "FULLNAME"
  ,X$USERS.XU$LOGINNAME as "LOGINNAME"
  ,case when X$USERS.XU$TYPE=1 THEN 'Адм' ELSE '' END as "TYPE"
  ,GROUPS.ATL_NREC as "GROUPS_NREC"
  ,GROUPS.NAME as "GROUPS_NAME"
from
  GROUPUSERS
  left join X$USERS on ( GROUPUSERS.USERCODE = X$USERS.ATL_NREC )
  left join GROUPS  on ( GROUPUSERS.GROUPCODE = GROUPS.ATL_NREC )
Where
((
  0 = bitand(x$users.xu$flag,8)
))
order by X$USERS.XU$FULLNAME, GROUPS.NAME
to xlsx UsersAndGroups.xlsx;
KVS
Посетитель
Сообщения: 36
Зарегистрирован: 03 фев 2020, 10:38

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение KVS »

В части групп пользователей:
Имеется ввиду ситуация, когда одна группа входит в другую группу.
На нашем примере: есть точка расширения, код в которой нужно выполнять только если пользователь не входит в определенную группу.
Права пользователей настроены так, что пользователь может входить в интересующую группу опосредованно - через другие группы.
При помощи кода из моего примера, выясняем входит ли пользователь в эту группу.

В части прилинкованной формы:
Нужно быть готовыми к тому, что она выплёвывает данные по правам на функции системы одной очень длинной строкой, которую нужно потом
парсить вручную.
Irina_
Местный житель
Сообщения: 555
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение Irina_ »

Спасибо за разъяснение!
По поводу работы с длинной строкой я понимаю. Придется анализировать наличие в длинной строке подстрок вида :
-", Подменю"
-", RunMenu"
-", cmRunInterface"
И выделять из длинной строки часть до указанных подстрок.
KVS
Посетитель
Сообщения: 36
Зарегистрирован: 03 фев 2020, 10:38

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение KVS »

Да, абсолютно верно понимаете
Irina_
Местный житель
Сообщения: 555
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение Irina_ »

Здравствуйте.
Написала отчет: присоединенная форма с выводом в Excel. Запустила формирование отчета в Support. Получаю предупреждение:
«Не загрузилась динамическая библиотека G_ExcelLib3X.dll: Не найден указанный модуль». Жму ОК. Потом поочередно получаю аналогичные сообщения по поводу G_Tune.dll и G_Common.dll.
По Message вижу, что ТП наполнена данными. xlCreateExcel возвратила False, xlGetLastError возвратила 0.
Как решить проблему? Или нельзя выводить отчеты для Support в Excel?
KVS
Посетитель
Сообщения: 36
Зарегистрирован: 03 фев 2020, 10:38

Re: Mемо-поле в табл.AOBJRIGHTS

Сообщение KVS »

Добрый день!

Судя по всему данные библиотеки относятся непосредственно к галактике, попробуйте их оттуда скопировать в папку с саппортом.
Возможно, потом потребуется дополнительно сделать от имени админа regsvr32 "ПутьДоDLL\G_ExcelLib3X.dll".
Ответить