Настройка видимости элементов форм объектов по ролям, на уровне пользователя

25.08.11

Администрирование - Информационная безопасность

Если вам лень самим колдовать с настройкой видимости относительно ролей - дайте мышку в руки администратору!

+ бонус... Вы не пробовали построить дерево элементов формы в 1С?  :D

Скачать файл

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

Наименование По подписке [?] Купить один файл
Пример конфигурации
.zip 66,17Kb
191
191 Скачать (1 SM) Купить за 1 850 руб.

Вот чувствую, что опять кто-нибудь напишет, как было со «Сканирочкой», что решение до безобразия простое… Что делать...  :( Когда клиент ставит самую что есть конкретную задачу, которую, казалось бы, сделал – и забыл, коварно подкрадывается мысль: «А нет ли у задачи более общего решения, чтобы потом …»

... Потом – не делать заново, когда похожая задача появится. Потом – продавать, если решение получится интересным. В крайнем случае, потом – попиариться на инфостарте, ведь это весело. :D

Вот и сейчас… Клиент просит настроить список колонок для формы списка конкретного документа, чтобы пользователи с разными ролями видели свои колонки. И ведь приложил список, для какой роли – какие колонки надо отображать! Большой список… Вобщем, представил я, как в ПриОткрытии буду тупо прописывать эти проверки и проставлять видимость колонок, и как-то тоскливо стало.  Их же … много! Выход: предоставить пользователю инструмент, чтобы сам он мог забавляться со своими колонками, сколько ему влезет. И кстати, если уж для конкретного объекта я это делаю, то почему не позволить делать такую настройку для любого объекта? Болезнь у меня такая…

В общем, получилось. Выкладываю. Пользуйтесь! 

 

 

Для использования сего нужно:

  1. В информационную базу добавить регистр (прилагается)
  2. Добавить обработку НастройкаВидимости
  3. В метод ПриОткрытии для форм того объекта, видимость полей которого предполагается настраивать, прописать: 

 

ОбработкаНастройки=Обработки.НастройкаВидимости.Создать();

ОбработкаНастройки.УстановитьВидимость(ЭтотОбъект,ЭтаФорма,"ФормаДокумента");

или, как вариант:

ОбработкаНастройки.УстановитьВидимость(СтроковыйИдентификаторОбъекта,ЭтаФорма,"ФормаДокумента");

 

 

где СтроковыйИдентификаторОбъекта - "Документы.ПриходнаяНакладная", "Справочники.Контрагенты" и т.д.

 

Все…

 

 

Описанный метод может быть использован при разработке конфигураций с нуля, для «ленивой» настройки видимости элементов форм объектов.

 

В архиве - пример конфигурации, где приведена настройка для разных пользователей по разным ролям видимости элементов форм справочников, документов...

 

 

ПС...

 

При решении этой задачи хотел, как красивее, чтобы элементы формы можно было в виде дерева выводить. Столкнулся с непониманием со стороны 1С. Оказывается, нет у элемента формы поля "Владелец", как есть в любой порядочной платформы для разработчика. Но ведь хочется, балин! Помогла миста... Там этот вопрос обсуждался (один небезызвестный гений), и было предложено решение. Правда... Реализовали они его там через ... спину. Что ж, не всем дано познать глубины рекурсии ;)

 

Привожу свое решение мистовского метода поиска принадлежности элементов формы к панелям. Я правда еще в своей настройке видимости разношу и по страницам эл-ты формы, но здесь - код только для разнесения по панелям. Думаю, пригодится коллегам.

 

// Основная функция. На выходе получаем дерево эл-тов формы, распределенных по панелям
// На вход подаем тип объекта ("Справочники", "Документы") и его имя из метаданных. 
Функция СтроитьДеревоЭлементовФормы(ТипОбъекта,ИмяОбъекта,ИмяФормы)
    ТабЭлтов=АнализаАднака(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    ТабЭлтов.Сортировать("Уровень Возр, ЭтоПанель Возр, Панель Возр");
    Береза=Новый ДеревоЗначений;
    Береза.Колонки.Добавить("ЭлементФормы");
    Форма=ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    ВзраститьБерезу(Береза.Строки,Форма,ТабЭлтов,0);
    Возврат Береза;
КонецФункции    

// Потребуется много раз получать форму, чтобы мучить ее элементы
Функция ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы)
    Если ТипОбъекта="Справочники" Тогда
        Объект=Справочники[ИмяОбъекта];
    ИначеЕсли ТипОбъекта="Документы" Тогда    
        Объект=Документы[ИмяОбъекта];
    КонецЕсли;
    Форма=Объект.ПолучитьФорму(ИмяФормы);
    Возврат Форма;
