Создание внешней печатной формы под УП с возможностью передачи параметров (для конфигураций на БСП)

07.08.14

Учетные задачи - Печатные формы

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

Скачать файлы

Наименование Файл Версия Размер
СчетНаОплатуВнешнийДляДопСвойств.epf
.epf 14,02Kb
37
.epf 14,02Kb 37 Скачать
СчетНаОплатуВнешнийСФОРМОЙ.epf
.epf 15,77Kb
119
.epf 15,77Kb 119 Скачать

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

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

Видеоверсию данной статьи можете посмотреть тут: http://youtu.be/9JlR-2rNW6o

Поставим задачу: вывести счет на оплату покупателя внешний с дополнительным комментарием.


Первый метод.Вывод табличного документа.


Данный метод можно назвать довольно топорным, но зато быстрым и не требующим каких-то особых дополнительных движений. Мы просто получаем табличный документ счета, и выводим его на экран.

Для описания этого метода возьмем обработку СчетНаОплатуПокупателюВнешний.epf из предыдущей моей статьи. Добавим реквизит обработки: Комментарий, тип строка(100).

Добавим форму обработки, на которой разместим данный реквизит, разместим кнопку «Печать» и создадим команду формы «Печать»

Также у формы создадим параметр «ОбъектыНазначения» тип«Произвольный» (сделайте его ключевым)

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



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

&НаСервере
Функция ПечатьСерверная()

КонецФункции
&НаКлиенте
Процедура Печать(Команда)

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

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

МассивДокументов= Параметры.ОбъектыНазначения;

Получим объект обработки.

ЭтотОбъектОбработка= РеквизитФормыВЗначение("Объект");

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

Первым шагом, в функции СведенияОВнешнейОбработке() , в вызове процедуре ДобавитьКоманду исправим четвертый параметр – Использование,на «ОткрытиеФормы». Я не буду пояснять что значит данный параметр, кому непонятно можете посмотреть предыдущую статью (ссылка). Также я поменяю второй параметр, что бы удобнее было отличать формы.


ДобавитьКоманду(Команды,"Счет на оплату (внешняя печатная формас выводом формы)", 
                           "СчетНаОплатуВнешний",
       
                    "ОткрытиеФормы",
                           Ложь,
                          
"ПечатьMXL");

Теперь перейдем в процедуру Печать, сделаем функцией, и оставим только первый параметр МассивОбъектов

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


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

   
ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов,КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецФункции


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


Должен получиться следующий код:

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

   
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату(МассивОбъектов);

   
ТабДок =ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати);

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


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

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

   
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату(МассивОбъектов);

   
ОбъектыПечати =Новый СписокЗначений;
   
ОбъектыПечати.ЗагрузитьЗначения(МассивОбъектов);

   
ТабДок =ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати);
    Возврат
ТабДок;
КонецФункции

Теперь изменим макет, добавив комментарий в подвал счета.



Осталось в функции ПечатьСчетаНаОплату у соответствующей области макета соответствующему параметру присвоить реквизит обработки Комментарий.

ОбластьМакета.Параметры.Комментарий     = Комментарий;


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

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

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

&НаСервере
Функция ПечатьСерверная()
   
МассивДокументов = Параметры.ОбъектыНазначения;
   
ЭтотОбъектОбработка = РеквизитФормыВЗначение("Объект");

   
ТабДок =ЭтотОбъектОбработка.Печать(МассивДокументов);
    Возврат
ТабДок;
КонецФункции

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

&НаКлиенте
Процедура Печать(Команда)
   
ТабДок =ПечатьСерверная();
   
ТабДок.Показать();
КонецПроцедуры


Сохраняем печатную форму и добавляем в дополнительные отчеты и обработки конфигурации.

Перейдем в документ, выберем данную печатную форму.

Выйдет форма, в которой мы заполним поле комментарий.

Нажимаем печать и выходит табличный документ.

Все.

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

То изучайте вторую и третью часть этой статьи.


Второй метод. Использованиедополнительных сведений документа.

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


Для этого заходим в список счетов на оплату покупателю инажимаем кнопку дополнительные сведения

Откроется форма Дополнительных сведений, пока она пустая,т.к. нет ни каких сведений привязанных к данному документу.

Что бы создать их заходим в Все действия – Изменить составдополнительных сведений.

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

Пишем наименование КомментарийДополнительный, тип значениявыбираем строка. И записываем новое дополнительное сведение.



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




Теперь нам осталось узнать под каким именем данноедополнительное сведение сохранилось в плане видов характеристик «Дополнительные реквизиты и сведения».

Зайдем в него через меню «Все функции».


Название выделенное на рисунке и есть полное название вновьсозданного дополнительного сведения «КомментарийДополнительный (Счет на оплатупокупателю)». Запомните его илисохраните куда-нибудь.

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

Как и в предыдущей части, за основу мы будем брать обработкуиз моей предыдущей статьи.

