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

Эта статья поможет разобраться, как сделать печатную форму документа в 1С с нуля — от простейших изменений через конструктор до написания собственного кода на встроенном языке. Мы рассмотрим все этапы: от подготовки макета в Word/Excel до интеграции формы в конфигурацию, а также типичные ошибки, которые приводят к сбоям при печати. Особое внимание уделим актуальным версиям платформы 1С:Предприятие 8.3 и 9.0, где механизмы работы с формами претерпели изменения.

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

1. Подготовка: что нужно знать перед созданием печатной формы

Прежде чем приступать к редактированию или созданию формы с нуля, определитесь с ключевыми параметрами:

  • 📄 Тип документа: для какого объекта конфигурации нужна форма (например, Документ.РеализацияТоваровУслуг или Справочник.Контрагенты).
  • 🖼️ Источник данных: какие реквизиты и табличные части должны выводиться (название, количество, цена, ИНН контрагента и т.д.).
  • 📏 Формат вывода: нужна ли форма для печати на бумаге, сохранения в PDF или отправки по email.
  • 🔄 Частота использования: форма будет использоваться разово (например, для отчета) или ежедневно (счета, накладные).

Если вы работаете с типовыми конфигурациями (1С:Бухгалтерия, 1С:УТ, 1С:ЗУП), проверьте, нет ли уже готовой формы в поставке. Часто достаточно немного доработать существующий шаблон. Например, в 1С:Бухгалтерия 3.0 печатные формы документов хранятся в ветке Администрирование → Печатные формы, отчеты и обработки.

⚠️ Внимание: В последних версиях платформы (начиная с 8.3.20) изменился механизм работы с макетами печатных форм. Теперь для сложных форм рекомендуется использовать систему компоновки данных (СКД) вместо устаревших текстовых шаблонов. Это касается отчетов и документов с динамической структурой.

Также учтите, что для некоторых регламентированных документов (например, счет-фактура или ТОРГ-12) существуют строгие требования к полям и их расположению. Их нарушение может привести к проблемам при проверках. Всегда сверяйтесь с актуальными образцами на сайте ФНС или в КонсультантПлюс.

📊 Какой инструмент вы чаще используете для редактирования печатных форм в 1С?
Конструктор печатных форм
Внешние обработки
Ручное программирование на встроенном языке
Систему компоновки данных (СКД)
Не редактирую формы

2. Способ 1: Редактирование через конструктор печатных форм (без программирования)

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

Чтобы открыть конструктор:

  1. Перейдите в режим Конфигуратор (для этого запустите 1С с удержанием клавиши Shift).
  2. Найдите нужный документ в дереве объектов (например, Документы → РеализацияТоваровУслуг).
  3. В палитре свойств документа откройте вкладку Формы и выберите Печатные формы.
  4. Нажмите кнопку Конструктор печатной формы.

В открывшемся окне вы увидите макет формы, где можно:

  • 📍 Перетаскивать поля мышью для изменения их расположения.
  • 🖌️ Изменять шрифты, выравнивание и цвета через панель инструментов.
  • 📎 Добавлять статичный текст (например, заголовки или примечания).
  • 🖼️ Вставлять изображения (логотип компании) через меню Вставка → Картинка.

После редактирования сохраните форму и обновите базу (Конфигурация → Обновить конфигурацию базы данных). Теперь при печати документа будет использоваться ваш шаблон.

⚠️ Внимание: Конструктор печатных форм имеет ограничения. Он не позволяет:

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

Для таких задач потребуется редактировать форму вручную через код (см. раздел 4).

💡

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

3. Способ 2: Использование внешних обработок для печатных форм

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

Преимущества внешних обработок:

  • 🔄 Легко обновлять и заменять без изменения конфигурации.
  • 📂 Можно хранить несколько вариантов форм для разных случаев.
  • 🛠️ Подходят для распределенных баз (например, когда форма нужна только в одном филиале).

Чтобы создать внешнюю обработку:

  1. В режиме Конфигуратор выберите Файл → Новый → Внешняя обработка.
  2. В открывшемся окне укажите название (например, ПечатнаяФормаСчетаФактуры).
  3. На вкладке Основная добавьте команду для вызова формы (кнопка Добавить команду).
  4. В модуле обработки напишите код для формирования печатной формы (пример см. ниже).

