Получить данные из выделенных строк динамического списка

1. Serega-artem 17 21.08.20 14:19 Сейчас в теме
Добрый день!

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

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


У динамического списка такового нет... Как быть?
native-api; +1 Ответить
По теме из базы знаний
Найденные решения
22. sapervodichka 6912 21.08.20 15:49 Сейчас в теме
(1) Элементы.Список.ДанныеСтроки(ИдентификаторСтроки)
VyacheslavShilov; kitun; motorkuzbassa.it; criptid; user1978484; SagittariusA; poyson; user770928; native-api; Merkalov; user1667515; odinsmot; Демьян; Sardukar; lisov; dindzilin; философ; cheiser1982; atdonya; freeraider; user930801; Tigreno; Eeeehhhh; simich; Acort; HIVvich; almierm; ResAndDev; smit1c; dmpas; Serg2000mr; megatrend; zqzq; fixin; salt7; An-Aleksey; i.c.h; MariusUrsus; Serega-artem; Sashares; +40 Ответить
10. Sashares 35 21.08.20 15:00 Сейчас в теме
(9)
ВыдСтроки = Элементы.ДС.ВыделенныеСтроки;
Для Каждого ТекВыд Из ВыдСтроки Цикл
Элементы.ДС.ТекущаяСтрока = ТекВыд;
НужныеМнеДанные = Элементы.ДС.ТекущиеДанные;
КонецЦикла;
VyacheslavShilov; j_onion; improg; NicolasCage; dalini; Swamt; MoshkovEV; maksa2005; AlexUnder; UserInterfaceTaxi; Fristayla; it-prof; Mechanik21; justaria; Thalt; poyson; Serega-artem; +17 1 Ответить
20. Sashares 35 21.08.20 15:44 Сейчас в теме
(19)Понятно.
Сначала надо в отдельный массив выделенные строки добавить.

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

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


А потом уже его обходить для получения данных.
VyacheslavShilov; Hogyoku; Swamt; MoshkovEV; maksa2005; Fristayla; it-prof; Gendelf; Serega-artem; +9 2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 21.08.20 14:30 Сейчас в теме
(1) ВыделенныеСтроки (SelectedRows)
Использование:
Только чтение.
Описание:
Тип: Массив.
Содержит массив идентификаторов выделенных строк.
starik-2005; SlavaKron; +2 Ответить
4. Serega-artem 17 21.08.20 14:38 Сейчас в теме
(2) Так ИД получить не проблема, проблема получить данные по этим ИД.
6. RustamZz 21.08.20 14:41 Сейчас в теме
(4)
Для каждого
и
НайтиПоИдентификатору
8. Serega-artem 17 21.08.20 14:54 Сейчас в теме
(6) Вы вопрос читали? Нет у динамического списка НайтиПоИдентификатору() !
SagittariusA; Istur; Dermidont; An-Aleksey; BoBaH; hillia; +6 2 Ответить
11. SlavaKron 21.08.20 15:10 Сейчас в теме
(4) В выделенные строки заглядывали? Идентификаторами для динамического списка, основная таблица которого – РС, являются ключи записи этого РС.
insurgut; +1 Ответить
12. Sashares 35 21.08.20 15:13 Сейчас в теме
(11)А если убрать основную таблицу, то просто число.
Поэтому не суть что там.
13. SlavaKron 21.08.20 15:20 Сейчас в теме
(12)
На УФ есть динамический список с основной таблицей в виде РС подчиненного регистратору.
14. Sashares 35 21.08.20 15:21 Сейчас в теме
(13)Это я видел.
Я к тому, что из ключей ничего получить нормально нельзя.
15. SlavaKron 21.08.20 15:25 Сейчас в теме
(14) Как раз из данных строки вы ничего не получите, точнее получите значения отображаемых колонок. При работе с ДС всегда следует работать с идентификаторами строк (ТекущаяСтрока / ВыделенныеСтроки).
16. Sashares 35 21.08.20 15:31 Сейчас в теме
(15)ТС пишет
Надо получить значения из определенных колонок выделенных пользователем строк.

Именно это можно сделать из текущих данных, как предложено в (10)

При работе с ДС всегда следует работать с идентификаторами строк

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

Про КлючЗаписи знаю, игрался долго с ним перед тем как задать вопрос на форму, но ничего путного не получил.
18. Sashares 35 21.08.20 15:36 Сейчас в теме
19. Serega-artem 17 21.08.20 15:41 Сейчас в теме
(18)

