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