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

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

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

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

Способ 1. Использование вложенных группировок для имитации порядка

Этот метод считается наиболее гибким и не требует написания программного кода или создания сложных макетов. Мы обманем стандартный механизм вывода, разделив ресурсы на разные логические блоки внутри одной родительской группировки по периоду.

Алгоритм настройки:

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

Проанализируем ситуацию: при такой структуре СКД будет воспринимать первые два поля как единый блок, который можно скрыть, а поле "К выплате" останется на своем месте (третьим), так как оно находится в следующей по порядку группировке того же уровня.

Способ 2. Создание собственного макета группировки

Если манипуляции со структурой не дают нужного визуального эффекта (например, появляются лишние заголовки), воспользуемся самым мощным инструментом — Макетами. Это позволит нам жестко зафиксировать каждую ячейку в таблице.

Рассмотрим по шагам создание макета для группировки колонок:

  1. Откроем вкладку «Макеты» в схеме компоновки данных.
  2. Нажмем «Добавить макет группировки». Выберем нашу группировку ПериодРегистрации и укажем тип макета — Заголовок или Итог (в зависимости от того, где выводится значение).
  3. В области табличного документа нарисуем шапку, состоящую из трех колонок. Важно: для ячеек, которые должны сворачиваться, мы не будем делать дополнительных настроек, а для колонки "К выплате" определим параметр.
  4. Для каждой ячейки укажем Параметр. Например, для третьей ячейки это будет СуммаКВыплате.
  5. Свяжем параметры макета с полями СКД (ресурсами).

Посмотрим на пример настройки области данных. В макете ресурсов мы можем явно указать порядок следования полей. СКД при выводе будет использовать нашу «сетку», и колонка "К выплате" будет всегда отрисовываться в третьем столбце макета, независимо от состояния «плюсика» группировки.

Способ 3. Программная корректировка в модуле отчета

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

Суть метода заключается в том, чтобы после стандартного формирования отчета программно управлять группировками колонок. Мы можем найти области, соответствующие первым двум колонкам, и объединить их в одну группу ТабличногоДокумента, оставив третью колонку за пределами этой группы.


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

При использовании этого метода мы получаем полный контроль над поведением кнопок развертывания. Мы можем программно «зашить», что сворачиваться должны именно колонки 1 и 2, а колонка 3 (наш ресурс "К выплате") будет оставаться стационарной справа от них.

Способ 4. Настройка «Расположения ресурсов» и «Автополя»

Часто проблема кроется в том, что в списке выбранных полей группировки стоит Автополе. Оно автоматически подтягивает все ресурсы в том порядке, в котором они определены на вкладке «Ресурсы» или «Наборы данных».

Выясним причину смещения колонок и устраним её:

  1. Выделим группировку ПериодРегистрации в настройках.
  2. Перейдем на вкладку «Выбранные поля».
  3. Снимем флаг «Использовать родительские настройки».
  4. Удалим Автополе.
  5. Вручную добавим ресурсы в нужном порядке: "Итого начислено", "Итого удержано", "К выплате".
  6. Перейдем на вкладку «Другие настройки» этой же группировки.
  7. Найдем параметр «Расположение ресурсов». Попробуем установить значение После всех полей.

Важный момент: если мы хотим, чтобы при сворачивании оставалось именно третье поле, нам нужно убедиться, что оно выводится как Общий итог по горизонтали для данной группировки. В СКД можно настроить вывод итогов так, чтобы они заменяли собой детальные данные при закрытии группы. Для этого в поле «Расположение итогов по горизонтали» выберите Конец или Заменять.

Резюме и рекомендации

Подводя итог, можно сказать, что решение задачи зависит от сложности структуры вашего отчета. Если отчет простой, достаточно отключить Автополе и вручную упорядочить ресурсы в группировке (Способ 4). Если же вам нужно строгое поведение «первые две скрылись, третья осталась», то оптимальным выбором будет Способ 1 с вложенными группировками или создание Макта (Способ 2).

Помните, что использование Макет группировки — это «тяжелая артиллерия». Этот метод гарантирует результат, но делает отчет менее гибким к изменениям пользователем в режиме «Изменить вариант». Всегда старайтесь сначала решить задачу через настройки структуры компоновщика, так как это сохранит возможность динамической настройки отчета конечным пользователем.

← На главную