Стандартная печатная форма товарной накладной ТОРГ-12 в программах 1С часто не помещается на один лист, даже если в ней всего 10-15 строк. Это приводит к лишнему расходу бумаги и неудобствам при работе с документами. Проблема заключается в том, что стандартный макет и алгоритм печати рассчитаны на определенное количество строк и при превышении этого лимита автоматически вставляют разрыв страницы.
Рассмотрим несколько способов решения этой задачи, от самых простых пользовательских настроек до внесения изменений в конфигурацию. Выберем тот, который лучше всего подходит под ваши права доступа и уровень технических навыков.
Эти методы доступны любому пользователю и не требуют специальных прав или доступа к режиму «Конфигуратор». Они идеально подходят для разовых корректировок.
Вариант А: Удаление принудительных разрывов страницы
Иногда макет может содержать принудительно установленные разрывы страниц. Их можно убрать непосредственно перед печатью. Разберем по шагам:
Важно: эти настройки обычно сохраняются для текущего пользователя на конкретном компьютере, но могут сбрасываться после обновления конфигурации.
Вариант Б: Экспорт в Excel
Это самый простой и универсальный обходной путь. Если нужно быстро уместить документ на один лист, не вникая в настройки 1С, выполните следующие действия:
Программа автоматически подберет масштаб так, чтобы все содержимое поместилось на одном листе. Этот метод требует дополнительных действий, но гарантирует результат без вмешательства в 1С.
Этот способ требует доступа к Конфигуратору и позволяет внести изменения, которые будут действовать для всех пользователей на постоянной основе. Идея в том, чтобы уплотнить макет, убрав или уменьшив "лишние" элементы.
Пошаговая инструкция:
РеализацияТоваровУслуг).ТОРГ12.Файл -> Параметры страницы) позволяет вместить больше строк по вертикали за счет более компактного расположения колонок.Важно: всегда делайте резервную копию перед внесением изменений в конфигурацию. Стандартные макеты можно вернуть к исходному состоянию через меню Действия -> Установить стандартные настройки в окне макета.
Это наиболее гибкий и правильный с точки зрения разработки метод. Он позволяет не просто "ужать" макет, а научить программу автоматически подбирать масштаб, если содержимое не помещается на страницу. Основная работа ведется в модуле объекта или модуле менеджера документа.
Анализ стандартного механизма печати
Давайте разберемся, почему 1С переносит строки. В коде формирования печатной формы используется метод ПроверитьВывод(). Он проверяет, помещается ли указанный набор областей (например, очередная строка товара и подвал документа) на оставшееся место на текущей странице. Если нет — вставляется разделитель страницы.
Посмотрим на пример логики из типовой конфигурации (например, УТ 10.3):
...
// Проверяем, помещается ли следующая строка вместе с подвалами на странице
Если Ном <> 1 И НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
// Если не помещается, выводим итоги по странице
ТабДокумент.Вывести(ОбластьИтоговПоСтранице);
// Вставляем разделитель и выводим заголовок на новой странице
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ОбластьЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ОбластьЗаголовокТаблицы);
...
КонецЕсли;
Наша задача — изменить эту логику. Вместо того чтобы вставлять разделитель, мы можем задать табличному документу свойство автоматического масштабирования.
Реализация автоматического масштаба
Самый правильный подход — создать внешнюю печатную форму. Это позволит не изменять основную конфигурацию и не потерять доработки при обновлении. Скопируйте стандартную процедуру печати ТОРГ-12 во внешнюю обработку и доработайте ее.
В конце процедуры, перед тем как показать или отправить на печать табличный документ (ТабДокумент), добавьте проверку и установку масштаба.
АвтоМасштаб в Ложь, чтобы мы могли проверить реальное размещение.ТабДокумент.Пример кода:
Функция Печать() Экспорт
// ... здесь идет весь стандартный код формирования ТабДокумент ...
// Весь документ уже сформирован в переменной ТабДокумент
// Устанавливаем принудительно, чтобы проверка сработала корректно
ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; // или Портрет
// Проверяем, помещается ли весь документ на одну страницу по высоте
Если ТабДокумент.КоличествоСтраниц() > 1 Тогда
// Если страниц больше одной, включаем автоматический подбор масштаба
ТабДокумент.АвтоМасштаб = Истина;
КонецЕсли;
Возврат ТабДокумент;
КонецФункции
Свойство АвтоМасштаб = Истина пытается вписать содержимое по ширине страницы. Чтобы вписать и по высоте, иногда приходится дополнительно управлять свойством МасштабПечати, подбирая значение (например, 90, 85 и т.д.) в цикле до тех пор, пока КоличествоСтраниц() не станет равно 1.
Таким образом, мы рассмотрели несколько подходов к решению одной задачи. Выбор зависит от ваших целей: для быстрой разовой печати подойдет экспорт в Excel, для постоянного решения для всех пользователей — доработка макета или создание внешней печатной формы с программным масштабированием.