Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Установка ширины колонок таблицы отчета
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
vadim007
В отчет могут выводиться строки текста разной длины, ширину столбца не угадаешь.
Для автоматической установки ширины столбцов отчета использую следующую процедуру:
Процедура АвтоШиринаКолонок(Таб,НачКол,НачСтр)
    // Проходим по столбцам таблицы,
    Для НомерКол=НачКол По Таб.ШиринаТаблицы() Цикл
        // затем спускаемся по текущему столбу по ячейкам (по строкам),
        // и максимизируем ширину каждой ячейки в текущем столбце
        МаксШирина=0;
        Для НомерСтр=НачСтр По Таб.ВысотаТаблицы() Цикл
            ТекШирина =Таб.Область(НомерСтр,НомерКол).ШиринаСтолбца();         // Ширина текущего столбца
              ТекДлина  =СтрДлина(СокрЛП(Таб.Область(НомерСтр,НомерКол).Текст)); // Размер текста в ячейке
            МаксШирина=Макс(МаксШирина,ТекШирина,ТекДлина);
        КонецЦикла;
        Таб.Область(,НомерКол).ШиринаСтолбца(МаксШирина);
    КонецЦикла;
КонецПроцедуры

Но вот беда: эта процедура не учитывает размер шрифта.
И бывает, что для текста с размером шрифта 8 ширина столбца устанавливается слишком большой, а для текста с размером шрифта 10 жирный - малой.
Помогите доработать эту процедуру для учета размера шрифта.
alex040269
увы, для того что бы узнать длину текста исходя из размера шрифта нужен доступ, если не изменяет память, к канве, а это только через внешние компоненты.
vadim007
Вижу один путь: внутри процедуры создать таблицу КоэффСуженияШрифтов со столбцами РазмерШрифта и Коэфф. Она заполняется эмпирическими данными типа:
РазмерШрифта  Коэфф
      11                 1,1
      10                 1
       9                  0,9
       8                  0,8

И найденную МаксШирина умножать на соответствующий размеру шрифта коэффициент из таблицы.
Аналогично можно составить таблицу коэффициентов заполнения для символов, т.к. разные символы имеют разную ширину.
А для признаков шрифта - Жирный, Курсив - добавить поправочные коэффициенты.
Как идея?
alex040269
Этот способ подойдет только для моноширинных шрифтов, например courier new, arial.
vadim007
Ну, тут особой точности и не нужно.
Сделал первый вариант, для Ариал Кир размером 8 оптимальным оказался коэффициент 0,99.
Cthulhu
правильный термин - "субоптимальным".
в общем случае не(!)"моноширинных" шрифтов вычисление подобной формулой в принципе невозможно. хотите убедиться - примените ваш "оптимальный коэффициент" к текстам, состоящим из 30-50-ти (для наглядности) символов "!", а потом из символов "Щ", например...
для себя сходная проблема решалась:
1) принятием в качестве стандарта оформления 1-3-х шрифтов
2) экспериментального вычисления коэффициента увеличения ширині символа при изменении размера шрифта;
3) экспериментального вычисления точного значения (пятый знак) ширины каждого символа каждого шрифта из списка принятых в п.1 (стандартного размера).
вычисление во многом ручное, но выполняллось один раз и навеки для каждого шрифта. вбивание в моксель, например, ста повторений символа, ручное выставление визуально оптимальной ("заподлицо") шинины колонки такой ячейки, вычисление делением полученной правой кнопкой ширины такой ячейки на количество символов в ячейке - с запоминанием вычисленного параметра (каждой) литеры (каждого из нужных шрифтов) "базового размера шрифта" в соотв. значении соотв.массива данных - "на века".
4) использование один раз вычисленного везде где это надо.
vadim007
Великолепно!
Может поделитесь готовым решением?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.