Платформа:
Конфигурация:
Есть отчет вида:
контрагент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 тексту предыдущей строки того же столбца. Если равно, продолжаем цикл.
- Если текст отличается от предыдущей строки, значит объединяем ячейки в первой колонке, начиная с ячейки начала объединения, по последнюю с тем же значением.
- После объединения меняем значение переменной НачалоОбъединения, чтобы следующее объединение начиналось уже со следующей строки.
Программное объединение ячеек табличного документа в 1С : 9 комментариев
Здорово! Спасибо. А я то думаю, как бы сделать такое же для колонок. Но там аналогично)
Рады, что помогло 🙂
Кстати объединение можно делать не только в уже полностью сформированном табличном документе, но и в отдельных областях, которые только готовятся для вывода. Делается все аналогично, но так бывает даже удобнее.
Спасибо! Очень помогла статья! Вот чувствовала, что метод Объединить нужно использовать, а каким боком его применить…. Оказывается, все довольно просто. Респект автору!
О, супер! Спасибо большое! Помогло.
Однако в выражении ТабДок.Область(«R»+Строка+»C1») переменную «Строка» лучше форматировать. То есть:
Формат(Строка,»ЧГ=0″)
Иначе, на строке № 1000 вывалится ошибка из-за пробела между разрядами групп.
Спасибо за замечание, надо попробовать.
Хотя есть некоторые сомнения. Ведь мы переменную Строка берем не из экселевского файла, в котором могут быть разделители групп. Эта переменная образуется в цикле ДЛЯ, ей значения присваивает 1С, они и так будут без разделителей.
Спасибо большое! Этот пример очень помог.
Я бы сменил имя переменной Строка=2 на НомерСтроки=2, «Строка» как приведене к строке и как имя переменной не очень красиво.
А разве в условии Если ТабДок.Область(«R»+Строка+»C1»).Текст=ТабДок.Область(«R»+Строка(Строка-1)+»C1»).Текст
Не должно быть «» вместо «=»?
Имел ввиду «не равно»
Думаю, нет. Мы же хотим объединить ячейки с одинаковым содержимым. Значит должно быть «равно».