Добрый день!

Затупил над простым вопросом. На УФ есть динамический список с основной таблицей в виде РС подчиненного регистратору. Надо получить значения из определенных колонок выделенных пользователем строк. В ТЧ это решается через получение ИД строк и метода:

```1c
    НайтиПоИдентификатору()
```

У динамического списка такового нет... Как быть?
---
Элементы.Список.ДанныеСтроки(ИдентификаторСтроки)
---
```1c
    ВыдСтроки = Элементы.ДС.ВыделенныеСтроки;
    Для Каждого ТекВыд Из ВыдСтроки Цикл
    Элементы.ДС.ТекущаяСтрока = ТекВыд;
    НужныеМнеДанные = Элементы.ДС.ТекущиеДанные;
    КонецЦикла;
```
---
Понятно.
Сначала надо в отдельный массив выделенные строки добавить.

```1c
    ВыдСтроки = Новый Массив;

    Для Каждого текСтр Из Элементы.ПрилагаемыеДокументы.ВыделенныеСтроки Цикл
    ВыдСтроки.Добавить(ТекСтр);
    КонецЦикла;
```

А потом уже его обходить для получения данных.
---
ВыделенныеСтроки (SelectedRows)
Использование:
Только чтение.
Описание:
Тип: Массив.
Содержит массив идентификаторов выделенных строк.
---
Так ИД получить не проблема, проблема получить данные по этим ИД.
---
```1c
    Для каждого
```
 и
```1c
    НайтиПоИдентификатору
```
---
Вы вопрос читали? Нет у динамического списка НайтиПоИдентификатору() !
---
В выделенные строки заглядывали? Идентификаторами для динамического списка, основная таблица которого – РС, являются ключи записи этого РС.
---
А если убрать основную таблицу, то просто число.
Поэтому не суть что там.
---
На УФ есть динамический список с основной таблицей в виде РС подчиненного регистратору.
---
Это я видел.
Я к тому, что из ключей ничего получить нормально нельзя.
---
Как раз из данных строки вы ничего не получите, точнее получите значения отображаемых колонок. При работе с ДС всегда следует работать с идентификаторами строк (ТекущаяСтрока / ВыделенныеСтроки).
---
ТС пишет Надо получить значения из определенных колонок выделенных пользователем строк.
Именно это можно сделать из текущих данных, как предложено в (10)

При работе с ДС всегда следует работать с идентификаторами строк
Пока ничего полезного по теме вы не сказали.
Вот у вас идентификатор КлючЗаписи регистра, дальше что?
---
Ваш вариант работает, но как-то странно: выводится информация только по части строк, причем закономерности особой не вижу! Буду копать дальше.

Про КлючЗаписи знаю, игрался долго с ним перед тем как задать вопрос на форму, но ничего путного не получил.
---
Код покажите
---
```1c
    ВыдСтроки = Элементы.ПрилагаемыеДокументы.ВыделенныеСтроки;
    Сообщить(ВыдСтроки.Количество()); // Тут всё ок, все строки 5.
    Сч = 0;
    Для Каждого ТекВыд Из ВыдСтроки Цикл
    Элементы.ПрилагаемыеДокументы.ТекущаяСтрока = ТекВыд;
    НужныеМнеДанные = Элементы.ПрилагаемыеДокументы.ТекущиеДанные;
    Сообщить(НужныеМнеДанные.ИмяФайла); // А вот это отрабатывает только 2 раза из 5
    Сч = Сч+1;
    КонецЦикла;
    Сообщить(Сч); // И тут только две интерации
```
---
Понятно.
Сначала надо в отдельный массив выделенные строки добавить.

```1c
    ВыдСтроки = Новый Массив;

    Для Каждого текСтр Из Элементы.ПрилагаемыеДокументы.ВыделенныеСтроки Цикл
    ВыдСтроки.Добавить(ТекСтр);
    КонецЦикла;
```

А потом уже его обходить для получения данных.
---
МассивИДСтрок = Элементы.Список.ВыделенныеСтроки
---
(20) ВыделенныеСтроки = Новый ФиксированныйМассив(Элементы.ПрилагаемыеДокументы.ВыделенныеСтроки);
---
идентификатор КлючЗаписи регистра, дальше что?
Передайте его на сервер и увидите.
---
Сложно))
И максимум, что увижу - измерения.
А если надо ресурс или реквизит - предлагаете заново читать по ключу?
---
Вы получите Набор значений, однозначно идентифицирующих запись регистра. Этого более чем достаточно.
---
Если нужно получить значение из списка, который показывается пользователю на форме, считаю, что получать ключи регистра, потом по ключам читать записи регистра - не адекватное решение.

