Запрет копирования объектов.

1. sly2k 30.08.16 19:55 Сейчас в теме
Как выясняется запретить интерактивное копирование объектов базы данных, не так уж и просто, особенно если требуется сделать это для всех объектов. Нужно в модуле формы объекта прописать следующею конструкцию (взято на просторах интернета)
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если ЭтоНовый() Тогда // если объект новый
        Если ЗначениеЗаполнено(ПараметрОбъектКопирования) Тогда // и существует объект копирования
         Если Не РольДоступна("Копирование") Тогда // и условие запрета выполнено
            Отказ = Истина; //
            Сообщить("Копирование документов заданного периода запрещено. Операция прервана");
         КонецЕсли;
       КонецЕсли;
    КонецЕсли;
КонецПроцедуры
Показать

Придется проделать немалую работу перешерстив все объекты.

Очень хочется использовать подписки на события - например "ПриКопировании" - в данном событии нет возможности заблокировать сам процесс копирования.
Идея сделать следующее - в "ПриКопировании" - выдаем сообщение о запрете копирования для данного пользователя (и предупреждаем что все его старания пойдут прахом), запоминаем где-нибудь в параметрах сеанса - что данный объект создается копированием . Далее в подписке на событие перед записью - читаем этот параметр и не даем записать.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. ZergKRSK 129 31.08.16 06:19 Сейчас в теме
(1) sly2k,

ДополнительныеСвойства (AdditionalProperties)
Использование:

Тип: Структура.
Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
8. alex-l19041 8 31.08.16 09:48 Сейчас в теме
(1) sly2k, а ведь было бы очень удобно, если бы запрет копирования объектов был реализован на уровне платформы и настраивался в правах
9. sly2k 31.08.16 20:06 Сейчас в теме
(8) alex-l19041, В правах логично было бы. Я столкнулся впервые за много лет работы с таким пожеланием, и был очень удивлен что придется в каждой форме что-то прописывать ради этого, если по уму. Пока по-быстрому реализовал через исключение, хоть это и криво выглядит для юзера.
2. Alex_E 2355 30.08.16 20:03 Сейчас в теме
3. Stepa86 1521 30.08.16 20:47 Сейчас в теме
Может лучше в ПриКопировании модуля объекта вызвать исключение? Ну или можно там же просто зачистить все данные и тогда копирование не будет отличаться от создание нового
Apolonov-Erik; +1 Ответить
4. sly2k 30.08.16 21:09 Сейчас в теме
На счет вызвать исключение можно подробнее как это сделать из подписки на событие?
Очистку данных не хотелось бы - это уже соизмеримо по трудозатратам с прописыванием в приоткрытии условий.
5. Alex_E 2355 30.08.16 21:12 Сейчас в теме
(4) sly2k, в процедуре подписки на событие ПриКопировании ыв общем модуле написать
ВызватьИсключение "Тут написать почему и как и ещё чё-нибудь)))"
а ещё прикольней если в параметрах есть Отказ - установить в Истина (надо посмотреть, есть оно там) и сообщить чё нито))))
Apolonov-Erik; +1 Ответить
6. sly2k 30.08.16 22:38 Сейчас в теме
Спасибо про "исключение" - гениально, на как это исключение оформить красиво - чтобы в сообщении не было кнопки подробно с переходом в окно типа:
Ошибка при выполнении обработчика - 'ПриКопировании'
по причине:
{ОбщийМодуль.слПривел.Модуль(26)}: Нельзя копировать
- т.е. мне бы хватило просто сообщения

Отказа там нет, если б был - в моем посте смысла не было бы.
10. R_G_B 01.09.16 00:57 Сейчас в теме
запрет копирования довольно странная задача, потому закономерно, что в платформе этого нет. Копирование - совершенно безобидная операция, всего лишь один из видов конструкторов, аналогично вводу на основании или просто созданию нового.
Имеет смысл запрещать создавать дубли, но запрета копирования это сделать не позволяет, остается возможность создать новый и заполнить идентично.
11. jaroslav.h 180 09.03.21 22:55 Сейчас в теме
Я делал через

подписка на событие ПриКопировании
Процедура ПриКопировании(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
        
                    ХранилищеОбщихНастроек.Сохранить("инт_ОтказПриКопировании",, Истина,, ПараметрыСеанса.ТекущийПользователь);

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

в форме каждого объетка 
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    инт_ОтказПриКопировании= ХранилищеОбщихНастроек.Загрузить("инт_ОтказПриКопировании",,, ПараметрыСеанса.ТекущийПользователь);
    Если ЗначениеЗаполнено(инт_ОтказПриКопировании) Тогда
        Отказ = Истина;
        ХранилищеОбщихНастроек.Сохранить("инт_ОтказПриКопировании",, Неопределено,, ПараметрыСеанса.ТекущийПользователь);
        Предупреждение("Запрещено вводить объект копированием");
        Возврат
    КонецЕсли;

КонецПроцедуры
Показать


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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот