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

Сама процедура:

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

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

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

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

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

    АвтоОтступ = 0;

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

    ШиринаКолонки = 0;

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

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

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

    КонецЕсли;

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

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

    КонецЕсли;

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

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

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

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

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

    КонецЕсли;

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

    КонецЦикла;

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

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

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

    // Определим, сколько ячеек по ширине используется в области для текущей ячейки
    КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево;

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

    Если ШириныКолонок.ВГраница() > ТекущаяКолонка - 1 + НомерКолонки Тогда

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

    Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда
    // Значение ширины колонки еще не было установлено

    ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1);

    Иначе
    // Значение ширины колонки уже было установлено
    // Вычислим максимум ширины колонки
    ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] =
    Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1));

    КонецЕсли;

    Иначе

    // В массиве ширин колонок еще не было элемента для данной колонки
    // Добавим элемент в массив ширин колонок
    ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1));

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

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

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

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

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

    КонецЕсли;

    КонецЦикла;

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

Сама процедура:

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

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

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

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

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

    АвтоОтступ = 0;

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

    ШиринаКолонки = 0;

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

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

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

    КонецЕсли;

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

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

    КонецЕсли;

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

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

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

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

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

    КонецЕсли;

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

    КонецЦикла;

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

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

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

    // Определим, сколько ячеек по ширине используется в области для текущей ячейки
    КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево;

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

    Если ШириныКолонок.ВГраница() > ТекущаяКолонка - 1 + НомерКолонки Тогда

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

    Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда
    // Значение ширины колонки еще не было установлено

    ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1);

    Иначе
    // Значение ширины колонки уже было установлено
    // Вычислим максимум ширины колонки
    ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] =
    Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1));

    КонецЕсли;

    Иначе

    // В массиве ширин колонок еще не было элемента для данной колонки
    // Добавим элемент в массив ширин колонок
    ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1));

    КонецЕсли;

    КонецЦикла;

    КонецЕсли;

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

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

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

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

    КонецЕсли;

    КонецЦикла;

    КонецПроцедуры
```
---
Автоматическая ширина колонок в СКД