1С скд объединение ячеек

Объединяем ячейки с одинаковым текстом в шапке отчёта.

Допустим, мы разрабатываем отчёт, в котором в колонках таблицы могут отображаться несколько колонок с одинаковыми заголовками. Наша задача объединить ячейки с одинаковыми заголовками и оставить в объединённой области всего один заголовок.

В ячейках таблицы выводится реквизит "Остаток к оплате":

Ячейки с повторяющимися заголовками реквизита мы и будем объединять, чтобы получить такой вид:

Для решения задачи в модуле объекта отчёта разместим следующие процедуры и функции:

В итоге получаем шапку отчёта, в которой объединены ячейки с указанными нами одинаковыми заголовками.

Платформа:

Конфигурация:

Есть отчет вида:

контрагент1 – договор1 – оплата1

контрагент1 – договор1 – оплата1

контрагент2 – договор2 – оплата3

контрагент2 – договор2 – оплата4

контрагент2 – договор2 – оплата5

как необходимо настроить отчет (стандартная СКД без настройки макета), чтобы отчет вывелся как:

контрагент1 – договор1 – оплата1

контрагент2 – договор2 – оплата3

(контрагент и договор – объединенная ячейка для всех оплат)

пн, 08/10/2018 – 17:06

Добавьте в структуре отчёта группировку с 2 полями: Контрагент и Договор. В этой группировке добавьте ещё одну без указания полей (будет отражаться в структуре отчёта как ). Но Контрагент и Договор будут в разных ячейках.

Если нужно, чтобы в одной ячейке Контрагент-Договор отображались, то без редактирования макета не обойтись.

вт, 09/10/2018 – 10:07

Сейчас они располагаются друг под другом

а необходимо в одну строку

вт, 09/10/2018 – 10:58

Если хотите, чтобы Контрагет-Договор были только в первой строке, то без программирования не получится.

Данная публикация имеет две основные цели
– Зафиксировать полученный опыт, чтобы через некоторое время можно было его использовать повторно
– Получить обратную связь от сообщества относительно предлагаемых приемов. Альтернативные решения крайне приветствуются

1. Объединение, скрытие, замена

Пусть требуется получить отчет следующего вида


Этот отчет имеет несколько особенностей:
– Объединенные ячейки в шапке
– Количество и состав колонок в группе “Бонусы” – динамические. Выводятся только, если заполнено хотя бы для одного сотрудника в отчете. Если, например, никто из попавших в отчет сотрудников не получил надбавку за сверхурочные, то этой колонки в отчете быть не должно. Проектов в группе “за проекты” может быть неограниченное количество.
– Дополнительные требования к порядку полей: колонка “Оклад” должна выводиться первой, “Всего по сотруднику” – последней

Читайте также:  Фейс тайм пишет ожидание активации

В консоли можно получить следующий результат


Далее приведены универсальные процедуры, с помощью которых можно:
1. Объединить ячейки “Бонусы” и “За проекты” в шапке отчета с помощью процедуры ОбъединтьЯчейкиВТабличномДокументе()
2. Скрыть заголовок ресурса “Сумма” с помощью процедуры СкрытьСтрокиВТабличномДокументе()

2. Процедуры по выводу табличного документа

Эти процедуры можно найти в различных интерпретациях на множестве сайтов. Здесь выкладываю те, которые использую я

3. Вывод рядом двух независимых таблиц

Данная идея была взята с форума (отличный пример выложил ditp). Моя заслуга лишь в том, чтобы обернуть ее в функцию и незначительно оптимизировать.

4. Установка собственного формата для табличного документа

Данная процедура является оберткой над стандартной процедурой СоздатьФорматСтрок() (постоянно приходится вспоминать, как она называется). Позволяет выводить одну таблицу под другой с независимой шириной колонок. В сводном примере данная процедура применяется для корректного форматирования конечного документа

Процедуры тестировались на платформе 8.3 в режиме совместимости с 8.2 и без режима совмместимости, а также на платформе 8.1.

К статье прилагаются внешние отчеты со сводным примером (запускается в любой конфигурации 8.2/8.3 на обычных или управляемых формах, также отчет на 8.1)

Скачать файлы

Специальные предложения

Почему вместо этого:

нельзя использовать Группы полей? А вместо скрытия сумм использовать макеты?

И еще наблюдение: на больших объемах данных это:

Работает значительно медленнее, чем это:

(5) kser87, благодарю за критику.
Со второй частью комментария соглашусь. Редко попадаются отчеты, в которых скорость вывода через конструкцию Вывести() не устраивает заказчика. Но когда попадется, обязательно проверю предложенный вами способ.

Первую часть вашего сообщения прокомментирую попунктно:
1. Скрыть ячейки в шапке через макет – да можно. Конкретно в статье я хотел продемонстрировать использование процедуры по скрытию строки. Для примера была выбрана строка Сумма.
Предложенный в статье способ можно рассматривать как альтернативу. Кроме того, несколько раз попадались случаи, когда скрыть строку макетом не получалось, например, когда нужно скрыть строку в выводимой таблице (не в шапке)

