1с открытьформу не работает

Открытие форм

Область применения: управляемое приложение, мобильное приложение.

1. Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий — также ОткрытьФормуМодально ). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму , не рекомендуется.

Рекомендация обусловлена соображениями

  • повышения устойчивости кода, работающего с формой, за счет разделения программного интерфейса для работы с формой и деталей ее внутренней реализации,
  • а также сохранения единой стилистики кода прикладных решений.

Кроме того, применение глобального метода ОткрытьФорму гарантирует выполнение инициализации формы на сервере в обработчике ПриСозданииНаСервере . Этот подход помогает сосредоточить весь код инициализации формы в одном месте и исключает «случайное» обращение к серверу, связанное с инициализацией формы, между строками кода

2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.

Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).

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

ФормаПутеводитель = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»);
ФормаПутеводитель.Элементы.ГруппаШаг.ТекущаяСтраница = ФормаПутеводитель.Элементы.ГруппаШаг.Страницы.Приветствие;

следует по той же причине использовать параметры формы:

ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));

4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы

ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …

следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:

Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.

&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт

Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;

Если БольшеНеПоказыватьНапоминание Тогда
// …

При этом возвращаемое значение формы формируется в коде модуля формы с помощью метода формы Закрыть .

5. Другие ограничения:

  • Обработчик события формы ПриОткрытии не должен содержать код по открытию какой-либо другой формы, так как это может привести к нарушению порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы интерактивно, например, по нажатию на кнопку.
  • Не рекомендуется выполнять программное открытие и закрытие формы в одном обработчике. Такие действия должны быть разнесены по времени. Например, закрытие формы можно выполнять в обработчике ожидания.
  • При использовании в конфигурации Библиотека стандартных подсистем и разработке форм (рабочих мест), предназначенных только для внешних пользователей, следует явно блокировать открытие таких форм в сеансах «обычных» пользователей. Для этого следует устанавливать параметр Отказ при создании формы на сервере с помощью функции ЭтоСеансВнешнегоПользователя общего модуля Пользователи или ПользователиКлиент :

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры

6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:

Источник

1С. Тематические записки. им xzorkiix

Поиск по этому блогу

ОткрытьФорму и «ничего не происходит»

Вводная

перешли с 8.3.11 на 8.3.12 после отключения совместимости фрагмент кода ниже перестал открывать требуемую форму из другой (справедливо для клиент-серверного варианта проверить файловый вариант ИБ не было возможности)

Теперь немного больше деталей.

Для справочника ДоговорыКонтрагентов реализовано переопределение формы в обработчике получения формы

Решение

Включение в параметры Уникальность = Истина. Возвращает нас к исходному поведению (требуемая форма открывается).

Дальше теории конспирологов (когда сколько бы ты не знал, это только догадки).

Что у нас произошло:

По умолчанию Уникальность = Ложь, те форма не уникальная и сначала попытаться найти среди открытых.

1. мы создали интерактивно новый элемент
2. платформа открывает для него форму по-умолчанию ( Справочник.ДоговорыКонтрагентов.ФормаОбъекта, Владелец)
3. мы переопределяем форму в обработчике получения формы
4 . платформа кеширует ФормаОбъекта+Владелец = форма из п.3 (точнее любая форма какую вернет сервер)
5. Мы программно открывает форму ФормаОбъекта+тот же Владелец — платформа нашла по этим ключам форму из п.2 (тот же набор ключей). Так как форма уже открыта, мы интерактивно не ощущаем каких либо изменений и считаем что открытие формы «не работает».

Ещё немного

Фрагмент справки 8.3.11.2954 идентичен фрагменту справки 8.3.12.1529, 8.3.12.1616

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

