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

07.10.16

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

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

Файлы

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

Наименование Скачано Купить файл
НастройкаПравДоступа
.epf 48,35Kb
45 1 850 руб. Купить
Текст кодов
.doc 158,50Kb
35 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    209276    1147    413    

1040

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

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

16000 руб.

10.11.2023    17960    78    39    

92

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

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

5940 руб.

27.05.2021    45379    344    107    

275

SALE! 10%

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.06.2025, версия 1.3

19200 17280 руб.

06.12.2023    16515    62    10    

96

Ценообразование, анализ цен Роли и права Системный администратор 1С v8.3 Управление правами 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С:УНФ 1.6 и 3.0. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

3000 руб.

23.02.2018    62822    176    264    

166

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

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9360 руб.

14.09.2022    7334    12    6    

15

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

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

4560 руб.

21.05.2019    1697981    583    194    

142
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 30 19.02.19 10:16 Сейчас в теме
(4) почему? все работает..
Жалко, что не видел этой публикации раньше - сэкономил бы изрядно времени...
7. zayden 18 19.02.19 12:47 Сейчас в теме
(5) тогда сос

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

это как вот? Делается? - а также пару строк в процедуры - что именно и в какие процедуры
9. Mikeware 30 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 36 19.02.19 17:29 Сейчас в теме
(6) В отчетах никак не отображаются наложенные ограничения.
Это касается не только ограничения по кассам, а и любого другого.

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