|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
Отображение вкладок формы навигации в зависимости от полномочий пользователя базы19.01.2018, 09:13. Показов 3661. Ответов 18
Метки нет (Все метки)
Добрый день всем.
Есть база, в ней при открытии запускается главная форма, сделанная в виде формы навигации со вкладками. Также перед запуском главной формы выдается формочка для определения роли пользователя (менеджер, кладовщик и т.д.) - в зависимости от роли нужно, чтобы отображались или не отображались определенные вкладки главной формы навигации. Для начала я пошел самым простым путем - забираем роль пользователя в глобальную переменную, и при открытии главной формы проверяем роль и задаем свойство Visible кнопок-вкладок формы навигации. Получилось немного коряво, то есть вкладки-то "прячутся", но на их месте остаются пустоты, выглядит не особо аккуратно, но пойдет. И вот тут вылезла вторая проблема. Вкладки располагаются на форме в определенном порядке: первой, допустим, идет вкладка "Заказы", второй - "Материалы" и т.д. И вот если, допустим, задать невидимость кнопки вкладки "Заказы", то получается так, что сама кнопка не отображается, а вот содержимое окна подчиненной формы, которое соответствует именно этому элементу навигации - отображается, то есть пользователь видит перечень заказов, хотя и не должен. А вот если потом перейти на другую вкладку главной формы навигации, то обратно в журнал заказов не вернешься, т.к. правильно, его кнопки нет на экране. Но изначально-то он зачем отображается, этот журнал заказов?.. Как бы так обойти эту ерунду? Не хотелось бы при этом менять форму навигации на обычную форму со вкладками...
0
|
|
| 19.01.2018, 09:13 | |
|
Ответы с готовыми решениями:
18
Обновление/перезагрузка формы в зависимости от привилегий пользователя
Отображение второй формы одновременно с первой в зависимости от значения CheckBox |
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 19.01.2018, 09:23 | |
|
К сожалению экспериментировать не на чем. Но исходя из текста Вашего сообщения, можно предложить завести еще одну глобальную переменную, указывающую номер (или название) вкладки, на которую надо переходить при открытии. Номер будет разный для каждого юзера. Тогда, как Вы пишете, если юзеру недоступна вкладка Заказы, он на нее перейти уже не сможет. И при открытии видна будет другая вкладка, не Заказы
1
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 19.01.2018, 09:27 [ТС] | |
|
mobile, Спасибо за идею). А можно глупый вопрос? Как "переходить при открытии" именно в случае с формой навигации?.. Что-то не соображу с утра)
0
|
|
|
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
|
|
| 19.01.2018, 09:53 | |
|
А не проще будет сделать копии "полной" формы навигации (наверное 3-4 будет) , по удалять из них лишнее и открывать, после определения роли пользователя, нужную.
1
|
|
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|||||||
| 19.01.2018, 09:53 | |||||||
1
|
|||||||
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 19.01.2018, 09:58 [ТС] | |
|
ltv_1953, Спасибо, тоже интересная идея.
mobile, И еще раз спасибо, попробую такой вариант.
0
|
|
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 19.01.2018, 10:05 | |
Сообщение было отмечено Kkarn как решение
Решение
И еще. Вместо переменных лучше в спец.таблице, соединенной с таблицей ролей юзеров завести поля имен вкладок и номера кнопки открытия. Ведь есть немалая вероятность появления новых ролей или перемены их прав. Вместо того, чтобы править код, гораздо проще и надежней поправить таблицу.
2
|
|
|
296 / 257 / 68
Регистрация: 18.06.2015
Сообщений: 570
|
|
| 19.01.2018, 11:17 | |
|
И еще я бы предложил не скрывать, а деактивировать кнопки, которые недоступны текущему пользователю. Так не будет ни пробелов, и кнопки не будут "скакать", что может быть не удобно пользователям - привыкают.
Ну и навигационная форма - не лучшее решение, я бы его избегал - при переключении каждая форма грузится заново, много других мелких проблем, подобной этой. Переделка на обычные табы займет не так много времени, я бы переделал.
1
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 19.01.2018, 12:30 [ТС] | |
|
MrShin, Спасибо, попробую предложить и такой вариант (с деактивированными кнопками).
А я как-то привык к навигационным формам, а в том, что при переключении формы грузятся заново - есть и свой плюс. Хотя да, и минусы в них тоже есть, сталкивался...
0
|
|
|
2 / 2 / 0
Регистрация: 21.03.2017
Сообщений: 74
|
||||||
| 19.01.2018, 15:16 | ||||||
0
|
||||||
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
||||||
| 25.01.2018, 09:08 [ТС] | ||||||
|
На всякий случай отвечу тут сам себе).
Оптимальным вариантом оказалось задание свойства SourceObject у подчиненной формы навигации. То есть при открытии формы навигации сначала анализируем, какие кнопки вкладок отображать, и попутно, если кнопка заблокирована, то прописываем что-то вроде
1
|
||||||
|
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
|
||
| 26.01.2018, 02:49 | ||
2
|
||
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
||||||
| 03.02.2018, 20:56 [ТС] | ||||||
|
Возвращаюсь в эту тему с близким вопросом.
В этой же самой обсуждаемой ранее главной форме навигации заказчик теперь хочет иметь возможность "горячих клавиш", по нажатию которых бы открывались разные вкладки этой формы. Ок, делаю в свойство формы "Перехват нажатия клавиш" - "Да", и пишу что-то вроде такого:
И оно работает, в подформе навигации отображается содержимое именно этой вкладки, НО. Как сделать так, чтобы заодно и кнопка этой вкладки отображалась НАЖАТОЙ, то есть меняла свой цвет на форме?... А то получается ерунда: в подформе отображается содержимое вкладки "Закупки", а нажатой, например, наверху формы выглядит кнопка "Заказы"... Визуально получается ерунда, хотелось бы довести до ума ситуацию... То есть по сути вопрос такой: как заставить кнопку формы навигации выглядеть нажатой, то есть поменять цвет, визуальное оформление и т.д.? Может, я подхожу к вопросу не с той стороны, конечно. Я пробовал уже сделать так, как советовал выше mobile, то есть Me(ПеременнаяНужнаяКнопка).setfocus SendKeys "{Enter}" Так не работает. Точнее, кнопка визуально получает пунктирное выделение по краю (как выделенная), но передача нажатия энтера не срабатывает, потому и решил прописать так, как описал выше, т.е. путем замены соурсобъекта подформы навигации.
0
|
||||||
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|||||||
| 04.02.2018, 12:29 | |||||||
Сообщение было отмечено Kkarn как решение
Решение
1
|
|||||||
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 04.02.2018, 15:07 [ТС] | |
|
mobile, спасибо, направление мысли понял.
Я тут ещё подумал, что в моём случае лучше будет задействовать макрос autokeys (само собой, он будет вызывать функции, описанные выше). Но обнаружил, что в нем почему-то невозможно задать сочетания клавиш с Alt. То есть я нашел в описании sendkeys, что альт обозначается как %, соответственно написал в autokeys имя встроенного макроса %Q, но при нажатии комбинации ругается на неприемлемое имя и отсылает к хелпу по sendkeys, откуда собственно я это и взял...
0
|
|
|
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 04.02.2018, 15:28 | |
|
Насколько я помню (давно не использовал) в autokeys можно применять только сочетания только с CTRL. С некоторыми исключениями для Shift. ALT вроде бы запрещен для AutoKeys. Во всяком случае с буквами и цифрами применим только CTRL.
1
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 04.02.2018, 15:36 [ТС] | |
|
Понятно. Очень жаль... Просто если пользоваться захватом нажатия клавиш для главной формы навигации, то там можно использовать альт, но зато если пользователь кликнет в подчиненной форме, то горячие клавиши уже не работают... То есть можно, конечно, прописать захват ещё и в каждой из возможных подчиненных форм, но это уже как-то не то, т.к. там есть варианты с другими вложенными формами и т.д. Ладно, ещё раз большое спасибо, суть я понял, буду думать.
0
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 05.02.2018, 14:08 [ТС] | |
|
Я здесь набросал базу-пример.
В ней - форма навигации, на которой три "вкладки". При этом заказчик настаивает на дурацкой (на мой взгляд) раскрашенности каждой вкладки в свой цвет, а выбранная в данный момент вкладка выдяляется более темным цветом и белым шрифтом. Так вот, нужно сделать, чтобы по сочетанию клавиш Ctrl + 1, Ctrl + 2 и Ctrl + 3 открывалась соответственно первая, вторая или третья вкладка. Это я решил путем замены соурсобъекта подчиненной формы, оно работает. Но вопрос о том, как сменить цветовое оформление "нажатой" вкладки - остается открытым. Я пробовал играться со свойствами BackColor и ForeColor. В принципе, смог добиться того, чтобы "выбранная" вкладка становилась по цвету как бы нажатой, НО при этом визуально остается нажатой и кнопка другой вкладки. которую до этого нажимали мышкой. Хотя я прописывал ей сменить бэкколор на "фоновый" - не срабатывает почему-то... Поэтому убрал из базы эти "пробы", они все равно не дают правильного результата. Хотелось бы таки окончательно порешать данный вопрос, буду очень признателен).
0
|
|
|
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
| 06.02.2018, 10:13 [ТС] | |
|
Хотя, наверное, лучше вынести этот вопрос в отдельную тему, поскольку начального вопроса оно вообще не касается...
0
|
|
| 06.02.2018, 10:13 | |
|
Помогаю со студенческими работами здесь
19
Отображение формы (заставки) при загрузке приложение, в зависимости от роизводительности ПК
Скрытие вкладок подчиненной формы с условием главной формы Отображение / скрытие вкладок в Access97 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|