При разработке отчетов на системе компоновки данных (СКД) часто возникает задача фиксации областей (например, заголовков или ключевых колонок), чтобы при горизонтальной прокрутке данные оставались на виду. Хотя в настройках СКД предусмотрена опция «Фиксация слева», на практике она не всегда дает нужный результат, особенно в сложных отчетах типа «Список». Давайте разберем, как решить эту проблему программными методами.
Перед тем как переходить к коду, важно проанализировать причины неработоспособности стандартного механизма. Основные факторы, влияющие на сбой фиксации:
Если стандартные настройки не помогают, мы можем полностью взять под контроль процесс вывода отчета в табличный документ. Для этого нам необходимо переопределить стандартное поведение в обработчике ПриКомпоновкеРезультата.
Рассмотрим пошаговый алгоритм реализации:
ПриКомпоновкеРезультата.ФиксацияСлева для объекта ТабличныйДокумент.Пример программного кода для реализации фиксации двух колонок:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Устанавливаем фиксацию двух колонок слева
ДокументРезультат.ФиксацияСлева = 2;
КонецПроцедуры
Если после вставки кода фиксация все равно работает некорректно (например, фиксируется не то количество колонок или фиксируются заголовки вместо данных), необходимо провести «чистку» структуры.
Анализ и оптимизация:
ПараметрыВывода, установив параметр вывода в значение НеВыводить.ФиксацияСлева соответствует реальному количеству колонок в результирующем ТабличномДокументе.Если задача требует фиксации колонок в более сложных отчетах, где структура динамически меняется, рассмотрите следующие советы:
ДокументРезультат, установите точку останова и изучите содержимое ДокументРезультат.Область(), чтобы понять, какие именно колонки в текущей реализации занимают левую часть.Помните, что чистота структуры СКД — залог предсказуемого вывода. Удаление лишних неиспользуемых группировок часто является единственным верным решением, которое устраняет конфликты при отрисовке отчета платформой 1С.