|
УТ 10.2 как запретить редактирование юридического адреса | ☑ | ||
---|---|---|---|---|
0
pro3ri
10.12.15
✎
13:09
|
Добрый день!
Есть ут 10.2. В элементе справочника на закладке контакты пользователи не должны изменять Адрес с видом Юридический. https://s.mail.ru/4z6npTCbt9eh/img-2015-12-10-15-07-17.png А остальные контакты менять могут. Как это реализовать? |
|||
1
Nuobu
10.12.15
✎
13:15
|
(0) В регистре "Контактная информация контрагентов" в модуле "перезЗаписью" пропиши Отказ = истина.
|
|||
2
lxndr
10.12.15
✎
13:25
|
(0) через RLS
|
|||
3
pro3ri
14.12.15
✎
08:01
|
(1) Для каждого Запись Из ЭтотОбъект Цикл
Если Запись.Вид.Наименование = "Юридический адрес контрагента" И (РольДоступна("ЗаписьКонтактныхДанных") Или РольДоступна("РуководительСбыта")) Тогда Запрос =Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Представление |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Вид = &Вид"; Запрос.УстановитьПараметр("Объект", Запись.КонтрагентДляОграниченияПравДоступа); Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00001")); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда БылЮрАдрес = ""; Если БылЮрАдрес<>Запись.Представление Тогда //Отказ = Истина; Запись.Представление = БылЮрАдрес; СтрокаОтказа = "Вам запрещено изменять юридический адрес!!!"; Предупреждение("Вам запрещено изменять юридический адрес!!!"); КонецЕсли; Иначе БылЮрАдрес = РезультатЗапроса.Выгрузить()[0].Представление; Если БылЮрАдрес<>Запись.Представление Тогда //Отказ = Истина; Запись.Представление = БылЮрАдрес; СтрокаОтказа = "Вам запрещено изменять юридический адрес!!!"; Предупреждение("Вам запрещено изменять юридический адрес!!!"); КонецЕсли; КонецЕсли; КонецЕсли; сделал такой код. Благодарю. |
|||
4
Лефмихалыч
14.12.15
✎
08:28
|
(3) а теперь удаляй его
|
|||
5
pro3ri
14.12.15
✎
08:42
|
(4) а какие тут ошибки? Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00001")); не комильфо, но ведь работает. Как сделать оптимальнее?
|
|||
6
Лефмихалыч
14.12.15
✎
08:51
|
(5) да там всё не ком иль фо
1. Запросов в цикле, как у доброй собаки блох. 2. Предупреждения в серверном вызове 3. Неиспользуемые переменные и что за нах - Запись.КонтрагентДляОграниченияПравДоступа. ЭТо что такой и откуда оно взялось? |
|||
7
Мэс33
14.12.15
✎
08:52
|
(6) "ком иль фо" - это какое-то запрещенное на форуме слово?
|
|||
8
Лефмихалыч
14.12.15
✎
08:52
|
ну и ограничивать доступ, если РОльДОступна() - это вообще алес.
При расширении набора прав полномочия должны расширяться, а у тебя сужаются. |
|||
9
Лефмихалыч
14.12.15
✎
08:53
|
(7) нет, это я двоечник
|
|||
10
User_Agronom
14.12.15
✎
08:59
|
(6)
1. Цикла нет ни одного! 2. Формы обычные. 3. Тут невозможно в Вами не согласится! |
|||
11
User_Agronom
14.12.15
✎
09:00
|
(10) 1. Отзывается - я невнимателен.
|
|||
12
Лефмихалыч
14.12.15
✎
09:09
|
(10) при чем тут формы? ПередЗаписью на сервере выполняется
|
|||
13
User_Agronom
14.12.15
✎
09:13
|
(12) Это для клиент-сервера.
В обычном приложении предупреждение выскочит. Согласен некрасиво, но достаточно работоспособно. |
|||
14
Лефмихалыч
14.12.15
✎
09:19
|
(13) да какая разница? Код угрёбищный наглухо.
Попимо уже описанного мной: 2. он не запрещает удаление 3. Если наименование вида поменять на "Юр. адрес", то все перестанет работать. 4. с учетом того, что запись в РС - это сначала очистка, а потом запись, благодаря первому "если", это говнище вообще любую запись в РС запретит |
|||
15
Defender aka LINN
14.12.15
✎
09:53
|
(13) А вы для клиент-сервера, получается, код не пишете? У вас этим другой отдел занимается, или как?
|
|||
16
User_Agronom
14.12.15
✎
10:06
|
(14) С этим тоже невозможно не согласиться.
(15) Всё пишу. И даже на управляемых формах иногда (но мало). И даже знаю, что в обычном приложении всё выполняется на клиенте. Поэтому директива &НаСевере теряет смысл. |
|||
17
Cyberhawk
14.12.15
✎
10:09
|
(16) "в обычном приложении всё выполняется на клиенте" // ошибаешься (общий модуль с одной галкой "Сервер" тебе в помощь)
|
|||
18
User_Agronom
14.12.15
✎
10:45
|
(17) Мы уходим в offtop.
Напомню ветвь дискуссии: Как оповестить пользователя из подписки в обычном приложеннии о причине отказа ы записи? Обязательно ли вызывать процедуру из модуля с одной галкой "Сервер"? |
|||
19
Defender aka LINN
14.12.15
✎
10:52
|
(18) Для этого есть специально обученное Сообщить. В особо тяжких случаях - ВызватьИсключение.
|
|||
20
Лефмихалыч
14.12.15
✎
11:04
|
Форма элемента контрагентов записывает набор записей с отбором по контрагенту. Соответственно:
1. RLS на запись приведет к невозможности записать любую контактную информацию, если в наборе есть юр.радрес 2. RLS на чтение приведет к потерям данных - записываться будет успешно, но будет затирать юр адрес, если он был задан, т.к. отбора по видам КИ нет при записи. Либо вламываться в УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию() и там проверять перед записью. Либо на форме элемента контрагентов запрещать редактирование кодом. Оба варианта не многим менее уиопищные, чем код в (3) |
|||
21
Лефмихалыч
14.12.15
✎
11:05
|
+(20) можно навесить RLS на чтение И вломиться в УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(), чтобы она записывала с отбором по объекту и виду.
Тогда, по идее, будет надежнее. Но, если где-то в конфе есть запись набора без отборра по виду, - будет потеря данных. |
|||
22
Мэс33
14.12.15
✎
11:08
|
(20) По мне - лучший вариант где-то здесь:
>>>Либо на форме элемента контрагентов Перехватывать на форме попытку изменить юрадрес - и ругаться матом. |
|||
23
Cyberhawk
14.12.15
✎
11:09
|
(18) Я просто решил поделиться - вдруг ты не знал. Ну а в толстых (обычное приложение) типовых сделано через директиву "Если Клиент Тогда" и Предупреждение / Сообщение
|
|||
24
Лефмихалыч
14.12.15
✎
11:10
|
(22) пожалуй, да, но это во всех формах надо повторять, а потом молиться, чтобы не появилось какой-нибудь новой, в которой редактировать КИ можно. Сложная система палок и веревок, а не автоматизация.
|
|||
25
Мэс33
14.12.15
✎
11:23
|
(24) <<<<но это во всех формах надо повторять
Форма будет одна - форма элемента. <<<< а потом молиться прогер тут один. Так что норм. |
|||
26
pro3ri
14.12.15
✎
15:00
|
(6) Добавил в ПВХ https://s.mail.ru/4eTEVZKsNC9g/img-2015-12-14-11-29-58.png галки
Передалал так: Процедура ПередЗаписью(Отказ, Замещение) Для каждого Запись Из ЭтотОбъект Цикл Если Запись.Вид = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ЗапретРедактирования") Тогда ВнестиДопЗапись = Ложь; Прервать; ИначеЕсли Не Запись.Вид = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ЗапретРедактирования") Тогда ВнестиДопЗапись = Истина; КонецЕсли; КонецЦикла; Если ВнестиДопЗапись Тогда ЮрАдрес = ЭтотОбъект.Добавить(); ЮрАдрес.Объект = ЭтотОбъект.Отбор.Объект.Значение; ЮрАдрес.Вид = ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ЗапретРедактирования"); ЮрАдрес.КонтрагентДляОграниченияПравДоступа = ЭтотОбъект.Отбор.Объект.Значение; ЮрАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; КонецЕсли; Для каждого Запись Из ЭтотОбъект Цикл Если Запись.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента И (ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ОграничениеНаРедактированиеКонтактов") Или ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "МожетРедактироватьОсновногоМенеджераКлиента")) Тогда Запрос =Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Представление, | КонтактнаяИнформация.Тип |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект | И КонтактнаяИнформация.Вид = &Вид"; Запрос.УстановитьПараметр("Объект", Запись.КонтрагентДляОграниченияПравДоступа); Запрос.УстановитьПараметр("Вид", ПолучитьЗначениеПоУмолчанию(глТекущийПользователь, "ЗапретРедактирования")); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Если ""<>Запись.Представление Тогда Запись.Представление = ""; СтрокаОтказа = "Вам запрещено изменять юридический адрес!!!"; Предупреждение("Вам запрещено изменять юридический адрес!!!"); КонецЕсли; Иначе Если РезультатЗапроса.Выгрузить()[0].Представление<>Запись.Представление Тогда Запись.Представление = РезультатЗапроса.Выгрузить()[0].Представление; Запись.Тип = РезультатЗапроса.Выгрузить()[0].Тип; СтрокаОтказа = "Вам запрещено изменять юридический адрес!!!"; Предупреждение("Вам запрещено изменять юридический адрес!!!"); КонецЕсли; КонецЕсли; КонецЕсли; Благодарю форумчан за поправки. |
|||
27
Defender aka LINN
14.12.15
✎
16:14
|
Рукалицо...
|
|||
28
Мэс33
14.12.15
✎
16:43
|
Жесть
|
|||
29
Лефмихалыч
14.12.15
✎
16:58
|
(26) где ты видел, чтобы тебе такое советовали?
![]() |
|||
30
Nuobu
14.12.15
✎
18:59
|
(26) Я один вижу цикл в цикле?
|
|||
31
Лефмихалыч
14.12.15
✎
19:09
|
(26) добавь обработчик ПриНачалеРедактирования табличного поля с набором записей что-то вроде
Если ТекущиеДанные.Вид = ВидЮрАдрес Тогда Отказ = не РольДоступна("РольКоторойМожноРедактировать"); |
|||
32
pro3ri
15.12.15
✎
08:56
|
(31) сделал Процедура КонтактнаяИнформацияПередНачаломИзменения(Элемент, Отказ)
Если Элемент.ТекущиеДанные.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента Тогда Отказ = Не РольДоступна("МожетРедактироватьЮрАдрес"); КонецЕсли; в проц ПриНачалеРедактирования Процедура КонтактнаяИнформацияПриНачалеРедактирования(Элемент, НоваяСтрока) нет отказа thx |
|||
33
Мимохожий Однако
15.12.15
✎
09:02
|
(0)ОФФ:Обычных административных методов не хватило?
|
|||
34
pro3ri
15.12.15
✎
09:08
|
нет (33)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |