1с авто ширина колонок

Ширина колонки в СКД по содержимому

Решение найдено:
В модуле объекта внешнего отчета добавила процедуру, выделенную жирным шрифтом:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
,
,
,
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
РасчетШириныКолонок(ДокументРезультат);
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры

Сама процедура:
Процедура РасчетШириныКолонок(ТабличныйДокумент)

Перем МаксимальноеКоличествоСтрок, МаксимальнаяШиринаКолонки;
Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных;
Перем ОбластьШапки, ОбластьПодвала;
Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста;
Перем КоличествоУровнейГруппировокСтрок, Отступ;
Перем ШириныКолонок;

// Максимальное количество строк отчета, которые будут использованы для расчета ширин колонок
МаксимальноеКоличествоСтрок = ТабличныйДокумент.ВысотаТаблицы;
// Ограничение максимальной ширины колонки
МаксимальнаяШиринаКолонки = 30;
// Массив, в который будут помещаться ширины колонок
ШириныКолонок = Новый Массив;
// Получим количество уровней группировок в отчете для учета автоматического отступа
КоличествоУровнейГруппировокСтрок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок();

// Инициализируем начальные строки
НачальнаяСтрока = 9; //У МЕНЯ РАСЧЕТ ШИРИНЫ КОЛОНОК НАЧИНАЕТСЯ СО СТРОКИ ВЫВОДИМЫХ ДАННЫХ (ПОД ШАПКОЙ ТАБЛИЦЫ)
НачалоДанных = 9;
КонечнаяСтрока = НачальнаяСтрока + МаксимальноеКоличествоСтрок;
// Ограничим конечную строку
КонечнаяСтрока = Мин(КонечнаяСтрока, ТабличныйДокумент.ВысотаТаблицы);

// Переберем все колонки отчета
Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл

// Переберем строки, которые будут использованы для расчета ширин колонок
Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл

// Получим область текущей ячейки
ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка);

Если ОбластьЯчейки.Лево <> ТекущаяКолонка Или ОбластьЯчейки.Верх <> ТекущаяСтрока Тогда

// Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой
Продолжить;

Если КоличествоУровнейГруппировокСтрок > 0 И ТекущаяСтрока = НачалоДанных Тогда

// Для первой строки с данными получим значение автоотступа
АвтоОтступ = ОбластьЯчейки.АвтоОтступ;

// Получим текст ячейки
ТекстЯчейки = ОбластьЯчейки.Текст;

// Для каждой строки из текста ячейки рассчитаем количество символов в строке
Для НомерСтрокиТекста = 1 По СтрЧислоСтрок(ТекстЯчейки) Цикл

ШиринаТекстаЯчейки = СтрДлина(СтрПолучитьСтроку(СокрЛП(ТекстЯчейки), НомерСтрокиТекста));

// Если используется автоотступ, то прибавим к ширине ячейки его величину
Если АвтоОтступ <> Неопределено И АвтоОтступ > 0 Тогда

ШиринаТекстаЯчейки = ШиринаТекстаЯчейки + КоличествоУровнейГруппировокСтрок * АвтоОтступ;

ШиринаКолонки = Макс(ШиринаКолонки, ШиринаТекстаЯчейки);

Читайте также:  Разборка авто форд скорпио

Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда

// Ограничим ширину колонки
ШиринаКолонки = МаксимальнаяШиринаКолонки;
КонецЕсли;

Если ШиринаКолонки <> 0 Тогда
// Ширина колонки рассчитана

// Переберем все ячейки, расположенные в области
Для НомерКолонки = 0 По КоличествоКолонок Цикл

// В массиве ширин колонок уже был элемент для текущей колонки

КонецЦикла; // Конец цикла перебора строк

КонецЦикла; // Конец цикла перебора колонок

// Переберем все элементы в массиве вычисленных ширин колонок
Для ТекущаяКолонка = 0 По ШириныКолонок.ВГраница() Цикл

Если ШириныКолонок[ТекущаяКолонка] <> Неопределено Тогда
// Ширина колонок установлена
// Установим ширину области ячеек
ТабличныйДокумент.Область(, ТекущаяКолонка + 1, НачалоДанных, ТекущаяКолонка + 1).ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1;

Источник

Вопрос - ответ
Adblock
detector