Добавление печатной формы в 1С:Управление производственным предприятием (УПП) — задача, с которой рано или поздно сталкивается каждый специалист, работающий с этой конфигурацией. Несмотря на кажущуюся сложность, процесс можно разбить на логические этапы: от подготовки макета до интеграции формы в интерфейс программы. В этой статье мы разберём все нюансы — от выбора инструментов (встроенный редактор, Microsoft Word, OpenOffice) до программного кода на встроенном языке 1С 8.3.

Особенность 1С УПП заключается в её модульной структуре: печатные формы здесь тесно связаны с документами, справочниками и отчётами. Например, форма Счёт-фактура для документа Реализация товаров и услуг требует не только визуального оформления, но и корректной подстановки данных из регистров накопления. Мы рассмотрим оба подхода: ручное создание через конфигуратор и автоматизированное развёртывание с помощью Библиотеки стандартных подсистем (БСП).

Важно учитывать, что в последних версиях 1С:УПП (например, 1.3.130.х) механизм печатных форм претерпел изменения: теперь рекомендуется использовать управляемые формы вместо обычных. Это влияет на синтаксис кода и структуру макетов. Если вы работаете со старой версией (до 1.3.100.х), некоторые шаги могут отличаться — об этом мы тоже упомянем.

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

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

  • 📄 Тип документа: для какого объекта метаданных создаётся форма (например, Документ.ЗаказПокупателя или Справочник.Контрагенты).
  • 🖼️ Формат макета: будет ли это .mxl (внутренний формат 1С), .docx (Word) или .odt (OpenOffice).
  • 🔧 Источник данных: какие реквизиты документа или справочника должны отображаться в форме (например, Номер, Дата, СуммаДокумента).
  • 📑 Требования к оформлению: нужны ли логотип компании, подписи, печать, штрихкоды или QR-коды.

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

⚠️ Внимание: В 1С:УПП версии 1.3.120.х и выше изменён механизм работы с ТабличнымиДокументами. Если вы используете старые обработки для вывода печатных форм, они могут некорректно отображаться в управляемом интерфейсе. Проверьте совместимость в Тестирование и исправление (Конфигуратор → Администрирование).

Для ускорения работы рекомендуем использовать типовой шаблон из поставки 1С:УПП. Например, для документа РеализацияТоваровУслуг можно скопировать существующую форму СчётФактура и модифицировать её под свои нужды. Это сэкономит время на настройку полей и выравнивание.

📊 Какой инструмент вы используете для создания печатных форм в 1С?
Встроенный редактор макетов
Microsoft Word
OpenOffice
Другой текстовый редактор
Пишу код вручную

2. Способы создания печатной формы: сравнение методов

В 1С:УПП есть три основных способа добавить печатную форму. Каждый из них имеет свои плюсы и минусы:

Метод Плюсы Минусы Когда использовать
Встроенный редактор макетов Не требует внешних программ, интеграция с конфигуратором Ограниченные возможности форматирования, сложно работать с таблицами Простые формы без сложного оформления
Microsoft Word / OpenOffice Гибкое оформление, поддержка стилей, работа с изображениями Требуется настройка связки с 1С, возможны проблемы с шрифтами Формы с логотипами, сложными таблицами, графическими элементами
Программное создание (код 1С) Максимальная гибкость, динамическое формирование данных Требует знаний языка 1С, сложно поддерживать Динамические формы, где данные зависят от условий

Для большинства задач оптимальным решением является комбинация методов. Например:

  1. Создать макет в Word с оформлением и логотипом.
  2. Экспортировать его в .mxl через конфигуратор.
  3. Добавить программную логику для динамических полей (например, подстановка ИНН контрагента).

Если вы работаете с управляемыми формами, учитывайте, что макет должен быть адаптирован под веб-клиент. Например, шрифты Arial или Times New Roman отображаются корректно, а редкие шрифты могут подменяться.

💡

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

3. Пошаговая инструкция: создание формы через конфигуратор

Рассмотрим процесс на примере добавления печатной формы для документа ЗаказПокупателя. Предположим, нам нужна форма Счёт на оплату с логотипом компании и реквизитами покупателя.

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

Откройте конфигуратор (1С:Предприятие → Конфигуратор) и выполните следующие действия:

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

