Наверное, каждый делал печатные формы в 1С, и многие делали прайс-листы с картинками.
Вот и я столкнулся с проблемой красивого формирования прайс-листа. Дело в том, что нужно сделать прайс-лист с картинками для разнообразного товара. При этом длина наименования товара или описания может сильно различаться.
У строки табличного документа есть великолепное свойство "АвтоВысотаСтроки" . и даже можно задать максимальную высоту. Если длина описания товара большая и поставить в свойствах "РазмещениеТекста" ячейки "Переносить" - то в результате высота строки увеличится, текст будет отражаться корректно и картинка поместится в нужную ячейку. Однако, если длина описания маленькая, то при выставленном свойстве "АвтоВысотаСтроки" высота получившейся строки может равняться высоте только одной строки текста и картинка в соседней ячейке уменьшится по высоте, чтобы вписаться в высоту строки. При этом картинка становится "нечитаемой" и весь прайс выглядит "коряво".
В идеале решением данной проблемы могло бы служить свойство минимальная высота строки, однако такого свойства у области ячеек нет и, кроме всего, мы не можем прочитать высоту строки при установленном свойстве "АвтоВысотаСтроки".
Из всего это следует, что нам нужно как-то ограничить минимальную высоту строки для красивого вывода прайс-листа с картинками.
Как это можно сделать?
В самом макете устанавливаем минимальную высоту строки в которой корректно отображаются картинки. А в обработке вывода строки будем проверять, вписывается ли наш текст в установленную высоту или нет.
Проще всего проверить это так:
1. Считываем текущую высоту строки;
2. Устанавливаем высоту строки равную 0 и устанавливаем свойство "АвтоВысотаСтроки" в Истина.
3. Сверяем с высотой из 1 п. Если высота увеличилась - то оставляем все как есть, а если уменьшилась - то возвращаем высоту назад, как мы указали при создании макета.
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыТовары);
Область = ТабличныйДокумент.ОБласть(ТабличныйДокумент.ВысотаТаблицы,1,ТабличныйДокумент.ВысотаТаблицы,1);
Рулетка = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рулетка.Расположить(Область);
ВысотаСтроки = Область.ВысотаСтроки;
Высота1 = Рулетка.Высота;
Область.ВысотаСтроки = 0;
Область.АвтоВысотаСтроки = Истина;
Высота2 = Рулетка.Высота;
Если Высота2<Высота1 тогда
Область.АвтоВысотаСтроки = Ложь;
Область.ВысотаСтроки = ВысотаСтроки;
КонецЕсли;
На мой взгляд получился достаточно просто и не ресурсоемкий способ.
Пример обработки вы можете скачать ниже.
Платформа 8.3.14.