на форме отчете объединить ячейки в табличном документе
По теме из базы знаний
- Полезные процедуры по работе с СКД и табличными документами (часть 1)
- Полезные процедуры по работе с СКД и табличными документами (часть 2)
- Получаем уровень группировки ячейки табличного документа
- Варианты применения СКД вне отчетов в отраслевых конфигурациях
- Отбор/фильтр в отчетах/СКД/обработках 1C: БП, УТ, ERP, Кронос: WMS по файлу Excel, текстовому файлу или списку текстовых строк (номер документа, артикул, ИНН, QR-код, штрих-код, наименование)
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(10) есть вот это
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
ПлановыеПлатежиОД = Новый СписокЗначений;
ПлановыеПлатежиОД.Добавить(Справочники.крВидыОбязательств.ОсновнойДолг);
ПлановыеПлатежиОД.Добавить(Справочники.крВидыОбязательств.ОсновнойДолгмедиация);
ПлановыеПлатежиОД.Добавить(Справочники.крВидыОбязательств.ОсновнойДолгРеабилитация);
ПлановыеПлатежиОД.Добавить(Справочники.крВидыОбязательств.НайтиПоНаименованию("Основной долг по решению суда"));
ПлановыеПлатежиВЗН = Новый СписокЗначений;
ПлановыеПлатежиВЗН.Добавить(Справочники.крВидыОбязательств.Вознаграждение);
ПлановыеПлатежиВЗН.Добавить(Справочники.крВидыОбязательств.ВознаграждениеРеабилитация);
ПлановыеПлатежиВЗН.Добавить(Справочники.крВидыОбязательств.ВознаграждениеМедиация);
ПлановыеПлатежиВЗН.Добавить(Справочники.крВидыОбязательств.ВознаграждениеРассроченное);
ПлановыеПлатежиВЗН.Добавить(Справочники.крВидыОбязательств.ВознаграждениеСубсидируемое);
ПлановыеПлатежиВЗН.Добавить(Справочники.крВидыОбязательств.НайтиПоНаименованию("Вознаграждение по решению суда"));
БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПлановыеПлатежиОД", ПлановыеПлатежиОД, Истина);
БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(КомпоновщикНастроек, "ПлановыеПлатежиВЗН", ПлановыеПлатежиВЗН, Истина);
КонецПроцедуры
Показать
(11) Предложенное ниже решение не претендует на правильное, т.к. собрано "на коленке". Но возможно оно поможет Вам выработать свое. Идея заключается в том, чтобы "вручную" сформировать отчет и доработать полученный документ. В эту же процедуру (ПриКомпоновкеРезультата) добавьте следующий код:
СтандартнаяОбработка = Ложь;
// ФОРМИРОВАНИЕ ОТЧЕТА
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// ОБРАБОТКА РЕЗУЛЬТАТА
ОбъединяемыеКолонки = Новый Массив;
ОбъединяемыеКолонки.Добавить(1); // номер колонки "Контрагент"
ОбъединяемыеКолонки.Добавить(3); // номер колонки "Номер"
ОбъединяемыеКолонки.Добавить(5); // номер колонки "Остаток ОД"
ТекущаяСтрока = ДокументРезультат.ФиксацияСверху;
Пока ТекущаяСтрока < ДокументРезультат.ВысотаТаблицы Цикл
ТекущаяСтрока = ТекущаяСтрока + 1;
ИтоговоеКоличествоСтрок = Неопределено;
Для каждого НомерКолонки Из ОбъединяемыеКолонки Цикл
ТекущийТекст = ДокументРезультат.Область(ТекущаяСтрока,НомерКолонки).Текст;
// Считаем, сколько раз подряд повторяется текущий текст.
КоличествоСтрок = 0;
Пока ТекущийТекст = ДокументРезультат.Область(ТекущаяСтрока + КоличествоСтрок + 1,НомерКолонки).Текст Цикл
КоличествоСтрок = КоличествоСтрок + 0;
КонецЦикла;
// Среди всех анализируемых колонок возьмем наименьшее значение количества повторяющихся строк
Если ИтоговоеКоличествоСтрок = Неопределено Или КоличествоСтрок < ИтоговоеКоличествоСтрок Тогда
ИтоговоеКоличествоСтрок = КоличествоСтрок;
КонецЕсли;
КонецЦикла;
// Во всех колонках массива "ОбъединяемыеКолонки" есть повторяющиеся подряд значения.
Если ИтоговоеКоличествоСтрок > 1 Тогда
НачалоОбъединения = ТекущаяСтрока;
КонецОбъединения = НачалоОбъединения + ИтоговоеКоличествоСтрок - 1;
Для каждого НомерКолонки Из ОбъединяемыеКолонки Цикл
ОбъединяемаяОбласть = ДокументРезультат.Область(НачалоОбъединения, НомерКолонки, КонецОбъединения, НомерКолонки);
ОбъединяемаяОбласть.Объединить();
КонецЦикла;
ТекущаяСтрока = КонецОбъединения;
КонецЕсли;
КонецЦикла;
Показать
(12) Переделала немного, для разноуровнего объединения в каждой колонке:
ОбъединяемыеКолонки = Новый Массив;
ОбъединяемыеКолонки.Добавить(2); // номер колонки "Дапартамент"
ОбъединяемыеКолонки.Добавить(3); // номер колонки "ОП"
Для каждого НомерКолонки Из ОбъединяемыеКолонки Цикл
ТекущаяСтрока = 18;
Пока ТекущаяСтрока < ДокументРезультат.ВысотаТаблицы Цикл
ТекущаяСтрока = ТекущаяСтрока + 1;
ИтоговоеКоличествоСтрок = 0;
ТекущийТекст = ДокументРезультат.Область(ТекущаяСтрока,НомерКолонки).Текст;
Если ТекущийТекст = "" Тогда
Продолжить;
КонецЕсли;
// Считаем, сколько раз подряд повторяется текущий текст.
КоличествоСтрок = 0;
Пока ТекущийТекст = ДокументРезультат.Область(ТекущаяСтрока + КоличествоСтрок,НомерКолонки).Текст Цикл
КоличествоСтрок = КоличествоСтрок + 1;
КонецЦикла;
// Среди всех анализируемых колонок возьмем наименьшее значение количества повторяющихся строк
Если ИтоговоеКоличествоСтрок = 0 Или КоличествоСтрок < ИтоговоеКоличествоСтрок Тогда
ИтоговоеКоличествоСтрок = КоличествоСтрок;
КонецЕсли;
// Во всех колонках массива "ОбъединяемыеКолонки" есть повторяющиеся подряд значения.
Если ИтоговоеКоличествоСтрок > 1 Тогда
НачалоОбъединения = ТекущаяСтрока;
КонецОбъединения = НачалоОбъединения + ИтоговоеКоличествоСтрок - 1;
ОбъединяемаяОбласть = ДокументРезультат.Область(НачалоОбъединения, НомерКолонки, КонецОбъединения, НомерКолонки);
ОбъединяемаяОбласть.Объединить();
ТекущаяСтрока = КонецОбъединения;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот