Как убрать лишний разрыв страницы и дублирование шапки при печати в 1С?

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

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

Выясним причины такого поведения платформы

Чтобы понять, как правильно решить проблему, рассмотрим основные механизмы платформы, которые влияют на формирование страниц:

  1. Разница между жесткими и автоматическими разрывами. Команда удаления разрыва страницы (через меню) работает только для принудительных (жестких) разрывов, заданных вручную или в коде. Если пунктирная линия создана автоматическим механизмом верстки (содержимое физически не помещается на лист с учетом полей и масштаба), ручное удаление не поможет. Платформа сразу же пересчитывает макет и возвращает автоматический разрыв на место.
  2. Программный перенос шапки. В типовых конфигурациях 1С разделение на страницы часто контролируется программно с помощью метода ПроверитьВывод(). Если строка или подвал не помещаются, алгоритм выводит разделитель страниц (ВывестиГоризонтальныйРазделительСтраниц()) и повторно выводит шапку таблицы (через Вывести()). Если разрыв сдвигается или удаляется, эта дополнительно выведенная шапка остается в теле документа как обычный текст. Именно так образуется "двойная шапка" посреди страницы.
  3. Свойство "Вместе со следующим". Если в макете у строк включено свойство "Вместе со следующим", платформа перенесет весь этот блок на новый лист целиком, если хотя бы одна его строка не влезает на текущий. Это часто приводит к искусственным разрывам на полупустых страницах.
  4. Кэширование параметров печати. Параметры печати (масштаб, поля, ориентация) привязаны к свойству КлючПараметровПечати и сохраняются в системных настройках конкретного пользователя. Некорректно сохраненные настройки будут применяться при каждом открытии формы.
  5. Влияние принтера. Платформа берет метрики от драйвера принтера по умолчанию. Если выбран формат бумаги отличный от А4 или заданы огромные непечатаемые поля, 1С неверно рассчитает высоту листа и преждевременно добавит разрыв.

Решение проблемы без изменения конфигурации

Посмотрим на шаги, которые можно предпринять в пользовательском режиме, если править код не представляется возможным:

  1. Удаление продублированных строк вручную. Включите редактирование сформированного табличного документа («Таблица» — «Вид» — снять флаг «Только просмотр»). Затем включите заголовки («Таблица» — «Вид» — «Отображать заголовки»). Выделите за номера строк слева лишнюю продублированную шапку и удалите строки целиком через контекстное меню.
  2. Сброс полей до минимума. Зайдите в параметры страницы и установите значения всех полей (левое, правое, верхнее, нижнее) равными 0. Платформа автоматически скорректирует их до минимально возможных значений, которые поддерживает принтер. Это увеличит полезную площадь листа.
  3. Очистка кэша настроек. Откройте «Функции для технического специалиста» (или «Все функции»), найдите «Хранилище системных настроек» и очистите сохраненные настройки печати для проблемной формы у конкретного пользователя.

Программная корректировка макета и кода

Разберем способы окончательного исправления проблемы на уровне разработки. Рулить отображением исключительно из пользовательского режима не имеет смысла, если форма формируется массово.

Шаг 1. Проверка макета. Откройте проблемный макет в конфигураторе. Проверьте свойства всей таблицы. Убедитесь, что для свойства "Повторять строки при печати" (или аналогичных настроек областей) не заданы лишние диапазоны. Также выделите строки табличной части и в палитре свойств снимите флажок "Вместе со следующим" у тех строк, где он не требуется. Оставьте его только для связки заголовка таблицы с первой строкой данных.

Шаг 2. Корректировка алгоритма проверки вывода. Если в коде используется ПроверитьВывод(), проанализируйте, какие области передаются в массив. Ошибка часто кроется в том, что в метод отправляют сразу и текущую строку, и массивный подвал с подписями. Если они вместе не влезают, код делает перенос страницы и рисует новую шапку. Пересмотрите логику проверок.

Шаг 3. Добавление признака на форму. Добавьте на форму реквизит (например, НеДелитьНаЛисты). В коде формирования печатной формы оберните логику вывода разделителей страниц в условие:


Если Не НеДелитьНаЛисты Тогда
    // Здесь располагается типовой код вывода разделителя и шапки
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;

Шаг 4. Принудительное программное сжатие. Если по бизнес-логике документ строго должен умещаться на одном листе, задайте табличному документу жесткие параметры автомасштаба перед выводом на экран:


ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.КоличествоСтраницПоВысоте = 1;
ТабличныйДокумент.КоличествоСтраницПоШирине = 1;

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

← На главную