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

Как программно объединить ячейки в табличном документе 1С?

Для объединения ячеек предназначена функция Объединить(). Функция применяется к прямоугольной область табличного документа.

Пример

В результате формирования отчета была получена таблица.

Товар Склад Остаток
Яблоки Склад 1 6
Яблоки Склад 2 8
Яблоки Склад 3 9
Груши Склад 1 7
Груши Склад 2 2

Необходимо объединить ячейки с одинаковыми товарами.

ОбъединениеНачало=2;
Для Строка=2 По ПоследняяСтрока Цикл
Если ТабДок.Область("R"+Строка+"C1").Текст=ТабДок.Область("R"+Строка(Строка-1)+"C1").Текст
ИЛИ ОбъединениеНачало=Строка ТогдаПродолжить;
Иначе
ТабДок.Область("R"+ОбъединениеНачало+"C1"+":"+"R"+Строка(Строка-1)+"C1").Объединить();
ОбъединениеНачало=Строка;
КонецЕсли;
КонецЦикла;

В результате получим следующую таблицу.

Товар Склад Остаток
Яблоки Склад 1 6
Склад 2 8
Склад 3 9
Груши Склад 1 7
Склад 2 2

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

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

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

  1. Вадим

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

    1. Нестандартные решения в 1С Автор записи

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

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

  2. Надежда

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

  3. Андрей

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

    1. Нестандартные решения в 1С Автор записи

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

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

  4. Александр

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

  5. Ммммм?

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

      1. Нестандартные решения в 1С Автор записи

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

  6. Данила Павленко

    спасибо. помогло. последнюю строку делаем вне диапазона, типа количествоСтрок в обрабатываемой таблице, и тогда все работает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *