Как расположить группировки горизонтально и объединить ячейки в отчетах 1С на СКД?

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

Когда мы работаем с отчетами в 1С, часто возникает потребность отобразить данные в виде, где группировки расположены горизонтально, а некоторые ячейки, содержащие одинаковые значения, должны быть объединены. Это позволяет сделать отчет более компактным и наглядным. Рассмотрим, как добиться такого результата, используя возможности Системы компоновки данных (СКД) и дополнительные программные подходы.

Горизонтальное расположение группировок в СКД: Базовые методы

Прежде всего, давайте разберем, как стандартными средствами СКД можно расположить группировки горизонтально. Этот функционал достаточно гибок, но имеет свои ограничения. 1. **Использование измерения "Колонки" в структуре отчета:** Если мы хотим, чтобы определенные этапы или характеристики выводились как колонки, а не как строки, нам необходимо добавить соответствующие поля в измерение "Колонки" структуры отчета. * Откройте настройки отчета в СКД. * Перейдите на вкладку "Структура". * Добавьте элемент "Таблица". * Внутри элемента "Таблица" вы увидите две области: "Строки" и "Колонки". Перетащите или добавьте те поля, которые должны формировать горизонтальные группировки, в область "Колонки". Поля, которые должны формировать вертикальные группировки, оставьте в области "Строки". Это базовый и наиболее очевидный способ для горизонтального разворота данных. 2. **Настройка "Расположение полей группировок = Отдельно":** В настройках группировки СКД есть параметр "Расположение полей группировок". Если мы установим его в значение "Отдельно", то каждое поле группировки будет выводиться в отдельной области отчета, расположенной слева направо. * В настройках структуры отчета выберите нужную группировку. * Перейдите в свойства выбранной группировки. * Найдите свойство "Расположение полей группировок" и установите его в "Отдельно". Это может помочь визуально разделить и расположить группировки горизонтально, создавая более читабельный макет. Однако, важно понимать, что эти стандартные методы СКД, хоть и позволяют расположить данные горизонтально, не решают проблему объединения ячеек, содержащих повторяющиеся данные. Например, если у нас есть несколько строк, относящихся к одному "Заказу", стандартные настройки не объединят ячейки с номером заказа в одну большую ячейку.

Почему стандартные настройки СКД не объединяют ячейки?

Мы выяснили, что стандартные возможности СКД отлично справляются с горизонтальным расположением группировок, но не умеют динамически объединять ячейки в табличном документе отчета на основе повторяющихся значений данных. Это является одним из ключевых ограничений СКД, когда речь заходит о создании сложных "накрывающих" шапок или объединении полей. * **Условное оформление:** Иногда возникает идея использовать "Условное оформление" для имитации объединенных ячеек. Например, можно скрыть границы повторяющихся ячеек. Однако, мы должны проанализировать эту ситуацию: условное оформление может лишь изменить внешний вид ячеек, но не способно физически их объединить. Кстати, если ваша задача оформления включает работу с графикой, может быть полезна склейка нескольких картинок для вывода в одну ячейку СКД, что позволяет обойти некоторые ограничения визуализации данных. При использовании стандартного оформления могут возникнуть следующие проблемы: * При выделении мышью пользователь будет видеть отдельные ячейки. * При экспорте в Excel (.xls, .xlsx) ячейки не будут объединены. * Могут возникнуть артефакты с границами. Таким образом, для достижения желаемого эффекта с реальным объединением ячеек нам потребуются более продвинутые методы.

Эффективные подходы к объединению ячеек и сложным макетам

Для реализации динамического объединения ячеек и создания по-настоящему сложных макетов, которые выходят за рамки стандартных возможностей СКД, мы можем рассмотреть несколько подходов.

  1. Постобработка табличного документа

    Это один из наиболее распространенных способов. Идея заключается в том, что сначала СКД формирует отчет, а затем мы программно обходим документ и объединяем ячейки. В процессе такой обработки также часто выполняется программное изменение заголовка группировки, если стандартными средствами СКД не удается добиться нужного (например, пустого) заголовка.

    Принцип работы:

    После того как СКД сгенерировала отчет и он представлен в виде объекта ТабличныйДокумент, мы используем метод ОбъединитьЯчейки().

    Пример кода (концептуальный):

    
    &НаКлиенте
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
        СтандартнаяОбработка = Истина; 
    
        // Пример для объединения ячеек в колонке 1 по повторяющимся значениям
        Если ДокументРезультат.Области.Количество() = 0 Тогда
            Возврат; 
        КонецЕсли;
    
        НачальнаяСтрокаОбъединения = 1; 
        Для ТекущаяСтрока = 2 По ДокументРезультат.ВысотаТаблицы Цикл
            ЗначениеТекущейЯчейки = ДокументРезультат.Область(ТекущаяСтрока, 1).Текст;
            ЗначениеПредыдущейЯчейки = ДокументРезультат.Область(ТекущаяСтрока - 1, 1).Текст;
    
            Если ЗначениеТекущейЯчейки <> ЗначениеПредыдущейЯчейки Тогда
                Если НачальнаяСтрокаОбъединения < ТекущаяСтрока - 1 Тогда
                    ДокументРезультат.ОбъединитьЯчейки(НачальнаяСтрокаОбъединения, 1, ТекущаяСтрока - 1, 1);
                КонецЕсли;
                НачальнаяСтрокаОбъединения = ТекущаяСтрока;
            КонецЕсли;
        КонецЦикла;
    
        // Объединяем последний блок
        Если НачальнаяСтрокаОбъединения < ДокументРезультат.ВысотаТаблицы Тогда
            ДокументРезультат.ОбъединитьЯчейки(НачальнаяСтрокаОбъединения, 1, ДокументРезультат.ВысотаТаблицы, 1);
        КонецЕсли;
    КонецПроцедуры
    
  2. Поэлементный вывод результата

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

    Преимущества:

    • Полный контроль: Способ незаменим для уникальных печатных форм. Мы можем формировать любые заголовки и объединять ячейки по любым правилам.

    Недостатки:

    • Высокая трудоемкость: Требует детальной проработки логики вывода.
  3. Использование макетов СКД для фиксированных областей

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

    Преимущества:

    • Часть СКД: Удобно использовать для статических частей отчета.
    • Реальное объединение: Ячейки в макете будут объединены.

    Недостатки:

    • Не подходит для динамического объединения: Метод не работает, если объединение должно зависеть от меняющихся данных в строках.

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

← На главную