Табличный документ - группировка колонок с разным форматом строк
Есть необходимость сделать группировку колонок в уже сформированном отчете.
В отчете есть несколько групп строк форматирования:
1-я группа: первая строка и все следующие за телом отчета
2-я группа: тело отчета
Через интерфейс делается без проблем: выделяешь нужную область в теле отчета, Таблица-Группы-Объединить группы, Вертикальная. И вертикальная группировка по 2-й группе появляется и прекрасно работает.
Вопрос: как это сделать программно?
При выполнении:
группировка накладывается на 1-ю группу строк.
Подскажите пожалуйста как обратиться к другой форматированной группе строк.
В отчете есть несколько групп строк форматирования:
1-я группа: первая строка и все следующие за телом отчета
2-я группа: тело отчета
Через интерфейс делается без проблем: выделяешь нужную область в теле отчета, Таблица-Группы-Объединить группы, Вертикальная. И вертикальная группировка по 2-й группе появляется и прекрасно работает.
Вопрос: как это сделать программно?
При выполнении:
ДокументРезультат.Область("C2:C5" ).Сгруппировать()
группировка накладывается на 1-ю группу строк.
Подскажите пожалуйста как обратиться к другой форматированной группе строк.
Прикрепленные файлы:
По теме из базы знаний
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Универсальная печать по шаблонам Word (Печать договоров из 1С БП 3, УНФ 1.6, ЗУП 3, УТ 11, КА 2, ERP 2, ДО 3)
- Получаем уровень группировки ячейки табличного документа
- Загрузка и обновление данных номенклатуры, дополнительных реквизитов и сведений, характеристик и наборов упаковок номенклатуры из файлов формата MS Excel, OpenOfficeCalc (ODS), CSV, TXT, DBF, MXL для 1С: УТ, КА, ЕРП, Розница, БП
- СКД + Макет. Удаление колонки программно
Найденные решения
В качестве шаманства. Следующий код группирует колонки с 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);
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
бред какой-то
... в уже сформированном (только что сделанном) отчете сделать группировку ...
так в сам отчет, в момент формирования вставьте нужные группировки!!!
гораздо проще, а еще лучше переведите на СКД, там в настройках можно будет менять и порядок группировок и состав полей и много чего еще другого.
... в уже сформированном (только что сделанном) отчете сделать группировку ...
так в сам отчет, в момент формирования вставьте нужные группировки!!!
гораздо проще, а еще лучше переведите на СКД, там в настройках можно будет менять и порядок группировок и состав полей и много чего еще другого.
(2) В СКД нельзя настроить вертикальные группировки без использования таблиц. А требуются вертикальные группировки на отдельные группы (папки) выбранных полей в списке, так как полей много и пользователю хочется сначала сформировать отчет, а затем уже быстренько сворачивать или разворачивать.
ну если так,
в общем нормально, только надо знать (или найти) номера колонок которые надо сворачивать
вот простенький пример, (если я правильно понял)
в общем нормально, только надо знать (или найти) номера колонок которые надо сворачивать
вот простенький пример, (если я правильно понял)
Прикрепленные файлы:
ТестОбъединениеЯчеек.epf
(4) спасибо за пример. я немного подправил макет чтобы уточнить свою ситуацию. изменил формат колонок "Строки" теперь при свертке группировки она не работает.
Вот как бы сделать группировку для неё, оставив измененный макет.
Вот как бы сделать группировку для неё, оставив измененный макет.
Прикрепленные файлы:
ТестОбъединениеЯчеекИзм.epf
Отчет уже есть он сделан через СКД, можно сказать без единой строчки кода. Всё устраивает кроме возможности сворачивать группы колонок. В интерфейсе это делается за несколько секунд. И если кто знает как программно обратиться к конкретной группе форматированных строк, то останется только дописать немного пост.обработку результата. А не писать вывод отчета и встраивать нужные группировки.
В качестве шаманства. Следующий код группирует колонки с 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);
Показать
(10) Вставляю Ваш код после вывода отчета СКД в ДокументРезультат в процедуре "ПриКомпоновкеРезультата". При Сч=1 получаю Колонку с заполненным id, цикл прерывается, выполняется условие Если..Тогда и десериализация. Но никаких изменений отчета не вижу при выводе в табличный документ формы отчета (ни группировки колонок, ни изменений по строкам).
Подскажите, пожалуйста, что делаю не так?
Буду также благодарен за ссылки, где можно почитать о механизме, который тут применен.
Подскажите, пожалуйста, что делаю не так?
Буду также благодарен за ссылки, где можно почитать о механизме, который тут применен.
(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);
КонецПроцедуры
ПоказатьИтог формирования СКД во вложении (не меняется). Группировки строк создает СКД
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот