1. FlagmanGK 18.12.16 14:15 Сейчас в теме

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

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

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

Например, в группы пользователей добавить группу "Изменение складов", добавить нужных пользователей в эту группу.
В процедуре подписки перед записью склада сделать проверку, находится ли текущий пользователь в этой группе. Если нет: Отказ = Истина и сообщение типа такого "Вам запрещено редактировать склады".
9. ImHunter 21 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 4077 19.12.16 14:46 Сейчас в теме
(9) Это совсем крайний вариант :)

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

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

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

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

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

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

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

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


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


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

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


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

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

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

Вакансии

Удаленный консультант-разработчик 1С
Краснодар
зарплата от 60 000 руб. до 60 000 руб.
Полный день



Ведущий программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Руководитель проектов 1С
Москва
Полный день