Привет!
Конфигурация УТП 1.1.7.3
Задача: сделать так, чтобы пользователи не могли редактировать чужие документы, т.е. те документы, которые создали не они.
Можно конечно в каждом документе сделать какую-то проверку, на автрока (к стати, как?).
Но я думаю, может есть какой-то механизм, с помощью которого не прийдется каждый документ "ковырять"?
элегантнее всего это через тот же механизм, которым закрывается доступ к чужим контрагентам
все просто.
есть ПодпискаНаСобытие и там ищем ПриЗаписиДокумента (что то подобное)
в процедуре проверяем на ТекущегоПользователь и ОТветственный (кста это не обязательно тот чувак который создавал этот документ)
з.ы. 1.1.7.3 или там еще RLS?
извините, конфигурации под рукой нету...
Цитата
кста это не обязательно тот чувак который создавал этот документ
Т.е. в 8 нет 7-мерочного аналога "Автор"?
Цитата
1.1.7.3 или там еще RLS?
А я хз. Написано просто 1.1.7.3
Цитата(Vofka @ 02.03.10, 8:56) необходимо зарегистрироваться для просмотра ссылки
Т.е. в 8 нет 7-мерочного аналога "Автор"?
А я хз. Написано просто 1.1.7.3
нет.....Ответственный это не автор....
1. подрозумевается: Иванов может сделать документ. Но ответственным назначить Петрова. Ты можешь менять значение этого реквизита.
2. Открыл 1.1.7.3
Идем в подписку на события, ищем "ПередЗаписьюДокументаДатаЗапретаРедактирования"..там вызываем Процедуру "ПередЗаписьюДокументаДатаЗапретаРедактированияПередЗаписью"....."Источник" - это ссылка на документ(в данном случае)....а там уже смотрим. Не забываем что есть подписка и на регитсры
3. что касается автора....добавил еще одну подписку...выбрал документы где есть отвесттвенный....и там
Источник.Ответственный = глЗначениеПеременной("глТекущийПользователь"); (выдрал из УТ...может в УТП нету такой функции, но смыл, пологаю, понятен).
zetovich, а что такое "ПодпискаНаСобытие"? Это какой-то механизм платформы?
Конфигурация-Общие-подпискаНаСобытия.
можешь перечислить источник, выбрать событие....и одной процедурой можешь его обрабатывать. (не унапример, нужно тебе что то при заиси документов.....чтоб неписать везде....можно воспользоваться подпиской)
раньше для запрета редактирования (и не ток) использовали RLS.....на деле оказалось медленное и иногда непременимо.....вродь в новых релизах и духу от rls не осталось...
Ясно, спасибо, буду разбираться!
Если только изменение - подписка для начинающего самое то. Если просмотр и чтение - RLS однозначно ...
А можно в нескольких словах или линк что такое RLS?
capitoshko
28.03.10, 15:32
необходимо зарегистрироваться для просмотра ссылки
А еще можно по-простому или по-сложному (через язык) оформить это в ролях пользователей. Как правило, над "Ответственным" будет начальник, который все равно захочет все поменять по-своему.
А у меня такой вопрос. До этого подписками на событие особо не пользовался, но вот возникла ситуация когда нужно определнным правам открывать все проведенные документы только на просмотр. Такого события как ПередОткрытием не нашел чтобы выставлять только на просмотр. Можно конечно перед записью делать запрет, но хочется узнать, может можно добавить как-то событие ПередОткрытием?
РЛС должно подойти.
Без подпискок.
---
Вернее даже без РЛС права такие есть.
Цитата(Batchir @ 15.05.10, 15:21) необходимо зарегистрироваться для просмотра ссылки
А у меня такой вопрос. До этого подписками на событие особо не пользовался, но вот возникла ситуация когда нужно определнным правам открывать все проведенные документы только на просмотр. Такого события как ПередОткрытием не нашел чтобы выставлять только на просмотр. Можно конечно перед записью делать запрет, но хочется узнать, может можно добавить как-то событие ПередОткрытием?
интересно зачем?
можно сделать что то типа общего журнала/отчета....и там выводить им то что нужно. Остальной интерфейс (по документам) должен быть и так закрыт...
RLS лучше ,но муторно все права с доками(регистрами?) править.
Цитата(zetovich @ 15.05.10, 22:30) необходимо зарегистрироваться для просмотра ссылки
интересно зачем?
можно сделать что то типа общего журнала/отчета....и там выводить им то что нужно. Остальной интерфейс (по документам) должен быть и так закрыт...
RLS лучше ,но муторно все права с доками(регистрами?) править.
Пользователи выходят через список подчиненных на документы которые им вроде как просматривать и создавать можно можно, но изменять проведенные нельзя. У этих пользователей свой интерфейс и так и причем именно на интерфейс и всё завязано. Заказчика и так всё устраивает, просто попросил чтобы пользователи (которым назначен определенный интерфейс нельзя изменять проведенные документы). Вот я и хотел пойти через события что бы сделать как можно проще и эффективней.
Ну в общем не стал я лезть в дебри РЛС и просто реализовал, в подписке на событие "перед записью документа" проверку на проведенный документ и даю отмену. Заказчика устроил этот механизм.
Creaturka
16.05.10, 16:35
а чем не устаивает в правах доступа запретить интерактивное изменение проведенных?
тогда как раз без всякого кода форма непроведенного\нового открывается на изменение, а проведенного - только просмотр
Пользователю выбраны стандартные права (типовые) и эти же права назначены другим пользователям. Тут привязка идет к интерфейсу. И вобщем то нужно было простое и быстрое решение. На реализацию через подписку ушло времени 10 мин, а сколько бы ушло времени на создание и отладку новых прав? В общем дело в КПД реализации.
Цитата(Batchir @ 16.05.10, 1:02) необходимо зарегистрироваться для просмотра ссылки
Ну в общем не стал я лезть в дебри РЛС и просто реализовал, в подписке на событие "перед записью документа" проверку на проведенный документ и даю отмену. Заказчика устроил этот механизм.
А можно код реализации? Как то надо было запретить запись и проведение задним числом. "Родил" вот такое:
Пользователь = Пользователи.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнойОтветственный");
ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь);
Роли = ТекущийПользователь.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
Если ИмяРоли = "Пользователь" Тогда
Отказ = ПроверитьВозможностьПроведенияДокументаЗаднимЧислом(ДокументОбъект);//ну дальше проверяю в какой дате сидит документ
Прервать;
КонецЕсли;
КонецЦикла;
Но что то мне не нравится перебор. И как то по сравнению с семеркой где НазваниеНабораПрав() слишком много букв
Creaturka
17.05.10, 13:02
РольДоступна (IsInRole)
Синтаксис:
РольДоступна(<Роль>)
Параметры:
<Роль> (обязательный)
Тип: Строка, ОбъектМетаданных: Роль. Название роли как она задана в конфигураторе или объект описания метаданного роли.
Возвращаемое значение:
Тип: Булево. Истина - роль доступна текущему пользователю; Ложь - в противном случае.
Описание:
Определяет доступность указанной роли текущему пользователю.
Пример:
Если Не РольДоступна("Менеджер") Тогда
Сообщить("Просмотр заявок от покупателей не разрешен!");
КонецЕсли;
Цитата(MATEVI @ 17.05.10, 11:06) необходимо зарегистрироваться для просмотра ссылки
А можно код реализации?
Да там ничего хитрого. В УТ есть событие ПередЗаписьюДокументаПроверкаДоступностиПериода
Так я туда дописал свою проверку
Процедура ПередЗаписьюДокументаПроверкаДоступностиПериода(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
ПроверкаПериодаДокумента(Источник, Отказ, РежимЗаписи);
#Если Клиент Тогда
Если Отказ Тогда
Сообщить("Редактирование данных этого периода запрещено. Изменения не могут быть записаны...", СтатусСообщения.Важное);
КонецЕсли;
// мой код начало
Если ПользователиИнформационнойБазы.ТекущийПользователь().ОсновнойИнтерфейс.Имя = "ПродавецКожи" Тогда
Если Источник.Проведен Тогда
Отказ = Истина;
Сообщить("Редактирование проведенных документов запрещено. Изменения не могут быть записаны...", СтатусСообщения.Важное);
КонецЕсли;
КонецЕсли;
// мой код конец
#КонецЕсли
КонецПроцедуры // ПередЗаписьюДокументаПроверкаДоступностиПериода()
Ещё раз обращаю внимание, что мне нужно было выполнять именно для определенного интерфейса, независимо от выбранных прав
Да. Как то пропустил
Синтаксис:
РольДоступна(<Роль>)
Добрый день.
В типовой УТП необходимо сделать деление видимости, доступности учета по подразделениям.
Это значит что справочники номенклатуры, контрагентов, организации - общие. А вот видимость данных в журналах документов, отчетах,
возможность формирования документов должна зависеть от подразделения в котором работает человек.
Один человек может работать в нескольких подразделениях.
Подскажите как лучше всего реализовать сие чудо?
Решение которое мне пришло (мне кажется что это быстрее чем RLS):
1. Принудительно ограничивать отбор в журналах по подразделению в зависимости от пользователя.
2. Контролировать выбор подразделения в документе в зависимости от пользователя.
3. Как формировать отчеты по подразделению (с запретом изменения отбора) - пока не придумал.
Может быть существует более элегантное решение?
RLS - наше все.
1) можно эти отборы отключать.
2) ну зачем оно Вам нужно(там добавили фильтр...там забыли)?
3) RLS как раз и решит вопрос со всеми отчетами.
что за причина боязни RLS?
shavulsky
24.09.10, 14:44
Цитата(zetovich @ 24.09.10, 15:32) необходимо зарегистрироваться для просмотра ссылки
что за причина боязни RLS?
Малое кол-во информации, книжек.
если можно - ссылку где почитать
Причина не боязнь а то что могу сделать так что все будет тормозить. Говорят что RLS медленно работает.
Цитата(pencroff @ 24.09.10, 17:12) необходимо зарегистрироваться для просмотра ссылки
Причина не боязнь а то что могу сделать так что все будет тормозить. Говорят что RLS медленно работает.
Простые запросы (а у Вас именно такие должны быть)..работать будет вполне нормально.
да собственно что мешает проверить?....там 5 мин запроса писательства. (лучше посмотреть на типовые (УТ). Сделать что-то наподобие).
У нас, на 15 одновременно работающих пользователей по 300 документов в день, базе уже 4 года, отлично работает по кассами и складам.
Как будто и нет ограничений.
ОФФТОП. А у меня никак руки не доходят до изучения РЛС, хотя чешутся.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.