1с скд объединить заголовки колонок
Проблема в СКД. При формировании в колонках таблицы вложенных группировок, родительский заголовок группировки, не объединяет заголовки дочерних группировок.
(19) AlexO, C добрым утром! Вопрос по комментарию трёхгодичной давности? Тем не менее попытаюсь ещё раз сформулировать: какое отношение описанный алгоритм имеет к СКД? Здесь обрабатывается уже сформированный табличный документ. А как он был сформирован для описанного алгоритма дело десятое. Точно также можно обрабатывать табличный документ, сформированный вручную.
Как раз наипервейшее. Потому как СКД настолько закрытый и запутанный механизм, что любое осмысленное вмешательство в него, дающее уверенный результат - уже огромный плюс.
Проблема в СКД. При формировании в колонках таблицы вложенных группировок, родительский заголовок группировки, не объединяет заголовки дочерних группировок.
Это решение призвано привести в порядок вертикальные группировки в СКД. Если этот вариант можно использовать еще где нибудь я не против.
Классно работает и для вертикальных и для горизонтальных ячеек. А у кого получилось одновременное объединение горизонтальных и верткальных? Например объединенная ячейка должна быть высотой 2 строки и шириной 3 колонки ?
(8) adminfo2002, и я жду. )) передо мной сейчас такая же задача. Но как не пыталась, простой настройкой не обошлась
"А вот тут немного снять.. здесь подчистить. тут отрезать. и вот изящная ложка готова!"
"Не, мне баклушу как сделать. "
Кто ж поймет этих 1сников.
(7) serg_gres, не понял, зачем объединять ячейки ресурсов? Если речь идет об общей родительской группировке этих ресурсов, то да объединятся.
мне наоборот надо чтобы родительская группировка не объединялась.. версия платформы 8.2.14.540. есть какая то настройка?
как в публикации на картинке где без объединения(покупатели или поставщики). чтобы над каждой колонкой было название верхней группировки. то есть начальный вариант в этой публикации
Если данное решение можно применить где-то еще я буду только рад. Но в первую очередь это будет полезно пользователям СКД.
работает только при выводе одного показателя в отчете.
Если делаешь вывод более одного показателя, то объединение не срабатывает:(
Подскажите, если у меня нет кнопки сформировать, и форма рисуется стандартно, как мне использовать данную процедуру?
(26) lamdth,
На форме создайте кнопку, прицепите к ней свой обработчик, текст можно подсмотреть где угодно. Например выдрать из моего отчета этой темы. Пример есть в книге "Руководство разработчика" гл 10.4.
(30) rborovikov,
На скриншоте "Настройки СКД" показан пример настроек или можно скачать приложенный отчет и там посмотреть.
Добавил массив, в котором указал конкретные строки, которые должны быть в ячейках для объединения. Потому что исходный вариант иногда объединял не то, что нужно.
скачал для 8.2, процедуры в модуле форме вообще не прорабатываются, т.е. удалил вообще форму - результат тот же
p.s. допёр - сделано в обычных формах, хотя написано 8.2 думал на управляемых
Спасибо за алгоритм. Есть небольшое дополнение. Чтобы сделать именно шапку на колонками, а не просто объединить одинаковые ячейки и не оставлять итоги по группировке слева от колонок, то можно использовать группировку полей. Вот как у меня на рисунке. Тогда при использовании доп. кода по объединению ячеек можно получить красивую таблицу с шапками колонок.
Наткнулся случайно.
я чего-то не понял (может быть реализация связана с "-5" лет назад? или связано с особыми требованиями к формату отчета)
потому как ну нет проблемы вроде с отображением группировок
настройка "расположение группировок - вместе" дает красивый результат (ну на платформе 8.3. точно, при том что по умолчанию подразумевает "вместе" и ничего настраивать не нужно)
(37) graZy,
Сейчас проверил на платформе 8.3.4.465 (другой под рукой не было), проблема осталась.
з.ы.
Проверил на 8.3.5.1383 - результат тот же. (Для проверки можно использовать отчет из загрузок например "Объединяемые заголовки для 8.2" и закомментировать вызов "ОбработатьЗаголовки(. )"
(экперементировал на своем отчете)
рис 1 "расположение полей группировок вместе"
рис 2 "расположение полей группировок отдельно"
так а чем отчет на первом рисунке не устраивает. (зачем городить рисунок 2 с объединением) --- как писал ранее, если это только не требования к форме отчета (тогда понятно зачем) - в остальных случаях рис1 по мне так идеально подходит (и все стандартными средствами СКД)
Переработал функционал из поста 32.
Проблема в том, что если по колонкам есть уже объединенные ячейки то механизм не срабатывает.
Сделал универсальную шнягу, которая объединяет даже объединенные ячейки по списку:
(43) demien@tut.by, (43) demien@tut.by,
Добрый день.
Что бы настройки брались пользовательские надо
вместо этого:
Настройки = КомпоновщикНастроек.Настройки;
Надо написать это:
Настройки= КомпоновщикНастроек.ПолучитьНастройки();
// Возвращает количество объединяемых ячеек
Функция ОбъединятьЯчейки(ТабДок, индСтр, индКол, ТекстДляОбъединения)
Ячейка = ТабДок.Область(индСтр, индКол);
Если ПустаяСтрока(Ячейка.Текст) Тогда
Возврат 0;
КонецЕсли;
Если ТекстДляОбъединения.Найти(Ячейка.Текст) = Неопределено Тогда
Возврат 0;
КонецЕсли;
КоличествоКолонок = 0;
Для СледКолонка = индКол+1 По ТабДок.ШиринаТаблицы Цикл
ЯчейкаСлед = ТабДок.Область(индСтр, СледКолонка);
//Проверяем, чтобы текст был одним из указанных в ТекстДляОбъединения
Если Ячейка.Текст = ЯчейкаСлед.Текст ИЛИ ПустаяСтрока(ЯчейкаСлед.Текст) Тогда
КоличествоКолонок = КоличествоКолонок + 1;
Иначе
Возврат КоличествоКолонок;
КонецЕсли;
КонецЦикла;
// Обработка заголовков таблицы
//
// Параметры
// Табл - - Табличный документ формы
Процедура ОбработатьЗаголовки(ТабДок)
ТекстДляОбъединения = Новый Массив;
// накачиваем массив значениями текстов для анализа и объединения (замените на свое)
Выборка = Справочники.Регионы.Выбрать();
Пока Выборка.Следующий() Цикл
ТекстДляОбъединения.Добавить(СокрЛП(Выборка.Наименование));
КонецЦикла;
// конец
//Для оптимизации здесь нужно будет ограничить высоту таблицы
Для индСтр=1 По ТабДок.ВысотаТаблицы Цикл
Для индКол=1 По ТабДок.ШиринаТаблицы Цикл
// определяем количество колонок объединения
КоличествоКолонок = ОбъединятьЯчейки(ТабДок, индСтр, индКол, ТекстДляОбъединения);
Если КоличествоКолонок Тогда
ТекстЗаголовка = ТабДок.Область(индСтр, индКол).Текст;
ОбъединяемаяОбласть = ТабДок.Область(индСтр, индКол, индСтр, индКол+КоличествоКолонок);
ОбъединяемаяОбласть.Объединить();
ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
индКол = индКол+КоличествоКолонок;
КонецЕсли;
КонецЦикла;
// Если нашли в строке области для объединения то прекращаем дальнейшие поиски
Если не ОбъединяемаяОбласть = Неопределено Тогда
Для начала я хотел бы пояснить, что в СКД штатными методами задать общий заголовок для группы измерений нельзя. Для группы ресурсов - без проблем. Для группы измерений - нельзя. Так что все, что будет написано ниже - это повесть про костыли и грабли. Местами печальная, местами веселая, но уж такая какая получилась. Предупреждаю сразу, потому, что многие не любят такого чтива, а потом упрекают автора, в собственном потерянном времени и прикапываются к тому, что решение далеко от идеала.
Ну а с теми кто остался, мы сейчас попытаемся надеть "шапочку" на измерения в колонках таблицы СКД.
Давайте обратимся к практической задаче. У нас есть таблица с двумя числовыми показателями, которые заполнены по периодам в разрезе 2-х измерений: Вкус и Цвет.
Вот примерно так она выглядит:
Задача стоит тоже не сложная: оставить измерение "Вкус" в строках, а данные показателей по измерению "Цвет" вывести в столбцы, сгруппировав предварительно по месяцам.
Итак мы создаем отчет на СКД с указанными данными и выводим его в виде таблицы с двухуровневой группировкой по колонкам (период по месяцам и цвета внутри каждого месяца)
И здесь нас ждет первое разочарование. Если выводить так, как мы привыкли по строкам, значение периода в группировке верхнего уровня будет упорно предшествовать группировке по цветам, но никак не поднимется наверх. Поэтому мы уберем вывод значений периода из старшей группировки и дополнительно на вкладке "Другие настройки" для этой группировки установим настройку "Расположение группировок" на "Нет". А в поля группировки "Цвет" добавим для вывода интересующий нас период.
Вот примерно что из это выйдет:
Как видим, почти получилось, но вот определитель периода теперь повторяется в каждом столбце, а не объединяется как шапка группировки цветов.
И вот с этого момента коллеги обычно используют танцы с бубном в виде программного объединения ячеек шапки в уже созданном табличном документе. Как например здесь. Ничего не имею принципиально против, но мы, как говорил В.И. Ленин, пойдем другим путем.
Суть альтернативного подхода состоит в использовании возможностей СКД создавать вычисляемые поля и условно форматировать данные. У нас есть возможность с помощью условного форматирования настроить вид ячеек в табличном документе как угодно, а для условий, по которым мы должны применять форматирование, нужно получить несколько показателей в виде вычисляемых полей. К таким показателям относятся:
1. Порядковый номер текущего значения измерения в группировке.
2. Количество значений измерений в текущей группировке.
Таким образом, мы сможем узнать в каких полях начинается и заканчивается группировка по старшему измерению и можем настроить вывод значения старшего измерения только в первой ячейке, параллельно убрав разделительные линии из ячеек внутри группировки. А заодно (чтобы два раза не вставать) отформатируем первый день месяца в ММММ ГГГГ.
Получим в итоге то, что в нашей главной превьюшке (и демо отчете) называется "Пример 1"
Как видим получилось не сильно красиво, но по крайней мере видно как называется, где начинается и где заканчивается группировка по месяцам. Но обычно хочется, чтобы общее название было в центре. Для такого фокуса нам потребуется еще одно вычисляемое поле:
3. Номер колонки для заголовка. Для нечетного количества элементов в подчиненной группировке, это будет центральная ячейка, а для четного (тут уж извините) ближайшая к середине интервала слева.
Если теперь мы настроим условное форматирование так, чтобы выводился текст не в первой для группировки ячейки, а именно в колонке с нужным номером, то получим, то что на превьюшке я назвал "Пример 2"
Уже лучше, но все равно кривовато. Однако, наши возможности улучшить вид решения еще не исчерпаны. Давайте центровать заголовки периодов в ячейке вывода, если она действительно центральная (нечетное количество колонок в группировке) или выравнивать по правому краю, если колонка заголовка ближайшая к центру слева. Для такого фокуса нужно еще одно вычисляемое поле:
4. Необходимость центрировать текст в ячейке с заголовком.
После того, как мы установили общий формат текста для периода по правому краю и добавили условное форматирование для центрирования по необходимости мы получили отчет вида "Пример 3". Не идеально, но в общем-то лучшее, что можно сделать без кодирования в отчете.
Как рассчитать нужные поля, надеюсь понятно из рисунка:
С настройками условного форматирования, надеюсь справитесь. Ну а кто не справится - качаем демку, не стесняемся:)
Необходимо одинаковые заголовки группировок объединить.
Предлагаю данную операцию произвести над сформированным табличным документом, используя следующий код:
Вставляем вызов после формирования табличного документа:
Результат представлен ниже:
Решение претендует на универсальность.
Но главный недостаток этого способа, трудно заранее определить начальную и конечную область поиска, т. к. процедура может отработать и объединить любые другие смежные идентичные ячейки. Если есть идеи как однозначно идентифицировать ячейки заголовка группировок пишите. А пока этот код можно использовать с некоторыми изменения в каждом конкретном случае.
Добавлен доработанный файл для 8.2, где предоставлен модифицированный пример для нескольких ресурсов (показателей) - спасибо Evgeniy.
Специальные предложения
(19) AlexO, C добрым утром! Вопрос по комментарию трёхгодичной давности? Тем не менее попытаюсь ещё раз сформулировать: какое отношение описанный алгоритм имеет к СКД? Здесь обрабатывается уже сформированный табличный документ. А как он был сформирован для описанного алгоритма дело десятое. Точно также можно обрабатывать табличный документ, сформированный вручную.
Как раз наипервейшее. Потому как СКД настолько закрытый и запутанный механизм, что любое осмысленное вмешательство в него, дающее уверенный результат - уже огромный плюс.
Проблема в СКД. При формировании в колонках таблицы вложенных группировок, родительский заголовок группировки, не объединяет заголовки дочерних группировок.
Это решение призвано привести в порядок вертикальные группировки в СКД. Если этот вариант можно использовать еще где нибудь я не против.
Классно работает и для вертикальных и для горизонтальных ячеек. А у кого получилось одновременное объединение горизонтальных и верткальных? Например объединенная ячейка должна быть высотой 2 строки и шириной 3 колонки ?
(8) adminfo2002, и я жду. )) передо мной сейчас такая же задача. Но как не пыталась, простой настройкой не обошлась
"А вот тут немного снять.. здесь подчистить. тут отрезать. и вот изящная ложка готова!"
"Не, мне баклушу как сделать. "
Кто ж поймет этих 1сников.
(7) serg_gres, не понял, зачем объединять ячейки ресурсов? Если речь идет об общей родительской группировке этих ресурсов, то да объединятся.
мне наоборот надо чтобы родительская группировка не объединялась.. версия платформы 8.2.14.540. есть какая то настройка?
как в публикации на картинке где без объединения(покупатели или поставщики). чтобы над каждой колонкой было название верхней группировки. то есть начальный вариант в этой публикации
Если данное решение можно применить где-то еще я буду только рад. Но в первую очередь это будет полезно пользователям СКД.
работает только при выводе одного показателя в отчете.
Если делаешь вывод более одного показателя, то объединение не срабатывает:(
Подскажите, если у меня нет кнопки сформировать, и форма рисуется стандартно, как мне использовать данную процедуру?
(26) lamdth,
На форме создайте кнопку, прицепите к ней свой обработчик, текст можно подсмотреть где угодно. Например выдрать из моего отчета этой темы. Пример есть в книге "Руководство разработчика" гл 10.4.
(30) rborovikov,
На скриншоте "Настройки СКД" показан пример настроек или можно скачать приложенный отчет и там посмотреть.
Добавил массив, в котором указал конкретные строки, которые должны быть в ячейках для объединения. Потому что исходный вариант иногда объединял не то, что нужно.
скачал для 8.2, процедуры в модуле форме вообще не прорабатываются, т.е. удалил вообще форму - результат тот же
p.s. допёр - сделано в обычных формах, хотя написано 8.2 думал на управляемых
Спасибо за алгоритм. Есть небольшое дополнение. Чтобы сделать именно шапку на колонками, а не просто объединить одинаковые ячейки и не оставлять итоги по группировке слева от колонок, то можно использовать группировку полей. Вот как у меня на рисунке. Тогда при использовании доп. кода по объединению ячеек можно получить красивую таблицу с шапками колонок.
Наткнулся случайно.
я чего-то не понял (может быть реализация связана с "-5" лет назад? или связано с особыми требованиями к формату отчета)
потому как ну нет проблемы вроде с отображением группировок
настройка "расположение группировок - вместе" дает красивый результат (ну на платформе 8.3. точно, при том что по умолчанию подразумевает "вместе" и ничего настраивать не нужно)
(37) graZy,
Сейчас проверил на платформе 8.3.4.465 (другой под рукой не было), проблема осталась.
з.ы.
Проверил на 8.3.5.1383 - результат тот же. (Для проверки можно использовать отчет из загрузок например "Объединяемые заголовки для 8.2" и закомментировать вызов "ОбработатьЗаголовки(. )"
(экперементировал на своем отчете)
рис 1 "расположение полей группировок вместе"
рис 2 "расположение полей группировок отдельно"
так а чем отчет на первом рисунке не устраивает. (зачем городить рисунок 2 с объединением) --- как писал ранее, если это только не требования к форме отчета (тогда понятно зачем) - в остальных случаях рис1 по мне так идеально подходит (и все стандартными средствами СКД)
Переработал функционал из поста 32.
Проблема в том, что если по колонкам есть уже объединенные ячейки то механизм не срабатывает.
Сделал универсальную шнягу, которая объединяет даже объединенные ячейки по списку:
(43) demien@tut.by, (43) demien@tut.by,
Добрый день.
Что бы настройки брались пользовательские надо
вместо этого:
Настройки = КомпоновщикНастроек.Настройки;
Надо написать это:
Настройки= КомпоновщикНастроек.ПолучитьНастройки();
// Возвращает количество объединяемых ячеек
Функция ОбъединятьЯчейки(ТабДок, индСтр, индКол, ТекстДляОбъединения)
Ячейка = ТабДок.Область(индСтр, индКол);
Если ПустаяСтрока(Ячейка.Текст) Тогда
Возврат 0;
КонецЕсли;
Если ТекстДляОбъединения.Найти(Ячейка.Текст) = Неопределено Тогда
Возврат 0;
КонецЕсли;
КоличествоКолонок = 0;
Для СледКолонка = индКол+1 По ТабДок.ШиринаТаблицы Цикл
ЯчейкаСлед = ТабДок.Область(индСтр, СледКолонка);
//Проверяем, чтобы текст был одним из указанных в ТекстДляОбъединения
Если Ячейка.Текст = ЯчейкаСлед.Текст ИЛИ ПустаяСтрока(ЯчейкаСлед.Текст) Тогда
КоличествоКолонок = КоличествоКолонок + 1;
Иначе
Возврат КоличествоКолонок;
КонецЕсли;
КонецЦикла;
// Обработка заголовков таблицы
//
// Параметры
// Табл - - Табличный документ формы
Процедура ОбработатьЗаголовки(ТабДок)
ТекстДляОбъединения = Новый Массив;
// накачиваем массив значениями текстов для анализа и объединения (замените на свое)
Выборка = Справочники.Регионы.Выбрать();
Пока Выборка.Следующий() Цикл
ТекстДляОбъединения.Добавить(СокрЛП(Выборка.Наименование));
КонецЦикла;
// конец
//Для оптимизации здесь нужно будет ограничить высоту таблицы
Для индСтр=1 По ТабДок.ВысотаТаблицы Цикл
Для индКол=1 По ТабДок.ШиринаТаблицы Цикл
// определяем количество колонок объединения
КоличествоКолонок = ОбъединятьЯчейки(ТабДок, индСтр, индКол, ТекстДляОбъединения);
Если КоличествоКолонок Тогда
ТекстЗаголовка = ТабДок.Область(индСтр, индКол).Текст;
ОбъединяемаяОбласть = ТабДок.Область(индСтр, индКол, индСтр, индКол+КоличествоКолонок);
ОбъединяемаяОбласть.Объединить();
ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
индКол = индКол+КоличествоКолонок;
КонецЕсли;
КонецЦикла;
// Если нашли в строке области для объединения то прекращаем дальнейшие поиски
Если не ОбъединяемаяОбласть = Неопределено Тогда
Defor Что-то вроде FAQ Отзывов (5) В закладки
Имеем отчет вида:
Необходимо одинаковые заголовки группировок объединить.
Предлагаю данную операцию произвести над сформированным табличным документом, используя следующий код:
Вставляем вызов после формирования табличного документа:
Результат представлен ниже:
Главный недостаток этого способа, трудно заранее определить начальную и конечную область поиска, т. к. функция может отработать и объединить любые другие смежные идентичные ячейки. Если есть идеи как однозначно идентифицировать ячейки заголовка группировок пишите. А пока этот код можно использовать с некоторыми изменения в каждом конкретном случае.
Большое спасибо за обработку, тоже самое приходилось делать на 7-ке.
Может я спроше глупость но куда вставить данную процедуру?
Платформа 8.2. Форма отчета управляемая, использую выше приведенные процедуры/функции в отчете следующим образом:
Модуль формы отчета:
&НаКлиенте
// Проверка двух смежных ячеек на идентичночность
Функция ОбъединятьЯчейки(ТабДок, индСтр, индКол)
Ячейка = ТабДок.Область(индСтр, индКол);
ЯчейкаСлед = ТабДок.Область(индСтр, индКол+1);
Если ПустаяСтрока(Ячейка.Текст) Тогда
Возврат ложь
ИначеЕсли Ячейка.Текст = ЯчейкаСлед.Текст //Проверяем на соответствие заголовка
и Ячейка.Имя = “R”+индСтр+”C”+индКол Тогда // Проверяем на соответствие имени (отсеиваем уже объединенные ячейки)
Возврат Истина;
Иначе
Возврат ложь
КонецЕсли;
&НаКлиенте
// Обработка заголовков таблицы
//
// Параметры
// Табл – – Табличный документ формы
Процедура ОбработатьЗаголовки(ТабДок)
ОбъединяемаяОбласть = Неопределено;
Для индСтр=1 По 11 Цикл//ТабДок.ВысотаТаблицы Цикл //Для оптимизации здесь нужно будет ограничить высоту таблицы
НачальнаяКолонка = 0;
Для индКол=1 По ТабДок.ШиринаТаблицы Цикл
Если ОбъединятьЯчейки(ТабДок, индСтр, индКол) Тогда // определяем начало объединения
Если не НачальнаяКолонка Тогда
НачальнаяКолонка = индКол;
КонецЕсли;
ИначеЕсли НачальнаяКолонка Тогда // завершаем объединение
ТекстЗаголовка = ТабДок.Область(индСтр, индКол).Текст;
ОбъединяемаяОбласть = ТабДок.Область(индСтр, НачальнаяКолонка, индСтр, индКол);
ОбъединяемаяОбласть.Объединить();
ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
НачальнаяКолонка = 0;
Иначе
НачальнаяКолонка = 0;
КонецЕсли;
КонецЦикла;
//Если не ОбъединяемаяОбласть = Неопределено Тогда // Если нашли в строке области для объединения, то прекращаем дальнейшие поиски
// возврат;
//КонецЕсли;
&НаКлиенте
Процедура ФайловыйВариант()
&НаСервере
Процедура КлиентСерверныйВариант()
&НаКлиенте
Процедура Сформировать(Команда)
// Вставить содержимое обработчика.
Проблема следующая шапка отчета выводится без объединения заголовка. При этом если процедуру КлиентСерверныйВариант() скомпоновать на кленте (&НаКлиенте), то всё объединяется как надо. Происходит как-будто затирание табличного документа серверным таб. доком. Ещё раз, после возврата с сервера происходит обработка таб.дока, но на клиенте всё равно таб.док. без объединения. Решил вынести компиляцию процедуры КлиентСерверныйВариант() на сервер, т.е. все процессы СКД протекают на сервере, а результат Таб. док. обрабатывается уже на клиенте в итоге происходит как-будто затерание обработанного результата. Подскажите в чем причина? Пробывал вынести выше приведенные процедуры/функции обработки табличного документа в модуль объекта отчета в процедуру ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) без результатно, ставил сообщалки всё нормально, т.е. исполнение кода проходит как надо, но результат заголовок таблицы без объединения.
Defor Что-то вроде FAQ Отзывов (5) В закладки
Имеем отчет вида:
Необходимо одинаковые заголовки группировок объединить.
Предлагаю данную операцию произвести над сформированным табличным документом, используя следующий код:
Вставляем вызов после формирования табличного документа:
Результат представлен ниже:
Главный недостаток этого способа, трудно заранее определить начальную и конечную область поиска, т. к. функция может отработать и объединить любые другие смежные идентичные ячейки. Если есть идеи как однозначно идентифицировать ячейки заголовка группировок пишите. А пока этот код можно использовать с некоторыми изменения в каждом конкретном случае.
Большое спасибо за обработку, тоже самое приходилось делать на 7-ке.
Может я спроше глупость но куда вставить данную процедуру?
Платформа 8.2. Форма отчета управляемая, использую выше приведенные процедуры/функции в отчете следующим образом:
Модуль формы отчета:
&НаКлиенте
// Проверка двух смежных ячеек на идентичночность
Функция ОбъединятьЯчейки(ТабДок, индСтр, индКол)
Ячейка = ТабДок.Область(индСтр, индКол);
ЯчейкаСлед = ТабДок.Область(индСтр, индКол+1);
Если ПустаяСтрока(Ячейка.Текст) Тогда
Возврат ложь
ИначеЕсли Ячейка.Текст = ЯчейкаСлед.Текст //Проверяем на соответствие заголовка
и Ячейка.Имя = “R”+индСтр+”C”+индКол Тогда // Проверяем на соответствие имени (отсеиваем уже объединенные ячейки)
Возврат Истина;
Иначе
Возврат ложь
КонецЕсли;
&НаКлиенте
// Обработка заголовков таблицы
//
// Параметры
// Табл – – Табличный документ формы
Процедура ОбработатьЗаголовки(ТабДок)
ОбъединяемаяОбласть = Неопределено;
Для индСтр=1 По 11 Цикл//ТабДок.ВысотаТаблицы Цикл //Для оптимизации здесь нужно будет ограничить высоту таблицы
НачальнаяКолонка = 0;
Для индКол=1 По ТабДок.ШиринаТаблицы Цикл
Если ОбъединятьЯчейки(ТабДок, индСтр, индКол) Тогда // определяем начало объединения
Если не НачальнаяКолонка Тогда
НачальнаяКолонка = индКол;
КонецЕсли;
ИначеЕсли НачальнаяКолонка Тогда // завершаем объединение
ТекстЗаголовка = ТабДок.Область(индСтр, индКол).Текст;
ОбъединяемаяОбласть = ТабДок.Область(индСтр, НачальнаяКолонка, индСтр, индКол);
ОбъединяемаяОбласть.Объединить();
ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
НачальнаяКолонка = 0;
Иначе
НачальнаяКолонка = 0;
КонецЕсли;
КонецЦикла;
//Если не ОбъединяемаяОбласть = Неопределено Тогда // Если нашли в строке области для объединения, то прекращаем дальнейшие поиски
// возврат;
//КонецЕсли;
&НаКлиенте
Процедура ФайловыйВариант()
&НаСервере
Процедура КлиентСерверныйВариант()
&НаКлиенте
Процедура Сформировать(Команда)
// Вставить содержимое обработчика.
Проблема следующая шапка отчета выводится без объединения заголовка. При этом если процедуру КлиентСерверныйВариант() скомпоновать на кленте (&НаКлиенте), то всё объединяется как надо. Происходит как-будто затирание табличного документа серверным таб. доком. Ещё раз, после возврата с сервера происходит обработка таб.дока, но на клиенте всё равно таб.док. без объединения. Решил вынести компиляцию процедуры КлиентСерверныйВариант() на сервер, т.е. все процессы СКД протекают на сервере, а результат Таб. док. обрабатывается уже на клиенте в итоге происходит как-будто затерание обработанного результата. Подскажите в чем причина? Пробывал вынести выше приведенные процедуры/функции обработки табличного документа в модуль объекта отчета в процедуру ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) без результатно, ставил сообщалки всё нормально, т.е. исполнение кода проходит как надо, но результат заголовок таблицы без объединения.
Читайте также: