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

ChOP 217 2 9 6
// Возвращает количество строк динамического списка
//
// Параметры:
//  ЭтаФорма - ФормаКлиентскогоПриложения - Форма клиентского приложения
//  Список	 - строка - имя динамического списка
// 
// Возвращаемое значение:
//  Строка - количество строк в динамическом списке 
//
Функция ПосчитатьКоличествоВДинамСписке(ЭтаФорма, Список) Экспорт
	
	Схема = ЭтаФорма.Элементы[Список].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = ЭтаФорма.Элементы[Список].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	Запрос = Новый Запрос;
	Запрос.Текст = МакетКомпоновки.НаборыДанных.НаборДанныхДинамическогоСписка.Запрос;
	
	ПозВыбратьНачало = СтрНайти(Запрос.Текст, "ВЫБРАТЬ ", НаправлениеПоиска.СКонца);
	Пока НЕ ПозВыбратьНачало = 1
		и НЕ Сред(Запрос.Текст, ПозВыбратьНачало - 1, 1) = Символы.ПС Цикл
		ПозВыбратьНачало = СтрНайти(Запрос.Текст, "ВЫБРАТЬ ", НаправлениеПоиска.СКонца, ПозВыбратьНачало - 1);
	КонецЦикла;
	ПозВыбратьКонец = СтрНайти(Запрос.Текст, Символы.ПС,, ПозВыбратьНачало);
	
	СтрокаВЫБРАТЬ = Лев(Запрос.Текст, ПозВыбратьКонец);
	СтрокаИз = Сред(Запрос.Текст, СтрНайти(Запрос.Текст, Символы.ПС + "ИЗ" + Символы.ПС,, ПозВыбратьКонец));
	
	Если СтрНайти(СтрокаИз, Символы.ПС + "СГРУППИРОВАТЬ") Тогда
		СтрокаИз = Лев(СтрокаИз, СтрНайти(СтрокаИз, Символы.ПС + "СГРУППИРОВАТЬ"));
	КонецЕсли;
	
	Запрос.Текст = СтрокаВЫБРАТЬ + "Количество(*) КАК Кол" + СтрокаИз;
	Если СтрНайти(Запрос.Текст, Символы.ПС + "УПОРЯДОЧИТЬ ПО",, ПозВыбратьКонец) Тогда
		Запрос.Текст = Лев(Запрос.Текст, СтрНайти(Запрос.Текст, Символы.ПС + "УПОРЯДОЧИТЬ ПО",, ПозВыбратьКонец));
	КонецЕсли;
	
	Для Каждого парам из МакетКомпоновки.ЗначенияПараметров Цикл
		Запрос.УстановитьПараметр(парам.Имя, парам.Значение);
	КонецЦикла;
	
	Попытка
		Результат = Запрос.Выполнить();
	Исключение
		ЗаписьЖурналаРегистрации("КоличествоВСписке в Списке " + ЭтаФорма.ИмяФормы, УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
	КонецПопытки;
	
	Выборка = Результат.Выбрать();
	Выборка.Следующий();
	
	Возврат Выборка.Кол;
	
КонецФункции
0

См. также

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

Значение строки поиска динамического списка

Получение данных динамического списка

ОтборДинамическогоСписка (БСП)

СтруктураСвойствДинамическогоСписка (БСП)

НастроитьОтборыДинамическогоСписка (БСП)

УстановитьСвойстваДинамическогоСписка (БСП)

ИнициализацияДинамическогоСпискаПроблемныхВерсий (БСП)

ОбновитьВсеОткрытыеДинамическиеСписки (БСП)

Модератору