Работа с печатными формами в 1С:Предприятие — одна из самых востребованных задач среди разработчиков и пользователей системы. Без грамотно оформленных документов невозможно вести учет, взаимодействовать с контрагентами или сдавать отчетность. Однако стандартные формы далеко не всегда покрывают бизнес-требования: то логотип компании отсутствует, то нужны дополнительные реквизиты, то требуется нестандартный формат. В таких случаях на помощь приходит создание кастомных макетов печатных форм.
Эта статья поможет разобраться, как с нуля создать макет печатной формы в 1С 8.3, даже если вы никогда раньше не занимались программированием в этой системе. Мы рассмотрим все этапы: от подготовки шаблона в Конфигураторе до вывода данных на печать с учетом особенностей различных документов (счета, накладные, акты). Особое внимание уделим типичным ошибкам, которые допускают новички, и способам их избежать. Для наглядности приведём реальные примеры кода и скриншоты интерфейса.
Важно: инструкция актуальна для последних версий платформы 1С:Предприятие 8.3 (включая 8.3.23 и новее). Если вы работаете со старой версией (8.2 или ниже), некоторые функции могут отсутствовать или работать иначе. В таких случаях рекомендуем обновить платформу или уточнить совместимость в документации.
1. Подготовка: что нужно знать перед созданием макета
Прежде чем приступать к разработке макета, важно понять структуру печатной формы в 1С. Любой документ состоит из:
- 📄 Шапки — общие данные (название компании, дата, номер документа)
- 📋 Табличной части — перечень товаров/услуг с количеством, ценой, суммой
- 💰 Итогов — суммы по документу (с НДС, без НДС, всего к оплате)
- 🖼️ Дополнительных элементов — логотип, подписи, печать, реквизиты банка
В 1С макет печатной формы хранится в виде .mxl-файла (для новых версий) или .ert (для устаревших конфигураций). Современный подход предполагает использование встроенного редактора макетов, который позволяет визуально размещать элементы и привязывать их к данным из базы. Однако для сложных форм может потребоваться ручное редактирование кода на языке 1С или даже использование XDTO-пакетов.
Определитесь с источником данных для вашей формы:
- 📊 Документ (например,
Документ.РеализацияТоваровУслуг) - 📈 Отчёт (например,
Отчёт.ОборотноСальдоваяВедомость) - 🗃️ Справочник (например,
Справочник.Номенклатура)
От этого зависит, какие реквизиты будут доступны для вывода в макете.
⚠️ Внимание: Если вы планируете использовать макет для регламентированных документов (например, счёт-фактура или ТОРГ-12), убедитесь, что структура формы соответствует действующим требованиям законодательства. В противном случае документ может быть не принят контрагентами или налоговыми органами.
2. Способы создания макета печатной формы
В 1С:Предприятие 8.3 есть несколько способов создать макет печатной формы. Выбор зависит от ваших навыков и сложности задачи:
| Способ | Сложность | Когда использовать | Плюсы | Минусы |
|---|---|---|---|---|
| Встроенный редактор макетов | Низкая | Простые формы с минимальной логикой | Не требует знания кода, визуальное редактирование | Ограниченные возможности кастомизации |
Ручное редактирование .mxl |
Средняя | Средней сложности формы с нестандартными элементами | Гибкость настройки, поддержка сложных таблиц | Требует понимания структуры XML |
| Программное создание через код | Высокая | Динамические формы, зависимые от условий | Максимальная гибкость, поддержка любой логики | Требует знания языка 1С и XDTO |
| Использование внешних обработок | Средняя | Многократное использование одного макета для разных документов | Удобно для тиражирования, не затрагивает конфигурацию | Может конфликтовать с обновлениями |
Для большинства задач достаточно встроенного редактора. Однако если вам нужно, например, динамически менять состав колонок табличной части в зависимости от типа документа или добавлять QR-коды с данными, без программного кода не обойтись.
Рассмотрим самый универсальный способ — создание макета через Конфигуратор.
Открыть Конфигуратор в режиме редактирования|Создать резервную копию базы|Определить источник данных (документ/справочник)|Подготовить эскиз формы на бумаге-->
3. Пошаговая инструкция: создаём макет в Конфигураторе
Перейдём к практике. Предположим, нам нужно создать печатную форму для документа РеализацияТоваровУслуг с добавлением логотипа компании и дополнительных реквизитов.
Шаг 1. Откройте Конфигуратор
Запустите 1С:Предприятие в режиме Конфигуратор. Для этого:
- Выберите вашу базу в списке.
- Нажмите кнопку
Конфигуратор(или выберите пункт менюФайл → Конфигуратор). - Введите пароль администратора (если требуется).
Шаг 2. Найдите объект, для которого создаётся форма
В дереве конфигурации разверните ветку Объекты → Документы и выберите РеализацияТоваровУслуг. Кликните правой кнопкой и выберите Все подчинённые объекты → Печатные формы.
Шаг 3. Создайте новый макет
Нажмите Добавить и выберите тип Макет. В открывшемся окне:
- 📌 Укажите имя макета (например,
ПечатнаяФормаСЛоготипом). - 📌 Выберите тип
Табличный документ(для большинства печатных форм). - 📌 Нажмите
Готово.
Шаг 4. Настройте структуру макета
Откроется встроенный редактор макетов. Здесь вы можете:
- 🖼️ Добавить картинку (логотип) через меню
Вставка → Рисунок. - 📝 Вставить текстовые поля для шапки (название документа, дата, номер).
- 📊 Создать таблицу для перечня товаров (
Вставка → Таблица). - 💰 Добавить итоговые поля (сумма, НДС).
Для привязки данных к полям документа используйте выражения. Например, чтобы вывести номер документа, в свойствах текстового поля укажите:
Документ.Номер
Если вам нужно вывести данные из связанного справочника (например, название организации из справочника Организации), используйте точечную нотацию: Документ.Организация.Наименование.
Шаг 5. Сохраните и проверьте макет
После настройки сохраните макет (Файл → Сохранить) и закройте редактор. Теперь нужно связать макет с печатной формой:
- Вернитесь к списку печатных форм документа.
- Выберите созданный макет в поле
Макет. - Напишите процедуру вывода на печать (пример кода см. в следующем разделе).
⚠️ Внимание: Если вы используете управляемые формы, процедура вывода печатной формы должна быть описана в модуле объекта. Для обычных форм код пишется в модуле документа.
4. Программный вывод печатной формы: примеры кода
Создание макета — только половина дела. Чтобы форма действительно печаталась, нужно написать код, который:
- 🔄 Получит данные из документа.
- 🖨️ Заполнит макет этими данными.
- 📄 Выведет на печать или сохранит в файл.
Рассмотрим два варианта: для обычных и управляемых форм.
Вариант 1. Обычная форма (тонкий клиент, толстый клиент)
Код размещается в модуле документа (например, Документ.РеализацияТоваровУслуг):
Процедура ПечатьСЛоготипом(Копия = Ложь)
// Создаём новый табличный документ на основе макета
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПечатнаяФормаСЛоготипом.ПолучитьМакет;
// Заполняем шапку документа
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = Номер;
ОбластьШапка.Параметры.Дата = Дата;
ОбластьШапка.Параметры.Организация = Организация.Наименование;
// Заполняем табличную часть
ОбластьТаблица = Макет.ПолучитьОбласть("Таблица");
Для Каждого СтрокаТовар Из Товары Цикл
ОбластьСтрока = ОбластьТаблица.Скопировать;
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовар.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовар.Количество;
ОбластьСтрока.Параметры.Цена = СтрокаТовар.Цена;
ОбластьСтрока.Параметры.Сумма = СтрокаТовар.Сумма;
ТабДок.ВывестиОбласть(ОбластьСтрока);
КонецЦикла;
// Выводим итоги
ОбластьИтоги = Макет.ПолучитьОбласть("Итоги");
ОбластьИтоги.Параметры.Всего = Итог("СуммаДокумента");
ТабДок.ВывестиОбласть(ОбластьИтоги);
// Показываем пользователю
Если Копия Тогда
ТабДок.Показать;
Иначе
ТабДок.Печать;
КонецЕсли;
КонецПроцедуры
Вариант 2. Управляемая форма (веб-клиент, тонкий клиент)
Для управляемых форм код размещается в модуле объекта. Основное отличие — использование Клиентского и Серверного контекстов:
&НаКлиенте
Процедура ПечатьСЛоготипом(Команда)
ПечатьСЛоготипомНаСервере;
КонецПроцедуры
&НаСервере
Процедура ПечатьСЛоготипомНаСервере
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПечатнаяФормаСЛоготипом.ПолучитьМакет;
// Заполнение шапки и таблицы аналогично обычной форме
//...
// Отправляем результат клиенту
Возврат ТабДок;
КонецПроцедуры
Для вывода результата на клиенте используйте:
ТабДок.Показать; // Просмотр
ТабДок.Печать; // Печать
Всегда проверяйте заполнение параметров макета перед выводом. Если хотя бы один параметр не заполнен, область не отобразится в табличном документе.
5. Типичные ошибки и как их избежать
Даже опытные разработчики сталкиваются с проблемами при создании печатных форм. Вот самые распространённые ошибки и способы их решения:
- 🔴 Макет не отображается при печати
Причина: Неверно указано имя макета в процедуре или макет не сохранён.
Решение: Проверьте имя макета в коде и в дереве конфигурации. Убедитесь, что макет привязан к документу. - 🔴 Данные в таблице не выводятся
Причина: Не заполнены параметры областей или ошибка в цикле вывода строк.
Решение: Добавьте отладочный вывод (Сообщить) для проверки значений параметров. - 🔴 Логотип не отображается
Причина: Путь к файлу изображения указан неверно или формат не поддерживается.
Решение: Используйте встроенные ресурсы (Вставить → Рисунок → Из файла) и проверьте формат (лучше.pngили.jpg). - 🔴 Форма печатается с разбивкой на страницы
Причина: Не настроены параметры страницы в макете.
Решение: В редакторе макета настройтеПараметры страницы(поля, ориентация). - 🔴 Текст накладывается друг на друга
Причина: Неверно расставлены области или слишком маленький шрифт.
Решение: Проверьте координаты областей в макете и увеличьте отступы.
⚠️ Внимание: Если вы используете 1С:Бухгалтерию или 1С:УТ в облачном сервисе (1С:Fresh), некоторые функции работы с макетами могут быть ограничены. Уточняйте возможности кастомизации в документации вашего тарифа.
Как отладить макет печатной формы?
Для отладки макетов используйте следующие приёмы:
1. Просмотр структуры макета: Откройте файл .mxl в текстовом редакторе (например, Notepad++) и проверьте корректность XML-разметки.
2. Пошаговый вывод: Добавьте в код процедуры печати вывод промежуточных значений через Сообщить.
3. Проверка областей: В редакторе макетов включите отображение границ областей (Вид → Границы областей).
4. Тестовый вывод: Сначала выводите макет в предварительный просмотр (ТабДок.Показать), а не сразу на печать.
6. Расширенные возможности: динамические формы и XDTO
Если вам нужно создать динамическую печатную форму, которая меняется в зависимости от условий (например, разных типов документов или прав пользователя), стандартного редактора макетов будет недостаточно. В таких случаях используют:
- 🛠️ Условное форматирование — изменение видимости областей в зависимости от данных.
- 📊 XDTO-пакеты — для работы со сложными структурами данных (например, в интеграциях).
- 🖥️ Внешние обработки — если макет используется в нескольких конфигурациях.
Пример динамического макета:
Допустим, нам нужно скрывать колонку"Скидка" в печатной форме, если скидка равна нулю. Для этого в коде заполнения макета добавляем условие:
Если СтрокаТовар.Скидка <> 0 Тогда
ОбластьСтрока.Параметры.Скидка = СтрокаТовар.Скидка;
Иначе
ОбластьСтрока.Параметры.Скидка ="";
КонецЕсли;
Для работы с XDTO потребуется:
- Создать
XDTO-пакетв конфигурации. - Описать структуру данных в формате
XSD. - Использовать
ЗаписьXMLиЧтениеXMLдля обмена данными.
Пример создания XDTO-пакета:
// Создаём пакет
Пакет = XDTOПакеты.Добавить("http://example.com/PrintForm");
// Добавляем тип для строки товара
ТипСтрокаТовара = Пакет.СписокТипов.Добавить("СтрокаТовара");
ТипСтрокаТовара.Тип = Новый ОписаниеТипа("Structure");
ТипСтрокаТовара.Элементы.Добавить("Номенклатура", Новый ОписаниеТипа("String"));
ТипСтрокаТовара.Элементы.Добавить("Количество", Новый ОписаниеТипа("Double"));
Использование XDTO оправдано, если:
- 🔄 Вам нужно обмениваться данными с внешними системами.
- 📂 Форма должна поддерживать версионирование (например, для исторических данных).
- 🌍 Печатная форма используется в распределённой базе.
7. Оптимизация и ускорение печати
Если печатная форма содержит большое количество данных (например, накладная на 1000 строк), её генерация может занимать много времени. Чтобы ускорить процесс:
- ⚡ Используйте серверные процедуры для подготовки данных (особенно в управляемых формах).
- ⚡ Кэшируйте часто используемые макеты в памяти.
- ⚡ Оптимизируйте циклы — избегайте лишних обращений к базе внутри цикла вывода строк.
- ⚡ Используйте пакетную печать для нескольких документов.
Пример оптимизированного кода:
// Подготавливаем данные на сервере
&НаСервере
Функция ПодготовитьДанныеДляПечати(Документ)
Данные = Новый Структура;
Данные.Вставить("Шапка", Документ.ПолучитьШапкуДляПечати);
Данные.Вставить("Таблица", Документ.ПолучитьТаблицуДляПечати);
Возврат Данные;
КонецФункции
// На клиенте только выводим
&НаКлиенте
Процедура ПечатьОптимизированная(Команда)
Данные = ПодготовитьДанныеДляПечатиНаСервере;
ТабДок = СформироватьТабличныйДокумент(Данные);
ТабДок.Печать;
КонецПроцедуры
Для пакетной печати нескольких документов используйте:
Процедура ПечатьПачке(МассивДокументов)
ТабДок = Новый ТабличныйДокумент;
Для Каждого Док Из МассивДокументов Цикл
Макет = Док.ПечатнаяФорма.ПолучитьМакет;
// Заполняем макет данными текущего документа
//...
ТабДок.ВывестиРазделительСтраниц;
КонецЦикла;
ТабДок.Печать;
КонецПроцедуры
Для ускорения печати в сетевых базах используйте Фоновое задание — это позволит не блокировать интерфейс пользователя во время формирования крупных документов.
FAQ: Ответы на частые вопросы
Как добавить QR-код в печатную форму?
Для добавления QR-кода:
- Скачайте внешнюю компоненту для генерации QR (например, Barcode1C).
- Подключите её в конфигурации (
Сервис → Внешние компоненты). - В макете добавьте область для QR-кода и в коде заполнения сформируйте изображение:
QR = Новый Картинка(ВнешняяКомпонента.СгенерироватьQR(ДанныеДляQR));
ОбластьQR.Картинка = QR;
Можно ли создать печатную форму без Конфигуратора?
Да, есть два способа:
- Внешняя обработка — создаётся в отдельном файле и подключается к базе. Подходит для тиражирования.
- Редактирование через"Все функции" — в пользовательском режиме вызовите
Все функции → Печатные формыи отредактируйте существующую форму (не все конфигурации поддерживают).
Однако для сложных форм без Конфигуратора не обойтись.
Как сделать печатную форму для отчёта?
Принцип аналогичен документам, но источник данных — отчёт. Пример:
- Откройте отчёт в Конфигураторе (
Объекты → Отчёты). - Добавьте новую печатную форму и макет.
- В коде используйте
Отчёт.Результатдля получения данных:
Результат = Отчёт.Выполнить;
ТаблицаДанных = Результат.Вывести;
Почему при печати сбиваются колонки в таблице?
Этоная проблема при несовпадении ширины колонок в макете и реальных данных. Решения:
- Задайте фиксированную ширину колонок в макете (
Свойства → Ширина). - Используйте
АвтоПодборШириныКолонок:
ТабДок.АвтоПодборШириныКолонок = Истина;
Если проблема остаётся, проверьте шрифты — иногда причиной является несовместимость шрифтов в макете и на клиентском ПК.
Как экспортировать печатную форму в PDF?
В современных версиях 1С 8.3 есть встроенная поддержка PDF:
ТабДок.Записать("C:\Temp\Документ.pdf", ТипФайлаТабличногоДокумента.PDF);
Для старых версий потребуется внешняя компонента (например, PDFCreator).