2. По поводу использования группы полей для объединения
а. С помощью группы полей можно объединить только колонки ресурсов, т.е. когда количество колонок задается разработчиком при написании отчета. Если количество колонок динамическое – то при объединении выбранных полей в группу – ячейки не объединяются.
б. Также есть ряд задач, когда нужно объединять не только ячейке в шапке
ниже приведу рисунок, чтобы продемонстрировать это наглядно

Предлагаю Вам три типовые задачки на СКД, которые решаются средствами, описанными в данной публикации.
Прикладываю скрин. Текущий вид отчета слева. Требуемый вид отчета – справа.
Прикладываю прототип отчета с результатом как на скрине слева.

Предполагается, что Склад, Товар и ВидТовара – это справочники. В них может быть любое количество элементов, количество и состав которых нам заранее неизвестны

Сколько из трех случаев Вы сможете реализовать стандартными средствами СКД?

(11) смешные примеры) случаи 1 и 2. Вы про горизонтальные группировки не знаете что-ли?

Простой пример (вместо "Выбора" могут быть элементы справочника. Для наглядности так сделал)

Выбор когда Условие 1 тогда
"Мебель"
Когда Условие2 Тогда
"Продукты"
.
n вариантов

Конец как ГоризонтальнаяГруппировка

Потом это поле выбираете в качестве горизонтальной группировки в таблице. Еще и плюсик заработаете от того, что оно сворачиваемое и с итогами (возможно).

Случай 3 видимо не реализуем настройками СКД. Однако, следующее требование пользователя будет таким: выведите итог по виду товара. И куда вы его впихнете, позвольте узнать? От такого расположения группировок потому и отказались. Наиболее близкий вариант это поставить в параметре "Расположение полей группировок" значение "Отдельно и только в итогах".

Вообще когда вы корячите макеты СКД помните, что вы с вероятностью 99% что-нибудь сломаете. То есть не будут работать расшифровки, группировки и т.д. и т.п.

В вашем случае 1 недостаток сразу видно. В примере 1 можно вынести подразделение и сотрудника в отдельную группировку. Таблицу сделайте подчиненной сотруднику и в качестве группировки сделайте например Вид расчета. В таком случае, при количестве сотрудников от 1000 ваш отчет просто "умрет" на отрисовке макета. Будет формироваться минут 30, а вэб-морда тупо вылетит.

Да и вообще все примеры хорошо сработают лишь на небольших объемах данных. Нужно использовать механизмы СКД. Для замены текста точно УО нужно.

(12) kser87, из описания неточно понятно, что именно вы имеете ввиду. К посту 11 приложен внешний отчет. Попробуйте реализовать вашу идею в этом отчете и выложить. Чтобы можно было увидеть, что вы смогли получить требуемый результат без костылей. Можно переставлять так, как считаете правильным. Главное получить ожидаемый результат в виде готового табличного документа.

Также отмечу, что конструкция Выбор Когда .. . – не подходит, т.к. мы не знаем заранее состав и количество элементов в справочниках. Об этом написано в условии задачи

Вероятность вы взяли из головы. Расшифровки в шапке – дело редкое.

Вы заблуждаетесь. Если сделать таблицу, подчиненной к группировке, то получится несколько таблиц – по одной на каждую группировку.
Хочу посмотреть на примере, который вы выложите. Пока я увидел ваше предположение, которое не соответствует поведению СКД

Снова ваше предположение. Вы не можете знать при каком количестве сотрудников она вылетит, т.к. вы не провели эксперимент. Почему вы решили, что 30 минут а не 30 часов? Какое значение имеет количество сотрудников [строк отчета], если обработка производится только в шапке отчета? Почему нельзя формировать табличный документ на сервере?

По поводу вывода в отчет большого количества данных – я спорить не буду. Вопрос в другом: как часто необходимо выводить в отчет большое количество данных? Как часто в этом случае нужно делать сложные группировки? Действительно ли нельзя оптимизировать мою схему при работе с большим количеством данных?
В моей практике таких отчетов наберется максимум 5%. И какая-то малая доля из них будет со сложными группировками. Поэтому ваш аргумент по поводу больших данных не отменяет применимости методов, описанных в данной статье.

Также хочу уточнить, т.к. может быть это не понятно из статьи. Данная публикация описывает приемы решения задач, которые нельзя сделать настройками СКД. В посте 11 я выложил такие задачи. Поэтому я ожидаю увидеть работающий пример, который доказывает, что описанные случаи все таки решаются настройками. Но пока я вижу, что Ваши высказывания, а также высказывания уважаемого Yashazz содержат больше предположений и эмоций, чем фактов

Наименование Файл Версия Размер
Оцените статью
Добавить комментарий

Adblock detector