Как получить "выведенные" строки Динамического списка, без переформирования повторного запроса?

1. user817897 2 12.03.23 00:57 Сейчас в теме
Добрый день. Такой вопрос:
Как получить "выведенные" строки Динамического списка, без переформирования повторного запроса?
Найденные решения
21. spacecraft 13.03.23 17:00 Сейчас в теме
(1) если нужно получение не автоматически по обновлению списка, то как вариант:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресХранилища",Адрес);
КонецПроцедуры

&НаКлиенте
Процедура КомандаПолучитьСтроки(Команда)
	Строки = ПолучитьСтрокиНаСервере(Адрес);
	СписокСтрок.ЗагрузитьЗначения(Строки);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСтрокиНаСервере(Адрес)
	Результат = Неопределено;
	Если ЭтоАдресВременногоХранилища(Адрес) Тогда
		Результат = ПолучитьИзВременногоХранилища(Адрес);
	КонецЕсли;
	Возврат Результат;
КонецФункции

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	Перем Адрес;
	Если Настройки.ДополнительныеСвойства.Свойство("АдресХранилища", Адрес) Тогда
		ПоместитьВоВременноеХранилище(Строки.ПолучитьКлючи(),Адрес);
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
ТестДинСписок.epf
user817897; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
21. spacecraft 13.03.23 17:00 Сейчас в теме
(1) если нужно получение не автоматически по обновлению списка, то как вариант:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
	Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("АдресХранилища",Адрес);
КонецПроцедуры

&НаКлиенте
Процедура КомандаПолучитьСтроки(Команда)
	Строки = ПолучитьСтрокиНаСервере(Адрес);
	СписокСтрок.ЗагрузитьЗначения(Строки);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьСтрокиНаСервере(Адрес)
	Результат = Неопределено;
	Если ЭтоАдресВременногоХранилища(Адрес) Тогда
		Результат = ПолучитьИзВременногоХранилища(Адрес);
	КонецЕсли;
	Возврат Результат;
КонецФункции

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	Перем Адрес;
	Если Настройки.ДополнительныеСвойства.Свойство("АдресХранилища", Адрес) Тогда
		ПоместитьВоВременноеХранилище(Строки.ПолучитьКлючи(),Адрес);
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
ТестДинСписок.epf
user817897; +1 Ответить
27. user817897 2 13.03.23 17:20 Сейчас в теме
(21)Кайф. Это то что я и хотел, спасибо большое) Вы сегодня сделали мой день!))) Протестировал, работает, внедрил! Ура.
2. user817897 2 12.03.23 09:50 Сейчас в теме
Так как при скролле получаем новый список, вот хочется этот список каждый раз перезаписать в ТЗ, но при полученииДанных - "НаСервереБезКонтекста"...
3. user1863362 12.03.23 10:29 Сейчас в теме
4. soft_wind 12.03.23 11:12 Сейчас в теме
(2)не надо извращений, большинство данных получают именно запросами!! вот и получайте нужные данные запросом!
такой код гораздо понятнее/читабельнее!
5. user817897 2 13.03.23 15:10 Сейчас в теме
(4) в ответе Запроса 300000+ строк )))
6. пользователь 13.03.23 15:19
Сообщение было скрыто модератором.
...
7. nomad_irk 80 13.03.23 15:31 Сейчас в теме
(5)Без повторного выполнения запроса - никак.

Сделайте как работает платформа:

Выбрать Первые 50
.........
Из ТАБЛИЦА
ГДЕ
       НЕ ССЫЛКА В (&МассивССЫЛОК)
УПОРЯДОЧИТЬ ПО
        ССЫЛКА


и накапливайте в МассивСсылок выведенные строки всех итераций.

Если данные не объектные, то придется поизвращаться с ключами записей/набором уникальных выведенных значений.
8. user817897 2 13.03.23 15:41 Сейчас в теме
(7) не совсем понял вас.
При скролле дин.списка, запрос же не меняется, отрабатывает при получении данных в котором видны строки нужные)
11. user1863362 13.03.23 16:01 Сейчас в теме
(7)
ГДЕ
НЕ ССЫЛКА В (&МассивССЫЛОК)
Ой, а платформа действительно так работает?
12. пользователь 13.03.23 16:08
Сообщение было скрыто модератором.
...
24. пользователь 13.03.23 17:04
Сообщение было скрыто модератором.
...
13. nomad_irk 80 13.03.23 16:11 Сейчас в теме
(11)Там реализация по-другому, но смысл такой
9. soft_wind 13.03.23 15:48 Сейчас в теме
(5) подождите, вроде как у элемента формы с вашим списком есть реквизит
ВыделенныеСтроки - массив элементов (зависит от списка)

Элементы.Список.ВыделенныеСтроки
10. user817897 2 13.03.23 15:54 Сейчас в теме
(9) да, есть. Там всегда одна строка выделенная.
14. soft_wind 13.03.23 16:13 Сейчас в теме
(10) а проверьте настройки вашего Списка включена ли там возможность выделения сразу нескольких строк
это в конструкторе формы, свойства элемента Список,
должно быть
Режим выделения = Множественный

в процессе работы с клавишей Shift или Ctrl выделяете нужные строчки и нажимаете кнопку Обработать (или что там у вас)
15. user817897 2 13.03.23 16:15 Сейчас в теме
(14) да, работает. Но сделал изначально по выделенным позициям, но оказалось что так не подходит. Нужно по всему списку который погрузился скроллоом. Вот и задачка)
17. user817897 2 13.03.23 16:44 Сейчас в теме
(16) Это ПриПолученииДанныхНаСервере, а на с Клиента или с Сервера получить эти "Строки" ?
18. SlavaKron 13.03.23 16:48 Сейчас в теме
(17) Список выведенных строк актуален только в момент вывода, то есть ПриПолученииДанныхНаСервере. Зачем он вам вне этого события?
19. user817897 2 13.03.23 16:53 Сейчас в теме
(18) при нажатии на кнопку, Забрать все строки из динамического списка (45шт.) и отправить Post запрос по ним.
20. SlavaKron 13.03.23 16:59 Сейчас в теме
(19) Ну тогда вам, наверное, нужны не выведенные строки, а строки в соответствии с пользовательскими отборами.
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,, ТипГенератора);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Показать
22. user817897 2 13.03.23 17:02 Сейчас в теме
(20) Да, так именно и писал по кнопке, но отбор происходит по этому запросу 300000+ строк(
25. SlavaKron 13.03.23 17:06 Сейчас в теме
(22) Ок, из этих 300000 на экран вывелись 30 строк, можно сказать, случайным образом. Вы же понимаете, что в этих 30 строках нет никакого смысла. Потом, например, пользователь прокрутит список на 1 строку вниз и в списке отображаемых строк окажется только одна строка.
26. SlavaKron 13.03.23 17:14 Сейчас в теме
(22) Вообще, не сходится. Тут (19) вы пишите, что строк всего 45, а потом говорите, что код из (20) возвращает 300000 строк. Как такое может быть?
28. user817897 2 13.03.23 17:22 Сейчас в теме
(26) строк 45 примерно отображается пользователю которые он может подгружать следующие 45 из 300000+
Вот мне эти 45 хотелось и увидеть по кнопке)
В (21) дал ответ на мой вопрос)
23. user817897 2 13.03.23 17:04 Сейчас в теме
(20) Даже если в Динамическом списки стать на любой элемент строки, нажать "Cntrl" + "А" , то всё, беда, будет отбирать 300000+ строк, и писать что выделение будет происходить слишком долго, можно отменить, и кнопка "Прервать появляется" ))
Оставьте свое сообщение

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