КонецФункции    

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

// А тут удаляем очередную панель и смотрим, что осталось
Процедура ОбрабатываемПанель(ТипОбъекта,ИмяОбъекта,ИмяФормы,ИмяПанели,ЭлТы)
    Форма=ВернутьФорму(ТипОбъекта,ИмяОбъекта,ИмяФормы);
    ТекПанель=Форма.ЭлементыФормы[ИмяПанели];
    Форма.ЭлементыФормы.Удалить(ТекПанель);
    Для Каждого Стр Из ЭлТы Цикл
        Если Стр.Элт<>ИмяПанели Тогда
            Если Форма.ЭлементыФормы.Найти(Стр.Элт)=Неопределено Тогда
                Стр.Панель=ИмяПанели;
                Стр.Уровень=Стр.Уровень+1;
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;    
КонецПроцедуры    

// Ну это типа преобразование таблицы значений в дерево. 
// Рекурсия!!! И этим все сказано...
Процедура ВзраститьБерезу(ВеткиБерезы,Форма,ТабЭлтов,Уровень)
    Для Каждого Стр Из ТабЭлтов Цикл
        Если Стр.Уровень<>Уровень Тогда
            Продолжить;
        КонецЕсли;    
        НоваяВетка=ВеткиБерезы.Добавить();
        НоваяВетка.ЭлементФормы=Форма.ЭлементыФормы[Стр.Элт];
        Если Стр.ЭтоПанель Тогда
            ВзраститьБерезу(НоваяВетка.Строки,Форма,ТабЭлтов,Уровень+1);
        КонецЕсли;    
    КонецЦикла;    
КонецПроцедуры    

 

ППС...

Еще немалое удивление вызвал тот факт, что нельзя из формы нормальным способом узнать, к чему она относится. Впрочем, решение - есть. Почти... В некоторых (нормальных) конфигурациях имеется некий глобальный метод, который вызывается при открытии любой формы. Некий глПриОткрытии(ЭтаФОрма). Вот в этот метод можно кое-что прописать, чтобы не лезть в каждую форму списка, выбора или объекта.

Привожу пример решения для справочников. Т.е., по переданному ЭтаФорма ищем справочник, которому эта форма принадлежит и вызываем нашу обработку:

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

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

См. также

Информационная безопасность Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Предлагается внешняя обработка для просмотра данных в формате ASN1. Есть 2 режима: загрузка из бинарного формата и из BASE64. Реализована функция извлечения всех сертификатов, которые можно найти в ASN1-файле. В дополнении к этому продукту предлагается методическая помощь по вопросам, связанным с технической реализацией криптографии и шифрования в 1С.

2400 руб.

29.08.2016    30187    10    1    

11

Информационная безопасность Пароли Платформа 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    6846    kamisov    18    

61

Информационная безопасность Программист Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    8622    PROSTO-1C    10    

39

Информационная безопасность Программист Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    2608    platonov.e    1    

23

Информационная безопасность Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Продукты на основе решений 1С уверенной поступью захватывают рынок учётных систем в стране. Широкое распространение программ всегда порождает большой интерес к ним со стороны злоумышленников, а пользователь 1С это одна из дверей в защищённый информационный контур предприятия. Обработка позволяет быстро и комплексно оценить настройки безопасности конкретной базы и возможности пользователя этой базы на сервере. Также можно оценить некоторые аспекты сетевой безопасности предприятия со стороны сервера 1С.

5 стартмани

24.04.2023    6448    21    soulner    8    

33

Информационная безопасность Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    7592    53    Silenser    12    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. O-Planet 6452 25.08.11 07:36 Сейчас в теме
Если вам лень самим колдовать с настройкой видимости относительно ролей - дайте мышку в руки администратору!

+ бонус... Вы не пробовали построить дерево элементов формы в 1С? :D


Перейти к публикации

