Запрет создавать элементы справочника.

1. FlagmanGK 18.12.16 14:15 Сейчас в теме
Добрый день. Появилась необходимость запретить всем пользователям создавать некоторые справочники (фирмы, подразделения, склады, контрагенты идр) подскажите, как можно это сделать без изменения конфигурации?
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
20. ture 606 20.12.16 09:30 Сейчас в теме
(1) я не знаю, что Вам тут советуют. Моё решение 100%-ое!
Ставь триггер на таблицы в SQL с отбойником.
+
21. ekaruk 4905 20.12.16 09:46 Сейчас в теме
(20) Отличное решение :) Надежное :)
А интересно, на уровне SQL можно как-то пользователя проверить?
Чтобы срабатывало не для всех.
+
2. Fox-trot 158 18.12.16 14:34 Сейчас в теме
конфа какая? бсп используется?
+
3. FlagmanGK 18.12.16 17:49 Сейчас в теме
Бухгалтерия предприятия КОРП, редакция 3.0.44.204(полностью типовая без изменений)
БСП не используется.
+
4. ekaruk 4905 18.12.16 17:56 Сейчас в теме
(3) Настройками вроде никак.
Можно попробовать поэкспериментировать с профилями пользователей, поснимать роли, разрешающие изменение НСИ.
Или как вариант, добавьте расширение и в нем запретите для определенных пользователей создавать элементы. Это проще и меньше вероятность что-то другое испортить.
+
5. sintfries 18.12.16 18:58 Сейчас в теме
Можно понаписать воды про эксперименты и профиля, но самое простое тут Сервис -> Пользователи -> Группы пользователей -> Права и убрать у группы номенклатуру на запись, затем кинуть туда нужных пользователей.
+
6. Kaspirovsky 216 19.12.16 04:00 Сейчас в теме
(5) А Можно скрин именно этой конфы с такой настройкой??

Я не так давно рассматривал и в итоге пришел к выводу что создание/изменение справочников в именно этой конфе возможна только через общие модули и подписку на события
+
7. ekaruk 4905 19.12.16 11:58 Сейчас в теме
(5) Не уверена по поводу КОРП. Но в обычной бух просто нельзя подобрать такую комбинацию ролей, чтобы был доступен просмотр НСИ и недоступно изменение.
+
8. Diego_Iv 34 19.12.16 13:28 Сейчас в теме
Без изменения конфигурации - никак.
Самое простое решение - добавить свои подписки на события "Перед записью".

Например, в группы пользователей добавить группу "Изменение складов", добавить нужных пользователей в эту группу.
В процедуре подписки перед записью склада сделать проверку, находится ли текущий пользователь в этой группе. Если нет: Отказ = Истина и сообщение типа такого "Вам запрещено редактировать склады".
+
9. ImHunter 315 19.12.16 14:30 Сейчас в теме
Как совсем крайний вариант - совет из "области тьмы". Создать в БД триггер запрета изменения данных типа
CREATE TRIGGER _Reference115_ALL
ON dbo._Reference115
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
RAISERROR ('Запрет ввода данных.', 16, 1)
ROLLBACK TRANSACTION
RETURN
END

GO

В примере, _Reference115 - это справочник Валюты моей тестовой конфы. Настоящее место хранения какого-то реально нужного справочника нужно уже уточнять по месту. Будет интересно - напишу как.
Но тогда при попытке какого-либо изменения данных, которые хранятся в _Reference115, платформа будет жестко валиться с ошибкой СУБД и вариантами Завершить работу/Перезапустить.
+
10. ekaruk 4905 19.12.16 14:46 Сейчас в теме
(9) Это совсем крайний вариант :)

В общем настройками не решается.
Решается или с изменением конфигурации - подпиской на событие.
Или без изменения конфигурации - процедурой "ПередЗаписью".в расширении.
+
11. alexx2510 38 19.12.16 16:53 Сейчас в теме
(10)
Решается или с изменением конфигурации - подпиской на событие.

А не разбирались, можно ли при варианте с подпиской вывести сообщение пользователю в окне стандартного предупреждения (там где при Отказе=Истина выводится, что не удалось записать элемент). А то сообщение с описанием того, что не записывается потому что прав нет, которое выводится внизу - не очень красиво смотрится. Или может еще какая интересная идея есть с красивым оформлением этого сообщения?
+
12. ekaruk 4905 19.12.16 17:27 Сейчас в теме
(11) Можно попробовать объект "СообщениеПользователю" с привязкой к объекту и указанием реквизита, к которому привязать сообщение.
Но, по-моему, для этой конкретной задачи (запрет записи) наиболее правильный вариант с точки зрения работы типовых механизмов это
ВызватьИсключение "У Вас нет прав на добавление нового контрагента!!! "
Сообщение посреди экрана, для пользователя четко и понятно.
alexx2510; +1
13. alexx2510 38 19.12.16 17:33 Сейчас в теме
(12) что-то я и забыл про ВызватьИсключение. Отличная идея - то что нужно.
Спасибо.
+
14. Kaspirovsky 216 20.12.16 04:06 Сейчас в теме
Решение:
0. Создаем роль пустую , называем "ЗапретНаРедактированиеСправочника"
1. В общем модуле было создан объект: ЗапретНаРедактированиеСправочника (рис1) с кодом:

Процедура ЗапретНаРедактированиеСправочникаПриЗаписи(Источник, Отказ) Экспорт

Отказ = РольДоступна("ЗапретНаРедактированиеСправочника");
Если РольДоступна("ЗапретНаРедактированиеСправочника") Тогда
Сообщить ("У вас нет прав, обратитесь к руководителю отдела!");
КонецЕсли;

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

2. В подписках на события создаем объект "ЗапретНаРедактированиеСправочника" и в свойствах в "источниках" указываем объекты справочника которые будут запрещены для редактирования и добавления.

3.Добавляем пользователю ЧЕРЕЗ КОНФИГуРАТОР роль "ЗапретНаРедактированиеСправочника"
4.Радуемся жизни :)
(13)
ekaruk; +1
15. ekaruk 4905 20.12.16 04:30 Сейчас в теме
(14) Если уж делать такую глобальную настройку, то уже делать правильно и роль не в конфигураторе назначать, а стандартно в профиль включать. Или просто одну подписку и в ней жестко прописать, что нельзя добавлять никому, кроме пользователя с полными правами.

Но. В (3) указано, что конфигурация "полностью типовая без изменений".
Ради такой мелочи включать возможность изменения и лепить кучу объектов, ИМХО, нецелесообразно.
Проще взять что-то типа такого http://infostart.ru/public/359597/
1. Выбрать справочники, для которых запрещено создание новых объектов.
2. На закладке "ПередЗаписью" написать простейшую проверку
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда Отказ = Истина КонецЕсли
3. На закладке "Пользователи" отметить галочками пользователей, для которых создание объектов запрещено.
Вся настройка в режиме предприятия. Отмеченные пользователи ничего нового создать не смогут.
+
16. Kaspirovsky 216 20.12.16 05:21 Сейчас в теме
(15)
ьно и роль не в конфигураторе назначать, а стандартно в профиль включать. Или просто одну подписку и в не


Роль в конфе это самый минимум, чтобы весь этот механизм заработал, хотите включайте в профили, хотите не включайте это дело десятое.
Если они хотят использовать механизм выходящий за рамки "типовой конфы" и сделать это быстро и бесплатно и не иметь гемора с обработками( механизм работы которых может не корректно работать с обновлениями конфигураций) - то это самый оптимальный вариант
+
17. ekaruk 4905 20.12.16 08:36 Сейчас в теме
(16) Вцелом да, с ролью универсальнее.
Типовые объекты не меняем, так что с обновлением проблем лишних тоже нет.
+
18. Kaspirovsky 216 20.12.16 09:21 Сейчас в теме
(17)
Типовые объекты не меняем, так что с обновлением проблем лишних тоже нет


я про то что обработка может не совсем корректно работать если в конфигурации поменяются какие то объекты, например при обновлении. У нас такое было с обработкой "Сбис" на 43 релизе работает все корректно, на 44 уже нет....
+
19. ekaruk 4905 20.12.16 09:27 Сейчас в теме
(18) Я про схему в (14).
Абсолютно все равно, что за типовая конфигурация и что ней поменяют. Работать все равно будет. Разве что справочники удалят в типовой.

Хотя с расширеними вцелом то же самое, если лишнего не подключать, а только то, что реально нужно.
+
22. Diego_Iv 34 20.12.16 10:39 Сейчас в теме
(9)
Но тогда при попытке какого-либо изменения данных, которые хранятся в _Reference115, платформа будет жестко валиться с ошибкой СУБД и вариантами Завершить работу/Перезапустить.


А нельзя сделать, чтобы еще и компьютер сразу перезагружался?
Это чтоб уж точно пользователю не повадно было, что то в справочнике изменять..
+
23. GeRon 20.12.16 10:45 Сейчас в теме
(22)возможно, вам нужно выполнить команду операционной системы основанную на API функции, но если работает в терминале, то врядли получится
только завершение сеанса, что тоже можно перехватить командой "Ctrl+Alt+Del"
+
25. Diego_Iv 34 20.12.16 11:14 Сейчас в теме
(23) (24) Спасибо за столь подробные ответы!
Уровень Вашего сарказма просто зашкаливает :)

Про более жесткие способы борьбы с записью в справочник (вроде удара током пользователя через клавиатуру или мышь) спрашивать не буду.
+
26. GeRon 20.12.16 11:48 Сейчас в теме
(25)Уважаемый вы спросили вам ответили, где сарказм?
Или ваше сообщение было шуткой?
+
27. Diego_Iv 34 20.12.16 13:00 Сейчас в теме
(26)
Или ваше сообщение было шуткой?

Да.
+
24. ekaruk 4905 20.12.16 11:05 Сейчас в теме
(22) Теоретически можно в тригере вызвать процедуру на SQL сервере, завершающую работу. Но есть один нюанс. Перезагружаться будет компьютер с SQL сервером. Пользователь может и не понять, что проблема в его действиях.
+
Внимание! Тема сдана в архив

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