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

21.09.21

Разработка - Инструментарий разработчика

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

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

Наименование Файл Версия Размер
Печать Документа в *.doc
.epf 25,54Kb
58
.epf 1.0.0 25,54Kb 58 Скачать

Тестировалось в 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. Получившийся документ

 

ERP *.doc word печать форм БСП

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122137    670    389    

714

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7288    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3531    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177744    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99345    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18109    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28108    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    23601    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. AnryMc 849 30.09.21 15:04 Сейчас в теме
Добрый день!

Не могу сообразить как вывести без "привязанных" документов...

Т.е. при открытии сделать произвольный запрос и вывести форму в Ворд, типа "Внешний отчет" -
2. vPikalov 16 01.10.21 23:03 Сейчас в теме
(1) Я не силён в 1С. Поищите в других статьях.
Но моё виденье: Нужно в любом случае указать место, т.е. документ/отчет/т.п. в котором можно будет выпустить на печать.
А привязка идёт в данном случае к документу в котором вызывается, либо через список документов через:
ЗапросПоДокументам = Новый Запрос;
ЗапросПоДокументам.УстановитьПараметр("МассивОбъектов", МассивОбъектов); (т.е. это ссылка на текущий документ, либо список документов)

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

И если брать произвольные запрашиваемые параметры, я пока не вникал, но на очереди стоит, вариант когда перед печатью идёт запрос каких либо параметров, которые можно использовать в запросе, как это сделать не подскажу.
3. baracuda 2 15.04.22 09:12 Сейчас в теме
(2) Если не силен в 1С то как вы оформили такую добротную обработку)
4. vPikalov 16 22.11.22 21:30 Сейчас в теме
(3) люблю программирование и решить задачу бывает приносит удовольствие, очаг бомбит, но и приносит удовольствие =)
5. Raskad 10 07.12.22 17:56 Сейчас в теме
А как в данном случае проверить помещается область или нет? ПроверитьВывод() здесь же уже не катит....
6. lexvv 13.12.22 17:16 Сейчас в теме
В документ вставлен разрыв раздела, для очистки колонтитулов на 2-х последних листах. Как в этом случае описывать области. При обычном выводе затирает везде колонтитулы.
8. Tylen 09.02.23 20:39 Сейчас в теме
7. SuperEmboser 12 22.12.22 21:56 Сейчас в теме
сначала сделал все как в статье - не работает, потом скачал все таки обработку, думал мало ли.. не работает хоть как.. УТ 11.4.13.282 и ЗУП тоже пробовал
Оставьте свое сообщение