Запрет на перемещение элемента в другую группу

1. MyPuK_OLD 16.05.13 08:41 Сейчас в теме
Всем доброго времени суток!
Наверняка я не один столкнулся с подобной ситуацией. Любой открывший справочник (контрагенты, номенклатура и т.д.) заметит,что кнопки "иерархический просмотр" и "перемещение элемента в другую группу" идентичный по цветовой гамме и расположены рядом друг с другом.
Менеджеры частенько сами того не желая перемещают элементы справочников в "другие" группы, создавая тем самым хаос..
Каким образом можно ограничить доступность (активность) этой кнопки только для менеджеров?..

Заранее всем спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. doom2good 138 16.05.13 09:18 Сейчас в теме
(1) MyPuK_OLD, (3) fierylions,
Перед записью:
Если ИзмененРодитель() И РольДоступна("ЖопорукийМенеджер") Тогда
Отказ = Истина;
Сообщить("Руки прочь от родителя!")
КонецЕсли;
-----
Функция ИзмененРодитель()
Возврат (Родитель <> {ПолучитьТекущегоРодителяЗапросомИзБазы});
КонецФункции

-----
А ещё можно скрыть команду перемещения на форме списка.
SuhoffGV; +1 Ответить
5. ZergKRSK 129 16.05.13 09:27 Сейчас в теме
(4) doom2good, изврат, проще всего сделать подписку на событие, задать нужные спр и спокойно проверять! Проще обновлять потом конфу будет ;)
8. doom2good 138 16.05.13 09:59 Сейчас в теме
(5) ZergKRSK,
Так это всё можно сделать как в модуле объекта, так и в подписке на событие. Я лично за модуль объекта, т.к. если делать прямыми руками, то обновление сложности не вызовет.
Да и где тут изврат? предложи свой, "менее извратный" вариант ;)
10. ZergKRSK 129 16.05.13 10:01 Сейчас в теме
(8) doom2good, создать подписку и там разместить проверку. Вообще никаких изменений типового справочника. Ну и плюс проверять на изменение родителя можно одной строкой...
SuhoffGV; +1 Ответить
6. MyPuK_OLD 16.05.13 09:43 Сейчас в теме
(4) doom2good, можно поподробнее об этом "А ещё можно скрыть команду перемещения на форме списка."?
Как бы мне её вообще скрыть для роли менеджер?..
7. ZergKRSK 129 16.05.13 09:51 Сейчас в теме
(6) MyPuK_OLD, имеется ввиду изменить командную панель формы списка...
11. MyPuK_OLD 16.05.13 10:03 Сейчас в теме
(4) doom2good, меня смущает "Перед записью", а если менеджер выбирает объект в документе, и случайно вместо иерархического просмотра нажимает на перемещение?..прокатит ли Ваш вариант с добавлением в модуль объекта?
2. FIERYLIONS 222 16.05.13 09:04 Сейчас в теме
Можно как вариант сделать булевную галку. Если разрешить перетаскивание в ложь (в константе например) тогда идет запрет изменения родителя у элемента справочника. Если же галка в истине то спокойно пользователь сможет перемещать элемент но уже сознательно! Проверку ставьте перед записью элемента.
3. FIERYLIONS 222 16.05.13 09:12 Сейчас в теме
А ограничение только для менеджеров делаете там же перед записью элемента справочника проверяя роль пользователя или группу в которую он входит.
9. MyPuK_OLD 16.05.13 10:01 Сейчас в теме
Я пытался перетащить эту кнопку,или даже пытался её удалить..ни в какую.. а что там по поводу подписки на событие? Так понимаю нужно будет добавить не только подписку, но и общий модуль?
12. ZergKRSK 129 16.05.13 10:04 Сейчас в теме
(9) MyPuK_OLD, видимо в панели стоит пипка Автозаполнение? Можно убрать и нарисовать полностью свою панель, но в этом есть и минус - при обновлении.
15. MyPuK_OLD 16.05.13 10:07 Сейчас в теме
(12) ZergKRSK, (13) Dodzh, не ребятки)) панель-ку че-то не хочу верстать)) а вот решение с кодом в модуле объекта опробовать думаю стоит?..
а конфигурация КА 1.1
16. ZergKRSK 129 16.05.13 10:09 Сейчас в теме
(15) MyPuK_OLD, делай подписку - самоё верное решение
17. MyPuK_OLD 16.05.13 10:15 Сейчас в теме
(16) ZergKRSK, а можно инструкцию более подробную?..и так..создаю подписку на объект, в источнике указываю СправочникОбъект.Контрагенты?..далее? надо будет добавить общий модуль с кодом?..какой код необходим?..
18. ZergKRSK 129 16.05.13 10:19 Сейчас в теме
(17) MyPuK_OLD, ну да, создай свой общий модуль опять же чтобы легче было обновляться и там рисуй проверку. Проверяй изменился ли родитель и с какой ролью происходит смена родителя.
23. MyPuK_OLD 16.05.13 10:49 Сейчас в теме
(18) ZergKRSK, нечто подобное прокатит?