Пример кода для внешней обработки (печать счета-фактуры):

Процедура ПечатьСчетаФактуры(Документ)

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

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

// Заполнение шапки

Таблица.ВывестиСекцию("Шапка");

Таблица.Параметры.Номер = Документ.Номер;

Таблица.Параметры.Дата = Документ.Дата;

// Заполнение табличной части

Для Каждого Строка Из Документ.Товары Цикл

Таблица.ВывестиСекцию("СтрокаТаблицы");

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

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

Таблица.Параметры.Цена = Строка.Цена;

КонецЦикла;

// Вывод подвала

Таблица.ВывестиСекцию("Подвал");

// Отображение формы

ТекстФормы = Новый ТекстовыйДокумент;

ТекстФормы.УстановитьТекст(Таблица.ПолучитьТекст());

ТекстФормы.Показать();

КонецПроцедуры

Готовую обработку сохраните в файл и подключите в пользовательском режиме через Файл → Открыть. Теперь форма будет доступна при выборе документа.

Указать название обработки|Добавить команду для вызова формы|Создать макет формы (если нужен)|Написать процедуру заполнения макета|Протестировать вывод на печать-->

4. Способ 3: Ручное программирование печатной формы на встроенном языке

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

Основные этапы:

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

Пример создания печатной формы для документа РеализацияТоваровУслуг:

Шаг 1. Создание макета

Откройте документ в конфигураторе, перейдите на вкладку Макеты и добавьте новый макет типа Табличный документ. Назовите его, например, ПечатнаяФормаНакладной. В макете создайте секции:

  • Шапка — для заголовка документа.
  • СтрокаТаблицы — для вывода строк табличной части.
  • Подвал — для итогов и подписей.

Шаг 2. Код для заполнения макета

В модуле документа добавьте процедуру:

Процедура ПечатьНакладной(Кнопка)

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПечатнаяФормаНакладной");

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

// Заполнение шапки

Таблица.Параметры.НомерДокумента = Номер;

Таблица.Параметры.ДатаДокумента = Формат(Дата, "ДФ=dd.MM.yyyy");

Таблица.Параметры.Контрагент = Контрагент.Наименование;

Таблица.ВывестиСекцию("Шапка");

// Заполнение табличной части

Для Каждого СтрокаТоваров Из Товары Цикл

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

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

Таблица.Параметры.Цена = СтрокаТоваров.Цена;

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

Таблица.ВывестиСекцию("СтрокаТаблицы");

КонецЦикла;

// Заполнение подвала

Таблица.Параметры.ИтоговаяСумма = Итог("СуммаДокумента");

Таблица.Параметры.СуммаПрописью = ЧислоПрописью(Итог("СуммаДокумента"),,,"руб.");

Таблица.ВывестиСекцию("Подвал");

// Отображение формы

ТекстФормы = Новый ТекстовыйДокумент;

ТекстФормы.УстановитьТекст(Таблица.ПолучитьТекст());

ТекстФормы.Показать("Печатная форма накладной");

// Сохранение в PDF (опционально)

Если Вопрос("Сохранить в PDF?", Вопрос.ДаНет) = КодВопроса.Да Тогда

ТекстФормы.Записать("C:\Temp\Накладная_" + Номер + ".pdf", ТипФайлаPDF.Портрет);

КонецЕсли;

КонецПроцедуры

Шаг 3. Привязка к кнопке

В форме документа добавьте кнопку Печать накладной и свяжите ее с процедурой ПечатьНакладной.

⚠️ Внимание: При работе с динамическими данными (например, курсами валют или остатками на складе) всегда проверяйте актуальность информации на момент печати. В коде используйте функции вроде ТекущаяДата() или ПолучитьКурсВалюты(), а не фиксированные значения.

Как добавить логотип компании в печатную форму?

1. Поместите файл логотипа (например, logo.png) в каталог шаблонов 1С или в ресурсы конфигурации.

2. В макете формы добавьте секцию для изображения и укажите путь к файлу через параметр Таблица.Картинка("Путь\К\Файлу.png").

3. В коде заполнения макета свяжите параметр с картинкой:

Таблица.Параметры.Логотип = Новый Картинка("C:\Шаблоны\logo.png");

4. Настройте размеры изображения через свойства секции в макете (например, Ширина=100, Высота=50).

