В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает задача ограничения доступа к данным на уровне интерфейса. Одной из частых потребностей является запрет открытия определенных документов из ДинамическогоСписка при выполнении заданных условий. В этой статье мы подробно разберем, как реализовать такую логику, какие методы платформы стоит использовать, а какие — нет.
Прежде всего, важно прояснить один момент: многие начинающие разработчики пытаются использовать метод ЗаблокироватьДанныеДляРедактирования для предотвращения открытия формы. Важно понимать, что этот метод предназначен для блокировки записи в СУБД, чтобы избежать конфликтов при одновременном редактировании данных несколькими пользователями. Для управления интерфейсной логикой открытия формы он не предназначен и не даст нужного вам результата.
Самым эффективным способом «на лету» запретить открытие формы является использование обработчика события Выбор у элемента управления, который отображает ваш динамический список. Суть метода заключается в перехвате попытки открытия и установке флага СтандартнаяОбработка в значение Ложь.
Давайте рассмотрим, как это выглядит в коде:
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// Получаем данные текущей строки
ДанныеСтроки = Элемент.ТекущиеДанные;
// Проверяем условие, при котором запрещено открытие
Если Не РазрешитьОткрытие(ДанныеСтроки) Тогда
// Отменяем стандартное действие платформы
СтандартнаяОбработка = Ложь;
// Можно выдать пользователю предупреждение
ПоказатьПредупреждение(, "Открытие данного документа запрещено условиями доступа.");
КонецЕсли;
КонецПроцедуры
В данном примере, если условие РазрешитьОткрытие возвращает Ложь, платформа не будет выполнять стандартный код открытия формы, и пользователь останется в списке.
Хотя вышеописанный метод отлично работает в интерфейсе, важно помнить: любой программный запрет на стороне формы является лишь дополнительным инструментом удобства. Если безопасность данных критична, необходимо настраивать права на уровне метаданных.
Роли. Возможно, пользователю не следует иметь право на «Чтение» или «Изменение» данного вида документа в принципе.Иногда задача заключается не в полном запрете открытия, а в том, чтобы документ открывался, но был недоступен для правки. В таком случае в обработчике открытия или при вызове ОткрытьФорму можно передать параметр:
ПараметрыОткрытия = Новый Структура("ТолькоПросмотр", Истина);
ОткрытьФорму("Документ.ВашДокумент.ФормаОбъекта", ПараметрыОткрытия);
Если вы хотите, чтобы при открытии из списка документ автоматически становился доступным только для чтения, вы можете проанализировать параметры в событии ПриСозданииНаСервере открываемой формы и принудительно установить свойство ЭтаФорма.ТолькоПросмотр = Истина.
Подводя итоги нашей работы над задачей:
СтандартнаяОбработка = Ложь в событии Выбор динамического списка.ТолькоПросмотр.Роли и RLS.Применяя эти подходы, вы сможете гибко управлять интерфейсом системы, делая работу пользователей более предсказуемой и безопасной.