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