Как добавить макет и реализовать печать в конфигурации 1С с нуля

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка системы печати в новой конфигурации — это фундаментальный навык, который требует понимания взаимодействия серверной и клиентской частей платформы. Когда мы работаем в «чистой» конфигурации, у нас нет готовых подсистем (например, БСП), поэтому всю архитектуру вывода данных на печать мы должны построить самостоятельно. В данной статье мы подробно разберем, как пройти путь от создания макета до вывода готовой печатной формы в современном интерфейсе «Такси».

Использование конструктора печати: быстрый старт

Для тех, кто только начинает работу с объектом или хочет быстро получить прототип, платформа предоставляет встроенный Конструктор печати. Рассмотрим, как им воспользоваться. Находясь в дереве метаданных, выберем нужный документ, перейдем на закладку «Макеты» и нажмем кнопку «Конструкторы» — «Конструктор печати».

Проанализируем шаги работы конструктора:

  1. Выбор команды: Мы задаем имя команды (например, Печать), которая появится в интерфейсе документа.
  2. Определение данных: Выбираем реквизиты шапки (Номер, Дата, Контрагент) и табличные части (Товары, Услуги), которые должны попасть в печатную форму.
  3. Оформление макета: Платформа автоматически создаст макет типа «Табличный документ», разметит области (Заголовок, Шапка, ТабличнаяЧастьСостав, Подвал) и создаст программный код в модуле менеджера и модуле команды.

Хотя конструктор удобен, профессиональная разработка чаще требует ручного управления процессом для достижения «удобоваримого» вида и гибкости. Рассмотрим, как сделать это правильно с точки зрения архитектуры 1С 8.3.

Архитектурный подход: Модуль менеджера и программное формирование

Современный стандарт разработки диктует вынос логики печати в Модуль менеджера документа. Это позволяет печатать документы не только из формы самого объекта, но и из списка документов, не создавая лишних серверных вызовов для каждого экземпляра. Разберем создание такой системы по шагам.

Во-первых, создадим макет типа «Табличный документ» вручную. Назовем его ПФ_MXL_Накладная. Разметим в нем области, используя горизонтальные секции:

Во-вторых, перейдем в модуль менеджера и реализуем экспортную процедуру печати. Проанализируем пример кода:


Процедура Печать(ТабДок, МассивОбъектов) Экспорт
	
	// Получаем макет из метаданных
	Макет = ПолучитьМакет("ПФ_MXL_Накладная");
	
	// Задаем общие настройки табличного документа
	ТабДок.АвтоМасштаб = Истина;
	ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ТабДок.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РасходнаяНакладная";
	
	// Формируем запрос для получения данных всех выбранных документов
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РасходнаяНакладная.Ссылка КАК Ссылка,
		|	РасходнаяНакладная.Номер КАК Номер,
		|	РасходнаяНакладная.Дата КАК Дата,
		|	РасходнаяНакладная.Контрагент КАК Контрагент,
		|	РасходнаяНакладная.Товары.(
		|		Номенклатура КАК Номенклатура,
		|		Количество КАК Количество,
		|		Цена КАК Цена,
		|		Сумма КАК Сумма
		|	) КАК Состав
		|ИЗ
		|	Документ.РасходнаяНакладная КАК РасходнаяНакладная
		|ГДЕ
		|	РасходнаяНакладная.Ссылка В(&МассивОбъектов)";
	
	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДокумент = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДокумент.Следующий() Цикл
		
		// Выводим заголовок
		ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
		ОбластьЗаголовок.Параметры.Заполнить(ВыборкаДокумент);
		ТабДок.Вывести(ОбластьЗаголовок);
		
		// Выводим шапку таблицы
		ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
		ТабДок.Вывести(ОбластьШапкаТаблицы);
		
		// Выводим строки из табличной части
		ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
		ВыборкаСтрок = ВыборкаДокумент.Состав.Выбрать();
		НомерСтроки = 0;
		
		Пока ВыборкаСтрок.Следующий() Цикл
			НомерСтроки = НомерСтроки + 1;
			ОбластьСтрока.Параметры.Заполнить(ВыборкаСтрок);
			ОбластьСтрока.Параметры.НомерСтроки = НомерСтроки;
			ТабДок.Вывести(ОбластьСтрока);
		КонецЦикла;
		
		// Выводим подвал
		ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
		ОбластьПодвал.Параметры.Заполнить(ВыборкаДокумент);
		ТабДок.Вывести(ОбластьПодвал);
		
		// Если документов несколько, добавляем разрыв страницы
		Если МассивОбъектов.Количество() > 1 Тогда
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Создание команды для интерфейса «Такси»

Для того чтобы пользователь мог вызвать печать, нам необходимо создать Команду. В дереве метаданных документа добавим новую команду с именем ПечатьНакладной. В свойствах команды укажем:

Теперь пропишем алгоритм вызова в модуле команды. Нам нужно разделить выполнение на клиентскую и серверную части. На сервере мы подготовим ТабличныйДокумент, а на клиенте — покажем его пользователю.


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ТабДок = Новый ТабличныйДокумент;
	
	// Вызываем серверную функцию для формирования печатной формы
	СформироватьПечатнуюФормуНаСервере(ТабДок, ПараметрКоманды);
	
	// Показываем результат пользователю
	ТабДок.Показать("Печать расходной накладной");
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СформироватьПечатнуюФормуНаСервере(ТабДок, ПараметрКоманды)
	
	// Преобразуем параметр в массив, если это одиночная ссылка
	МассивОбъектов = Новый Массив;
	Если ТипЗнч(ПараметрКоманды) = Тип("ДокументСсылка.РасходнаяНакладная") Тогда
		МассивОбъектов.Добавить(ПараметрКоманды);
	Иначе
		МассивОбъектов = ПараметрКоманды;
	КонецЕсли;
	
	// Вызываем метод из модуля менеджера
	Документы.РасходнаяНакладная.Печать(ТабДок, МассивОбъектов);
	
КонецПроцедуры

Как привести форму в «удобоваримый» вид?

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

  1. Использование границ: Для таблицы товаров обязательно настройте границы ячеек. Выделите область в макете и через свойства установите Сплошная линия для всех сторон ячейки.
  2. Шрифты и акценты: Заголовок документа сделайте жирным и более крупным шрифтом (например, Arial 14). Итоговые суммы в подвале также выделите жирным шрифтом.
  3. Форматирование чисел: В свойствах ячеек с суммами и ценами установите Формат. Рекомендуется использовать строку формата ЧЦ=15; ЧДЦ=2, чтобы всегда выводить два знака после запятой и разделять группы разрядов.
  4. Автомасштаб: Всегда устанавливайте свойство ТабДок.АвтоМасштаб = Истина;. Это гарантирует, что если таблица получится слишком широкой, платформа автоматически сожмет ее до ширины листа при печати.
  5. Интерактивность: Если вы хотите, чтобы пользователь мог кликнуть на название товара в печатной форме и открыть его карточку, используйте свойство Расшифровка. В макете в ячейке с номенклатурой укажите параметр Номенклатура, и при выводе области этот параметр будет содержать ссылку на объект.

Заключение и советы по развитию

Мы рассмотрели базовый механизм реализации печати с нуля. Если ваша конфигурация будет расти, рекомендуем обратить внимание на Библиотеку стандартных подсистем (БСП). Подсистема «Печать» в БСП позволяет:

Однако для небольших и самописных решений описанного выше метода через Модуль менеджера и ТабличныйДокумент более чем достаточно. Главное — соблюдать аккуратность в верстке макета и разделять логику получения данных от логики их визуального представления.

← На главную