Книга знаний

1С:Предприятие / v8

v8: Определение способа модификации объекта - интерактивный или программный

Автор статьи: Гений 1С | Редакторы: BlackTiger
Последняя редакция №2 от 16.03.07 | История
URL: http://kb.mista.ru/article.php?id=490

Ключевые слова: изменение,событие,форма,интерактивный


Конечно, программный и интерактивный контроль прав доступа к объекту должен быть одинаков.
Но, иногда, когда пользователь меняет элемент в форме списка или карточке, можно ему задать некоторые дополнительные вопросы.
А вот если запись осуществляется программно, то таких вопросов задавать не надо.

Поэтому нужен какой-то способ определить, откуда была вызвана запись - из программы или из формы.

Используется такая идея - вызываем оповещение всех форм, посылаем вопрос "ПроверкаОбъекта".
Форма списка или элемента проверяет - соответствует ли записываемый объект объекту, выбранному в списке или карточке объекта.
Если все ок, тогда

Правда нужно решить нюанс, а что если открыто несколько форм, надо определить активна ли текущая форма как-то.

Но пока что вот такой код:

Процедура ФормаСписка::ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    // Вставить содержимое обработчика.
    Если ИмяСобытия="ПроверкаОбъекта" Тогда
        Если Параметр.Ссылка=ЭлементыФормы.СправочникСписок.ТекущиеДанные.Ссылка Тогда
            Параметр.Вставить("СсылкиРавны", истина);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры


Процедура ПередЗаписью(Отказ)
    
#Если Клиент Тогда


    Если ВозниклоУсловиеДляПроверки(ЭтотОбъект) Тогда
        Вопрос="Для такого изменения нужно подтверждение администратора!";
        Если РольДоступна("Администратор") Тогда
            П=Новый Структура("Ссылка", Ссылка);
            Оповестить("ПроверкаОбъекта",  П);
            Если П.Свойство("СсылкиРавны") И П.СсылкиРавны Тогда
                Если Вопрос(Вопрос+Символы.ПС+"Хотите ли вы тем не менее выполнить изменение", РежимДиалогаВопрос.ДаНетОтмена)=КодВозвратаДиалога.да Тогда
                    Отказ=истина;
                    Возврат;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
#КонецЕсли

        Сообщить(Вопрос,СтатусСообщения.Важное);
КонецПроцедуры

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика