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