Запрет копирования объектов.
Как выясняется запретить интерактивное копирование объектов базы данных, не так уж и просто, особенно если требуется сделать это для всех объектов. Нужно в модуле формы объекта прописать следующею конструкцию (взято на просторах интернета)
Придется проделать немалую работу перешерстив все объекты.
Очень хочется использовать подписки на события - например "ПриКопировании" - в данном событии нет возможности заблокировать сам процесс копирования.
Идея сделать следующее - в "ПриКопировании" - выдаем сообщение о запрете копирования для данного пользователя (и предупреждаем что все его старания пойдут прахом), запоминаем где-нибудь в параметрах сеанса - что данный объект создается копированием . Далее в подписке на событие перед записью - читаем этот параметр и не даем записать.
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если ЭтоНовый() Тогда // если объект новый
Если ЗначениеЗаполнено(ПараметрОбъектКопирования) Тогда // и существует объект копирования
Если Не РольДоступна("Копирование") Тогда // и условие запрета выполнено
Отказ = Истина; //
Сообщить("Копирование документов заданного периода запрещено. Операция прервана");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьПридется проделать немалую работу перешерстив все объекты.
Очень хочется использовать подписки на события - например "ПриКопировании" - в данном событии нет возможности заблокировать сам процесс копирования.
Идея сделать следующее - в "ПриКопировании" - выдаем сообщение о запрете копирования для данного пользователя (и предупреждаем что все его старания пойдут прахом), запоминаем где-нибудь в параметрах сеанса - что данный объект создается копированием . Далее в подписке на событие перед записью - читаем этот параметр и не даем записать.
По теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) sly2k,
ДополнительныеСвойства (AdditionalProperties)
Использование:
Тип: Структура.
Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
ДополнительныеСвойства (AdditionalProperties)
Использование:
Тип: Структура.
Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
(8) alex-l19041, В правах логично было бы. Я столкнулся впервые за много лет работы с таким пожеланием, и был очень удивлен что придется в каждой форме что-то прописывать ради этого, если по уму. Пока по-быстрому реализовал через исключение, хоть это и криво выглядит для юзера.
(4) sly2k, в процедуре подписки на событие ПриКопировании ыв общем модуле написать а ещё прикольней если в параметрах есть Отказ - установить в Истина (надо посмотреть, есть оно там) и сообщить чё нито))))
ВызватьИсключение "Тут написать почему и как и ещё чё-нибудь)))"
Спасибо про "исключение" - гениально, на как это исключение оформить красиво - чтобы в сообщении не было кнопки подробно с переходом в окно типа:
Отказа там нет, если б был - в моем посте смысла не было бы.
Ошибка при выполнении обработчика - 'ПриКопировании'
по причине:
{ОбщийМодуль.слПривел.Модуль(26)}: Нельзя копировать
- т.е. мне бы хватило просто сообщения
по причине:
{ОбщийМодуль.слПривел.Модуль(26)}: Нельзя копировать
Отказа там нет, если б был - в моем посте смысла не было бы.
запрет копирования довольно странная задача, потому закономерно, что в платформе этого нет. Копирование - совершенно безобидная операция, всего лишь один из видов конструкторов, аналогично вводу на основании или просто созданию нового.
Имеет смысл запрещать создавать дубли, но запрета копирования это сделать не позволяет, остается возможность создать новый и заполнить идентично.
Имеет смысл запрещать создавать дубли, но запрета копирования это сделать не позволяет, остается возможность создать новый и заполнить идентично.
Я делал через
подписка на событие ПриКопировании
Процедура ПриКопировании(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
ХранилищеОбщихНастроек.Сохранить("инт_ОтказПриКопировании",, Истина,, ПараметрыСеанса.ТекущийПользователь);
КонецПроцедуры
в форме каждого объетка
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
инт_ОтказПриКопировании= ХранилищеОбщихНастроек.Загрузить("инт_ОтказПриКопировании",,, ПараметрыСеанса.ТекущийПользователь);
Если ЗначениеЗаполнено(инт_ОтказПриКопировании) Тогда
Отказ = Истина;
ХранилищеОбщихНастроек.Сохранить("инт_ОтказПриКопировании",, Неопределено,, ПараметрыСеанса.ТекущийПользователь);
Предупреждение("Запрещено вводить объект копированием");
Возврат
КонецЕсли;
КонецПроцедуры
Показатьдейственный способ который применяю если нужно запретить вводить на основании и т.д.
В одном месте сохраняю значение черех хранилище общих настроек, в другом месте проверяю сохраненное значение.
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день