Здравствуйте!
Такая задача: надо формировать отчёт по договорам. При выводе отчета учитывать ограничения, заданные для групп пользователей по Договорам в Безопасности на уровне записей.
Как я понимаю, один пользователь может быть в нескольких группах. Пытаюсь сделать перебор по группам и если они встречаются в SysRecordLevelSecurity, то в запрос добавлять условия из этой таблицы.
Пока сделал как-то коряво.
Подскажите как сделать более правильно.
Вот то, что пока придумал:
X++:
private void parmRContractTable(Args _args)
{
RContractTable tmpRContractTable;
UserGroupList userGroupList;
integer j;
Query q;
QueryBuildRange qbr;
QueryBuildDataSource qbds;
SysQueryRun sysRun;
SysRecordLevelSecurity sysRecord;
;
tmpRContractTable = _args.record();
rContractTypes = tmpRContractTable.rContractPartnerType;
q = new Query();
qbds = q.addDataSource(tablenum(RContractTable));
while select userGroupList where userGroupList.userId == curUserId()
{
select firstonly sysRecord where
sysRecord.groupId == userGroupList.groupId &&
sysRecord.tabId == tablenum(RContractTable) &&
sysRecord.companyId == curext();
if(sysRecord)
{
sysRun = new SysQueryRun(sysRecord.restriction);
sysRun.next();
for(j=1; j<sysRun.query().dataSourceNo(1).rangeCount(); j++)
{
qbr = sysRun.query().dataSourceNo(1).range(j);
qbds.addRange(qbr.field()).value(qbr.value());
}
}
}
query = new Query(q);
}