Блог 1С программиста (1С:Предприятие 8.3, конфигурация «Управление нашей фирмой»)

Статья: Внешняя печатная форма для Бухгалтерии 3.0

Внешняя печатная форма для 1С:Бухгалтерии 3.0 через механизм БСП

Полный скелет внешней обработки: СведенияОВнешнейОбработке, процедура Печать, вывод табличного документа и подключение через «Дополнительные отчёты и обработки».

Конфигурация
1С:Бухгалтерия 3.0
Платформа
8.3.24 и новее
Уровень
Средний
Опубликовано
08.07.2026
Время чтения
10 мин

Содержимое

Внешняя печатная форма подключается к типовой конфигурации без изменения самой конфигурации: файл обработки регистрируется в справочнике дополнительных обработок и появляется в меню «Печать» нужного документа. Механизм даёт Библиотека стандартных подсистем, поэтому код одинаков для Бухгалтерии, УНФ и других типовых на БСП.

Что должно быть в обработке

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

Обработка создаётся в конфигураторе как внешняя (Файл → Новый → Внешняя обработка), сохраняется в .epf.

Паспорт обработки

Функция СведенияОВнешнейОбработке() Экспорт

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.4.1.1");

	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Наименование = "Счёт на оплату с реквизитами и печатью";
	ПараметрыРегистрации.Версия = "1.0.3";
	ПараметрыРегистрации.БезопасныйРежим = Истина;
	ПараметрыРегистрации.Информация = "Печатает счёт с факсимиле подписи и печати организации.";

	ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");

	Команда = ПараметрыРегистрации.Команды.Добавить();
	Команда.Представление = "Счёт на оплату (с печатью)";
	Команда.Идентификатор = "СчетСПечатью";
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	Команда.ПоказыватьОповещение = Ложь;

	Возврат ПараметрыРегистрации;

КонецФункции

Два момента, на которых чаще всего спотыкаются:

  • версия БСП в первой строке должна быть не выше той, что установлена в базе. Иначе при подключении обработка будет отклонена;
  • идентификатор команды — произвольная строка, но именно по ней потом определяется, какую форму печатать, если команд в обработке несколько.

Процедура печати

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетСПечатью") Тогда

		УправлениеПечатью.ВывестиТабличныйДокументВКоллекциюПечатныхФорм(
			КоллекцияПечатныхФорм,
			"СчетСПечатью",
			"Счёт на оплату (с печатью)",
			СформироватьСчет(МассивОбъектов, ОбъектыПечати));

	КонецЕсли;

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

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

Функция СформироватьСчет(МассивОбъектов, ОбъектыПечати)

	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетСПечатью";

	Макет = ПолучитьМакет("Счет");
	ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
	ОбластьСтроки = Макет.ПолучитьОбласть("Строка");
	ОбластьПодвала = Макет.ПолучитьОбласть("Подвал");

	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Счет.Ссылка КАК Ссылка,
		|	Счет.Номер КАК Номер,
		|	Счет.Дата КАК Дата,
		|	Счет.Контрагент КАК Контрагент,
		|	Счет.Организация КАК Организация,
		|	Счет.СуммаДокумента КАК СуммаДокумента,
		|	Товары.НомерСтроки КАК НомерСтроки,
		|	Товары.Номенклатура КАК Номенклатура,
		|	Товары.Количество КАК Количество,
		|	Товары.Цена КАК Цена,
		|	Товары.Сумма КАК Сумма
		|ИЗ
		|	Документ.СчетНаОплатуПокупателю КАК Счет
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК Товары
		|		ПО Товары.Ссылка = Счет.Ссылка
		|ГДЕ
		|	Счет.Ссылка В (&МассивОбъектов)
		|
		|УПОРЯДОЧИТЬ ПО
		|	Ссылка,
		|	НомерСтроки
		|ИТОГИ ПО
		|	Ссылка";

	Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);

	ВыборкаПоДокументам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

		Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;

		НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

		ОбластьШапки.Параметры.Заполнить(ВыборкаПоДокументам);
		ТабличныйДокумент.Вывести(ОбластьШапки);

		ВыборкаПоСтрокам = ВыборкаПоДокументам.Выбрать();
		Пока ВыборкаПоСтрокам.Следующий() Цикл
			ОбластьСтроки.Параметры.Заполнить(ВыборкаПоСтрокам);
			ТабличныйДокумент.Вывести(ОбластьСтроки);
		КонецЦикла;

		ОбластьПодвала.Параметры.Заполнить(ВыборкаПоДокументам);
		ТабличныйДокумент.Вывести(ОбластьПодвала);

		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
			ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);

	КонецЦикла;

	Возврат ТабличныйДокумент;

КонецФункции

ЗадатьОбластьПечатиДокумента — не украшение: именно она связывает области табличного документа с конкретными документами. Без неё не работает отправка печатной формы по электронной почте и сохранение по документам.

Подключение в базе

  1. «Администрирование → Печатные формы, отчёты и обработки» — включить использование дополнительных отчётов и обработок.
  2. В списке дополнительных обработок создать новую, загрузить файл .epf.
  3. Проверить, что размещение и команда подтянулись из паспорта обработки, при необходимости указать раздел размещения.
  4. Настроить права: кто видит команду печати.

После этого команда появляется в меню «Печать» документа.

Отладка

Отладка внешней обработки включается в настройках базы: разрешить отладку и запуск отладчика. Удобный приём — отладка через «Подключиться к предмету отладки» с указанием внешней обработки, точки останова ставятся прямо в её модуле.

Если команда не появилась: почти всегда дело в назначении (Назначение.Добавить) — имя объекта метаданных должно совпадать точно, включая регистр, а сама обработка должна быть отмечена как используемая.