Предполагается, что у вас есть Справочник.Пользователи
Создайте подчиненный Справочник.ЗабаненныйРеквизиты
В нем создайте два реквизита:
1. ИдентификаторФормы (Строка) //сюда вписываем Вид() справочника или документа
2. Реквизит (Строка)
Принцип работы такой:
Если для пользователя Маша, создать элемент справочника ЗабаненныйРеквизиты
в котором
ИдентификаторФормы = «Контрагенты»
а Реквизит = «ПочтовыйАдрес»,
то при открытии Машей карточки любого Контрагента
реквизит ПочтовыйАдрес будет для нее недоступен для редактирования.
В конце модуля каждого справочника и документа вызываем функцию из глобального модуля
УправлениеДоступностьюРеквизитов(Контекст)
Теперь в глобальном модуле размещаем нашу функцию:
Функция УправлениеДоступностьюРеквизитов(Конт) Экспорт
СпрПольз=СоздатьОбъект("Справочник.Пользователи");
СпрПольз.НайтиПоКоду(СокрЛП(ИмяПользователя()));
ТекВладелец=СпрПольз.ТекущийЭлемент();
Спр=СоздатьОбъект("Справочник.ЗабаненныеРеквизиты");
Спр.ИспользоватьВладельца(ТекВладелец);
Контекст_ИдентификаторФормы=СокрЛП(Конт.Вид());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 цикл
Если СокрЛП(Спр.ИдентификаторФормы)=Контекст_ИдентификаторФормы Тогда
ЗабаненныйРеквизитФормы=Конт.Форма.ПолучитьАтрибут(СокрЛП(Спр.Реквизит));
ЗабаненныйРеквизитФормы.Доступность(0);
КонецЕсли;
КонецЦикла;
КонецФункции
и всё.
Теперь чтоб заблокировать любой реквизит любого справочника для любого пользователя…
достаточно открыть подчиненный справочник ЗабаненныеРеквизиты
и в нем прописать в каком справочнике какой реквизит заблокировать для этого пользователя.
Отдельное спасибо поиску и Царькову Валерию
(0) Погляди в сторону …
http://infostart.ru/projects/1034/
Хотя, баловство всё это.
(0) Почти во всем формах имеются УправлениеВидимостью() и УправлениеДоступностью(), работа которых перебивает действие команды «ЗабаненныйРеквизитФормы.Доступность(0)»
А почему
Спр.ВыбратьЭлементы();
а не
Спр.ВыбратьЭлементыПоРеквизиту(«ИдентификаторФормы»,Контекст_ИдентификаторФормы)
Я ж говорю, этот метод — отправная точка, а не пункт назначения.