Добрый день, коллеги.

Подскажите как можно скрыть (не отображать) кнопку определенным ролям?

Нравится

2 комментария

Добрый день

Задачу можно решить 2-мя вариантами:

1. Больше кода

  • определить роль текущего пользователя, реализовав запрос в БД;
  • обернуть этот запрос в метод, который должен отрабатывать в методе init вашей карточки (раздела). Если работа метода будет асинхронной, то изначальную инициализацию атрибута нужно будет сделать в false;
  • добавить собственный атрибут в модель, к примеру isButtonVisible
  • в diff прописать операцию merge для этой кнопки, указав visible: {bindTo: "isButtonVisible"}
  • в зависимости от результата запроса устанавливать значение атрибута

2. Меньше кода

  • создаем операцию в разделе "Доступ к операциям", к примеру HaseButton;
  • настраиваем доступ к операции по ролям;
  • gовторяем все, что описано в варианте 1 (кроме написания запроса к БД), но с модификациями:

               - создаем метод, который определяет наличие права             

                  (.../RightsService/GetCanExecuteOperations)

               - по результату заполняем атрибут IsButtonVisible

Спасибо, пока реализовали через процесс.

Который считывает входит пользователь в группу или нет, а дальше ветвление, если входит то процесс по кнопке выполнянется, если не входит не выполняется

Показать все комментарии

Собственно стоит следующая задача:
Нужно чтобы в списке всех контрагентов не отображались средства связи (телефоны, эл. почта, факс и т.д.), а так же контактное лицо. Так же нужно сделать так, чтобы пользователь не смог открывать карточку контрагента если он не является ответственным лицом последней или пользователем с правами администратора. т.е. иными словами пользователь сможет посмотреть детали контрагента только в том случае, если он является его ответственным лицом или администратором.
Далее это дело должно касаться и отчетов. Полная информация по контрагентам должна быть в отчете только по компаниям принадлежащим пользователю составляющим отчет. Хотя можно вообще скрыть эту информация в отчетах по всем контрагентам (тут уж как проще сделать).
Ну и вопрос на засыпку - как можно сменить ответственное лицо?
Какими средствами мне можно решить поставленную задачу?
Спасибо.

Нравится

8 комментариев

Для скрытия полей откройте карточку контрагента (Accounts\General\Main Grid\wnd_AccountEdit) и для соответственных полей укажите для свойства IsVisible значение False.
Для того, чтобы ограничить просмотр карточек контрагентов, Вам на помощь придут права доступа к группам таблиц (Инструменты-Администрирование), где Вы сможете ограничить права для обычных пользователей на группу таблиц "Контрагенты". Автор, создавший карточку, сможет ее видеть и редактировать. Также к правам доступа Вы можете получить доступ из детали "Доступ", где указываются права доступа на конкретную запись.
Для решения вопроса с отчетами Вам нужно внести изменения в запрос на выборку отчета, где и реализовать проверку контрагента по пользователю.
Сменить ответственного можно в карточке редактирования. В том случае, если поле "Ответственный" не редактируемое, логика системы не предусматривает изменения ответственного.

Для скрытия полей откройте карточку контрагента (Accounts\General\Main Grid\wnd_AccountEdit) и для соответственных полей укажите для свойства IsVisible значение False.

