Всем добрый день !!

Не типовая конфигурация, Управляемые приложения

Есть Документ "Создать долг", в нем Динамический список: "РегистрНакопления.ПрочиеДолгиОстатки"(Поля "ФизЛицо","Долг","КартинкаИстория").

Как реализовать чтоб при нажатии на Картинку истории в дереве данного Физ лица отражались движения по Регистру накопления (того же самого регистра)
---
все сработало

Получился такой код:

При выборе строки ФизЛица на динамическом списке заполняется Дерево, и в конце нужно было развернуть Ветки Дерева:

```1c
    &НаКлиенте
    Процедура СписокПрочиеДолгиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

    Если Поле.Имя = "СписокПрочиеДолгиФизЛицо" тогда

    нСтрока = Элементы.СписокПрочиеДолги.ТекущиеДанные;
    Объект.ФизЛицо = нСтрока.ФизЛицо;

    ИначеЕсли Поле.Имя = "СписокПрочиеДолгиКартинкаИстория" тогда

    ТекущиеДанные = Элементы.СписокПрочиеДолги.ТекущиеДанные;
    ЗаполнениеДерева(ТекущиеДанные.ФизЛицо, ТекущиеДанные);

    РазвернутьВеткуДерева();

    КонецЕсли

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

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

    Результат = Запрос.Выполнить();

    ТаблицаРезультат = Результат.Выгрузить();

    Возврат ТаблицаРезультат;

    КонецФункции //Получаем долг физЛица
```

```1c
    &НаСервере
    Процедура ЗаполнениеДерева(ФизЛицо, ТекущаяВыбраннаяСтрока)

    //Выводим Наименование ФизЛица из списка в дерево как корневой строки
    тДерево = РеквизитФормыВЗначение("ДеревоИсторияДвиженияДолга");

    //Очистим Дерево, в том примере который вы написали Корневая строка дублировался
    тДерево.Строки.Очистить();

    КорневаяСтрокаДерева = тДерево.Строки.Добавить();
    КорневаяСтрокаДерева.ФизЛицо = ТекущаяВыбраннаяСтрока.ФизЛицо;
    КорневаяСтрокаДерева.Сумма = ТекущаяВыбраннаяСтрока.СуммаОстаток;
    ЗначениеВРеквизитФормы(тДерево, "ДеревоИсторияДвиженияДолга");

    тДерево = РеквизитФормыВЗначение("ДеревоИсторияДвиженияДолга");

    СтрокиДерева = тДерево.Строки;
    СтрокаДереваРодитель = СтрокиДерева.Получить(0);

    //Нужно очистить предыдущие считанные значения, чтобы не дублировать строки
    СтрокаДереваРодитель.Строки.Очистить();

    // Получаем данные о долге ФизЛица.
    ТаблицаДолги = ПолучитьДолг(ФизЛицо);
    Для каждого Строка Из ТаблицаДолги Цикл
    СтрокаДерева = СтрокаДереваРодитель.Строки.Добавить();
    СтрокаДерева.Сумма = Строка.Сумма;
    СтрокаДерева.ФизЛицо = Строка.ДебиторКредитор;
    СтрокаДерева.Документ = Строка.Регистратор;
    СтрокаДерева.Пользователь = Строка.Пользователь;
    КонецЦикла;

    ЗначениеВРеквизитФормы(тДерево, "ДеревоИсторияДвиженияДолга");

    //Переход на таблицу Дерево
    ПереходНаСтраницу = ЭтаФорма.Элементы.СтраницыДолги.ПодчиненныеЭлементы.ДолгиИсторияДвижений;
    ЭтаФорма.Элементы.СтраницыДолги.ТекущаяСтраница = ПереходНаСтраницу;

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

```1c
    &НаКлиенте
    Процедура РазвернутьВеткуДерева()

    КоллекцияЭлементовДерева = ДеревоИсторияДвиженияДолга.ПолучитьЭлементы();

    Для Каждого Строка Из КоллекцияЭлементовДерева Цикл

    ИдентификаторСтроки=Строка.ПолучитьИдентификатор();

    Элементы.ДеревоИсторияДвиженияДолга.Развернуть(ИдентификаторСтроки);

    КонецЦикла;

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

