Ограничение доступа на уровне записей по кассам

07.10.16

Администрирование - Роли и права

В типовой конфигурации УПП нет ограничения доступа на уровне записей по кассам, а очень хотелось бы. Наверно, предполагается, что достаточно ограничить по организации-подразделению, и этого должно хватить. Но когда в одной организации есть несколько касс, этого сочетания недостаточно: кассиры в документах и отчетах видят "чужие" кассы. В статье приводится список доработок, которые необходимо сделать, чтобы ограничение действительно работало. Думаю, что аналогичные доработки можно воспроизвести в конфигурациях "Управление Торговлей 10.3" и "Комплексная автоматизация 1.1". Также публикация поможет понять, как добавить свой вид ограничения доступа: по расчетным счетам например.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
НастройкаПравДоступа
.epf 48,35Kb
44
44 Скачать (1 SM) Купить за 1 850 руб.
Текст кодов
.doc 158,50Kb
34
34 Скачать (1 SM) Купить за 1 850 руб.

Чтобы понять, как это все работает, пришлось покопаться в конфигураторе. Но в итоге объем доработок сравнительно небольшой, конфигурацию легко будет обновлять в дальнейшем. Надеюсь, это кому-нибудь пригодится и облегчит реализацию в своей базе.

1. Перечисление "ВидыОбъектовДоступа" - добавляем новое значение "Кассы". В результате в параметрах доступа увидим желанную строку с кассой:

2. Перечисление "ОбластиДанныхОграниченияПравДоступа" - добавляем новое значение "КассыДанные".

3. В параметры сеанса добавляем "ИспользоватьОграничениеПоКассы" с типом "булево".

4. В общем модуле  "НастройкаПравДоступа" в функцию "ПолучитьВидОбъектаДоступа" добавляем 2 строки:

ИначеЕсли ТипЗнч(ОбъектДоступа) = Тип("СправочникСсылка.Кассы") Тогда
		Возврат Перечисления.ВидыОбъектовДоступа.Кассы;
	

5. В регистре сведений "НастройкиПравДоступаПользователей" в два измерения "ОбъектДоступа" и "ВладелецПравДоступа", которые уже имеют составной тип данных добавляем тип "СправочникСсылка.Кассы".

6. В обработке "НастройкаПравДоступа"  - в панель "ПанельОбластейДанных" добавляем новую страницу "Кассы" с табличным полем "ТаблицаПарвДоступа_Кассы", а также пару строк в процедуры. Сама обработка приложена к публикации. Ее кстати можно будет вставить во внешние обработки и вызывать оттуда, а не заменять встроенную.

6. Создаем новую роль "Т_Кассир" (название любым может быть) путем копирования встроенной роли "Кассир". Эту роль необходимо будет дать всем пользователям, которым хотим ограничить кассы, а типовую роль "Кассир" у них убрать. Можно и типовую роль "сломать", но с добавлением новой роли будет легче обновлять конфигурацию.

7. И самое сложное - настроить ограничения доступа у новой роли.

Открываем роль, находим документ "Приходный кассовый ордер", выбираем право "Чтение" , слева жмем кнопку "Установить ограничение данных для полей" и текст ограничения меняем на такой:

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

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

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

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

Аналогично необходимо сделать для права "Добавление", "Изменение".

Точно таким же образом допиливаем ограничения роли для документа "Расходный кассовый ордер", а также для журнала документов "Кассовые документы".

Такая доработка скроет для пользователя в списках этих документов те, которе не относятся к "его" кассе.

Чтобы скрыть данные в отчетах (Ведомость по денежным средствам, Движения денежных средств) необходимо исправить текст ограничений для регистров накопления "ДвижениеДенежныхСредств" и "ДенежныеСредства", по которым строятся эти отчеты. Это делается аналогично, как сделано в документах.

(кстати в типовой роли "Кассир" для регистра накопления "Денежные средства" вообще нет никаких ограничений доступа, так что даже сочетанием настроек  ограничений по организации-подразделению не удастся ограничить в него доступ без доработки).

Если непонятно, как писать эти ограничения - текст готовых кодов для каждого объекта приложен к публикации.

В результате пользователь, у которого стоит ограничение по одной кассе видит в документах и отчетах следующее:

При этом пользователь без ограничений видит все документы:

Ограничение доступа кассы УПП

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    152738    836    398    

846

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

15600 руб.

06.12.2023    7814    36    5    

