Автоматизация бизнеса

Установка, настройка, внедрение и сопровождение любых конфигураций на платформе 1С:Предприятие. 

e-mail: info@programmist1c.ru

Минимальный объем работ от 50 000 рублей
  •   Удаленный админ
  •   Карта сайта
  •   Контакты


  • Поиск
     

    v8: Использование RLS для отборов в динамических списках

    Часто возникает необходимость установить сложные отборы на динамические списки Документов, Справочников. В данной стать описан механизм с помощью которого можно устанавливать отборы используя ограничения доступа на уровне данных (Record Level Security)
    Автор статьи: Neco
    Последняя редакция №1 от 29.04.07


    Ключевые слова: ограничения доступа, RLS, отбор


    Поставим перед собой наиболее простую задачу. Убрать из динамического списка документы для запрещенных контрагентов.
    За основу взята конфигурация "Примеры ИТС" для 8.1. В конфигурацию добавлены следующие объекты:
    - Регистр сведений "Запрещенные контрагенты" - содержит измерение "Контрагент"
    - Параметр сеанса "СкрытьЗапрещенныхКонтрагентов" - тип булево
    - Роль "Пользователь"
    Для права на чтение у роли "Пользователь" для документа "Приходная накладная" прописываем следующий запрос:
    ПриходнаяНакладная ГДЕ ((НЕ &СкрытьЗапрещенныхКонтрагентов)
      ИЛИ (НЕ ПриходнаяНакладная.Контрагент В
       (ВЫБРАТЬ
         ЗапрещенныеКонтрагенты.Контрагент
           ИЗ
         РегистрСведений.ЗапрещенныеКонтрагенты КАК ЗапрещенныеКонтрагенты)))
    

    Смысл запроса, таков, что отбирать только те документы реквизит "Контрагент" которых не входит в состав регистра сведений "Запрещенные" контрагенты. При этом значение параметра сеанса СкрытьЗапрещенныхКонтрагентов как бы включает последующую проверку. Т.е. если параметр в значении Ложь, то никаких отборов не произойдет, если в Истина то сработает условие.
    Далее в форме списка документов добавляем флажок "СкрытьЗапрещенныхКонтрагентов" и на событие изменения прописываем такой код:
    Процедура СкрытьЗапрещенныхКонтрагентовПриИзменении(Элемент)
      ПараметрыСеанса.СкрытьЗапрещенныхКонтрагентов = Элемент.Значение;
      Обновить();
    КонецПроцедуры
    


    Далее при работе в режиме предприятия мы заполним регистр сведений "ЗапрещенныеКонтрагенты" теми контрагентами документы которых хотели бы скрыть в списке. В самом списке при установке "СкрытьЗапрещенныхКонтрагентов" будет произведен отбор только документов, контрагенты которых не присуствуют в регистре "ЗапрещенныеКонтрагенты".

    Нужно заметить, что использование таких RLS это пожалуй единственный способ "легального" отбора в динамических списках без использования промежуточных запросов и выгрузки в таблицу значений.
    Но у способа описанного выше есть минусы. Самый явственный пожалуй, это не гибкость устанавливаемых условий. Было бы замечательно если можно внедрять любые произвольные запросы на стадии получения данных из динамических списков, да и вообще любых данных. Следующее ограничение, это невозможность использования в условиях виртуальных таблиц. Т.е. если мы перед собой поставим задачу отобрать всех контрагентов-должников, долги которых фиксируются в регистре накоплений, то написать запрос RLS к таблице остатков этого регистра мы не сможем.
    И еще одно ограничение, которое может быть, впрочем, и большим плюсом, это то, что установленные права распространяются не только на список документов, но также и на другие объекты конфигурации, которые получают данные по этим документам.
    21.02.18 | 10:31


    30.11.16 | 20:25


    28.11.16 | 09:22


    26.11.16 | 08:19


    22.11.16 | 20:17


    19.11.16 | 10:14


    18.11.16 | 20:09




    Внедрение 1С Автоматизация 1С Доработка 1С Сопровождение 1С Обслуживание 1С Программирование 1С 8 Hастройка 1С Карта сайта Контакты