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

Стандартный механизм макетов позволяет гибко управлять выводом данных, но начинающие программисты часто сталкиваются с тем, что нижние строки "уезжают" на новую страницу или разбиваются неправильно. Правильная организация структуры макета — залог качественного отчета.

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

Логика работы областей макета в 1С

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

Обычно данные выводятся циклом. Если вы просто разместите ячейки с итогами после области цикла в макете, система может воспринять их как продолжение тела таблицы. Это приведет к тому, что при переносе на новую страницу "подвал" окажется вверху, а не внизу документа. Чтобы этого избежать, необходимо явно указать системе, что данная часть является завершающей.

Ключевым элементом здесь выступает свойство Использование у области макета. Именно оно диктует движку печати, куда именно поместить содержимое области относительно основного массива данных. Без правильной настройки этого параметра получить статичный нижний блок невозможно.

📊 С каким типом макетов вы работаете чаще?
Табличный документ
СКД (Система Компоновки Данных)
HTML-шаблоны
Быстрая печать

Настройка свойств области подвала

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

Самый важный этап — настройка свойств этой области. В окне свойств найдите параметр Использование. По умолчанию там может стоять значение "Авто" или "Тело". Вам необходимо изменить его на значение Подвал (или Footer в английской версии интерфейса). Это действие сообщает системе, что данная область должна печататься после завершения вывода всех строк табличной части.

Также стоит обратить внимание на свойства границ ячеек. Часто бывает так, что визуально в макете линии есть, а при печати они пропадают или становятся слишком тонкими. Проверьте свойство Горизонтальное выравнивание и Вертикальное выравнивание, чтобы текст в подвале смотрелся аккуратно. Для итоговых сумм обычно выбирают выравнивание по правому краю.

💡

Если подвал не отображается, проверьте, не перекрыта ли область другими элементами макета и правильно ли указано имя области в коде заполнения.

После изменения свойств обязательно сохраните макет. Теперь при выводе документа система автоматически подставит содержимое области "Подвал" в конец таблицы, независимо от количества страниц, которые заняла основная часть.

Программное заполнение табличного документа

Настройка макета — это только половина дела. Теперь необходимо грамотно заполнить его данными в модуле объекта или общем модуле. Стандартный алгоритм предполагает получение области, заполнение её параметров и добавление в документ.

Обратите внимание на порядок операций. Сначала выводится заголовок, затем в цикле заполняется тело таблицы, и только в самом конце добавляется подвал. Если вы нарушите эту последовательность, визуальная структура документа будет нарушена, даже если свойства макета настроены верно.

Рассмотрим типовой фрагмент кода, демонстрирующий правильный подход к формированию отчета:

ТабДок = Новый ТабличныйДокумент;

Макет = Документ.ПолучитьМакет("МакетПечатнойФормы");

ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

ТабДок.Вывести(ОбластьЗаголовок);

ОбластьТело = Макет.ПолучитьОбласть("Тело");

Для каждого СтрокаТаблицы Из ТаблицаЗначений Цикл

ОбластьТело.Параметры.НомерСтроки = НомерСтроки;

ОбластьТело.Параметры.Товар = СтрокаТаблицы.Номенклатура;

ОбластьТело.Параметры.Количество = СтрокаТаблицы.Колво;

ТабДок.Вывести(ОбластьТело);

КонецЦикла;

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

ОбластьПодвал.Параметры.ИтогоСумма = ОбщаяСумма;

ТабДок.Вывести(ОбластьПодвал);

В данном примере видно, что область Подвал выводится единожды после завершения цикла. Это гарантирует, что итоговая сумма будет подсчитана корректно и отображена в самом низу документа.

☑️ Проверка перед выводом печати

Выполнено: 0 / 4

Работа с повторением заголовков и разрывом страниц

Одна из частых проблем при печати длинных документов — потеря контекста на новых страницах. Пользователь видит таблицу без шапки или, наоборот, подвал отрывается от основной таблицы и улетает на отдельный лист. Чтобы избежать этого, нужно использовать специальные настройки печати.

Для повторения заголовка на каждой странице в свойствах области "Заголовок" необходимо установить флаг Повторять заголовок. Это стандартная функция табличного документа 1С. Однако для подвала такой функции нет, так как он по определению должен быть один в конце документа (или один на страницу, если используется секция "Нижний колонтитул", но это уже другая задача).

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

⚠️ Внимание: Свойство "Подвал" в табличном документе означает "конец всей таблицы", а не "низ каждой страницы". Если вам нужно дублировать итоги на каждом листе, используйте механизм колонтитулов или секции в СКД.

При работе с большими объемами данных протестируйте печать документа, искусственно создав ситуацию, когда таблица занимает 2-3 страницы. Убедитесь, что подвал появляется строго в конце последней страницы.

Особенности использования СКД для печати

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

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

Преимущество СКД заключается в автоматическом расчете итогов. Вам не нужно писать код для суммирования значений — система сделает это сама на уровне запроса или вычислений компоновки. Это снижает вероятность ошибок в арифметике отчета.

Характеристика Табличный документ СКД (Компоновка данных)
Сложность настройки Высокая (требуется код) Средняя (визуальный редактор)
Расчет итогов Вручную в коде Автоматически
Гибкость верстки Максимальная Ограничена структурой данных
Производительность Зависит от оптимизации кода Высокая (оптимизирована платформой)

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

Как перенести макет из Табличного документа в СКД?

Для этого необходимо создать новый отчет на основе СКД, перенести структуру запроса и заново настроить поля вывода. Автоматического конвертера не существует, так как логика работы принципиально разная.

Типичные ошибки и методы их устранения

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

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

⚠️ Внимание: Интерфейс и названия свойств могут незначительно отличаться в разных версиях платформы 1С (например, 8.2, 8.3, 8.3.20+). Всегда сверяйтесь со справкой по вашей конкретной версии конфигурации.

Если подвал "наезжает" на данные или данные на подвал, проверьте высоту строк. Возможно, в макете задана фиксированная высота, которая недостаточна для отображения длинных текстов подписей. Используйте автоподбор высоты или увеличьте размер ячеек вручную.

💡

Главная причина проблем с подвалом — несоответствие имени области в коде и в макете, либо неверно установленное свойство "Использование".

FAQ: Часто задаваемые вопросы

Можно ли сделать несколько подвалов в одном документе?

Технически в одном табличном документе свойство "Подвал" может быть только у одной области, которая завершает таблицу. Однако вы можете сымитировать несколько подвалов, выводя обычные области между группами данных или используя разрывы страниц.

Почему подвал печатается на отдельной странице?

Это происходит, если таблица заняла всю предыдущую страницу, и для подвала не осталось места. Попробуйте уменьшить высоту строк в теле таблицы или настроить свойство "Оставлять вместе" для последних строк и подвала.

Как скрыть подвал, если сумма равна нулю?

В коде перед выводом области добавьте условие. Если ОбщаяСумма = 0, просто не вызывайте метод ТабДок.Вывести(ОбластьПодвал). Макет позволяет гибко управлять видимостью блоков через программный код.

Отличается ли создание подвала в управляемых формах?

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