Имя: Пароль:
1C
 
Как вставить табличный документ в другой табличный документ?
0 RomaH
 
naïve
27.02.20
10:54
с кодом из СП получается чудовище Франкенштейна
https://dl.dropboxusercontent.com/s/rqovj9g5thyykug/2020-02-27_10h48_12.png?dl=0

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


конкретно на этом виде документа - для красивости надо еще объединить две верхние ячейки по горизонтали и задать ширину колонок "Растягивать по горизонтали"
1 RomaH
 
naïve
27.02.20
10:57
еще проблема - во вставляемом ТД могут попадаться строки со своим форматом строк

я правильно понимаю, что для корректной вставки надо вставлять каждую строку по отдельности
для каждой колонки этой строки копировать свойства

и как объединять ячейки кодом?
2 RomaH
 
naïve
27.02.20
11:02
даже не как объединить - а как узнать какие ячейки объединены?
3 RomaH
 
naïve
27.02.20
11:32
если нет вертикального объединения вроде более-менее
https://dl.dropboxusercontent.com/s/ul3xca2jqjz5rnk/2020-02-27_11h27_59.png?dl=0

вопрос  только по строкам без текста - при вставке области не "понимает" область печати  - строка над "Пациентом"
4 FIXXXL
 
27.02.20
13:03
(2) почитай СП про СоздатьФорматСтрок
5 FIXXXL
 
27.02.20
13:05
(4) +
Пример:

// ТДПриемник - табличный документ, в кот. устанавливается новый формат

// Отчет - табличный документ, на основании кот. будет установлен новый формат

Процедура ДобавитьОтчет(ТДПриемник, Отчет)

    НачалоНовогоФорматаСтрок = ТДПриемник.ВысотаТаблицы + 1;
    ОбластьПрямоугольная = Отчет.Область(1, , Отчет.ВысотаТаблицы, );
    ТДПриемник.ВставитьОбласть(ОбластьПрямоугольная, ТДПриемник.Область(НачалоНовогоФорматаСтрок, 1));
    ТДПриемник.Область(НачалоНовогоФорматаСтрок, ,
        НачалоНовогоФорматаСтрок + Отчет.ВысотаТаблицы - 1, ).СоздатьФорматСтрок();
    // назначим ширину колонок у новой области формата строк

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

КонецПроцедуры // ДобавитьОтчет
6 Franchiser
 
гуру
27.02.20
13:12
ТабличныйДокумент (SpreadsheetDocument)
Вывести (Put)
Синтаксис:
Вывести(<Таблица>, <Уровень>, <ИмяГруппы>, <Открыта>)
Параметры:
<Таблица> (обязательный)
Тип: ТабличныйДокумент, ПолеТабличногоДокумента.
Выводимая таблица.
<Уровень> (необязательный)
Тип: Число.
Уровень используется для автоматической группировки строк табличного документа. Соседние строки с одинаковым уровнем будут отнесены к одной группе. Строки с минимальным уровнем в группу не объединяются.
<ИмяГруппы> (необязательный)
Тип: Строка.
Название группы, к которой относятся выводимые строки.
Значение по умолчанию: Пустая строка.
<Открыта> (необязательный)
Тип: Булево.
Истина - выведенная группа будет открыта; Ложь - группа будет выведена в свернутом виде.
Значение по умолчанию: Истина.
Возвращаемое значение:
Тип: ОбластьЯчеекТабличногоДокумента.
Область, в которую был осуществлен вывод.
Описание:
Выводит табличный документ в результирующий табличный документ, добавляя его со следующей строки вслед за самой нижней выведенной строкой, начиная с первой колонки.
Табличные документы, которые выводятся при помощи данного метода, не рекомендуется передавать между клиентом и сервером и обратно.
7 RomaH
 
naïve
27.02.20
14:00
Прикольно
Процедура ВставитьТабличныйДокумент(ТабличныйДокумент,РезультатИсследования);
    
    Для НомерСтроки = 1 По РезультатИсследования.ВысотаТаблицы Цикл
        
        НачалоНовогоФорматаСтрок = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        ОбластьПрямоугольная = РезультатИсследования.Область(НомерСтроки, ,НомерСтроки);
        ТабличныйДокумент.ВставитьОбласть(ОбластьПрямоугольная, ТабличныйДокумент.Область(НачалоНовогоФорматаСтрок, 1));
        ТабличныйДокумент.Область(НачалоНовогоФорматаСтрок, ,НачалоНовогоФорматаСтрок).СоздатьФорматСтрок();
        
        СтрокаРезультатата = РезультатИсследования.ПолучитьОбласть(НомерСтроки,,НомерСтроки);
        
        Если СтрокаРезультатата.ШиринаТаблицы = 0 Тогда
            СтрокаРезультатата = РезультатИсследования.ПолучитьОбласть(НомерСтроки,1,НомерСтроки,1);
        КонецЕсли;
        
        Для Счетчик = 1 По Макс(СтрокаРезультатата.ШиринаТаблицы,1) Цикл
            ТабличныйДокумент.Область(НачалоНовогоФорматаСтрок, Счетчик).ШиринаКолонки = СтрокаРезультатата.Область(1, Счетчик).ШиринаКолонки;
            ТабличныйДокумент.Область(НачалоНовогоФорматаСтрок, Счетчик).РастягиватьПоГоризонтали = СтрокаРезультатата.Область(1, Счетчик).РастягиватьПоГоризонтали;
        КонецЦикла;
        
    КонецЦикла;
    
КонецПроцедуры


ТабличныйДокумент.Область(НачалоНовогоФорматаСтрок, Счетчик).ШиринаКолонки = СтрокаРезультатата.Область(1, Счетчик).ШиринаКолонки;

тут ширину на пустой строке нифига не присваивает
справа 60, а слева остается 9
8 Franchiser
 
гуру
27.02.20
14:04
(7) Так не работает
ТабличныйДокумент.Вывести(ТабДок) ?
9 RomaH
 
naïve
27.02.20
14:05
конечный результат

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


вроде красиво
но не будет работать на ячейках объединенных по вертикали
10 RomaH
 
naïve
27.02.20
14:05
(8) а ты писатель или читатель?
11 Franchiser
 
гуру
27.02.20
14:08
(10) тему прочитал, дальше не понял зачем тебе это все
12 RomaH
 
naïve
27.02.20
14:09
(11) так нахера тогда пишешь?
Программист всегда исправляет последнюю ошибку.