Исправим в процедуре сведения СведенияОВнешнейОбработке() наименование параметра регистрации и представление команды, что бы можно былоотличить нашу новую обработку.

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

   
ПараметрыРегистрации = Новый Структура;
   
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
   
ПараметрыРегистрации.Вставить("Назначение",ПолучитьНазначениеОбработки());
   
ПараметрыРегистрации.Вставить("Наименование", "Счет на оплату ВНЕШНИЙДОП СВЕДЕНИЯ");
   
ПараметрыРегистрации.Вставить("Версия", "1.0");
   
ПараметрыРегистрации.Вставить("Информация", "Счет на оплату (внешняяпечатная форма)");
   
ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);

   
Команды =ПолучитьТаблицуКоманд();

   
ДобавитьКоманду(Команды,"Счет на оплату (внешняя печатная формас исп. доп. сведений)",
                          
"СчетНаОплатуВнешний",
                          
"ВызовСерверногоМетода",
                           Ложь,
                          
"ПечатьMXL");

   
ПараметрыРегистрации.Вставить("Команды",Команды);
    Возврат
ПараметрыРегистрации;

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

Теперь создадим функцию, которая получает по ссылке надокумент, и по ссылке на доп сведение значения. Кто не знает, поясню, чтозначения доп сведений в БСП хранятся в регистре сведений «ДополнительныеСведения»




Где в измерении Объект хранится ссылка на документ, визмерении Свойство – ссылка на план видов характеристик Дополнительные сведенияи реквизиты, а в ресурсе Значение – значение данного сведения для данногодокумента.

Посмотрите на состав регистра в нашем случае.



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

Функция ПолучитьДопСведения(Знач МассивДокументов, Знач МассивДопСведений)

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

    Возврат
запрос.Выполнить().Выгрузить();

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

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

МассивДопСведений= Новый Массив;

