Документы и Печать · 10 мин
Как добавить столбец в печатную форму 1С
Как добавить столбец в печатную форму 1С через макет табличного документа: изменение макета, доработка запроса и модуля, внешние печатные формы, проверка результата.
Столбец в печатной форме 1С не появляется сам по себе: за его вывод отвечают три связанных элемента — макет табличного документа, запрос или алгоритм сбора данных и программный код, который заполняет макет. Поэтому задача «добавить столбец» почти всегда сводится к трём правкам: добавить колонку в макет, получить нужное значение из базы и вывести его в эту колонку при формировании документа.
Типичные ситуации: в счёт на оплату нужно добавить артикул товара, в ТОРГ-12 — страну происхождения или ставку НДС по каждой строке, в акт — единицу измерения из карточки номенклатуры. Во всех случаях логика одинакова, отличается только источник данных.
Перед началом работы определите, где живёт печатная форма: встроена в конфигурацию или подключена как внешняя. От этого зависит способ доработки и риски при обновлении. Ниже разобраны оба пути, а также типовые ошибки, из-за которых новый столбец выводится пустым или «ломает» всю форму.
Определите, как устроена текущая печатная форма
Сначала выясните, откуда документ берёт печатную форму. Откройте список печатных форм объекта: если нужная форма подключена через «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки», это внешняя печатная форма, и править нужно именно её файл. Если формы в списке дополнительных нет — она встроена в конфигурацию.
Для встроенной формы макет обычно лежит в ветке «Макеты» соответствующего документа или справочника в конфигураторе, а код формирования — в модуле менеджера объекта (процедура «Печать» или функция формирования табличного документа). В типовых конфигурациях на БСП код печати часто вынесен в общие модули или модули менеджеров с префиксом вроде «Печать…».
Полезно сразу найти место вывода данных: откройте модуль и поищите по названию существующей колонки (например, «Количество» или «Цена»). Там, где заполняются параметры строки, вы и добавите новый параметр. Это избавит от блужданий по тысячам строк кода.
Правьте файл .erf/.epf, конфигурацию трогать не нужно
Макет и код ищите в конфигураторе, проверьте режим поддержки
Изменения снимут объект с поддержки — лучше внешняя форма
Код искать в модуле менеджера объекта или общих модулях печати
Добавьте колонку в макет табличного документа
Откройте макет печатной формы в конфигураторе (или во внешней обработке — макет хранится внутри файла). Найдите область, которая выводит строки табличной части: обычно это именованная область «Строка», «ШапкаТаблицы» и подобные. Столбец добавляется и в шапку таблицы, и в область строки — иначе данные сместятся.
Чтобы вставить колонку, выделите соседнюю, кликните правой кнопкой и выберите «Вставить» (слева или справа). Затем настройте ячейки: в шапке введите заголовок столбца как текст, а в ячейке строки данных укажите параметр. Для этого в свойствах ячейки установите «Заполнение» = «Параметр» и задайте имя, например «Артикул». Имя параметра должно точно совпадать с тем, что вы будете заполнять в коде.
Проверьте ширину: добавление колонки увеличивает общую ширину таблицы, и форма может перестать помещаться на лист. Уменьшите ширину соседних колонок или включите автоперенос текста в свойствах ячеек. Также убедитесь, что у новых ячеек заданы границы и шрифт в стиле остальной таблицы — иначе столбец будет визуально «выпадать».
Дополните запрос или алгоритм сбора данных
Новый столбец должен откуда-то брать значение. Откройте код формирования печатной формы и найдите запрос, который выбирает строки табличной части. Добавьте в него нужное поле — например, реквизит номенклатуры через точку: Товары.Номенклатура.Артикул. В типовых конфигурациях запрос может быть собран из временных таблиц, тогда поле добавляется в соответствующую выборку.
Если данных нет в запросе и добавить их туда сложно (например, значение вычисляется), получите его в цикле обхода строк. Это медленнее при большом числе документов, но для одиночной печати приемлемо. Примерная логика: внутри цикла по выборке обратиться к реквизиту объекта или вычислить значение функцией.
Учтите тип данных: если колонка числовая (сумма, количество), позаботьтесь о формате вывода — задайте в свойствах ячейки макета форматную строку, иначе получите лишние знаки после запятой или наоборот потеряете копейки.
// В запрос добавляем поле:
// ВЫБРАТЬ Товары.Номенклатура.Артикул КАК Артикул, ...
// В коде заполнения строки:
ОбластьСтрока.Параметры.Артикул = Выборка.Артикул;
ТабличныйДокумент.Вывести(ОбластьСтрока);Выведите значение в новую ячейку
Теперь свяжите данные с макетом. Найдите место, где код получает область строки и заполняет её параметры — обычно это конструкция вида ОбластьСтрока.Параметры.Заполнить(Выборка) или перечисление параметров по одному. Если используется метод «Заполнить» с выборкой, достаточно, чтобы имя поля в запросе совпадало с именем параметра в макете — значение подставится автоматически.
Если параметры заполняются вручную, добавьте строку присваивания: ОбластьСтрока.Параметры.Артикул = Выборка.Артикул;. Следите за тем, чтобы код выполнялся для каждой выводимой строки, а не только для первой — типичная ошибка, когда новый параметр заполняется вне цикла.
Не забудьте про итоговые области («Подвал», «Итого»), если новый столбец должен суммироваться. Для текстовых колонок (артикул, единица измерения) итог обычно не нужен — оставьте ячейку подвала пустой, но саму колонку в области подвала всё равно создайте, чтобы таблица не «поехала».
- 1Найдите макет печатной формы и модуль её формирования
- 2Сделайте копию конфигурации или внешней обработки перед правкой
- 3Добавьте колонку в области шапки, строки и подвала макета
- 4Задайте в ячейке строки параметр с понятным именем
- 5Добавьте поле в запрос или вычисление в цикле обхода
- 6Заполните параметр в коде и проверьте вывод на тестовом документе
- 7Проверьте ширину таблицы и печать на листе А4
Встроенная доработка или внешняя печатная форма
Если конфигурация типовая и обновляется, прямая правка макета и модуля в конфигураторе создаст проблемы: при обновлении изменённые объекты либо затрутся, либо заблокируют автообновление. Практичный путь — скопировать печатную форму во внешнюю обработку и доработать уже её, а типовую оставить нетронутой.
Внешняя печатная форма создаётся как обработка с экспортной функцией «СведенияОВнешнейОбработке» и процедурой «Печать» по шаблону БСП. Внутрь копируются макет и код типовой формы, затем вносятся правки. После регистрации в списке дополнительных отчетов и обработок новая кнопка появится в меню «Печать» документа рядом со стандартными.
Для самописных или снятых с поддержки конфигураций можно править напрямую — это проще и не требует обёртки внешней обработки. Но даже в этом случае сохраните копию базы или выгрузку конфигурации до изменений.
Сравнение вариантов
Быстро и просто, но изменения теряются или мешают при обновлении типовой конфигурации
Безопасно для обновлений, но требует шаблона БСП и регистрации обработки
Компромисс: макет и код дорабатываются без снятия с поддержки, но не все механизмы печати удобно расширять
Проверка результата и типичные ошибки
После доработки сформируйте печатную форму на реальном документе с несколькими строками. Проверьте: новый столбец присутствует в шапке и в каждой строке, значения соответствуют данным документа, итоги и соседние колонки не сместились, таблица помещается на страницу при предварительном просмотре.
Если столбец выводится пустым — чаще всего не совпадают имя параметра в макете и имя в коде, либо поле не добавлено в запрос. Если форма падает с ошибкой «Параметр не найден» — параметр объявлен в коде, но отсутствует в ячейке макета (или наоборот). Если данные дублируются во всех строках одинаковые — присваивание стоит вне цикла обхода выборки.
Отдельная группа проблем — оформление: столбец без границ, другой шрифт, текст обрезан из-за узкой колонки. Это не влияет на данные, но форма становится непригодной для передачи контрагентам. Настройте свойства ячеек по образцу соседних колонок и проверьте предварительный просмотр с разбивкой на страницы.
Частые вопросы
Можно ли добавить столбец без программирования, прямо в режиме 1С:Предприятие?
Нет. Макет печатной формы редактируется только в конфигураторе или во внешней обработке. В пользовательском режиме можно лишь менять настройки уже существующих вариантов печати, если конфигурация это предусматривает, но добавить новую колонку с данными так нельзя.
Почему новый столбец пустой, хотя поле добавлено в запрос?
Проверьте три вещи: имя поля в запросе (псевдоним) должно совпадать с именем параметра в ячейке макета; ячейка должна иметь заполнение «Параметр», а не «Текст»; код заполнения параметров должен реально выполняться для каждой строки. Чаще всего причина в опечатке в имени параметра.
Как добавить столбец, если нужных данных нет в документе?
Возьмите данные из связанного объекта через точку в запросе — например, реквизит номенклатуры или договора. Если значение вычисляется (скидка, наценка, срок годности), рассчитайте его в цикле обхода строк перед заполнением параметров области.
Пропадёт ли доработка при обновлении конфигурации?
Если вы изменили встроенный макет или модуль типовой конфигурации — при обновлении изменения могут быть заменены типовыми. Внешние печатные формы и расширения при обновлении сохраняются, поэтому для типовых конфигураций рекомендуется именно этот путь.
Новый столбец не помещается на лист — что делать?
Уменьшите ширину соседних колонок, включите перенос текста в длинных текстовых ячейках, уменьшите шрифт таблицы или смените ориентацию страницы на альбомную в свойствах макета. Проверяйте результат через предварительный просмотр с реальными длинными значениями.
Можно ли добавить столбец только для определённых пользователей или случаев?
Да. Создайте две области строки в макете — с колонкой и без — и выбирайте нужную в коде по условию (например, по значению реквизита документа или настройке). Альтернатива — две отдельные печатные формы с разными названиями в меню «Печать».
Что важно запомнить
Добавление столбца в печатную форму 1С — это три согласованные правки: колонка и параметр в макете, поле в запросе или алгоритме, заполнение параметра в коде. Для типовых конфигураций доработку делайте через внешнюю печатную форму или расширение и всегда проверяйте результат на копии базы.