Как программно зафиксировать колонки в отчете СКД, если стандартная настройка не работает?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на системе компоновки данных (СКД) часто возникает задача фиксации областей (например, заголовков или ключевых колонок), чтобы при горизонтальной прокрутке данные оставались на виду. Хотя в настройках СКД предусмотрена опция «Фиксация слева», на практике она не всегда дает нужный результат, особенно в сложных отчетах типа «Список». Давайте разберем, как решить эту проблему программными методами.

Почему стандартная фиксация может не срабатывать

Перед тем как переходить к коду, важно проанализировать причины неработоспособности стандартного механизма. Основные факторы, влияющие на сбой фиксации:

  1. Структура отчета: Наличие неиспользуемых группировок или служебных полей, которые при формировании отчета добавляют лишние строки или смещают ячейки табличного документа.
  2. Автоматическое управление: Когда СКД самостоятельно определяет параметры вывода, она может игнорировать настройки пользователя.
  3. Сложные области: Вывод параметров отчета или служебной информации в шапку таблицы изменяет структуру документа «на лету», что приводит к некорректному расчету индекса колонок для фиксации.

Решение проблемы через программный вывод

Если стандартные настройки не помогают, мы можем полностью взять под контроль процесс вывода отчета в табличный документ. Для этого нам необходимо переопределить стандартное поведение в обработчике ПриКомпоновкеРезультата.

Рассмотрим пошаговый алгоритм реализации:

  1. В модуле объекта отчета (или в модуле формы) создадим обработчик ПриКомпоновкеРезультата.
  2. Отключим стандартную обработку, чтобы СКД не пыталась применить свои настройки вывода.
  3. Вручную выполним компоновку макета и выведем его в результирующий табличный документ.
  4. Установим свойство ФиксацияСлева для объекта ТабличныйДокумент.

Пример программного кода для реализации фиксации двух колонок:


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

Как оптимизировать структуру отчета для корректной работы

Если после вставки кода фиксация все равно работает некорректно (например, фиксируется не то количество колонок или фиксируются заголовки вместо данных), необходимо провести «чистку» структуры.

Анализ и оптимизация:

Рекомендации по отладке

Если задача требует фиксации колонок в более сложных отчетах, где структура динамически меняется, рассмотрите следующие советы:

  1. Используйте отладку: после вывода отчета в ДокументРезультат, установите точку останова и изучите содержимое ДокументРезультат.Область(), чтобы понять, какие именно колонки в текущей реализации занимают левую часть.
  2. Если отчет формируется в фоновом режиме, убедитесь, что логика программной фиксации выполняется именно на этапе подготовки финального представления документа для пользователя.
  3. Если стандартная модель «Списка» кажется слишком гибкой и непредсказуемой для верстки, попробуйте перевести отчет в режим «Таблицы» (в терминах СКД), где группировки колонок жестко заданы, что делает фиксацию более стабильной.

Помните, что чистота структуры СКД — залог предсказуемого вывода. Удаление лишних неиспользуемых группировок часто является единственным верным решением, которое устраняет конфликты при отрисовке отчета платформой 1С.

← На главную