Вход | Регистрация
 

Программное объединение ячеек при выводе

Программное объединение ячеек при выводе
Я
   NIGHTHUNTER
 
31.08.20 - 07:50
Разрабатываю вывод печатной формы. Но в ней нужно делать объединение ячеек. Подскажите пожалуйста по теории, как это вообще делается.
Вот привожу пример, что по 5 выводимым строкам, первая колонка должна быть объединена, для одного наименования http://joxi.ru/bmoyBOni9DllWA .
   acht
 
1 - 31.08.20 - 07:56
> по теории, как это вообще делается.

Андрей, ты уже обнаглел.
Тебе уже рекомендовали курсы и книжки.
   PuhUfa
 
2 - 31.08.20 - 08:02
(0) > по теории, как это вообще делается.
Ты не поверишь, по теории берется и объединяется, программно. Ну или в макете делается изначально как надо -)
   NIGHTHUNTER
 
3 - 31.08.20 - 08:36
(2) Получается нужно программно. Я вот сейчас занимаюсь разбором этого решения.
   NIGHTHUNTER
 
4 - 31.08.20 - 08:40
пока не пойму тот момент, что мне нужно выводить же все секции, а как я обьединяю, если часть секций уже выведено?
   NIGHTHUNTER
 
5 - 31.08.20 - 08:43
То есть вот в этом примере, мне нужно вывести 5 секций, при том в первой колонке, эти секции объединены, как мне хотя бы это статично сделать сейчас?

Самый простой пример, что бы увидеть и уже потом сделать программно ?

http://joxi.ru/bmoyBOni9DllWA
   Галахад
 
6 - 31.08.20 - 08:44
(4) Все верно. Объединить можно только то что уже выведено.
   Lexey_
 
7 - 31.08.20 - 08:54
Толстый беременный Ливингстар снова вышел на ночную охоту, ложно светя фонариком
   NIGHTHUNTER
 
8 - 31.08.20 - 09:02
Подскажите пожалуйста, что исправить в моих попытках, что бы увидеть объединение и пытаться развивать его далее. Под пример (0)


    ТабДок.Вывести(ОбластьТХШТч);
    //

    ОбластьСтрока            = Макет.ПолучитьОбласть("Строка");
    НомПП                     = 1;
    ТекНаименованиеОсновное = "";
    ТекВысота               = 0;
    ОдноОсновное            = 0; 
    Для каждого СтрТз Из ДокументОбъект.Составляющие Цикл
        ОбластьСтрока.Параметры.НомПП                 = НомПП;
        ОбластьСтрока.Параметры.НаименованиеОсновное = СтрТз.Наименование;     
        ОбластьСтрока.Параметры.Наименование         = СтрТз.Наименование;     
        ОбластьСтрока.Параметры.Производитель         = СтрТз.Производитель;
        ОбластьСтрока.Параметры.Производительность   = СтрТз.Производительность;
        ОбластьСтрока.Параметры.ЦенаУЕСНДС             = СтрТз.ЦенаУЕСНДС;
        ОбластьСтрока.Параметры.ЦенаРубСНДС             = СтрТз.ЦенаРубСНДС;
        ОбластьСтрока.Параметры.Количество             = СтрТз.Количество;
        ОбластьСтрока.Параметры.СуммаРубСНДС         = СтрТз.СуммаРубСНДС;
        ОбластьСтрока.Параметры.Итого                 = СтрТз.Итого;
        //

//Если Марка<>ТекМарка Тогда
//    Если ТекВысота>0 И ТабДокумент.ВысотаТаблицы>ТекВысота Тогда

//        ОбластьМарки=ТабДокумент.Область(ТекВысота,1,ТабДокумент.ВысотаТаблицы,1);
//        ОбластьМарки.Объединить();

//    КонецЕсли;
//    ТекМарка=Марка;

//    ТекВысота=ТабДокумент.ВысотаТаблицы+1;   
//КонецЕсли;        

        Если СтрТз.Наименование.Основное Тогда 
            ОдноОсновное = ОдноОсновное + 1;
        КонецЕсли;
        //

        НомПП = НомПП + 1;
        Если СтрТз.Наименование.Основное и ТекНаименованиеОсновное = "" Тогда
            ТекНаименованиеОсновное = СтрТз.Наименование;
            ТекВысота               = ТабДок.ВысотаТаблицы;
            //

            ТабДок.Вывести(ОбластьСтрока);
            //

        ИначеЕсли СтрТз.Наименование.Основное и СтрТз.Наименование <> ТекНаименованиеОсновное Тогда
            ОбластьОсновнойДетали = ТабДок.Область(ТекВысота, 2, ТабДок.ВысотаТаблицы, 2);
            ОбластьОсновнойДетали.Объединить();
            //

            ТекНаименованиеОсновное = СтрТз.Наименование;
            ТекВысота               = ТабДок.ВысотаТаблицы;
            //

            ТабДок.Вывести(ОбластьСтрока);
            //

        Иначе
            ТекВысота               = ТабДок.ВысотаТаблицы;
            //

            ТабДок.Вывести(ОбластьСтрока);
            //

        КонецЕсли;
    КонецЦикла;
    //Если ОдноОсновное > 1 Тогда

    Если ТабДок.ВысотаТаблицы > ТекВысота Тогда    
        ОбластьОсновнойДетали = ТабДок.Область(ТекВысота, 2, ТабДок.ВысотаТаблицы, 2);
        ОбластьОсновнойДетали.Объединить();
        ТабДок.Вывести(ОбластьСтрока);
    КонецЕсли;
    //

    ОбластьПодвал                         = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.КомментарийКП = ДокументОбъект.Комментарий;
    ТабДок.Вывести(ОбластьПодвал);
    //ТабДок.ТолькоПросмотр  = Истина;

    Возврат ТабДок;