Во встроенном редакторе:

  • Добавьте заголовок (например, "СЧЁТ № [Номер] от [Дата]").
  • Вставьте таблицу с колонками: "№ п/п", "Наименование", "Кол-во", "Цена", "Сумма".
  • Добавьте подвал с полями "Итого:", "Всего к оплате:".

Шаг 2: Привязка данных

Чтобы поля макета заполнялись данными из документа, используйте псевдонимы. Например:

  • Для номера документа: {Документ.Номер}.
  • Для даты: {Документ.Дата, Формат="ДФ=dd.MM.yyyy"}.
  • Для наименования товара в таблице: {Объект.Товары.Наименование}.

Для динамического заполнения таблицы используйте цикл в модуле формы:

Процедура Печать(ТабДок)

ТабДок.Очистить();

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

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

// Заполнение таблицы товаров

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

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

КонецЦикла;

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

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

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

Шаг 3: Добавление формы в интерфейс

Чтобы форма стала доступна пользователям:

  1. Откройте форму документа ЗаказПокупателя в режиме редактирования.
  2. Добавьте команду ПечатьСчёта в панель действий.
  3. В модуле команды пропишите вызов процедуры печати:
    Процедура ПечатьСчёта(Команда)
    

    ПечатнаяФорма = Документы.ЗаказПокупателя.ПечатнаяФормаСчётНаОплату();

    ПечатнаяФорма.Печать(Объект);

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

☑️ Проверка перед сохранением макета

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

4. Работа с внешними редакторами (Word, OpenOffice)

Если встроенный редактор не устраивает ограниченным функционалом, можно создать макет во внешней программе. Рассмотрим процесс на примере Microsoft Word:

Шаг 1: Подготовка шаблона в Word

Создайте документ с необходимым оформлением:

  • 📌 Используйте закладки для динамических полей (например, НомерДокумента, ДатаДокумента).
  • 🖼️ Вставьте логотип компании (рекомендуемый формат — .png с прозрачным фоном).
  • 📊 Для таблиц используйте стили Таблица сетка или Таблица списка.

Пример закладки для номера документа:

  1. Выделите текст "№ __".
  2. Перейдите во вкладку Вставка → Закладка.
  3. Укажите имя закладки: DocumentNumber.

Шаг 2: Импорт шаблона в 1С

Чтобы загрузить шаблон в конфигуратор:

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

В модуле печатной формы добавьте код для заполнения закладок:

Процедура Печать(ТабДок)

Шаблон = ПолучитьМакет("ШаблонСчётаWord");

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

ТекстДок.Прочитать(Шаблон);

// Заполнение закладок

ТекстДок.НайтиЗакладку("DocumentNumber").Значение = Объект.Номер;

ТекстДок.НайтиЗакладку("DocumentDate").Значение = Формат(Объект.Дата, "ДФ=dd.MM.yyyy");

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

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

⚠️ Внимание: При использовании OpenOffice убедитесь, что в настройках 1С включена поддержка формата .odt (Конфигуратор → Параметры → Общие → Форматы файлов). В противном случае макет может не корректно импортироваться.

5. Программное создание печатной формы (для опытных пользователей)

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

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

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

Процедура ПечатьАктаВыполненныхРабот(ТабДок)

// Создание объекта ТабличныйДокумент

ТабДок.Очистить();

// Шапка документа

ТабДок.ВывестиСтроку("АКТ ВЫПОЛНЕННЫХ РАБОТ № " + Объект.Номер);

ТабДок.ВывестиСтроку("от " + Формат(Объект.Дата, "ДФ=dd.MM.yyyy"));

// Таблица услуг

ТабДок.ВывестиСтроку("--------------------------------------------------");

ТабДок.ВывестиСтроку("| № | Наименование услуги | Кол-во | Сумма |");

ТабДок.ВывестиСтроку("--------------------------------------------------");

СуммаИтого = 0;

НомерСтроки = 1;

Для Каждого СтрокаУслуга Из Объект.Услуги Цикл

СуммаСтроки = СтрокаУслуга.Количество * СтрокаУслуга.Цена;