МассивДопСведений.Добавить(ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КомментарийДополнительный (Счет наоплату покупателю)

ТаблицаДопСвойств = ПолучитьДопСведения(МассивОбъектов,МассивДопСведений);

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

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

Функция ПечатьСчетаНаОплату(СведенияСчетаНаОплату, ОбъектыПечати,ТаблицаДопСвойств, СПечатью = Ложь) Экспорт

.............................................................................

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

Теперь добавим в макет новый параметр «Комментарий»


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

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

ОбластьМакета.Параметры.ФИОРуководителя = СведенияОДокументе.РуководительФИО;
ОбластьМакета.Параметры.ФИОБухгалтера   = СведенияОДокументе.ГлавныйБухгалтерФИО;
//Получим значение допсвойство для данного документа  внесем изменения в этот участок кода
//конецизменений
ЗаполнитьЗначенияСвойств(ОбластьМакета.Параметры, СведенияОДокументе);


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

//Получимзначение доп свойства для данного документа

ДопСведение =ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КомментарийДополнительный (Счет наоплату покупателю)");
//

После этого создаем структуру с полями Документ иДопСведение, в которую вставим ссылку на наш документ и ссылку на найденноедополнительное сведение.

НоваяСтруктура= Новый Структура;
НоваяСтруктура.Вставить("Документ",СведенияОДокументе.Документ);
НоваяСтруктура.Вставить("ДопСведение",ДопСведение);

Ищем в таблице значений ТаблицаДопСвойств строки по данномуотбору.

МассивЗначения= ТаблицаДопСвойств.НайтиСтроки(НоваяСтруктура);

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

Если МассивЗначения.Количество() <> 0 тогда

   
ЗначениеДопСведения = МассивЗначения[0].Значение;

   
ОбластьМакета.Параметры.Комментарий =ЗначениеДопСведения;
КонецЕсли;

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





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

внешняя печатная форма библиотека стандартных подстистем

См. также

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 руб.

06.10.2023    7007    20    6    

37

Универсальная печать по шаблонам Word (Печать договоров из 1С БП 3, УНФ 1.6, ЗУП 3, УТ 11, КА 2, ERP 2, ДО 3)

Печатные формы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Научите вашу 1C печатать из 1С в файл Word (Например: трудовые договоры, договоры с контрагентами, спецификации, дополнительные соглашения, приказы, коммерческие предложения, акты, накладные, карточки партнера или любого справочника и многие другие). Универсальная печать предназначена для формирования печатных форм на основе шаблонов в формате Word из любой конфигурации 1С. С помощью данного инструмента можно самостоятельно заполнить шаблон реквизитами справочника или документа 1С и сформировать печатные формы на основании ссылки на любой объект.

5400 руб.

08.10.2019    42433    142    88    

133

УТ 11, КА 2, ERP 2: Настраиваемые под каждую организацию печать и подпись ответственных лиц в печатных формах (ТОРГ-12, Счёт-фактура, УПД, УКД, Заказ клиента, Акт сверки, М-15 и др.)

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Оперативный учет Управляемые формы 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

12000 руб.

13.03.2018    56266    176    76    

112

Печатные формы КС-2 и КС-3 в "1С:Бухгалтерия 3.0"

Печатные формы Производство готовой продукции (работ, услуг) Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Строительство Россия Бухгалтерский учет Платные (руб)

Откройте для себя заполнение КС-2 и КС-3 в "1С:Бухгалтерия 3.0". Вы получаете удобство, скорость и систему, чтобы заполнить, распечатать и сохранить формы КС-2 и КС-3 из документов "Оказание производственных услуг" или "Реализация товаров услуг". Вы можете заполнить дополнительную информацию о материалах из документов "Требование-накладная" и указать сведения, которые не предусмотрены типовой конфигурацией "1С:Бухгалтерия 3.0". Так же доступно множество настроек для формирования КС-2 и КС-3.

3240 руб.

13.02.2019    87636    385    44    

366

Печать актов МХ-1, МХ-3 в 1С:Бухгалтерия 3.0

Печатные формы Логистика, склад и ТМЦ Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обработки для "1С:Бухгалтерия 3.0", которые формируют акты МХ-1 и МХ-3 для документов "ПоступлениеТоваровУслуг", "Реализация товаров услуг", "Возврат товаров поставщику", "Передача материалов в эксплуатацию" соответственно. Так же можно сформировать акты с факсимиле, которая загружена в 1С:Бухгалтерия 3.0.

2520 руб.

18.02.2019    60916    171    14    

138

Путевые листы (расширение)

Печатные формы Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Транспорт, автопарки, такси Бухгалтерский учет Платные (руб)

Учет путевых листов выполнен в виде расширения. Предназначен для учета путевых листов в конфигурации Бухгалтерия предприятия 3.0. и Комплексная автоматизация 2. Печатная форма: Типовая межотраслевая форма № 3. Утверждена постановлением Госкомстата России от 28.11.97 № 78. Типовая межотраслевая форма № 4-П от 18.09.2008 г. N 152 с учетом изменений указанных в Приказе Министерства транспорта Российской Федерации №368 от 11 сентября 2020 г. №368, Типовая межотраслевая форма № ЭСМ-7, и др. ЭСМ-2, 4-С, 3 спец., 6 спец., ПЛ для Автомобильного крана. .

2000 руб.

14.10.2019    36273    221    214    

136
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Natali_77 17.01.15 13:27 Сейчас в теме
2. todos 11.06.15 14:25 Сейчас в теме
Спасибо! Очень помогло
3. dd74 19.01.16 09:24 Сейчас в теме
При запуске выдает ошибку
: Переменная не определена (ПечатьТорговыхДокументов)
4. ea_len 22 29.02.16 22:41 Сейчас в теме
Спасибо огромное! Появилась ясность, все получилось.
5. avdik 25.11.16 15:20 Сейчас в теме
Большое-пребольшое спасибо. Получилось.
Только немного переделала (наверное "топорно").т.к. при добавлении внешней печатной формы в польз режиме выводилось сообщение о несоответствии текущей версии.


6. altair057 26.01.18 15:58 Сейчас в теме
(5) Подскажите пожалуйста, а как вы исправили проблему несоответствия версии ?
7. raa3738 5 23.03.18 13:24 Сейчас в теме
Вот такую ошибку дает:

{ВнешняяОбработка.ЗагрузкаСОтбором.Форма.Форма.Форма(19,17)}: Неопознанный оператор
ТабДок.Показать<<?>>; (Проверка: Сервер)
{ВнешняяОбработка.ЗагрузкаСОтбором.Форма.Форма.Форма(19,17)}: Неопознанный оператор
ТабДок.Показать<<?>>; (Проверка: Тонкий клиент)

в строке видимо ошибка (выделено жирным):

&НаКлиенте
Процедура Печать(Команда)

ТабДок = ПечатьНаСервере();
ТабДок.Показать;

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


А в инструкции нет ошибки, да и на видео тоже
8. avdik 24.03.18 20:11 Сейчас в теме
9. skyvixen 32 13.01.20 13:25 Сейчас в теме
Когда задался подобным вопросом, очень помог материал: https://expert.chistov.pro/public/502742/
user796327; +1 Ответить
10. user796327 25.03.20 17:16 Сейчас в теме
(9)Спасибо за ссылку! Отличная статья чтобы разобраться с такой задачей
11. IlnasZiiatov 14.08.20 12:07 Сейчас в теме
Спасибо большое, очень полезно при начале изучения программирования!
12. yup 2 08.01.21 12:51 Сейчас в теме
Спасибо за статью! А как сделать, чтобы на печать выводились все доп. сведения, записанные в документе, без отбора по наименованию?
13. Amara 16.03.21 11:42 Сейчас в теме
Большое спасибо за статью! Везде пишут упрощенный вариант создания ВПФ, но в жизни очень часто требуется реализовать через ВПФ именно не стандартный функционал.
Оставьте свое сообщение