Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Открытие формы при старте системы , Управляемое приложение          
BeLuY Подменю пользователя
сообщение 14.06.21, 14:03
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6

Добрый день. В управляемом приложении необходимо сделать автоматическое открытие формы при запуске программы в зависимости от наличия определенной роли. Форму необходимо открыть модально. Знаю, что в обычном приложении это можно сделать в Модуле обычного приложения, в процедуре ПриНачалеРаботыСистемы(), но в управляемом так не работает:

    Если РольДоступна("Роль") Тогда        
        Форма = ПолучитьФорму("Обработка.НоваяОбработка.Форма");        
        Рез = Форма.ОткрытьМодально();        
        
        // Если не удалось
        Если Рез = Ложь Тогда
            // Закрываем программу
            ЗавершитьРаботуСистемы(Ложь);
        КонецЕсли;    
    КонецЕсли;

Это не работает, потому как:
  1. Ругается на глобальный метод РольДоступна(), так как он доступен только на сервере
  2. Модально открыть не получается - выводит ошибку "Использование модальных окон в данном режиме запрещено!"

Опыта работы с управляемыми формами очень мало, но я понимаю, что метод РольДоступна() доступен на сервере, а ПолучитьФорму() на клиенте, и они должны быть, как минимум в разных процедурах (или не всегда? =)), но код я взял из обычного приложения (почти весь) и привел для примера.

Зачем это нужно: Есть мобильное устройство, если заходить в программу с него под пользователем, у которого указана определенная роль, необходимо на весь экран запустить определенную форму с несколькими кнопками, адаптированную под экран мобильного устройства. Так у меня сейчас работает в обычном приложении.

Так вот, как можно решить данный вопрос? Как и где в управляемом приложении описать процедуру проверки доступности роли и модальное открытие окна? Или может мой способ в корне неверный и есть другой, более правильный механизм?

Спасибо)

Конфигурация: BAS Роздрібна торгівля

BeLuY Подменю пользователя
сообщение 14.06.21, 15:22
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6

Хм, в настройке конфигурации, в разделе "Совместимость" нашел параметр Режим использования модальности, значение которого установил как Использовать - теперь форма стала открываться модально

logist Подменю пользователя
сообщение 14.06.21, 20:56
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(BeLuY @ 14.06.21, 15:03) *
Как и где в управляемом приложении описать процедуру проверки доступности роли

В глобальном модуле, вызов проверки в ПриНачалеРаботыСистемы

Цитата(BeLuY @ 14.06.21, 15:03) *
и модальное открытие окна?

И сразу там же открыть окно со свойством "Блокировать весь интерфейс"

Цитата(BeLuY @ 14.06.21, 16:22) *
теперь форма стала открываться модально

Это несколько через Ж, такие свойства существуют для обратной совместимости


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: BeLuY,

BeLuY Подменю пользователя
сообщение 15.06.21, 10:11
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6

Повторюсь, знаний работы в управляемом режиме очень мало...

Цитата(logist @ 14.06.21, 21:56) *
В глобальном модуле, вызов проверки в ПриНачалеРаботыСистемы

Насколько я понимаю, модуль управляемого приложения работает лишь на стороне клиента, а процедура РольДоступна() работает на сервере. Если я напишу такой код:
Процедура ПриНачалеРаботыСистемы()    
    ...
    ОткрытьФормуНаСервере();
КонецПроцедуры

&НаСервере
Процедура ОткрытьФормуНаСервере()
    Если РольДоступна("Роль") Тогда
    ...
КонецПроцедуры

пишет, что процедура ОткрытьФормуНаСервере() не найдена. Если данную процедуру вынести в отдельный глобальный модуль - ничего не меняется... Каким образом можно выполнить проверку, как вызвать данную процедуру на стороне сервера?

sava1 Подменю пользователя
сообщение 15.06.21, 10:18
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

Форму открыть на сервере - для кого ?

чтобы получить доступность роли - Вызывайте процедуру, компилируемую на Сервере, которая возвращает Булево

типа

вызов

локРольДоступна = получитьРольНаСервере()

&НаСервере
Функция получитьРольНаСервере()
    Возврат РольДоступна(......);
КонецФункции


Сообщение отредактировал sava1 - 15.06.21, 10:18

BeLuY Подменю пользователя
сообщение 15.06.21, 12:34
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6

Цитата(sava1 @ 15.06.21, 11:18) *
Форму открыть на сервере - для кого ?

Не совсем корректно обозвал процедуру, потому как форма должна открываться на клиенте, а роль проверятся на сервере crazy.gif

Цитата(sava1 @ 15.06.21, 11:18) *
чтобы получить доступность роли - Вызывайте процедуру, компилируемую на Сервере, которая возвращает Булево

В этом случае получаю ошибку "Процедура или функция с указанным именем не определена"



Из модуля управляемого приложения не выполняются серверные методы, видимо, не тот модуль я ковыряю wacko.gif

sava1 Подменю пользователя
сообщение 15.06.21, 12:48
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

в общих модулях, экспортная

вооще-то в БСП есть функция РолиДоступны(

Спасибо сказали: BeLuY,

BeLuY Подменю пользователя
сообщение 15.06.21, 12:58
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6

Цитата(sava1 @ 15.06.21, 13:48) *
в общих модулях, экспортная



Цитата(sava1 @ 15.06.21, 13:48) *
вооще-то в БСП есть функция РолиДоступны(



На клиенте тоже не работает

BeLuY Подменю пользователя
сообщение 15.06.21, 14:24
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 34
Спасибо сказали: 6 раз
Рейтинг: 6

UPD:
Цитата(sava1 @ 15.06.21, 13:48) *
в общих модулях, экспортная


Получилось спасибо, только для этого в общем модуле необходимо установить "птички" в настройках Сервер и Вызов сервера:



Неудобно, что нельзя редактировать старые сообщения...


Цитата(logist @ 14.06.21, 21:56) *
И сразу там же открыть окно со свойством "Блокировать весь интерфейс"

А можно как-то открыть форму, чтобы она была развернута на весь экран? В обычных формах был режим рабочего стола, а как в управляемых?

logist Подменю пользователя
сообщение 15.06.21, 19:18
Сообщение #10

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(BeLuY @ 15.06.21, 15:24) *
а как в управляемых?

Если 1с ничего не придумала за последние пару лет - то никак. Есть библиотеки разные, например WindowEx, но они все как правило работают с какими-то косяками.

p.s. вместо ПолучитьФорму().Открыть() лучше использовать ОткрытьФорму()


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: BeLuY,

BeLuY Подменю пользователя
сообщение 16.06.21, 11:00
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 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) *
вместо ПолучитьФорму().Открыть() лучше использовать ОткрытьФорму()

Спасибо, исправил)

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.11.24, 2:33
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!