Процедура ПроверитьДоступ(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

Если ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(Метаданные.Роли.МенеджерПоПродажам) Тогда
Отказ = Истина;
Сообщить("Нарушение прав доступа!");
КонецЕсли;
КонецЕсли;


КонецПроцедуры
ya.Avoronov; +1 Ответить
25. ZergKRSK 129 16.05.13 10:57 Сейчас в теме
(23) MyPuK_OLD,
Если (Источник.Родитель <> Источник.Ссылка.Родитель) И РольДоступна("ЖопорукийМенеджер") Тогда
Отказ = Истина;
КонецЕсли;
32. MyPuK_OLD 27.05.13 09:58 Сейчас в теме
(25) ZergKRSK,
Процедура ПроверитьДоступ(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

Если (Источник.Родитель <> Источник.Ссылка.Родитель) И РольДоступна("ЖопорукийМенеджер") Тогда
Отказ = Истина;
Сообщить("Нарушение прав доступа!");
КонецЕсли;

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

так не катит...менеджеры при таком раскладе не могут создавать номенклатуру. "РежимЗаписи, РежимПроведения" это может убрать?..
13. Dodzh 16.05.13 10:05 Сейчас в теме
А что за конфа? Режим: управляенмое или обычное приложение?
В принципе можно в свойствах командной панели (конфигуратор) убрать флаг автозаполнения и добавить кнопки ручками.
Если конфа стандартная то возможно автозаполнение уже отключено, передвинь кнопку в другое место.
А в управл.прилож. (1С Предприятие) еще проще, в настройках формы.
14. Dodzh 16.05.13 10:07 Сейчас в теме
А вообще от дурака защиту трудно сделать, лучше рублем наказывать. Сообщения же не просто так выходят, что б тупо жать "Ок".
19. doom2good 138 16.05.13 10:22 Сейчас в теме
панель-ку че-то не хочу верстать

Не обязательно в ручную кнопку убирать. Если она добавлена не автозаполнением, то в модуле формы можно вставить обработчик типа:
ЭлементыФормы.Панель.Кнопка.Видимость = Не РольДоступна("ЖопорукийМенеджер");
Одна строка в модуле не вызовет проблем при обновлении, главное, обрамить её комментариями.
20. ZergKRSK 129 16.05.13 10:25 Сейчас в теме
(19) doom2good,
Одна строка в модуле не вызовет проблем при обновлении
с этого обычно всё и начинается :D
21. doom2good 138 16.05.13 10:27 Сейчас в теме
меня смущает "Перед записью", а если менеджер выбирает объект в документе, и случайно вместо иерархического просмотра нажимает на перемещение?..прокатит ли Ваш вариант с добавлением в модуль объекта?
Конечно! Чтобы сменить родителя, нужно перезаписать объект. Не важно, из какого места и какой кнопкой это будет выполняться
22. Sabfir 16.05.13 10:40 Сейчас в теме
Если речь идет о типовой конфигурации, которая обновляется, то однозначно это надо решать через подписку на события. В таком случае никаких изменений в модуле объекта или формы, связанных с записью. В данном случае это дурной тон программирования. Такие изменения делаются только в случае, если это невозможно обойти с помощью подписок.
ZergKRSK; +1 Ответить
24. doom2good 138 16.05.13 10:56 Сейчас в теме
Да что ж вы как боитесь то этих обновлений!?)))
Если грамотно внедрять свой код, то никаких проблем не возникнет. Ну да, при обновлении придётся залезть в модуль, - но это дело двух секунд. Зато всё в одном месте и не надо чесать репу типа "да где же происходит изменение этого реквизита при записи!? я уже весь модуль облазил!"
ладно, тема не об этом.
26. ZergKRSK 129 16.05.13 11:00 Сейчас в теме
(24) doom2good, при чем тут боитесь? А ты что боишься не найти потом свою подписку? :D
27. MyPuK_OLD 16.05.13 11:03 Сейчас в теме
(24) doom2good, проще не париться о подписке и добавленном модуле, чем при каждом обновлении что-то переносить из одного места в другое...разве нет?..
28. Sabfir 16.05.13 11:22 Сейчас в теме
(24) doom2good,
Например это УПП.
Туча справочников и в каждом надо будет потом это сделать.
Как будете реализовывать?
В каждом справочнике код менять?
А при обновлении увидите десятки справочников, которые отличаются.
В случае с подпиской при обновлении вы абсолютно не увидите, что конфигурации отличаются.
29. doom2good 138 16.05.13 12:03 Сейчас в теме
Ладно-ладно!.. Убедили)) Подписки хорошо, когда нужно добавить какую-нить ерунду, типа этого контроля смены родителя. Но когда идут глобальные изменения - там проще всё делать в модулях.
Тем более, всё равно, конфигурацию придётся снять с поддержки. И если изменения объекта в обновлении пересекутся с измененным объектом в доработанной базе (что маловероятно), то ещё меньше вероятность, что изменения будут находиться в одном методе.
30. Sabfir 16.05.13 12:11 Сейчас в теме
Если эти глобальные изменения делаются в модулях объектов, которые потом надо обновлять, и эти изменения можно делать в подписках, то надо бить по рукам таких программеров. Потом сидишь и переписываешь все за ними, дабы не тратить много времени на анализ каждый раз при обновлении.
Это даже не обсуждается: если нет веских запретов на подписку, то при изменении обновляемых конфигураций надо все делать в подписке!
31. doom2good 138 16.05.13 13:10 Сейчас в теме
(30) Sabfir, вот тут я опять поспорю:
Если я ковыряю какой-нить документ, где куча различных изменений, не все из которых можно перенести в подписки, то мне проще разместить всё в модуле объекта, чем раскидывать всё это по подпискам. В случае когда мне нужно, например, изменить обработчик перед записью, я пишу свою процедуру "<префикс>ПередЗаписью()", ставлю её вызов в конце типовой и набиваю всем чем нужно. И при сравнении, когда я вижу "<префикс>ИмяМетода", я даже не заглядываю в него.
щё раз повторюсь: моя позиция относительно подписок касается только глобальных изменений объектов! Я не говорю про простые случаи, когда, например, перед записью документа нужно изменить ответственного на "васю пупкина" - тут понятно, подписка выигрывает.
33. Sabfir 27.05.13 10:30 Сейчас в теме
Если Не Источник.ЭтоНовый() И (Источник.Родитель <> Источник.Ссылка.Родитель) И РольДоступна("ЖопорукийМенеджер") Тогда
Отказ = Истина;
Сообщить("Запрещено изменять родителя иерархического справочника!");
КонецЕсли;
chidaystory; Lapitskiy; ya.Avoronov; yurets86; +4 Ответить
34. arteast 100 22.09.16 14:50 Сейчас в теме
В форме списка справочника на поле номенклатура жамкаешь
Процедура СписокНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	// Вставить содержимое обработчика.
	Если РольДоступна("Менеджер") Тогда 
	  Выполнение = Ложь;
	КонецЕсли;
КонецПроцедуры


И

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


Вполне возможно, что достаточно последней только процедуры, но залочил наверняка)
user1201748; wolfsoft; +2 Ответить
35. wolfsoft 2421 24.10.18 22:00 Сейчас в теме
(34) Всё правильно сделано, нужно именно два обработчика делать, одного последнего мало.
36. RomanLabendj 19.02.19 11:36 Сейчас в теме
А я при создании формы на сервере делаю кнопки недоступными:
Элементы.Список.РазрешитьПеретаскивание = Не РольДоступна("РОЛЬ");
Если Элементы.СписокКонтекстноеМеню.ПодчиненныеЭлементы.Найти("СписокКонтекстноеМенюПеренестиЭлемент") <> Неопределено Тогда
Элементы.СписокКонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюПеренестиЭлемент.Доступность = Не РольДоступна("РОЛЬ");
КонецЕсли;
37. Wasssaby 2 20.10.21 10:53 Сейчас в теме
А я, не боясь обновлений (ибо мне не надо) Добавил "заглушку" в процедуры перетаскивания на форме. Именно они обычный источник всех ошибок в номенклатуре.

Процедура СправочникСписокНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
	Выполнение=Ложь;
	Возврат;
КонецПроцедуры


Т.е. осознанно поменять по прежнему можно, но случайно мисскликнув мышкой - уже нельзя.
Оставьте свое сообщение

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