1. Арчибальд 2709 25.08.11 07:36 Сейчас в теме
попиариться на инфостарте, ведь это весело
Согласен.
2. alexk-is 6544 25.08.11 08:02 Сейчас в теме
3. O-Planet 6452 25.08.11 14:26 Сейчас в теме
А вот как-то автоматизировать вызов этого в ПриОткрытии можно? Подпиской на события, например?
4. Spartan 366 25.08.11 15:01 Сейчас в теме
(3) Подписка на события работает только для событий объектов, но не их форм.
5. Sergey K 65 26.08.11 10:46 Сейчас в теме
по мотивам деструктивного анализа формы :)
уже года 2-3 используем подобную настройку видимости/доступности форм.
6. O-Planet 6452 27.08.11 02:12 Сейчас в теме
(5) Ога. Только написал, что мне их реализация ну очень не понравилась...
7. O-Planet 6452 27.08.11 04:49 Сейчас в теме
Добавил в описании вариант автоматизации вызова обработки :)
8. RustIG 1833 27.08.11 22:43 Сейчас в теме
(0) Интересно, сколько затрачено времени?
И сколько заплатил клиент? Задаю эти вопросы не из праздного любопытства, а для понимания, кому это надо и надо ли за такие деньги?

Заранее оговорюсь, что конфу не смотрел и выводы делаю по написанному...
Я бы реализовал не для ролей конфигурации, а для групп ролей (при чем других "ролей": не из конфигурации, а выделил бы функциональные роли через объект метаданных Перечисления: например, Операторы, Контролеры, Аудиторы и т.д. по смыслу)
Далее, я не стал бы заморачиваться над универсальностью, т.к. наверняка по ситуации надо ограничить видимость конкретных элементов для конкретных форм.

Сама идея задачи мне нравится, также нравится статья, только вот почему-то разбираться в опубликованном коде не хочется...
Автор, спасибо!
9. O-Planet 6452 27.08.11 23:58 Сейчас в теме
(8) Затрачено часа четыре. Клиент заплатит за комплекс работ, в районе 20 тыс. Это - где-то пятая-восьмая часть того, что нужно сделать.
10. RustIG 1833 28.08.11 00:28 Сейчас в теме
(9) 4 часа - это продуктивное время на разработку (без анализа, предварительного проектирования, постановки ТЗ) ? или по факту: от момента анализа задачи (возникновения идеи) до последнего тестирования функциоанала?
Такого ответа я не ожидал, я бы затратил на все про все весь день: чтобы идею родить, воплотить: форму разработать, прописать установку видимости где нужно, протестировать и т.д. Нюансы на поверхности не видны....
...посмотрю-ка я выложенный пример конфигурации
11. O-Planet 6452 28.08.11 03:24 Сейчас в теме
(10) Анализ на такую задачу? И где эти заказчики, кто до конца понимает, чего хочет? Получил задачу, прикинул, что же нужно заказчику, прикинул, можно ли обобщить, прикинул, как реализовать, а потом - просто начать писать, большинство вопросов становятся понятны по ходу. Ну, может, пять часов... Но точно не весь день. Я ж фрилансер, тут со сроками жестко очень: какие-нибудь казахские программисты запросто начнут демпинговать, если со сроками затянешь и с ценой оплошаешь :D
14. RustIG 1833 20.03.12 20:43 Сейчас в теме
(11) Недавно продал ваше решение клиенту. Клиент доволен. Смысл задачи - приезжает ревизор, а бухгалтер нажимает одну чудо-кнопку, и часть информации не отображается в формах...
решение немного доработал конечно, но за основу взял ваш код... спасибо :)
12. Psylocibine 29.08.11 07:30 Сейчас в теме
У меня вот конфа не разворачивается, говорит "Ошибка формата потока"
А посмотреть любопытно очень)
13. Yashazz 4801 29.08.11 12:39 Сейчас в теме
Да-а-а, я когда-то делал такую на 7.7, с деревом объектов. Дерево строилось динамически для любой конфигурации.
Правда, скажу честно, строилось довольно топорно и долго, но чисто штатными средствами.

Мало нужная вещь, на практике редко у кого доходят руки грамотно всё настроить, и кончается дело либо каскадом умолчаний, либо всеобщим отключением этих ограничений в пользу более локально, "по месту" сделанных, либо гипер-супер-динамикой с использованием фрагментов кода.
И всё это начинает сильно напоминать аналог RLS плюс возможности функциональных опций 8.2, сиречь изобретение велосипедов.
15. Tina_10 10.04.13 11:57 Сейчас в теме
Добрый день! У меня платформа 8.2.17, конфигурация - розница (1.0.16). При снятии флажков в обработке "Настройка видимости" нечего не происходит...
16. Profit05 14.12.13 12:24 Сейчас в теме
17. Alexey_ 27 19.05.15 10:11 Сейчас в теме
можно использовать альтернативу деструктивному анализу
http://infostart.ru/public/345430/
18. grin_64 37 19.05.16 12:21 Сейчас в теме
Круто! Я переделал роли в пользователи
Оставьте свое сообщение