ВыдСтроки = Элементы.ПрилагаемыеДокументы.ВыделенныеСтроки;
Сообщить(ВыдСтроки.Количество());  // Тут всё ок, все строки 5.
Сч = 0; 
Для Каждого ТекВыд Из ВыдСтроки Цикл
Элементы.ПрилагаемыеДокументы.ТекущаяСтрока = ТекВыд;
НужныеМнеДанные = Элементы.ПрилагаемыеДокументы.ТекущиеДанные;
Сообщить(НужныеМнеДанные.ИмяФайла); // А вот это отрабатывает только 2 раза из 5
Сч = Сч+1; 
КонецЦикла;
Сообщить(Сч); // И тут только две интерации
Показать
20. Sashares 35 21.08.20 15:44 Сейчас в теме
(19)Понятно.
Сначала надо в отдельный массив выделенные строки добавить.

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

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


А потом уже его обходить для получения данных.
VyacheslavShilov; Hogyoku; Swamt; MoshkovEV; maksa2005; Fristayla; it-prof; Gendelf; Serega-artem; +9 2 Ответить
37. Sardukar 58 18.08.23 07:08 Сейчас в теме
(20) МассивИДСтрок = Элементы.Список.ВыделенныеСтроки
38. sergsqvo 19.10.23 12:24 Сейчас в теме
(8)
(20)
ВыделенныеСтроки = Новый ФиксированныйМассив(Элементы.ПрилагаемыеДокументы.ВыделенныеСтроки);
Genneral; +1 Ответить
23. SlavaKron 21.08.20 15:51 Сейчас в теме
(16)
идентификатор КлючЗаписи регистра, дальше что?

Передайте его на сервер и увидите.
26. Sashares 35 21.08.20 16:31 Сейчас в теме
(23)Сложно))
И максимум, что увижу - измерения.
А если надо ресурс или реквизит - предлагаете заново читать по ключу?
27. SlavaKron 21.08.20 16:42 Сейчас в теме
(26) Вы получите Набор значений, однозначно идентифицирующих запись регистра. Этого более чем достаточно.
28. Sashares 35 21.08.20 16:44 Сейчас в теме
(27)
Если нужно получить значение из списка, который показывается пользователю на форме, считаю, что получать ключи регистра, потом по ключам читать записи регистра - не адекватное решение.

Если же нужно получить данные записей РС, которых нет в колонках списка, то ваш вариант, бесспорно, подходит.
29. SlavaKron 21.08.20 17:07 Сейчас в теме
(28) Это работает точно так же как с динамическим списком справочника или документа. Если вам понадобится получить какой-либо реквизит документа из выделенной строки списка, вы вряд ли будете его вытаскивать из данных строки – вы возьмете ссылку документа и на сервере получите его значение в запросе. Иначе вам необходимо предусмотреть наличие этой колонки в списке, пользовательскую видимость или включенное свойство реквизита ДС "Использовать всегда".
30. Sashares 35 21.08.20 17:10 Сейчас в теме
(29) Собственно и я про тоже самое писал ))
3. Sashares 35 21.08.20 14:32 Сейчас в теме
(1)Если не указывать основную таблицу (если она регистр сведений), то в целом можно.
5. Serega-artem 17 21.08.20 14:38 Сейчас в теме
(3) А можно чуть конкретнее?
7. Sashares 35 21.08.20 14:51 Сейчас в теме
(5)Предыдущий комментарий не корректный. Извиняюсь.
Можно так:

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

Делать это на клиенте.
9. Serega-artem 17 21.08.20 14:57 Сейчас в теме
(7)
В цикле устанавливать текущей строкой - одну из выделенных.

А как это сделать? По ИД то нельзя... Или не понимаю чего-то...
10. Sashares 35 21.08.20 15:00 Сейчас в теме
(9)
ВыдСтроки = Элементы.ДС.ВыделенныеСтроки;
Для Каждого ТекВыд Из ВыдСтроки Цикл
Элементы.ДС.ТекущаяСтрока = ТекВыд;
НужныеМнеДанные = Элементы.ДС.ТекущиеДанные;
КонецЦикла;
VyacheslavShilov; j_onion; improg; NicolasCage; dalini; Swamt; MoshkovEV; maksa2005; AlexUnder; UserInterfaceTaxi; Fristayla; it-prof; Mechanik21; justaria; Thalt; poyson; Serega-artem; +17 1 Ответить
21. Serega-artem 17 21.08.20 15:47 Сейчас в теме
Так работает! Спасибо!
35. RustIG 1747 08.03.23 19:55 Сейчас в теме
41. user770928 03.04.24 23:24 Сейчас в теме
(10) НужныеМнеДанные = Элементы.ДС.ТекущиеДанные; - это неверно, использование в цикле вообще бессмысленно. Там хранятся данные строки, на которой остановился выбор в списке на форме.
правильно в ответе (36)