ТабДок.ВывестиСтроку(Формат(НомерСтроки, "ЧГ=0") + " | " +

СтрокаУслуга.Наименование + " | " +

Формат(СтрокаУслуга.Количество, "ЧГ=0") + " | " +

Формат(СуммаСтроки, "ЧДЦ=2; ЧРЗ= "));

СуммаИтого = СуммаИтого + СуммаСтроки;

НомерСтроки = НомерСтроки + 1;

КонецЦикла;

// Подвал

ТабДок.ВывестиСтроку("--------------------------------------------------");

ТабДок.ВывестиСтроку("ИТОГО: " + Формат(СуммаИтого, "ЧДЦ=2; ЧРЗ= "));

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

Шаг 2: Добавление логики

Если в акте нужно отображать скидки или НДС, добавьте соответствующие расчёты:

// Расчёт НДС

СтавкаНДС = Объект.СтавкаНДС;

СуммаНДС = СуммаИтого * СтавкаНДС / 100;

ТабДок.ВывестиСтроку("НДС " + Формат(СтавкаНДС, "ЧДЦ=0") + "%: " + Формат(СуммаНДС, "ЧДЦ=2; ЧРЗ= "));

ТабДок.ВывестиСтроку("Всего к оплате: " + Формат(СуммаИтого + СуммаНДС, "ЧДЦ=2; ЧРЗ= "));

Для условного оформления (например, выделение цветом строк с нулевой суммой) используйте методы УстановитьФон или УстановитьЦветТекста:

Если СуммаСтроки = 0 Тогда

ТабДок.УстановитьФон(Новый Цвет(255, 200, 200)); // Светло-красный фон

КонецЕсли;

💡

Программное создание печатных форм позволяет гибко управлять данными, но требует тестирования на больших объёмах информации. Всегда проверяйте производительность при выводе документов с 100+ строками.

6. Настройка прав доступа и тестирование

После создания печатной формы необходимо:

  1. Назначить права на её использование.
  2. Протестировать вывод на разных клиентах (тонкий, толстый, веб).
  3. Проверьте печать на физическом принтере (иногда макеты выглядят иначе на бумаге).

Настройка прав

Перейдите в Конфигуратор → Администрирование → Пользователи и:

  • 🔐 Выберите роль (например, Бухгалтер или МенеджерПоПродажам).
  • 📋 В правах на объект Документ.ЗаказПокупателя добавьте разрешение на Печать.
  • 🖨️ Если форма содержит конфиденциальные данные (например, себестоимость), ограничьте доступ с помощью RLS (Record Level Security).

Тестирование

Проверьте работу формы в разных сценариях:

Сценарий Что проверить
Пустой документ Корректно ли отображается шапка и подвал без строк таблицы
Документ с 100+ строками Нет ли разрывов таблицы, корректно ли нумерация страниц
Печать на принтере Совпадают ли поля на экране и на бумаге, нет ли обрезки текста
Экспорт в PDF Сохраняются ли шрифты и выравнивание при сохранении в PDF
⚠️ Внимание: В 1С:УПП при печати через веб-клиент могут возникать проблемы с кириллическими шрифтами. Если текст отображается кракозябрами, добавьте в макет шрифт Arial Unicode MS или используйте ТабличныйДокумент.ТолькоПечать = Истина.

Отладка ошибок

Если форма не выводится или выводится некорректно:

  • 🐞 Проверьте журнал регистрации (Администрирование → Журнал регистрации) на наличие ошибок.
  • 🔍 Используйте отладчик 1С для пошагового выполнения кода модуля.
  • 📡 Убедитесь, что все псевдонимы в макете совпадают с именами реквизитов в коде.

Типичные ошибки:

  • Ошибка при получении данных: Поле не найдено (НомерДокумента) → Проверьте имя закладки или псевдонима.
  • Недостаточно памяти при печати большого документа → Оптимизируйте цикл вывода строк.
  • Шрифт не найден → Укажите резервный шрифт в настройках макета.

7. Оптимизация и расширенные возможности

Чтобы печатные формы работали быстро и удобно, используйте следующие приёмы:

Кэширование макетов

Если форма используется часто, кэшируйте её в памяти:

Перем мМакетСчёта;

Процедура ПечатьСчёта(ТабДок)

Если мМакетСчёта = Неопределено Тогда

