Как прятать реквизит...

16.01.11

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

Задача: Нужно, чтобы определенный пользователь «не видел» определенный реквизит.  

 Поиск в интернете не дал ожидаемых результатов :-( , но показал, что тема интересует многих…

 

Т.к. реализация RLS в 1С не позволяет реализовать это (чтение объекта возможно только целиком, и если вы ограничиваете чтение определенного реквизита, то такие объекты не отображаются в списках и не открываются). 

А надо, чтобы объекты отображались в списках и открывались,  но определенный пользователь не видел определенный реквизит.

Можно конечно, управлять видимостью данного реквизита (а в комплекте с ним и надписью к нему), но «пустое» поле на форме может вызвать вопросы. Тем более вопросы вызовет отсутствие реквизита, который ТОЧНО должен быть…

Предлагается частное решение - для формы документа и списка документа.

Допустим пользователь с ролью «Просмотр» не должен видеть значение реквизита «Комментарии» в форме документов и в форме их списков.

 

Чтобы не переписывать все документы (их формы и списки) найдем общие для всех них процедуры из «ПриОткрытии» формы документов и форм списков документов:

Для форм документов, это:  

// Установить доступность формы с учетом даты запрета редактирования
РаботаСДиалогами.УстановитьДоступностьФормыДляРедактирования(ЭтотОбъект, ЭтаФорма);
Для форм списков , это –
// Проверка однофирменности
РаботаСДиалогами.УстановитьОтборПоОрганизации(ЭтаФорма, глЗначениеПеременной("УчетПоВсемОрганизациям"), глЗначениеПеременной("ОсновнаяОрганизация"), "ДокументСписок");
Добавим в найденные в п. 1 вызов своих процедур:
Процедура УстановитьДоступностьФормыДляРедактирования(ДокументОбъект, ФормаДокумента) экспорт
…
мойПроцедуры.ПроверкаФормы(ДокументОбъект, ФормаДокумента);
…
КонецПроцедуры         // УстановитьДоступностьФормыДляРедактирования
 
Процедура УстановитьОтборПоОрганизации(Форма, УчетПоВсемОрганизациям, ОсновнаяОрганизация, ИмяРеквизитаСписка, СкрыватьКолонку = Истина, ИмяОтбора = "Организация") Экспорт
…
               МойПроцедуры.ПроверкаФормыСписка(Форма);
…
КонецПроцедуры // УстановитьОтборПоОрганизации()

 

Добавим общий модуль «мойПроцедуры» (галочка «Клиент», но НЕ галочка «Привелигированный») и впишем в него:

 

//Документы
 
Процедура ПроверкаФормы(ДокументОбъект, ФормаДокумента) Экспорт            
Если НЕ РольДоступна("Просмотр") Тогда
                               Возврат;
                Иначе
               ОбработкаОткрываемойФормыДляПросмотра(ДокументОбъект, ФормаДокумента);
КонецЕсли;      
КонецПроцедуры
 
Процедура ОбработкаОткрываемойФормыДляПросмотра(ДокументОбъект, ФормаДокумента)
                СписокРеквизитовПроверки=НОВЫЙ СписокЗначений;
                СписокРеквизитовПроверки.Добавить("Комментарий", , ,);
              
                МетаданныеДокумента = ДокументОбъект.Метаданные();
              
                Для КАЖДОГО текРеквизитПроверки ИЗ СписокРеквизитовПроверки Цикл
                               Если ОбщегоНазначения.ЕстьРеквизитДокумента(текРеквизитПроверки.Значение, МетаданныеДокумента) Тогда                           
               ФормаДокумента.ЭлементыФормы[текРеквизитПроверки.Значение].Данные="";            
               КонецЕсли;
                              
КонецЦикла;
КонецПроцедуры
 
//Списки
Процедура ПроверкаФормыСписка(ТекФорма) Экспорт
Если НЕ РольДоступна("Просмотр") Тогда
               Возврат;
Иначе
               ОбработкаОткрываемойФормыСпискаДляПросмотра(ТекФорма);
КонецЕсли;      
КонецПроцедуры
 
Процедура ОбработкаОткрываемойФормыСпискаДляПросмотра(ТекФорма);
СписокРеквизитовПроверки=НОВЫЙ СписокЗначений;
СписокРеквизитовПроверки.Добавить("Комментарий", , ,);
              
//Перебрать все табличные части
Для КАЖДОГО текРеквизитПроверки ИЗ СписокРеквизитовПроверки Цикл
               Для КАЖДОГО текЭлемент ИЗ ТекФорма.ЭлементыФормы  Цикл
                               Если НЕ ТипЗнч(текЭлемент)=Тип("ТабличноеПоле") Тогда
                                               Продолжить;
                               КонецЕсли;
                               Для КАЖДОГО текКолонкаТабПоля ИЗ текЭлемент.Колонки Цикл
                                               Если текКолонкаТабПоля.Имя=текРеквизитПроверки.Значение Тогда
                                                               текКолонкаТабПоля.Данные="";
                                               КонецЕсли;
                               КонецЦикла;
               КонецЦикла;
КонецЦикла;
КонецПроцедуры

 

В этих процедурах, мы находим интересующий нас реквизит и подменяем для него источник данных (если «обнулять» значение реквизита, то форма документа будет «Модифицироваться» и при выходе спрашивать «Сохранить изменения?» и возможно стереть значение «Коментария»).

 

 

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159416    872    399    

861

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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

16800 руб.

06.12.2023    8842    42    5    

73

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10417    36    21    

61

SALE! 20%

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

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

5940 4752 руб.

27.05.2021    37562    264    92    

205

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

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

4560 руб.

21.05.2019    1694764    570    194    

137

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

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

3000 руб.

23.02.2018    58453    160    261    

152

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

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

19200 руб.

29.11.2019    25657    16    8    

37
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ish_2 1112 16.01.11 13:26 Сейчас в теме
А отчеты , печати документов и т.д. ?
Стоит ли огород городить ?
2. AnryMc 848 16.01.11 13:47 Сейчас в теме
(1) Я и написал "Предлагается частное решение."
С удовольствием выслушаю предложение, как максимально просто решить задачу.
11. Ish_2 1112 16.01.11 18:28 Сейчас в теме
(2) Нет у меня решения.
Стоило указать в теме , что решение не претендует на полное сокрытие информации о реквизите,
т.к. есть еще печатные формы - и никаких вопросов и придирок бы не возникло.
Просто такие важные вопросы не стоит оставлять по умолчанию - а указывать явно.
cool.vlad4; +1 Ответить
12. cool.vlad4 2 16.01.11 18:41 Сейчас в теме
Согласен с (11), сокрытие реквизита в данном случае же не абсолютно, а только для форм и "списков" форм с указанными в публикации процедурами(конф-цию тогда можно указать)
13. AnryMc 848 16.01.11 18:55 Сейчас в теме
(11) Согласен - подправил "Предлагается частное решение - для формы документа и списка документа"
(12) האמת
3. AnryMc 848 16.01.11 14:00 Сейчас в теме
(1) В 1С (1.0, 3.0, 4.0, 5.0, 6,0, 7.0, 7.5, 7.7, 8.0, 8.1, 8.2) и в Windows (1.0, 2/0, 3.0, 3.1, 3.1 FWG, 3.1 NT, 3.5 NT, 3.51 NT, 95, 4.0 NT, 98, 98 SE, 2000, Me, XP, Windows Fundamentals for Legacy PCs, Vista, HS, S 2008, 7, S 2008 R2) в принципе нельзя ЗАЩИТИТЬ данные, а можно только ЗАТРУДНИТЬ доступ к ним...
:D
4. vcv 89 16.01.11 14:14 Сейчас в теме
(3) Ну, что в 1С "нельзя защищить данные", может быть еще можно согласиться. А при чем тут Windows и чем он не даёт защищать данные?
5. AnryMc 848 16.01.11 14:52 Сейчас в теме
(4) Ещё не попадал в ситуацию, когда мне очень хотелось что-то сделать в Windows, а политики это запрещали... С большими или меньшими временными затратами я это делал...
6. AnryMc 848 16.01.11 14:55 Сейчас в теме
(4) Спасибо за ссылку http://www.forum.mista.ru/topic.php?id=155455 - очень пригодилась
7. cool.vlad4 2 16.01.11 15:04 Сейчас в теме
(0) Первое впечатление может быть обманчивым, но оно как-то не очень - код не понравился, как альтернативно решить проблему подумаю, но не в выходные. Насчет защиты - вопрос всегда будет спорным доколе спорящие стороны не договорятся о том какой смысл они вкладывают в это - "защита данных" - в зависимости от смысла может и результат быть разным - и да (т.е. можно защитить) и нет (невозможно)
8. AnryMc 848 16.01.11 15:24 Сейчас в теме
(7) Хочется увидеть результат обещания.
Feci, quod potui, faciant meliora potentes
10. cool.vlad4 2 16.01.11 18:06 Сейчас в теме
(8) может быть, но только я ничего не обещал...
ЗЫ הבלים ;)
9. Русский 47 16.01.11 15:32 Сейчас в теме
(0) переходите на 8.2, там есть пользовательская видимость (видимость по ролям) :!:
14. maxp77 17.01.11 01:05 Сейчас в теме
"Т.к. реализация RLS в 1С не позволяет реализовать это (чтение объекта возможно только целиком, и если вы ограничиваете чтение определенного реквизита, то такие объекты не отображаются в списках и не открываются). "
- неверное утверждение, 4 года назад я с этим уже боролся и поборол, вот обсуждение и решение:
http://www.forum.mista.ru/topic.php?id=248242
15. Ish_2 1112 17.01.11 11:27 Сейчас в теме
(14) Здесь изложить сможете ?
16. AnryMc 848 17.01.11 20:57 Сейчас в теме
(14) Насколько я понял по ссылке находиться решение, когда в список документов не попадают документы с определенным значением реквизита. И такие документы вообще не открываются. А мне нужно не показывать значение определенного реквизита (т.е. в списке видны все документы и выводятся все реквизиты, но один реквизит "пустой").
17. maxp77 18.01.11 09:29 Сейчас в теме
(16) Там решение задачи: необходимо, чтобы часть реквизитов документов(справочников) некоторым пользователям(то бишь одной роли) были недоступны для чтения, если в настройках списка документов или среди полей выборки в запросе присутсвует отсекаемый реквизит (он видим в списке), то данные из базы не получаются; отсутствует (не видим) - все документы видны; тоже самое с формой документа: отсекаемый реквизит присутсвует на форме - форма не откроется вообще, отсутствует - откроется. P.S. На кой в списке документов показывать целиком пустую колонку, ее нужно предварительно сделать невидимой для пользователя - кому не стоит, тот даже знать не будет о существовании отсекаемого реквизита.
(15) извините, некогда отсекать зерна от плевел.
18. Ish_2 1112 18.01.11 09:54 Сейчас в теме
19. AnryMc 848 18.01.11 20:44 Сейчас в теме
(17) Может я туплю, но в (0) я и написал " (чтение объекта возможно только целиком, и если вы ограничиваете чтение определенного реквизита, то такие объекты не отображаются в списках и не открываются)", т.е. я это решение знаю, но меня оно не устраивает.
В приведенной вами в (14) ссылке решения нет только обсуждение.
20. V.Nikonov 120 19.01.11 18:05 Сейчас в теме
Есть ещё одина идея решения проблемы: Реквизит - вещь условная, есть пользовательское понятие реквизита (то что на экране) и программисткое (компонент объекта). Я проектировал подобные вещи выселяя частично открытые "реквизиты" в свойства объекта или связанные справочники. При этом приходилось писать код вывода на экран и управления доступом.
В списке свойств, можно пропускать некоторые ("запрещённые") строки. Одиночные реквизиты выносить на вкладки и не открывать вкладку формы, скрывать "защищённые" колонки списков...
21. bulpi 217 19.01.11 21:39 Сейчас в теме
Похоже, я туплю :?:
Что мешает написать
Если Не РольДоступна("ПолныеПрава") Тогда ЭлементыФормы.Реквизит.Видимость=Ложь КонецЕсли;
?????
22. cool.vlad4 2 19.01.11 22:51 Сейчас в теме
(21) Ну этот прием стар как мир, где-то на ИС даже целая конфа на эту тему - можно еще для разнообразия(в зависимости от целей) использовать ТолькоПросмотр, Доступность(у себя в конфе так и сделал) - но все это свойства элементовформ, т.е. прочитать реквизиты все равно есть возможность(почему я и промолчал)
23. AnryMc 848 20.01.11 12:32 Сейчас в теме
(21) Если сделать реквизит невидимым, а пользователь знает, что он должен быть, возникают вопросы... а иногода желание и стремление увидеть скрытое...
А так поле есть, но в нем ничего нет...
24. cool.vlad4 2 20.01.11 12:41 Сейчас в теме
(23) Поле есть, а данных нет - во-первых это дезинформация, а во-вторых - как пользователь узнает, что в поле действительно ничего нет или это у него так заблокировано и в-третьих как пользователь определяет, что данное поле соотносится с данным реквизитом, вследствие чего у него не возникает вопросов?
25. AnryMc 848 20.01.11 15:38 Сейчас в теме
(24) Согласитесь, что жизнь сложна и многообразна… Возможно и надо ввести в заблуждение… А когда не показываются документы по RLS – это не ввод в заблуджение?
Скажем так – это требование заказчика показывать все документы, но не показывать определенные реквизиты в них.
28. romansun 194 08.03.11 22:01 Сейчас в теме
(23)(26)
а в 8.2 есть возможность именно показать пустое поле? Ведь, я так понял, надо само поле-то показать, а вот значение в нём - нет :).

