Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6
Добрый день. В управляемом приложении необходимо сделать автоматическое открытие формы при запуске программы в зависимости от наличия определенной роли. Форму необходимо открыть модально. Знаю, что в обычном приложении это можно сделать в Модуле обычного приложения, в процедуре ПриНачалеРаботыСистемы(), но в управляемом так не работает:
Если РольДоступна("Роль") Тогда Форма = ПолучитьФорму("Обработка.НоваяОбработка.Форма"); Рез = Форма.ОткрытьМодально();
// Если не удалось Если Рез = Ложь Тогда // Закрываем программу ЗавершитьРаботуСистемы(Ложь); КонецЕсли; КонецЕсли;
Это не работает, потому как:
Ругается на глобальный метод РольДоступна(), так как он доступен только на сервере
Модально открыть не получается - выводит ошибку "Использование модальных окон в данном режиме запрещено!"
Опыта работы с управляемыми формами очень мало, но я понимаю, что метод РольДоступна() доступен на сервере, а ПолучитьФорму() на клиенте, и они должны быть, как минимум в разных процедурах (или не всегда? =)), но код я взял из обычного приложения (почти весь) и привел для примера.
Зачем это нужно: Есть мобильное устройство, если заходить в программу с него под пользователем, у которого указана определенная роль, необходимо на весь экран запустить определенную форму с несколькими кнопками, адаптированную под экран мобильного устройства. Так у меня сейчас работает в обычном приложении.
Так вот, как можно решить данный вопрос? Как и где в управляемом приложении описать процедуру проверки доступности роли и модальное открытие окна? Или может мой способ в корне неверный и есть другой, более правильный механизм?
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6
Хм, в настройке конфигурации, в разделе "Совместимость" нашел параметр Режим использования модальности, значение которого установил как Использовать - теперь форма стала открываться модально
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6
Повторюсь, знаний работы в управляемом режиме очень мало...
Цитата(logist @ 14.06.21, 21:56)
В глобальном модуле, вызов проверки в ПриНачалеРаботыСистемы
Насколько я понимаю, модуль управляемого приложения работает лишь на стороне клиента, а процедура РольДоступна() работает на сервере. Если я напишу такой код:
&НаСервере Процедура ОткрытьФормуНаСервере() Если РольДоступна("Роль") Тогда ... КонецПроцедуры
пишет, что процедура ОткрытьФормуНаСервере() не найдена. Если данную процедуру вынести в отдельный глобальный модуль - ничего не меняется... Каким образом можно выполнить проверку, как вызвать данную процедуру на стороне сервера?
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(BeLuY @ 15.06.21, 15:24)
а как в управляемых?
Если 1с ничего не придумала за последние пару лет - то никак. Есть библиотеки разные, например WindowEx, но они все как правило работают с какими-то косяками.
p.s. вместо ПолучитьФорму().Открыть() лучше использовать ОткрытьФорму()
Личные бесплатные консультации не даю, для этого есть форум!
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6
Цитата(logist @ 15.06.21, 20:18)
Если 1с ничего не придумала за последние пару лет - то никак. Есть библиотеки разные, например WindowEx, но они все как правило работают с какими-то косяками.
Сделал так, не знаю насколько это правильно, но пока работает:
&НаКлиенте Процедура ПриОткрытии(Отказ) // Разворачиваем форму "на весь экран" Попытка WSHShell = Новый COMОбъект("WScript.Shell"); WSHShell.SendKeys("% "); WSHShell.SendKeys("{UP}{UP}{ENTER}"); Исключение КонецПопытки; КонецПроцедуры
Цитата(logist @ 15.06.21, 20:18)
вместо ПолучитьФорму().Открыть() лучше использовать ОткрытьФорму()
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!