В данном решении мы будем получать ссылку на текущий элемент, отображаемый в списке, затем «пойдем» с ней на сервер, чтобы из информационной базы узнать, является элемент группой или нет. В зависимости от этого, вернувшись на клиент, будем открывать либо форму элемента, либо форму группы.
Чтобы программно открывать форму элемента, создадим форму списка справочника Товары и ее команду ОткрытьТовар. Перетащим команду в командную панель формы. Обработчик команды ОткрытьТовар заполним следующим образом (листинг 4.27).
Листинг 4.27. Обработчик команды «Открыть товар»
&НаКлиенте
Процедура ОткрытьТовар(Команда)
СсылкаНаЭлементСправочника = Элементы.Список.ТекущаяСтрока;
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлементСправочника);
Если ЕслиЭтоГруппа(СсылкаНаЭлементСправочника) Тогда
ОткрытьФорму("Справочник.Товары.ФормаГруппы", ПараметрыФормы);
Иначе
ОткрытьФорму("Справочник.Товары.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
В этом обработчике, используя свойство ТекущаяСтрока таблицы формы Список, отражающей данные динамического списка, мы получаем ссылку на текущий элемент справочника. Значение ссылки мы присваиваем параметру формы Ключ. И в зависимости от того, является ли данный элемент группой, открываем форму группы или форму элемента справочника с этим параметром.
Для определения того, является ли элемент справочника группой по переданной ссылке, поместим в модуле формы функцию, исполняющуюся на сервере без контекста формы (листинг 4.28).
Листинг 4.28. Функция «ЕслиЭтоГруппа»
&НаСервереБезКонтекста
Функция ЕслиЭтоГруппа(Ссылка)
Возврат Ссылка.ЭтоГруппа;
КонецФункции
ПРИМЕЧАНИЕ
Этот пример можно посмотреть в демонстрационной конфигурации «07 (вар. 1) Использование стандартных полей запроса в динамических списках на клиенте».
Запустим «1С:Предприятие», выделим группу в форме списка товаров и нажмем кнопку Открыть товар. В результате будет открыта форма группы справочника товаров. Затем выделим элемент справочника и нажмем кнопку Открыть товар. В результате будет открыта форма элемента справочника товаров.
Однако в обоих случаях при открытии формы будут сделаны два обращения на сервер (рис. 4.47).

Рис. 4.47. Показатели производительности
ПРИМЕЧАНИЕ
Заметим, что при первом открытии формы могут быть лишние серверные вызовы за счет кеширования платформой необходимой информации о форме. Но мы будем изучать стандартную ситуацию, когда при открытии формы происходит один вызов сервера.
Для наглядности рассмотрим схему программного взаимодействия клиента и сервера (рис. 4.48).

Рис. 4.48. Схема программного взаимодействия сервера и клиента
Второй вызов происходит при открытии формы элемента или группы справочника, и его делает сама платформа.
А вот первого вызова, который происходит при определении, является ли текущий элемент группой, могло бы и не быть. Ниже мы покажем, как этого избежать.