Запрет изменения формы документа при указании определенного реквизита
Добрый день.
Конфигурация самописная на Управляемых формах.
Хочу на форме документа установить запрет изменения.
Документ содержит реквизит "Перечисление.Статус"
При установке определенного реквизита и сохранения изменений форма должна быть заблокирована от изменений.
Данное правило распространяется только на пользователей с определенной ролью. А у кого полные права могу менять.
Конфигурация самописная на Управляемых формах.
Хочу на форме документа установить запрет изменения.
Документ содержит реквизит "Перечисление.Статус"
При установке определенного реквизита и сохранения изменений форма должна быть заблокирована от изменений.
Данное правило распространяется только на пользователей с определенной ролью. А у кого полные права могу менять.
По теме из базы знаний
- Конфигурация "Весовая ред. 3.0" для Платформы 8.3
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2
- На время отключаем контроль остатков и проверку документов
- Управление доступом к формам и элементам форм «УФОРМ-ЮГ» (БП, БП-КОРП, ЕРП, УНФ, УТ, КА, УХ) [Расширение]
- Защита объектов от изменения обменом
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Недавно делал такое же: некоторым пользователям разрешено было изменять несколько реквизитов.
Условие по ролям исполнителей и доступности роли прав доступа.
Условие по ролям исполнителей и доступности роли прав доступа.
&НаСервере
Функция ДоступностьРоли(ИмяПроверяемойРоли)
Возврат Пользователи.РолиДоступны(ИмяПроверяемойРоли, Пользователи.ТекущийПользователь());
КонецФункции
&НаКлиенте
Процедура УстановитьДоступностьФормы()
// IDDQD для администратора
Если ДоступностьРоли("ПолныеПрава") Тогда
Возврат;
КонецЕсли;
// Для обычных пользователей в зависимости от ролей некоторые элементы оставить доступными для редактирования
УстановитьФормуНаПросмотр = СуществуетПодчиненныйБизнесПроцесс();
Если УстановитьФормуНаПросмотр Тогда
ОтключитьОбработчикОжидания("УстановитьДоступностьФормы");
Если ДоступностьРоли("ДобавлениеИзменениеЗаявокНаПлатежПоЛокации")
ИЛИ ЭтоФинансовыйКонтролер() Тогда
Для каждого Элемент Из ЭтаФорма.Элементы Цикл
ИмяЭлемента = ВРег(Элемент.Имя);
// Пропуск элементов и кнопки записи, доступных для редактирования пользователю с правом корректировки
Если СтрНайти(ИмяЭлемента, ВРег("ФормаЗаписать")) > 0
Или СтрНайти(ИмяЭлемента, ВРег("ФормаОтправитьНаСогласование")) > 0 // todo: нужна ли эта кнопка?
Или СтрНайти(ИмяЭлемента, ВРег("ФункциональнаяСтруктура")) > 0
Или СтрНайти(ИмяЭлемента, ВРег("НазначениеПлатежа")) > 0
Или СтрНайти(ИмяЭлемента, ВРег("СтатьяДДС")) > 0
Или СтрНайти(ИмяЭлемента, ВРег("ОбновитьОстатокБюджета")) > 0
Или СтрНайти(ИмяЭлемента, ВРег("СоздатьНовыйБанковскийСчет")) > 0 Тогда
Продолжить;
КонецЕсли;
Если СтрНайти(ИмяЭлемента, ВРег("КонтрагентБанковскийСчет")) > 0
И Не ЗначениеЗаполнено(Объект.КонтрагентБанковскийСчет) Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("ДекорацияФормы") Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") Тогда
Элемент.Доступность = Ложь;
Иначе
Элемент.ТолькоПросмотр = Истина;
КонецЕсли;
КонецЦикла;
Иначе
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
(6)
А куда вписывали? В форме или в объекте? при какой процедуре использовать? ПередЗаписью? или ПриОткрытии?
вно делал такое же: некоторым пользователям разрешено было изменять несколько реквизитов.
Условие по ролям исполнителей и доступности роли прав доступа.
Условие по ролям исполнителей и доступности роли прав доступа.
А куда вписывали? В форме или в объекте? при какой процедуре использовать? ПередЗаписью? или ПриОткрытии?
(8) Добавил в ПриОткрытии.
И потом еще по действиям некоторых важных кнопок. Например, после отправки на согласование тоже нам надо блокировать форму для редактирования, чтобы другие участники согласования работали с неизменяемым документом.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УстановитьВидимостьЭлементов();
УстановитьДоступностьФормы();
КонецПроцедуры
И потом еще по действиям некоторых важных кнопок. Например, после отправки на согласование тоже нам надо блокировать форму для редактирования, чтобы другие участники согласования работали с неизменяемым документом.
Если Не РольДоступна("ПолныеПрава") И Статус = Перечисления.СтатусСделки.УслугаОказана тогда
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
Однако пользователи будут ругаться что не могут провалится и еще что нибудь))
Но вы пишете про "форму" а не запрет редактирования документа например. Там уже через ПередЗаписью
&НаКлиенте
Процедура ПередатьНаСогласование(Команда)
ОчиститьСообщения();
Объект.Статус=ПредопределенноеЗначение("Перечисление.СтатусыДокументов.НаСогласовании");
ЭтаФорма.Записать(Новый Структура("РежимЗаписи",РежимЗаписиДокумента.Проведение));
УстановитьДоступность();
КонецПроцедуры
&НаСервере
Процедура УстановитьПраваНаСервере()
ПраваФилиала=КФСервер.ПраваНаУправлениеБюджетами(ПредопределенноеЗначение("Перечисление.ВидыБюджетов.БДР"));
Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
ПраваПодразделения=КФСервер.ПраваНаБюджетПодразделения(Объект.Подразделение);
Иначе
ПраваПодразделения=ПредопределенноеЗначение("Перечисление.ПраваНаДокументыПодразделений.Просмотр");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПрава()
УстановитьПраваНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступность()
УстановитьПрава();
ЭтоЧерновик=НЕ ЗначениеЗаполнено(Объект.Статус) ИЛИ (Объект.Статус=ПредопределенноеЗначение("Перечисление.СтатусыДокументов.Черновик"));
НельзяРедактировать=Не ЭтоЧерновик
ИЛИ (ПраваПодразделения=ПредопределенноеЗначение("Перечисление.ПраваНаДокументыПодразделений.НетПрав"))
ИЛИ (ПраваПодразделения=ПредопределенноеЗначение("Перечисление.ПраваНаДокументыПодразделений.Просмотр"));
НельзяСогласовать=ЭтоЧерновик
ИЛИ (ПраваФилиала<>ПредопределенноеЗначение("Перечисление.ПраваНаДокументыФилиала.Согласование")
И ПраваФилиала<>ПредопределенноеЗначение("Перечисление.ПраваНаДокументыФилиала.Управление"));
Элементы.Факт.ИзменятьСоставСтрок=(ПраваФилиала=ПредопределенноеЗначение("Перечисление.ПраваНаДокументыФилиала.Согласование")
ИЛИ ПраваФилиала=ПредопределенноеЗначение("Перечисление.ПраваНаДокументыФилиала.Управление"));
Элементы.Дата.ТолькоПросмотр=НельзяРедактировать;
Элементы.Номер.ТолькоПросмотр=НельзяРедактировать;
Элементы.Примечание.ТолькоПросмотр=НельзяРедактировать И НельзяСогласовать;
Элементы.ЗаполнятьНаТекущуюДату.ТолькоПросмотр=НельзяРедактировать;
Элементы.Факт.ТолькоПросмотр=НельзяРедактировать;
Элементы.Материалы.ТолькоПросмотр=НельзяРедактировать;
Элементы.ОЗП.ТолькоПросмотр=НельзяРедактировать;
Элементы.Акты.ТолькоПросмотр=НельзяРедактировать;
Элементы.ФормаПередатьНаСогласование.Доступность=ЭтоЧерновик
И (ПраваПодразделения=ПредопределенноеЗначение("Перечисление.ПраваНаДокументыПодразделений.ПередачаНаСогласование"));
Элементы.ФормаВернутьНаДоработку.Доступность=Не НельзяСогласовать;
Элементы.ФормаСогласовать.Доступность=(Объект.Статус=ПредопределенноеЗначение("Перечисление.СтатусыДокументов.НаСогласовании"))
И Не НельзяСогласовать;
Элементы.ФормаОтменитьСогласование.Доступность=(Объект.Статус=ПредопределенноеЗначение("Перечисление.СтатусыДокументов.Согласован"))
И Не НельзяСогласовать;
Если (Не Объект.Подразделение.Пустая()) И НельзяРедактировать И Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПоказатьПредупреждение(,"У Вас нет прав на редактирование бюджетов подразделения "
+Объект.Подразделение+". Измените подразделение или обратитесь в УЭ.");
КонецЕсли;
ЭтаФорма.Элементы.Экономист.ТолькоПросмотр=НельзяРедактировать;
ЭтаФорма.Элементы.ПланЗаполнить.Доступность=Не НельзяРедактировать;
ЭтаФорма.Элементы.КонтрагентыЗаполнить.Доступность=Не НельзяРедактировать;
ЭтаФорма.Элементы.КонтрагентыЗаполнитьКонтрагенты.Доступность=Не НельзяРедактировать;
ЭтаФорма.Элементы.МатериалыЗаполнить.Доступность=Не НельзяРедактировать;
ЭтаФорма.Элементы.ОЗПЗаполнить.Доступность=Не НельзяРедактировать;
ЭтаФорма.Элементы.АктыЗаполнить.Доступность=Не НельзяРедактировать;
Попытка
ЭтаФорма.КоманднаяПанель.ПодчиненныеЭлементы.ФормаПроведение.ПодчиненныеЭлементы.ФормаПровести.Доступность=Не НельзяРедактировать;
ЭтаФорма.КоманднаяПанель.ПодчиненныеЭлементы.ФормаПровестиИЗакрыть.Доступность=Не НельзяРедактировать;
Исключение
КонецПопытки;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот