Объединить заголовки табличного документа
Теги: 1С,Заголовки,ТабличныйДокумент

Нужно использовать функцию после формирования табличного документа

# Код реализации

```1c
Функция ОбработатьЗаголовки(ТабДок)
    ВысотаФ = ТабДок.ФиксацияСверху;
    ШиринаФ = ТабДок.ФиксацияСлева;
    ШиринаТаблицы = ТабДок.ШиринаТаблицы;
    МассивМассивовОбъединяемыхОбластей = Новый Массив;
    МассивОбъединяемыхОбластей = Новый Массив;
    НачальнаяКолонка = ШиринаФ + 1;
    КонечнаяКолонка = ШиринаТаблицы;
    МассивОбъединяемыхОбластей.Добавить(Новый Структура("НачальнаяКолонка, КонечнаяКолонка", НачальнаяКолонка, КонечнаяКолонка));
    МассивМассивовОбъединяемыхОбластей.Добавить(МассивОбъединяемыхОбластей);
    Строка = 1;
    Пока Строка <= ВысотаФ Цикл
        Если Строка = МассивМассивовОбъединяемыхОбластей.Количество() Тогда
            Для Каждого ОбъединяемаяОбласть Из МассивМассивовОбъединяемыхОбластей[Строка-1] Цикл
                НачальнаяКолонка = ОбъединяемаяОбласть.НачальнаяКолонка;
                КонечнаяКолонка = ОбъединяемаяОбласть.КонечнаяКолонка;
                Колонка = НачальнаяКолонка;
                Пока Колонка <= КонечнаяКолонка Цикл
                    Если НЕ ОбъединятьЯчейки(ТабДок, Строка, Колонка) ИЛИ Колонка = КонечнаяКолонка Тогда
                        Если Колонка <> НачальнаяКолонка Тогда
                            МассивОбъединяемыхОбластей.Добавить(Новый Структура("НачальнаяКолонка, КонечнаяКолонка", НачальнаяКолонка, Колонка));
                        КонецЕсли;
                        НачальнаяКолонка = Колонка + 1;
                    КонецЕсли;
                    Колонка = Колонка + 1;
                КонецЦикла;
            КонецЦикла;
            Если МассивОбъединяемыхОбластей.Количество() = 0 И ОбъединяемаяОбласть.НачальнаяКолонка = ШиринаФ + 1 И ОбъединяемаяОбласть.КонечнаяКолонка = ШиринаТаблицы Тогда
                МассивОбъединяемыхОбластей.Добавить(Новый Структура("НачальнаяКолонка, КонечнаяКолонка", ОбъединяемаяОбласть.НачальнаяКолонка, ОбъединяемаяОбласть.КонечнаяКолонка));
            КонецЕсли;
            МассивМассивовОбъединяемыхОбластей.Добавить(МассивОбъединяемыхОбластей);
            МассивОбъединяемыхОбластей = Новый Массив;
        КонецЕсли;
        Строка = Строка + 1;
    КонецЦикла;
    Строка = 1;
    Пока Строка < МассивМассивовОбъединяемыхОбластей.Количество() Цикл
        Для Каждого ОбъединяемаяОбласть Из МассивМассивовОбъединяемыхОбластей[Строка] Цикл
            ТекстЗаголовка = ТабДок.Область(Строка, ОбъединяемаяОбласть.НачальнаяКолонка).Текст;
            ОбъединяемаяОбласть = ТабДок.Область(Строка, ОбъединяемаяОбласть.НачальнаяКолонка, Строка, ОбъединяемаяОбласть.КонечнаяКолонка);
            ОбъединяемаяОбласть.Объединить();
            ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
            ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
        КонецЦикла;
        Строка = Строка + 1;
    КонецЦикла;
    Возврат ТабДок;
КонецФункции

Функция ОбъединятьЯчейки(ТабДок, Строка, НачальнаяКолонка)
    Ячейка = ТабДок.Область(Строка, НачальнаяКолонка);
    ЯчейкаСлед = ТабДок.Область(Строка, НачальнаяКолонка+1);
    Если ПустаяСтрока(Ячейка.Текст) Тогда
        Возврат ложь
    ИначеЕсли
        Ячейка.Текст = ЯчейкаСлед.Текст
            И Ячейка.Верх = Ячейка.Низ И ЯчейкаСлед.Верх = ЯчейкаСлед.Низ Тогда
        Возврат Истина;
    Иначе
        Возврат ложь;
    КонецЕсли;
КонецФункции
```

# Примечания

- Вот бы еще написать для чего это нужно и в каких случаях может пригодиться.

- (1) Константин Аванесов,
Привет! Это нужно, чтобы не склеивались колонки с одинаковым названием, но подчиненные разным верхним группам)