Как вывести секцию табл в нужный момент без дополнительной затраты времени #114130


#0 by vbh
Задача следующая: вывожу секции и параллельно отслеживаю высоту страницы. Если ВысотаСтраницы > 800 Тогда выведенную секцию выводить не надо,а Можно // выводить подобную таблицу и АНАЛИЗИРУЯ её выводить свою, но при этом затрата времени увеличивается в 2 раза Вопрос: Можно ли сделать, что-то вроде Попытка - Исключение: Попытка    Попробовали вывести секцию, если она не устраивает нашим условиям, то тогда в исключении переходим на новую страницу Исключение КонецПопытки;
#1 by fabrikant
А чем не рулит ? Если ВысотаСтраницы <= 800 Тогда Выводим секцию Иначе новаястраница
#2 by vbh
Тем, что высота предыдущей секции например 795, и Если ВысотаСтраницы <= 800 Тогда  будет выводится следующая секция и она обязательно разорвется
#3 by vbh
Извиняюсь, не так выразился Тем, что высота страницы после вывода предыдущей секции например= 795, и Если ВысотаСтраницы <= 800 Тогда  будет выводится следующая секция и она обязательно разорвется
#4 by fabrikant
Если количество секций конечно, а оно конечно, то заведи список значений название секции-высота. И суммируй с высотой таблицы при проверке
#5 by fabrikant
О, таки еще проще можно! Если Таб.ВысотаТаблицы+Таб.ВысотаСекции(ТвояСекция) < 800 Тогда Таб.ВывестиСекцию(ТвояСекция) Иначе Таб.НоваяСтраница
#6 by vbh
ничего не получается, ведь все-равно сначала 1. ВыводишьСекцию 2. Потом узнаешь её высоту 3. Анализируешь: больше она высоты листа или нет и если она оказалась >, то тебе её уже не убрать, она уже выведена.
#7 by fabrikant
Кто сказал, что надо вывести, чтобы узнать высоту секции?
#8 by Zmich
Сделай так: Попытка
#9 by vbh
Разве можно узнать высоту секции если ты её ещё не вывел?
#10 by fabrikant
Создай пустую обработку. В ней напиши И эксперементируй с высотой секции "Строка" в таблице. Ты увидишь, что я прав.
#11 by vbh
Дело в том что ВысотаСтроки у секции = АВТО, т.е. я заранее не знаю какой высотой она получится.
#12 by fabrikant
Как тебе в этом случае поможет ВысотаТаблицы? Она возвращает количество строк
#13 by fabrikant
В типовых формах (типа Торг12) высота строки задана жестко. от этого и пляшут
#14 by vbh
12)ты не понял. Высота таблицы меня не интересует. я высчитываю высоту каждой выводимой СТРОКИ и суммирую её. а текст у меня разрывается
#15 by fabrikant
А как ты узнаешь высоту строки?
#16 by Grant
Я точно не понял... Как считаешь "высоту каждой выводимой СТРОКИ" ?
#17 by vbh
Точно точно, а я почему-то и не подумал создать такую ситуацию (ф=1/0), она то как раз и вызовет нужное мне исключение. СПАСИБО.
#18 by vbh
высоту строки АВТО узнаю хитрым способом:
#19 by fabrikant
Никуя не элегантно. Но раз уж так хочешь, используй хоть вместо 1/0 -ВызватьИсключение
#20 by Zmich
Можно это сделать и Транзакцией - с помощью Зафиксировать, Отменить и т.п.
#22 by vbh
НЕ ПОЛУЧИЛОСЬ. Потом разрывает затем делает новую страницу!!!
#24 by vbh
И всё равно НЕ ПОЛУЧИЛОСЬ. Хоть и ПОПЫТКА-ИСКЛЮЧЕНИЕ, Хоть используй Транзакцию.Хоть они ПРОЗРАЧНЫ И ЛОГИЧЕСКИ ПРАВИЛЬНЫ, Одинаково. Сначала Выводит-разрывает, затем только переносит на новую страницу. Ниже привожу нарастание ВЫСОТЫ_ЛИСТА с выводом каждой секции: 207 329.25 463.5 597.75 720 854.25 - И здесь казалось бы должно сработать              ОтменитьТранзакцию; Ан НЕТ не РАБОТАЕТ!!! Сначала выводит секцию, не смотря на то что высота то уже 854.25!!! Как проверить сработала ли ОтменитьТранзакцию или нет?
#25 by ИМХО
есть оператор языка: дележка на страницы не нужна, подшапка выводится автоматом
#26 by vbh
С Шапкой и ПодШапкой у меня проблем нет, проблема именно в разрыве текста. Казалось бы, всё что нужно есть и логически понятно, А не работает...
#27 by ИМХО
26. значит, здесь простые алгоритмы не подходят. Или надо смириться с вполовину недопечатанными страницами..
#28 by vbh
Возвращусь Опять к высотестроки у авто=0 Казалось бы надо смирится, а ведь решилась проблема. И здесь я верю что решение есть... и всё-таки Как проверить сработала ли ОтменитьТранзакцию или нет?
#29 by leo-i
Попробуй заполнять два отчета
#30 by vbh
В том то и дело. Читай тему "... БЕЗ ДОПОЛНИТЕЛЬНОЙ ЗАТРАТЫ ВРЕМЕНИ", а если заполнять два отчета обработка выполняется в 2 раза дольше. Тут вот именно транзакция идеально подходит, Ан не работает... может ещё способы есть? повторюсь Как проверить сработала ли ОтменитьТранзакцию или нет?
#31 by Тупо отвечу
#32 by vbh
оно так и понятно... так и я проверял, почему тогда ОтменитьТранзакцию не работает?
#33 by leo-i
С транзакцией наверно не получится, попробуй с областью, сначала выводишь строку, запоминаешь область проверяешь на высоту если больше затираешь в области текст, расшифровку и рамки, устанавливаешь минимальную высоту строки делаешь разрыв страницы и заново выводишь строку
#34 by vbh
ПОЛУЧИЛОСЬ !!! Всё оказалось намного проще... Вся загвоздка была в новой странице!                     Синтаксис:  НоваяСтраница(<Ном>)                     Назначение: Вставить в результирующую таблицу                                 разделитель страниц.                      Параметры: <Ном> - необязательный параметр.                                 Номер строки, после которой начинать                                 новую страницу Так что запоминаем последнюю высоту листа и вперед! работает идеально. СтараяВысотаЛиста=ВЫСОТА_ЛИСТА ; ВывестиВх; А ТРАНЗАКЦИИ НАВЕРНОЕ ДЕЙСТВИТЕЛЬНО НЕ РАБОТАЮТ С ВНЕШНИМИ ФОРМАМИ...
#35 by vbh
Всем спасибо за участие, так сказать вчера весь день голову ломал, а с утречка встал и сделал... Вывод: Утро вечера мудренее
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С