Имя: Пароль:
1C
 
веб-клиент. ОткрытьФорму() в ПриОткрытии
,
0 mr_K
 
12.10.17
15:48
Есть обработка. В ней основной назначена некая сервисная форма, у которой в ПриОткрытии проверяется какую форму открыть и выполняется открытие.
Код простой (это в сервисной форме):
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Отказ = Истина;
    
    ДоступПользователя = ПроверитьПользователяНаДоступ();
    Если ДоступПользователя = "Количество" Тогда
        ОткрытьФорму("Обработка.ОценкаКачества.Форма.УправляемаяФормаКоличество");
.......

В веб-клиенте получаю сообщение "Использование модальных окон в данном режиме запрещено"

В СП про ОткрытьФорму прочитал все много раз. Нигде про модальность нет. В конфигурации даже включил режим использования модальности. Не помогает.
Есть идеи, как побороть?
1 Mort
 
12.10.17
15:50
А каким кодом открывается сервисная форма?
И если уже на то пошло - форму нужно определять в менеджере обработки в соответствующем событии, а не через гланды.
2 mr_K
 
12.10.17
15:53
Сервисная открывается интерактивно.
"И если уже на то пошло - форму нужно определять в менеджере обработки в соответствующем событии, а не через гланды." - а что здесь через гланды? Обработка. Внутри одной формы вызывается открытие другой. Все корректно. Но не пашет.
3 Филиал-msk
 
12.10.17
15:57
(2) Через глубочайшие гланды здесь конкретно вот это:

Процедура ПриОткрытии(Отказ)
    
    Отказ = Истина;


Рады были помочь, приходите еще.
4 Филиал-msk
 
12.10.17
15:59
(0) Да и про СП ты нап... обманул:


Примечание:
...

Обычные формы внешних обработок не поддерживаются.
В управляемом приложении не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка.
5 mr_K
 
12.10.17
16:01
(3) в данном случае - шли мимо, вот и ходите).
Там несколько категорически разных форм, в зависимости от пользователя должна открываться какая-то одна. Как это реализовать иначе? Нет понятно, что варианты есть. Но этот - самый очевидный и читаемый.
(4) Смотрим в книгу - видим фигу. Где я писал, что это внешняя обработка? Где здесь "программное открытие и закрытие одной и той же формы в одном вызове"?
6 Mort
 
12.10.17
16:02
(2) Открывать левую форму чтобы открыть другую это и есть через гланды, когда существует событие специально для этого. Экономия серверных вызовов хотя бы.

А по поводу ошибки - ищи отладчиком модальный вызов. Может быть он и тут "ПроверитьПользователяНаДоступ();" сидит.
7 mr_K
 
12.10.17
16:04
ПроверитьПользователяНаДоступ - там просто запрос. Результат которого эта функция и возвращает.
"когда существует событие специально для этого" - а можно с этого места поподробнее?
8 Mort
 
12.10.17
16:05
ОбработкаМенеджер.<Имя обработки>.ОбработкаПолученияФормы (DataProcessorManager.<Имя обработки>.FormGetProcessing)
ОбработкаМенеджер.<Имя обработки> (DataProcessorManager.<Имя обработки>)
ОбработкаПолученияФормы (FormGetProcessing)
Синтаксис:

ОбработкаПолученияФормы(<ВидФормы>, <Параметры>, <ВыбраннаяФорма>, <ДополнительнаяИнформация>, <СтандартнаяОбработка>)
Параметры:

<ВидФормы>

Тип: Строка.
Имя стандартной формы.
<Параметры>

Тип: Структура.
Параметры формы.
<ВыбраннаяФорма>

Содержит имя открываемой формы или объект метаданных Форма.
Если значение параметра изменено, то будет осуществлен поиск формы в пределах объекта, для которого открывается форма.
<ДополнительнаяИнформация>

Тип: Структура.
Дополнительная информация открытия формы.
Структура, содержащая поле ПовторноеИспользование (Reuse) типа Булево, которое указывает, кешируется ли форма на стороне клиента.
<СтандартнаяОбработка>

Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет (выбираются установленные разработчиком форма и параметры).
Значение по умолчанию: Истина.
Описание:

Обработчик события вызывается на сервере при получении стандартной управляемой формы.
Если требуется переопределить выбор открываемой формы, необходимо установить в параметре <ВыбраннаяФорма> другое имя формы или объект метаданных формы, которую требуется открыть, и в параметре <СтандартнаяОбработка> установить значение Ложь.
Замечание:

Безопасный режим на время исполнения данного обработчика будет отключен. Данное замечание не относится к обработчикам событий, расположенным в расширении конфигурации.
9 Юрий Лазаренко
 
12.10.17
16:09
(2) В интерфейсе у тебя должна быть кнопка или ссылка для открытия формы. Сейчас она скорее всего прицеплена к стандартному обработчику открытия формы, поэтому открывается форма обработки по умолчанию. Замены эту кнопку/ссылку на кнопку команды. В модуле команды определяй, какая форма нужна, и открывай сразу ее.

Или если все-таки через гланды хочется, то открывай из формы обработки по умолчанию, но не в процедуре ПриОткрытии. В процедуре ПриОткрытии запускай однократно обработчик ожидания с периодом 0.1 сек., открывай в нем нужную форму, а основную форму закрывай.
10 mr_K
 
12.10.17
16:18
(8) Тут такое дело..С этой обработкой работатют как в управляемом так и в обысном приложении. В котором ОбработкаПолученияФормы - не отрабатывает.
Ок. Для обычного оставляю текущий код, для управляемого в менеджере пропишу.
Но мне так и не понятно, почему метод в (0) не работает.
(9) В веб-клиенте - переход происходит вообще из вне по ссылке. в обычном приложении - через меню.
11 mr_K
 
12.10.17
16:27
(9) Метод через гланды в веб-клиенте ошибок не выдает, форму не открывает)
12 Юрий Лазаренко
 
12.10.17
17:26
(10) >> переход происходит вообще из вне по ссылке. в обычном приложении - через меню
Ну вот надо в меню разместить кнопку команды, и в модуле команды выбирать и открывать нужную форму.
13 breezee
 
12.10.17
18:37
Попробуйте использовать "ПриСозданииНаСервере"
14 mr_K
 
13.10.17
08:58
(12) В обычном приложении, где переход из меню происходит - проблем нет. Проблемы в веб-клиенте, куда переход осуществляется по http ссылке. В ней указать форму я не знаю как. Если есть такая возможность, буду благодарен за подсказку.
15 mr_K
 
13.10.17
09:00
(13) Таже ерунда, что описал в (10). В обычном клиенте нет такой процедуры. Тут цель была написать универсальный код, отрабатывающий в любых ситуациях. С точки зрения документации 1С и СП он и был написан. Но почему-то не работает.
16 mr_K
 
17.10.17
15:50
немного апну:
Самое смешное, что ОбработкаПолученияФормы в вебклиенте не отрабатывает.
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ДоступПользователя = ПроверитьПользователяНаДоступ();
    Если ДоступПользователя = "Количество" Тогда
        ВыбраннаяФорма = "УправляемаяФормаКоличество";
    ......


в тонком клиенте - ок. в вебклиенте - фигу.
Повторю вопрос: как в вебклиенте переопределить открываемую форму обработки. Переход к обработке происходит по внешней ссылки.