Есть необходимость сделать группировку колонок в уже сформированном отчете.
В отчете есть несколько групп строк форматирования:
1-я группа: первая строка и все следующие за телом отчета
2-я группа: тело отчета

Через интерфейс делается без проблем: выделяешь нужную область в теле отчета, Таблица-Группы-Объединить группы, Вертикальная. И вертикальная группировка по 2-й группе появляется и прекрасно работает.

Вопрос: как это сделать программно?
При выполнении:
```1c
    ДокументРезультат.Область("C2:C5" ).Сгруппировать()
```

группировка накладывается на 1-ю группу строк.

Подскажите пожалуйста как обратиться к другой форматированной группе строк.
---
В качестве шаманства. Следующий код группирует колонки с 1 по 3 для первого нестандартного формата строк:

```1c
    ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ДокументРезультат);

    Колонки = ОбъектXDTO.columns;
    Колонка = Неопределено;
    Для Сч = 0 по Колонки.Количество() - 1 Цикл
    Если ЗначениеЗаполнено(Колонки[Сч].id) Тогда
    Колонка = Колонки[Сч];
    Прервать;
    КонецЕсли;
    КонецЦикла;

    ПерваяКолонка = 1;
    ПоследняяКолонка = 3;

    Если Колонка <> Неопределено Тогда
    НоваяГруппировка = ФабрикаXDTO.Создать(ОбъектXDTO.hg.ВладеющееСвойство.Тип);
    НоваяГруппировка.b = ПерваяКолонка - 1;
    НоваяГруппировка.e = ПоследняяКолонка - 1;
    НоваяГруппировка.columnsID = Колонка.id;
    НоваяГруппировка = ОбъектXDTO.hg.Добавить(НоваяГруппировка);
    КонецЕсли;

    ДокументРезультат = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
```
---
бред какой-то
... в уже сформированном (только что сделанном) отчете сделать группировку ...
так в сам отчет, в момент формирования вставьте нужные группировки!!!
гораздо проще, а еще лучше переведите на СКД, там в настройках можно будет менять и порядок группировок и состав полей и много чего еще другого.
---
В СКД нельзя настроить вертикальные группировки без использования таблиц. А требуются вертикальные группировки на отдельные группы (папки) выбранных полей в списке, так как полей много и пользователю хочется сначала сформировать отчет, а затем уже быстренько сворачивать или разворачивать.
---
ну если так,
в общем нормально, только надо знать (или найти) номера колонок которые надо сворачивать
вот простенький пример, (если я правильно понял)
---
спасибо за пример. я немного подправил макет чтобы уточнить свою ситуацию. изменил формат колонок "Строки" теперь при свертке группировки она не работает.
Вот как бы сделать группировку для неё, оставив измененный макет.
---
Отчет уже есть он сделан через СКД, можно сказать без единой строчки кода. Всё устраивает кроме возможности сворачивать группы колонок. В интерфейсе это делается за несколько секунд. И если кто знает как программно обратиться к конкретной группе форматированных строк, то останется только дописать немного пост.обработку результата. А не писать вывод отчета и встраивать нужные группировки.
---
вот команды из примера
  ТабДок.Область(,3,,3).Сгруппировать();
  ТабДок.Область(,4,,5).Сгруппировать();

отлично работают
---
да, верно. но только если у всех строк единый формат колонок. к сожалению при выводе СКД в разных группах строк формат разный. я описал в ответе (7) на (4)-е сообщение.
---
да, интересный эффект
ну что-же, лишний раз убеждает, что 1С не любит заднепроходных решений ...
---
В качестве шаманства. Следующий код группирует колонки с 1 по 3 для первого нестандартного формата строк:

```1c
    ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ДокументРезультат);

    Колонки = ОбъектXDTO.columns;
    Колонка = Неопределено;
    Для Сч = 0 по Колонки.Количество() - 1 Цикл
    Если ЗначениеЗаполнено(Колонки[Сч].id) Тогда
    Колонка = Колонки[Сч];
    Прервать;
    КонецЕсли;
    КонецЦикла;

    ПерваяКолонка = 1;
    ПоследняяКолонка = 3;

    Если Колонка <> Неопределено Тогда
    НоваяГруппировка = ФабрикаXDTO.Создать(ОбъектXDTO.hg.ВладеющееСвойство.Тип);
    НоваяГруппировка.b = ПерваяКолонка - 1;
    НоваяГруппировка.e = ПоследняяКолонка - 1;
    НоваяГруппировка.columnsID = Колонка.id;
    НоваяГруппировка = ОбъектXDTO.hg.Добавить(НоваяГруппировка);
    КонецЕсли;

    ДокументРезультат = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
```
---
да, действительно шаманство и оно работает!
---
Спасибо большущее!
---
Вставляю Ваш код после вывода отчета СКД в ДокументРезультат в процедуре "ПриКомпоновкеРезультата". При Сч=1 получаю Колонку с заполненным id, цикл прерывается, выполняется условие Если..Тогда и десериализация. Но никаких изменений отчета не вижу при выводе в табличный документ формы отчета (ни группировки колонок, ни изменений по строкам).

Подскажите, пожалуйста, что делаю не так?
Буду также благодарен за ссылки, где можно почитать о механизме, который тут применен.
---
А покажите код процедуры ПриКомпоновкеРезультата.
где можно почитать о механизме К сожалению, данный механизм не документирован – приходится методом проб и ошибок подбирать решение.
---
```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанных"));
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ДокументРезультат);

    Колонки = ОбъектXDTO.columns;
    Колонка = Неопределено;
    Для Сч = 0 по Колонки.Количество() - 1 Цикл
    Если ЗначениеЗаполнено(Колонки[Сч].id) Тогда
    Колонка = Колонки[Сч];
    Прервать;
    КонецЕсли;
    КонецЦикла;

    ПерваяКолонка = 1;
    ПоследняяКолонка = 3;

    Если Колонка <> Неопределено Тогда
    НоваяГруппировка = ФабрикаXDTO.Создать(ОбъектXDTO.hg.ВладеющееСвойство.Тип);
    НоваяГруппировка.b = ПерваяКолонка - 1;
    НоваяГруппировка.e = ПоследняяКолонка - 1;
    НоваяГруппировка.columnsID = Колонка.id;
    НоваяГруппировка = ОбъектXDTO.hg.Добавить(НоваяГруппировка);
    КонецЕсли;

    ДокументРезультат = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);

    КонецПроцедуры
```

Итог формирования СКД во вложении (не меняется). Группировки строк создает СКД