January 7

Количество записей с учетом отбора

Бывает так, в современной 1С с помощью удобного механизма поиска-отбора получили нужный список. А сколько в нем записей? Для решения этой простой задачи ожидается какая-нибудь стандартная кнопка, но ее до сих пор нет...

Однажды с интересом наблюдал, как с этой проблемой борется продвинутый аналитик: Еще - Вывести список - Табличный документ, а потом скачем в самый низ, номер последней строки - это и есть искомое число. По дороге к маразму можно конечно уйти далеко. Вместо этого, я во всех своих доработках вставляю кнопку "Количество записей с учетом отбора" с простой командой.

В динамических списках:

&НаСервере
Процедура КоличествоЗаписейНаСервере()
	Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
	Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	Запрос = Новый Запрос;
	Запрос.Текст = МакетКомпоновки.НаборыДанных.НаборДанныхДинамическогоСписка.Запрос;
	Для Каждого Парам из МакетКомпоновки.ЗначенияПараметров Цикл
		Запрос.УстановитьПараметр(Парам.Имя, Парам.Значение);
	КонецЦикла;
	
	Сообщить(Запрос.Выполнить().Выбрать().Количество());
КонецПроцедуры

&НаКлиенте
Процедура КоличествоЗаписей(Команда)
	КоличествоЗаписейНаСервере();
КонецПроцедуры

В таблицах значений:

&НаКлиенте
Процедура КоличествоСтрок(Команда)
	КоличествоСтрок = 0;
    Для Каждого СтрокаТаблицы Из ТаблицаДанных Цикл
        ИдентификаторСтроки = СтрокаТаблицы.ПолучитьИдентификатор();
        Если Элементы.ТаблицаДанных.ПроверитьСтроку(ИдентификаторСтроки) Тогда
			КоличествоСтрок = КоличествоСтрок + 1;
        КонецЕсли;
	КонецЦикла;
	Сообщить(КоличествоСтрок);
КонецПроцедуры

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

←18 | заметка 19 | 20→