5. Работа с системой компоновки данных (СКД) для сложных форм

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

  • 📊 Гибко настраивать группировки и итоги.
  • 🔍 Фильтровать данные по условиям.
  • 📈 Строить диаграммы и сводные таблицы.

Пример создания печатной формы через СКД:

  1. В конфигураторе откройте объект, для которого нужна форма (например, документ ПоступлениеТоваров).
  2. Перейдите на вкладку Отчеты и добавьте новый отчет с типом Система компоновки данных.
  3. В конструкторе СКД настройте:
    • Источник данных (запрос к документам).
    • Структуру отчета (группировки по контрагентам, номенклатуре и т.д.).
    • Поля вывода (наименование, количество, сумма).
  4. На вкладке Настройки укажите параметры вывода (ориентация страницы, шрифты).
  5. Сохраните отчет и свяжите его с командой печати в форме документа.
  6. Преимущество СКД в том, что пользователи могут самостоятельно настраивать вид формы через интерфейс Настройки отчета, не обращаясь к программисту.

    Способ создания формы Сложность Гибкость Когда использовать
    Конструктор печатных форм ⭐ (просто) Низкая Для мелких правок стандартных форм
    Внешние обработки ⭐⭐ (средне) Средняя Для тестирования или распределенных баз
    Ручное программирование ⭐⭐⭐ (сложно) Высокая Для уникальных форм с логикой
    Система компоновки данных (СКД) ⭐⭐⭐ (сложно) Очень высокая Для динамических отчетов и документов

    6. Типичные ошибки и их исправление

    Даже опытные разработчики сталкиваются с проблемами при создании печатных форм. Вот самые распространенные ошибки и способы их устранения:

    • 🖨️ Форма печатается пустой или с ошибками:

      Проверьте:

      • Правильно ли указан ИсточникДанных в макете.
      • Нет ли опечаток в названиях параметров (например, Таблица.Параметры.НомерДокумента vs Таблица.Параметры.Номер).
      • Доступны ли данные на момент печати (например, если документ не проведен, некоторые реквизиты могут быть пустыми).
    • 📄 Неправильное форматирование текста или чисел:

      Используйте функции форматирования:

      Формат(Дата, "ДФ=dd.MM.yyyy")  // для дат
      

      Формат(Сумма, "ЧДЦ=2; ЧРЗ= ") // для чисел (2 знака после запятой)

    • 🖼️ Логотип или картинки не отображаются:

      Убедитесь, что:

      • Путь к файлу указан корректно (лучше использовать относительные пути или ресурсы конфигурации).
      • Файл изображения находится в доступной папке (например, C:\Шаблоны\).
      • В макете для секции с картинкой указаны правильные размеры.
    • 📑 Длинные таблицы обрезаются при печати:

      Настройте параметры страницы в макете:

      Таблица.Параметры.ОриентацияСтраницы = ОриентацияСтраницы.Альбомная;
      

      Таблица.Параметры.ВысотаСтраницы = 297; // для формата A4

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

    💡

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

    7. Экспорт печатных форм в PDF и другие форматы

    Часто печатные формы нужно не только распечатать, но и сохранить в электронном виде (например, для отправки по email). В 1С есть встроенные механизмы для экспорта в PDF, Excel, HTML и другие форматы.

    Способы экспорта:

    • 📄 Сохранение в PDF:

      ТекстФормы.Записать("C:\Отчеты\Документ.pdf", ТипФайлаPDF.Портрет);
    • 📊 Экспорт в Excel:

      ТекстФормы.Записать("C:\Отчеты\Документ.xlsx", ТипФайлаXLSX.Таблица);
    • 🌐 Генерация HTML (для отправки по email):

      HTML = ТекстФормы.ПолучитьHTML();
      

      Письмо = Новый Почта;

      Письмо.Текст = HTML;

      Письмо.Отправить();

    Для автоматизации отправки документов по email можно использовать планировщик задач 1С или внешние обработки. Например, чтобы отправлять счета-фактуры контрагентам в конце дня:

    Процедура ОтправитьСчетаПоEmail()
    

    Выборка = Документы.РеализацияТоваровУслуг.Выбрать();

    Пока Выборка.Следующий() Цикл

    Если Выборка.Статус = "Проведен" И НЕ Выборка.Отправлен Тогда

    ПечатнаяФорма = ПолучитьПечатнуюФорму(Выборка.Ссылка);

    ОтправитьEmail(Выборка.Контрагент.Email, "Счет-фактура №" + Выборка.Номер, ПечатнаяФорма);

    Выборка.Отправлен = Истина;

    Выборка.Записать();

    КонецЕсли;

    КонецЦикла;

    КонецПроцедуры

    ⚠️ Внимание: При экспорте в PDF проверьте кодировку шрифтов, особенно если в документе используются специальные символы (например, знаки валют или математические обозначения). В некоторых версиях 1С для корректного отображения требуется устанавливать шрифты типа Arial Unicode MS.

    8. Оптимизация и ускорение печати больших документов

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

    • 🚀 Используйте пакетную печать:

      Instead of generating one large document, split it into parts:

      Для Индекс = 1 По КолвоСтраниц Цикл
      

      Таблица.Очистить();

      // Заполнение данных для текущей страницы

      Таблица.Вывести();

      ТекстФормы.Добавить(Таблица.ПолучитьТекст());

      КонецЦикла;

    • 🗃️ Кэшируйте часто используемые данные:

      Если в форме многократно обращаются к одним и тем же справочникам (например, номенклатуре), загрузите их заранее в массив:

      СправочникНоменклатуры = Справочники.Номенклатура.Выбрать();
      

      Пока СправочникНоменклатуры.Следующий() Цикл

      КэшНоменклатуры.Добавить(СправочникНоменклатуры.Ссылка, СправочникНоменклатуры.Наименование);

      КонецЦикла;

    • 📉 Отключите ненужные вычисления:

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

      Если НужноВычислятьСуммуПрописью Тогда
      

      Таблица.Параметры.СуммаПрописью = ЧислоПрописью(Сумма);

      КонецЕсли;

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

FAQ: Частые вопросы по печатным формам в 1С

Как добавить в печатную форму поле, которого нет в документе?

Если нужно вывести данные, которых нет в самом документе (например, остатки на складе или курс валюты на дату документа), используйте один из способов:

  1. Добавьте вычисляемый реквизит в документ через конфигуратор.
  2. Получите данные напрямую в коде формы через запрос:
  3. Запрос = Новый Запрос;
    

    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1

    | КурсыВалют.Курс КАК Курс

    |ИЗ

    | РегистрСведений.КурсыВалют КАК КурсыВалют

    |ГДЕ

    | КурсыВалют.Валюта = &Валюта

    | И КурсыВалют.Дата = &Дата";

    Запрос.УстановитьПараметр("Валюта", Документ.Валюта);

    Запрос.УстановитьПараметр("Дата", Документ.Дата);

    Результат = Запрос.Выполнить();

    Таблица.Параметры.КурсВалюты = Результат.Получить()[0].Курс;

Можно ли сделать печатную форму с QR-кодом?

Да, для генерации QR-кода в печатной форме:

  1. Подключите внешнюю компоненту для работы с QR (например, BarcodeLib или ZXing.NET).
  2. В коде формы сгенерируйте QR и вставьте его как картинку:
  3. QR = Новый Картинка(ПолучитьQRКод(Документ.Номер + "|" + Документ.Дата));
    

    Таблица.Параметры.QRCode = QR;

  4. В макете добавьте секцию для вывода изображения QR-кода.

Готовые обработки для генерации QR-кодов можно найти на Инфостарте или 1С:ИТС.

Почему при печати из веб-клиента форма отображается некорректно?

Проблемы в веб-клиенте обычно связаны с:

  • Неподдерживаемыми шрифтами (используйте стандартные шрифты типа Arial или Times New Roman).
  • Слишком сложными макетами (упростите структуру, избегайте вложенных таблиц).
  • Ограничениями браузера (попробуйте обновить браузер или использовать тонкий клиент).

Для диагностики включите режим отладки в веб-клиенте и проверьте логи на сервере 1С.

Как сделать печатную форму для нескольких документов одновременно?

Для пакетной печати:

  1. Создайте обработку с таблицей, куда пользователь сможет добавить нужные документы.
  2. В цикле формируйте печатную форму для каждого документа и объединяйте их в один файл:
  3. ОбщийДокумент = Новый ТекстовыйДокумент;
    

    Для Каждого Док Из СписокДокументов Цикл

    Текст