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