Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 00:06

ПостроительОтчета без отступов и столбцов огромной ширины

Автор Абстрационист, 23 апр 2020, 11:07

0 Пользователей и 1 гость просматривают эту тему.

Абстрационист

Исходная задача: наиболее оптимально сохранить результат запроса в книгу excel (xlsx)

Табличный документ сохраняется в xlsx - в одно действие (уже - оптимально).

Осталось - быстро поместить результат запроса в табличный документ. Вот тут-то вопросы и пошли. Наиболее оптимальным представляется:
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных  = Новый ОписаниеИсточникаДанных(Выборка);
ТД = Новый ТабличныйДокумент;
Построитель.Вывести(ТД);

Однако, документ получается с переформатированной шириной части ячеек (некоторые столбцы с шириной до 200), с дополнительным пустым столбцом слева, с пустыми строками сверху. Всё это - очень мешает дальнейшему употреблению полученного файла xlsx. Я понимаю, что можно всё вручную поправить уже после Построитель.Вывести(ТД), но есть надежда, что есть более красивый способ. В идеале - обойтись без рисования и подключения макета, так как рисовать их под каждый такой запрос - не выглядит оптимальным решением.

LexaK

ЦитироватьЯ понимаю, что можно всё вручную поправить
Вручную не надо править!!! Просто после формирования ТД, добавьте пару команд, по вырезке пустых ячеек слева и сверху со сдвигом (либо через вырезку области), одной командой можно задать ширину всем колонкам, и еще кучу других настроек можно сделать.
если помогло нажмите: Спасибо!

Абстрационист

Цитата: LexaK от 23 апр 2020, 11:31Вручную не надо править!!! Просто после формирования ТД, добавьте пару команд, по вырезке

Вот именно эту процедуру я и называю "править вручную". А Ctrl+X - это уже совсем не по программистски.
Я надеялся, что можно сказать что-то типа Построитель.Макет.УбратьКЧертямОтступыИПустыеСтрокиСверху() или Построитель.Макет.КоличествоПустыхСтрокСверху = 0

LexaK

хм, вот как раз Ctrl+X и есть ручной режим

а 4-10 команд программы это - автоматизация

была подобная задача, попробуйте такой вариант

    //Удаление пустых ячеек
тдРезультат.УдалитьОбласть(тдРезультат.Область(1,,3),ТипСмещенияТабличногоДокумента.ПоВертикали);
тдРезультат.УдалитьОбласть(тдРезультат.Область(1,1,тдРезультат.ВысотаТаблицы,1),ТипСмещенияТабличногоДокумента.ПоГоризонтали);


    //другие настройки
тдРезультат.ФиксацияСверху = 1;
тдРезультат.ОтображатьСетку = Истина;
лкОбласть = тдРезультат.Область();
лкЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная);
лкОбласть.ГраницаСнизу = лкЛиния;
лкОбласть.ГраницаСправа = лкЛиния;
лкОбласть.ШиринаКолонки = 15;
//лкОбласть.ВесовойКоэффициентШирины = 3;
лкОбласть.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать;

если помогло нажмите: Спасибо!

Абстрационист

Цитата: LexaK от 23 апр 2020, 17:14//другие настройки
        тдРезультат.ФиксацияСверху = 1;
        тдРезультат.ОтображатьСетку = Истина;
        лкОбласть = тдРезультат.Область();
        лкЛиния = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная);
        лкОбласть.ГраницаСнизу    = лкЛиния;
        лкОбласть.ГраницаСправа    = лкЛиния;
        лкОбласть.ШиринаКолонки = 15;
        //лкОбласть.ВесовойКоэффициентШирины = 3;
        лкОбласть.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать;

В итоге: сетка захватывает не только колонки с отчётом, но и вообще все, сколько может (16384), и строки - тоже по максимуму, но сетка есть вниз только под отчётом - под пустыми колонками её нет.
Добавлено: 27 апр 2020, 07:59


И ещё проблема: после выгрузки в excel, колонки с 1 по 3 - получаются объединёнными. Способа их расклеить - не нашёл.

Теги: Запрос excel 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск