Вывод печатных форм с запросом данных в форму "Печать документов" из подсистемы БСП "Печать". Вывод печатных форм с запросом данных в форму "Печать документов" из подсистемы БСП "Печать" Печатная форма для регистрации событий

  • 28.03.2024

Все не раз видели, как в типовых конфигурациях, построенных на основе БСП (Библиотека стандартных подсистем), печатные формы, построенные на основе Табличного документа, выводятся в специальную форму "ПечатьДокументов". Эта форма входит в состав подсистемы "Печать" из БСП. При разработке своих печатных форм, иногда необходимо запросить у пользователя дополнительные данные необходимые для печати. Тут встает вопрос, как в этом случае вывести печатную форму в форму "Печать документа". В этой статье я рассмотрю, как реализовать вывод печатной формы в упомянутую форму из подсистемы "Печать", в случае если мы хотим перед выводом печатной формы запросить у пользователя дополнительные данные. Здесь будут рассмотрены два случая: когда реализуется печатная форма с использованием подсистемы "Дополнительные отчеты и обработки" и когда печатная форма добавляется в конфигурацию в режиме конфигуратора, т.е. вносятся изменения в типовую конфигурацию.

Форма "ПечатьДокументов" предоставляет некоторые дополнительные функции при работе с печатными формами, такие как:

  • кнопка печати на принтер, непосредственно в форме;
  • указание количества копий, печатной формы;
  • редактирование сформированной печатной формы;
  • возможность сохранения печатной формы в различные форматы данных(Excel, Word, PDF и др.);
  • отправка печатной формы по электронной почте;
  • удобная работа с комплектом документов.

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

При использовании стандартных методов добавления печатных форм подсистема "Печать" все сделает за нас и выведет печатную форму, как надо. Например:

  1. При добавлении команды печати в документ с использованием подсистемы "Печать", нам необходимо в процедуре ДобавитьКомандыПечати описать команду печати с указанием менеджера печати, в котором реализована прцоедура Печать;
  2. При создании Дополнительной обработки, нам необходимо, в модуле объекта обработки в функции СведенияОВнешнейОбработке, описать команду с типом использования Вызов серверного метода и тут же реализовать процедуру Печать, которая определенным образом реализует вызов формирования печатной формы.

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

А что если перед началом формирования табличного документа, необходимо запросить у пользователя какие-то данные? Т.е. нам необходимо показать форму. В этом случае стандартный порядок формирвоания печатной формы нарушается и нам надо думать, как же передать нашу печатную форму в форму "ПечатьДокументов".

В этом случае возможны две ситуации:

  1. Когда печатная форма создается с изменение конфигурации;
  2. Когда печатная форма создается без изменения конфигурации, т.е. используетя подсистема "Дополнительные отчеты и обработки".

Создаем печатную форму добавляя её через конфигуратор.

Первый вариат. Через создание обработки с командой.

Этот вариант предусматривает, добавление обработки непосредственно в Объекты метаданных:

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

  1. Создать команду, которая будет вызывать форму нашей печатной формы;
  2. Создать саму форму;
  3. Создать макет печатной формы;
  4. Внести изменения в модуль менеджера обработки.

Создаем команду

Указываем в свойствах команды:

  • Группу где хотим, чтобы команда отображалась в форме;
  • Тип параметра, это как раз тот справочник или документ, печатную форму которого мы делаем;
  • Режим использования параметра - Множественный. Чтобы можно было выводить печатных формы, сразу по нескольким выбранным в списке элементам.

В модуле команды открываем форму обработки передавая её выбранные элементы справочника, для которых необходимо сформировать печатные формы. Не будем тут мудровствовать лукаво и слегка подправим типовой код, который подставляется платформой в процедуру обрабокти команды:

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

Параметр процедуры ПараметрКоманды, как раз и содержит выбранные нами элементы для печати.

Создаем форму

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

ДанныеДляПечати - тип СписокЗначений;

КоличествоСтрок - тип Число.

Мой пример, будет чисто демонстрационный, поэтому условно определимся, что моя цель вывести в печатную строку представления выбранного элемента и то количество строк, которое мы выберем в качестве дополнительного параметра на форме.

Переходим в модуль формы и пишем следующий код:

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

Определяем процедуру ПриСозданииНаСервере и в ней считываем из параметра, который мы передали из команды при открытии формы, список объектов для которых надо формировать печатную форму.

