helpf.pro
Регистрация
 +7 
Распечатать

Пример создания внешней печатной формы для управляемого приложения

Пример создания внешней печатной формы АКТа для Бухгалтерии 3.0

1. В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя.

2. В модуле обработки пишем код. Постараюсь его максимально комментировать. Главное должно быть:

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

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


		ТабДок.Вывести(ОбластьПодвал);
		
		ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
	КонецЦикла;
	
	Возврат ТабДок;
КонецФункции

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


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


#Область СведенияОВнешнейОбработке
// Сервисная экспортная функция. Вызывается в основной программе при регистрации обработки в информационной базе
// Возвращает структуру с параметрами регистрации
//
// Возвращаемое значение:
//		Структура с полями:
//			Вид - строка, вид обработки, один из возможных: "ДополнительнаяОбработка", "ДополнительныйОтчет", 
//					"ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
//			Назначение - Массив строк имен объектов метаданных в формате: 
//					<ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. 
//					Например, "Документ.СчетЗаказ" или "Справочник.*". Параметр имеет смысл только для назначаемых обработок, для глобальных может не задаваться.
//			Наименование - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
//			Информация  - строка - Краткая информация или описание по обработке.
//			Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
//			БезопасныйРежим - булево - Принимает значение Истина или Ложь, в зависимости от того, требуется ли устанавливать или отключать безопасный режим 
//							исполнения обработок. Если истина, обработка будет запущена в безопасном режиме. 
//
Функция СведенияОВнешнейОбработке() Экспорт
	//Инициализируем структуру с параметрами регистрации    	
	ПараметрыРегистрации = Новый Структура;
	// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
	// Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
	ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
	
	МассивНазначений = Новый Массив;
	// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
	// Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
	// которые поддерживают механизм ВПФ
	МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг"); //Указываем документ к которому делаем внешнюю печ. форму   		
	ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
	
	ПараметрыРегистрации.Вставить("Наименование", "АКТ (Внешний)"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
	ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);  // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
	ПараметрыРегистрации.Вставить("Версия", "1.0");   // эти два параметра играют больше информационную роль,
	ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма"); // т.е. это то, что будет видеть пользователь в информации к обработке
	
	// Создадим таблицу команд (подробнее смотрим ниже)
	ТаблицаКоманд = ПолучитьТаблицуКоманд();
	ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ", "АКТПечатьВнешняя", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
	ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Иванов)", "АКТПечатьВнешняяИван", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
	ДобавитьКоманду(ТаблицаКоманд, "Внешний: АКТ (Петров)", "АКТПечатьВнешняяПетр", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
	
	ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
	
	Возврат ПараметрыРегистрации; 	
КонецФункции
#КонецОбласти


#Область Вспомогательное
// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ РЕГИСТРАЦИИ ОБРАБОТКИ


// Формирует структуру с параметрами регистрации регистрации обработки в информационной базе
//
// Параметры:
//	ОбъектыНазначенияФормы - Массив - Массив строк имен объектов метаданных в формате: 
//					<ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]. 
//					или строка с именем объекта метаданных 
//	НаименованиеОбработки - строка - Наименование обработки, которым будет заполнено наименование элемента справочника по умолчанию.
//							Необязательно, по умолчанию синоним или представление объекта
//	Информация  - строка - Краткая информация или описание обработки.
//							Необязательно, по умолчанию комментарий объекта
//	Версия - строка - Версия обработки в формате “<старший номер>.<младший номер>” используется при загрузке обработок в информационную базу.
//
//
// Возвращаемое значение:
//		Структура
//
Функция ПолучитьПараметрыРегистрации(ОбъектыНазначенияФормы = Неопределено, НаименованиеОбработки = "", Информация = "", Версия = "1.0")


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


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


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


// Формирует таблицу значений с командами печати
//	
// Возвращаемое значение:
//		ТаблицаЗначений
//
Функция ПолучитьТаблицуКоманд()


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


	Возврат Команды; 
КонецФункции


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

#КонецОбласти   

3. Добавляем макет вывода печатной формы:

4. Сохраняем и добавляем в конфигурацию:

Подключается через Администрирование - Печатные формы, отчеты и обработки:

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

Скачать Шаблон внешней печатной формы для управляемого приложения

Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 167226
 +7 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1С Предприятие что это? 13
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
Посмотреть все результаты поиска похожих
Комментарии
rama87
14.01.2019 15:49Комментарий: 2
rama87

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

EMigachev
16.09.2015 17:22Комментарий: 1
EMigachev

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

Код 1C v 8.3
 &НаКлиенте
Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт
	СсылкаНаОбъект = ОбъектыНазначения[0];
	НазваниеФайла = ПолучитьИмяВременногоФайла("doc");
	Макет = ВернутьМакет(ОбъектыНазначения);
	Макет.Записать(НазваниеФайла);
	mWordObject = Новый COMObject("Word.Application");
	Попытка
	WordDoc = mWordObject.Documents.Add(НазваниеФайла);
	Исключение
	КонецПопытки;

	///// Свой код  ////

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

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