powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перехватить/изменить метод стандартного контрола
25 сообщений из 37, страница 1 из 2
Перехватить/изменить метод стандартного контрола
    #39697103
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: создание системы разграничения доступа к контролам форм на уровне интерфейса (с помощью методов .Enabled, .Locked) на основе таблицы полномочий. Задача усложнена тем, что доступ ко многим контролам так же закрывается/открывается, подчиняясь определенной бизнес-логике приложения (например: в зависимости от значения Поля1 и переменной х мы закрываем или открываем Поле2).
Вопрос: можно ли изменить стандартные методы .Enabled и .Locked контролов, добавив свой обработчик? Т.е. сначала должна отработать логика приложения на VBA, а потом, при вызове метода .Enabled - дополнительная проверка/отработка системы разграничения доступа?
Позволяет ли Access такие вольности?
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697107
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotov,

Странный вопрос... сначала проверяй все свои бизнес логики и полномочия, а в конце делай или не делай свои .Enabled и .Locked
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697109
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotovс помощью методов .Enabled, .LockedЭто свойства, а не методы.

Посему вопрос - непонятен. Осмыслите его ещё раз (причём в стандартных терминах), после чего переформулируйте так, чтобы было понятно, что же нужно сделать.

PS. Событий изменения указанных свойств контрола - не существует.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697113
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotov,

К стати Enabled Locked свойства, а ни методы.
vmag вам правильно советует.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697115
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagAIzotov,

Странный вопрос... сначала проверяй все свои бизнес логики и полномочия, а в конце делай или не делай свои .Enabled и .Locked

Приложение (и бизнес логика) существует давно, довольно объемное. Копаться во всем коде и дописывать к каждому .Enabled проверку полномочий совсем не хочется. Хочется написать универсальный обработчик, добавить его в класс и автоматом получить требуемый результат.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697118
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROIAIzotov,

К стати Enabled Locked свойства, а ни методы.
vmag вам правильно советует.

В принципе это не важно. Важно понимать смогу ли я добавить свою логику в класс.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697124
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotovROIAIzotov,

К стати Enabled Locked свойства, а ни методы.
vmag вам правильно советует.

В принципе это не важно. Важно понимать смогу ли я добавить свою логику в класс.
В Access нет такого понятия как переопределения методов класса.
Ну и классы в нем закрытые так - что увы.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697128
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROIAIzotovпропущено...


В принципе это не важно. Важно понимать смогу ли я добавить свою логику в класс.
В Access нет такого понятия как переопределения методов класса.
Ну и классы в нем закрытые так - что увы.

Печально.
Понял, спасибо.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697219
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotov,
А почему не перебрать циклом EACH(на открытии формы или текущей записи)все элементы нужных типов и задать,по условию,нужные свойства(если правильно понял задачу)
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697228
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuAIzotov,
А почему не перебрать циклом EACH(на открытии формы или текущей записи)все элементы нужных типов и задать,по условию,нужные свойства(если правильно понял задачу)
Это при открытии формы - так и делается.
Но во время работы, на уже открытой форме, в событии AfterUpdate некоторых контролов происходит анализ данных и последующая реакция в виде .Enabled=true или false для других контролов.
Но эта операция менее приоритетна, чем контроль доступа, т.е. каждое обращение к свойству .Enabled должно "накрываться сверху" проверкой доступности этого контрола системой разграничения доступа.

Запутанно как-то выглядит объяснение.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697236
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotov, в событии Form_Dirty можно попробовать анализировать значение свойств и закрывать отслеживаемые контролы.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697238
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotovв событии AfterUpdate некоторых контролов происходит анализ данных и последующая реакция в виде .Enabled=true или false для других контролов.
..а последней строкой кода на обработке AfterUpdate контрола должно быть: Me.ctl.Enabled=true\false для других контролов.
Вы же сами отвечаете на свой вопрос
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697241
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку:единственное что нужно предусмотреть-если контрол скрыт при открытии-игнорировать его отображение при обновлении поля
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697242
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuAIzotovв событии AfterUpdate некоторых контролов происходит анализ данных и последующая реакция в виде .Enabled=true или false для других контролов.
..а последней строкой кода на обработке AfterUpdate контрола должно быть: Me.ctl.Enabled=true\false для других контролов.
Вы же сами отвечаете на свой вопрос

