Разработка и Конфигурация · 11 мин
ПроверитьВывод в 1С: как работает метод проверки вывода табличного документа
Как работает метод ПроверитьВывод в 1С: синтаксис, примеры кода, отличие от ПроверитьПрисоединение, типичные ошибки при формировании отчётов и печатных форм.
Метод ПроверитьВывод() встроенного языка 1С отвечает на простой, но критичный для отчётов вопрос: поместится ли на текущую страницу табличного документа набор областей, который вы собираетесь вывести. Он не выводит ничего сам, а только возвращает Истина или Ложь, позволяя заранее решить, нужно ли вставить разрыв страницы. Без этой проверки шапка таблицы может остаться на одной странице, а данные «уплыть» на следующую, итоговые строки оторвутся от группы, а печатная форма будет выглядеть небрежно.
Метод применяется к объекту типа «ТабличныйДокумент» и чаще всего используется при программном формировании печатных форм и отчётов через методы Вывести() и Присоединить(). Типовой сценарий: перед выводом очередной строки данных разработчик собирает массив областей (строка данных плюс, например, подвал группы) и спрашивает у табличного документа, влезет ли всё это на остаток страницы. Если нет — выводится горизонтальный разделитель страниц, повторяется шапка, и только потом выводится строка.
Важно понимать: ПроверитьВывод() работает корректно только при определённых условиях. Документ должен формироваться последовательно сверху вниз, параметры страницы (поля, ориентация, масштаб) должны быть заданы до начала проверок, а автомасштаб и некоторые режимы отображения способны исказить результат. Ниже разобраны синтаксис, рабочие шаблоны кода, отличия от смежных методов и типичные ошибки.
Что делает метод и какой у него синтаксис
Метод вызывается у объекта «ТабличныйДокумент» и принимает один параметр — массив областей (или одну область), которые планируется вывести. Возвращаемое значение — булево: Истина означает «всё поместится на текущей странице», Ложь — «при выводе произойдёт переход на новую страницу».
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьСтрока);
МассивОбластей.Добавить(ОбластьПодвал);
Если НЕ ТабДок.ПроверитьВывод(МассивОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапка);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);Обратите внимание на логику примера: в массив добавляется не только выводимая строка, но и подвал группы. Это классический приём «защиты от висячих строк» — если строка умещается, а итог под ней уже нет, лучше перенести оба на новую страницу. Сама проверка ничего в документ не записывает: после неё текущая позиция вывода остаётся прежней.
Метод доступен на толстом и тонком клиенте, а также на сервере — именно серверное формирование табличных документов является основным сценарием в современных конфигурациях. Никаких дополнительных настроек для вызова не требуется, достаточно заполненного табличного документа с заданными параметрами страницы.
Как устроена логика проверки внутри платформы
При вызове ПроверитьВывод() платформа вычисляет суммарную высоту переданных областей и сравнивает её с оставшимся свободным местом на текущей странице. Свободное место определяется параметрами страницы документа: размером бумаги, полями, ориентацией и уже выведенным содержимым. Если суммарная высота областей меньше остатка — возвращается Истина.
Расчёт выполняется с учётом реальной высоты областей, включая автовысоту строк, если она задана в макете. Это важно: если в ячейках макета включено свойство автовысоты и текст по факту занимает две строки вместо одной, проверка учтёт фактическую высоту. Однако при этом сама проверка становится дороже — платформе приходится фактически «прорисовать» область для вычисления высоты.
Есть ограничение: метод ориентирован на вертикальную проверку при последовательном выводе сверху вниз. Если документ формируется горизонтально (через Присоединить()), для контроля ширины используется парный метод ПроверитьПрисоединение(), о котором ниже. Смешанные схемы вывода требуют аккуратности, так как проверка опирается на текущее состояние документа.
Типовой шаблон использования в печатной форме
Рассмотрим законченный сценарий: печатная форма с шапкой, строками табличной части и подвалом. Задача — повторять шапку таблицы на каждой странице и не отрывать подписи от последней строки.
- 1Получите макет и области: шапка, строка, подвал, подписи
- 2Задайте параметры страницы табличного документа (поля, ориентацию)
- 3Выведите шапку документа и шапку таблицы
- 4В цикле по строкам соберите массив: строка + подвал
- 5Вызовите ПроверитьВывод(массив); при Ложь выведите разделитель страниц и повторите шапку таблицы
- 6Выведите строку методом Вывести()
- 7После цикла выведите подвал и подписи с аналогичной проверкой
Ключевой момент — в массив проверки включаются области, которые должны остаться вместе. Если проверять только строку, подвал может оказаться одиноким на новой странице. Если включить в массив и подписи руководителей, они тоже не «оторвутся» от итогов.
Для отчётов, построенных на СКД, прямой вызов ПроверитьВывод() обычно не нужен: компоновщик сам управляет выводом, а повторение шапок настраивается свойствами макета СКД. Метод востребован именно при ручном программном формировании табличного документа, где разработчик полностью управляет порядком областей.
Отличие ПроверитьВывод от ПроверитьПрисоединение
Эти два метода решают симметричные задачи, и их часто путают. ПроверитьВывод() контролирует вертикальное размещение: влезут ли области на текущую страницу при выводе через Вывести(). ПроверитьПрисоединение() контролирует горизонтальное размещение: уместятся ли области справа при выводе через Присоединить().
| Критерий | ПроверитьВывод | ПроверитьПрисоединение |
|---|---|---|
| Направление | Вертикаль (вниз) | Горизонталь (вправо) |
| Парный метод вывода | Вывести() | Присоединить() |
| Что проверяет | Высоту областей против остатка страницы | Ширину областей против ширины страницы |
| Типовой сценарий | Строки таблицы, подвалы, шапки | Колонки оборотных форм, шахматки |
Метод ПроверитьПрисоединение() встречается заметно реже — в основном в оборотных ведомостях и шахматных отчётах, где количество колонок заранее неизвестно. Если колонки не умещаются, выводится вертикальный разделитель страниц, и формируется следующая «полоса» документа.
Типичные ошибки и ограничения метода
Первая и самая частая ошибка — проверка только текущей строки без учёта сопутствующих областей. Результат: итоговая строка или подписи оказываются на отдельной странице. Лечится включением в массив всех областей, которые должны держаться вместе.
Вторая ошибка — вызов проверки до установки параметров страницы. Пока не заданы поля и ориентация, платформа считает по параметрам по умолчанию, и проверка врёт относительно реальной печати. Третья группа проблем связана с автомасштабом: если у документа включён режим автоматического масштабирования по ширине, фактический масштаб при печати может отличаться от расчётного, и постраничное разбиение «поплывёт».
Отдельно стоит упомянуть производительность. Проверка с вычислением автовысоты — не бесплатная операция: на больших отчётах в десятки тысяч строк двойной «прогон» областей (проверка плюс вывод) заметно увеличивает время формирования. В таких случаях иногда выгоднее снизить частоту проверок, например проверять не каждую строку, а группы строк, либо зафиксировать высоту строк в макете.
Как проверить результат и отладить постраничный вывод
Самый надёжный способ убедиться, что логика работает, — сформировать документ и включить режим просмотра с разметкой страниц. В окне табличного документа видны пунктирные границы страниц: по ним сразу видно, где прошли разрывы и не осталось ли «висячих» строк или одиноких подвалов.
Как проверить результат
Разрывы приходятся на границы групп, шапка повторяется
Строка или подвал одиноко стоят в начале страницы
Разбиение совпадает с разметкой в документе
На печати разрывы смещены относительно разметки
Рост времени пропорционален числу строк
Резкое замедление из-за проверок с автовысотой
При отладке удобен приём с отладчиком: поставьте точку останова на строке с ПроверитьВывод() и смотрите возвращаемое значение на граничных строках — где документ близок к концу страницы. Если проверка возвращает неожиданный результат, первым делом сверьте параметры страницы документа и реальную высоту областей макета.
Как выбрать действие
FAQ: частые вопросы о ПроверитьВывод
Можно ли передать в ПроверитьВывод одну область, а не массив?
Да, метод принимает как массив областей, так и одиночную область. Массив нужен, когда требуется гарантировать совместное размещение нескольких областей — например, строки и подвала группы.
Изменяет ли ПроверитьВывод содержимое табличного документа?
Нет. Метод выполняет только расчёт и возвращает булево значение. Текущая позиция вывода и содержимое документа остаются неизменными, поэтому после проверки нужно явно вызвать Вывести() и, при необходимости, ВывестиГоризонтальныйРазделительСтраниц().
Почему проверка возвращает Истина, а при печати строка всё равно переносится?
Чаще всего причина в несовпадении параметров страницы: не заданы поля или ориентация до проверки, либо включён АвтоМасштаб, который при печати меняет масштаб. Также проверьте, не меняются ли настройки принтера относительно параметров документа.
Работает ли метод на сервере и в веб-клиенте?
Да, метод доступен на сервере, толстом и тонком клиенте. Основной сценарий — серверное формирование печатных форм. Ограничения связаны не с местом выполнения, а с корректностью параметров страницы и режимами масштабирования.
Как ускорить формирование, если проверки тормозят большой отчёт?
Зафиксируйте высоту строк в макете вместо автовысоты — это самая затратная часть расчёта. Альтернатива: проверять не каждую строку, а блоки строк, или заранее вычислять примерное число строк на странице и вставлять разрывы по счётчику.
Чем заменить ПроверитьВывод в отчёте на СКД?
В СКД ручная проверка обычно не требуется: повторение шапок и заголовков группировок настраивается в макете компоновки, а разбиение на страницы выполняет платформа. Прямой доступ к областям вывода в СКД ограничен, поэтому ПроверитьВывод там практически не применяется.
Что важно запомнить
ПроверитьВывод() возвращает Истина, если области поместятся на текущую страницу табличного документа. Передавайте в массив все связанные области, задавайте параметры страницы до проверок, не сочетайте метод с АвтоМасштабом, а для горизонтального вывода используйте ПроверитьПрисоединение().