1с порядок выполнения процедур при открытии формы

1С 8.3 : Последовательность событий при открытии формы нового элемента

Последовательность событий, которые происходят при открытии формы нового элемента, можно представить следующей схемой:

62a33ba8847ffefb56dded0ab59029d7

Прежде всего, при заполнении нового объекта данными, можно попробовать обойтись вообще без написания какого-либо кода. Для этого у реквизитов объектов конфигурации есть свойства ЗначениеЗаполнения и ЗаполнятьИзДанныхЗаполнения.

f60c2cedc003aa9b513d4c09bb9d279b

Эти свойства позволяют визуально (в конфигураторе) задать правила, по которым реквизит будет заполняться данными при создании нового объекта.

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

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

При этом параметр Основание, передаваемый в этот обработчик, может иметь различные значения в зависимости от того, каким образом создается новый элемент.

Например, он может иметь тип ссылки, если новый объект вводится на основании.

Или он может иметь тип Структура, если новый объект создается интерактивной командой из списка, в котором установлен отбор. В этом случае структура будет содержать значения элементов отбора этого списка.

Также этот параметр может иметь тип Неопределено, если новый элемент создается интерактивной командой из панели действий. То есть в своем алгоритме начального заполнения полезно анализировать этот параметр.

Что касается внешнего вида формы нового объекта, то им нужно управлять в обработчике события формы ПриСозданииНаСервере.

Это событие возникает и для новых, и для существующих объектов. Поэтому в нем нужно убедиться в том, что открывается форма именно нового объекта. Убедиться в этом можно проанализировав параметр формы Ключ.

Если объект новый, в этом параметре будет пустая ссылка. Если это существующий объект – в этом параметре будет ссылка на этот объект:

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

Для тех кто не хочет читать все что выше, код проверки на ЭтоНовый в Управляемом приложении:

Источник

АйТиБложик

Маленький IT блог с характером 1С.

Последовательность вызова обработчиков событий при открытии формы объекта

При открытии формы объекта, задействованы не только обработчики событий формы, но и модуль менеджера и модуль объекта. Перед рассмотрением последовательности вызова событий, хочу заметить, что количество обработчиков событий для модуля объекта и модуля формы равно не количеству отображаемых процедур в подсказке (см. рисунок 1), а на единицу больше.

1
Рисунок 1. Обработчики событий модуля объекта Документ

У этих модулей дополнительно имеется обработчик, связанный с активацией модуля, т.е. тело модуля это и есть обработчик активации модуля, который не отображается в подсказке.

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

%25D0%259E%25D0%25B1%25D1%2580%25D0%25A1%25D0%25BE%25D0%25B1
Рисунок 2. Последовательность вызова обработчиков событий при открытии формы

1. Срабатывает обработчик события ОбработкаПолученияФормы() в модуле менеджера. Обработчик предназначен для переопределения открываемой формы, поэтому выполняется самым первым.

2. Срабатывает обработчик активации модуля формы на сервере, т.е. код, написанный в модуле формы, выполняется на стороне сервера.

3. Срабатывает обработчик активации модуля объекта, т.е. выполняется код, написанный в модуле объекта.

4. Если открывается форма для существующего объекта, то срабатывает обработчик ПриЧтенииНаСервере(). Обработчик вызывается при чтении объекта на сервере. Если создается новый объект, то обработчик игнорируется.

5. Срабатывает обработчик ПриСозданииНаСервере(), вызывается при создании формы на сервере.

6. Срабатывает обработчик активации модуля формы на клиенте, т.е. код, написанный в модуле формы, выполняется на стороне клиента.

7. Срабатывает обработчик ПриОткрытии(), вызывается при открытии формы на клиенте, до показа окна пользователю.

Заметьте, активация модуля формы выполняется два раза, первый раз на стороне сервера, второй раз на стороне клиента

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

Источник

Выполнение процедуры после открытия формы

Пытаюсь подчинить одну компоненту, пока не сдается.

Есть процедура(в ней вызывается функция) назначена на кнопку, после запуска обработки и открытия формы нажимаю кнопку, все ок, все работает.

Вешаю код ПриОткрытии, фиг не дает запустить, говорит «Значение не является значением объектного типа».

Вопрос такой: Можно ли в 8-ке оформить процедуру которая бы запускалась после открытия формы?

(2) PhoenixAOD, Там долго рассказывать про саму компоненту! Если в двух словах она работает с веб камерой.
Я хочу чтобы при запуске он автоматом находил камеру и включал ее, чтобы не нажимать кнопку.

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

Это ругается на код в функции:
Значение не является значением объектного типа (Выгрузить)
Если CamList.Выгрузить().Количество() > 0 Тогда

Эту функцию вызывает процедура:

Это ругается на код в функции:
Значение не является значением объектного типа (Выгрузить)
Если CamList.Выгрузить().Количество() > 0 Тогда

Эту функцию вызывает процедура:
Код
CamList = ЭлементыФормы.ЭлементУправления1.CamList;
СписокКамер = СформироватьСписокКамер(CamList);

Возможно, ошибка из-за того, что ПриОткрытии выполняется до показа формы пользователю.
Как вариант:

Процедура ПриОткрытии()
ОбновлениеОтображения()
КонецПроцедуры

Вот так попробуй,и значие ИСтина поставь качо

в таком случае процедура отработает после открытия формы

ЗЫ задержку 3 сек поставил на вскидку.. думаю можно меньше

Источник

1С 8.2 УП : Последовательность событий при открытии формы нового элемента

Последовательность событий, которые происходят при открытии формы нового элемента, можно представить следующей схемой:

62a33ba8847ffefb56dded0ab59029d7

Прежде всего, при заполнении нового объекта данными, можно попробовать обойтись вообще без написания какого-либо кода. Для этого у реквизитов объектов конфигурации есть свойства ЗначениеЗаполнения и ЗаполнятьИзДанныхЗаполнения.

f60c2cedc003aa9b513d4c09bb9d279b

Эти свойства позволяют визуально (в конфигураторе) задать правила, по которым реквизит будет заполняться данными при создании нового объекта.

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

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

При этом параметр Основание, передаваемый в этот обработчик, может иметь различные значения в зависимости от того, каким образом создается новый элемент.

Например, он может иметь тип ссылки, если новый объект вводится на основании.

Или он может иметь тип Структура, если новый объект создается интерактивной командой из списка, в котором установлен отбор. В этом случае структура будет содержать значения элементов отбора этого списка.

Также этот параметр может иметь тип Неопределено, если новый элемент создается интерактивной командой из панели действий. То есть в своем алгоритме начального заполнения полезно анализировать этот параметр.

Что касается внешнего вида формы нового объекта, то им нужно управлять в обработчике события формы ПриСозданииНаСервере.

Это событие возникает и для новых, и для существующих объектов. Поэтому в нем нужно убедиться в том, что открывается форма именно нового объекта. Убедиться в этом можно проанализировав параметр формы Ключ.

Если объект новый, в этом параметре будет пустая ссылка. Если это существующий объект – в этом параметре будет ссылка на этот объект:

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

Для тех кто не хочет читать все что выше, код проверки на ЭтоНовый в Управляемом приложении:

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры

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

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с пользовательские настройки формы
  • 1с получитьформувыбора управляемые формы