Этих AfterUpdate у меня - около двух сотен.
Естесственно, это решение "в лоб" и оно приходит на ум первым. Но его трудоемкость заставляет поискать другие варианты.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697247
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotovЭтих AfterUpdate у меня - около двух сотен.
Естесственно, это решение "в лоб" и оно приходит на ум первым. Но его трудоемкость заставляет поискать другие варианты.
У вас других вариантов практически нет.
К каждому контролу придется приложить руки (увы это Access)
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697250
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ROIAIzotovЭтих AfterUpdate у меня - около двух сотен.
Естесственно, это решение "в лоб" и оно приходит на ум первым. Но его трудоемкость заставляет поискать другие варианты.
У вас других вариантов практически нет.
К каждому контролу придется приложить руки (увы это Access)

Ну так после Вашего ответа выше я это понял.
Наверное сделаю public процедуру-обёртку над .Enabled с доп. анализом полномочий.
И может быть получится как-то контекстно заменить (с помощью VBA).
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697576
AIzotovЗадача: создание системы разграничения доступа к контролам форм на уровне интерфейса (с помощью методов .Enabled, .Locked) на основе таблицы полномочий.
Вам нужно написать и вызывать при открытии формы процедуру, которая на основе имени пользователя и имени формы извлекает из таблицы имена контролов и делает им .Enabled, .Locked.
AIzotovдоступ ко многим контролам так же закрывается/открывается, подчиняясь определенной бизнес-логике приложения (например: в зависимости от значения Поля1 и переменной х мы закрываем или открываем Поле2). А это параллельный процесс, который проще всего решается условным форматированием.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697612
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то похожее было реализовано в моей программе "Автотранспорт". Запрашивались логин и пароль при входе в программу и в зависимости от назначенной роли пользователя блокировались определённые кнопки управления на формах.
Ролей было мало 4 или 5. (администратор, руководитель, пользователь, зритель...)
Форм то-же не очень много. Они были универсальными для всех ролей. Органы блокировались только при загрузке формы. Во время работы с формой блокировки не менялись.

В другой задаче по документообороту заявок на материалы и оборудование кроме универсальных форм были и специализированные формы под конкретную роль.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697628
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JossЧто-то похожее было реализовано в моей программе "Автотранспорт".
Вашу программу с rusimport'a я видел уже очень давно :)
Думаю Вы писали ее уже с учетом требований разграничения доступа. У меня ситуация немного другая (описано выше).
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697636
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно стоит пойти по пути создания ряда маленьких форм или inputbox для ввода соответствующих значений? И вызывать нужные в зависимости от значения ввода предыдущих?

А может Вы выложите скриншот Вашей формы и уточните, что Вам надо?

И что Вы понимаете под системой разграничения доступа? Доступ в зависимости от роли пользователя или доступ в зависимости от предыдущих действий пользователя?
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697690
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JossВозможно стоит пойти по пути создания ряда маленьких форм или inputbox для ввода соответствующих значений? И вызывать нужные в зависимости от значения ввода предыдущих?

А может Вы выложите скриншот Вашей формы и уточните, что Вам надо?

И что Вы понимаете под системой разграничения доступа? Доступ в зависимости от роли пользователя или доступ в зависимости от предыдущих действий пользователя?

Еще раз: приложение работает больше 10 лет, форм - больше 100. Объем кода - за 30 тысяч строк.
Перестраивать все это - нет ни желания, ни необходимости. Открытие/закрытие элементов управления на формах в зависимости от определенных условий тоже успешно работает.
Задача - добавить этот механизм алгоритмом, который проверял бы полномочия текущего пользователя (роли) для всех (требуемых) контролов текущей формы.

Пример:
1. Пользователю№1 разрешены все контролы формы. В зависимости от выбранного значения Combo1, в соответствии с бизнес-логикой приложения, ему становится доступным или Поле1, или Поле2. Это реализовано процедурой в событии AfterUpdate Combo1.
2. Пользователю№2 разрешены только Combo1 и кнопка Exit, т.е. в событии Open формы мы проверяем его полномочия и закрываем Поле1, Поле2, Edit. Он выбирает какое-то значение в Combo1, страбатывает событие AfterUpdate и открывает Поле1 или Поле2. Но такого быть не должно - Пользователю№2 они запрещены в любом случае. Т.е. после процедуры, реализующей открытие/закрытие по бизнес логике должен отработать какой-то механизм, проверяющий полномочия и реагирующий на них.

