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 6
Склад 2 8
Склад 3 9
Груши Склад 1 7
Склад 2 2

Коротко о том, что мы сделали.

  1. Создаем цикл, который будет обходить строки табличного документа со второй (заголовок нам не нужен) по последнюю. Переменную ПоследняяСтрока нужно каким-то образом рассчитать.
  2. Переменная ОбъединениеНачало содержит номер строки, с которой нужно будет начать объединение. Первоначально этот номер равен номеру строки начала обхода таблицы.
  3. Обходим последовательно каждую строку табличного документа. При этом проверяем, равен ли текст текущей строки и столбца 1 тексту предыдущей строки того же столбца. Если равно, продолжаем цикл.
  4. Если текст отличается от предыдущей строки, значит объединяем ячейки в первой колонке, начиная с ячейки начала объединения, по последнюю с тем же значением.
  5. После объединения меняем значение переменной НачалоОбъединения, чтобы следующее объединение начиналось уже со следующей строки.

Программное объединение ячеек табличного документа в 1С : 9 комментариев

Здорово! Спасибо. А я то думаю, как бы сделать такое же для колонок. Но там аналогично)

Рады, что помогло 🙂

Кстати объединение можно делать не только в уже полностью сформированном табличном документе, но и в отдельных областях, которые только готовятся для вывода. Делается все аналогично, но так бывает даже удобнее.

Спасибо! Очень помогла статья! Вот чувствовала, что метод Объединить нужно использовать, а каким боком его применить…. Оказывается, все довольно просто. Респект автору!

О, супер! Спасибо большое! Помогло.
Однако в выражении ТабДок.Область(«R»+Строка+»C1») переменную «Строка» лучше форматировать. То есть:
Формат(Строка,»ЧГ=0″)
Иначе, на строке № 1000 вывалится ошибка из-за пробела между разрядами групп.

Спасибо за замечание, надо попробовать.

Хотя есть некоторые сомнения. Ведь мы переменную Строка берем не из экселевского файла, в котором могут быть разделители групп. Эта переменная образуется в цикле ДЛЯ, ей значения присваивает 1С, они и так будут без разделителей.

Спасибо большое! Этот пример очень помог.
Я бы сменил имя переменной Строка=2 на НомерСтроки=2, «Строка» как приведене к строке и как имя переменной не очень красиво.

А разве в условии Если ТабДок.Область(«R»+Строка+»C1»).Текст=ТабДок.Область(«R»+Строка(Строка-1)+»C1»).Текст
Не должно быть «» вместо «=»?

Имел ввиду «не равно»

Думаю, нет. Мы же хотим объединить ячейки с одинаковым содержимым. Значит должно быть «равно».

Оцените статью
Добавить комментарий