Добрый день. Появилась необходимость запретить всем пользователям создавать некоторые справочники (фирмы, подразделения, склады, контрагенты идр) подскажите, как можно это сделать без изменения конфигурации?
(3) Настройками вроде никак.
Можно попробовать поэкспериментировать с профилями пользователей, поснимать роли, разрешающие изменение НСИ.
Или как вариант, добавьте расширение и в нем запретите для определенных пользователей создавать элементы. Это проще и меньше вероятность что-то другое испортить.
Можно понаписать воды про эксперименты и профиля, но самое простое тут Сервис -> Пользователи -> Группы пользователей -> Права и убрать у группы номенклатуру на запись, затем кинуть туда нужных пользователей.
(5) А Можно скрин именно этой конфы с такой настройкой??
Я не так давно рассматривал и в итоге пришел к выводу что создание/изменение справочников в именно этой конфе возможна только через общие модули и подписку на события
(5) Не уверена по поводу КОРП. Но в обычной бух просто нельзя подобрать такую комбинацию ролей, чтобы был доступен просмотр НСИ и недоступно изменение.
Без изменения конфигурации - никак.
Самое простое решение - добавить свои подписки на события "Перед записью".
Например, в группы пользователей добавить группу "Изменение складов", добавить нужных пользователей в эту группу.
В процедуре подписки перед записью склада сделать проверку, находится ли текущий пользователь в этой группе. Если нет: Отказ = Истина и сообщение типа такого "Вам запрещено редактировать склады".
Как совсем крайний вариант - совет из "области тьмы". Создать в БД триггер запрета изменения данных типа
CREATE TRIGGER _Reference115_ALL
ON dbo._Reference115
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
RAISERROR ('Запрет ввода данных.', 16, 1)
ROLLBACK TRANSACTION
RETURN
END
GO
В примере, _Reference115 - это справочник Валюты моей тестовой конфы. Настоящее место хранения какого-то реально нужного справочника нужно уже уточнять по месту. Будет интересно - напишу как.
Но тогда при попытке какого-либо изменения данных, которые хранятся в _Reference115, платформа будет жестко валиться с ошибкой СУБД и вариантами Завершить работу/Перезапустить.
В общем настройками не решается.
Решается или с изменением конфигурации - подпиской на событие.
Или без изменения конфигурации - процедурой "ПередЗаписью".в расширении.
Решается или с изменением конфигурации - подпиской на событие.
А не разбирались, можно ли при варианте с подпиской вывести сообщение пользователю в окне стандартного предупреждения (там где при Отказе=Истина выводится, что не удалось записать элемент). А то сообщение с описанием того, что не записывается потому что прав нет, которое выводится внизу - не очень красиво смотрится. Или может еще какая интересная идея есть с красивым оформлением этого сообщения?
(11) Можно попробовать объект "СообщениеПользователю" с привязкой к объекту и указанием реквизита, к которому привязать сообщение.
Но, по-моему, для этой конкретной задачи (запрет записи) наиболее правильный вариант с точки зрения работы типовых механизмов это
ВызватьИсключение "У Вас нет прав на добавление нового контрагента!!! "
Сообщение посреди экрана, для пользователя четко и понятно.
Решение:
0. Создаем роль пустую , называем "ЗапретНаРедактированиеСправочника"
1. В общем модуле было создан объект: ЗапретНаРедактированиеСправочника (рис1) с кодом:
Отказ = РольДоступна("ЗапретНаРедактированиеСправочника");
Если РольДоступна("ЗапретНаРедактированиеСправочника") Тогда
Сообщить ("У вас нет прав, обратитесь к руководителю отдела!");
КонецЕсли;
КонецПроцедуры
2. В подписках на события создаем объект "ЗапретНаРедактированиеСправочника" и в свойствах в "источниках" указываем объекты справочника которые будут запрещены для редактирования и добавления.
3.Добавляем пользователю ЧЕРЕЗ КОНФИГуРАТОР роль "ЗапретНаРедактированиеСправочника"
4.Радуемся жизни :)
(13)
(14) Если уж делать такую глобальную настройку, то уже делать правильно и роль не в конфигураторе назначать, а стандартно в профиль включать. Или просто одну подписку и в ней жестко прописать, что нельзя добавлять никому, кроме пользователя с полными правами.
Но. В (3) указано, что конфигурация "полностью типовая без изменений".
Ради такой мелочи включать возможность изменения и лепить кучу объектов, ИМХО, нецелесообразно.
Проще взять что-то типа такого http://infostart.ru/public/359597/ 1. Выбрать справочники, для которых запрещено создание новых объектов.
2. На закладке "ПередЗаписью" написать простейшую проверку
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда Отказ = Истина КонецЕсли
3. На закладке "Пользователи" отметить галочками пользователей, для которых создание объектов запрещено.
Вся настройка в режиме предприятия. Отмеченные пользователи ничего нового создать не смогут.
ьно и роль не в конфигураторе назначать, а стандартно в профиль включать. Или просто одну подписку и в не
Роль в конфе это самый минимум, чтобы весь этот механизм заработал, хотите включайте в профили, хотите не включайте это дело десятое.
Если они хотят использовать механизм выходящий за рамки "типовой конфы" и сделать это быстро и бесплатно и не иметь гемора с обработками( механизм работы которых может не корректно работать с обновлениями конфигураций) - то это самый оптимальный вариант
Типовые объекты не меняем, так что с обновлением проблем лишних тоже нет
я про то что обработка может не совсем корректно работать если в конфигурации поменяются какие то объекты, например при обновлении. У нас такое было с обработкой "Сбис" на 43 релизе работает все корректно, на 44 уже нет....
(18) Я про схему в (14).
Абсолютно все равно, что за типовая конфигурация и что ней поменяют. Работать все равно будет. Разве что справочники удалят в типовой.
Хотя с расширеними вцелом то же самое, если лишнего не подключать, а только то, что реально нужно.
Но тогда при попытке какого-либо изменения данных, которые хранятся в _Reference115, платформа будет жестко валиться с ошибкой СУБД и вариантами Завершить работу/Перезапустить.
А нельзя сделать, чтобы еще и компьютер сразу перезагружался?
Это чтоб уж точно пользователю не повадно было, что то в справочнике изменять..
(22)возможно, вам нужно выполнить команду операционной системы основанную на API функции, но если работает в терминале, то врядли получится
только завершение сеанса, что тоже можно перехватить командой "Ctrl+Alt+Del"
(22) Теоретически можно в тригере вызвать процедуру на SQL сервере, завершающую работу. Но есть один нюанс. Перезагружаться будет компьютер с SQL сервером. Пользователь может и не понять, что проблема в его действиях.