Решается это просто, в лоб - создается public процедура, реализующая такой механизм, и её вызов добавляется в конце каждого AfterUpdate.
Трудоемко. Хочется избежать такой рутины. Поэтому и ищу варианты.
Про процедуру-обёртку над .Enabled уже написал. В принципе такая корректировка кода в масштабах всего приложения автоматизируется.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697708
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такое реализовалось в лоб.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697798
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIzotovJossВозможно стоит пойти по пути создания ряда маленьких форм или inputbox для ввода соответствующих значений? И вызывать нужные в зависимости от значения ввода предыдущих?

А может Вы выложите скриншот Вашей формы и уточните, что Вам надо?

И что Вы понимаете под системой разграничения доступа? Доступ в зависимости от роли пользователя или доступ в зависимости от предыдущих действий пользователя?

Еще раз: приложение работает больше 10 лет, форм - больше 100. Объем кода - за 30 тысяч строк.
Перестраивать все это - нет ни желания, ни необходимости. Открытие/закрытие элементов управления на формах в зависимости от определенных условий тоже успешно работает.
Задача - добавить этот механизм алгоритмом, который проверял бы полномочия текущего пользователя (роли) для всех (требуемых) контролов текущей формы.

Пример:
1. Пользователю№1 разрешены все контролы формы. В зависимости от выбранного значения Combo1, в соответствии с бизнес-логикой приложения, ему становится доступным или Поле1, или Поле2. Это реализовано процедурой в событии AfterUpdate Combo1.
2. Пользователю№2 разрешены только Combo1 и кнопка Exit, т.е. в событии Open формы мы проверяем его полномочия и закрываем Поле1, Поле2, Edit. Он выбирает какое-то значение в Combo1, страбатывает событие AfterUpdate и открывает Поле1 или Поле2. Но такого быть не должно - Пользователю№2 они запрещены в любом случае. Т.е. после процедуры, реализующей открытие/закрытие по бизнес логике должен отработать какой-то механизм, проверяющий полномочия и реагирующий на них.

Решается это просто, в лоб - создается public процедура, реализующая такой механизм, и её вызов добавляется в конце каждого AfterUpdate.
Трудоемко. Хочется избежать такой рутины. Поэтому и ищу варианты.
Про процедуру-обёртку над .Enabled уже написал. В принципе такая корректировка кода в масштабах всего приложения автоматизируется.

правильно ли я понимаю, что ваш комбобокс = уровень доступа( админ, зверь, менеджер) ?
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697807
AIzotov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прогер_самоучкаправильно ли я понимаю, что ваш комбобокс = уровень доступа( админ, зверь, менеджер) ?
Нет. Это элемент бизнес-логики. Уровень доступа должен быть добавлен (наложен сверху) на основе таблицы полномочий.
...
Рейтинг: 0 / 0
Перехватить/изменить метод стандартного контрола
    #39697856
AIzotov1. Пользователю№1 разрешены все контролы формы. В зависимости от выбранного значения Combo1, в соответствии с бизнес-логикой приложения, ему становится доступным или Поле1, или Поле2. Это реализовано процедурой в событии AfterUpdate Combo1. Ну хорошо, Combo1 заполнили - Поле1, или Поле2 включилось, затем переходите на новую запись, Combo1 пусто, а Поле1, или Поле2 включено . Вы же про событие Current формы ничего не пишете. Как выкручиваетесь?

AIzotov2. Пользователю№2 разрешены только Combo1 и кнопка Exit, т.е. в событии Open формы мы проверяем его полномочия и закрываем Поле1, Поле2, Edit. Он выбирает какое-то значение в Combo1, страбатывает событие AfterUpdate и открывает Поле1 или Поле2. Но такого быть не должно - Пользователю№2 они запрещены в любом случае. Т.е. после процедуры, реализующей открытие/закрытие по бизнес логике должен отработать какой-то механизм, проверяющий полномочия и реагирующий на них. У контролов есть редко используемое строковое св-во "Дополнительные сведения"(Tag). Если на Open формы кроме закрытия доступа к контролам писать что-то в их Tag, то затем на AfterUpdate этот Tag проверять и не пущать.

Но я еще раз со своим самоваром - условное форматирование (УФ) позволяет управлять доступом к полю. Например, для Поле1 указать выражение [Combo1] Is Null и действие "Включить" то включение/выключение будет работать исправно, если его Enabled=True. А если Falde, ьо никаких изменений не будет. Что и требуется. Правда УФ можно применять только к полям и полям со списком.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Перехватить/изменить метод стандартного контрола
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]