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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ИтогоСумма = ИтогоСумма + Выборка.Сумма;
    ИтогоКоличество = ИтогоКоличество + Выборка.Количество;

    ТабДок.Вывести(ОбластьДанные);
КонецЦикла;

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

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

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

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

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

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

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

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

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

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

Скачать(DepositFiles): ПечатнаяФорма

WMmail.ru - сервис почтовых рассылок

Все про 1C и автоматизацию бизнеса

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

  1. Уведомление: Отладка печатной формы | Программирование на 1с 8

  2. Добрый день,
    я начинаю учится конфигурировать в 1С 8.2 , в процесе поиска учебных пособий — нашел вашу статью. По правде сказать, очень полезный материал для начинающих. Мне понравился. Я выполнил все действия, согласно изложенного у вас, но при вызове печатной формы в режиме пользователя 1 С вижу такое служебное сообщение:

    «Не удалось сформировать внешнюю печатную форму!
    Значение не является значением объектного типа (Вывести)»

    Вот код, который я у вас перенял:

    Функция Печать ()Экспорт
    ТабДок=Новый ТабличныйДокумент;
    Макет=ПолучитьМакет(«Макет»);
    ОбластьШапки = Макет.ПолучитьОбласть(«Шапка»);
    ОбластьДанные=Макет.ПолучитьОбласть(«Данные»);
    ОбластьПодвал=Макет.ПолучитьОбласть(«Подвал»);

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

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

    Запрос=Новый Запрос;
    Запрос.УстановитьПараметр(«Ссылка»,СсылкаНаОбъект);
    Запрос.Текст=»Выбрать
    |РеализацияТоваровиУслугТовары.Номенклатура,
    |РеализацияТоваровиУслугТовары.Сумма,
    |РеализацияТоваровиУслугТовары.Цена,
    |РеализацияТоваровиУслугТовары.Количество,

    |ИЗ
    |РеализацияТоваровиУслуг.Товары КАК РеализацияТоваровиУслугТовары
    |ГДЕ
    |РеализацияТоваровиУслугТовары.Ссылка=&Ссылка»;

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

    //http://1cblogs.ru/1c-prostye-primery-razrabotki/sozdanie-vneshnej-pechatnoj-formy/

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

    ИтогоСумма=ИтогоСумма+Выборка.Сумма;
    ИтогоКоличество=ИтогоКоличество+Выборка.Количество();

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

    КонецЦикла;

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

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

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

    Помогите найти ошибку.

    Спасибо.

  3. Заголовок окна сформированного в итоге табличного документа задается как имя объекта, к которому привязана форма. В этом примере — «Реализация товаров и услуг № 592 от 14 сентября 2013 г.».
    Можно ли как-то программно менять этот заголовок?

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

  4. Хорошая статья, а как сделать чтобы характеристика товаров и услуги также выводились в форме?

  5. | РеализацияТоваровУслугТовары.НомерСтроки,
    | РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное КАК Номенклатура,
    | РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры КАК Характеристика,
    | РеализацияТоваровУслугТовары.Количество,
    | РеализацияТоваровУслугТовары.Сумма,
    | РеализацияТоваровУслугТовары.Цена

    Характеристика, выводится в о дельной ячейке а как выводить скажем так -Номенклатуры (ХарактеристикаНоменклатуры) ??

Добавить комментарий

Ваш e-mail не будет опубликован.

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>