Как да обединим заглавия на колони в таблица, система за съставяне на данни
Defor Нещо като ЧЗВ Рецензии (5) Отметка
Тази публикация се роди в резултат на намирането на решение на проблема от публикацията http://1cskd.ru/2010/07/kak-v-skd-nakryt-kolonki-shapkoj/
Имаме доклад като:
Трябва да комбинирате едни и същи заглавки за групиране.
Предлагам да извършите тази операция върху генерирания документ с електронна таблица, като използвате следния код:
Вмъкваме повикване след формирането на документ с електронна таблица:
Резултатът е показан по-долу:
Основният недостатък на този метод е, че е трудно да се определи предварително началната и крайната област на търсене, тъй като функцията може да изработи и обедини всякакви други съседни идентични клетки. Ако имате някакви идеи как да идентифицирате уникално групиращите заглавни клетки, моля, пишете. Междувременно този код може да се използва с някои модификации за всеки отделен случай.
Благодаря ви много за обработката, трябваше да направя същото на 7-ke.
Мога ли да попитам глупостта, но къде да вкарам тази процедура?
Вмъкнете след генериране на получения документ с електронна таблица. Има пример на http://infostart.ru/public/77916/.
Платформа 8.2. Формулярът за отчет се управлява, използвам горните процедури/функции в отчета, както следва:
Модул на формуляр за отчет: &OnClient // Проверка на две съседни клетки за идентичност Функция MergeCells(TabDoc, indStr, indCol)
Клетка = TabDoc.Area(indStr, indKol); CellNext = TabDoc.Area(indStr, indNext+1); If EmptyString(Cell.Text) Then Return False ElseIf Cell.Text = CellNext.Text //Проверете дали заглавката и Cell.Name = “R”+indString+”C”+indCol Then // Проверете дали името съвпада (отсейте вече обединените клетки) Върнете вярно; В противен случай Върни невярно EndIf;
&OnClient // Обработване на заглавки на таблици // // Параметри // Таблица – – Документ на електронна таблица от формуляр Procedure ProcessHeaders(TabDoc)
MergedRegion = недефиниран; За indstr=1 By 11 Loop//TabDoc.TableHeight Loop //За да оптимизирате тук, ще трябва да ограничите височината на таблицата
Първоначална колона = 0; За indNumber=1 чрез цикъл TabDoc.TableWidth
If MergeCells(TabDoc, indStr, indCol) Then // дефиниране на началото на сливането Ако не StartColumn Then StartColumn = indCol; EndIf; ElseIf StartColumn Тогава // завършете обединението HeaderText = TabDoc.Area(indStr, indCol).Text; MergeableArea = TabDoc.Area(indStr, StartColumn, indStr, indCol); MergeArea.Merge(); MergeRegion.HorizontalPosition = HorizontalPosition.Center; Зона за обединяване.Текст = HeaderText; Начална колона = 0; В противен случай Начална колона = 0; EndIf;
EndCycle; //Ако не MergedArea = Undefined Then // Ако областта за обединяване е намерена в низа, спиране на по-нататъшните търсения // return; //EndIf;
&OnClient Процедура FileVariant()
&AtServer Процедура ClientServerVariant()
&AtClient Procedure Generate(Command) // Вмъкване на съдържанието на манипулатора.
Проблем: Следната заглавка на отчета се показва без обединяване на заглавките. Освен това, ако процедурата ClientServerVariant() е компилирана на клиента (&OnClient), тогава всичко се комбинира както трябва. Сякаш табличният документ се презаписва от раздела на сървъра. док. Още веднъж, след връщане от сървъра, tab.doc се обработва, нона клиента все още е tab.doc. без асоциация. Реших да преместя компилацията на процедурата Client-ServerVariant() на сървъра, т.е. всички ACS процеси се изпълняват на сървъра и резултатът от Tab. док. се обработва вече на клиента като резултат, изглежда, че обработеният резултат е загубен. Кажете ми каква е причината? Опитах се да преместя горните процедури/функции за обработка на документ с електронна таблица в модула на обекта на отчета в процедурата WhenComposingResult(ResultDocument, Decryption Data, StandardProcessing) изпълнението на кода върви както трябва, но резултатът е заглавка на таблица без съединение.