Страницы

19 июня 2021

Размер ячейки в табличном документе (вписать, объединить)

 

Сегодня рассмотрим две ситуации размещения текста в ячейке.

Содержание:

1. Вписывание текста в ячейку за счет уменьшения размера шрифта.

2. Объединение строк для полного вывода текста.



1. Вписывание текста в ячейку за счет уменьшения размера шрифта

Для примера создадим внешнюю обработку.

Подготовим Макет.

На форме разместит элементы.

Код на кнопку "Вписать в ячейку"

&НаКлиенте
Процедура ВписатьВЯчейку(Команда)
    ВписатьВЯчейкуНаСервере();
КонецПроцедуры

Дополнительные процедуры и функции.

&НаСервере
Процедура ВписатьВЯчейкуНаСервере()
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    ТабДок.Очистить();
    ОбластьМакета = Макет.ПолучитьОбласть("Область1|Область2");
    ТД = Новый ТабличныйДокумент;
    ТД.Вывести(ОбластьМакета);
    ОбластьТабДок = ТД.Область("R1C1:R1C1");
    ВместитьТекстВОбласть(ОбластьТабДок, ОбластьМакета, Объект.Текст, 60);
    ТабДок.Вывести(ТД);
КонецПроцедуры

&НаСервере
Процедура ВместитьТекстВОбласть(ОбластьТабДок, ОбластьМакета, Текст, МаксимальныйРазмерТекста = 60)
    НачальнаяВысота = ВысотаЯчейки(ОбластьТабДок, ОбластьМакета);
    ВремТабДок = Новый ТабличныйДокумент;
    ВремТабДок.Вывести(ОбластьМакета);
    ВремОбласть = ВремТабДок.Область(ОбластьТабДок.Имя);
    ВремОбласть.АвтоВысотаСтроки = Истина;
    ВремОбласть.ВысотаСтроки = 0;
    ВремОбласть.Текст = Текст + "Щ";
    РазмерТекста = МаксимальныйРазмерТекста;
    ВремОбласть.Шрифт = Новый Шрифт(ВремОбласть.Шрифт, ,РазмерТекста);
    ТекВысота = ВысотаЯчейки(ВремОбласть, ВремТабДок);
    Пока ТекВысота > НачальнаяВысота И РазмерТекста > 0 Цикл
        РазмерТекста = РазмерТекста - 1;
        ВремОбласть.Шрифт = Новый Шрифт(ВремОбласть.Шрифт, ,РазмерТекста);
        ТекВысота = ВысотаЯчейки(ВремОбласть, ВремТабДок);
    КонецЦикла;
    ОбластьТабДок.Шрифт = Новый Шрифт(ОбластьТабДок.Шрифт, ,РазмерТекста);
    ОбластьТабДок.Текст = Текст;
КонецПроцедуры

&НаСервере
Функция ВысотаЯчейки(Область, ТабДок)
    РисунокТекст = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
    РисунокТекст.Расположить(Область);
    ВысотаРисункаТекста = РисунокТекст.Высота;
    ТабДок.Рисунки.Удалить(РисунокТекст);
    Возврат(ВысотаРисункаТекста);
КонецФункции

Результат


2. Объединение строк для полного вывода текста

Код на кнопку "Узнать высоту строки и объединить"

&НаКлиенте
Процедура УзнатьВысотуСтрокиИОбъединить(Команда)
    УзнатьВысотуСтрокиИОбъединитьНаСервере();
КонецПроцедуры

Дополнительная процедура

&НаСервере
Процедура УзнатьВысотуСтрокиИОбъединитьНаСервере()
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    ТабДок.Очистить();
    ОбластьМакета = Макет.ПолучитьОбласть("Область1|Область2");
    ТД = Новый ТабличныйДокумент;
    ТД.Вывести(ОбластьМакета);
    ОбластьТабДок = ТД.Область("R1C1:R1C1");
    ТекстУмещаетсяВЯчейке(ТД, ОбластьТабДок, ОбластьМакета, Объект.Текст);
    ТабДок.Вывести(ТД);
КонецПроцедуры

Результат



Авторство не мое, информация взята по ссылке https://infostart.ru/public/123769/?detail=Y
Я только попробовал реализовать на свой лад и сохранить, что бы не искать.

Моя внешняя обработка (скачать Пример)

Комментариев нет:

Отправить комментарий