Содержание:
Периодически возникают задачи, в которых нужно связать две табличные части (ТЧ) по ключевым полям. Обычно первая табличная часть с общими данными, а вторая с детальной расшифровкой. При выделении строки первой ТЧ, должны отображаться соответствующие этой строке данные во второй ТЧ. Данную задачу можно решить путем установки Отбора в обработчике ПриАктивизацииСтроки.
Файлы материала
Постановка задачи
Предположим стоит задача в одной табличной части вывести итоговую сумму начислений по Сотрудникам и Месяцам, а в другой детальную расшифровку этой суммы в разрезе Начислений.

Реализация
1. Получаем запросом данные в пакет из двух запросов (Итоговый и Детальный) и загружаем в соответствующие табличные части (Сотрудники и Начисления).

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
&НаСервере Процедура ЗаполнитьДанныеПоСотрудникам(ДатаНачала, ДатаОкончания) Запрос = Новый Запрос; ... // текст "Запроса" по получению тестовых данных, можно // посмотерть в Обработке с примером "Связанные табличные части" ... МассивРезультатов = Запрос.ВыполнитьПакет(); МаксимальныйИндекс = МассивРезультатов.ВГраница(); Объект.Сотрудники.Загрузить(МассивРезультатов[МаксимальныйИндекс-1].Выгрузить()); Объект.Начисления.Загрузить(МассивРезультатов[МаксимальныйИндекс].Выгрузить()); КонецПроцедуры |
2. В обработчике ПриАктивизацииСтроки ТЧ «Сотрудники» устанавливаем Отбор для ТЧ «Начисления» по ключевым полям: Сотрудник и Месяц и обновляем итоги в подвале. Учитываем что ТЧ может быть пустой.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
&НаКлиенте Процедура СотрудникиПриАктивизацииСтроки(Элемент) Если Объект.Сотрудники.Количество() = 0 Тогда УстановитьОтборПоПустомуЗначению(); Иначе ТекущиеДанные = Элемент.ТекущиеДанные; УстановитьОтборПоКлючу(ТекущиеДанные); КонецЕсли; ОбновитьИтоги(); КонецПроцедуры &НаКлиенте Процедура УстановитьОтборПоПустомуЗначению() Отбор = Новый Структура; Отбор.Вставить("Сотрудник", ПредопределенноеЗначение("Справочник.Сотрудники.ПустаяСсылка")); Элементы.Начисления.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор); КонецПроцедуры &НаКлиенте Процедура УстановитьОтборПоКлючу(ТекущиеДанные) Если ТекущиеДанные = Неопределено Тогда Возврат; КонецЕсли; Отбор = Новый Структура; Отбор.Вставить("Сотрудник", ТекущиеДанные["Сотрудник"]); Отбор.Вставить("Месяц", ТекущиеДанные["Месяц"]); Элементы.Начисления.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор); КонецПроцедуры &НаКлиенте Процедура ОбновитьИтоги() // Вариант 1 - сумма уже посчитана Если Элементы.Сотрудники.ТекущиеДанные = Неопределено Тогда ИтогиСУчетомОтбора = ""; Иначе ИтогиСУчетомОтбора = Элементы.Сотрудники.ТекущиеДанные.Результат; КонецЕсли; // Варинат 2 - сумму нужно посчитать //ИтогиСУчетомОтбора = 0; //Для Каждого ТекущаяСтрока Из Объект.Начисления Цикл // Если Элементы.Начисления.ПроверитьСтроку(ТекущаяСтрока.ПолучитьИдентификатор()) Тогда // ИтогиСУчетомОтбора = ИтогиСУчетомОтбора + ТекущаяСтрока.Результат // КонецЕсли; //КонецЦикла; //устанавливаем итоги в подвал ТЧ Элементы.Начисления.ПодчиненныеЭлементы.НачисленияРезультат.ТекстПодвала = ИтогиСУчетомОтбора; КонецПроцедуры |
Пример с обработкой доступен для скачивания в начале статьи.