67

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    9456    35    10    

57

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 руб.

27.05.2021    36560    252    90    

197

Роли и права Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

19200 руб.

29.11.2019    25519    17    8    

37

Роли и права Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Бухгалтерия автономного учреждения 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Платные (руб)

Мучаетесь со списком типовых ролей? Не хотите иметь дело с конфигуратором? Не знаете что делают имеющиеся права в базе? Хотите просто и удобно добавлять и настраивать, по одному клику, доступы и поведение при записи/удалении/проведении/открытии списка/фильтрацию данных в списках или формах выбора для пользователя или группы пользователей и для любого объекта? Не хотите переживать, что при обновлении конфигурации все права и роли слетят? (Обновление от 27.03.2023, версия 1.9)

13200 руб.

21.03.2022    15863    24    54    

46

Логистика, склад и ТМЦ Роли и права Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

4200 руб.

21.05.2019    1694404    565    194    

137
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Азверин 3 10.04.17 09:38 Сейчас в теме
Спасибо за статью и пример. Очень помогло!
2. j3d 34 25.04.18 15:53 Сейчас в теме
Приветствую!
спасибо за замечательную публикацию . Решил интегрировать ее в КА 1.1.101.1.
Все прошло на ура.
Создал две кассы (Москва, Воронеж).
Добавил коды ограничений согласно инструкции.
(Роль Кассир скопировал назвал как и у вас Т_Кассир)
Регистр Денежные средства срабатывает нормально
а вот Движение денежных средств все равно открыт

хотя код внес согласно инструкции
Прикрепленные файлы:
3. Bacemo 23.07.18 10:33 Сейчас в теме
Спасибо. Публикация помогла.
4. zayden 18 19.02.19 09:42 Сейчас в теме
то есть без скачивания обработки не взлетит?
5. Mikeware 9 19.02.19 10:16 Сейчас в теме
(4) почему? все работает..
Жалко, что не видел этой публикации раньше - сэкономил бы изрядно времени...
7. zayden 18 19.02.19 12:47 Сейчас в теме
(5) тогда сос

6. В обработке "НастройкаПравДоступа" - в панель "ПанельОбластейДанных" добавляем новую страницу "Кассы" с табличным полем "ТаблицаПарвДоступа_Кассы", а также пару строк в процедуры. Сама обработка приложена к публикации. Ее кстати можно будет вставить во внешние обработки и вызывать оттуда, а не заменять встроенную.

это как вот? Делается? - а также пару строк в процедуры - что именно и в какие процедуры
9. Mikeware 9 20.02.19 07:29 Сейчас в теме
(7) в
Функция ПолучитьСписокОбластейДанных(ТипДанных)

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

- смотри и делай по аналогии, например с Организациями
11. zayden 18 20.02.19 08:37 Сейчас в теме
6. acanta 19.02.19 10:26 Сейчас в теме
Спасибо огромное, лучший пример и очень доступно о такой сложной и нелюбимой области как rls. Единственное - в шапках отчета как можно определить по каким ограничениям они построены?
8. Diego_Iv 34 19.02.19 17:29 Сейчас в теме
(6) В отчетах никак не отображаются наложенные ограничения.
Это касается не только ограничения по кассам, а и любого другого.

Если пользователю, например, разрешена только одна организация - во всех отчетах и справочниках он просто будет видеть свою разрешенную организацию и даже не подозревать, что в базе есть какие-то иные.
10. Mikeware 9 20.02.19 07:31 Сейчас в теме
(8) Это если RLS настроена на регистры(вообще данные) по которыми строится отчет. иначе получится, что отчет построен - а вот вместо запрещенных объектов <Объект не найден...>
12. Diego_Iv 34 20.02.19 14:15 Сейчас в теме
(10) Да, совершенно верно. Спасибо за уточнение.
13. Mikeware 9 21.02.19 07:14 Сейчас в теме
Интересна кому-нибудь обработка тестирования RLS от имени пользователя? (а то есть сделанная на основе https://infostart.ru/public/288530/, но надо причесать-пригладить прежде чем выкладывать)
14. hacibaba 30.07.21 19:00 Сейчас в теме
Здраствуйте спасибо вам. Просто сейчас после того как я поставил ограничение по кассе , после этого в отчете Ведемость по денежным средствам, пропали движение по банковским счетам.. В отчете видно результаты только по кассам которым поставлено ограничения. Как это можно испарваить ?
Оставьте свое сообщение