1С 8.3.4. Проблема в работе метода КоличествоСтраниц() табличного документа #721746


#0 by Drac0
Добрый день! Столкнулся с непонятным поведением метода КоличествоСтраниц. Возникает ощущение, что у него есть определенная погрешность, которая при больших табличных документах дает очень неправильные данные под конец. Как наткнулся: пользователи сами рисуют макеты. Попросили дать возможность выводить шапку таблицы на каждой странице, где есть таблица (может быть еще подвал, где она не нужна). Так как высота строк и областей произвольная, то логично решил, что во время вывода табличной части, надо проверять на изменение количества страниц и если оно произошло, то перед выводом текущей строки выводим сначала шапку. Что получилось: при некоторых вариантах макета (где высота области строки отличается от стандартной) даже если по факту уже произошел переход на новую страницу ,например, на третью, КоличествоСтраниц возвращает 2. И в итоге лишняя строка переходит на новую страницу. Потом две, потом три и т.д. Кто-то с этим багом сталкивался? Есть возможность его победить?
#1 by Drac0
Ап
#2 by 1sanekmaloi1
Синтаксис: ПроверитьВывод(<Таблицы>) Параметры: Тип: Массив; ТабличныйДокумент. Массив из проверяемых таблиц или табличный документ. Возвращаемое значение: Тип: Булево. Истина - умещаются; Ложь - в противном случае. Описание: Проверяет, умещаются ли переданные табличные документы на страницу при печати. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: При возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение. Пример: Т.Добавить(ШапкаДокумента); Если Не ТабДок.ПроверитьВывод(Т) Тогда     Сообщить("Документ не умещается на страницу!"); КонецЕсли;
#3 by 1sanekmaloi1
+ В любой типовой посмотри как выводится ТОРГ12 на разные листы.Зачем изобретать велосипед?
#4 by Drac0
Торг12 фиксированный макет. А у нас могут почти что угодно нарисовать юзеры. ПроверитьВывод не взлетит. Не всегда есть возможность генерировать постранично, т.к. шапка самого документа может быть чуть больше страницы и тогда либо оставляем пустое место (что не айс), либо проверяем первый вывод с помощью КоличествоСтраниц и возвращаемся к тому с чего начали.
#5 by Drac0
И насколько я помню, там задается жестко количество строк на страниц. А у нас даже это не постоянно, т.к. могут быть разные варианта вывода строки в рамках одного документа.
#6 by kosts
Не пойму чего не сможет сделать ПроверитьВывод...
#7 by kosts
По существу. Проверь еще когда устанавливаются/восстанавливаются параметры печати/страницы. Это надо делать в начале. И еще печать в 1С весьма глючная вещь. Например, легко наблюдается изменение печатной формы при изменении масштаба...
#8 by kosts
+ *Не понятно написал - имею ввиду при изменении масштаба при просмотре перед печатью.
#9 by Drac0
параметры станицы задаются и сохраняются после редактирования макета. ПроверитьВывод проверяет, умещаются ли табличные документы на ОДНУ страницу. А в общем случае шапка может быть больше одной страницы, например, страница и пара строк. После нее начинаем сразу выводить заголовок таблицы и строки. Т.е. в на начале по факту надо проверить, умещается ли текущий документ на ДВЕ страницы, чего ПроверитьВывод не умеет.
#10 by Drac0
Масштаб тоже запретил менять (чаще всего ставят "По ширине листа").
#11 by kosts
Кстати, с учетом сказанного было бы вполне естественным поведением этой функции учитывать будет ли начат новый лист и не важно сейчас 1 лист или 10-й...
#12 by kosts
Если параметры программно, то надо их в начале устанавливать и масштаб не делать "По ширине".
#13 by Drac0
Параметры за дают пользователи через Файл -> параметры страницы в форме редактирования макета.
#14 by Drac0
Нет. Она тупо проверяет, умещаются ли табдоки на одну страницу :) По-моему, из описания очевидно.
#15 by kosts
Ну да понятно известно, я в теории говорю было бы...
#16 by Drac0
Лучше бы в теории корректно работал метод КоличествоСтраниц -_-
#17 by kosts
Кстати шапку можно попробовать разбить на отдельные блоки и выводить с тем же ПроверитьВывод. Другого способа просто не вижу...
#18 by Зеленый пень
"Погрешность" как правило, объясняется непродуманностью алгоритма, например: - параметры таб.документа (например ИмяПараметровПечати) меняются в конце, после ПроверитьВывод - после ПроверитьВывод выводится секция шире, чем был таб.док до этого и при автомасштабе предыдущие проверки становятся "неправильными"
#19 by Drac0
Только если построчно разобрать область шапки. Фигово получается. ДА и есть у меня предположение, что ПроверитьВывод будет тот же баг иметь. У меня используется КоличествоСтрок. Параметры страницы не меняются. С шириной областей все ОК.
#20 by kosts
Можно попробовать поставить другой драйвер принтера. на эту же модель может идти драйвер с другой цифрой
#21 by Drac0
На всех принтерах проблемы. Даже на PDFCreator. Да и мне очень любопытно, как он передает драйвер принтера с клиента на Сервер :)
#22 by 1sanekmaloi1
А зачем проверять умещается ли шапка? в общем случае 1.Задаем параметры печати 2.Выводим шапку документа 3.Выводим шапку таблицы тут хоть 2 хоть 3 листа она занимает 4.проверяем помещается ли строка в тек лист, то есть сразу за шапкой, если да то выводим, если нет то разрыв страницы и снова шапку таблицы выводим и возвращаемся к пункту 4 5.Выводим подвал. не могу понять чем алгоритм не устраивает?
#23 by Drac0
"4.проверяем помещается ли строка в тек лист, то есть сразу за шапкой" Как?
#24 by 1sanekmaloi1
Массив.Добавить(ОбластьСтрока) табдок.ПроверитьВывод(Массив)
#25 by 1sanekmaloi1
проверяем помещается ли строка на текущий лист или нет
#26 by Drac0
"Проверяет, умещаются ли переданные табличные документы на страницу при печати.
#27 by 1sanekmaloi1
все верно
#28 by Drac0
Ииии?..
#29 by 1sanekmaloi1
Что ии? если не понятно в то увы подробнее описывать лень
#30 by Drac0
Во-первых, метод как-то странно работает. Он возвращает Ложь всегда, когда ТабДок уже больше страницы, кроме момента, когда у меня происходит переход страницы (сразу после вывода заголовка таблицы и добавления строки), тогда он отдает Истина. Уже странно, но хоть что-то. НО! Это происходит аналогично с результатом метода КоличествоСтраниц, т.е. содержит ровно тот же баг.
#31 by Drac0
+ Да, баг такой же.
#32 by Drac0
Кстати ,спасибо, что подсказал, как именно работает ПроверитьВывод, а то из описания в СП не очевидно. Жаль не помогло.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям