Табличный документ - группировка колонок с разным форматом строк

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

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

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

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


Подскажите пожалуйста как обратиться к другой форматированной группе строк.
Прикрепленные файлы:
Alchemist; +1 Ответить
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
10. SlavaKron 09.02.21 12:29 Сейчас в теме +3 $m
В качестве шаманства. Следующий код группирует колонки с 1 по 3 для первого нестандартного формата строк:
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ДокументРезультат);

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

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

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

ДокументРезультат = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
Показать
Alchemist; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 09.02.21 10:20 Сейчас в теме
бред какой-то
... в уже сформированном (только что сделанном) отчете сделать группировку ...
так в сам отчет, в момент формирования вставьте нужные группировки!!!
гораздо проще, а еще лучше переведите на СКД, там в настройках можно будет менять и порядок группировок и состав полей и много чего еще другого.
3. Manoshkin 346 09.02.21 10:36 Сейчас в теме
(2) В СКД нельзя настроить вертикальные группировки без использования таблиц. А требуются вертикальные группировки на отдельные группы (папки) выбранных полей в списке, так как полей много и пользователю хочется сначала сформировать отчет, а затем уже быстренько сворачивать или разворачивать.
4. soft_wind 09.02.21 11:07 Сейчас в теме
ну если так,
в общем нормально, только надо знать (или найти) номера колонок которые надо сворачивать
вот простенький пример, (если я правильно понял)
Прикрепленные файлы:
ТестОбъединениеЯчеек.epf
7. Manoshkin 346 09.02.21 11:24 Сейчас в теме
(4) спасибо за пример. я немного подправил макет чтобы уточнить свою ситуацию. изменил формат колонок "Строки" теперь при свертке группировки она не работает.
Вот как бы сделать группировку для неё, оставив измененный макет.
Прикрепленные файлы:
ТестОбъединениеЯчеекИзм.epf
5. Manoshkin 346 09.02.21 11:15 Сейчас в теме
Отчет уже есть он сделан через СКД, можно сказать без единой строчки кода. Всё устраивает кроме возможности сворачивать группы колонок. В интерфейсе это делается за несколько секунд. И если кто знает как программно обратиться к конкретной группе форматированных строк, то останется только дописать немного пост.обработку результата. А не писать вывод отчета и встраивать нужные группировки.
6. soft_wind 09.02.21 11:17 Сейчас в теме
вот команды из примера
ТабДок.Область(,3,,3).Сгруппировать();
ТабДок.Область(,4,,5).Сгруппировать();

отлично работают
8. Manoshkin 346 09.02.21 11:39 Сейчас в теме
(6) да, верно. но только если у всех строк единый формат колонок. к сожалению при выводе СКД в разных группах строк формат разный. я описал в ответе (7) на (4)-е сообщение.
9. soft_wind 09.02.21 12:02 Сейчас в теме
(8) да, интересный эффект
ну что-же, лишний раз убеждает, что 1С не любит заднепроходных решений ...
10. SlavaKron 09.02.21 12:29 Сейчас в теме +3 $m
В качестве шаманства. Следующий код группирует колонки с 1 по 3 для первого нестандартного формата строк:
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ДокументРезультат);

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

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

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

ДокументРезультат = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
Показать
Alchemist; +1 Ответить
11. Manoshkin 346 09.02.21 12:35 Сейчас в теме
(10) да, действительно шаманство и оно работает!
12. Manoshkin 346 09.02.21 12:36 Сейчас в теме
13. roman_sktm 18.01.23 12:29 Сейчас в теме
(10) Вставляю Ваш код после вывода отчета СКД в ДокументРезультат в процедуре "ПриКомпоновкеРезультата". При Сч=1 получаю Колонку с заполненным id, цикл прерывается, выполняется условие Если..Тогда и десериализация. Но никаких изменений отчета не вижу при выводе в табличный документ формы отчета (ни группировки колонок, ни изменений по строкам).

Подскажите, пожалуйста, что делаю не так?
Буду также благодарен за ссылки, где можно почитать о механизме, который тут применен.
14. SlavaKron 18.01.23 14:05 Сейчас в теме
(13) А покажите код процедуры ПриКомпоновкеРезультата.
где можно почитать о механизме
К сожалению, данный механизм не документирован – приходится методом проб и ошибок подбирать решение.
15. roman_sktm 18.01.23 14:14 Сейчас в теме
(14)

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанных"));
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(Макет);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	Объект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С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)