Почему при печати М-15 в 1С:УПП 1.3 на новом листе появляется пустая строка и как это исправить?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При работе в 1С:Управление производственным предприятием (УПП) ред. 1.3 пользователи часто сталкиваются с визуальными дефектами печатных форм. Одной из специфических проблем является появление лишней пустой строки в самом верху каждого нового листа (кроме первого) при печати документа «Накладная на отпуск материалов на сторону» (форма М-15). Ситуация осложняется тем, что эта строка может появляться только у определенных пользователей, что сразу отсекает мысли об общей ошибке в коде для всех сотрудников. Рассмотрим подробно, как диагностировать и устранить эту проблему.

Анализ индивидуальных настроек печати пользователя

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

Выясним причину через интерфейс программы. Для этого под «проблемным» пользователем необходимо открыть форму печати М-15 и перейти в меню Файл — Параметры страницы. Особое внимание следует обратить на раздел Колонтитулы. Часто там может быть установлен верхний колонтитул, который содержит «невидимый» символ (например, пробел) или настроен на вывод номера страницы с большим верхним отступом. Даже если текста нет, платформа резервирует место под колонтитул, что визуально воспринимается как пустая строка сверху.

Чтобы исключить влияние кэшированных настроек, можно программно очистить параметры печати для конкретного объекта. Рассмотрим пример кода, который можно выполнить во внешней обработке для сброса настроек печати:


ИмяНастройки = "ПараметрыПечати_НакладнаяМ15"; // Имя может варьироваться в зависимости от метаданных
КлючОбъекта = "Общее/ПараметрыПечати/" + ИмяНастройки;
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", ИмяПользователя);

После удаления настроек 1С применит параметры по умолчанию, заданные в конфигурации, что зачастую решает проблему «лишнего пространства».

Проверка макета в Конфигураторе: повторяющиеся строки

Если манипуляции с настройками пользователя не помогли, проанализируем макет печатной формы в Конфигураторе. В 1С:УПП 1.3 для формы М-15 используется табличный документ, где заголовок таблицы часто настраивается на повторение на каждой странице. Это делается через меню Таблица — Настройки печати — Повторять на каждой странице.

Разберем по шагам процесс проверки:

  1. Найдем в дереве метаданных документ ПередачаТоваров или ТребованиеНакладная (в зависимости от того, откуда вызывается М-15).
  2. Откроем макет с именем М15 или аналогичным.
  3. Включим отображение именованных областей и сетки.
  4. Проверим, какие строки входят в область повторения. Если в диапазон повторяющихся строк попала пустая строка над заголовком таблицы, она будет дублироваться в начале каждого нового листа.

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

Алгоритм вывода секций и метод ПроверитьВывод()

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

Обычно логика выглядит так: перед выводом очередной строки программа проверяет, поместится ли она на текущий лист вместе с «подвалом» (итоговой частью). Если не помещается, вызывается метод ВывестиГоризонтальныйРазделительСтраниц() или просто начинается новый лист. Ошибка может возникать, если после разрыва страницы принудительно выводится пустая секция или секция-отступ.

Рассмотрим пример того, как это может быть реализовано в коде:


// Массив секций для проверки
МассивСекций = Новый Массив;
МассивСекций.Добавить(ОбластьСтрока);
МассивСекций.Добавить(ОбластьПодвал);

Если Не ТабДок.ПроверитьВывод(МассивСекций) Тогда
    // Если здесь ошибочно выводится пустая область для "красоты"
    // ТабДок.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); // Ищи такой код!
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

Необходимо найти в коде процедуру ПечатьМ15 и внимательно изучить цикл вывода строк. Особое внимание уделим местам, где вызывается ТабДок.Вывести(). Если в коде встречается вывод пустой области в начале страницы — это и есть причина. Иногда разработчики добавляют пустую строку для визуального отделения заголовка от края листа, не учитывая, что настройки полей принтера уже дают этот отступ.

Влияние драйверов принтера и масштабирования

Ситуация, когда проблема проявляется только у некоторых пользователей, может быть связана с аппаратными настройками. Разберем ситуацию: у одного пользователя по умолчанию выбран физический принтер (например, HP LaserJet), а у другого — виртуальный (PDF-принтер). У разных принтеров разные непечатные зоны.

Если у принтера большая верхняя непечатная зона, 1С пытается сдвинуть контент ниже. В сочетании с установленным флагом Автомасштаб в настройках печати, платформа может пересчитать высоту строк таким образом, что в начале страницы образуется визуальный разрыв. Выясним это, предложив пользователю временно сменить принтер по умолчанию на Microsoft Print to PDF и проверить результат. Если на виртуальном принтере пустая строка исчезает — проблема в настройках драйвера или полях страницы конкретного устройства.

Скрытые символы и свойства ячеек макета

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

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

Очистка кэша метаданных

Если программный код верный, макет чистый, а настройки параметров страницы сброшены, но пустая строка всё равно преследует пользователя — стоит прибегнуть к радикальному, но эффективному методу: очистке локального кэша 1С. Кэшированные макеты могут «застревать» в локальных папках пользователя. Удалите содержимое папок:

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

Подводя итог, можно сказать, что «лишняя строка» в 1С:УПП 1.3 — это почти всегда совокупность настроек Параметров страницы и структуры макета. Системный подход к проверке каждого из этих уровней позволит быстро вернуть печатную форму к требуемому ГОСТом виду.

← На главную