Меню Закрыть

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 читает замечательно, поэтому для екселевский файлов все-равно придется создать временный файл.

Читайте также:  Need for speed most wanted 2012 автомобили

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

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

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

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

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

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

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

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

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

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

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

Рекомендуем к прочтению

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

Ваш адрес email не будет опубликован.