Як об’єднати заголовки колонок у таблиці, Система компонування даних

Defor Щось на кшталт FAQ Відгуків (5) В закладки

Даний пост народився в результаті пошуку вирішення проблеми з посту http://1cskd.ru/2010/07/kak-v-skd-nakryt-kolonki-shapkoj/

Маємо звіт виду:

Необхідно однакові заголовки угруповань об'єднати.

Пропоную цю операцію зробити над сформованим табличним документом, використовуючи наступний код:

Вставляємо виклик після формування табличного документа:

Результат наведено нижче:

Головний недолік цього способу, важко заздалегідь визначити початкову та кінцеву область пошуку, тому що функція може відпрацювати та об'єднати будь-які інші суміжні ідентичні осередки. Якщо є ідеї, як однозначно ідентифікувати осередки заголовка угруповань пишіть. А поки що цей код можна використовувати з деякими змінами в кожному конкретному випадку.

Велике спасибі за обробку, теж доводилося робити на 7-ці.

Може я попросив дурість, але куди вставити цю процедуру?

Вставляти після формування результуючого табличного документа. На http://infostart.ru/public/77916/ є приклад.

Платформа 8.2. Форма звіту керована, використовую наведені вище процедури/функції у звіті наступним чином:

Модуль форми звіту: &НаКлієнті // Перевірка двох суміжних осередків на ідентичність Функція Об'єднувати Комірки(ТабДок, індСтр, індКол)

Осередок = ТабДок.Область (індСтр, індКол); КоміркаСлід = ТабДок.Область (індСтр, індКол + 1); Якщо ПорожнійРядок(Комірка.Текст) Тоді Повернення брехня ІнакшеЯкщо Осередок.Текст = ОсередокСлід.Текст //Перевіряємо на відповідність заголовка і Осередок.Ім'я = “R”+індСтр+”C” +індКол Тоді // Перевіряємо на відповідність імені (відсіваємо вже об'єднані осередки) Повернення Істина; Інакше Повернення брехня КінецьЯкщо;

&НаКлієнті // Обробка заголовків таблиці // // Параметри // Табл – – Табличний документ форми Процедура ОбробитиЗаголовки(ТабДок)

Об'єднана Область = Невизначено; Для індСтр=1 По 11 Цикл//ТабДок.ВисотаТаблиці Цикл //Для оптимізації тут потрібно буде обмежити висоту таблиці

ПочатковаКолонка = 0; Для індКол=1 По ТабДок.ШирінаТаблиці Цикл

Якщо об'єднувати комірки (ТабДок, індСтр, індКол) Тоді // визначаємо початок об'єднання Якщо не ПочатковаКолонка Тоді ПочатковаКолонка = індКол; КінецьЯкщо; ІнакшеЯкщо ПочатковаКолонка Тоді // завершуємо об'єднання ТекстЗаголовка = ТабДок.Область(індСтр, індКол).Текст; Об'єднанаОбласть = ТабДок.Область(індСтр, ПочатковаКолонка, індСтр, індКол); Об'єднанаОбласть.Об'єднати(); Об'єднанаОбласть.ГоризонтальнеПоложення = ГоризонтальнеПоложення.Центр; Об'єднанаОбласть.Текст = ТекстЗаголовка; ПочатковаКолонка = 0; Інакше ПочатковаКолонка = 0; КінецьЯкщо;

КінецьЦикл; //Якщо не Об'єднанаОбласть = Невизначено Тоді // Якщо знайшли у рядку області для об'єднання, то припиняємо подальші пошуки // повернення; // КінецьЯкщо;

&НаКлієнті Процедура ФайловийВаріант()

&НаСервері Процедура КлієнтСервернийВаріант()

&НаКлієнті Процедура Сформувати(Команда) // Вставити вміст обробника.

Проблема наступної шапки звіту виводиться без об'єднання заголовка. При цьому якщо процедуру КлієнтСервернийВаріант() скомпонувати на кленті (& Клієнті), то все об'єднується як треба. Відбувається як затирання табличного документа серверним таб. доком. Ще раз, після повернення з сервера відбувається обробка таб.дока, алена клієнті все одно таб.док. без об'єднання. Вирішив винести компіляцію процедури КлієнтСервернийВаріант() на сервер, тобто. всі процеси СКД протікають сервері, а результат Таб. док. обробляється вже на клієнті в результаті відбувається начебто затеряння обробленого результату. Підкажіть у чому причина? Спробував винести вище наведені процедури/функції обробки табличного документа в модуль об'єкта звіту в процедуру ПриКомпонівціРезультату(ДокументРезультат, ДаніРозшифровки, СтандартнаОбробка) без результатів, ставив повідомлення все нормально, тобто. виконання коду проходить як слід, але результат заголовок таблиці без об'єднання.