1с макет объединить ячейки

Как программно объединить ячейки в табличном документе 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»).Текст
Не должно быть «» вместо «=»?

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

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

Для объединения ячеек выделите их и:

  1. Нажмите сочетание клавиш Ctrl + M.
  2. Кликните правой кнопкой мыши по выделенным ячейкам и выберите пункт Объединить.
  3. Кликните на панели Табличный документ (расположена внизу) кнопку Объединить.

Всем добрый период времени!

Суть задачи, которую мы разберем, в том, как прочитать данные из объединенных ячеек табличного документа с помощью объекта «ТабличныйДокумент». Также коснемся того, как пройтись по выделенным данным. Итак, приступим.

ЧТЕНИЕ ТАБЛИЧНОГО ДОКУМЕНТА

Для чтения табличного документа в 1С можно использовать как ни странно объект «ТабличныйДокумент». С версии 8.3.7 (если не изменяет память) данный объект способен читать не только MXL-файлы, но и XLS/XLSX/ODT и какие-то еще варианты таблиц (а также, кстати, и писать).

Но как всегда есть одна малюсенькая проблемка — объект создается только на сервере. Но 1С попыталась решить данную проблему создав потоки в памяти и предоставив программисту возможность использовать их вместо пути к файлу в конструкторе объекта, но при этом необходимо указать тип читаемого файла. Правда у меня на платформе Windows 7 pro x64 c 1C 8.3.10.2466 эксель таким образом прочитать не получилось, а вот MXL читает замечательно, поэтому для екселевский файлов все-равно придется создать временный файл.

Итак, код чтения файлов:

Создадим форму с табличным документом и кнопкой «Загрузить файл» и получим фот такую формочку, которая сможет прочитать MXL, XLS, XLSX и ODS файлы в табличный документ.

ВЫДЕЛЕННЫЕ ЯЧЕЙКИ

Давайте разберемся, где тут у нас находятся выделенные пользователем ячейки. И вот тут интересная странность платформы в том, что эти выделенные ячейки доступны только на клиенте в соответствующем элементе формы. Давайте пробежимся по выделенным ячейкам и распечатаем результат в строку сообщений:

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

Т.е. тут у нас напечаталось А, Б и В. Если же мы выберем вторую строку, то получим иную картину:

Как видите, наличие объединения никоим образом не мешает нам получить данные из строки [2;2], которая у нас объединена со строкой [2;1], При том в обоих этих строках будет находиться значение «А». Если мы выделим третью строку, то получим вывод «А А А» (ну вы уже поняли, почему, да?)

ОБЪЕДИНЕННЫЕ ЯЧЕЙКИ

Для того, чтобы исправить проблему с объединенными ячейками, нужно просто узнать одну подробность: каждая ячейка имеет реквизиты «Лево», «Право», «Верх» и «Низ». И для объединенных ячеек они не будут равны. Для простого объединения по оси Х произвести чтение с учетом объединения будет достаточно просто:

Мы просто добавляем к «Х» «право» и вычитаем «лево».

А для оси «У» предлагаю разобраться самостоятельно (в качестве домашнего задания).

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: