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

Понадобилось обрабатывать текущие отображаемые документы в списке. Раньше я использовал для этого обычно выделенные строки, но документов было много, выделение строк отрабатывало бы медленно. Решено было получать текущие отображаемые данные в динамическом списке, с учетом наложенных отборов.

Нашел решение на wonderland, цитирую:

Данные динамического списка могут понадобиться вам для того, чтобы распечатать их в нестандартном, «специфическом» виде. Или для того, чтобы выполнить с ними те или иные действия. Например, послать письмо всем контрагентам, которых вы отобрали в списке по некоторым признакам.

Кроме этого существует целый ряд задач, в которых пользователь, помимо списка элементов, хочет видеть ещё и итоговые данные, связанные с этим списком. Например, отобрав товары некоторой товарной группы и некоторого поставщика, он тут же хочет увидеть общее количество таких товаров в базе.

Но оно сыровато, пришлось поработать, чтобы получилось в виде функции. Недостаток в том, что показываются только отображаемые колонки, невидимые, такие как ссылка, надо добавлять программно, чем и занимается моя функция.

Важно! Передавать в функцию нужно Элементы.Список (таблицу формы), а не Список (динамический список).

Функция ПолучитьТаблицуДинамическогоСписка(Список) Экспорт
	//https://wonderland.v8.1c.ru/blog/poluchenie-dannykh-dinamicheskogo-spiska/
	Схема = Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();   
	
	Попытка
		Настройки = Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
		Поле = Настройки.Структура[0].Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		Поле.Использование = истина;
		Поле.Поле = Новый ПолеКомпоновкиДанных("Ссылка");
		Поле.Заголовок = "Ссылка";
	Исключение
		ВызватьИсключение "Невозможно получить списки из текущего списка, возможно включены группировки: " + ОписаниеОшибки();
	КонецПопытки;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();   
	//https://forum.mista.ru/topic/759927
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,,
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"),Истина);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	
	ТЗ = Новый ТаблицаЗначений;
	ПроцессорВывода.НачатьВывод();
	ПроцессорВывода.УстановитьОбъект(ТЗ);   
	ТЗ = ПроцессорВывода.Вывести(ПроцессорКомпоновки);     
	
	Возврат ТЗ;

КонецФункции

Среда: БП 3.0.187.20. 1С 8.3.27.1688

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *