8.х Объединение ячеек в макете

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем GreenSH, 28 июл 2015.

  1. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте.
    Пытаюсь объединить ячейки при формировании документа.
    Суть в том, что из таблицы значений по циклу в макет выводится каждая строка. После вывода второй строки между этими строками нужно объединить ячейки.

    Как это можно реализовать?
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    У области есть метод Объеденить
    Вам там надо указать номер строки и колонки от куда и номер колонки и строки до куда.

    Код:
    ОбластьЯчеекТабличногоДокумента (SpreadsheetDocumentRange)
    Объединить (Merge)
    Синтаксис:
    
    Объединить()
    Описание:
    
    Объединяет ячейки области.
    
    Доступность:
    
    Сервер, толстый клиент, внешнее соединение.
    Пример:
    
    Область = ТабДок.Область(2,2,3,3);
    Область.Объединить();
    
  3. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Это я уже нашел. Дело в другом
    После заполнения полей, идет вывод этой (одной) строки ТабДок.Вывести(СтрокаРаботы);
    После того, как заполнилась и вывелась вторая, между первой и второй строкой в определенном столбце нужно объединить ячейки. Не могу реализовать потому, что при вывода метода Объединить, объединиться может только вторая строка, т.к. при цикличном выводе строк, на втором цикле (вторая строка), метод Объединить не накладывается на первую строку(Первый цикл)
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Необходимо вычислять порядковый номер выводимой строки относительно ТабДок и потом по известным номерам делать объединение.
  5. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Как это сделать?
    После Вывода последней строки появляется табличный документ на экране. В какой момент это делать?
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Каким образом это делать - решать вам.
    Делать в момент вывода каждой "строковой"(а при необходимости и "колоночной") области в ТабДок.
  7. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Так в том-то и дело, что в момент каждой строковой не получится потому, что вывод в цикле. А объединить ячейки из первого и второго цикла в цикле №2 не получится.
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Да почему не получится-то? Если знать "адрес" предыдущей выведеной области в масштабах ТабДок, адрес текущей выводимой области будет уже известен.
    Высоту выводимой области так же можно узнать и получить адрес следующей выводимой области.
  9. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    А как программно выйти на ячейку в масштабах ТабДок?
  10. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Вывод областей в ТабДок ВСЕГДА начинается с 1-ой строки.
    Зная высоту выводимой области можно сказать, в какой строке будет начинаться следующая выводимая область.
  11. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Можешь написать пример? Пока не представляю как это сделать
  12. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Код:
    НачальнаяСтрокаВыводаОбласти = 1;
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    Табдок.Вывести(ОбластьШапка);
    НачальнаяСтрокаВыводаОбласти = НачальнаяСтрокаВыводаОбласти + ОбластьШапка.Высота;
  13. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    ООоооо... спасибо. Буду пробовать.
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Я же вам написал чо надо знать 4 параметра, даже в цикле запоминайте и выводите и объеденяйте
    Как запоминать будете - это уже ваше дело мы же не видим код макет и т.д
  15. TopicStarter Overlay
    GreenSH
    Offline

    GreenSH Опытный в 1С

    Регистрация:
    1 май 2015
    Сообщения:
    53
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ПечатьРазрывов(ТабДок)
        //Подключение к объектам данных
        Разрывы = Объект.ТаблицаРазрывов.Выгрузить();
       
        //Заполнение и вывод заголовка   
        ТабДок.Очистить();
        Пикетажка = Обработки.ПроверкаРазрывов.ПолучитьМакет("Пикетажка");
        ШапкаПикетажки = Пикетажка.ПолучитьОбласть("Шапка");
        ШапкаПикетажки.Параметры.Работа = Объект.Работа;
        ТабДок.Вывести(ШапкаПикетажки);
       
        //Заполнение табличной части
        ТаблицаРазрывов = Пикетажка.ПолучитьОбласть("ТаблицаРазрывов");
        Счетчик = 1;
       
        Для каждого ТекущаяСтрока ИЗ Объект.ТаблицаРазрывов Цикл
               
            ТаблицаРазрывов.Параметры.Номер = Счетчик;
            ТаблицаРазрывов.Параметры.Работа = ТекущаяСтрока.Работа;
            ТаблицаРазрывов.Параметры.ПКОт = ТекущаяСтрока.ПКОт;
            ТаблицаРазрывов.Параметры.ПКДо = ТекущаяСтрока.ПКДо;
           
           
            Если Счетчик >1 Тогда
                             
                ТаблицаРазрывов.Область(2,7,3,7).Объединить();
                ТаблицаРазрывов.Область(2,7,3,7).Текст = ТекущаяСтрока.Разрыв;
                           
            КонецЕсли;
            Счетчик = Счетчик+1;
            ТабДок.Вывести(ТаблицаРазрывов);
           
              КонецЦикла;
           
    КонецПроцедуры
    Один фиг не получается. В макете строка, которая выводится по циклу, состоит из двух объединенных(в макете) строк, чтобы при добавлении очередной строки по циклу, между ними можно было объединить половину (объединенной) строки из первого и второго цикла. Графически должно получиться так, чтобы похоже было на кладку кирпича.
  16. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    И не получится, т.к. выделенная область макета ничего не знает про уже выведенные в ТабДок области.
    В пределах области нумерация строк и колонок так же начинается с 1 и номера строк/колонок не равны номерам строк/колонок в пределах ТабДок.
    Последнее редактирование: 29 июл 2015
  17. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Вам надо взять свой макет и на листочке рисовать как вы области выводите или присоединеятее и потом уже их объединяете.
    Там алгоритмы не простые, но в итоге всего можно добиться.
    Просто как Вам уже сказали после того как вы сделалли ТабДок.Вывести() то у следующей области там обнулиться
    По этому там коде должны быть что то вроде

    Код:
        Если ПервыйВывод Тогда
                            Область=ТабДок.Область(СтрОт,КолОт,СтрДо,КолДо-2);
                            ПервыйВывод=Ложь;
                            КолОт=СледКолонка;
                            СледКолонка=СледКолонка;
                           
                            КолДо=КолДо;
                        Иначе
                            Область=ТабДок.Область(СтрОт,КолОт,СтрДо,КолДо);
                            КолОт=СледКолонка+2;
                            СледКолонка=СледКолонка+2;
                           
                            КолДо=КолДо+2;
                        КонецЕсли;   
    
    Повторюсь чтоне видя макета и что в конце должно получиться -мне например, трудно сказать

    Вложения:

    • 1111.jpg
      1111.jpg
      Размер файла:
      24,2 КБ
      Просмотров:
      7

Поделиться этой страницей