Реализация ограничения доступа к отдельным ячейкам табличного поля
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Реализация ограничения доступа к отдельным ячейкам табличного поля отличается в зависимости от вычислительных затрат на определение доступности.

В случае быстрого вычисления доступности управление доступом осуществляется в
обработчике события ПриВыводеСтроки() табличного поля, где программно
нужным ячейкам в строке устанавливается в значение Истина свойство
ТолькоПросмотр.

Пример:

Процедура СписокЕдиницыИзмеренияПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Если ДанныеСтроки.Владелец = Неопределено Тогда ОформлениеСтроки.Ячейки.Коэффициент.ТолькоПросмотр = Ложь; Иначе ОформлениеСтроки.Ячейки.Коэффициент.ТолькоПросмотр = (ДанныеСтроки.Ссылка = мТекущаяЕдиницаХраненияОстатков); КонецЕсли; КонецПроцедуры


В случае длительного вычисление доступности, то есть, если для определения доступности /недоступности ячейки необходимо выполнять действия, приводящие к чтению из БД, или любые другие, длительно выполняющиеся действия, то выполнение этих действий в обработчике ПриDыводеCтроки может привести к существенным задержкам, при работе с табличным полем.

В таких случаях следует применять следующий метод:

Считается, что приведенное в примере табличное поле содержит колонку "Искомая", доступ к ячейкам которой необходимо регулировать, и колонку "Значение", по значениям строк которой устанавливается данный режим доступа.

Определена функция РежимДоступа(), которая по задаваемому алгоритму определяет текущий режим доступа для ячейки.

Функция РазрешенДоступ(Значение) Если Значение = <Условие доступа> Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции


1. Запрет прямого редактирования значения ячейки выполняется в обработке события табличного поля ПередНачаломИзменения:

Процедура ТабличноеПолеПередНачаломИзменения(Элемент, Отказ) Если Элемент.ТекущаяКолонка = Элемент.Колонки.Искомая Тогда Отказ = НЕ РазрешенДоступ (Элемент.ТекущиеДанные.Значение); КонецЕсли; КонецПроцедуры


2. Поскольку вход в режим редактирования строки может осуществляться с любой колонки, также добавляются следующие процедуры и переменные для индикации, что происходит редактирование.

Переменная модуля формы - признак того, что происходит редактирование:

//////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ // Перем мПроисходитРедактирование // при создании формы должна устанавливаться в Ложь …. //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ // мПроисходитРедактирование = Ложь;


Обработчики начала и окончания редактирования строки табличного поля, которые устанавливают и сбрасывают признак редактирования:

Процедура ТабличноеПолеПриНачалеРедактирования(Элемент, НоваяСтрока) мПроисходитРедактирование = Истина; КонецПроцедуры Процедура ТабличноеПолеПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) мПроисходитРедактирование = Ложь; КонецПроцедуры


3. В событии ПриАктивацииСтроки() необходимо выполнять сброс установленных ограничений на доступ для текущей строки:

Процедура ТабличноеПолеПриАктивизацииСтроки(Элемент) Элемент.Колонки.Искомая.ЭлементУправления.ТолькоПросмотр = Истина; КонецПроцедуры


4. Процедура, выполняющая регулирование доступа к ячейкам вызывается при активизации "Искомой" колонки табличного поля, в случае если строка находится в режиме редактирования:

Процедура ТабличноеПолеПриАктивизацииКолонки(Элемент) Если мПроисходитРедактирование Тогда ТекущаяКолонка = Элемент.ТекущаяКолонка; Если ТекущаяКолонка = Элемент.Колонки.Искомая Тогда ТекущаяКолонка.ЭлементУправления.ТолькоПросмотр = НЕ РазрешенДоступ (Элемент.ТекущиеДанные.Значение); КонецЕсли; КонецЕсли; КонецПроцедуры

 










Дата: 2018-11-18, просмотров: 260.