Если же нужно получить данные записей РС, которых нет в колонках списка, то ваш вариант, бесспорно, подходит.
---
Это работает точно так же как с динамическим списком справочника или документа. Если вам понадобится получить какой-либо реквизит документа из выделенной строки списка, вы вряд ли будете его вытаскивать из данных строки – вы возьмете ссылку документа и на сервере получите его значение в запросе. Иначе вам необходимо предусмотреть наличие этой колонки в списке, пользовательскую видимость или включенное свойство реквизита ДС "Использовать всегда".
---
Собственно и я про тоже самое писал ))
---
Если не указывать основную таблицу (если она регистр сведений), то в целом можно.
---
А можно чуть конкретнее?
---
Предыдущий комментарий не корректный. Извиняюсь.
Можно так:

Взять выделенные строки списка.
В цикле устанавливать текущей строкой - одну из выделенных.
Из ТекущихДанных брать значение.

Делать это на клиенте.
---
В цикле устанавливать текущей строкой - одну из выделенных.

А как это сделать? По ИД то нельзя... Или не понимаю чего-то...
---
```1c
    ВыдСтроки = Элементы.ДС.ВыделенныеСтроки;
    Для Каждого ТекВыд Из ВыдСтроки Цикл
    Элементы.ДС.ТекущаяСтрока = ТекВыд;
    НужныеМнеДанные = Элементы.ДС.ТекущиеДанные;
    КонецЦикла;
```
---
Так работает! Спасибо!
---
что-то в этом есть
---
НужныеМнеДанные = Элементы.ДС.ТекущиеДанные; - это неверно, использование в цикле вообще бессмысленно. Там хранятся данные строки, на которой остановился выбор в списке на форме.
правильно в ответе (36)

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

Спасибо, все время забываю об этом методе.
---
```1c
    Для Каждого ТекВыд Из Элементы.ДС.ВыделенныеСтроки Цикл
    НужныеМнеДанные = Элементы.ДС.ДанныеСтроки(ТекВыд);
    КонецЦикла;
```

(не увидел ответ выше, сорри)
---
(22,32,36) Спасибо. Очень пригодилось!
---
```1c
    &НаКлиенте
    Процедура Команда1(Команда)
    ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
    Для Каждого ТекСтрока Из ВыделенныеСтроки Цикл
    Сообщить(ПолучитьДанные(Текстрока));
    КонецЦикла;
    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция ПолучитьДанные(ТекСтрока)
    Возврат ТекСтрока.Измерение1;
    КонецФункции
```
---
Всем спасибо за участие и варианты решения!
---
```1c
    ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;

    Для Каждого Строка Из ВыделенныеСтроки Цикл
    Элементы.Список.ДанныеСтроки(Строка).ТвойРеквизит;
    КонецЦикла;
```
---
Кстати, если в выделенных строках не идентфикатор строки, а ссылка, то можно получить итоги по выделенным строкам так, где ЭлементСписок это обычно Элементы.Список:

```1c
    Функция ИтогПоВыделеннымСтрокам(ЭлементСписок, Поле) Экспорт
    Р = 0;
    Для Каждого Строка ИЗ ЭлементСписок.ВыделенныеСтроки Цикл
    Данные = ЭлементСписок.ДанныеСтроки(Строка);
    Р = Р + Данные[Поле];
    КонецЦикла;
    Возврат Р;
    КонецФункции
```
---
Решал похожу задачу, поиском нашел сначала эту тему.
---
Спасибо, была проблема с изменением в процессе количества выделенных строк, это решение.
---
В динамическом списке выделеныестроки содержит массив ключей динамичесткого списка. А это зависит от настроек списка
Например для регистра сведений код выглядит так

```1c
    Для каждого ид из Элементы.Список.ВыделенныеСтроки цикл
    мз = РегистрыСведений.КакойТоРС.СоздатьМенеджерЗаписи();
    ЗаполнитьЗначенияСвойств(мз,ид);
    Мз.Прочитать();
    КонецЦикла
```

И меняй себе менеджер записи сколько влезит

P.S. Код упращен для простоты восприятия. Работаем с данными на сервере, а ВыделеныеСтроки доступны только на клиенте, так что перегоняем в массив и передаем этот массив на сервер, можно без контекста