У моих пациентов до показа пустых полей дело как-то не дошло... Но некую систему прав для регулирования всех этих видимостей и доступностей пришлось мутить.
29. mc2 18 08.03.11 22:19 Сейчас в теме
romansun пишет:

(23)(26)

а в 8.2 есть возможность именно показать пустое поле? Ведь, я так понял, надо само поле-то показать, а вот значение в нём - нет .



У моих пациентов до показа пустых полей дело как-то не дошло... Но некую систему прав для регулирования всех этих видимостей и доступностей пришлось мутить.


В управляемых формах если поле недоступно пользователю, то оно не отображается вообще. На обычных формах я не проверял. Но в принципе не понятно зачем отображать поле без информации? Чтобы юзера унизить? :)
26. mc2 18 26.01.11 11:17 Сейчас в теме
Т.к. реализация RLS в 1С не позволяет реализовать это (чтение объекта возможно только целиком, и если вы ограничиваете чтение определенного реквизита, то такие объекты не отображаются в списках и не открываются).

А надо, чтобы объекты отображались в списках и открывались, но определенный пользователь не видел определенный реквизит.


А не проще перейти на 1С 8.2 где RLS позволяет установить доступ по ролям к любому реквизиту, я этим уже больше года пользуюсь и никаких проблем нет...
27. AnryMc 848 08.03.11 19:05 Сейчас в теме
(26) После отказа 1С от поддержки 81, клиенту придется перейти на 82. Воспользуюсь Вашим советом.
30. AnryMc 848 08.03.11 22:35 Сейчас в теме
вообще мне интересно - программисты делают то что хочет заказчик, или берут деньги за вопросы: "А зачем?..."
Это вообще область инжиниринга и консалтинга, но не программирования
32. CaSH_2004 373 23.11.11 16:28 Сейчас в теме
(30)Если программист будет делать только то что хочет заказчик, то потом он все будет это переделывать т.к. заказчик не знал что "это неправильно", потому что программист постеснялся спросить "зачем это надо".
У меня такое сплошь и рядом, поэтому часто я трачу 30 мин. на выяснение вопроса, и 5 мин. на написание кода, и не исправляю потом то что не нужно.
Собственно если бы так как вы предлогаете поступили бы с вами, то и вам бы это потом не понравилось, уверен.
33. AnryMc 848 06.05.13 18:05 Сейчас в теме
(32) CaSH_2004,

В принципе согласен, но...
31. Spartan 365 09.03.11 08:37 Сейчас в теме
AnryMc пишет:

вообще мне интересно - программисты делают то что хочет заказчик, или берут деньги за вопросы: "А зачем?..."
Это вообще область инжиниринга и консалтинга, но не программирования

Хорошие программисты берут деньги за то, что хочет заказчик, если это ему действительно нужно, не противоречит здравому смыслу, логике системы и не достигается стандартными средствами.
CaSH_2004; +1 Ответить
Оставьте свое сообщение