большое вам спасибо за решение !

Остались немножко доработки, но думаю трудностей не будет)
Если не лень посмотрите код, может что то лишнее или что то нужно дописать, буду благодарен за критику и советы. Спасибо !
---
вот, посмотрите обработку.
---
вот, посмотрите обработку.
---
Обработка работает, но я не могу правильно указать параметр ФизЛицо (Он с типом строка и там нету ссылок может из-за этого сравнивание параметров не удается)
---
обработка - это небольшой "набросок" реализации вашей задачи исходя из моего понимания. Вам нужно доработать алгоритм под свою задачу.
---
Запрос работает правильно но сравнение не удается
---
если измерение регистра "ФизЛицо" имеет тип "Справочник.ФизЛица", тогда в параметрах запроса измените в колонке "Тип" значение со "Строка" на "Справочник.ФизЛица"
---
все сработало

Получился такой код:

При выборе строки ФизЛица на динамическом списке заполняется Дерево, и в конце нужно было развернуть Ветки Дерева:

```1c
    &НаКлиенте
    Процедура СписокПрочиеДолгиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

    Если Поле.Имя = "СписокПрочиеДолгиФизЛицо" тогда

    нСтрока = Элементы.СписокПрочиеДолги.ТекущиеДанные;
    Объект.ФизЛицо = нСтрока.ФизЛицо;

    ИначеЕсли Поле.Имя = "СписокПрочиеДолгиКартинкаИстория" тогда

    ТекущиеДанные = Элементы.СписокПрочиеДолги.ТекущиеДанные;
    ЗаполнениеДерева(ТекущиеДанные.ФизЛицо, ТекущиеДанные);

    РазвернутьВеткуДерева();

    КонецЕсли

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

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

    Результат = Запрос.Выполнить();

    ТаблицаРезультат = Результат.Выгрузить();

    Возврат ТаблицаРезультат;

    КонецФункции //Получаем долг физЛица
```

```1c
    &НаСервере
    Процедура ЗаполнениеДерева(ФизЛицо, ТекущаяВыбраннаяСтрока)

    //Выводим Наименование ФизЛица из списка в дерево как корневой строки
    тДерево = РеквизитФормыВЗначение("ДеревоИсторияДвиженияДолга");

    //Очистим Дерево, в том примере который вы написали Корневая строка дублировался
    тДерево.Строки.Очистить();

    КорневаяСтрокаДерева = тДерево.Строки.Добавить();
    КорневаяСтрокаДерева.ФизЛицо = ТекущаяВыбраннаяСтрока.ФизЛицо;
    КорневаяСтрокаДерева.Сумма = ТекущаяВыбраннаяСтрока.СуммаОстаток;
    ЗначениеВРеквизитФормы(тДерево, "ДеревоИсторияДвиженияДолга");

    тДерево = РеквизитФормыВЗначение("ДеревоИсторияДвиженияДолга");

    СтрокиДерева = тДерево.Строки;
    СтрокаДереваРодитель = СтрокиДерева.Получить(0);

    //Нужно очистить предыдущие считанные значения, чтобы не дублировать строки
    СтрокаДереваРодитель.Строки.Очистить();

    // Получаем данные о долге ФизЛица.
    ТаблицаДолги = ПолучитьДолг(ФизЛицо);
    Для каждого Строка Из ТаблицаДолги Цикл
    СтрокаДерева = СтрокаДереваРодитель.Строки.Добавить();
    СтрокаДерева.Сумма = Строка.Сумма;
    СтрокаДерева.ФизЛицо = Строка.ДебиторКредитор;
    СтрокаДерева.Документ = Строка.Регистратор;
    СтрокаДерева.Пользователь = Строка.Пользователь;
    КонецЦикла;

    ЗначениеВРеквизитФормы(тДерево, "ДеревоИсторияДвиженияДолга");

    //Переход на таблицу Дерево
    ПереходНаСтраницу = ЭтаФорма.Элементы.СтраницыДолги.ПодчиненныеЭлементы.ДолгиИсторияДвижений;
    ЭтаФорма.Элементы.СтраницыДолги.ТекущаяСтраница = ПереходНаСтраницу;

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

```1c
    &НаКлиенте
    Процедура РазвернутьВеткуДерева()

    КоллекцияЭлементовДерева = ДеревоИсторияДвиженияДолга.ПолучитьЭлементы();

    Для Каждого Строка Из КоллекцияЭлементовДерева Цикл

    ИдентификаторСтроки=Строка.ПолучитьИдентификатор();

    Элементы.ДеревоИсторияДвиженияДолга.Развернуть(ИдентификаторСтроки);

    КонецЦикла;

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

