FAQ: Как создать внешнюю печатную форму "с нуля"?

Тема в разделе "Статьи", создана пользователем BabySG, 20 янв 2012.

Статус темы:
Закрыта.
  1. TopicStarter Overlay
    BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Как создать внешнюю печатную форму с нуля? 1С 8.0/8.1
    _______________________________________________________

    Для разработки ВПФ в управляемом режиме (конфигурации на основе БСП, например: УТ11, УНФ) - читайте Технология создания внешних печатных форм, обработок, отчетов для управляемого режима 8.2.

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

    Итак, предположим, что некоторый контрагент (назовём его Вася) очень просит нас о особой печатной форме для документов реализации на его имя. Что ж - пойдём ему навстречу!

    Первым делом запустить 1С:Предприятие в режиме конфигуратора:

    [​IMG]

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

    [​IMG]

    Итак, мы подготовили заготовку печатной формы, теперь нужно запрограммировать вывод нужной нам печатной формы: нажимаем на кнопку Действие->Открыть модуль объекта

    Перед нами открылось окно програмного модуля обработки. Как вы видите - он пуст, поэтому вставим туда такой код:

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

    [​IMG]

    Осталось только проверить, как она работает:
    [​IMG]

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

    BabySG

    PS. Обсуждения, вопросы, предложения - всё в этой теме.
    Последнее редактирование модератором: 8 мар 2014
Статус темы:
Закрыта.

Поделиться этой страницей