Как реализовать вывод отчета с заданного номера страницы в 1С?

Программист 1С v8.3 (Управляемые формы)
← На главную

При разработке отчетов в среде 1С:Предприятие часто возникают задачи, связанные с кастомизацией нумерации страниц или выборочным выводом данных. Рассмотрим ситуацию, когда заказчик просит, чтобы нумерация страниц в отчете начиналась не с единицы, а с произвольного числа, либо чтобы отчет сразу начинался с печати контента, соответствующего определенной странице. Разберем, как подступиться к решению этих задач.

Разграничение понятий: нумерация и фильтрация

Прежде чем приступать к написанию кода, важно проанализировать постановку задачи, так как технически это два принципиально разных процесса:

  1. Изменение стартового номера страницы: В этом случае отчет выводится полностью (все 20 страниц), но в колонтитулах нумерация начинается, скажем, с 3-й страницы.
  2. Выборочный вывод контента (пропуск страниц): В этом случае первые две страницы отчета игнорируются, и формирование табличного документа начинается сразу с той информации, которая должна была быть на третьей странице.

Вариант 1: Настройка нумерации в колонтитулах

Если задача сводится исключительно к изменению цифры, отображаемой в нижнем или верхнем колонтитуле, нам не нужно менять алгоритм выборки данных. Мы можем воспользоваться встроенными механизмами работы с объектом ТабличныйДокумент.

Для настройки нумерации страниц программно, мы работаем со свойством НижнийКолонтитул (или ВерхнийКолонтитул) объекта ТабличныйДокумент. Платформа 1С поддерживает специальные параметры для вывода номеров:


ТабДок = Новый ТабличныйДокумент;
ТабДок.НижнийКолонтитул.Выводить = Истина;
// Используем параметр [&НомерСтраницы] для вывода текущей страницы
ТабДок.НижнийКолонтитул.ТекстСправа = "Стр. [&НомерСтраницы]";
// Устанавливаем начальный номер страницы
ТабДок.НачальныйНомерСтраницы = ВведенныйПользователемНомер;

Использование свойства НачальныйНомерСтраницы позволяет системе 1С автоматически пересчитывать нумерацию при выводе на печать или в режиме предварительного просмотра.

Вариант 2: Реализация выборочного вывода (пропуск данных)

Если заказчик настаивает, чтобы отчет «начинался» с 3-й страницы (то есть первые две страницы физически не попадают в ТабличныйДокумент), задача становится сложнее. Поскольку ТабличныйДокумент — это итоговый объект для визуализации, изменение его состава «на лету» невозможно. Нам необходимо повлиять на этап формирования данных.

  1. Расчет емкости страницы: Прежде всего, нужно понимать, сколько строк или элементов макета помещается на одну страницу. Это зависит от настроек печати и высоты строк.
  2. Логика фильтрации: При формировании отчета необходимо ввести счетчик страниц. Мы обходим выборку данных и не выводим строки в ТабличныйДокумент до тех пор, пока текущий счетчик не достигнет значения, указанного пользователем.

Рассмотрим пример алгоритма с использованием принудительного вывода:


ТекущаяСтраница = 1;
КоличествоСтрокНаСтранице = 40; // Примерное число
Для Каждого СтрокаДанных Из Выборка Цикл
    Если ТекущаяСтраница >= НачальнаяСтраница Тогда
        // Выводим данные в ТабДок
        ТабДок.Вывести(ОбластьСтроки);
    КонецЕсли;

    // Увеличиваем счетчик при достижении конца страницы
    Если СтрокаДанных.НомерСтроки % КоличествоСтрокНаСтранице = 0 Тогда
        ТекущаяСтраница = ТекущаяСтраница + 1;
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
КонецЦикла;

Рекомендации по реализации

Проанализировав ситуацию, можно сделать вывод, что наиболее профессиональным подходом является использование СистемыКомпоновкиДанных (СКД). В СКД логика вывода данных отделена от логики их отображения. Вы можете добавить параметр отчета, который будет управлять отбором данных, либо использовать настройки макета для формирования необходимой структуры документа.

Если отчет простой и формируется прямым выводом в ТабличныйДокумент, обязательно предусмотрите возможность корректного пересчета итогов или заголовков, так как при пропуске первых страниц информация на «новой первой» странице может оказаться неполной (например, если на предыдущих страницах были важные итоговые показатели).

Помните, что диалоговое окно предварительного просмотра вызывается методом Показать(). К моменту вызова этого метода табличный документ должен быть полностью сформирован и настроен, так как изменить его содержимое средствами встроенного языка после открытия окна просмотра не удастся. Все расчеты должны быть выполнены заранее.

← На главную