SKD. Как да обедините заглавия на групи родителски колони в таблица

Имаме доклад като:

Трябва да комбинирате едни и същи заглавки за групиране.

Предлагам да извършите тази операция върху генерирания документ с електронна таблица, като използвате следния код:

Вмъкваме повикване след формирането на документ с електронна таблица:

Резултатът е показан по-долу:

Решението претендира за универсалност. Но основният недостатък на този метод е, че е трудно да се определят предварително началната и крайната област на търсене, тъй като процедурата може да работи и да обедини всякакви други съседни идентични клетки. Ако имате някакви идеи как да идентифицирате уникално групиращите заглавни клетки, моля, пишете. Междувременно този код може да се използва с някои модификации за всеки отделен случай.

Добавен е модифициран файл за 8.2, където е предоставен модифициран пример за няколко ресурса (индикатори) - благодарение на Евгений.

Изтегляне на файлове

Специални оферти

групи

колони

заглавия

колони

родителски

обедините

колони

заглавия

групи

обедините

обедините

Това решение има за цел да въведе ред във вертикалните групировки в SKD. Ако тази опция може да се използва другаде, нямам нищо против.

Благодаря за алгоритъма. Има малка добавка. За да направите заглавка на колони, а не просто да обедините идентични клетки и да не оставите сумите за групиране отляво на колоните, можете да използвате групиране на полета. Това е като на моята снимка. След това, когато използвате add. код за обединяване на клетки, можете да получите красива таблица със заглавки на колони.

Попаднал случайно. Не разбрах нещо (може би внедряването е свързано с "-5" години назад? Или е свързано със специални изисквания за формата на отчета) защото, добре, няма проблем с показването на групировки

настройка „местоположениегрупиране - заедно" дава красив резултат (е, на платформа 8.3. със сигурност, въпреки факта, че по подразбиране означава "заедно" и нищо не трябва да се конфигурира)

(37) graZy, Сега проверих на платформата 8.3.4.465 (нямаше друга под ръка), проблемът си остана.

(експериментирано по моя доклад)

фиг. 1 "разположение на групиращите полета заедно" фиг. 2 "местоположение на групиращите полета поотделно"

Преработена е функционалността от публикация 32. Проблемът е, че ако вече има обединени клетки в колоните, тогава механизмът не работи. Направих универсален shnyag, който комбинира дори обединени клетки в списък:

(43) [email protected], (43) [email protected], Добър ден.

За да направите настройките дефинирани от потребителя, трябва вместо това: Настройки = SettingsComposer.Settings;

Трябва да напишете това: Settings=SettingsComposer.GetSettings();

// Връща броя на клетките за обединяване Функция MergeCells(TabDoc, indStr, indCol, TextToMerge) Cell = TabDoc.Area(indStr, indCol);

If EmptyString(Cell.Text) Then Върни 0; EndIf;

If TextToCombine.Find(Cell.Text) = Undefined Then Върни 0; EndIf;

Брой колони = 0; За NextColumn = indCol+1 от TabDoc.TableWidth Loop CellNext = TabDoc.Area(indStr, NextColumn); //Проверете дали текстът е един от посочените в TextToMerge Ако Cell.Text = CellNext.Text ИЛИ EmptyString(CellNext.Text) Тогава Брой колони = Брой колони + 1; В противен случай Върнете брой колони; EndIf; Краен цикъл;

// Обработка на заглавки на таблици // // Параметри // Таблица - - Документ на електронна таблица във формата Procedure ProcessHeaders(TabDoc)

TextToCombine = Нов масив;

// заредете масива с текстови стойности за анализ и сливане (заменете със свои) Selection = Directories.Regions.Select(); While Selection.Next() Loop TextToCombine.Add(Abbr.LP(Selection.Name)); Краен цикъл; // край

//За оптимизация тук ще е необходимо да се ограничи височината на таблицата За indstr=1 от TabDoc.TableHeight

За indNumber=1 от TabDoc.TableWidth цикъл

// определя броя на колоните на обединението Брой колони = MergeCells(TabDoc, indStr, indCol, TextToMerge); Ако брой колони, тогава HeaderText = TabDoc.Area(indStr, indCol).Text; MergeableArea = TabDoc.Area(indStr, indCol, indStr, indNumber+Number ofColumns); MergeArea.Merge(); MergeRegion.HorizontalPosition = HorizontalPosition.Center; Зона за обединяване.Текст = HeaderText; indCol = indCol+Брой колони; EndIf; Краен цикъл;

// Ако сме намерили в реда областта за сливане, тогава спираме по-нататъшни търсения Ако не MergeArea = Undefined Then

Много благодаря за предоставената опция, работи безупречно!