мМакетСчёта = ПолучитьМакет("СчётНаОплату");

КонецЕсли;

ТабДок.Вывести(мМакетСчёта);

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

Динамическое изменение макета

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

Процедура Печать(ТабДок)

Если Объект.Контрагент.Вид = ВидКонтрагента.ФизЛицо Тогда

Макет = ПолучитьМакет("СчётДляФизЛиц");

Иначе

Макет = ПолучитьМакет("СчётДляЮрЛиц");

КонецЕсли;

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

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

Интеграция с внешними системами

Если нужно отправлять печатные формы по email или в EDI-систему, используйте Поток и ЗаписьДанных:

Процедура ОтправитьНаEmail(АдресПолучателя)

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

Печать(ТабДок);

// Сохранение в PDF

ЗаписьДанных = Новый ЗаписьДанных;

ЗаписьДанных.ОткрытьФайл("C:\Temp\Счёт.pdf");

ТабДок.Записать(ЗаписьДанных, ТипФайлаТабличногоДокумента.PDF);

ЗаписьДанных.Закрыть();

// Отправка email

Почта = Новый Почта;

Сообщение = Новый СообщениеЭлектроннойПочты;

Сообщение.Адресат = АдресПолучателя;

Сообщение.Тема = "Счёт №" + Объект.Номер + " от " + Формат(Объект.Дата, "ДФ=dd.MM.yyyy");

Сообщение.Текст = "Во вложении счёт на оплату.";

Сообщение.Вложения.Добавить("C:\Temp\Счёт.pdf");

Почта.Отправить(Сообщение);

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

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

Для документов с тысячами строк используйте механизм Объект.Записать() перед печатью, чтобы избежать блокировок. Также можно разбивать вывод на части с помощью ТабДок.НачатьПечатьЧасти() и ТабДок.ЗакончитьПечатьЧасти().

8. Типичные ошибки и их решения

Даже опытные разработчики сталкиваются с проблемами при работе с печатными формами. Рассмотрим самые распространённые:

Ошибка Причина Решение
Форма печатается пустой Не заполнены псевдонимы или закладки Проверьте соответствие имён полей в макете и коде
Размытый текст при печати Некорректное разрешение шрифта Установите параметр ТабДок.Масштаб = 100
Не отображаются русские символы в PDF Отсутствует шрифт в системе Используйте ТабДок.УстановитьШрифт("Arial Unicode MS")
Медленная печать больших документов Не оптимизирован цикл вывода Используйте ТабДок.НачатьМассовуюВставкуСтрок()

Если форма корректно отображается на экране, но не печатается на принтере:

  • 🖨️ Проверьте драйвер принтера — иногда помогает переустановка.
  • 📏 Убедитесь, что в настройках печати указан правильный размер бумаги (A4, A5).
  • 🔄 Попробуйте экспортировать форму в PDF и распечатать оттуда.

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

FAQ: Ответы на частые вопросы

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

Логотип можно добавить двумя способами:

  1. Через встроенный редактор:
    • Откройте макет формы.
    • Нажмите Рисунок → Добавить и выберите файл изображения (.png или .jpg).
    • Разместите логотип в нужном месте (обычно в шапке документа).
  • Через внешний редактор (Word/OpenOffice):
    • Вставьте изображение в документ.
    • При импорте в 1С убедитесь, что файл логотипа находится в каталоге конфигурации или добавлен в Ресурсы.
    • Рекомендуемый размер логотипа: 200×100 пикселей с разрешением 300 dpi.

  • Можно ли создать печатную форму без программирования?

    Да, если форма простая и не требует сложной логики. Для этого:

    1. Используйте встроенный конструктор макетов в конфигураторе.
    2. Для документов с табличными данными (например, Товары) используйте автозаполнение колонок.
    3. Если нужны условные выражения (например, "Если сумма > 1000, то выделить жирным"), используйте выражения в псевдонимах:
      {Объект.СуммаДокумента > 1000 ? "Жирный текст" : "Обычный текст"}

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

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

    Процесс аналогичен, но есть нюансы:

    1. Откройте отчёт в конфигураторе (Объекты → Отчёты).
    2. Добавьте новую печатную форму в ветку ПечатныеФормы.
    3. В макете используйте