Как открыть форму существующего объекта?
При открытии формы существующего объекта необходимо кроме имени формы указать также и на тот объект, форма которого должна быть открыта. Для этого используется параметр формы Ключ и ссылка на интересующий нас объект.
Например, если из формы списка организаций нужно открыть форму той организации, на которой находится курсор, сделать это можно следующим способом:
СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока; ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника); ОткрытьФорму("Справочник.Организации.ФормаОбъекта", ПараметрыФормы);
Ссылку на интересующий элемент справочника мы получаем через текущую строку списка:
СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока;
Параметры формы передаем в виде структуры, где имя элемента структуры соответствует имени параметра формы, а значение — это то значение, в которое мы хотим установить параметр формы.
Если требуется открыть не основную, а произвольную форму объекта, созданную в конфигураторе, вместо стандартного имени основной формы ( ФормаОбъекта ) указывается слово Форма и через точку за ним — имя формы, созданной в конфигураторе.
СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока; ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника); ОткрытьФорму("Справочник.Организации.Форма.УниверсальнаяФормаОбъекта", ПараметрыФормы);
Следует заметить, что в том случае, когда кроме ссылки на объект никакие параметры в открываемую форму передавать не нужно и нужна именно основная форма существующего объекта, можно использовать более простой способ – открывать форму с помощью процедуры ОткрытьЗначение() :
ОткрытьЗначение(Элементы.Список.ТекущаяСтрока);
Такой способ обладает меньшей универсальностью, но в некоторых случаях он экономит время и силы. Например, в рассмотренном случае одна такая строка может заменить всю написанную нами ранее процедуру из трех строк.
Однако нужно внимательно относиться к использованию этой процедуры. В некоторых случаях она может вызывать дополнительные обращения к серверу, например, когда нужно открыть форму элемента иерархического справочника. При использовании этой процедуры платформа будет выполнять дополнительное обращение к серверу для того, чтобы определить, является ли элемент группой или нет, так как для элемента и для группы нужно открывать разные формы.
В то же время эта информация может быть заранее известна разработчику внутри его алгоритма, и, используя функцию ОткрытьФорму() , разработчик может открывать нужную форму без дополнительных обращений к серверу, сразу же указывая стандартное имя основной формы.
Как создать документ и открыть его форму?
Для этих целей существует два возможных сценария работы:
- открыть форму нового документа и предоставить пользователю самому интерактивно заполнить документ и записать данные объекта в базу данных.
- создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю.
В первом сценарии проще всего использовать функцию ОткрытьФорму(). Это можно сделать на клиенте.
ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");
При этом создается новый документ и открывается для редактирования основная форма этого документа.
Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения, либо в обработчике события документа Обработка заполнения. Подробнее об этом событии можно посмотреть в вопросе Как при открытии формы определить, что создается новый элемент?
Во втором случае можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события Обработка заполнения, записать, и передать ссылку на новый документ в процедуру ОткрытьЗначение(), которая откроет форму этого документа. Например:
&НаКлиенте Процедура ПриходнаяНакладная(Команда)
СсылкаНаДокумент = СоздатьНовыйДокумент(); ОткрытьЗначение(СсылкаНаДокумент);
&НаСервере Функция СоздатьНовыйДокумент()
НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент(); НовыйДокумент.Номер = "111"; НовыйДокумент.Дата = ТекущаяДата(); НовыйДокумент.Записать();
Возврат НовыйДокумент.Ссылка;
Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст — Процедуры и функции для интерактивной работы:
Как открыть форму существующего объекта?
При открытии формы существующего объекта необходимо кроме имени формы указать также и на тот объект, форма которого должна быть открыта. Для этого используется параметр формы Ключ и ссылка на интересующий нас объект.
Например, если из формы списка организаций нужно открыть форму той организации, на которой находится курсор, сделать это можно следующим способом:
СсылкаНаЭлементСправочника Ссылку на интересующий элемент справочника мы получаем через текущую строку списка:
СсылкаНаЭлементСправочника = Элементы . Список . ТекущаяСтрока ;
Параметры формы передаем в виде структуры, где имя элемента структуры соответствует имени параметра формы, а значение — это то значение, в которое мы хотим установить параметр формы.
Если требуется открыть не основную, а произвольную форму объекта, созданную в конфигураторе, вместо стандартного имени основной формы ( ФормаОбъекта ) указывается слово Форма и через точку за ним — имя формы, созданной в конфигураторе. Например:
СсылкаНаЭлементСправочника Следует заметить, что в том случае, когда кроме ссылки на объект никакие параметры в открываемую форму передавать не нужно и нужна именно основная форма существующего объекта, можно использовать более простой способ – открывать форму с помощью функции глобального контекста ОткрытьЗначение() :
ОткрытьЗначение Такой способ обладает меньшей универсальностью, но в некоторых случаях он экономит время и силы. Например, в рассмотренном случае одна такая строка может заменить всю написанную нами ранее процедуру из трех строк.
Однако нужно внимательно относиться к использованию этого метода. В некоторых случаях он может вызывать дополнительные обращения к серверу, например, когда нужно открыть форму элемента иерархического справочника. При использовании этого метода платформа будет выполнять дополнительное обращение к серверу для того, чтобы определить, является ли элемент группой или нет, так как для элемента и для группы нужно открывать разные формы.
В то же время эта информация может быть заранее известна разработчику внутри его алгоритма, и, используя метод ОткрытьФорму() , разработчик может открывать нужную форму без дополнительных обращений к серверу, сразу же указывая стандартное имя основной формы.