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

21.09.21

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Печать Документа в *.doc
.epf 25,54Kb ver:1.0.0
62
62 Скачать (1 SM) Купить за 1 850 руб.

Тестировалось в 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 печать форм БСП

См. также

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

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

12000 руб.

02.09.2020    169256    937    403    

905

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    12582    99    42    

101

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26521    90    48    

134

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

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

22200 руб.

06.10.2023    16817    41    15    

75

SALE! %

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

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

4800 3840 руб.

14.01.2013    190540    1150    0    

918

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

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

15000 руб.

10.11.2023    11390    40    27    

66

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    768    2    0    

4

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

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

5000 руб.

07.02.2018    103924    244    100    

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

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

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

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

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