Имеется иерархическая структура организации с подразделениями. Имеем форму и дерево на ней, которое эту структуру представляет. Имеется конкретное Подразделение, переданное в форму в качестве параметра. Требуется спозиционировать дерево на это Подразделение.
1С 8.3. Конфигурация ЗУП 2.5 КОРП. Тонкий клиент, управляемая форма.
Найти нужную строку в представлении дерева на сервере - не проблема.

```1c
    &НаСервере
    тДерево = РеквизитФормыВЗначение("Дерево");
    ПозицияПодразделения=НайтиПодразделениеВДереве(ПодразделениеОрганизации,тДерево.Строки);
```
 и вуаля, строка найдено, но!... получить её идентификатор не представляется возможным в силу отсутствия у СтрокаДереваЗначений соответствующего метода. А без него не получить идентификатор строки и не передать его на клиент, чтобы спозиционировать моё многострадальное дерево.
"Доктор, что я делаю не так?" (с) анек
Как спозиционировать дерево на нужный мне элемент?

Если что, НайтиПодразделениеВДереве - это самописная ркурсивная функция, которая существует на просторах разных форумов и прекрасно ищет то, что надо.
Текст функции
```1c
    Функция НайтиПодразделениеВДереве(ПодразделениеП,СтрокиДерева)
    Для каждого Стр из СтрокиДерева Цикл
    Если Стр.Подразделение=ПодразделениеП Тогда // нашлось подразделение
    Возврат Стр;
    КонецЕсли;
    КонецЦикла;

    // на данном уровне нужного подразделения нет, ищем на нижних
    Для каждого Стр из СтрокиДерева Цикл
    НайденнаяСтрока=НайтиПодразделениеВДереве(ПодразделениеП,Стр.Строки);
    Если НайденнаяСтрока<>Неопределено Тогда
    Возврат НайденнаяСтрока;
    КонецЕсли;
    КонецЦикла;

    // не повезло, такого подразделения вообще нет
    Возврат Неопределено;
    КонецФункции
```
---
С НайтиСтроки() для "ДеревоЗначений.Строки" - это замечательно, но результат таки не тот, хотя я это запомню на будущее. Спасибо.
За "адаптацию" двойное спасибо. Решение найдено.

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ПозицияПодразделения=Неопределено;
    ПриОткрытииНаСервере(ПозицияПодразделения);
    Если ПозицияПодразделения<>Неопределено Тогда
    Элементы.Дерево.ТекущаяСтрока=ПозицияПодразделения;
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Процедура ПриОткрытииНаСервере(ПозицияПодразделения)
    тДерево = РеквизитФормыВЗначение("Дерево");
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    | ПодразделенияОрганизаций.Код КАК Код,
    | ПодразделенияОрганизаций.Наименование КАК Наименование,
    | ПодразделенияОрганизаций.Ссылка КАК Подразделение
    |ИЗ
    | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
    |ГДЕ
    | ПодразделенияОрганизаций.Владелец = &Организация
    |
    |УПОРЯДОЧИТЬ ПО
    | ПодразделенияОрганизаций.Ссылка ИЕРАРХИЯ"
    ;
    Запрос.УстановитьПараметр("Организация",Организация);
    тДерево=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    ЗначениеВРеквизитФормы(тДерево,"Дерево");

    ПозицияПодразделения=НайтиПодразделениеВДереве(ПодразделениеОрганизации,Дерево.ПолучитьЭлементы());

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

    &НаСервере
    Функция НайтиПодразделениеВДереве(ПодразделениеП,СтрокиДерева)
    Для каждого Стр из СтрокиДерева Цикл
    Если Стр.Подразделение=ПодразделениеП Тогда // нашлось подразделение
    Возврат Стр.ПолучитьИдентификатор();
    КонецЕсли;
    КонецЦикла;

    // на данном уровне нужного подразделения нет, ищем на нижних
    Для каждого Стр из СтрокиДерева Цикл
    НайденнаяСтрока=НайтиПодразделениеВДереве(ПодразделениеП,Стр.ПолучитьЭлементы());
    Если НайденнаяСтрока<>Неопределено Тогда
    Возврат НайденнаяСтрока.ПолучитьИдентификатор();
    КонецЕсли;
    КонецЦикла;

    // не повезло, такого подразделения вообще нет
    Возврат Неопределено;
    КонецФункции
```
---
Для значения типа "ДеревоЗначений" еще прекраснее работает метод НайтиСтроки(). А ваша процедура поиска легко адаптируется к типу "ДанныеФормыДерево", и вернет идентификатор строки, по которому вполне можно позиционироваться
---
С НайтиСтроки() для "ДеревоЗначений.Строки" - это замечательно, но результат таки не тот, хотя я это запомню на будущее. Спасибо.
За "адаптацию" двойное спасибо. Решение найдено.

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    ПозицияПодразделения=Неопределено;
    ПриОткрытииНаСервере(ПозицияПодразделения);
    Если ПозицияПодразделения<>Неопределено Тогда
    Элементы.Дерево.ТекущаяСтрока=ПозицияПодразделения;
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Процедура ПриОткрытииНаСервере(ПозицияПодразделения)
    тДерево = РеквизитФормыВЗначение("Дерево");
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
    | ПодразделенияОрганизаций.Код КАК Код,
    | ПодразделенияОрганизаций.Наименование КАК Наименование,
    | ПодразделенияОрганизаций.Ссылка КАК Подразделение
    |ИЗ
    | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
    |ГДЕ
    | ПодразделенияОрганизаций.Владелец = &Организация
    |
    |УПОРЯДОЧИТЬ ПО
    | ПодразделенияОрганизаций.Ссылка ИЕРАРХИЯ"
    ;
    Запрос.УстановитьПараметр("Организация",Организация);
    тДерево=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    ЗначениеВРеквизитФормы(тДерево,"Дерево");

    ПозицияПодразделения=НайтиПодразделениеВДереве(ПодразделениеОрганизации,Дерево.ПолучитьЭлементы());

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

    &НаСервере
    Функция НайтиПодразделениеВДереве(ПодразделениеП,СтрокиДерева)
    Для каждого Стр из СтрокиДерева Цикл
    Если Стр.Подразделение=ПодразделениеП Тогда // нашлось подразделение
    Возврат Стр.ПолучитьИдентификатор();
    КонецЕсли;
    КонецЦикла;

    // на данном уровне нужного подразделения нет, ищем на нижних
    Для каждого Стр из СтрокиДерева Цикл
    НайденнаяСтрока=НайтиПодразделениеВДереве(ПодразделениеП,Стр.ПолучитьЭлементы());
    Если НайденнаяСтрока<>Неопределено Тогда
    Возврат НайденнаяСтрока.ПолучитьИдентификатор();
    КонецЕсли;
    КонецЦикла;

    // не повезло, такого подразделения вообще нет
    Возврат Неопределено;
    КонецФункции
```