1С УПП. Перемещение товаров. Ограничение по складам и подразделениям

1. Описание стандартного механизма ограничения Доступа на уровне записей для документа Перемещение товаров при одновременном использовании ограничений по Подразделениям и Складам
2. Настройка доступа к документу Перемещение товаров, только при условии доступности обоих складов (Склад-получатель и Склад-отправитель) документа

1. Описание стандартного механизма ограничения Доступа на уровне записей для документа Перемещение товаров при одновременном использовании ограничений по Подразделениям и Складам

В моей организации активно используется ограничение Доступа на уровне записей по многим параметрам, в том числе по подразделениям. Когда понадобилось ограничить доступ к Перемещение товаров еще и по складам, после включения соответствующих настроек, у тестируемого пользователя доступ пропадал вообще. Как оказалось, вот почему:

В справке по УПП написано следующее : «Если пользователь входит в несколько групп, у которых разные настройки прав доступа на уровне записей, то доступность объекта для пользователя будет определяться объединением настроек от нескольких групп пользователей по «ИЛИ».» После изучения настроек прав доступа через Конфигуратор, я выяснил вот что: тут имеется ввиду, что настройки объединяются по условию ИЛИ только целыми группами пользователей. В моем случае, если в группе ДоступПодразделений разрешен доступ только к выбранным подразделениям, а в группе ДоступСкладов только к выбранным складам, то УПП определяет доступность документов как максимальный доступ по любой из групп. Но по группе ДоступПодразделений нет разрешения на склады, а в группе ДоступСкладов нет разрешения на подразделения. Т.е. по каждой отдельной группе нет доступа. В итоге- у пользователя доступ закрыт.

Чтобы открыть доступ по выбранным подразделениям и складам, нужно создавать группу, в которой будет одновременно открыт доступ и по подразделениям и по складам.

2. Настройка доступа к документу Перемещение товаров, только при условии доступности обоих складов (Склад-получатель и Склад-отправитель) документа

Для документа Перемещение товаров принцип «ИЛИ» действует в том числе таким образом, что пользователь получает доступ на списание/приход с запрещенного склада, если другой склад (Склад-отправитель или Склад-получатель) он укажет доступный ему. Но обычно на предприятии нужно именно закрыть доступ к определенным складам. Я так понял, что в типовом решении это не предусмотрено, поэтому возникла идея использовать особенность, описанную в п.1.

Порядок действий такой:

1) создаем группу, в которой нет доступа ни к одному подразделению, но есть доступ к нужным складам.

2) в другой группе даем доступ к нужным подразделениям, но без доступа к складам. Итог этих пунктов- стандартные роли определят указанные настройки, как запрет на доступ.

3) создаем новую роль, в которой обрабатываем эти настройки отличным от стандарта образом. В результате- пользователь получит право на документ, только если у него есть доступ к обоим складам. Без учета прав на подразделения, правда. Т.е. для документа ПеремещениеТоваров принимаем, что доступ по подразделениям не важен.

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

Не буду описавать, как включать контроль доступа по подразделениям и складам, это описано уже много раз. Опишу только, как добавить новую роль с нестандартным доступом:

1) В Конфигураторе находим ветку Роли, нажимаем Insert

2) В новой роли на вкладке Права находим ПеремещениеТоваров (или любой другой нужный документ), выделяем его

3) Справа появляется список доступных прав, отмечаем Добавление, в нижнем поле «Ограничения доступа к данным» добавляем строку, в поле «Поля» выбираем, в поле Ограничение доступа пишем запрос из этой статьи.

п. 3 можете повторить для права «Чтение» и «Изменение», а можете указать для «Чтение» например, стандартные настройки.

Текст запроса в поле Ограничение доступа:

 

#Если &ИспользоватьОграничениеПоСклады #Тогда

ТекущаяТаблица

ИЗ

    #ТекущаяТаблица КАК ТекущаяТаблица

        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ

            СоставГруппы.Ссылка КАК ГруппаПользователей

        ИЗ

            Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы

        ГДЕ

            СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей

        ПО (ИСТИНА)

ГДЕ

НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL

И

                ( 2 В

                                                               (ВЫБРАТЬ

                                                                              КОЛИЧЕСТВО (1) КАК КоличествоДоступныхСкладовДокумента

                ИЗ

                    РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа

                                       

                    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей

                        ПО

                            ВЫБОР

                                   

                                    #Если &ИспользоватьОграничениеПоСклады #Тогда

                                    КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Склады)

                                        ТОГДА НастройкиПравДоступаПользователей.ОбъектДоступа В (ТекущаяТаблица.СкладОтправитель, ТекущаяТаблица.СкладПолучатель)

                                    #КонецЕсли

                           

                                КОНЕЦ

                                И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа

                                И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка)

                                                                                               

                                И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей

                                И НастройкиПравДоступаПользователей.Запись = ИСТИНА

                ГДЕ                

                     НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей

                           И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В (

                                                                                  ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка)

                                                                                                                                                                 

                                                                                  #Если &ИспользоватьОграничениеПоСклады #Тогда

                                                                                  , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Склады)

                                                                                  #КонецЕсли

                                                                                 

                                                                                  )

               )

                )

#КонецЕсли

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *