Столкнулся давеча с проблемой:
У коллеги возникла необходимость узнать высоту строки табличного документа, при выставленном флаге автовысоты. Платформа сие не позволяет сделать непосредственно. Если АвтоВысотаСтроки = Истина, то ВысотаСтроки в таком случае будет равна нулю. Раз нельзя сделать непосредственно, значит сделаем посредством имеющихся средств, но коллегу в беде не бросим =). Ниже приведён код реализации. В качестве файла приложена обработка с наглядной демонстрацией решения (нужно открыть её в предприятии и нажать "Выполнить").
Откуда возникла задача (немного упрощаю пример):
Рассмотрим первую строку табличного документа. Необходимо, чтобы высота строки устанавливалась по высоте первой ячейки. В первой ячейке может быть разный текст и задать её высоту фиксировано нельзя. АвтоВысотаСтроки тоже не спасает положение, т.к. в качестве неё возьмётся максимальная из высот всех ячеек строки, а нам позарез надо ориентироваться на первую. Поэтому было принято решение найти высоту первой ячейки с выставленным АвтоВысотаСтроки = Истина, после чего установить найденную высоту для строки.
З.Ы. также для увеличения производительности поиска высоты строки пришлось применить метод половинного деления.
//Описание: назначение очевидно из названия
//Для областей табличного документа с признаком автовысоты строки платформа не позволяет вычислить высоту строки.
//Поэтому можно воспользоваться этой функцией.
//
//Описание реализации:
//Существенно повысило скорость измерение строками не единичной высоты, а наиболее подходящей
//Но как ни печально, практический опыт показал, например,
//что одна строка высотой 512, равна примерно пятиста строкам высотой 1
//т.е. слегка понижается точность измерения.
//
//Пример вызова:
//ВысотаПервойЯчейки = ВысотаОбластиТабДока(ЭлементыФормы.ПолеТабличногоДокумента1.ПолучитьОбласть(,,1,1));
//
//Автор: Патриот
Функция ВысотаОбластиТабДока(ИзмеряемыйТабДок)
МассивТабДоков = Новый Массив;
МассивТабДоков.Добавить(ИзмеряемыйТабДок);
ТабДок = Новый ТабличныйДокумент;
ТекВысота = 512;
ДобавВысота = 0;
Пока Истина Цикл
СтрТабДока = ТабДок.ПолучитьОбласть(,,1);
СтрТабДока.ТекущаяОбласть.ВысотаСтроки = ТекВысота;
МассивТабДоков.Добавить(СтрТабДока);
Если ТабДок.ПроверитьВывод(МассивТабДоков) Тогда
ДобавВысота = ДобавВысота + ТекВысота;
Иначе
Если ТекВысота > 1 Тогда
МассивТабДоков.Удалить(МассивТабДоков.ВГраница());
ТекВысота = ТекВысота / 2;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбщВысота = 785;//вычислена ранее этой же функцией: ВысотаОбластиТабДока(Новый ТабличныйДокумент)
Возврат ОбщВысота - ДобавВысота;
КонецФункции
------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!