| 
    
        
     
     | 
    
  | 
Как запустить функцию НайтиПомеченныеНаУдаление() от обычного пользователя? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        xintrea    
     10.12.12 
            ✎
    16:45 
 | 
         
        Здравствуйте!
  
        Есть обычный пользователь, к некоторым подсистемам имеет доступ, к некоторым не имеет. Задача - дать возможность пользователю удалять объекты, помеченные на удаление, в пределах его прав. Если вызвать функцию НайтиПомеченныеНаУдаление(), то возникает ошибка: {ОбщийМодуль.ОсновнойМодуль.Модуль(874)}: Ошибка при вызове метода контекста (НайтиПомеченныеНаУдаление) Помеченные = НайтиПомеченныеНаУдаление(); по причине: У пользователя недостаточно прав на исполнение операции над базой данных. объект: 'Справочник.РазделыПроектовРазработкиДокументации'; право: 'Чтение' Таблица: 'Reference208', SDBL-команда: 'SELECT'. То есть, пользователь не имеет доступа к справочнику РазделыПроектовРазработкиДокументации (этот справочник принадлежит подсистеме, с которой данный пользователь работать не должен). Так настроены права, так нужно. Но это же не должно обозначать, что вообще нельзя выполнить поиск помеченных на удаление объектов, в пределах прав пользователя! Вопрос: как получить объекты, помеченные на удаление, и доступные для удаления пользователю?  | 
|||
| 
    1
    
        ParinovS    
     10.12.12 
            ✎
    16:49 
 | 
         
        Я бы посоветовал обходить все метаданные через попытку.     
         | 
|||
| 
    2
    
        H A D G E H O G s    
     10.12.12 
            ✎
    16:52 
 | 
         
        СП украли?
  
        УстановитьПривилегированныйРежим()  | 
|||
| 
    3
    
        Heckfy    
     10.12.12 
            ✎
    16:55 
 | 
         
        (2) Не то. Ему не все помеченные надо, а только в рамках дозволенного пользователю.     
         | 
|||
| 
    4
    
        H A D G E H O G s    
     10.12.12 
            ✎
    16:58 
 | 
         
        (3) Ну потом пусть шерстит массив ссылок на право чтения.     
         | 
|||
| 
    5
    
        H A D G E H O G s    
     10.12.12 
            ✎
    17:01 
 | 
         
        Если rls на уровне метаданных - ПравоДоступа()
  
        Если rls на уровне данных - в попытке: ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементМассива,"Ссылка"). Как то так наверное.  | 
|||
| 
    6
    
        xintrea    
     10.12.12 
            ✎
    17:03 
 | 
         
        (1) 
  
        > Я бы посоветовал обходить все метаданные через попытку. Есть какой-нибудь пример кода?  | 
|||
| 
    7
    
        xintrea    
     10.12.12 
            ✎
    17:03 
 | 
         
        (4) Откуда взять это массив ссылок? Можно пример кода?     
         | 
|||
| 
    8
    
        H A D G E H O G s    
     10.12.12 
            ✎
    17:08 
 | 
         
        МассивСсылок=НайтиПомеченныеНаУдаление();     
         | 
|||
| 
    9
    
        xintrea    
     11.12.12 
            ✎
    08:34 
 | 
         
        (8) Так в том-то и дело, что функция НайтиПомеченныеНаУдаление(): 
  
        - отрабатывает нормально только в случае, если доступны ВСЕ объекты; - генерирует ошибку времени исполнения, которую я привел в топике, если нет прав хотя бы на один объект. Так что так просто получиить массив помеченных объектов нельзя. Вот я и спрашиваю, как можно обходным путём получить такой массив.  | 
|||
| 
    10
    
        Heckfy    
     11.12.12 
            ✎
    09:46 
 | 
         
        (8) Не понимает он тебя. :(
  
        (6) Вот пример кода обхода всех справочников с выводом количества записей: Для Каждого Спр Из Метаданные.Справочники Цикл Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | КОЛИЧЕСТВО(*) КАК Кол |ИЗ | Справочник."+Спр.Имя+" КАК Справочник" ; РезультатЗапроса=Запрос.Выполнить().Выбрать(); РезультатЗапроса.Следующий(); Сообщить(Спр.Имя+" "+РезультатЗапроса.Кол); КонецЦикла;  | 
|||
| 
    11
    
        suvolod    
     12.12.12 
            ✎
    18:54 
 | 
         
        Перебери метаданные. Вот кусок типового кода, который позволяет строить реестр только по разрешенным документам:
  
        код, который взял из типового отчета "Реестр документов" // Создает список значений, содержащий виды документов существующих в системе, Функция СоздатьСписокВидовДокументов() Перем СписокВидов; Перем Выбор; СписокВидов = Новый СписокЗначений; Для Каждого К Из Метаданные.Документы Цикл Если ПравоДоступа("Чтение", К) Тогда СписокВидов.Добавить(К.Имя, К.Синоним); КонецЕсли; КонецЦикла; Возврат СписокВидов; КонецФункции // СоздатьСписокВидовДокументов()  | 
|||
| 
    12
    
        banco    
     12.12.12 
            ✎
    22:02 
 | 
         
        УстановитьПривилегированныйРежим() получить массив ссылок потом отключить привилегириванный режим и запросом разрешенные получить     
         | 
|||
| 
    13
    
        Aleksey    
     12.12.12 
            ✎
    22:11 
 | 
         
        Но ведь типовая как то получает же без плясок с бубном?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |