Данная публикация навеяна ностальгией по отборам в конфигурациях на обычных формах (ЗУП2.5, УПП3.1 и т.п.), где в контекстном меню можно было отобраться по выделенному значению и получить итоги в подвале с учетом этого отбора.
В управляемых формах также есть отборы (Найти, найти в найденном), но к сожалению, итоги не зависят от отборов. Данная публикация - некий костыль, позволяющий создать подобный механизм.
Сразу оговорюсь, решение не оптимальное, комфортно работать можно только с табличными частями, где количество строк не более 1-2 тыс. (при отмене отбора загружается первоначальная таблица с приблизительной оценкой по 1 секунде на каждую тысячу строк)
Зато реализация достаточно простая, ниже код для документа Отражение зарплаты в бухучете из ЗУП 3.1:
В форме документа должен быть реквизит АдресХранилища (строка) и контекстные кнопки ОтборПоЗначениюТекущейКолонки и ОтключитьОтбор
&НаСервере
Процедура ОтборПоЗначениюВТекущейКолонкеНаСервере(Ключ, Значение)
ОригиналТЗ = Объект.НачисленнаяЗарплатаИВзносы.Выгрузить();
Структура = Новый Структура(Ключ, Значение);
ТЗ = Объект.НачисленнаяЗарплатаИВзносы.Выгрузить(Структура);
Объект.НачисленнаяЗарплатаИВзносы.Загрузить(ТЗ);
Если АдресХранилища = "" Тогда
АдресХранилища = ПоместитьВоВременноеХранилище(ОригиналТЗ, ЭтаФорма.УникальныйИдентификатор);
ИначеЕсли ТипЗнч(ПолучитьИзВременногоХранилища(АдресХранилища)) = Тип("Структура")
Или ПолучитьИзВременногоХранилища(АдресХранилища)= Неопределено Тогда
АдресХранилища = ПоместитьВоВременноеХранилище(ОригиналТЗ, ЭтаФорма.УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтборПоЗначениюВТекущейКолонке(Команда)
ПолеОтбора = Прав(Элементы.НачисленнаяЗарплатаИВзносы.ТекущийЭлемент.Имя, СтрДлина(Элементы.НачисленнаяЗарплатаИВзносы.ТекущийЭлемент.Имя) - СтрДлина(ЭтаФорма.ТекущийЭлемент.Имя));
ПолеОтбора = ?(ПолеОтбора =
Вступайте в нашу телеграмм-группу Инфостарт