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

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

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

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


    ТабДок.Вывести(ОбластьТХШТч);
    //
    ОбластьСтрока            = Макет.ПолучитьОбласть("Строка");
    НомПП                     = 1;
    ТекНаименованиеОсновное = "";
    ТекВысота               = 0;
    ОдноОсновное            = 0;
    Для каждого СтрТз Из ДокументОбъект.Составляющие Цикл
        ОбластьСтрока.Параметры.НомПП                 = НомПП;
        ОбластьСтрока.Параметры.НаименованиеОсновное = СтрТз.Наименование;    
        ОбластьСтрока.Параметры.Наименование         = СтрТз.Наименование;    
        ОбластьСтрока.Параметры.Производитель         = СтрТз.Производитель;
        ОбластьСтрока.Параметры.Производительность   = СтрТз.Производительность;
        ОбластьСтрока.Параметры.ЦенаУЕСНДС             = СтрТз.ЦенаУЕСНДС;
        ОбластьСтрока.Параметры.ЦенаРубСНДС             = СтрТз.ЦенаРубСНДС;
        ОбластьСтрока.Параметры.Количество             = СтрТз.Количество;
        ОбластьСтрока.Параметры.СуммаРубСНДС         = СтрТз.СуммаРубСНДС;
        ОбластьСтрока.Параметры.Итого                 = СтрТз.Итого;
        //
//Если Марка<>ТекМарка Тогда
//    Если ТекВысота>0 И ТабДокумент.ВысотаТаблицы>ТекВысота Тогда
//        ОбластьМарки=ТабДокумент.Область(ТекВысота,1,ТабДокумент.ВысотаТаблицы,1);
//        ОбластьМарки.Объединить();
//    КонецЕсли;
//    ТекМарка=Марка;
//    ТекВысота=ТабДокумент.ВысотаТаблицы+1;  
//КонецЕсли;        
        Если СтрТз.Наименование.Основное Тогда
            ОдноОсновное = ОдноОсновное + 1;
        КонецЕсли;
        //
        НомПП = НомПП + 1;
        Если СтрТз.Наименование.Основное и ТекНаименованиеОсновное = "" Тогда
            ТекНаименованиеОсновное = СтрТз.Наименование;
            ТекВысота               = ТабДок.ВысотаТаблицы;
            //
            ТабДок.Вывести(ОбластьСтрока);
            //
        ИначеЕсли СтрТз.Наименование.Основное и СтрТз.Наименование <> ТекНаименованиеОсновное Тогда
            ОбластьОсновнойДетали = ТабДок.Область(ТекВысота, 2, ТабДок.ВысотаТаблицы, 2);
            ОбластьОсновнойДетали.Объединить();
            //
            ТекНаименованиеОсновное = СтрТз.Наименование;
            ТекВысота               = ТабДок.ВысотаТаблицы;
            //
            ТабДок.Вывести(ОбластьСтрока);
            //
        Иначе
            ТекВысота               = ТабДок.ВысотаТаблицы;
            //
            ТабДок.Вывести(ОбластьСтрока);
            //
        КонецЕсли;
    КонецЦикла;
    //Если ОдноОсновное > 1 Тогда
    Если ТабДок.ВысотаТаблицы > ТекВысота Тогда    
        ОбластьОсновнойДетали = ТабДок.Область(ТекВысота, 2, ТабДок.ВысотаТаблицы, 2);
        ОбластьОсновнойДетали.Объединить();
        ТабДок.Вывести(ОбластьСтрока);
    КонецЕсли;
    //
    ОбластьПодвал                         = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.КомментарийКП = ДокументОбъект.Комментарий;
    ТабДок.Вывести(ОбластьПодвал);
    //ТабДок.ТолькоПросмотр  = Истина;
    Возврат ТабДок;
КонецФункции
9 NIGHTHUNTER
 
31.08.20
09:27
Эталон (0) вывел,

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


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