большое вам спасибо за решение !

Остались немножко доработки, но думаю трудностей не будет)
Если не лень посмотрите код, может что то лишнее или что то нужно дописать, буду благодарен за критику и советы. Спасибо !
---
при "беглом" взгляде на ваш код, есть лишние строки, имхо. Отметил и закомментировал их

```1c
    &НаСервере
    Процедура ЗаполнениеДерева(ФизЛицо, ТекущаяВыбраннаяСтрока)

    //Выводим Наименование ФизЛица из списка в дерево как корневой строки
    тДерево = РеквизитФормыВЗначение("ДеревоИсторияДвиженияДолга");

    //Очистим Дерево, в том примере который вы написали Корневая строка дублировался
    тДерево.Строки.Очистить();

    КорневаяСтрокаДерева = тДерево.Строки.Добавить();
    КорневаяСтрокаДерева.ФизЛицо = ТекущаяВыбраннаяСтрока.ФизЛицо;
    КорневаяСтрокаДерева.Сумма = ТекущаяВыбраннаяСтрока.СуммаОстаток;
    //ЗначениеВРеквизитФормы(тДерево, "ДеревоИсторияДвиженияДолга"); //исходя из следующих строк кода, обработка дерева не завершена.

    // тДерево = РеквизитФормыВЗначение("ДеревоИсторияДвиженияДолга"); //в начале метода уже определена такая переменная. можно не дублировать код.

    СтрокиДерева = тДерево.Строки;
    СтрокаДереваРодитель = СтрокиДерева.Получить(0);

    //Нужно очистить предыдущие считанные значения, чтобы не дублировать строки
    СтрокаДереваРодитель.Строки.Очистить();

    // Получаем данные о долге ФизЛица.
    ТаблицаДолги = ПолучитьДолг(ФизЛицо);
    Для каждого Строка Из ТаблицаДолги Цикл
    СтрокаДерева = СтрокаДереваРодитель.Строки.Добавить();
    СтрокаДерева.Сумма = Строка.Сумма;
    СтрокаДерева.ФизЛицо = Строка.ДебиторКредитор;
    СтрокаДерева.Документ = Строка.Регистратор;
    СтрокаДерева.Пользователь = Строка.Пользователь;
    КонецЦикла;

    ЗначениеВРеквизитФормы(тДерево, "ДеревоИсторияДвиженияДолга");

    //Переход на таблицу Дерево
    ПереходНаСтраницу = ЭтаФорма.Элементы.СтраницыДолги.ПодчиненныеЭлементы.ДолгиИсторияДвижений;
    ЭтаФорма.Элементы.СтраницыДолги.ТекущаяСтраница = ПереходНаСтраницу;

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

 остальное посмотрю чуть позже.
---
спасибо
---
Выложите текст запроса в текстовом виде
---
1