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