Имя: Пароль:
1C
 
Как склеить несколько табличных документов в 1С
☑
0 Гений 1С
 
гуру
01.10.26
✎
12:13
Вывожу в один файл листы КУДИР.
В итоге последующие листы подгонятются под формат первого.
Как выводить каждый в своем формате?
Пробовал через вывести область, получаю пустой результат

    ТабДок = v8.NewObject("ТабличныйДокумент");
    Для Каждого Лист ИЗ СписокСформированныхЛистов Цикл
        ТабДок.Вывести(Лист.Значение);
        //Область = Лист.Значение.Область();
        //ТабДок.ВставитьОбласть(Область, ТабДок.Область(ТабДок.ВысотаТаблицы, 1, ТабДок.ВысотаТаблицы + Область.Низ - 1, Область.Право));
    КонецЦикла;
1 PLUT
 
гуру
01.10.26
✎
12:18
(0) старость от 2014 года


©пижжено отсюда
https://its.1c.ru/db/metod8dev/content/5792/hdoc

// Создаем пакет
Пакет = Новый ПакетОтображаемыхДокументов;

// Документы, находящиеся в этом пакете, печатаются в 5 экземплярах
Пакет.КоличествоЭкземпляров = 5;

// Добавляем документы в пакет
ЭлементПакета1 = Пакет.Состав.Добавить();
ЭлементПакета1.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент1, УникальныйИдентификатор);
ЭлементПакета2 = Пакет.Состав.Добавить();
ЭлементПакета2.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент2, УникальныйИдентификатор);

// Добавляем вложенный пакет для третьего документа
ВложенныйПакет = Новый ПакетОтображаемыхДокументов;
ЭлементПакета3 = Пакет.Состав.Добавить();
ЭлементПакета3.Данные = ВложенныйПакет;

// Документ во вложенном пакете печатается в 2 экземплярах
ВложенныйПакет.КоличествоЭкземпляров = 2;

// Добавляем документ во вложенный пакет
ЭлементВложенногоПакета1 = ВложенныйПакет.Состав.Добавить();
ЭлементВложенногоПакета1.Данные = ПоместитьВоВременноеХранилище(ТабличныйДокумент3, УникальныйИдентификатор);

// Печатаем пакет
Пакет.Напечатать();


Для вложенного пакета можно установить те же параметры печати, что и для всего пакета, при этом если какие-то параметры не установлены, то они определяются из параметров родительского пакета.

Пакет позволяет также экспортировать табличные документы в один PDF файл. Для этого предназначен метод пакета ЗаписатьФайлДляПечати(), которому передается полное имя файла.
2 Garykom
 
гуру
01.10.26
✎
12:22
(0) ТабДок в 1С это по сути один объект
Или разные объекты использовать как (1)

Или в одном использовать мелкую сетку (ширина и высота ячеек минимальная) для подгонки
Ориентация разных страниц аналогично извращаться с направлением текста
3 Гений 1С
 
гуру
01.10.26
✎
12:26
(1) мне нужно не в пакет, а сразу в файл
4 Гений 1С
 
гуру
01.10.26
✎
12:26
(2) по сути надо формат строк новый задать. Вроде была такая команда, не?
5 Garykom
 
гуру
01.10.26
✎
12:28
(4) Тебе СП продать?
6 Fedor-1971
 
01.10.26
✎
12:32
(4) СоздатьФорматСтрок в СП, т.е. фиксируем ширины колонок для каждого выводимого листа
7 Прохожий
 
01.10.26
✎
12:38
(3) На одном листе или на разных? Ладно, долой интриги. В конце этой ветки придут умные и скажут "делай PDF и склеивай листы в одну книжку" потом хоть на печать, хоть в почту, хоть на экран.
8 Fragster
 
гуру
01.10.26
✎
12:44
нужно в исходном документе не выводить область, а копировать. перед этим у того места, куда вставляешь область нужно сделать ОбластьЯчеекТабличногоДокумента (SpreadsheetDocumentRange)
СоздатьФорматСтрок (CreateFormatOfRows)
Синтаксис:
СоздатьФорматСтрок()
Описание:
Создает у области новый формат строк. В новом формате строк размеры колонок будут соответствовать размерам колонок, которые были установлены в области.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
// ТДПриемник - табличный документ, в кот. устанавливается новый формат

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

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

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

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

КонецПроцедуры // ДобавитьОтчет


Использование в версии:
Доступен, начиная с версии 8.2.
     Методическая информация
9 PLUT
 
гуру
01.10.26
✎
12:45
(3)
> мне нужно не в пакет, а сразу в файл

я х.з. что тебе нужно

ТипФайлаПакетаОтображаемыхДокументов (RepresentableDocumentBatchFileType)
Значения
DOCX (DOCX)
HTML4 (HTML4)
HTML5 (HTML5)
ODS (ODS)
PDF (PDF)
TXT (TXT)
XLS (XLS)
XLSX (XLSX)
Описание:
Типы файла для сохранения пакета отображаемых документов.
10 Fragster
 
гуру
01.10.26
✎
12:45
вон, в СП даже почти готовый код для (0)
11 Гений 1С
 
гуру
01.10.26
✎
14:57
(8) неплохо, спасибо. Клиент переиграл, хочет в отдельные файлы XLS сохранять. Можно и в листы, но 1С вроде не умеет в листы?
12 Волшебник
 
01.10.26
✎
15:03
(11) см. ПакетОтображаемыхДокументов
13 Гений 1С
 
гуру
01.10.26
✎
15:08
(12) интересно. они в платформу сие добавили... надо ж.
14 Волшебник
 
01.10.26
✎
15:10
(13) уже лет 10 или 12
15 H A D G E H O G s
 
01.10.26
✎
15:12
Нас еще нейросетками пугают. Сначала они лет 10 будут поджирать вот таких вот специалистов.
16 Fish
 
гуру
01.10.26
✎
15:50
Судя по
ТабДок = v8.NewObject("ТабличныйДокумент");


Это всё ещё и по КОМу делается. 🤦
17 PR
 
01.10.26
✎
17:10
О, очередная сложнейшая задача тысячелетия от генитального
18 Гений 1С
 
гуру
01.10.26
✎
20:12
(15) не будут, ИИ сильно преувеличена. Поисковик не заменит программиста
19 Гений 1С
 
гуру
01.10.26
✎
20:13
(16) в обновляторе
20 Garykom
 
гуру
01.10.26
✎
20:31
(18) Вероятно ты еще не видел реально умные LLM типа Claude Opus/Sonnet 5 и сравнимые аналоги
Особенно в правильном окружении для 1С
21 Garykom
 
гуру
01.10.26
✎
20:32
(19) Еще раз для гениев
Напиши цуко внешнюю обработку
И вызывай ее через обновлятор внутри нужной базы 1С

Хорош уже того стюардессу