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