Добавил столбец в печатную форму 1С, но при печати его не видно: как исправить

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

Часто начинающие разработчики или пользователи, самостоятельно редактирующие конфигурацию, сталкиваются с ситуацией: в макете печатной формы (файл .mxl) новая колонка добавлена, границы прорисованы, заголовки написаны, но при запуске на печать документ выглядит по-старому. В этой статье мы подробно разберем, почему так происходит, и как правильно «подцепить» новый столбец программно, чтобы он появился в итоговом документе.

Почему изменения в макете не отображаются автоматически

В системе 1С:Предприятие печатная форма — это не просто статичная картинка. Это результат работы программного алгоритма. Когда вы нажимаете кнопку «Печать», программа выполняет код, который пошагово собирает ТабличныйДокумент из кусочков (областей) макета. Если вы добавили колонку в макет, но не дали программе команду «возьми эту новую колонку и приклей её к остальным», она просто проигнорирует ваши изменения.

Большинство современных печатных форм в 1С (например, Счет на оплату в Бухгалтерии 3.0) строятся по принципу пересечения горизонтальных и вертикальных областей. Чтобы столбец появился, нам нужно выполнить три условия:

  1. Создать вертикальную область в макете.
  2. Программно получить эту область в коде модуля.
  3. Использовать метод Присоединить() для вывода этой области в финальный документ.

Шаг 1: Проверка и подготовка макета в Конфигураторе

Прежде чем лезть в код, проанализируем структуру нашего макета. Откроем макет нужного документа (в нашем примере это ПФ_MXL_СчетЗаказ). В 1С колонки часто группируются в вертикальные области. Проверьте, что ваша новая колонка выделена как отдельная вертикальная область или входит в существующую. Для корректной работы лучше всего создать свою вертикальную область с уникальным именем, например, СтрокаПоставки.

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

Шаг 2: Поиск процедуры печати в модуле

Для внесения изменений нам нужно найти код, который отвечает за формирование счета. Обычно это происходит в Модуле менеджера документа или в Общем модуле (если форма типовая). Воспользуемся глобальным поиском (Ctrl+Shift+F) по названию макета или найдем функцию ПечатьСчетаНаОплату в модуле ОбщийМодуль.ПечатьТорговыхДокументов.

Рассмотрим структуру типовой функции вывода. В ней создается объект ТабличныйДокумент, затем определяются области макета через ПолучитьОбласть(). Именно здесь кроется решение проблемы.

Шаг 3: Программное присоединение новой колонки

Разберем на конкретном примере кода, как интегрировать новый столбец. Допустим, мы добавили вертикальную область СтрокаПоставки. Нам нужно изменить код в двух местах: при выводе шапки таблицы и при выводе каждой строки с товаром.

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


// В блоке определения областей шапки
ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
ОбластьСуммы = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
// Получаем нашу новую область шапки
ОбластьСтрокаПоставки = Макет.ПолучитьОбласть("ШапкаТаблицы|СтрокаПоставки");

// Выводим стандартные колонки
ТабличныйДокумент.Присоединить(ОбластьДанных);
ТабличныйДокумент.Присоединить(ОбластьСуммы);
// Присоединяем нашу колонку в конец шапки
ТабличныйДокумент.Присоединить(ОбластьСтрокаПоставки);

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


Для Каждого Строка Из СведенияОДокументе.ТаблицаДокумента Цикл
    // ... получение стандартных областей строки ...
    ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
    ОбластьСтрокаПоставки = Макет.ПолучитьОбласть("Строка|СтрокаПоставки");

    // Вывод стандартных данных строки
    ТабличныйДокумент.Присоединить(ОбластьДанных);
    
    // Заполнение параметра нашей новой колонки данными из строки документа
    // Предположим, что в табличной части есть поле "СрокПоставки"
    ОбластьСтрокаПоставки.Параметры.СтрокаПоставки = Строка.СрокПоставки;
    
    // Присоединяем заполненную колонку строки
    ТабличныйДокумент.Присоединить(ОбластьСтрокаПоставки);
КонецЦикла;

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

Шаг 4: Что делать, если данные в колонке не появляются

Если столбец появился, но он пустой, выясним причину. Чаще всего это происходит из-за того, что в структуру СведенияОДокументе.ТаблицаДокумента не попадает нужное нам поле из базы данных. Вывод в печатную форму обычно работает по цепочке:

Запрос к базе данных -> Заполнение таблицы значений -> Перебор таблицы в цикле -> Заполнение параметров макета.

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

Альтернативные способы решения

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

  1. Создание внешней печатной формы: вы можете скопировать весь код печати во внешнюю обработку (.epf). Отредактируйте макет и код внутри этой обработки и подключите её через раздел «Дополнительные отчеты и обработки». Это самый безопасный метод, так как обновления конфигурации не затронут вашу форму.
  2. Использование расширений: в современном 1С 8.3 можно создать Расширение, заимствовать туда нужную процедуру печати и использовать аннотацию &Вместо. В расширении вы сможете безопасно модифицировать логику формирования ТабличногоДокумента.
  3. Использование областей-контейнеров: если нужно просто добавить текст в уже существующую колонку (например, дописать срок поставки прямо в колонку «Товар»), код менять не придется. Просто расширьте область Данные в макете и вставьте туда новый параметр [СрокПоставки]. Однако это изменит внешний вид уже имеющихся данных.

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

Выделим наиболее частые ошибки, которые мешают корректному отображению:

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

← На главную