Продвинутый курс. Занятие №4

Четвертое занятие по 0-му блоку продвинутого курса.

Необходимо изучить следующие главы 0-го курса.
Глава 21. Права доступа.
Глава 22. Анализ и прогнозирование данных.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.

комментариев 28 на “Продвинутый курс. Занятие №4”

  1. Максим Ефимов 10.06.2011 в 21:56

    1. Для Аудиторов создаём роль ТолькоПросмотр, в которой запрещаем в первую очередь Вывод и интерактивное открытие внешних обработок и отчетов. Для всех остальных объектов устанавливаем право Просмотр
    2. Сделал следующим образов, но уверен, что можно как-то поптимальнее сделать:
    Для Номенклатуры
    <code>Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступа КАК ПраваДоступа
    ПО (ПраваДоступа.Пользователь = &ИмяПользователя)
    И (Номенклатура.НоменклатурнаяГруппа = ПраваДоступа.НоменклатурнаяГруппа ИЛИ ЭтоГруппа)</code>
    Для Документов не получается сделать шаблон (ругается на Текущую таблицу, хотя вроде всё верно):
    для Поступления такой запрос:
    <code>ПоступлениеТоваровИУслуг ИЗ Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
    #ШБ_НГ</code>
    #ШБ_НГ:
    <code>ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ТЧ_Товары.Ссылка КАК Ссылка,
    Минимум(ВЫБОР
    КОГДА ПраваДоступа.НоменклатурнаяГруппа ЕСТЬ NULL
    ТОГДА Ложь
    ИНАЧЕ Истина
    КОНЕЦ) КАК Доступен
    ИЗ
    Документ.#ТекущаяТаблица.Товары КАК ТЧ_Товары
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступа КАК ПраваДоступа
    ПО (ПраваДоступа.Пользователь = &ИмяПользователя)
    И ПраваДоступа.НоменклатурнаяГруппа = ТЧ_Товары.Номенклатура.НоменклатурнаяГруппа

    СГРУППИРОВАТЬ ПО
    ТЧ_Товары.Ссылка) КАК ВложенныйЗапрос
    ПО #ТекущаяТаблица.Ссылка = ВложенныйЗапрос.Ссылка
    И (ВложенныйЗапрос.Доступен)</code>

  2. 1. Создал регистр сведений  ПраваДоступаПользователей с измерениями
    Менеджеры
    НоменклатурныеГруппы
    И реквизитом
    ПравоЧтения (для руководителя отдела)

    2. Под измерения создал справочники

    3. Справочник Менеджеры заполнил пользователями
    &НаКлиенте
    Процедура ЗаполнитьПользователями(Команда)
    ЗаполнитьПользователямиНаСервере();
    ОбновитьИнтерфейс();
    КонецПроцедуры
     
    &НаСервереБезКонтекста
    Процедура ЗаполнитьПользователямиНасервере()
    СписокПользователей=ПользователиИнформационнойБазы.ПолучитьПользователей();
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    |         Менеджеры.Наименование
    |ИЗ
    |        Справочник.Менеджеры КАК Менеджеры”;
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выгрузить();
    Для Каждого ТекПользователь из СписокПользователей Цикл
    ЕслиВыборкаДетальныеЗаписи.Найти(ТекПользователь.Имя,”Наименование”)=
    Неопределено Тогда
    ЕлементОбъекта=Справочники.Менеджеры.СоздатьЭлемент();
    ЕлементОбъекта.Наименование=ТекПользователь;
    ЕлементОбъекта.Записать();
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
     
    2 Заполнил параметры
     
    Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    Запрос = Новый Запрос;
    Запрос.Текст =
    “ВЫБРАТЬ
    |      ПраваДоступаПользователей.Менеджеры.Ссылка,
    |      ПраваДоступаПользователей.ПравоЧтения
    |ИЗ
    |      РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
    |ГДЕ
    |      ПраваДоступаПользователей.Менеджеры.Наименование = &Наименование”;
    Запрос.УстановитьПараметр(“Наименование”, ИмяПользователя());
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    ВыборкаДетальныеЗаписи.Следующий();
    ПараметрыСеанса.Пользователь=ВыборкаДетальныеЗаписи.МенеджерыСсылка;
    ПараметрыСеанса.ПравоЧтения=Не ВыборкаДетальныеЗаписи.ПравоЧтения;
    КонецПроцедуры
     
    3 Разработал Шаблон

    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
    ПО (ПраваДоступаПользователей.Менеджеры = &Пользователь)
    И (НЕ #ТекущаяТаблица.#Параметр(1) <> ПраваДоступаПользователей.НоменклатурныеГруппы)

    4. Применил шаблон для справочника Номенклатура

    #Если &ПравоЧтения #Тогда Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура #ШаблонПоДокумент(“НоменклатурнаяГруппа”) Или  ЭтоГруппа
    #КонецЕсли

    5 Применил шаблон для документов

    #Если &ПравоЧтения #Тогда ПоступлениеТоваровИУслуг ИЗ Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг #ШаблонПоДокумент(“Товары.Номенклатура.НоменклатурнаяГруппа”) #КонецЕсли

  3. Задание выполнила. Некоторые трудности возникли с ограничением доступа к документам, в которых встречается номенклатура из разных групп. С ролью для аудитора проблем не было.

  4. Задание выполнил, правда без вложенных запросов не обошлось…
            
    ШАБЛОНЫ ОГРАНИЧЕНИЙ:
          
    1.ЗапрещенныеГруппы
         
    ВЫБРАТЬ
     ГруппыНоменклатуры.Ссылка
    ИЗ
     Справочник.ГруппыНоменклатуры КАК ГруппыНоменклатуры
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаНоменклатура КАК ПраваДоступаНоменклатура
      ПО (ПраваДоступаНоменклатура.Пользователь = &Пользователь)
       И (ПраваДоступаНоменклатура.НоменклатурнаяГруппа = ГруппыНоменклатуры.Ссылка)
    ГДЕ
     ПраваДоступаНоменклатура.Пользователь ЕСТЬ NULL
         
    2. ЗапрещенныеДокументы
        
    #ТекущаяТаблица.Ссылка В
      (ВЫБРАТЬ
       ТЧТовары.Ссылка
      ИЗ
       Документ.#Параметр(1).Товары КАК ТЧТовары
      ГДЕ
       ТЧТовары.Номенклатура.Группа В (##ЗапрещенныеГруппы))
        
    ОГРАНИЧЕНИЯ
       
    1. Справочник Номенклатура:
        
    #Если НЕ &РуководительОтдела #Тогда
    Номенклатура ГДЕ (Номенклатура.Группа НЕ В
     (#ЗапрещенныеГруппы)) ИЛИ Номенклатура.ЭтоГруппа
    #КонецЕсли
        
    2. Документ Поступление
         
    #Если НЕ &РуководительОтдела #Тогда
    ПоступлениеТоваровИУслуг ГДЕ (НЕ #ЗапрещенныеДокументы(“ПоступлениеТоваровИУслуг”))
    #КонецЕсли
        
    3. Документ Реализация
        
    #Если НЕ &РуководительОтдела #Тогда
    РеализацияТоваровИУслуг ГДЕ (НЕ #ЗапрещенныеДокументы(“РеализацияТоваровИУслуг”))
    #КонецЕсли
     

    • Поскольку тема очень интересная, решил сделать еще одним способом, т.к. нашел похожий пример в литературе, выпускаемой фирмой 1С (решение ДЗ пока не смотрел, т.к. хочу сначала сам полностью разобраться – ведь в лекциях материала вроде достаточно).
         
      ШАБЛОНЫ:
       
      1. ЗапрещенныеГруппы
       
      ВЫБРАТЬ
          ГруппыНоменклатуры.Ссылка
      ИЗ
          Справочник.ГруппыНоменклатуры КАК ГруппыНоменклатуры
              ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаНоменклатура КАК ПраваДоступаНоменклатура
              ПО (ПраваДоступаНоменклатура.Пользователь = &Пользователь)
                  И (ПраваДоступаНоменклатура.НоменклатурнаяГруппа = ГруппыНоменклатуры.Ссылка)
      ГДЕ
          ПраваДоступаНоменклатура.Пользователь ЕСТЬ NULL
        
      2. ВДокументеЕстьЗапрещенныеГруппы
        
      ВЫБРАТЬ
          1
      ИЗ
          Документ.#Параметр(1).Товары КАК ТЧТовары
      ГДЕ
          ТЧТовары.Номенклатура.Группа В(##ЗапрещенныеГруппы)
          И ТЧТовары.Ссылка = #Параметр(2).Ссылка
         
      ОГРАНИЧЕНИЯ:
        
      1. Для Поступления:
        
       ДокПоступление ГДЕ НЕ 1 В (#ВДокументеЕстьЗапрещенныеГруппы(“ПоступлениеТоваровИУслуг”, “ДокПоступление”))
        
      2. Для реализации
        
      ДокРеализация ГДЕ НЕ 1 В (#ВДокументеЕстьЗапрещенныеГруппы(“РеализацияТоваровИУслуг”, “ДокРеализация”))
         
      И хоть вроде все работает правильно, но скажу честно – не до конца понимаю запросы RLS.
      Например, во втором шаблоне есть выражение:
           
      ГДЕ
          ТЧТовары.Номенклатура.Группа В(##ЗапрещенныеГруппы)
          И ТЧТовары.Ссылка = #Параметр(2).Ссылка
           
      т.е. получается, что  #Параметр(2).Ссылка это ссылка на ОДИН КОНКРЕТНЫЙ документ.
      Смотрим теперь на ограничение для Поступления:
         
       ДокПоступление ГДЕ НЕ 1 В (#ВДокументеЕстьЗапрещенныеГруппы(“ПоступлениеТоваровИУслуг”, “ДокПоступление”))
         
         
      Из параметров, передаваемых в шаблон, получается что ДокПоступление это и есть этот один конкретный документ. Странно, я думал, что это имя (псевдоним) таблицы… Ведь если бы мы в обычном запросе написали 
        
      ВЫБРАТЬ ДокПоступление.Ссылка
      ИЗ Документ.ПоступлениеТоваровИУслуг КАК ДокПоступление….
        
      то ДокПоступление.Ссылка – это вроде как ВСЕ документы из таблицы (в результате запроса в этой колонке были бы ссылки на ВСЕ документы), а в RLS получается что это только ссылка на ОДИН документ …
         
      И еще для себя интересно, а какое мое решение эффективнее – первое или второе?

      • Интересное ограничение доступа, постараемся его разобрать в мастер-группе.
        Что касается производительности, то оба варианта очень похожи
        Насколько я понял в первом варианте на один вложенный запрос меньше, поэтому он предпочтительней.

  5. Задание выполнил.
    Создал роль для Аудитора, настроил только чтение и просмотр на объекты конфигурации и в корневом узле убрал все административные права. Для решения задания по ограничению изъятия информации из базы данных необходимо снять флаг “Вывод”.
    Для решения второй задачи создал роль Менеджер, для которой будут применяться запросы по ограничению доступа на уровне записей. Справочник Пользователи, для которого организовал синхронизацию с пользователями ИБ. А так же Справочник НоменклатурныеГруппы. Для справочника Номенклатура добавил реквизит НоменклатурнаяГруппа, с использованием для элемента и группы. Для хранения данных о доступных Номенклатурных группах создал регистр сведений с измерениями Пользователь и НоменклатурнаяГруппа. Кроме того создал параметр сеанса, для хранения информации о текущем пользователе.
    С условием по ограничению доступа для Справочника Номенклатура проблем не возникло, а вот для документов пришлось помучиться. В итоге получился вот что:
    <code>
    ПоступлениеТоваровИУслуг ГДЕ (НЕ ПоступлениеТоваровИУслуг.Товары.Номенклатура В
    (ВЫБРАТЬ
    ПоступлениеТоваровИУслугТовары.Номенклатура
    ИЗ
    Документ.ПоступлениеТоваровИУслуг.Товары КАК ПоступлениеТоваровИУслугТовары
    ГДЕ
    (НЕ ПоступлениеТоваровИУслугТовары.Номенклатура.НоменклатурнаяГруппа В
    (ВЫБРАТЬ
    РазрешенныеНоменклатурныеГруппы.НоменклатурныеГруппы
    ИЗ
    РегистрСведений.РазрешенныеНоменклатурныеГруппы КАК РазрешенныеНоменклатурныеГруппы
    ГДЕ
    РазрешенныеНоменклатурныеГруппы.Пользователь = &ТекущийПользователь))))
    </code>
    т.е. выбираем те документы, в которых нет номенклатуры, которая бы не входила в разрешенные группы. На мой взгляд, условие получилось жутковатое… В итоге получилось два шаблона.
    Хотелось бы уточнить, следует ли расценивать все вложенные конструкции ВЫБРАТЬ, как вложенные запросы?
    Вариантов решения последнего задания множество. Решил ее созданием реквизита справочника Пользователи НеПрименятьОграниченияДоступа и параметра сеанса ПрименятьОграниченияДоступа, чтобы поэкспериментировать с инструкциями препроцессору в шаблонах ограничения доступа.

    • >следует ли расценивать все вложенные конструкции ВЫБРАТЬ, как вложенные запросы?
      Да, это вложенные запросы.

  6. Задание выполнено.
    Для аудитора была создана роль, в которой запрещено изменение всех объектов, а в корневом элементе конфигурации сняты все галки кроме “Тонкий клиент” и “Веб-клиент”. Т.е. запрещен вывод данных, запуск внешних отчетов и обработок.
    Разделение менеджеров по направлениям реализовано с помощью механизма RLS.
    Изначально планировал использовать в качестве номенклатурных групп группы самого справочника товары. Но почему-то в запросах RLS не получилось использовать логический оператор “В иерархии”, пришлось менять тактику :)
    В результате, созданы следующие объекты: справочники НоменклатурныеГруппы, Пользователи, регистр сведений ДоступныеНоменклатурныеГруппы (измерения – Пользователь, Группа), параметр сеанса ДоступныеНоменклатурныеГруппы. Реализован механизм автоматического заполнения справочника пользователей (в модуле сеанса). Соответственно, в справочник Номенклатура добавлен реквизит НоменклатурнаяГруппа.
    Создана роль Менеджер, для которой настроены ограничения доступа к данным для справочника Номенклатура, документов поступления и реализации, регистра сведений ЦеныНоменклатуры, регистров накоплений ОстаткиТоваров, Продажи. По идее, надо бы еще и для регистра Взаиморасчеты, но непонятно как наложить ограничения по регистратору.
    Для задания ограничений по документам использован шаблон:
    #ТекущаяТаблица ГДЕ НЕ (#ТекущаяТаблица.Ссылка В
    (ВЫБРАТЬ
    ТаблТовары.Ссылка
    ИЗ
    Документ.#Параметр(1).Товары КАК ТаблТовары
    ГДЕ
    (НЕ ТаблТовары.Номенклатура.НоменклатурнаяГруппа В (&ДоступныеНоменклатурныеГруппы))))

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

    • > Но почему-то в запросах RLS не получилось использовать логический оператор «В иерархии»
      Да, это намеренное ограничение платформы.
      Поскольку “В Иерархии” ресурсоемкая операция, которая при многократном выполнении способна завалить сервер.

  7. Задание .
    Добавил пользователя «Аудитор». Добавил роль «Только для просмотра» и назначил эту роль пользователю «Аудитор», для этой роли настроил права по объектам только на просмотр.
    Добавил в конфигурацию новый справочник «НоменклатурныеГруппы». Добавил реквизит «НоменклатурнаяГруппа» в справочник «Номенклатура».
    Был добавлен в конфигурацию справочник «Пользователи», в данный справочник была добавлена Табличная часть  «ДоступНоменклатурнаяГруппа» в эту табличную часть добавил реквизит «НоменклатурнаяГруппа». Реализовал синхронизацию с пользователями ИБ по уникальному идентификатору.  Для руководителей отделов в справочнике пользователи добавил реквизит типа булево «Администратор».  Добавил в параметры сеанса новый параметр «ТекПользователь» тип справочник «Пользователи». Для инициализации параметра сеанса использовал предопределенную процедуру УстановкаПараметровСеанса Модуля сеанса.
    Для реализации прав доступа по номенклатурным группам для документов реализации и поступления и справочника номенклатуры для свойства «Чтение», прав доступа, использовал шаблон запроса для получения номенклатурных групп к которым имеет доступ пользователь. Данный шаблон использовал в запросе RLS, для просмотра документов и справочника «Номенклатура».
    Просмотрел решение домашнего задания и переделал свою реализацию домашнего решения.

  8. respublica 14.05.2011 в 18:02

    Задание выполнено. В решение не смотрел.
    1. Проблем с созданием роли “Аудитор”, созданием справочников “Пользователи” (и синхронизацием со списком пользователей ИБ), “НоменклатурныеГруппы”, регистра свдений по продуктовым направлением менеджеров и роли для менеджеров не возникло. В параметры сеанса заноситься текущий пользователь.
    2. При создании ограничений доступа на уровне записи возникли заминки с требованием “если в одном документе.. разных ном. групп… документ не виден пользователю”. Смог решить только с использованием вложенного запроса :(.
    Шаблон:
    (ВЫБРАТЬ
    НоменклатурныеГруппы.Ссылка
    ИЗ
    Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПродуктовыеНаправленияМенеджеров КАК ПродуктовыеНаправленияМенеджеров
    ПО
    ПродуктовыеНаправленияМенеджеров.Пользователь = &ТекущийПользователь
    И НоменклатурныеГруппы.Ссылка #Параметр(1) ПродуктовыеНаправленияМенеджеров.НоменклатурнаяГруппа)
    Органичение (пример):
    РеализацияТоваровИУслуг ГДЕ (НЕ РеализацияТоваровИУслуг.Товары.Номенклатура.НоменклатурнаяГруппа В #ВыборкаНоменклатурныхГрупп(“<>”))
    П. С. Приступаю к рассмотрению правильного решения.

  9. Задание выполнила.
    Создала новый набор прав для Аудитора, где на все объекты поставила доступ только “Чтение” и “Просмотр”, в правах на конфигурацию сняла право “Вывод”.
    Создала: новый справочник “Пользователи”, параметр сеанса ТекущийПользователь(при входе идентифицирую пользователя системы), новый справочник “НомеклатурныеГруппы”, в справочнике “Номенклатура” реквизит “НоменклатурнаяГруппа”, для связи менеджеров с их торговыми направлениями регистр сведений “НаправленияМенеджеров” (Менеджер, НоменклатурнаяГруппа),   параметр сеанса “ПродуктовыеНаправления”(ФиксированныйМассив) – заполняю из регистра, новый набор прав “Менеджер”.
    В наборе прав “Менеджер” ограничение доступа к данным  для справочника “Номенклатура” для права “Чтение”(вхождение в параметр сеанса). Для документов работы с товарами описала шаблон “ШаблонНомГруппа” и в док Реализации например такое ограничение  – ГДЕ #ШаблонНомГруппа(“Документ.РеализацияТоваровИУслуг”)
    Сам шаблон таков:
    НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1
    1
    ИЗ
    #Параметр(1).Товары КАК ПоступлениеТоваровИУслугТовары
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаправленияМенеджеров КАК НаправленияМенеджеров
    ПО ПоступлениеТоваровИУслугТовары.Номенклатура.НоменклатурнаяГруппа = НаправленияМенеджеров.НоменклатурнаяГруппа И НаправленияМенеджеров.Менеджер = &ТекущийПользователь
    ГДЕ
    ПоступлениеТоваровИУслугТовары.Ссылка = #ТекущаяТаблица.Ссылка
    И НаправленияМенеджеров.НоменклатурнаяГруппа ЕСТЬ NULL)
    Как проще сделать не придумала :)

    • решение еще не смотрела :) терзали мысли что ни к чему в шаблоне соединение, оказалось таки действительно можно проще

      НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1
      1
      ИЗ
      #Параметр(1).Товары КАК ПоступлениеТоваровИУслугТовары
      ГДЕ
      ПоступлениеТоваровИУслугТовары.Ссылка = #ТекущаяТаблица.Ссылка И ПоступлениеТоваровИУслугТовары.Номенклатура.НоменклатурнаяГруппа НЕ В (&ПродуктовыеНаправления))
      НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1ИЗ #Параметр(1).Товары КАК ПоступлениеТоваровИУслугТоварыГДЕ ПоступлениеТоваровИУслугТовары.Ссылка = #ТекущаяТаблица.Ссылка И ПоступлениеТоваровИУслугТовары.Номенклатура.НоменклатурнаяГруппа НЕ В (&ПродуктовыеНаправления))

  10. Задание выполнено.
    1. Для аудитора создана роль “ТолькоПросмотр”: просмотр всех объектов, отключено право “Вывод”.
    2. Для менеджеров создана роль “Менеджер” с настройкой RLS по номенклатурным группам. Доступные номенклатурные группы пользователя хранятся в регистре сведений.  Создан параметр сеанса “ДоступныеНоменклатурныеГруппы”, который устанавливается при старте сеанса пользователя по регистру сведений.  В запросах RLS   в качестве фильтра используется именно параметр сеанса.
    3.  Для руководителей отделов создана отдельная роль без настройки RLS по по номенклатурным группам.

  11. Задача выполнена.
    1. Для новой роли все на просмотр + чтение. Единственное не понял, почему нельзя на константы, б\п и задачи нельзя отдельно установить чтение – либо все либо ничего – наверное релиз платформы староват.
    2. Сформированы: новый спр. НоменклатурныеГруппы, новый РС, новый ПараметрСеанса. РЛС настроен с помощью двух шаблонов(для справочников и документов).

  12. Кононов Сергей 13.05.2011 в 20:09

    Задание выполнено.
    В первой части задания, касающегося создания пользователя Аудитор, я выполнил
    следующее:
    1.Создал новую роль и настроил все права по объектам только на просмотр.
    2.в настройках прав доступа для роли я указал для корневого каталога только
    Подключение Тонкий и веб клиенты. Убрал доступ на все остальное.
    Для решения второй части задания мне пришлось:
    1. Создать справочник Номенклатурные группы
    2. В спр-ке Номенклатура создать новый реквизит НоменклатурнаяГруппа типа спр-к
    Номенклатурные группы. Таким образом каждый товар будет относится к определенной
    номенклатурной группе.
    3. Так как в конфигурации нет справочника пользователей, то создаю и его и всю
    схему работы с ним (заполнение, инициализация) выполняю в параметре сеансов
    (создал параметр сеансов текущий пользователь). В справочнике пользователи будут
    храниться менеджеры, котрые работают в программе. Код установки параметров сеанса
    не буду привожить, он аналогичен решению из базового курса.
    4. Создал регистр сведений независимый, непереодический
    НоменклатурныеГруппыМенеджеров, в котором определены след. измерения: Менеджер
    (тип спр-к Пользователи) и НоменклатурнаяГруппа(тип спр-к Номенклатурные группы).
    заполнение этого регистра будет ручным, то есть в списке регистра.
    5. Так как доступ к данныйм будем делать на уровне записей и для руководителей
    отделов ограничения не должны применяться, то придется создать еще две роли
    Менеджер и РуководительОтдела. Руководителям отдела поставим полные права, а для
    Менеджера укажем ограничения на доступ на уровне записи.
    6. Ограничил доступ на право чтения у самого справочника номенклатура, для роли
    Менеджер. Ограничение коснулось всех полей и текст запроса в поле ограничения
    след.:
    <cod>
    Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатурныеГруппыМенеджеров КАК
    НоменклатурныеГруппыМенеджеров
    ПО Номенклатура.НоменклатурнаяГруппа =
    НоменклатурныеГруппыМенеджеров.НоменклатурнаяГруппа
    ГДЕ (НоменклатурныеГруппыМенеджеров.Менеджер = &ТекущийПользователь
    ИЛИ Номенклатура.ЭтоГруппа)
    </cod>
    Так же и для документов ограничение на чтение коснулось всех полей оргаизовал
    шаблон ШаблонПоДокументу:
    <cod>
    Документ ИЗ Документ.#Параметр(1) КАК Документ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА
    НоменклатурныеГруппыМенеджеров.НоменклатурнаяГруппа ЕСТЬ NULL
    ТОГДА 1
    ИНАЧЕ 0
    КОНЕЦ) КАК КолвоНедоступных,
    ДокументТовары.Ссылка КАК Ссылка
    ИЗ
    Документ.#Параметр(1).Товары КАК ДокументТовары
    ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрСведений.НоменклатурныеГруппыМенеджеров КАК НоменклатурныеГруппыМенеджеров
    ПО ДокументТовары.Номенклатура.НоменклатурнаяГруппа =
    НоменклатурныеГруппыМенеджеров.НоменклатурнаяГруппа

    СГРУППИРОВАТЬ ПО
    ДокументТовары.Ссылка) КАК ВложенныйЗапрос
    ПО Документ.Ссылка = ВложенныйЗапрос.Ссылка
    ГДЕ ВложенныйЗапрос.КолвоНедоступных = 0
    </cod>
    Коротко: сделал вложенный запрос, который выбирает все номенклатурные группы,
    присваивает им число, если есть Ном. группа то 0, иначе 1. Таким образом
    сгруппировав по документу мы получим число и если оно больше нуля, то в документе
    присутствуют ном. группы недоступные для пользователя.
    В документе поступления и реализация указал данный шаблон с соответствующим
    параметром:
    Для Поступления
    <cod>
    #ШаблонПоДокументу(“ПоступлениеТоваровИУслуг”)
    </cod>
    Для Реализации
    <cod>
    #ШаблонПоДокументу(“РеализацияТоваровИУслуг”)
    </cod>
    П.С.
    Остался недоволен запросом, так как он вложенный, буду ждать Вашего решения.
    Задание выполнено.В первой части задания, касающегося создания пользователя Аудитор, я выполнил 
    следующее:
    1.Создал новую роль и настроил все права по объектам только на просмотр.
    2.в настройках прав доступа для роли я указал для корневого каталога только 
    Подключение Тонкий и веб клиенты. Убрал доступ на все остальное.
    Для решения второй части задания мне пришлось:
    1. Создать справочник Номенклатурные группы
    2. В спр-ке Номенклатура создать новый реквизит НоменклатурнаяГруппа типа спр-к 
    Номенклатурные группы. Таким образом каждый товар будет относится к определеннойноменклатурной группе.
    3. Так как в конфигурации нет справочника пользователей, то создаю и его и всю 
    схему работы с ним (заполнение, инициализация) выполняю в параметре сеансов 
    (создал параметр сеансов текущий пользователь). В справочнике пользователи будут 
    храниться менеджеры, котрые работают в программе. Код установки параметров сеанса 
    не буду привожить, он аналогичен решению из базового курса.
    4. Создал регистр сведений независимый, непереодический 
    НоменклатурныеГруппыМенеджеров, в котором определены след. измерения: Менеджер 
    (тип спр-к Пользователи) и НоменклатурнаяГруппа(тип спр-к Номенклатурные группы). 
    заполнение этого регистра будет ручным, то есть в списке регистра.
    5. Так как доступ к данныйм будем делать на уровне записей и для руководителей 
    отделов ограничения не должны применяться, то придется создать еще две роли 
    Менеджер и РуководительОтдела. Руководителям отдела поставим полные права, а для 
    Менеджера укажем ограничения на доступ на уровне записи.
    6. Ограничил доступ на право чтения у самого справочника номенклатура, для роли 
    Менеджер. Ограничение коснулось всех полей и текст запроса в поле ограничения 
    след.:
    <cod>Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатурныеГруппыМенеджеров КАК 
    НоменклатурныеГруппыМенеджеров ПО Номенклатура.НоменклатурнаяГруппа = 
    НоменклатурныеГруппыМенеджеров.НоменклатурнаяГруппаГДЕ (НоменклатурныеГруппыМенеджеров.Менеджер = &ТекущийПользователь ИЛИ Номенклатура.ЭтоГруппа)
    </cod>
    Так же и для документов ограничение на чтение коснулось всех полей оргаизовал 
    шаблон ШаблонПоДокументу:
    <cod> Документ ИЗ Документ.#Параметр(1) КАК Документ ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СУММА(ВЫБОР КОГДА 
    НоменклатурныеГруппыМенеджеров.НоменклатурнаяГруппа ЕСТЬ NULL  ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК КолвоНедоступных, ДокументТовары.Ссылка КАК Ссылка ИЗ Документ.#Параметр(1).Товары КАК ДокументТовары ЛЕВОЕ СОЕДИНЕНИЕ 
    РегистрСведений.НоменклатурныеГруппыМенеджеров КАК НоменклатурныеГруппыМенеджеров ПО ДокументТовары.Номенклатура.НоменклатурнаяГруппа = 
    НоменклатурныеГруппыМенеджеров.НоменклатурнаяГруппа СГРУППИРОВАТЬ ПО ДокументТовары.Ссылка) КАК ВложенныйЗапрос ПО Документ.Ссылка = ВложенныйЗапрос.СсылкаГДЕ ВложенныйЗапрос.КолвоНедоступных = 0
    </cod>
    Коротко: сделал вложенный запрос, который выбирает все номенклатурные группы, 
    присваивает им число, если есть Ном. группа то 0, иначе
    1. Таким образом 
    сгруппировав по документу мы получим число и если оно больше нуля, то в документе 
    присутствуют ном. группы недоступные для пользователя.
    В документе поступления и реализация указал данный шаблон с соответствующим 
    параметром:
    ДляПоступления
    <cod>
    #ШаблонПоДокументу(“ПоступлениеТоваровИУслуг”)</cod>
    Для Реализации
    <cod>
    #ШаблонПоДокументу(“РеализацияТоваровИУслуг”)</cod>
    П.С.Остался недоволен запросом, так как он вложенный, буду ждать Вашего решения.

  13. 1. В роли для аудитора как минимум запретим право “Вывод”, но в принципе достаточно дать только права на запуск программы (“Тонкий клиент”, “Веб-клиент”, “Толстый клиент”). Чтобы исключить возможность редактирования, для всех групп объектов установим только права “Чтение”, “Просмотр”, или “Использование”, “Просмотр”. 
    2.Для настройки роли менеджера понадобятся дополнительные справочники “Пользователи”, “Номенклатурные группы”, регистр сведений с соответствующими измерениями, параметр сеанса “Пользователь”, реквизит для справочника “Номенклатура” “Номенклатурная группа”.
    Шаблон для ограничения доступа по реквизиту:
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДоступНГ КАК ДоступНГ
    ПО (ДоступНГ.Пользователь = &Пользователь)
    И #ТекущаяТаблица.#Параметр(1).НоменклатурнаяГруппа = ДоступНГ.НоменклатурнаяГруппа
    Для документов используем шаблон дополнительного условия:
    ГДЕ (НЕ #ТекущаяТаблица.#Параметр(1).НоменклатурнаяГруппа В
    (ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДоступНГ.НоменклатурнаяГруппа
    ИЗ
    РегистрСведений.ДоступНГ КАК ДоступНГ
    ГДЕ
    ДоступНГ.Пользователь <> &Пользователь
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    ЗНАЧЕНИЕ(Справочник.НоменклатурныеГруппы.ПустаяСсылка)))

    Для настройки доступа руководителей отделов добавим параметр сеанса “Руководитель”+ дополнительный реквизит справочника “Пользователи” и инструкции препроцессору в ограничениях доступа

    Таким образом ограничение для документов будет иметь вид:
    #Если НЕ &Руководитель #Тогда ПоступлениеТоваровИУслуг ИЗ Документ.ПоступлениеТоваровИУслуг КАК ПоступлениеТоваровИУслуг
    #ШаблонПоНГ(“Товары.Номенклатура”) #ШаблонФильтрПоНГ(“Товары.Номенклатура”) #КонецЕсли

    Не удалось настроить ограничение по дополнительному условию для документов в справочнике “ИзмененияЦен” и регистрах накопления.
    Вопрос: Почему появляется ошибка при попытке обращения к объекту с ограничением доступа:
    “Невосстановимая ошибка
    Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
    по причине:
    Ошибка SDBL:
    Внутренняя ошибка: неожиданный ResolvedField (1)”?
    Корректно ли задавать условия на значение в табличной части в запросе к самому документ

    • Похоже, что ошибка возникает как раз из-за обращения в условии к реквизиту табличной части.
      Попробуйте это условие заменить (или убрать для тестов), появляется ли ошибка сейчас?

      • Если убрать обращение к табличной части или в качестве таблицы выбрать саму табличную часть, ошибки нет.

        • Значит нужно таким образом и переделать запрос.

  14. Задание выполнено.
    Создал пользователя “Аудитор” и роль “ТолькоПросмотр”.
    Создал справочник “НоменклатурныеГруппы”. В справочнике номенклатуры добавил реквизит с этим типом.
    Также создан справочник “Пользователи” для хранения пользователей (при запуске идет получение/создание пользователя) РС “ДоступКНоменклатурнымГруппам” для хранения номенклатурных групп каждого пользователя.
    РЛС настроен. Но получилось два шаблона. Хотелось бы в одном все обрабатывать, и это, я думаю, можно сделать, но что-то не получилось.  :(

  15. Домашнее задание выполнено.
    Для аудитора была настроена специальная роль. Чтобы исключить любую возможность изменения данных, из административных прав оставлены лишь права на вход с тонкого, толстого, веб клиентов, а также права просмотра журнала регистрации и активных пользователей. Для остальных объектов оставлены права “чтение”, “просмотр”, “ввод по строке”.
    Чтобы разделить номенклатуру по группам, был добавлен справочник “НоменклатурныеГруппы”, а также реквизит справочника “Номенклатура”, указывающий на справочник “НоменклатурныеГруппы”. Создан справочник “Пользователи” с булевским реквизитом “Руководитель”. Также созданы 2 параметра сеанса “ТекущийПользователь” (ссылка на справочник “Пользователи”) и “ПрименятьРЛС” (булево). При старте в модуле сеанса происходит синхронизация справочника “Пользователи” с пользователями ИБ, а также установка параметров сеанса. Кроме того, параметр сеанса “ПрименятьРЛС” обновляется при изменении флажка “Руководитель” в справочнике для текущего пользователя. Создан регистр сведений для назначений групп номенклатуры пользователям.
    Для справочника “Номенклатура” настроен RLS на чтение, также создан шаблон ограничений, с помощью которого настраивается RLS на чтение к документам поступления/реализации. При настройке доступа к документам пришлось использовать вложенный запрос. При этом везде используется конструкция #Если &ПрименятьРЛС #Тогда … #КонецЕсли.

    • В ходе выполнения ДЗ возник вопрос. Пишу текст шаблона, использую вложенный запрос “ВЫБРАТЬ РАЗЛИЧНЫЕ ДокТовары.Ссылка КАК Ссылка ИЗ Документ.#Параметр(1).Товары КАК ДокТовары”. Однако Параметр1 полностью повторяет название таблицы, на которую накладывается ограничение прав, т.е. напрашивается использование параметра #ТекущаяТаблица. Но если написать “Документ.#ТекущаяТаблица.Товары”, то платформа не понимает, что #ТекущаяТаблица – это параметр, и пытается найти таблицу “Документ.#ТекущаяТаблица.Товары”, которой, естественно, нету. Поэтому приходится использовать “лишний” параметр, в который передается название текущей таблицы, например: #ПоступлениеРеализация(“ПоступлениеТоваровИУслуг”). Подскажите, пожалуйста, можно ли все же обойтись без Параметра1?

      • Пока это единственная возможная реализация данной задачи.
        Однако, в 14-м релизе должны были произойти изменения, в том числе в RLS, и если я не ошибаюсь, был добавлен параметр #ТекущаяТаблица.

        • Делал ДЗ на 14 релизе, так же столкнулся с данной проблемой, пока ничего не изменилось:
          Документ.#ТекущаяТаблица.Товары – все так же ругается на эти строки.

          • Это печально…Не оправдали наших надежд :)

  16. Задание выполнено.
    Для пользователя “Аудитор” сделал право “ТолькоПросмотр”.
    Для управления номенклатурой сделал справочник “Номенклатурные Группы”.
    В справочник “Номенклатура” добавлен реквизит НоменклатурныеГруппы.
    Для менеджеров добавлена роль “Менеджер”.
    При начале работы в параметр сеанса заносятся те номенклатурные группы(фиксированный массив), которые доступны текущему пользователю.
    В справочник и регистры добавлено условие на чтение только разрешенной номенклатуры.
    Для документов также сделано условие на чтение, но в виде шаблона, примерно так:
    <code>
    ГДЕ (НЕ #ТекущаяТаблица.Ссылка В
    (ВЫБРАТЬ ПЕРВЫЕ 1
    ТЧТовары.Ссылка
    ИЗ
    Документ.#Параметр(1).Товары КАК ТЧТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
    ПО
    ТЧТовары.Номенклатура = СпрНоменклатура.Ссылка
    И СпрНоменклатура.НоменклатурнаяГруппа В (&ГруппыДоступаНоменклатуры)
    ГДЕ
    ТЧТовары.Ссылка = #ТекущаяТаблица.Ссылка
    И СпрНоменклатура.Ссылка ЕСТЬ NULL ))
    </code>