К статье
Практический материал

Документы и Печать · 10 мин

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

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

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

Типичные ситуации: в счёт на оплату нужно добавить артикул товара, в ТОРГ-12 — страну происхождения или ставку НДС по каждой строке, в акт — единицу измерения из карточки номенклатуры. Во всех случаях логика одинакова, отличается только источник данных.

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

Определите, как устроена текущая печатная форма

Сначала выясните, откуда документ берёт печатную форму. Откройте список печатных форм объекта: если нужная форма подключена через «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки», это внешняя печатная форма, и править нужно именно её файл. Если формы в списке дополнительных нет — она встроена в конфигурацию.

Для встроенной формы макет обычно лежит в ветке «Макеты» соответствующего документа или справочника в конфигураторе, а код формирования — в модуле менеджера объекта (процедура «Печать» или функция формирования табличного документа). В типовых конфигурациях на БСП код печати часто вынесен в общие модули или модули менеджеров с префиксом вроде «Печать…».

Полезно сразу найти место вывода данных: откройте модуль и поищите по названию существующей колонки (например, «Количество» или «Цена»). Там, где заполняются параметры строки, вы и добавите новый параметр. Это избавит от блужданий по тысячам строк кода.

Форма в списке дополнительныхВнешняя печатная форма

Правьте файл .erf/.epf, конфигурацию трогать не нужно

Формы нет в дополнительныхВстроенная форма

Макет и код ищите в конфигураторе, проверьте режим поддержки

Конфигурация на замкеПолная поддержка

Изменения снимут объект с поддержки — лучше внешняя форма

Формируется через БСПМеханизм печати типовой

Код искать в модуле менеджера объекта или общих модулях печати

Добавьте колонку в макет табличного документа

Откройте макет печатной формы в конфигураторе (или во внешней обработке — макет хранится внутри файла). Найдите область, которая выводит строки табличной части: обычно это именованная область «Строка», «ШапкаТаблицы» и подобные. Столбец добавляется и в шапку таблицы, и в область строки — иначе данные сместятся.

Чтобы вставить колонку, выделите соседнюю, кликните правой кнопкой и выберите «Вставить» (слева или справа). Затем настройте ячейки: в шапке введите заголовок столбца как текст, а в ячейке строки данных укажите параметр. Для этого в свойствах ячейки установите «Заполнение» = «Параметр» и задайте имя, например «Артикул». Имя параметра должно точно совпадать с тем, что вы будете заполнять в коде.

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

Дополните запрос или алгоритм сбора данных

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

Если данных нет в запросе и добавить их туда сложно (например, значение вычисляется), получите его в цикле обхода строк. Это медленнее при большом числе документов, но для одиночной печати приемлемо. Примерная логика: внутри цикла по выборке обратиться к реквизиту объекта или вычислить значение функцией.

Учтите тип данных: если колонка числовая (сумма, количество), позаботьтесь о формате вывода — задайте в свойствах ячейки макета форматную строку, иначе получите лишние знаки после запятой или наоборот потеряете копейки.

bsl
// В запрос добавляем поле:
// ВЫБРАТЬ Товары.Номенклатура.Артикул КАК Артикул, ...

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

Выведите значение в новую ячейку

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

Если параметры заполняются вручную, добавьте строку присваивания: ОбластьСтрока.Параметры.Артикул = Выборка.Артикул;. Следите за тем, чтобы код выполнялся для каждой выводимой строки, а не только для первой — типичная ошибка, когда новый параметр заполняется вне цикла.

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

Порядок действий
  1. 1
    Найдите макет печатной формы и модуль её формирования
  2. 2
    Сделайте копию конфигурации или внешней обработки перед правкой
  3. 3
    Добавьте колонку в области шапки, строки и подвала макета
  4. 4
    Задайте в ячейке строки параметр с понятным именем
  5. 5
    Добавьте поле в запрос или вычисление в цикле обхода
  6. 6
    Заполните параметр в коде и проверьте вывод на тестовом документе
  7. 7
    Проверьте ширину таблицы и печать на листе А4

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

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

Внешняя печатная форма создаётся как обработка с экспортной функцией «СведенияОВнешнейОбработке» и процедурой «Печать» по шаблону БСП. Внутрь копируются макет и код типовой формы, затем вносятся правки. После регистрации в списке дополнительных отчетов и обработок новая кнопка появится в меню «Печать» документа рядом со стандартными.

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

Сравнение вариантов

Правка встроенной формы

Быстро и просто, но изменения теряются или мешают при обновлении типовой конфигурации

Внешняя печатная форма

Безопасно для обновлений, но требует шаблона БСП и регистрации обработки

Расширение конфигурации

Компромисс: макет и код дорабатываются без снятия с поддержки, но не все механизмы печати удобно расширять

Проверка результата и типичные ошибки

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

Если столбец выводится пустым — чаще всего не совпадают имя параметра в макете и имя в коде, либо поле не добавлено в запрос. Если форма падает с ошибкой «Параметр не найден» — параметр объявлен в коде, но отсутствует в ячейке макета (или наоборот). Если данные дублируются во всех строках одинаковые — присваивание стоит вне цикла обхода выборки.

Отдельная группа проблем — оформление: столбец без границ, другой шрифт, текст обрезан из-за узкой колонки. Это не влияет на данные, но форма становится непригодной для передачи контрагентам. Настройте свойства ячеек по образцу соседних колонок и проверьте предварительный просмотр с разбивкой на страницы.

Типичные ошибки
01
Добавили колонку только в шапку — строки данных смещаются и таблица «ломается»
02
Имя параметра в макете не совпадает с полем запроса — столбец выводится пустым
03
Правка типовой формы без копии — изменения потеряны при обновлении конфигурации
04
Не задан формат числовой ячейки — лишние знаки после запятой в суммах
05
Забыли про область подвала — итоговая строка уже таблицы, границы не сходятся

Частые вопросы

Можно ли добавить столбец без программирования, прямо в режиме 1С:Предприятие?

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

Почему новый столбец пустой, хотя поле добавлено в запрос?

Проверьте три вещи: имя поля в запросе (псевдоним) должно совпадать с именем параметра в ячейке макета; ячейка должна иметь заполнение «Параметр», а не «Текст»; код заполнения параметров должен реально выполняться для каждой строки. Чаще всего причина в опечатке в имени параметра.

Как добавить столбец, если нужных данных нет в документе?

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

Пропадёт ли доработка при обновлении конфигурации?

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

Новый столбец не помещается на лист — что делать?

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

Можно ли добавить столбец только для определённых пользователей или случаев?

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

Итог

Что важно запомнить

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