Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Установка ширины колонок таблицы отчета          
vadim007 Подменю пользователя
сообщение 21.03.13, 11:23
Сообщение #1

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

Но вот беда: эта процедура не учитывает размер шрифта.
И бывает, что для текста с размером шрифта 8 ширина столбца устанавливается слишком большой, а для текста с размером шрифта 10 жирный - малой.
Помогите доработать эту процедуру для учета размера шрифта.

alex040269 Подменю пользователя
сообщение 21.03.13, 12:17
Сообщение #2

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

увы, для того что бы узнать длину текста исходя из размера шрифта нужен доступ, если не изменяет память, к канве, а это только через внешние компоненты.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

vadim007 Подменю пользователя
сообщение 21.03.13, 13:49
Сообщение #3

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

И найденную МаксШирина умножать на соответствующий размеру шрифта коэффициент из таблицы.
Аналогично можно составить таблицу коэффициентов заполнения для символов, т.к. разные символы имеют разную ширину.
А для признаков шрифта - Жирный, Курсив - добавить поправочные коэффициенты.
Как идея?

alex040269 Подменю пользователя
сообщение 21.03.13, 15:29
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Этот способ подойдет только для моноширинных шрифтов, например courier new, arial.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

vadim007 Подменю пользователя
сообщение 21.03.13, 15:54
Сообщение #5

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Ну, тут особой точности и не нужно.
Сделал первый вариант, для Ариал Кир размером 8 оптимальным оказался коэффициент 0,99.

Cthulhu Подменю пользователя
сообщение 23.03.13, 14:01
Сообщение #6

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0

правильный термин - "субоптимальным".
в общем случае не(!)"моноширинных" шрифтов вычисление подобной формулой в принципе невозможно. хотите убедиться - примените ваш "оптимальный коэффициент" к текстам, состоящим из 30-50-ти (для наглядности) символов "!", а потом из символов "Щ", например...
для себя сходная проблема решалась:
1) принятием в качестве стандарта оформления 1-3-х шрифтов
2) экспериментального вычисления коэффициента увеличения ширині символа при изменении размера шрифта;
3) экспериментального вычисления точного значения (пятый знак) ширины каждого символа каждого шрифта из списка принятых в п.1 (стандартного размера).
вычисление во многом ручное, но выполняллось один раз и навеки для каждого шрифта. вбивание в моксель, например, ста повторений символа, ручное выставление визуально оптимальной ("заподлицо") шинины колонки такой ячейки, вычисление делением полученной правой кнопкой ширины такой ячейки на количество символов в ячейке - с запоминанием вычисленного параметра (каждой) литеры (каждого из нужных шрифтов) "базового размера шрифта" в соотв. значении соотв.массива данных - "на века".
4) использование один раз вычисленного везде где это надо.

vadim007 Подменю пользователя
сообщение 25.03.13, 7:38
Сообщение #7

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Великолепно!
Может поделитесь готовым решением?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 17:22
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!