Определение высоты области табличного документа при выставленном флаге автовысоты

08.04.16

Разработка - Инструментарий разработчика

Платформа сие не позволяет сделать непосредственно. Если АвтоВысотаСтроки = Истина, то ВысотаСтроки в таком случае будет равна нулю. Раз нельзя сделать непосредственно, значит, сделаем посредством имеющихся средств.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ВысотаОбластиТабДока.epf
.epf 7,72Kb
4 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Столкнулся давеча с проблемой:
У коллеги возникла необходимость узнать высоту строки табличного документа, при выставленном флаге автовысоты. Платформа сие не позволяет сделать непосредственно. Если АвтоВысотаСтроки = Истина, то ВысотаСтроки в таком случае будет равна нулю. Раз нельзя сделать непосредственно, значит сделаем посредством имеющихся средств, но коллегу в беде не бросим =). Ниже приведён код реализации. В качестве файла приложена обработка с наглядной демонстрацией решения (нужно открыть её в предприятии и нажать "Выполнить").

Откуда возникла задача (немного упрощаю пример):
Рассмотрим первую строку табличного документа. Необходимо, чтобы высота строки устанавливалась по высоте первой ячейки. В первой ячейке может быть разный текст и задать её высоту фиксировано нельзя. АвтоВысотаСтроки тоже не спасает положение, т.к. в качестве неё возьмётся максимальная из высот всех ячеек строки, а нам позарез надо ориентироваться на первую. Поэтому было принято решение найти высоту первой ячейки с выставленным АвтоВысотаСтроки = Истина, после чего установить найденную высоту для строки.

З.Ы. также для увеличения производительности поиска высоты строки пришлось применить метод половинного деления. 

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

------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!

Вступайте в нашу телеграмм-группу Инфостарт

Табличный документ Высота строки табличного документа

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    210109    1151    413    

1042

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    39141    216    113    

204

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

16000 руб.

10.11.2023    18240    78    39    

92

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9500 руб.

17.05.2024    36873    134    55    

176

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    25824    65    30    

96

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше.<br/> Далее в публикации:<br/> MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    2580    4    7    

12

Инструментарий разработчика 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    3471    7    0    

12

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

6000 руб.

07.02.2018    108216    249    100    

313
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. json 3392 08.04.16 16:06 Сейчас в теме
Плюс за еще один способ.
Но способ с рисунком из публикации Поместится ли текст в ячейке? (с примерами использования: авторазмер шрифта, перенос строк) работает на порядок быстрее
Если в цикле не вызывать, то в общем-то без разницы
2. Патриот 464 11.04.16 10:14 Сейчас в теме
(1) yurii_host, за ссыль спасибо, когда искал решение в интернете, то предложенную вами статью не видел, ибо искал про "высоту строки", а тут про "поместится ли текст в ячейке" поэтому поисковик её не выдал.
Данный способ пытался воплотить в жизнь и я, ибо когда пришло осознание, что платформа не даёт узнать высоту строки/ячейки/любой другой области, первое что я придумал - если нельзя замерить строку, может можно узнать высоту какого-нибудь объекта, помещённого в ячейку? Но этого сделать не удалось, потому я реализовал решение, представленное в данной статье.

На всякий пожарный протестил функцию из указанной вами статьи. На последних версиях платформы она не работает.
Пробовал добавлять "Надпись.АвтоРазмер = Истина" - не помогает. Вот код:
	//тестил на 8.2.19.121 и 8.3.7.1993
	ТабДок = Новый ТабличныйДокумент;
	Ячейка1_1 = ТабДок.Область(1,1);
	Ячейка1_2 = ТабДок.Область(1,2);
	Ячейка1_2.Текст = "1" + Символы.ПС + "2" + Символы.ПС + "3";
	Сообщить(ВысотаОбластиВмм(Ячейка1_1,ТабДок) = ВысотаОбластиВмм(Ячейка1_2,ТабДок));//Истина
3. json 3392 12.04.16 11:13 Сейчас в теме
Я использую упрощенный вариант этой функции

Функция ПолучитьВысотуОбластиВМиллиметрах(Область) Экспорт
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.Вывести(Область);
    Надпись = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);    
    Надпись.Расположить(ТабличныйДокумент.Область(1,1,ТабличныйДокумент.ВысотаТаблицы,1));    
    Возврат Надпись.Высота;    

КонецФункции
Показать


Значения с вашей функцией не совпадут, т.к. результат она выдает в миллиметрах, а ваша функция в "не знаю точно как называется эта единица".

Зависимость прямо пропорциональная:
Результат = РезультатВММ * НекоторыйКоэффициент;

Проверял на платформе 8.3.7.1917.
Должна работать и на более ранних и более поздних.
CaSH_2004; naypak; FreeMan69; Leon75; Olga12; LosevI; Патриот; +7 Ответить
4. Патриот 464 12.04.16 14:25 Сейчас в теме
(3) yurii_host, спасибо, ваш код работает. Он отличается от кода из предложенной вами статьи тем, что создаётся НОВЫЙ табличный документ и в него уже вставляется и измеряемая область и используемый для измерения рисунок. Способ, очевидно, д.б. эффективней, чем предложенный в моей статье, о чём при случае допишу. Самое главное, что я сам сразу же хотел решить проблему именно так, но не догадался копировать область в НОВЫЙ ТабДок из-за чего зря отбросил незаконченное решение и после некоторых раздумий сделал так, как написал в данной статье.
5. user1086697 02.04.19 17:38 Сейчас в теме
(3) Вы тестировали свою функцию? Просто мне для некоторого задания было необходимо узнать высоту строк. И так вот, тестировала на разных шрифтах с различными начертаниями. И на многих тестах ответ даёт не верный, где-то прямо на целую строку высота больше, где-то текст не полностью влазит. Вывод, функция автора и ваша не корректны, либо я что-то упускаю. Буду благодарна за обратную связь!
6. json 3392 03.04.19 06:44 Сейчас в теме
(5) Милая моя, для моих задач функция работала корректно. И дело тут не в тестировании. Похоже она не работает для твоих задач, потому что ты используешь нестандартные шрифты.
Поэтому ты можешь быть благодарна за те наработки, которые выложили другие и адаптировать их под себя.
А если у тебя недостаточно опыта, чтобы сделать это самостоятельно, то можно обратиться за помощью. При этом подобная манера общения не располагает к тому, чтобы кто-то потратил время на помощь тебе.
7. user1086697 03.04.19 08:17 Сейчас в теме
(6) Милый мой, Я никого ни в чем не обвиняю. Естественно, я благодарна за наработки. Но даже для интереса, со стандартными шрифтами тоже плохо работает. На это есть пример. Прежде чем выкладывать и говорить, что вы правы, надо проверять свои программы
8. resonance 83 20.03.20 12:46 Сейчас в теме
9. Патриот 464 20.03.20 15:50 Сейчас в теме
(8) Пожалуйста! От "спасибо" будет приятнее, если выразите его в качестве плюса к статье =)
Для отправки сообщения требуется регистрация/авторизация