(3)Почему бы нет. Есть такой метод НачатьВывод(). Раньше часто использовался. Ну тут пробить Отладчиком. Узнать какой макет выводит вторую таблицу
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();
Зафиксировали = Ложь;
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
//"Макет5" у меня вторая таблица
Если не ЭлементРезультата.ЗначенияПараметров.Количество() = 0 и не Зафиксировали и ЭлементРезультата.Макет = "Макет5" Тогда
Зафиксировали = Истина;
ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы-1;
КонецЕсли;
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
(10)Ну если стрелками, а не полосой прокрутки и не PgDN, то через табличную часть Отчета, можно получить номера строк фиксации и на клиенте обрабатывать
НомерСтроки = 0;
Пока Истина Цикл
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
Прервать;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
//Первая таблица
Если не ЭлементРезультата.ЗначенияПараметров.Количество() = 0 и НомерСтроки = 0 и ЭлементРезультата.Макет = "Макет2" Тогда
НоваяСтрока = ТаблицаФиксация.Добавить();
НоваяСтрока.НомерФиксированнойСтроки = ДокументРезультат.ВысотаТаблицы-1;
НомерСтроки=НомерСтроки+1;
КонецЕсли;
//Вторая таблица
Если не ЭлементРезультата.ЗначенияПараметров.Количество() = 0 и НомерСтроки=1 и ЭлементРезультата.Макет = "Макет5" Тогда
НоваяСтрока = ТаблицаФиксация.Добавить();
НоваяСтрока.НомерФиксированнойСтроки = ДокументРезультат.ВысотаТаблицы-1;
НомерСтроки=НомерСтроки+1;
КонецЕсли;
КонецЦикла;
ДокументРезультат.ФиксацияСверху = ТаблицаФиксация[0].НомерФиксированнойСтроки;
ПроцессорВывода.ЗакончитьВывод();
Показать
А в Форме
&НаКлиенте
Процедура РезультатПриАктивизацииОбласти(Элемент)
Строки = Отчет.ТаблицаФиксация.НайтиСтроки(Новый Структура("НомерФиксированнойСтроки",Элемент.ТекущаяОбласть.Верх));
Если Строки.Количество() Тогда
Результат.ФиксацияСверху = Элемент.ТекущаяОбласть.Верх;
КонецЕсли;
КонецПроцедуры
(11) Если работает, идея интересная.
Но минус большой - прокрутить вниз условно говоря получится, вверх уже не нет=)
Предложу альтернативу.
В таблице, например, ТаблицаФиксация в соседнем реквизите хранить адрес табличного документа каждой из секций отчета.
Вместо вывода полного результата отчета при выборе строки таблицы выводить его на форму из временного хранилища выбранной строки.
Можно сразу при выводе устанавливать фиксацию шапки выбранной секции.
Но минус большой - прокрутить вниз условно говоря получится, вверх уже не нет=)
Эт почему? Я показал простенький алгоритм, но можно жеж не на равенство проверять, а на ближайшую точку, что меньше ТекущаяОбласть.Вверх. Тогда и PgDN, PgUp будет работать. Увы. полоса прокрутки в пролете. Хотя можно и свою прикрутить. полосой регулировки. Приблизительно, как во тут у меня