Создаем в форме команду Печать и пишем её обработчик, в котором вызываем функцию общего модуля УправлениеПечатьюКлиент.ВыполнитьКомандуПечати , задаем необходимые параметры этой функции, а именно:

  • Менеджер печати - имя объекта в модуле менеджера, которого определена функция Печать, формирующая нашу печатную форму;
  • Идентификатор - идентификатор печатной формы, которую необходимо напечатать. По этому идентификатору, мы будем в функции Печать модуля менеджера выбирать, какую печатную форму необходимо напечатать;
  • Объекты печати - это непосредтвенно те объекты для которых формируются печатные формы;
  • Владелец формы;
  • Параметры печати - сюда мы формируем и передаем структуру с параметрами печати, тут же мы передаем наши дополнительные параметры, которые мы запросили у пользователя в форме обработки.

Собственно, вызывая функцию ВыполнитьКомандуПечати из формы обработки, мы решаем нашу задачу вывода печатной формы в форму "ПечатьДокументов". Дальше подсистема "Печать" выполнит стандартные действия и доведет выполнение до процедуры Печать, которую мы должны определить в модуле менеджере нашей обработки.

Создаем макет печатной формы

Вносим изменения в модуль менеджера обработки

С этого момента мы выполняем стандартные действия по разработки печатных форм с использованием подсистемы "Печать" из БСП.

Добавляем в модуль менеджера следующий код:

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

Второй вариант. Через реализацию команды печати.

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

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

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт КомандаПечати = КомандыПечати.Добавить(); КомандаПечати.Идентификатор = "ПечатнаяФорма"; КомандаПечати.Представление = НСтр("ru = "Печать печатной формы""); КомандаПечати.Обработчик = "ОбщийМодульПечатнаяФорма.ОбработкаКомандыПечатиПечатнойФормы"; КомандаПечати.Порядок = 100; КонецПроцедуры

Здесь мы добавляем на все формы справочника(напоминаю, что мы работаем со справочником контрагенты), команду печати с названием "Печать печатной формы". И вот здесь главный момент, который надо учесть. На форму можно добавить два вида команд:

1. Вызов процедуры Печать из модуля менеджера;

2. Вызов клиентского метода.

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

Чтобы реализовать такой вызов, необходимо при определении команды, задать для неё Обработчик(см. код выше). В Обработчик команды передается строка, содержащая путь к клиентской функции, т.е. путь к Экспортной функции общего модуля на клиенте. Именно эта функция будет вызвана, при нажатии на команду печати, которую мы добавляем на формы.

Как вы понимаете, чтобы это все заработало, необходимо создать этот самый ОбщийМодуль и определить Экспортную функцию. Поэтому пишем в нашем общем модуле следующий код:

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

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

После того, как мы открыли форму обработки, все действия аналогичны первому варианту.

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

Создаем дополнительную обработку.

А что если, это не наша конфигурация и она на поддержке? Да и вообще мы не хотим лезть в конфигурацию и править её?

В этом случае нам необходимо воспользоватья подсистемой "Дополнительные отчеты и обработки" из БСП.

При таком варианте решения, нам необходимо писать код, только в двух местах и все они находятся в нашей будущей дополнительной обработке:

1. Модуль объекта обработки;

2. Модуль формы обработки.

В модуле объекта пишем следующий код:

//////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС #Область ПрограммныйИнтерфейс // Возвращает сведения о внешней обработке. Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма(); ПараметрыРегистрации.Версия = "1.0"; НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = "Внешняя печатная форма с предварительным запросом данных""); НоваяКоманда.Идентификатор = "ВнешняяПечатнаяФорма"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(); НоваяКоманда.ПоказыватьОповещение = Истина; НоваяКоманда.Модификатор = "ПечатьMXL"; Возврат ПараметрыРегистрации; КонецФункции Процедура Печать(ДанныеПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ВнешняяПечатнаяФорма") Тогда УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ВнешняяПечатнаяФорма", НСтр("ru = "Экзаменационная ведомость""), НапечататьМакет(ДанныеПечати),); КонецЕсли; КонецПроцедуры &НаСервере Функция НапечататьМакет(ДанныеПечати) ПараметрыПечати = ДанныеПечати.Значение; //Получает параметры печати из первого элемента СпискаЗначения МассивОбъектов = ДанныеПечати.Скопировать(); //Копируем список значений МассивОбъектов.Удалить(0); //Удаляем линий скопирвоанный элемент, содержащий ПараметрыПечати ТабличныйДокумент = Новый ТабличныйДокумент; //Создаем табличный документ //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ МОДУЛЯ // //Тут формируем нашу печатную форму Макет = ПолучитьМакет("Макет"); Для каждого Объект Из МассивОбъектов Цикл ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьОбъект = Макет.ПолучитьОбласть("Объект"); ТабличныйДокумент.Вывести(ОбластьШапка); ОбластьОбъект.Параметры["Объект"] = Объект; ТабличныйДокумент.Вывести(ОбластьОбъект); Для Сч = 1 По ПараметрыПечати["КоличествоСтрок"] Цикл ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ОбластьСтрока.Параметры["Строка"] = Сч; ТабличныйДокумент.Вывести(ОбластьСтрока); КонецЦикла; ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЦикла; //ПЕРЕОПРЕДЕЛЯЕМАЯ ЧАСТЬ МОДУЛЯ //////////////////////////////////////////////////////////////////////////////////////////////////////////////// Возврат ТабличныйДокумент; //Возвращаем табличный документ КонецФункции #КонецОбласти

