Каталог решений - Легкое добавление формы печати через *.docx Word в документы, 1С:ERP

Легкое добавление формы печати через *.docx Word в документы, 1С:ERP

Легкое добавление формы печати через *.docx Word в документы, 1С:ERP

В наличии

Очень лаконичная, простая, короткая обработка позволяет легко добавить печать через использование Word *.doc.

Категория:

Описание

Тестировалось в 1С:ERP Управление предприятием 2 (2.4.13.227) 1С:Предприятие 8.3 (8.3.18.1289)

Как я понимаю, в основе БСП и работать много где должно.

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

1. Создаём шаблон в Word *.docx, при этом колонтитулы сами по себе являются областями, вся другая информация должна быть помещена в области, и заменяемые части вставляем в нужные места. В коде нужно будет указать тип области 

  • СтрокаТаблицы – используется для вывода множества строк таблицы;
  • Список – используется для вывода множества строк маркированного списка;
  • Общая – используется для вывода простых областей;
  • ВерхнийКолонтитул – используется для вывода верхнего колонтитула;
  • НижнийКолонтитул – используется для вывода нижнего колонтитула;
  • ВерхнийТитульныйКолонтитул – используется для вывода верхнего титульного колонтитула;
  • НижнийТитульныйКолонтитул – используется для вывода нижнего титульного колонтитула;
  • ВерхнийЧетныйКолонтитул – используется для вывода верхнего колонтитула четных страниц;
  • НижнийЧетныйКолонтитул – используется для вывода нижнего колонтитула четных страниц;
{v8 Область.НаименованиеОбласти}
{v8 НаименованиеЗаменяемойПеременной}
{/v8 Область.НаименованиеОбласти}
	// Создаем структуру областей формируемой печатной формы OpenXМL
	ОписаниеОбластей = Новый Структура;
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ВерхнийКолонтитул", "ВерхнийКолонтитул");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Шапка", "Общая");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "СтрокаТаблицы", "СтрокаТаблицы");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "НижнийКолонтитул", "НижнийКолонтитул");

2. Загружаем документ в макет, двоичные данные

 

 

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

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

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

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование)
	НоваяКоманда = ТаблицаКоманд.Добавить();
	НоваяКоманда.Представление = Представление;
	НоваяКоманда.Идентификатор = Идентификатор;
	НоваяКоманда.Использование = Использование;
КонецПроцедуры

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт  		
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ДокументWordName"); //Идентификатор формы в команде
	Если ПечатнаяФорма <> Неопределено Тогда
	    ОфисныеДокументы = НапечататьАктСписания(МассивОбъектов);
		ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
		ПечатнаяФорма.СинонимМакета    = НСтр("ru = 'Печать документа Word'");
		ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
	КонецЕсли;  		
КонецПроцедуры

Функция НапечататьАктСписания(МассивОбъектов) Экспорт
	//Запрашиваем документы для печати
	ЗапросПоДокументам = Новый Запрос;
	ЗапросПоДокументам.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	ЗапросПоДокументам.Текст =
	"ВЫБРАТЬ
	|	Документ.Ссылка КАК Ссылка,
	|	Документ.Номер КАК Номер,
	|	Документ.Дата КАК Дата,
	|	Документ.Товары.(
	|		Номенклатура.НаименованиеПолное КАК Наименование,
	|		Характеристика.НаименованиеПолное КАК Характеристика,
	|		НомерСтроки КАК НомерСтроки,
	|		Количество КАК Количество,
	|	) КАК Товары
	|ИЗ
	|	Документ.ВнутреннееПотреблениеТоваров КАК Документ
	|ГДЕ
	|	Документ.Ссылка В(&МассивОбъектов)
	|УПОРЯДОЧИТЬ ПО
	|	Дата,
	|	Ссылка,
	|	НомерСтроки";	
	
	// Создаем пустое соответствие для размещения печатных форм OpenXМL – результат функции
	ОфисныеДокументы = Новый Соответствие;	
	//Находим макет в обаботчике
	МакетДокумента = ЭтотОбъект.ПолучитьМакет("ПФ_DOC_ПечатьДокументWord"); // Наименование макета	
	
	// Создаем структуру областей формируемой печатной формы OpenXМL
	ОписаниеОбластей = Новый Структура;
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ВерхнийКолонтитул", "ВерхнийКолонтитул");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Шапка", "Общая");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "СтрокаТаблицы", "СтрокаТаблицы");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "НижнийКолонтитул", "НижнийКолонтитул");
	
	//Вышрузка документов
	ВыборкаДокументы = ЗапросПоДокументам.Выполнить().Выбрать();
	Пока ВыборкаДокументы.Следующий() Цикл
		ОбщиеДанные = Новый Структура ("Дата, Номер");
		ОбщиеДанные.Дата = Формат(ВыборкаДокументы.Дата, "ДФ='''«''dd''»'' MMMM yyyy ''г.'''");   
		ОбщиеДанные.Номер = ВыборкаДокументы.Номер;
	

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

		//Печать колонтитула с подстановкой данных
		Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["НижнийКолонтитул"]);	
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ОбщиеДанные);

		// Помещаем сформированную печатную форму в соответствие ОфисныеДокументы
		// Наименоние формировать желательно с изменяющимся параметром
		АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма);
		ОфисныеДокументы.Вставить(АдресХранилищаПечатнойФормы, "ДокументWordName " + ВыборкаДокументы.Номер);
		УправлениеПечатью.ОчиститьСсылки(ПечатнаяФорма);
		УправлениеПечатью.ОчиститьСсылки(Макет);
	КонецЦикла;
	Возврат ОфисныеДокументы;
	
КонецФункции;

4. Добавляем наш обработчик и радуемся легко печати. В документах при выборе печати появляется наш вариант

 

 

5. Получившийся документ

 

has been added to your cart:
Оформление заказа