Продвинутый курс. Домашнее задание №4

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

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

В этой же теме необходимо написать отчет о выполнении задания.

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

комментария 23 на “Продвинутый курс. Домашнее задание №4”

  1. Задание сделал. Запрет вывода, как я узнал, не работает. С  РЛС ранее работал.  Сложностей не возникло.

  2. Вячеслав Вязигин 24.03.2011 в 21:05

    РЛС – как много в этих буквах, для сердца 1сного слилось :) Задание выполнено. Но неприязнь к РЛС, как и к СКД все равно в душе сидит :) Особенно вопль клиента в трубку телефона, а-ля: “вот вчера все было, а сегодня после вас все пропало!”. Ну ониж не втыкают в РЛС, а сами просют.

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

    СГРУППИРОВАТЬ ПО
    ТЧТекТаблица.Ссылка) КАК ВложенныйЗапрос
    ГДЕ ВложенныйЗапрос.ЕстьДоступ
    И ТекТаблица.Ссылка = ВложенныйЗапрос.Ссылка

    А вот с шаблоном мучился долго. Почему-то во вложенном запросе (к ТЧ документа) система не понимала #ТекущаяТаблица. Товары. Пришлось обойти через параметр.  Текст шаблона ПоНоменклатурнымГруппам:

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

    СГРУППИРОВАТЬ ПО
    ТЧТекТаблица.Ссылка) КАК ВложенныйЗапрос
    ГДЕ ВложенныйЗапрос.ЕстьДоступ
    И ТекТаблица.Ссылка = ВложенныйЗапрос.Ссылка

    Пример условия РЛС с шаблоном:

    #ПоНоменклатурнымГруппам(“РеализацияТоваровИУслуг”)

    • Попробуйте использовать параметр #ИмяТекущейТаблицы

  4. Задание выполнил.

    1) Создал роль “ТолькоПросмотр” с правами запуска в режиме тонкого и толстого клиента, и правами “Просмотр” и соответсвенно “Чтение” для всех объектов конфигурации. Создал пользователя Аудитор с указанной ролью.

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

    Само условие выглядит так:

    <code>(Номенклатура ГДЕ Номенклатура.ГруппаДоступности В
    #ДоступныеГруппыПользователя ИЛИ ЭтоГруппа)</code>

    б) а вот с документами пришлось голову поломать, хотя в итоге все оказалось довольно просто: создаем шаблон #НоменклатураВТабличнойЧастиПоГруппеДоступности (фактически в нем содержится весь текст условия):

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

    Условие выглядит так: #НоменклатураВТабличнойЧастиПоГруппеДоступности(“Товары”)

    Протестировал – все работает как надо! Для руководителя естественно создаем отдельную роль без этих ограничений.

    P.S. Эталонное решение показалось несколько более запутанным.

  5. Добрый день. Опять начал отставать от графика, поэтому скора беру отпуск на работе, надеюсь догнать, так как не хочется повторять судьбу базового потока.
     
    Что касается задания, то возникла проблема, а именно не  мог понять, как обойти случай, когда в документе имеется запрещенная номенклатура и не запрещенная. После просмотра решения, мне стала стыдно как все банально. Думаю это от того, что темп жизни сейчас дикий.
    Немного не так понял задания, как было приведено в решении. Я не создавал номенклатурную группу, а делал ограничения на папки в самом справочнике номенклатура. Создал Регистр сведений «ОграниченияПоНоменклатуре» Измерения: Пользователь, Номенклатура (предполагается выбор тока папки), так же создал параметр сеанса ТекущийПользователь, создал справочник Пользователь, подобное было в базовом курсе.  
     
    Параметр сеанса заполняю вот так:         
    ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
                    ИмяПользователя = ТекПользователь.Имя;
                    УникальныйИдентификатор = ТекПользователь.УникальныйИдентификатор;
                                   НайденныйЭлемент = Справочники.Пользователи.НайтиПоРеквизиту(“Идентификатор”,СокрЛП(УникальныйИдентификатор));
                    Если  ЗначениеЗаполнено(НайденныйЭлемент) Тогда
                                    ПараметрыСеанса.ТекущийПользователь = НайденныйЭлемент;
                    Иначе    
                                    НовыйЭлемент = Справочники.Пользователи.СоздатьЭлемент();
                                    НовыйЭлемент.Наименование = ИмяПользователя;
                                    НовыйЭлемент.Идентификатор= СокрЛП(УникальныйИдентификатор);
                                    НовыйЭлемент.Записать();
                                    ПараметрыСеанса.ТекущийПользователь = НовыйЭлемент.Ссылка;
                    КонецЕсли;
     
    Так же в решении задания, я запутался в запросе, у меня есть проблемы со сложными запросами. Поэтому делал свой запрос сам, так как его я понимаю. Хотел бы, что бы вы прокомментировали правильность запроса.
     
    ПоступлениеТоваровИУслуг ГДЕ (НЕ ПоступлениеТоваровИУслуг.Товары.Номенклатура В
                                                                   (ВЫБРАТЬ
                                                                                  Номенклатура.Ссылка
                                                                   ИЗ
                                                                                  Справочник.Номенклатура КАК Номенклатура
                                                                   ГДЕ
                                                                                  (НЕ Номенклатура.Родитель В
                                                                                                                  (ВЫБРАТЬ
                                                                                                                                 ОграниченияПоНоменклатуре.Номенклатура
                                                                                                                  ИЗ
                                                                                                                                 РегистрСведений.ОграниченияПоНоменклатуре КАК ОграниченияПоНоменклатуре
                                                                                                                  ГДЕ
                                                                                                                                 ОграниченияПоНоменклатуре.Пользователь = &ТекущийПользователь))
                                                                                  И Номенклатура.ЭтоГруппа = ЛОЖЬ))
     
     
     
     
     
     
    Еще раз напомню, что не создавал дополнительного справочника группа номенклатура, а ограничивал по папкам номенклатуры.
     
    Евгений, было бы классно если бы в коментах код из 1С бы подсвечивался как на mista. – это так не в тему пожелания ))

    • Пожелание про выделение кода у нас записано. Спасибо.

  6. Задание выполнил.

    1. Создал роль Аудитор. Для всех ссылочных обьектов и регистров оставил права «Чтение» и «Просмотр», у корневого элемента оставил права «Тонкий клиент», «Вэб-клиент», «Толстый клиент». Добавил пользователя Аудитор и назначил ему роль Аудитор.

    2. Вторую часть задания решил следующим образом:
    Информация о группах номенклатуры доступных пользователям хранится в регистре сведений ДоступКНоменклатуре с измерениями Пользователь (тип «Строка») и Номенклатура (тип «СправочникСсылка.Номенклатура» свойство «Выбор групп и элементов» в значении Группы). Информация о текущем пользователе сеанса хранится в параметре сеанса ИмяПользователя (для простоты в текстовом виде). Доступные текущему пользователю группы номенклатуры помещаются в параметр сеанса ДоступныеГруппыНоменклатуры, имеющий тип ФиксированныйМассив. Инициализация параметра происходит не при старте системы, а при обращении пользователя к номенклатуре:
    <code>
    Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)

    ПараметрыСеанса.ИмяПользователя = ИмяПользователя();

    Если (ТребуемыеПараметры <> Неопределено) И (ТребуемыеПараметры.Найти(“ДоступныеГруппыНоменклатуры”) <> Неопределено) Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = 
    “ВЫБРАТЬ
    | Номенклатура.Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Ссылка В ИЕРАРХИИ
    | (ВЫБРАТЬ
    | ДоступКНоменклатуре.Номенклатура
    | ИЗ
    | РегистрСведений.ДоступКНоменклатуре КАК ДоступКНоменклатуре
    | ГДЕ
    | ДоступКНоменклатуре.Пользователь = &Пользователь)
    | И Номенклатура.ЭтоГруппа”;

    Запрос.УстановитьПараметр(“Пользователь”, ПараметрыСеанса.ИмяПользователя);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    МассивГрупп = Новый Массив;

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    МассивГрупп.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
    КонецЦикла;

    ПараметрыСеанса.ДоступныеГруппыНоменклатуры = Новый ФиксированныйМассив(МассивГрупп);
    КонецЕсли;

    КонецПроцедуры
    </code>

    При записи новой номенклатурной группы, в модуле объекта Справочник.Номенклатура происходит очистка параметра сеанса ДоступныеГруппыНоменклатуры, для того чтобы при следющем обращении пользователя к номенклатуре, происходила переинициализация параметра с учетом новой группы номенклатуры:
    <code>
    Процедура ПередЗаписью(Отказ)
    Если ЭтоНовый() И ЭтоГруппа Тогда
    МассивПараметров = Новый Массив;
    МассивПараметров.Добавить(“ДоступныеГруппыНоменклатуры”);
    ПараметрыСеанса.Очистить(МассивПараметров);
    КонецЕсли;
    КонецПроцедуры
    </code>

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

  7. Задание выполнено

    Создала новую роль ПраваАудитора. Права только на Просмотр и Чтение всех объектов конфигурации, в корневом узле права только на толстый и тонкий клиент.
    Создала справочник НоменклатурныеГруппы, справочнику Номенклатура добавлен реквизит- ссылка НоменклатурнаяГруппа. Создан регистр сведений НГМенеджеров с измерениями Пользователь, НоменклатурнаяГруппа. Создан параметр сеанса «Пользователь», который заполняется в модуле сеанса. Создала роль «ОграничениеПоНГ».

    Ограничение доступа для документов настраивается с использованием вложенного запроса. Во вложенном запросе выбираем регистр сведений и дважды табличную часть документа. Устанавливаем связь РС НГМенеджеров  и ТабличнойЧасти1 по номенклатурной группе, накладываем условие по пользователю НГМенеджеров.Пользователь = &Пользователь. Группируем по ссылке, накладываем условие, что максимум номера строк из ТабличнаяЧасть1= максимуму из ТабличнаяЧасть2. Сам документ связываем с вложенным запросом по ссылке. Создала шаблон запроса.
    Для руководителя создала отдельную роль.

  8. ДЗ выполнено
    1. Создал роль Аудитор, для всех объектов конфигурации установил права на чтение и просмотр. Для корневого узла установил флажки на запуск только для толстого и тонкого клиента, остальные флажки снял. Создал пользователя Аудитор и присвоил ему соответствующую роль.
    2. Создал справочник “Пользователи”, для этого справочника создал реквизит НачальникОтдела. Создал параметр сеанса ТекущийПользователь соответствующего типа. Создал справочник НоменклатурныеГруппы, добавил соответствующий реквизит в справочник Номенлатура. Написал обработку автоматического заполнения этого реквизита по группе номенклатуры. Для новых элементов реализовал автозаполнение реквизита. Чтобы обеспечить хранение информации о номенклатурных группах менеджеров создал РС НоменклатурныеГруппыМенеджеров. Регистр без ресурсов, только два измерения – Менеджер и НоменклатурнаяГруппа. Создал параметр сеанса НоменклатурныеГруппыМенеджера, тип ФиксированныйМассив. Копированием полных прав создал роль Менеджер.
    В модуле сеанса инициализируются параметры. НоменклатурныеГруппыМенеджера – запросом выбираю из РС группы номенклатуры для данного пользователя. В справочнике Номенклатура для роли Менеджер написал запрос для ограничения доступа, выбираются только те элементы справочника, у которых реквизит НоменклатурнаяГруппа входит в массив из параметра сеанса.
    Для документов настройка RLS несколько сложнее. Сделал шаблон, где параметр, это табличная часть документа, к ней левым соединением по реквизиту НоменклатурнаяГруппа присоединяю номенклатуру из доступных менеджеру номенклатурных групп. На верхнем уровне запроса выбираю записи, для которых ссылка на номенклатуру из разрешенной группы не NULL. Также, чтобы для руководителя отдела ограничение не действовало, проверяю в запросе RLS реквизит НачальникОтдела для текущего пользователя. Шаблон использовал для получения права на чтение у документов поступления и реализации товаров.

    • Да, еще забыл указать, что в левом соединении условие не только по равенству номенклатурных групп, но и по менеджеру.

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

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

  11. 1.1.Создал роль “Аудитор” у которой разрешил в на корне “толстый клиент” и “Тонкий клиент”,
    и у всех объектных компонент усановил опции “просмотр” и “чтение”, у отчётов
    “использование” и “просмотр”.  Все остальные опции сброшены особенно у опции
    “Вывод”, внешнее соединение корня дерева объектов.
    1.2.Создал пользователя “Аудитор” и указал ему роль “Аудитор”.
    2.1. Т.к. из задания не понятно допускается у 1 менеджера только 1 группа или
    несколько – следует предполагать, что их будет несколько. Если-бы можно, т.о.
    придётся вводить новый реквизит или объект. Для запросов было-бы легче если-бы
    был у группы спецреквизит, но тогда этот-же реквизит будет и у всех элементов
    справочника, что приведёт к слишком большому кол-ву избыточной информации –
    поэтому сделал Регистр сведений “ГруппыНоменклатуры” с 2 измерениями
    (“ИмяПользователя” и “Группа”). Также сделал параметр сеанса “ИмяПользователя” и
    в модуле сеанса инициализировал его.
    2.2. Скопировал рольь полные права, сделал шаблон органичений с текстом
    Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыНоменклатуры КАК ГруппыНоменклатуры
    ПО (ГруппыНоменклатуры.ИмяПользователя = &ИмяПользователя)
    И
    (Номенклатура.Родитель = ГруппыНоменклатуры.Группа
    ИЛИ
    Номенклатура.Ссылка = ГруппыНоменклатуры.Группа)
    и задал его для всех 4 свойств связаных с RLS справочника номенклатура.
    2.3. Аналогично для документов сделал шаблон с текстом:
    ПоступлениеТоваровИУслуг ИЗ Документ.#Параметр(1)ТоваровИУслуг КАК ПоступлениеТоваровИУслуг
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыНоменклатуры КАК ГруппыНоменклатуры
    ПО ПоступлениеТоваровИУслуг.Товары.Номенклатура.Родитель = ГруппыНоменклатуры.Группа
    И (ГруппыНоменклатуры.ИмяПользователя = &ИмяПользователя)
    И НЕ (ПоступлениеТоваровИУслуг.Товары.Номенклатура.Родитель <> ГруппыНоменклатуры.Группа)
    2.4.Создал пользователей “Иванов” и “Петров” с единственной ролью “менеджер”, сделал пользователя “НачПетроваИИванова” и сделал ему другую роль (в которой органичений по RLS нет).
     
    есть 2 вопроса:
    1.хотя в части 1  снял галочку с “вывод” – из программы можно копировать в буфер обмена. Это бага платформы или не всё сделал?
    2.Мы выбиваемся из графика? блок 0 должен был быть завершён 06.02 . Имеет смысл углубляться далее (ведь материал лучше закрепляется если по изучения ряда глав по ним делать ДЗ а не по изученю материала, который будет использован в последующих ДЗ)

    • 1. Это поведение было признано ошибкой платформы.
      2. Да, отставание имеется. Отчасти это связано с техническими проблемами, отчасти с невысоким темпом выполнения заданий участниками.
      Самостоятельно вперед конечно можно идти. Но я бы посоветовал изучать дополнительные материалы: бонусы, сессии мастер-групп, в ближайшее время выложу бонус по ЗУП.
      А темы курса изучать по мере продвижения группы вперед.

      • В связи с этим два вопроса:
        1. Будет ли продлен доступ в мастер-группу,
        ведь можем не успеть?
        2. Почему бы при выкладывании материалов не приводить план домашних заданий, т.е. по каким темам будет то или иное ДЗ, сделать это не сложно, а польза при планировании большая.
        Было бы идеально и предполагаемые даты выкладывания ДЗ.

        • 1. Да, конечно продлим.
          2. То есть хотелось бы видеть план-график курса? Поработаем над этой задачей..

          • 2. То есть хотелось бы видеть план-график курса?
            Да верно план-график.

      • Ну время всегда есть куда-то деть, но когда вот так вот вдруг оказывается что сегодня не нужно смотреть очередные уроки – как-то странно что излишек времени появляется…
        Бонус по ЗУП – это круто!

  12. Создал новую роль Аудитор у этой роли установил права только на Просмотр и Чтение всех объектов конфигурации, кроме того на уровне корневого узла оставил флажки только на тонкий и толстый клиент, все остальные в том числе флаг напротив роли Вывод снял.
    Для реализации второй части задания создал справочник Пользователи и параметр сеанса «Текущий пользователь», который заполнял в модуле сеанса. Для реализации разбиения номенклатуры по группам решил не привязываться к иерархической структуре справочника Номенклатура, а создал новый справочник «Группы номенклатуры» с табличной частью «Товары» и одни реквизитом «Товар». Для хранения прав доступа Менеджеров создал регистр сведений «Доступ к номенклатуре» с двумя измерениями «Пользователь» и «Группа номенклатуры». Создал роль «Менеджер» у данной роли убрал все права доступа со справочников «Группы номенклатуры», «Пользователи» и регистра сведений «Доступ к номенклатуре», а также права интерактивного просмотра и редактирования регистров накопления «Остатки товаров» и «Продажи».
    Затем началось самое интересное. Право на чтение к справочнику «Номенклатура» реализовал путем последовательного внутреннего соединения необходимых таблиц и затем преобразовал в шаблон следующего вида:
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыНоменклатуры.Товары КАК ГруппыНоменклатурыТовары                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДоступКНоменклатуре КАК ДоступКНоменклатуре ПО ГруппыНоменклатурыТовары.Ссылка = ДоступКНоменклатуре.ГруппаНоменклатуры                И(ДоступКНоменклатуре.Пользователь = &ТекущийПользователь) ПО (#ТекущаяТаблица.#Параметр(1) = ГруппыНоменклатурыТовары.Товар ИЛИ #ТекущаяТаблица.ЭтоГруппа)
    Хотя шаблон здесь в принципе не нужен был, поскольку в конфигурации больше нет объектов имеющих реквизит типа «Номенклатура» не в табличных частях. Но так универсальнее, а вдруг появятся в будущем.
    При создании запроса RLS для объектов, имеющих в табличной части реквизит типа «Номенклатуры», не удалось обойтись без вложенного запроса. Основная идея при этом следующая, во вложенном запросе, я левым соединением к ТЧ с реквизитом «Номенклатура» присоединял «разрешнную» номенклатуру из справочника «Группы номенклатуры» с условием по пользователю через регистр «Доступ к номенклатуре». Результат группировал по ссылке и в секции ИМЕЮЩИЕ накладывал условие на равенство количества номенклатуры в ТЧ и количества номенклатуры из справочника «Группы номенклатуры», т.е. если объект с ТЧ содержит только «разрешенные» позиции из справочника «Группы номенклатуры» и ни одной лишней, то ссылку на этот объект возвращает этот запрос, если же в ТЧ находится хотя бы одна «не разрешенная» номенклатура, то запрос ничего не возвращает. Эта оказалась самая сложная часть задания. На базе отлаженного запроса создал шаблон для всех объектов имеющих в ТЧ реквизит типа «Номенклатура» в этот шаблон передавалось три параметра: тип объекта(«Справочник», «Документ»); имя объекта («ПоступлениеТоваровиУслуг») и имя ТЧ («Товары»). Подумал и добавил четвертый параметр имя реквизита (а вдруг назовут Товар, а не Номенклатура, я же так назвал).
    Этот шаблон я использовал для задания RLS на «Чтения» у документов «Поступление товаров и услуг», «Реализации товаров и услуг» и справочника «Изменения цен».
    Для отключения ограничений у руководителей отделов, рассматривал три варианта:

    Создать новую роль «Начальник отдела» и не париться.
    Добавить в справочник «Пользователи» реквизит «Начальник отдела» и  модифицировать запросы в RLS.
    Добавить в справочник «Пользователи» реквизит «Начальник отдела», создать новый параметр сеанса «Начальник отдела», инициализируя его из одноименного реквизита справочника «Пользователи» и модифицировать RLS, но, не переписывая запрос, а используя инструкции препроцессору, отключая контроль для начальников.

    Третий вариант мне показался самым оптимальным, его и реализовал.