Здесь две функции и одна процедура.

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

Тут нужно обратить внимание на то, что команда печать в этом случае должна содержать только 4 параметра, а не 5 как это при привычном определение команды печати в модуле менеджера. В данном случае отсутвует параметр для передачи Параметров печати. Поэтому нам придетя проявить изобретательность, чтобы передать помимо самих объектов, для которых формируется печатная форма, но так же и параметры которые мы запрашиваем у пользователя в форме.

И так мы определили дополнительную обработку, команда из которой будет открывать форму обработк. Поэтому следующим шагом создаем форму обработки.

В этой форме нам необходимо создать три реквизита для сохранения значений, которые нам понадобятся в дальнейшем. Назовем эти реквизиты следующим образом:

ИдентификаторКоманды - тип Строка

ОбъектыНазначения - тип СписокЗначений

В модуле этой формы пишем следующий код:

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

В процедуре ПриСозданииНаСервере, заполняем наши три реквизита, которые мы создали для хранения параметров передаваемых в форму обработки.

Дальше определяем обработчик кнопки печать на форме. В этом обработчике нам необходимо самим открыть форму "Печать документов", для этого необходимо подготовить ПараметрыОткрытия определенной структуры. В этой структуре, как минимум должны быть определены два поля:

ПараметрыИсточника, которые включают в себя ИдентификаторКоманды и ОбъектыНазначения:

ИдентификаторКоманды - так же сохранили при создании на сервере, это идентификатор, той команды, которая вызвала форму нашей обработки. Поэтому идентификатору, мы будем определять, что нам необходимо печатать в процедуре Печать в модуле объекта.

ОбъектыНазначения - именно в этом поле нам необходимо передать массив объектов, для которых формируется печатная форма, а так же параметры, запрашиваемые у пользователя в форме.

Как я определяю объекты назначения, можно увидеть в функции ПолучитьОбъектыНазначенияИПараметрыПечати . Здесь я копирую наши объекты назначения из реквизита формы, на место элемента массива с индексом 0, я вставляю наши параметры печати.

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

Если вернуться к определению модуля объекта обработки и посмотреть на функцию НапечататьМакет, в первых трех строках функции можно увидеть, как я вытаскиваю из переданных данных в процедуру Печать наши параметры и объекты и дальше с ними работаю.

Такие манипуляции с параметром ОбъектыНазначения, обусловленны спецификой вызова процедуры Печать модуля объекта. Вы можете сами отследить, как передаются параметры и выполняются вызовы функций, открыв модуль формы ПечатьДокументов.

Результат.

В итоге таких манипуляций, мы получим три команды на форме, из которой мы хотим выводить печатную форму:

Нумерация команд, соответствует порядку вариантов реализации.

Все эти команды будут выполнять одинаковые действия:

Показывать форму запроса дополнительных параметров

Выводить в форму "Печать документов" сформированные печатные форм . Как раз то, чего мы и добивались:

P.S. В качестве шаблонов, для реализации своих печатных форм с запросом дополнительных параметров, выгружаю обе обработки, которые учавствуют во всех трех способах формирования печатной формы.

В этой статье подробно будет рассказано, как новичку, плохо знающему 1С 8 создать печатную форму. Для примера возьмем одну из самых распространенных конфигураций 1С 8 — Бухгалтерию 2.0 . Создание печатной формы 1С этапы написания:

  • Создание файла внешней печатной формы;
  • Создание макета печатной формы;
  • Написание программного кода для вывода данных печатной формы на экран;
  • Создание параметров авторегистрации печатной формы;
  • Подключение внешней печатной формы к базе 1С Предприятия .

Создание печатной формы 1С. Постановка задачи

От нас требуется в конфигурации Бухгалтерия 2.0 создать печатную форму к документу Поступление товаров и услуг . В шапке печатной формы вывести следующие данные:

  • Организацию;
  • Контрагента;
  • Договор контрагента;
  • Дату поступления.

В виде таблицы вывести данные табличной части Товары документа. Таблица должна включать в себя следующие колонки:

  • Номенклатура;
  • Количество;
  • Цена;
  • Сумма;
  • А также цена номенклатуры на текущую дату (по виду цен из документа).

Файл внешней обработки

Перейдем к решению задачи. Для начала откроем 1С 8 в режиме Конфигуратор . Именно в этом режиме осуществляются все разработки на платформе 1С 8. Теперь нам необходимо создать файл внешней обработки. Для этого кликнем по меню Файл -> Новый… или по пиктограмме нового файла.

В открывшемся окошке выберем пункт Внешняя обработка .

Далее в поле Имя необходимо вписать название внешней обработки. В нашем случае назовем ее просто: «ПечатнаяФорма», поле синоним при этом заполнится автоматически. Обратите внимание, что в поле Имя, внешней обработки, следует писать название без пробелов и знаков препинания.

Добавим реквизит внешней обработки СсылкаНаОбъект и выберем для него тип ДокументСсылка.ПоступлениеТоваровУслуг . Для этого в дереве метаданных внешней обработки 1С выделим пункт Реквизиты и нажмем кнопку Добавить (кнопка с зеленым плюсом). В правой части экрана откроется окно свойств реквизита, в поле Имя впишем — СсылкаНаОбъект. В поле Тип нажмем кнопку с тремя точками.

В дереве типов раскроем ветку ДокументСсылка , и найдем там элемент ПоступлениеТоваровУслуг, поставим напротив него галочку и нажмем ОК.

Сохраним файл внешней обработки на жесткий диск, для этого воспользуемся меню Файл -> Сохранить , пиктограммой Сохранить (синяя дискета), либо сочетанием клавиш Ctrl + S . Назовем сохраняемый файл «ПечатнаяФорма».

Создание макета печатной формы

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

В дереве метаданных внешней обработки добавим новый макет, в окне конструктора макета ничего менять не будем и нажмем кнопку Готово .

В открывшемся новом макете создадим несколько областей, необходимых для вывода печатной формы. Все необходимые нам области макета будут горизонтальными, поэтому для создания новой области следует выделить необходимое количество строк макета и перейти в меню Таблица -> Имена -> Назначить имя или использовать сочетание клавиш Ctrl + Shift + N, после чего ввести в окошке имя области. При создании области макета не бойтесь ошибиться с количеством строк их всегда можно будет добавить или убрать. Для удаления строки макета 1С выделите нужную строку и выберите в контекстном меню пункт Удалить . Для добавление новой строки в макет, выделите любую строку макета и выберите в контекстном меню пункт Раздвинуть .

Добавление шапки макета

В первую очередь создадим область Шапка , в нее будут выводится данные для заголовка печатной формы. Для данной области нам потребуется семь строк макета. Выделим их и, как я уже писал выше, нажмем сочетание клавиш Ctrl + Shift + N , в поле Имя напишем «Шапка» и нажмем кнопку ОК .

Заполним область макета нужными нам данными. Обычно ни одна печатная форма не обходится без заголовка, поэтому создадим его и в нашей шапке макета. Так как в заголовке помимо названия печатной формы мы будем выводить еще и номер документа из которого она была напечатана, то текст заголовка в макете мы зададим параметром. Параметр макета — это специально обозначенная ячейка макета, в которую при помощи встроенного языка 1С 8 можно выводить различные данные. Заголовок должен выводится на всю ширину печатной формы, поэтому определимся сколько ячеек макета нам будет достаточно для печати на стандартной альбомной ориентации листа.

Обычно хватает тринадцать или четырнадцать ячеек макета, выделим их в первой строке области Шапка и объединим в одну ячейку (Контекстное меню -> Объединить ). После этого дважды щелкнем по получившейся большой ячейке и напишем название параметра, в нашем случае «ТекстЗаголовка». Для того чтобы введенный текст стал полноценным параметром щелкнем по ячейке правой кнопкой мыши и в контекстном меню выберем пункт Свойства . На закладке Макет найдем поле Заполнение и выберем значение Параметр . Параметры в макете 1С обозначаются скобками «<>».

Заголовок печатной формы должен выделяться среди прочего текста, поэтому еще раз выделим ячейку и при помощи пиктограмм на панели форматирования макета, поставим выравнивание текста По центру и размер шрифта 14.

