Версия для печати темы (https://pro1c.org.ua/index.php?s=a74960f5da474828c28bfd22b51ef853&showtopic=66621)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Открытие формы при старте системы
Автор: BeLuY 14.06.21, 14:03
Добрый день. В управляемом приложении необходимо сделать автоматическое открытие формы при запуске программы в зависимости от наличия определенной роли. Форму необходимо открыть модально. Знаю, что в обычном приложении это можно сделать в Модуле обычного приложения, в процедуре ПриНачалеРаботыСистемы(), но в управляемом так не работает:
Если РольДоступна("Роль") Тогда
Форма = ПолучитьФорму("Обработка.НоваяОбработка.Форма");
Рез = Форма.ОткрытьМодально();
// Если не удалось
Если Рез = Ложь Тогда
// Закрываем программу
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецЕсли;
Это не работает, потому как:
- Ругается на глобальный метод РольДоступна(), так как он доступен только на сервере
- Модально открыть не получается - выводит ошибку "Использование модальных окон в данном режиме запрещено!"
Опыта работы с управляемыми формами очень мало, но я понимаю, что метод
РольДоступна() доступен на сервере, а
ПолучитьФорму() на клиенте, и они должны быть, как минимум в разных процедурах (или не всегда? =)), но код я взял из обычного приложения (почти весь) и привел для примера.
Зачем это нужно: Есть мобильное устройство, если заходить в программу с него под пользователем, у которого указана определенная роль, необходимо на весь экран запустить определенную форму с несколькими кнопками, адаптированную под экран мобильного устройства. Так у меня сейчас работает в обычном приложении.
Так вот, как можно решить данный вопрос? Как и где в управляемом приложении описать процедуру проверки доступности роли и модальное открытие окна? Или может мой способ в корне неверный и есть другой, более правильный механизм?
Спасибо)
Конфигурация:
BAS Роздрібна торгівля
Автор: BeLuY 14.06.21, 15:22
Хм, в настройке конфигурации, в разделе "Совместимость" нашел параметр Режим использования модальности, значение которого установил как Использовать - теперь форма стала открываться модально
Автор: logist 14.06.21, 20:56
Цитата(BeLuY @ 14.06.21, 15:03)
Как и где в управляемом приложении описать процедуру проверки доступности роли
В глобальном модуле, вызов проверки в ПриНачалеРаботыСистемы
Цитата(BeLuY @ 14.06.21, 15:03)
и модальное открытие окна?
И сразу там же открыть окно со свойством "Блокировать весь интерфейс"
Цитата(BeLuY @ 14.06.21, 16:22)
теперь форма стала открываться модально
Это несколько через Ж, такие свойства существуют для обратной совместимости
Автор: BeLuY 15.06.21, 10:11
Повторюсь, знаний работы в управляемом режиме очень мало...
Цитата(logist @ 14.06.21, 21:56)
В глобальном модуле, вызов проверки в ПриНачалеРаботыСистемы
Насколько я понимаю,
модуль управляемого приложения работает лишь на стороне клиента, а процедура РольДоступна() работает на сервере. Если я напишу такой код:
Процедура ПриНачалеРаботыСистемы()
...
ОткрытьФормуНаСервере();
КонецПроцедуры
&НаСервере
Процедура ОткрытьФормуНаСервере()
Если РольДоступна("Роль") Тогда
...
КонецПроцедуры
пишет, что процедура
ОткрытьФормуНаСервере() не найдена. Если данную процедуру вынести в отдельный глобальный модуль - ничего не меняется... Каким образом можно выполнить проверку, как вызвать данную процедуру на стороне сервера?
Автор: sava1 15.06.21, 10:18
Форму открыть на сервере - для кого ?
чтобы получить доступность роли - Вызывайте процедуру, компилируемую на Сервере, которая возвращает Булево
типа
вызов
локРольДоступна = получитьРольНаСервере()
&НаСервере
Функция получитьРольНаСервере()
Возврат РольДоступна(......);
КонецФункции
Автор: BeLuY 15.06.21, 12:34
Цитата(sava1 @ 15.06.21, 11:18)
Форму открыть на сервере - для кого ?
Не совсем корректно обозвал процедуру, потому как форма должна открываться
на клиенте, а роль проверятся
на сервере Цитата(sava1 @ 15.06.21, 11:18)
чтобы получить доступность роли - Вызывайте процедуру, компилируемую на Сервере, которая возвращает Булево
В этом случае получаю ошибку "
Процедура или функция с указанным именем не определена"
Из модуля управляемого приложения не выполняются серверные методы, видимо, не тот модуль я ковыряю
Автор: sava1 15.06.21, 12:48
в общих модулях, экспортная
вооще-то в БСП есть функция РолиДоступны(
Автор: BeLuY 15.06.21, 12:58
Цитата(sava1 @ 15.06.21, 13:48)
в общих модулях, экспортная
Цитата(sava1 @ 15.06.21, 13:48)
вооще-то в БСП есть функция РолиДоступны(
На клиенте тоже не работает
Автор: BeLuY 15.06.21, 14:24
UPD:
Цитата(sava1 @ 15.06.21, 13:48)
в общих модулях, экспортная
Получилось спасибо, только для этого в общем модуле необходимо установить "птички" в настройках
Сервер и
Вызов сервера:
Неудобно, что нельзя редактировать старые сообщения...
Цитата(logist @ 14.06.21, 21:56)
И сразу там же открыть окно со свойством "Блокировать весь интерфейс"
А можно как-то открыть форму, чтобы она была развернута на весь экран? В обычных формах был
режим рабочего стола, а как в управляемых?
Автор: logist 15.06.21, 19:18
Цитата(BeLuY @ 15.06.21, 15:24)
а как в управляемых?
Если 1с ничего не придумала за последние пару лет - то никак. Есть библиотеки разные, например WindowEx, но они все как правило работают с какими-то косяками.
p.s. вместо ПолучитьФорму().Открыть() лучше использовать ОткрытьФорму()
Автор: BeLuY 16.06.21, 11:00
Цитата(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С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua