Приветствую Вас ГостьПятница, 23.01.2026, 16:45

Каталог статей


БСП. Подсистема «Запрет редактирования реквизитов объектов»

Подсистема "Запрет редактирования реквизитов объектов" позволяет при открытии формы делать недоступными отдельные реквизиты, например "Код".

В зависимости от версии БСП реализация различается.

Основное:

В модуле менеджера объекта должна быть экспортная функция ПолучитьБлокируемыеРеквизитыОбъекта(), которая возвращает массив блокируемых реквизитов. В массив могут быть добавлены не только реквизиты объекта, но и реквизиты формы.

В модуле формы должен быть вызов процедуры ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);

Обычно его вызывают в событиях ПриСозданииНаСервере() и ПослеЗаписиНаСервере().

При вызове процедуры ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект) в форму добавляется команда РазрешитьРедактированиеРеквизитовОбъекта. Чтобы она работала в модуле формы должна быть указа процедура её действия 

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)

    ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект);

КонецПроцедуры
 

Для текущей версии БСП надо указать тип объекта, в котором будет использоваться тот механизм в ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами(Объекты) 

Здесь Объекты  это соответствие, в которое надо вставить полное имя объекта, например

Объекты.Вставить(Метаданные.Справочники._ДемоБанковскиеСчета.ПолноеИмя(), "");

В результате выполненных настроек, при открытии формы, для указанных реквизитов редактирование будет не доступно. Чтобы все-таки их отредактировать, надо выполнить команду "Еще / Разрешить редактирование реквизитов". Если соответствующие права у пользователя есть, то откроется форма с предупреждением и возможностью поиска ссылок на данный объект.

Если на форме несколько заблокированных реквизитов, то можно предварительно вывести список, какие реквизиты надо разблокировать. Это задается в процедуре модуля формы Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта()

Чтобы вывести список реквизитов, которые надо разблокировать, процедура должна быть такой:

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
    
    ЗаблокированныеРеквизиты = ЗапретРедактированияРеквизитовОбъектовКлиент.Реквизиты(ЭтотОбъект);
    
    Если ЗаблокированныеРеквизиты.Количество() > 0 Тогда
        ПараметрыФормы = Новый Структура;
        ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка);
        ПараметрыФормы.Вставить("ЗаблокированныеРеквизиты", ЗаблокированныеРеквизиты);
        
        ОткрытьФорму("Документ._ДемоЗаказПокупателя.Форма.РазблокированиеРеквизитов", ПараметрыФормы,
            ЭтотОбъект,,,, Новый ОписаниеОповещения("ПослеВыбораРеквизитовДляРазблокирования", ЭтотОбъект));
    Иначе
        ЗапретРедактированияРеквизитовОбъектовКлиент.ПоказатьПредупреждениеВсеВидимыеРеквизитыРазблокированы();
    КонецЕсли;
    
КонецПроцедуры

Так как открываем форму, то задаем описание оповещения закрытия формы, в котором вызываем ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы с новым массивом блокируемых реквизитов:

&НаКлиенте
Процедура ПослеВыбораРеквизитовДляРазблокирования(РазблокируемыеРеквизиты, Контекст) Экспорт
    
    Если ТипЗнч(РазблокируемыеРеквизиты) <> Тип("Массив") Тогда
        Возврат;
    КонецЕсли;
    
    ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтотОбъект,
        РазблокируемыеРеквизиты);
    
КонецПроцедуры
 

В этом случае надо, чтобы у объекта была форма "РазблокированиеРеквизитов". В форме должны быть созданы булевы реквизиты с именами, которые указаны в списке блокируемых реквизитов в модуле менеджера. Вытаскиваем реквизиты на форму (создаем для них элементы), но делаем элементы невидимыми. При создании формы, если реквизиты указаны в модуле менеджера, устанавливается видимость элементов. При закрытии для контроля передаются только выделенные на форме реквизиты (можно посмотреть в Демо-БСП в документе _ДемоЗаказПокупателя). 

Если не надо выводить список реквизитов, то процедура будет короче:

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)

    ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект);

КонецПроцедуры
 

Внимание:

В примере с выбором реквизитов использовалась процедура 

ЗапретРедактированияРеквизитовОбъектовКлиент.УстановитьДоступностьЭлементовФормы(ЭтотОбъект, РазблокируемыеРеквизиты);

В примере без выбора реквизитов использовалась процедура

ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект);

Во втором случае открывается форма с предупреждением и возможностью открыть отчет с поиском ссылок на текущий объект.

 

Область поиска использования ссылки можно ограничить. Для каждой из подсистем можно настроить список объектов, в которых искать не требуется, например в регистре "Версии объектов". Список исключаемых объектов задается в процедуре ПриДобавленииИсключенийПоискаСсылок(). Для объектов, которые не относятся к какой-то конкретной подсистеме, объект можно добавить в процедуре ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок).

Для конкретной подсистемы список объектов настраивается в её общем модуле. Запуск процедуры в общем модуле выполняется в ИнтеграцияПодсистемБСП.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок).

Например:

    Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
        МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
        МодульВерсионированиеОбъектов.ПриДобавленииИсключенийПоискаСсылок(ИсключенияПоискаСсылок);
    КонецЕсли;

 

 

 

Категория: Администрирование | Добавил: leshic (08.01.2026)
Просмотров: 16 | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт
Поиск
Категории раздела
СКД [53]
Регистры [7]
Формы [51]
Администрирование [63]
Запросы [11]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [57]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0