После текста заголовка выведем в область Шапка данные о организации, контрагенте, договоре контрагента и дате поступления товара. Так как все эти данные также берутся из документа, также оформим их параметрами. Кроме того перед каждым параметром следует написать поясняющий текст, что бы пользователь легко понял, где организация, а где контрагент и т.д. Все эти действия подобны созданию заголовка поэтому не буду подробно на них останавливаться, приведу лишь рисунок с тем, что должно получиться в итоге.

На рисунке видно, как отличаются параметры макета, от обычного текста.

Добавление шапки таблицы макета

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

Добавление таблицы в макет

Создадим в макете еще одну область — Данные . В нее будет выводится таблица данных табличной части Товары. Для данной области нам понадобится только одна строка макета. Чтобы вывести все строки табличной части в печатную форму мы будем заполнять и выводить данную область нужное количество раз. Колонки в области Данные должны совпадать с колонками шапки таблицы, поэтому заполнить ее не составит труда. Единственное отличие — в области Данные нам нужны параметры, а не просто текст. Также заметьте, что по умолчанию числовые параметры форматируются по правому краю, а текстовые по левому. Для выделения колонок, также необходимо использовать инструмент Рамка .

Добавление подвала в макет

Последняя необходимая нам область макета — это Подвал . В нее будут выводиться итоги по количеству и сумме. Создание аналогично созданию области Данные , но дополнительно следует выделить итоги жирным шрифтом.

В итоге должен получиться макет следующего вида:

Создание печатной формы 1С. Программирование

Приступим к программированию — это важнейший этап создания печатной формы. В первую очередь перейдем в модуль объекта внешней печатной формы, именно там мы будем программировать. Для этого в основном окне внешней обработки нажмем Действия -> Открыть модуль объекта.

В модуле объекта внешней печатной формы необходимо создать экспортную функцию Печать().

Функция Печать() Экспорт КонецФункции

Обратите внимание, что данная функция является обязательной для внешних печатных форм в конфигурациях использующих обычное приложение. Весь последующий программный код необходимый для вывода печатной формы будем писать внутри этой функции.

Инициализация основных переменных

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

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

В переменную Макет получим созданный нами макет печатной формы. Для этого используем встроенную функцию ПолучитьМакет(<ИмяМакета>).

Макет = ПолучитьМакет("Макет");

Все области макета получим в переменные. Для этого используем метод макета ПолучитьОбласть(<ИмяОбласти>) .

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

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

Все необходимые переменные инициализированы. Приступим к заполнению и выводу областей макета в табличный документ. В первую очередь заполним заголовок печатной формы, для этого нам необходимо передать в параметр ТекстЗаголовка , который мы создали в макете, нужный нам текст. Для заполнения значений параметров у области макета существует специальная коллекция, которая так и называется — Параметры. Из которой через «.» можно получить любой параметр. В текст заголовка передадим текст: «Печатная форма», а также номер документа.

ОбластьШапки.Параметры.ТекстЗаголовка = "Печатная форма "+СсылкаНаОбъект.Номер;

Остальные параметры шапки заполним подобным образом, все необходимые для них значения получим из реквизита СсылкаНаОбъект , в котором содержится ссылка на печатаемый документ.

ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация; ОбластьШапки.Параметры.Контрагент = СсылкаНаОбъект.Контрагент; ОбластьШапки.Параметры.ДатаПоступления = СсылкаНаОбъект.Дата; ОбластьШапки.Параметры.ДоговорКонтрагента = СсылкаНаОбъект.ДоговорКонтрагента;

Все параметры шапки заполнены, выведем ее в созданный нами табличный документ, для этого используем метод Вывести(<Область>) .

ТабДок.Вывести(ОбластьШапки);

Написание запроса для печатной форы

Займемся заполнением и выводом области Данные . Создание печатной формы 1С подразумевает и написание запроса, нам он необходим для получения данных табличной части Товары и цен Номенклатуры на текущую дату будем использовать Запрос . Язык запросов 1С 8 похож на SQL, а точнее практически копирует возможности его оператора SELECT, но при этом весь запрос пишется на русском языке. Поэтому если вы хотя бы отдаленно знакомы с SQL, то и язык запросов 1С 8 поймете легко.

В данной печатной форме запрос будет довольно простым и многие скажут, что можно было бы обойтись и без него, но знание языка запросов и умение его грамотно использовать — одно из главных умений программиста 1С. Запросы позволяют используя меньшие ресурсы получать сложнейшие выборки данных, а также в тексте запроса намного легче разобраться, чем в программном коде написанном без использования запроса (или с минимальным его использованием). К тому же, в 1С 8 есть очень хороший конструктор запросов, позволяющий в интерактивном режиме собирать запрос из нужных таблиц.

