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

08.04.16

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

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

Файлы

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

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

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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

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

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

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

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

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

См. также

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

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

24900 руб.

20.08.2024    75210    379    170    

325

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

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

10000 руб.

02.09.2020    268495    1494    421    

1179

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

22570 руб.

06.10.2023    40195    113    54    

126

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

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

15250 руб.

25.08.2025    63877    130    36    

137

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    8964    38    46    

52

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

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

17000 руб.

10.11.2023    26443    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2639    6    0    

21

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    54799    187    63    

220
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. json 3431 08.04.16 16:06 Сейчас в теме
Плюс за еще один способ.
Но способ с рисунком из публикации Поместится ли текст в ячейке? (с примерами использования: авторазмер шрифта, перенос строк) работает на порядок быстрее
Если в цикле не вызывать, то в общем-то без разницы
2. Патриот 470 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 3431 12.04.16 11:13 Сейчас в теме
Я использую упрощенный вариант этой функции

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

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


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

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

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