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