Создадим переменную, которая будет содержать в себе запрос.

Запрос = Новый Запрос;

Текст запроса будем составлять при помощи конструктора запросов. Для начала напишем:

Запрос.Текст = "";

Поставим курсор мышки между кавычками, нажмем правую кнопку мыши. В открывшемся контекстном меню выберем пункт Конструктор запроса, он очень поможет нам в создании печатной формы 1С. После этого откроется окно конструктора запроса, оно содержит много вкладок, но для нашего запроса понадобятся только четыре: «Таблицы и поля», «Связи», «Условия», «Объединения / Псевдонимы».

Для нашего запроса нам понадобятся две таблицы: табличная часть Товары документа Поступление товаров и услуг и срез последних на текущую дату регистра сведений Цены номенклатуры .

В левой части окна конструктора найдем столбец База данных . В нем находится дерево всех объектов метаданных, найдем нужные нам. Для этого раскроем ветку Документы и отыщем документ ПоступлениеТоваровУслуг , раскроем его и найдем табличную часть Товары , перетащим ее в столбец конструктора запросов Таблицы . Перетащить можно тремя способами: собственно перетаскиванием, двойным щелчком по таблице или выделив ее и нажав кнопку «>». Раскроем ветку РегистрыСведений и найдем там таблицу ЦеныНоменклатуры.СрезПоследних , также перетащим ее в столбец Таблицы . Этих двух таблиц достаточно для нашего запроса.

Выберем нужные нам поля из полученных таблиц. Для этого в столбце Таблицы раскроем таблицу и найдем поля: Номенклатура, Сумма, Цена, Количество и перетащим их в третий столбец конструктора — Поля . Раскроем таблицу , найдем поле Цена и тоже перетащим его в Поля .

Структура таблиц и полей нашего запроса готова, теперь займемся условиями. Нам необходимо чтобы данные табличной части Товары брались не из всех поступлений, а только из того, которое мы печатаем. Для этого наложим условие на таблицу ПоступлениеТоваровУслугТовары . Перейдем на закладку «Условия» конструктора запросов. В колонке Поля расположены выбранные нами ранее таблицы, для условия нам понадобится поле Ссылка из таблицы ПоступлениеТоваровУслугТовары, перетащим его в окно Условия.

В запросах 1С можно использовать параметры, они нужны для того чтобы передавать в запрос данные. Например, если мы хотим ограничить выборку документов каким то конкретным документом, то можно при помощи параметра передать в запрос ссылку на этот документ и использовать данный параметр в условии. Именно так мы и поступим в нашем запросе.

После того, как в окно Условия мы добавили поле Ссылка , конструктор запросов сам создаст параметр с аналогичным названием и расположит его после знака «=». Данный параметр можно переименовать, если есть желание. В тексте запроса параметры помечаются знаком «&», но в данном случае этого делать не нужно, так как подразумевается, что во второй части условия стоит параметр, это просто надо запомнить. О том как передать значение в параметр запроса 1С будет рассказано ниже.

Так как в запросе мы используем не полную таблицу цен номенклатуры, а виртуальную (срез последних в данном случае), то нам необходимо задать условия формирования этой виртуальной таблицы, в нашем случае это дата среза и условие на тип цен (должны выбираться цены имеющие строго определенный тип цен — тот который задан в документе поступления, который мы выводим на печать).

Для заполнения параметров виртуальной таблицы перейдем на закладку Таблицы и поля конструктора запроса, в колонке Таблицы выделим таблицу ЦеныНоменклатурыСрезПоследних и нажмем кнопку Параметры виртуальной таблицы , расположенную вверху. В открывшемся окне, в поле Период следует задать параметр, в который будет передаваться дата, на которую будет делаться срез цен. В нашем случае это будет текущая дата (то есть сегодня), поэтому и параметр назовем «&ТекущаяДата». В поле условия напишем условия на тип цен, его мы тоже передадим в параметре, который назовем «&ТипЦен». Получившееся условие будет выглядеть следующим образом (где ТипЦен — измерение регистра Цены номенклатуры ):

ТипЦен = &ТипЦен

Параметры виртуальной таблицы заполнены, нажмем кнопку ОК .

Теперь, когда мы ограничили выборку только нужным нам документом, создадим связи между таблицами запроса. Если этого не сделать, то цены из таблицы ЦеныНоменклатурыСрезПоследних не будут связаны с номенклатурой из поступления. Перейдем на вкладку Связи конструктора запросов. Создадим связь по полю Номенклатура между двумя нашими таблицами. Для этого нажмем кнопку Добавить , в поле Таблица 1 выберем таблицу ПоступлениеТоваровУслугТовары , а в поле Таблица 2 — ЦеныНоменклатурыСрезПоследних. В условиях связи выберем поля Номенклатура из обоих таблиц.

Также следует заметить, что в выборке запроса нам необходимо получить все строки из табчасти Товары и цены только в том случае, если таковые имеются на текущую дату по типу цен документа. Таким образом данные табчасти Товары являются обязательными, а данные среза цен нет. Поэтому в связях между этими таблицами необходимо использовать так называемое ЛЕВОЕ СОЕДИНЕНИЕ, причем левой (или обязательной) таблицей будет ПоступлениеТоваровУслугТовары , а правой (или необязательной) ЦеныНоменклатурыСрезПоследних. Для того чтобы левое соединение таблиц запроса заработало так как я описал выше необходимо поставить галочку Все после поля Таблица 1.


Запрос практически готов, осталось только немного поработать над псевдонимами полей. Перейдем на закладку Объединения / Псевдонимы и зададим псевдоним для поля ЦеныНоменклатурыСрезПоследних.Цена . Имя псевдонима будет — ЦенаНаСегодня , нужен он для того чтобы имена полей выборки запроса и имена параметров в макете печатной формы совпадали.

Работа в конструкторе запросов на этом закончена, нажмем кнопку ОК. После того, как окно конструктора закроется вы увидите, что строка с текстом запроса заполнена и имеет следующий вид:

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

Выполнение запроса

Передадим в запрос необходимые параметры, для этого воспользуемся методом запроса УстановитьПараметр(<ИмяПараметра>,<Значение>). Для получения текущей даты воспользуемся встроенной функцией ТекущаяДата() , она возвращает дату и время компьютера.

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

Выборка = Запрос.Выполнить().Выбрать();

Заполнение таблицы печатной формы

В итоге, в переменной Выборка будет содержаться выборка результатов запроса, перемещаться по ней можно по при помощи метода Следующий() , а чтобы обойти целиком понадобится цикл Пока . Конструкция получится следующая:

Пока Выборка.Следующий() Цикл КонецЦикла;

Именно в этом цикле мы будем заполнять и выводить область макета Данные . Но для начала инициализируем две переменные числового типа. В них будем собирать итоги по количеству и сумме, которые нам необходимо вывести в область Подвал .

ИтогоСумма = 0; ИтогоКоличество = 0;

Внутри цикла будем заполнять область Данные данными из текущего элемента выборки, в переменные ИтогоСумма и ИтогоКоличество добавлять значения суммы и количества, и наконец, выводить область в табличный документ при помощи уже знакомого нам метода Вывести() . Так как имена полей нашего запроса полностью совпадают с именами параметров области Данные , то для заполнения будем использовать встроенную процедуру ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>), которая копирует значения свойств <Источника> в свойства <Приемника>.

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

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

Осталось заполнить и вывести последнюю область макета — Подвал . Данные для заполнения мы уже подготовили, заполнение и вывод осуществляем по той же схеме.

ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество; ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма; ТабДок.Вывести(ОбластьПодвал);

Табличный документ полностью заполнен, осталось вывести его на экран, чтобы пользователь мог посмотреть печатную форму и при необходимости распечатать. Но в типовых конфигурациях 1С 8 за вывод внешних печатных форм отвечают процедуры специальных модулей. Поэтому достаточно вернуть из функции Печать() заполненный табличный документ.

Возврат ТабДок;

На этом этап программирования закончен и создание печатной формы 1с практически завершено. Полный текст функции Печать() здесь приводить не буду, можете посмотреть его в файле печатной формы, скачать который можно внизу статьи.

Создание печатной формы 1С. Параметры авторегистрации

При подключении внешней печатной формы к базе система автоматически не определяет для какого именно документа или справочника предназначена печатная форма, выбирать его приходится вручную. А если писал печатную форму другой человек, а вам поручено только подключить ее, то выбор может стать неоднозначным. Для того чтобы избежать таких проблем, во всех внешних печатных формах необходимо создавать макет с параметрами авторегистрации. Если он создан и правильно оформлен, то система автоматически определяет, какому документу или справочнику предназначена печатная форма.

Делается он следующим образом:

  • Во внешней обработке создаем новый макет. Называем его «Параметры_Авторегистрации» (важно не ошибиться!).
  • В первой ячейке макета пишем Документы. (или Справочники. ) и имя документа к которому необходимо подключить печатную форму.

Подключение к базе внешней печатной формы

  • Запустите 1С 8 в режиме Предприятие;
  • Перейдите в меню Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние печатные формы ;
  • Нажмите кнопку Добавить ;
  • В открывшемся окне нажмите пиктограмму Заменить файл внешней обработки ;
  • Если у вас созданы параметры авторегистрации, то соглашаемся их использовать;
  • Если у вас не созданы параметры авторегистрации, то в табличную часть Принадлежность печатной формы добавляем нужный документ или справочник;
  • Нажимаем кнопку ОК.

После этого внешняя печатная форма будет доступна в меню Печать документа Поступление товаров и услуг. Создание печатной формы 1С на этом можно считать завершенным.

Рассмотрим написание простейшей печатной формы в 1с 8.1 — 8.2 на примере конфигурации Бухгалтерия предприятия 2.0 . Допустим требуется написать внешнюю печатную форму к документу : вывести основные данные документа, а так же из табличной части Товары : номенклатуру, цену, количество и сумму.

Скачать получившийся пример можно по .

В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка ), задаем имя, создаем обязательный для внешней печатной формы реквизит СсылкаНаОбъект с типом ДокументСсылка.РеализацияТоваровУслуг .

Создание макета печатной формы

Добавляем новый макет , тип макета оставляем Табличный документ . На макете создаем три области: Шапка, Данные и Подвал . Сделать это можно выделив нужное количество строк и нажав меню Таблица->Имена->Назначить имя (Ctrl+Shift+N) .

После этого начинаем располагать в областях текст и параметры. В шапку выведем название печатной формы, номер документа и организацию , а также нарисуем границы шапки таблицы и напишем имена колонок. При создании параметра в свойствах ячейки, на закладке макет следует установить свойство Заполнение в значение Параметр .

В области Данные создадим параметры для вывода строк табличной части(Номенклатура, цена и т.д.), а в области Подвал для итогов по количеству и сумме.

Программирование

Зайдем в модуль объекта печатной формы Действия->Открыть модуль объекта .

Создадим там обязательную для печатных форм экспортную функцию Печать() .

Функция Печать() Экспорт КонецФункции

В функции создадим переменную для табличного документа , в который будет выводится печатная форма, получим макет и области макета .

ТабДок = новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет" ); ОбластьШапки = Макет.ПолучитьОбласть("Шапка" ); ОбластьДанные = Макет.ПолучитьОбласть("Данные" ); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал" );

Заполним параметры шапки и выведем ее в табличный документ .

ОбластьШапки.Параметры.ТекстЗаголовка = +СсылкаНаОбъект.Номер; ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация; ТабДок.Вывести(ОбластьШапки);

Для того чтобы получить строки табличной части Товары используем запрос.

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

В параметр запроса передаем реквизит СсылкаНаОбъект , что бы указать в условии ГДЕ , что нам нужны данные только того документа из которого выводим печатную форму. Чтобы получить выборку запроса, сначала выполняем его, а затем выбираем строки.

Выборка = Запрос.Выполнить().Выбрать();

Далее в цикле заполняем параметры области Данные для каждой строки выборки документа и выводим их в табличный документ . Также в цикле считаем итоговые значения количества и суммы . Заполнять каждый параметр в отдельности мы не будем, а используем процедуру ЗаполнитьЗначенияСвойств((<Приемник>, <Источник>) из глобального контекста , она копирует значения свойств <Источника> в свойства <Приемника> . Сопоставление производится по именам свойств. Подробнее об этом можно прочитать в синтаксис-помощнике 1С Предприятия 8 .

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

Заполним и выведем область Подвал .

ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество; ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма; ТабДок.Вывести(ОбластьПодвал);

Возвращаем заполненный табличный документ из функции Печать() .

возврат ТабДок;

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

5. Подключение печатной формы к документу

В типовых конфигурациях 1С 8 для регистрации внешних печатных форм существует справочник ВнешниеОбработки . Для подключения следует в режиме предприятия зайти в меню Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы .

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

Теперь в документе Реализация товаров и услуг появится новая печатная форма.

Авторегистрация печатной формы

Для того чтобы при подключении печатной формы не нужно было выбирать тип документа вручную можно настроить авторегистрацию . Для этого добавляем новый макет и называем его Параметры_Авторегистрации (только так) и в первой его ячейке пишем Документы.<Наименование документа> (либо Справочники.<Наименование справочника> ).

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