Для Каждого ТекВыд Из Элементы.ДС.ВыделенныеСтроки Цикл
НужныеМнеДанные = Элементы.ДС.ДанныеСтроки(ТекВыд);
КонецЦикла;
42. Sashares 35 04.04.24 01:19 Сейчас в теме
(41)
НужныеМнеДанные = Элементы.ДС.ТекущиеДанные; - это неверно, использование в цикле вообще бессмысленно.

Там есть еще одна строка в коде, которая меняет текущую строку. Смотрите лучше.
22. sapervodichka 6912 21.08.20 15:49 Сейчас в теме
(1) Элементы.Список.ДанныеСтроки(ИдентификаторСтроки)
VyacheslavShilov; kitun; motorkuzbassa.it; criptid; user1978484; SagittariusA; poyson; user770928; native-api; Merkalov; user1667515; odinsmot; Демьян; Sardukar; lisov; dindzilin; философ; cheiser1982; atdonya; freeraider; user930801; Tigreno; Eeeehhhh; simich; Acort; HIVvich; almierm; ResAndDev; smit1c; dmpas; Serg2000mr; megatrend; zqzq; fixin; salt7; An-Aleksey; i.c.h; MariusUrsus; Serega-artem; Sashares; +40 Ответить
25. Sashares 35 21.08.20 16:29 Сейчас в теме
(22)Действительно, так проще =)
32. fixin 4273 05.02.22 19:36 Сейчас в теме
(22)
Элементы.Список.ДанныеСтроки(ИдентификаторСтроки)


Спасибо, все время забываю об этом методе.
36. atdonya 108 15.06.23 13:27 Сейчас в теме
Для Каждого ТекВыд Из Элементы.ДС.ВыделенныеСтроки Цикл
НужныеМнеДанные = Элементы.ДС.ДанныеСтроки(ТекВыд);
КонецЦикла;

(не увидел ответ выше, сорри)
user770928; +1 Ответить
39. Davegas2 08.11.23 08:17 Сейчас в теме
(22,32,36) Спасибо. Очень пригодилось!
24. neuro88 21.08.20 16:00 Сейчас в теме
&НаКлиенте
Процедура Команда1(Команда)
	ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
	Для Каждого ТекСтрока Из ВыделенныеСтроки Цикл
		Сообщить(ПолучитьДанные(Текстрока)); 
	КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста 
Функция ПолучитьДанные(ТекСтрока)
	Возврат ТекСтрока.Измерение1;
КонецФункции
Показать
user1676065; marku; Thalt; qazaz2; Serega-artem; +5 Ответить
31. Serega-artem 17 24.08.20 11:38 Сейчас в теме
Всем спасибо за участие и варианты решения!
33. sokol_6630 3 14.03.22 09:09 Сейчас в теме
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки; 
    
Для Каждого Строка Из ВыделенныеСтроки Цикл 
        Элементы.Список.ДанныеСтроки(Строка).ТвойРеквизит;
КонецЦикла;
kurator1C; redtram; Detache; +3 Ответить
34. fixin 4273 18.06.22 20:17 Сейчас в теме
Кстати, если в выделенных строках не идентфикатор строки, а ссылка, то можно получить итоги по выделенным строкам так, где ЭлементСписок это обычно Элементы.Список:
Функция ИтогПоВыделеннымСтрокам(ЭлементСписок, Поле) Экспорт
	Р = 0;
	Для Каждого Строка ИЗ ЭлементСписок.ВыделенныеСтроки Цикл
		Данные = ЭлементСписок.ДанныеСтроки(Строка);
		Р = Р + Данные[Поле];
	КонецЦикла;
	Возврат Р;
КонецФункции
Показать
redeye911; RustIG; +2 Ответить
40. Xershi 1555 13.03.24 13:37 Сейчас в теме
Решал похожу задачу, поиском нашел сначала эту тему.
43. Genneral 04.04.24 14:58 Сейчас в теме
(38)
Спасибо, была проблема с изменением в процессе количества выделенных строк, это решение.
44. ZajacBo 07.11.24 15:03 Сейчас в теме
В динамическом списке выделеныестроки содержит массив ключей динамичесткого списка. А это зависит от настроек списка
Например для регистра сведений код выглядит так
Для каждого ид из Элементы.Список.ВыделенныеСтроки цикл
	мз = РегистрыСведений.КакойТоРС.СоздатьМенеджерЗаписи();
	ЗаполнитьЗначенияСвойств(мз,ид);
	Мз.Прочитать();
КонецЦикла


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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот