Печатные формы в 1С:Предприятие — это не просто «бумажная» копия документа, а инструмент, который может экономить часы рабочего времени, снижать количество ошибок и даже улучшать имидж компании перед клиентами. Правильно настроенная форма счета, акта или накладной делает документ читабельным, юридически корректным и адаптированным под специфику бизнеса. Однако стандартные шаблоны далеко не всегда покрывают все потребности: то логотип компании съезжает, то реквизиты дублируются, то требуется добавить уникальные поля, которых нет в типовой конфигурации.
Эта статья поможет разобраться, как настроить печатные формы в 1С 8.3 — от простого редактирования через конструктор до создания полностью кастомных макетов с использованием встроенного языка и СКД (Система Компоновки Данных). Мы рассмотрим варианты для разных конфигураций (Бухгалтерия 3.0, УТ 11, ЗУП 3.1), покажем, как исправить типичные ошибки (например, обрезку текста при печати или некорректное отображение штрихкодов), и дадим готовые примеры кода для распространённых задач. Если вы никогда не занимались настройкой печатных форм — начните с первых разделов. Если вам нужно автоматизировать вывод сложных данных (например, спецификаций с вложенными таблицами) — переходите сразу к блоку про программное создание макетов.
1. Базовые способы настройки печатных форм без программирования
Не каждый пользователь 1С умеет писать код, но это не значит, что он не может адаптировать печатные формы под свои нужды. В большинстве конфигураций есть встроенные инструменты для редактирования макетов без глубоких знаний программирования. Рассмотрим два основных подхода:
- 📄 Конструктор печатных форм — визуальный редактор, доступный в большинстве типовых конфигураций (например, в 1С:Бухгалтерия 3.0 или 1С:Управление торговлей 11). Позволяет перетаскивать поля, менять шрифты и добавлять статичный текст.
- 🔧 Редактирование макета в режиме «1С:Предприятие» — более гибкий способ, где можно править табличные документы напрямую (например, добавлять строки, объединять ячейки или менять формулы).
- 📑 Импорт/экспорт макетов — если у вас есть готовый шаблон из Excel или Word, его можно загрузить в 1С и привязать к документу.
Самый простой способ — использовать конструктор. Например, чтобы изменить печатную форму счета в 1С:Бухгалтерия 3.0:
- Откройте любой документ
Счет на оплату покупателю. - Нажмите кнопку
Печать→Настроить форму(илиИзменить форму, в зависимости от версии). - В открывшемся окне перетащите нужные поля (например,
ДоговорилиСрок оплаты) в нужные места. - Сохраните изменения и проверьте результат предварительным просмотром (
F9).
Если конструктора нет или его возможностей недостаточно, можно редактировать макет вручную:
- Перейдите в
Администрирование → Печатные формы, отчеты и обработки → Печатные формы. - Найдите нужный документ (например,
Реализация товаров и услуг) и откройте его макет. - В режиме редактирования табличного документа добавьте строки, столбцы или измените формулы (например, для автоматического подсчёта итогов).
⚠️ Внимание: При редактировании макетов вручную легко нарушить структуру документа. Всегда делайте резервную копию базы перед изменениями или тестируйте настройку в тестовом режиме.
2. Программное создание печатных форм: когда без кода не обойтись
Если вам нужно:
- 📊 Добавить в форму динамические данные (например, остатки по складу на дату документа),
- 🖼️ Вставить штрихкоды, QR-коды или логотип компании с автоматическим масштабированием,
- 📋 Создать многостраничные формы с автоматическим переносом данных (например, для длинных спецификаций),
- 🔄 Интегрировать печатную форму с внешними системами (например,pull-request данные из CRM или WMS),
— то без программирования не обойтись. В 1С есть два основных способа создать печатную форму программно:
- Через табличный документ — классический метод, где форма строится с помощью объектов
ТабличныйДокумент,Область,Ячейкаи т.д. - Через СКД (Система Компоновки Данных) — более современный подход, позволяющий гибко настраивать вывод данных, группировки и условное оформление.
Пример кода для создания простой печатной формы счета через табличный документ:
Процедура ПечатьСчета(Документ)
ТабДок = Новый ТабличныйДокумент;
ОбластьШапка = ТабДок.Область();
ОбластьШапка.Текст = "СЧЕТ № " + Документ.Номер + " от " + Формат(Документ.Дата, "ДФ=dd.MM.yyyy");
// Добавляем таблицу с товарами
ТаблицаТоваров = ТабДок.Область(5, 1, 5 + Документ.Товары.Количество(), 4);
ТаблицаТоваров.АвтоВысотаСтрок = Истина;
ТаблицаТоваров.Заполнить(Документ.Товары);
ТабДок.Показать();
КонецПроцедуры
Для работы со СКД используется другой подход — сначала создаётся схема компоновки данных, а затем на её основе строится макет. Пример:
Процедура ПечатьАктаСКД(Документ)
Схема = Новый СхемаКомпоновкиДанных;
НаборДанных = Схема.НаборыДанных.Добавить("Документ");
НаборДанных.ИсточникДанных = Новый ИсточникДанныхВыборка(Документ.Выбрать());
Макет = Новый МакетКомпоновкиДанных(Схема);
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
Результат = Компоновщик.Выполнить(Макет, Документ);
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.Вывести(Результат, ТабДок);
ТабДок.Показать();
КонецПроцедуры
⚠️ Внимание: При использовании СКД учитывайте, что некоторые конфигурации (например, 1С:УНФ) имеют ограничения на редактирование схем компоновки. Перед началом работы проверьте права доступа в роли пользователя.
3. Типичные ошибки при настройке печатных форм и как их исправить
Даже опытные пользователи 1С сталкиваются с проблемами при работе с печатными формами. Вот наиболее распространённые ошибки и способы их устранения:
| Проблема | Возможная причина | Решение |
|---|---|---|
| Текст обрезается при печати | Не хватает ширины ячейки или включен параметр Обрезать текст |
Увеличьте ширину столбца или отключите обрезку в свойствах ячейки: Область.ПараметрыСтраницы.ОбрезатьТекст = Ложь |
| Штрихкод не отображается | Не установлен шрифт для штрихкодов или неверный формат данных | Установите шрифт Free 3 of 9 и проверьте, что передаёте строку без пробелов: Область.Штрихкод(ДанныеДляКодирования, "Free3Of9") |
| Логотип съезжает при печати | Не зафиксированы размеры ячейки с изображением | Закрепите высоту и ширину области: Область.ВысотаСтроки = 50; Область.ШиринаКолонки = 100 |
| Данные не обновляются в форме | Кэширование макета или ошибка в запросе | Очистите кэш (Файл → Открыть → Очистить кэш) или проверьте актуальность источника данных |
Одна из самых коварных ошибок — несовпадение данных в печатной форме и документе. Это происходит, если:
- 🔄 В коде формы используется устаревшая выборка (например, данные берутся не из текущего документа, а из его копии).
- 📅 В форме жёстко прописана дата, а не берётся динамически из документа.
- 🔒 Нарушены права доступа к полям документа (пользователь не видит некоторые реквизиты).
Чтобы избежать таких проблем, всегда проверяйте:
Используются ли актуальные данные из документа (не кэшированные)?
Все ли реквизиты доступны текущему пользователю?
Корректно ли отображаются спецсимволы (например, знак рубля)?
Сохранена ли форма в нужной кодировке (UTF-8 для многобайтовых символов)?
-->
4. Как добавить логотип, штрихкод или QR-код в печатную форму
Добавление графических элементов — одна из самых востребованных задач при настройке печатных форм. Рассмотрим, как вставить в форму:
- 🏢 Логотип компании — статичное изображение из файла.
- 📦 Штрихкод — динамически генерируемый код товара или документа.
- 🔲 QR-код — например, для быстрой оплаты счета через мобильное приложение.
Для вставки логотипа:
- Поместите файл изображения (например,
logo.png) в каталог базы данных или вВнешниеФайлы. - В коде печатной формы добавьте:
Картинка = Новый Картинка(ПутьКФайлу);
ОбластьЛоготип = ТабДок.Область(1, 1, 3, 3);
ОбластьЛоготип.Картинка = Картинка;
Для генерации штрихкода потребуется:
- Установить шрифт для штрихкодов (например, Free 3 of 9 или Code 128).
- Использовать метод
Штрихкод():
ОбластьШтрихкод = ТабДок.Область(10, 1, 10, 5);
ОбластьШтрихкод.Штрихкод(Документ.Номер, "Code128", 2, 50); // Тип, масштаб, высота
Для QR-кода можно использовать внешнюю компоненту или библиотеку. Пример с использованием BarcodeLib:
QR = Новый BarcodeLib;
КартинкаQR = QR.СгенерироватьQRКод(Документ.Ссылка.УникальныйИдентификатор(), 200, 200);
ОбластьQR = ТабДок.Область(10, 6, 12, 8);
ОбластьQR.Картинка = КартинкаQR;
⚠️ Внимание: При печати штрихкодов и QR-кодов на принтере проверьте, что масштаб печати установлен в 100%. Иначе код может стать нечитаемым для сканера.
Если вам нужно сгенерировать штрихкод для номера документа, добавьте перед ним контрольную сумму. Например, для EAN-13 номер должен состоять из 12 цифр, а 13-я рассчитывается автоматически.
5. Настройка печатных форм для пакетной печати документов
Пакетная печать — это вывод на принтер нескольких документов одновременно (например, всех счетов за день или накладных для одного клиента). В 1С есть два способа реализовать эту функцию:
- Стандартная обработка «Пакетная печать» — доступна в большинстве типовых конфигураций (например, в 1С:Бухгалтерия 3.0 или 1С:УТ 11).
- Кастомная обработка — если стандартный функционал не подходит (например, нужно печать с группировкой по контрагентам).
Чтобы настроить стандартную пакетную печать:
- Перейдите в
Отчеты → Пакетная печать документов. - Укажите период, тип документов (например,
Реализация товаров и услуг) и нужные печатные формы. - Настройте фильтры (например, только для определенного склада или менеджера).
- Запустите печать на принтер или сохранение в PDF.
Если стандартной обработки недостаточно, можно создать собственную. Пример кода для пакетной печати счетов:
Процедура ПакетнаяПечатьСчетов(ДатаНачала, ДатаКонца)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Счет.Ссылка КАК Ссылка
ИЗ Документ.СчетНаОплату КАК Счет
ГДЕ Счет.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Документ = Выборка.Ссылка.ПолучитьОбъект();
ПечатьСчета(Документ); // Используем процедуру из предыдущего раздела
КонецЦикла;
КонецПроцедуры
Для удобства можно добавить в обработку:
- 📌 Группировку документов (например, по контрагентам или проектам),
- 📂 Сохранение в отдельные файлы с именами по шаблону (например,
Счет_№{Номер}_от_{Дата}.pdf), - 📧 Автоматическую отправку по email (интеграция с 1С:Документооборот или внешними сервисами).
6. Оптимизация печатных форм для разных устройств (принтеры, PDF, email)
Одна и та же печатная форма может по-разному отображаться на:
- 🖨️ Лазерном принтере (высокая точность, но возможны проблемы с цветами),
- 📄 Термопринтере (ограниченная ширина, нет цветной печати),
- 📧 PDF-файле (нужно учитывать масштабирование и шрифты),
- 📱 Мобильном устройстве (маленький экран, вертикальная ориентация).
Чтобы форма корректно отображалась везде, следуйте этим рекомендациям:
| Устройство | Проблема | Решение |
|---|---|---|
| Лазерный принтер | Обрезка полей | Установите отступы не менее 5 мм от краёв листа: ТабДок.Поля(5, 5, 5, 5) |
| Термопринтер | Съезжают столбцы | Используйте моноширинный шрифт (например, Courier New) и фиксированную ширину ячеек |
| Не читаются шрифты | Встройте шрифты в документ: ТабДок.ПараметрыСтраницы.ВстраиватьШрифты = Истина |
|
| Мобильное устройство | Мелкий текст | Увеличьте размер шрифта до 12-14 пт и используйте адаптивный макет |
Для термопринтеров (например, этикеток или чеков) часто требуется специальный макет. Пример кода для печати чека на АТОЛ или Штрих-М:
Процедура ПечатьЧека(Документ)
ТабДок = Новый ТабличныйДокумент;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.ШиринаСтраницы = 80; // Ширина термоленты в мм
// Шапка чека
ТабДок.ВывестиСтроку("МАГАЗИН 'РОМАШКА'");
ТабДок.ВывестиСтроку("ЧЕК №" + Документ.Номер);
ТабДок.ВывестиСтроку("----------------------------");
// Товары
Для Каждого Товар Из Документ.Товары Цикл
ТабДок.ВывестиСтроку(Формат(Товар.Количество, "ЧЦ=3") + " x " +
СокрЛП(Товар.Номенклатура) + " " +
Формат(Товар.Цена, "ЧДЦ=2; ЧН=0"));
КонецЦикла;
ТабДок.Показать();
ТабДок.Напечатать(ИмяПринтера: "Термопринтер");
КонецПроцедуры
⚠️ Внимание: При печати на термопринтерах избегайте использования жирного шрифта или подчёркивания — это может привести к зажевыванию бумаги. Также проверьте, что длина строки не превышает ширину ленты (обычно 40-48 символов для 80-мм принтера).
7. Автоматизация: как привязать печатную форму к событию документа
Чтобы печатная форма создавалась автоматически при проведении документа (например, счет отправлялся на email сразу после сохранения), нужно использовать подписки на события или регламентные задания.
Пример подписки на событие (для 1С:Бухгалтерия 3.0):
- Откройте конфигуратор (
Файл → Конфигуратор). - Перейдите в
Общие → Подписки на события. - Создайте новую подписку для документа
СчетНаОплатуи событияПриЗаписи. - Добавьте код для автоматической печати:
Процедура ПриЗаписи(Документ, Отказ) Экспорт
Если Документ.Проводится И НЕ Документ.ПометкаУдаления Тогда
ПечатьСчета(Документ); // Вызов процедуры печати
ОтправитьНаEmail(Документ); // Опционально: отправка по email
КонецЕсли;
КонецПроцедуры
Для регламентного задания (например, ежедневной печати отчётов):
- Создайте обработку с нужной логикой (например,
ПечатьОтчётовПоРасписанию.epf). - Зарегистрируйте её как регламентное задание в
Администрирование → Регламентные задания. - Укажите расписание (например, ежедневно в
20:00).
Если нужно отправлять документы по email, используйте встроенные механизмы 1С или интеграцию с 1С:Документооборот. Пример кода для отправки:
Процедура ОтправитьНаEmail(Документ)
Почта = Новый Почта;
Сообщение = Новый ПочтовоеСообщение;
Сообщение.Тема = "Счет №" + Документ.Номер + " от " + Формат(Документ.Дата, "ДФ=dd.MM.yyyy");
// Прикрепляем PDF-версию счета
ТабДок = ПолучитьПечатнуюФорму(Документ);
ВременныйФайл = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.PDF);
Сообщение.Вложения.Добавить(ВременныйФайл);
Почта.Отправить(Сообщение, Документ.Контрагент.Email);
КонецПроцедуры
Автоматизация печати и отправки документов сокращает время на рутинные операции и снижает риск ошибок. Однако перед настройкой проверьте, что у пользователей достаточно прав на выполнение этих действий.
FAQ: Частые вопросы по настройке печатных форм в 1С
Как вернуть стандартную печатную форму, если я её случайно испортил?
Если вы редактировали форму через конструктор, попробуйте:
- Открыть документ и нажать
Печать → Восстановить стандартную форму(если такой пункт есть). - В конфигураторе найти макет документа (
Объекты → Документы → [ВашДокумент] → Макеты) и сравнить его с типовой конфигурацией (Конфигурация → Сравнить конфигурации). - Если ничего не помогает — восстановите базу из резервной копии.
Можно ли в печатной форме вывести данные из другого документа (например, остатки по складу на дату)?
Да, но для этого потребуется:
- Написать запрос к базе данных для получения нужных данных.
- Добавить эти данные в макет печатной формы (например, в отдельную таблицу).
- Учесть, что это может замедлить печать, если запрос сложный.
Пример запроса для остатков:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товар,
| Сумма(Остаток) КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&Дата, )
|ГДЕ
| Склад = &Склад";
Запрос.УстановитьПараметр("Дата", Документ.Дата);
Запрос.УстановитьПараметр("Склад", Документ.Склад);
Результат = Запрос.Выполнить();
Почему при печати в PDF русские буквы отображаются кракозябрами?
Эта проблема возникает из-за:
- Отсутствия встроенных шрифтов в PDF.
- Неправильной кодировки при экспорте.
Решение:
- Установите флаг
ТабДок.ПараметрыСтраницы.ВстраиватьШрифты = Истина. - Используйте стандартные шрифты (например, Arial или Times New Roman).
- Проверьте кодировку файла:
ТабДок.КодировкаТекста = КодировкаТекста.UTF8.
Как сделать печатную форму для документа, которого нет в типовой конфигурации?
Если документ кастомный (созданный вами или партнёром), то:
- Откройте документ в конфигураторе (
Объекты → Документы). - Добавьте новый макет (
Макеты → Добавить) и настройте его. - Создайте процедуру печати в модуле документа:
Процедура Печать(Кнопка)
ТабДок = Новый ТабличныйДокумент;
// Здесь ваш код формирования документа
ТабДок.Показать();
КонецПроцедуры
- Добавьте кнопку печати на форму документа.
Можно ли настроить печатную форму так, чтобы она автоматически подставляла данные из внешней системы (например, курсы валют с сайта ЦБ)?
Да, но для этого потребуется:
- Написать HTTP-запрос к внешнему API (например, к сайту ЦБ).
- Обработать ответ и добавить данные в печатную форму.
- Учесть возможные задержки при получении данных.
Пример кода для получения курса доллара:
Функция ПолучитьКурсДол