спасибо, но это уже пройдено, а требуется вот что:
[URL=http://www.radikal.ru][IMG]http://s40.radikal.ru/i090/1103/ae/bc55d633c…]
т.е. чтобы в этом окне пользователь мог видеть ТОЛЬКО название контрагента и ТОЛЬКО ответственное лицо, а значит чтобы он не имел доступа к настройке полей.
ДалееЮ, если я убираю галку чтение поля контрагенты, то пользователю вообще не виден ни один контрагент. Может это все же лучше сделать через "Доступ", но где этот инструмент мне не известно. Подскажите этот вопрос, пожалуйста.
По воводу отчетов - опишите поподробней, пожалуйста, процедуру.
Огромное спасибо.

Вам нужно перейти в Инструменты - Администрирование - Права доступа к полям и там выставить необходимые поля для определенных пользователей или же групп пользователей. При таком способе раздачи прав на контрагентов в отчетах пользователи будут видеть только ту информацию, на которую у него есть права. Если к колонке запрещен доступ, то в отчет данные из этой колонки не попадут.

Виталий, а по поводу запрета изменения колонок - как запретить пользователю их настройку?

т.е. чтобы всегда были поля только контрагент и ответственный

Если у пользователя не будет прав на определенные поля таблицы, то он и не увидит данных в других колонках, кроме тех, на которые есть права. Скрытие настроек колонок правами не регулируется. Если даже пользователь и настроит какое-либо отображение, то настройки будут храниться в его профиле и на других пользователей не распространяться.

и снова незадача... выставив пользователю запрет на поле, например, средство связи - он не видит это поле ни в общем списке контрагентов, ни в списке своих контрагентов, ни в карточке контрагента... как это можно отрегулировать более тонко?

В запросе на выборку sq_Accounts есть фильтр MyAccounts. Вы можете его или включить в самом запросе, или же делать это скриптом
EnableDatasetFilters(Dataset, true, 'MyAccounts');
При включенном фильтре будут отображены контрагенты только данного контакта.
Можете также сделать в реестре контрагентов еще одно представление, которое привязать к данному фильтру. Оно будет отображать только контрагентов данного пользователя.
То же касается и отчетов - нужно включать фильтр и там. Или же создать его аналогичным образом для запроса на выборку, который фигурирует, как запрос на выборку данных отчета.

Показать все комментарии

Иногда, возникает ситуация, когда необходимо скрыть часть информации из записи в таблице от определенной группы пользователей системы, т.е. скрыть поле в реестре и поле ввода в карточке редактирования.
Если нет желания связываться с настройкой прав доступа на поля таблиц, то вышеописанную задачу можно решить следующим способом:

1.    В обработчике события OnPrepare окна реестра скрыть необходимую колонку.
Колонку нужно скрыть во всех представления (DataGridView) компонента реестра (DataGrid) в окне.
Выяснив, что выполняется условие для скрытия колонки, нужно определить количество представлений реестра:
   

 var GridViewCount = DataGridName.Count;

Затем, в цикле в каждом из представлений перебирать колонки и в случае, если колонка отображает искомое поле, скрывать ее:

for (var i = 0; i GridViewCount; i++) { // цикл по представлениям реестра
 var DataGridView = grdData.Items(i);
 if (DataGridView.Items(0)) {
  var GridFieldCount = DataGridView.Count; // количество колонок в представлении
  for (var k = 0; k GridFieldCount; k++) { // цикл по колонкам
   var Column = DataGridView.Items(k);
   if (Column.DataField) { // проверка того, что колонка отображает поле из набора данных
    if (Column.DataField.Name == FieldName) { // проверка того, что поле, отображаемое в колонке, - искомое
     DataGridView.RemoveItem(Column); // удалить колонку из представления
     Self.RemoveComponent(Column); // удалить колонку из окна реестра
     break;
    }
   }
  }
 }
}

2. Запретить возможность фильтрации реестра по скрываемому полю

Dataset.DataFields(FieldName).IsFilteringField = false;

3. Скрыть поле ввода в карточке редактирования реестра.
Для этого, в обработчике события OnPrepare окна карточки редактирования реестра соответствующему компоненту установить свойство IsVisible = false.

Нравится

Поделиться

3 комментария

А как данный вариант сказывается на производительности? Стандартный имхо более удобен в настройке и последующей модификации...

Согласен с Александром. С правами доступа "связываться придется" в любом случае.

Думаю, что права доступа и производительность - основные недостатки такого решения...

--
www.it-sfera.com.ua

Показать все комментарии

При построении пользовательского отчета MS Word с использованием детали - эта деталь отображается в самом отчете в виде таблицы. В некоторых отчетах это отображение не совсем удобно, особенно в тех случаях, когда необходимо отображение в виде списка.

Могу предложить скрыть рамки таблицы деталей следующим образом:
в скрипте scr_UseReportCommon после строки
var Table = Selection.Tables.Item(1); прописать следующее:

 
 for (var i = 1; i 8; i++) {
  Table.Borders(-i).LineStyle = 0;
 }
 Table.Borders.Shadow = false;

В результате при построении отчетов, рамки таблиц будут невидимы.

Желаю удачи!

С уважением.
Мельникова Екатерина

 

Нравится

Поделиться

1 комментарий

У меня строка

var Table = Selection.Tables.Item(1)

встречается дважды. В EvaluateDetailExpression и ProcessDetail. В каком именно месте нужно цикл добавить?

P.S. Писать

Table.Borders(-i).LineStyle = 0;

не очень хорошо. Чтобы облегчить жизнь тому кто придет после нас лучше писать

var wdLineStyleNone = 0;
Table.Borders(-i).LineStyle = wdLineStyleNone;

Кстати вот список стилей линий, может кому сгодится

wdLineStyleDashDot = 5
wdLineStyleDashDotDot = 6
wdLineStyleDashDotStroked = 20
wdLineStyleDashLargeGap = 4
wdLineStyleDashSmallGap = 3
wdLineStyleDot = 2
wdLineStyleDouble = 7
wdLineStyleDoubleWavy = 19
wdLineStyleEmboss3D = 21
wdLineStyleEngrave3D = 22
wdLineStyleInset = 24
wdLineStyleNone = 0
wdLineStyleOutset = 23
wdLineStyleSingle = 1
wdLineStyleSingleWavy = 18
wdLineStyleThickThinLargeGap = 16
wdLineStyleThickThinMedGap = 13
wdLineStyleThickThinSmallGap = 10
wdLineStyleThinThickLargeGap = 15
wdLineStyleThinThickMedGap = 12
wdLineStyleThinThickSmallGap = 9
wdLineStyleThinThickThinLargeGap = 17
wdLineStyleThinThickThinMedGap = 14
wdLineStyleThinThickThinSmallGap = 11
wdLineStyleTriple = 8

Показать все комментарии