КонецФункции
   NIGHTHUNTER
 
9 - 31.08.20 - 09:27
Эталон (0) вывел,

    ТабДок.Вывести(ОбластьТХШТч);
    //

    ОбластьСтрока            = Макет.ПолучитьОбласть("Строка");
    НомПП                     = 1;
    ТекНаименованиеОсновное = "";
    ТекВысота               = 41;
    ОдноОсновное            = 0; 
    Для каждого СтрТз Из ДокументОбъект.Составляющие Цикл
        ОбластьСтрока.Параметры.НомПП                 = НомПП;
        ОбластьСтрока.Параметры.НаименованиеОсновное = СтрТз.Наименование;     
        ОбластьСтрока.Параметры.Наименование         = СтрТз.Наименование;     
        ОбластьСтрока.Параметры.Производитель         = СтрТз.Производитель;
        ОбластьСтрока.Параметры.Производительность   = СтрТз.Производительность;
        ОбластьСтрока.Параметры.ЦенаУЕСНДС             = СтрТз.ЦенаУЕСНДС;
        ОбластьСтрока.Параметры.ЦенаРубСНДС             = СтрТз.ЦенаРубСНДС;
        ОбластьСтрока.Параметры.Количество             = СтрТз.Количество;
        ОбластьСтрока.Параметры.СуммаРубСНДС         = СтрТз.СуммаРубСНДС;
        ОбластьСтрока.Параметры.Итого                 = СтрТз.Итого;
        //

        Если СтрТз.Наименование.Основное Тогда 
            ОдноОсновное = ОдноОсновное + 1;
        КонецЕсли;
        //

        НомПП = НомПП + 1;
        Если СтрТз.Наименование.Основное и ТекНаименованиеОсновное = "" Тогда
            ТекНаименованиеОсновное = СтрТз.Наименование;
            //

            ТабДок.Вывести(ОбластьСтрока);
            //

        ИначеЕсли СтрТз.Наименование.Основное и СтрТз.Наименование <> ТекНаименованиеОсновное Тогда
            ОбластьОсновнойДетали = ТабДок.Область(ТекВысота, 2, ТабДок.ВысотаТаблицы, 2);
            ОбластьОсновнойДетали.Объединить();
            //

            ТекНаименованиеОсновное = СтрТз.Наименование;
            ТекВысота               = ТабДок.ВысотаТаблицы + 1;
            //

        Иначе
            //

            ТабДок.Вывести(ОбластьСтрока);
            //

        КонецЕсли;
    КонецЦикла;
    Если ТабДок.ВысотаТаблицы > ТекВысота Тогда    
        ОбластьОсновнойДетали = ТабДок.Область(ТекВысота, 2, ТабДок.ВысотаТаблицы, 2);
        ОбластьОсновнойДетали.Объединить();
    КонецЕсли;
    //

    ОбластьПодвал                         = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.КомментарийКП = ДокументОбъект.Комментарий;
    ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;
КонецФункции


будут ли какие рекомендации ?
   fisher
 
10 - 31.08.20 - 09:45
(5) Статически по вертикали не объединишь. Это только программно.
Программно делаешь так: когда выводишь состав "триблока" - запоминаешь выведенные секции "триблока" как области результирующего табдока (метод "вывести" возвращает выведенную секцию как область результирующего табдока). По координатам первой и последней выведенных областей вычисляешь координаты области, для которой необходимо выполнить объединение. Объединяешь. И так для каждой позиции в процессе их вывода. Вывел - вычислил координаты области для объединения, объединил, выводишь дальше. Тут хитрый момент только один - не все знают, что методы "Вывести" и "Присоединить" возвращают выведенную секцию как область результирующего табдока. Что это вообще-то функции, а не процедуры :) Так как это редко используется.
   fisher
 
11 - 31.08.20 - 09:46
(10) + "Статически по вертикали не объединишь"
Тьфу. Не так. Суть в том, что тебе изначально нужно динамически объединять (состав ячеек для объединения - динамический). А это только программно.
   fisher
 
12 - 31.08.20 - 09:48
По горизонтали можно выкрутиться через "ПоВыделеннымКолонкам", а по вертикали - только объединять.
   acht
 
13 - 31.08.20 - 09:48
(10) Ты, давай, не философствуй. Ты, давай, код сразу ему пиши. Готовый и чтобы без ошибок. А то ишь, расслабились =)
   fisher
 
14 - 31.08.20 - 09:50
Мне за себя уже лень код писать. А за других и подавно :)
   Kesim
 
15 - 31.08.20 - 12:59
(0) если научиться - не мешаю, а если сделать по быстрому и не известно сколько строк надо будет объединять - можно типовой отчет  сформировать и вывести

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.