Установка запрета редактирования в 1С

Во многих конфигурациях для этого используется константа «Дата запрета редактирования». Затем в глобальном модуле прописывается процедура наподобие этой:
Процедура глПроверкаРазрешенияРедактирования(Конт) Экспорт
Если Конт.Выбран() = 1 Тогда
Если (Конт.ДатаДок <= Константа.ДатаЗапретаРедактирования) и (Конт.Форма.ТолькоПросмотр() = 0) Тогда
Конт.Форма.ТолькоПросмотр(1);
Предупреждение(“Разрешен только просмотр документа!”, 4);
КонецЕсли;
КонецЕсли;
КонецПроцедуры

А в предопределенных процедурах ПриОткрытии() в модулях формы всех документов конфигурации нужно вставить вызов процедуры:
глПроверкаРазрешенияРедактирования(Контекст);
Если Форма.ТолькоПросмотр() = 1 Тогда
// здесь нужно написать код, делающий недоступными кнопки
// примерно так: Форма.КнопкаОК.Доступность(0);
КонецЕсли;

Существуют и более изощренные способы на запрет редактирования объектов метаданных. Один из них заключается в следующем:
1) в глобальном модуле описывается:
Перем глПользователь Экспорт;
для хранения ссылки на элемент справочника «Пользователи» для текущего пользователя;
2) в конфигурации заводится справочник «Пользователи», если он еще не заведен; прописывается автоматическая регистрация новых пользователей в этом справочнике при первом входе в 1С Предприятие, а заодно и заполнение глобальной переменной глПользователь – это делается в предопределенной процедуре ПриНачалеРаботыСистемы() глобального модуля:
Спр = СоздатьОбъект(“Справочник.Пользователи”);
Если Спр.НайтиПоКоду(ИмяПользователя(), 0)=1 Тогда
глПользователь=Спр.ТекущийЭлемент();
Иначе
Спр.Новый();
Спр.Код = ИмяПользователя();
Спр.Наименование = ПолноеИмяПользователя();
Спр.Записать();
глПользователь=Спр.ТекущийЭлемент();
Предупреждение(“Пользователь внесен в справочник пользователей! В новых документах будет фиксироваться автор!”);
КонецЕсли;

3) в справочник «Пользователи» добавляется реквизит «ДатаЗапретаРедактирования», а процедура глПроверкаРазрешенияРедактирования(Конт) из глобального модуля изменяется таким образом, чтобы сравнение шло не с константой, а с реквизитом справочника «Пользователи»:
Если (Конт.ДатаДок <= глПользователь.ДатаЗапретаРедактирования) и (Конт.Форма.ТолькоПросмотр() = 0) Тогда
Таким образом реализуется возможность запрета редактирования документов глубже разных дат для разных пользователей. Еще можно создать справочник «ПраваПользователей», подчиненный справочнику «Пользователи», и использовать его для задания всяких изощренных вариантов прав на объекты метаданных конфигурации.

| опубликовано: 11 Май 2009, 14:15

Комментирование этой статьи закрыто