Имя: Пароль:
1C
1С v8
Печать разнородных макетов в одном табличном документе
,
0 dj_serega
 
12.12.13
15:21
Как можно извратиться, что бы в одном табличном документе вывести макеты (допустим) Реализации товаров и услуг и Налоговой накладной?

Структура колонок разная, и при ТабДокумент.Вывести(ГотовыйТабДокумент) оно ломает второй макет ;(
1 Fragster
 
модератор
12.12.13
15:24
вот такая вот загогулина:

    // Формируем документ:
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.Вывести(ТабДокументДоговор);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(ТабДокументДоговор);
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    // установим ширину колонок под акт:
    ВысотаДокумента = ТабДокумент.ВысотаТаблицы;
    ВысотаАкта = ТабДокументАкт.ВысотаТаблицы;
    ШиринаАкта = ТабДокументАкт.ШиринаТаблицы;
    
    ОбластьАкта = ТабДокумент.Область(ВысотаДокумента+1,1,ВысотаДокумента+ВысотаАкта,ШиринаАкта);
    ОбластьАкта.СоздатьФорматСтрок();
    Для Сч = 1 По ШиринаАкта Цикл
        Область = ТабДокумент.Область(ВысотаДокумента+1,Сч,ВысотаДокумента+ВысотаАкта,Сч);
        Область.ШиринаКолонки = ТабДокументАкт.Область(1,Сч).ШиринаКолонки;
    КонецЦикла;
    Для Сч = 1 По ВысотаАкта Цикл
        Область = ТабДокумент.Область(ВысотаДокумента+Сч,,ВысотаДокумента+Сч,);
        Область.ВысотаСтроки = ТабДокументАкт.Область(Сч,,Сч,).ВысотаСтроки;
    КонецЦикла;
    
    ТабДокумент.ВставитьОбласть(ТабДокументАкт.Область(1,1,ВысотаАкта,ШиринаАкта), ТабДокумент.Область(ВысотаДокумента+1,1,ВысотаДокумента+ВысотаАкта,ШиринаАкта));
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    // акт выполненных работ
    ВысотаДокумента = ТабДокумент.ВысотаТаблицы;
    ВысотаАкта = ТабДокументАктВыполненныхРабот.ВысотаТаблицы;
    ШиринаАкта = ТабДокументАктВыполненныхРабот.ШиринаТаблицы;
    
    ОбластьАкта = ТабДокумент.Область(ВысотаДокумента+1,1,ВысотаДокумента+ВысотаАкта,ШиринаАкта);
    ОбластьАкта.СоздатьФорматСтрок();
    Для Сч = 1 По ШиринаАкта Цикл
        Область = ТабДокумент.Область(ВысотаДокумента+1,Сч,ВысотаДокумента+ВысотаАкта,Сч);
        Область.ШиринаКолонки = ТабДокументАктВыполненныхРабот.Область(1,Сч).ШиринаКолонки;
    КонецЦикла;
    Для Сч = 1 По ВысотаАкта Цикл
        Область = ТабДокумент.Область(ВысотаДокумента+Сч,,ВысотаДокумента+Сч,);
        Область.ВысотаСтроки = ТабДокументАктВыполненныхРабот.Область(Сч,,Сч,).ВысотаСтроки;
    КонецЦикла;
    
    ТабДокумент.ВставитьОбласть(ТабДокументАктВыполненныхРабот.Область(1,1,ВысотаАкта,ШиринаАкта), ТабДокумент.Область(ВысотаДокумента+1,1,ВысотаДокумента+ВысотаАкта,ШиринаАкта));



если сначала выводить область, то доп пустые места могут справа появиться.
2 dj_serega
 
12.12.13
15:30
хм... занимательно. Спасибо. Попробую.
3 dj_serega
 
12.12.13
19:08
Идея помогла, но были проблемы с табличной частью Реализации. Весь табличный документ получился красиво, а вот в табличной части реализации сбились объединения колонок (во всех что попали в пакет). Пришлось в табдокументах, при условии что это Реализация, перебирать все ячейки и устанавливать ширину.

Спасибо Fragster.
4 Fragster
 
модератор
12.12.13
19:15
если самая верхняя ячейка - объединение, то нужно добавить еще сверхузкую строку без объединения в самый верх макета, этот нюанс я забыл, да. Ну, или не сверхузкую, а просто на вставлять ее в итоговый документ из куска.
5 Fragster
 
модератор
12.12.13
19:15
не вставлять
6 Fragster
 
модератор
12.12.13
19:16
самая верхняя ячейка куска, за
7 kosts
 
12.12.13
19:22
В макете выводимом вторым. в каждой именованной горизонтальной области выделить область и немного изменить ширину, должен быть вопрос типа изменить ширину и тд, подтвердить. Готово
8 dj_serega
 
12.12.13
23:08
(7) дело в том, что я писал под пакетную печать. А база на полной поддержке без возможности изменения ;)

Завтра попробую без костыля, но с нюансом (4) .