Для варианта «По названию» параметры вызова аналогичны параметрам метода ПолучитьФорму.
Обычные формы внешних обработок не поддерживаются.
В управляемом приложении не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка.
Если при открытии обычной формы в параметре указано не стандартное имя формы, передаваемые параметры не обрабатываются.
В процессе выполнения может быть несколько обращений к серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть всегда и оно не кэшируется. Кэширование зависит от версии платформы и версии конфигурации в целом. Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора. Очистка кэша осуществляется с периодичностью в 20 мин. Удаляются формы, которые не использовались в этот период времени

Из описания ОткрытьФорму() трудно сделать выводы об явном изменении в поведении платформы, скорее всего было исправлено\оптимизировано ранее существовавшее допущение. Скорее всего изменилась обработка Уникального пользовательского ключа и поиска формы по нему, в 8.3.11 пустое значение — не сопоставляется при поиске среди открытых форм, то в 8.3.12 — пустое значение, тоже значение. Напомню в режиме «совместимости с 8.3.11» в 8.3.12 — форма открывается и с Уникальность = Ложь (значение по умолчанию, если верить документации оно — Ложь).

Так же о многом говорит — ничего не говоря конкретно — расплывчатая формулировка » Кэширование зависит от версии платформы и версии конфигурации в целом.»

Источник

Не срабатывает ОткрытьФорму().

В глобальном в процедуре ПриНачалеРаботыСистемы() пишу вот так:

Код
Показать полностью

В отладчике ОткрытьФормуМодально(«Обработка.ПервыйЗапуск», 1) = 0.
Форма не открывается, обработка не выполняется. Даже если просто написать безо всяких проверок

Код
Показать полностью

все равно не открывается и не отрабатывает.
В стандартной конфе почему-то работает. Код содрал оттуда, все равно результат = 0. Почему?
Да не, там все нормально:

Код
Показать полностью

Я ж говорю:
В отладчике ОткрытьФормуМодально(«Обработка.ПервыйЗапуск», 1) = 0.
Когда отладчик на первой строке процедуры ПриОткрытии() в обработке, до туда даже не доходит. Вопрос туда был вставлен просто так, для теста.

Создал пустую конфигурацию, в ГМ добавил

Код
Показать полностью

в обработку «первыйзапуск» твой код.

У меня все нормально, видимо у тебя что-то еще мешает, да и тоже:
ОткрытьФормуМодально(«Обработка.ПервыйЗапуск», 1) = 0

Вот глобальный:

Код
Показать полностью

А вот обработка:

Код
Показать полностью

И тишина.

Если СтатусВозврата() установлен в 0, открытия формы не произойдёт!

azernot Написал:
——————————————————-
> //*******************************************
> Процедура ПриОткрытии() //предопределенная
> СтатусВозврата(0);
>
>
> Если СтатусВозврата() установлен в 0, открытия
> формы не произойдёт!
>
>
> С уважением,
> Зернятко А.В.

Да, но предупреждение должн сработать

Источник

веб-клиент. ОткрытьФорму() в ПриОткрытии

Есть обработка. В ней основной назначена некая сервисная форма, у которой в ПриОткрытии проверяется какую форму открыть и выполняется открытие.
Код простой (это в сервисной форме):
&НаКлиенте
Процедура ПриОткрытии(Отказ)

ДоступПользователя = ПроверитьПользователяНаДоступ();
Если ДоступПользователя = «Количество» Тогда
ОткрытьФорму(«Обработка.ОценкаКачества.Форма.УправляемаяФормаКоличество»);
.

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

В СП про ОткрытьФорму прочитал все много раз. Нигде про модальность нет. В конфигурации даже включил режим использования модальности. Не помогает.
Есть идеи, как побороть?

(2) Через глубочайшие гланды здесь конкретно вот это:

Рады были помочь, приходите еще.

(0) Да и про СП ты нап. обманул:

(2) Открывать левую форму чтобы открыть другую это и есть через гланды, когда существует событие специально для этого. Экономия серверных вызовов хотя бы.

А по поводу ошибки — ищи отладчиком модальный вызов. Может быть он и тут «ПроверитьПользователяНаДоступ();» сидит.

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

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

Безопасный режим на время исполнения данного обработчика будет отключен. Данное замечание не относится к обработчикам событий, расположенным в расширении конфигурации.

(2) В интерфейсе у тебя должна быть кнопка или ссылка для открытия формы. Сейчас она скорее всего прицеплена к стандартному обработчику открытия формы, поэтому открывается форма обработки по умолчанию. Замены эту кнопку/ссылку на кнопку команды. В модуле команды определяй, какая форма нужна, и открывай сразу ее.

Или если все-таки через гланды хочется, то открывай из формы обработки по умолчанию, но не в процедуре ПриОткрытии. В процедуре ПриОткрытии запускай однократно обработчик ожидания с периодом 0.1 сек., открывай в нем нужную форму, а основную форму закрывай.

немного апну:
Самое смешное, что ОбработкаПолученияФормы в вебклиенте не отрабатывает.

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

Источник

1С. Тематические записки. им xzorkiix

Поиск по этому блогу

ОткрытьФорму и «ничего не происходит»

Вводная

перешли с 8.3.11 на 8.3.12 после отключения совместимости фрагмент кода ниже перестал открывать требуемую форму из другой (справедливо для клиент-серверного варианта проверить файловый вариант ИБ не было возможности)

Теперь немного больше деталей.

Для справочника ДоговорыКонтрагентов реализовано переопределение формы в обработчике получения формы

Решение

Включение в параметры Уникальность = Истина. Возвращает нас к исходному поведению (требуемая форма открывается).

Дальше теории конспирологов (когда сколько бы ты не знал, это только догадки).

Что у нас произошло:

По умолчанию Уникальность = Ложь, те форма не уникальная и сначала попытаться найти среди открытых.

1. мы создали интерактивно новый элемент
2. платформа открывает для него форму по-умолчанию ( Справочник.ДоговорыКонтрагентов.ФормаОбъекта, Владелец)
3. мы переопределяем форму в обработчике получения формы
4 . платформа кеширует ФормаОбъекта+Владелец = форма из п.3 (точнее любая форма какую вернет сервер)
5. Мы программно открывает форму ФормаОбъекта+тот же Владелец — платформа нашла по этим ключам форму из п.2 (тот же набор ключей). Так как форма уже открыта, мы интерактивно не ощущаем каких либо изменений и считаем что открытие формы «не работает».

Ещё немного

Фрагмент справки 8.3.11.2954 идентичен фрагменту справки 8.3.12.1529, 8.3.12.1616

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

Для варианта «По названию» параметры вызова аналогичны параметрам метода ПолучитьФорму.
Обычные формы внешних обработок не поддерживаются.
В управляемом приложении не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка.
Если при открытии обычной формы в параметре указано не стандартное имя формы, передаваемые параметры не обрабатываются.
В процессе выполнения может быть несколько обращений к серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть всегда и оно не кэшируется. Кэширование зависит от версии платформы и версии конфигурации в целом. Если установлена низкая скорость соединения и не указывается текущая строка, то кэшируется форма выбора. Очистка кэша осуществляется с периодичностью в 20 мин. Удаляются формы, которые не использовались в этот период времени

Из описания ОткрытьФорму() трудно сделать выводы об явном изменении в поведении платформы, скорее всего было исправлено\оптимизировано ранее существовавшее допущение. Скорее всего изменилась обработка Уникального пользовательского ключа и поиска формы по нему, в 8.3.11 пустое значение — не сопоставляется при поиске среди открытых форм, то в 8.3.12 — пустое значение, тоже значение. Напомню в режиме «совместимости с 8.3.11» в 8.3.12 — форма открывается и с Уникальность = Ложь (значение по умолчанию, если верить документации оно — Ложь).

Так же о многом говорит — ничего не говоря конкретно — расплывчатая формулировка » Кэширование зависит от версии платформы и версии конфигурации в целом.»

Источник

Читайте также:  Как настроить дистанционный запуск двигателя рено каптур
Оцените статью