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

21.09.21

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

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

Файлы

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

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

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

 

Готовое решение

ККТ-ОНЛАЙН 54-ФЗ: Обработка для работы онлайн касс АТОЛ, ШТРИХ, VIKI PRINT и т.д. МАРКИРОВКА (Разрешит. режим) + ЭКВАЙРИНГ + БЕСПЛАТНЫЙ ДЕМО

Универсальная обработка для фискальных регистраторов! Подключайте любые ККТ, включая Веб сервер АТОЛ, без обновления 1С и работайте с несколькими кассами одновременно. Тестовый доступ — бесплатно!


Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

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

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

15500 руб.

02.09.2020    206167    1131    410    

1029

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

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

8400 руб.

20.08.2024    36971    211    111    

199

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

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

16000 руб.

10.11.2023    16834    73    39    

89

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    24429    65    28    

93

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

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

9500 руб.

17.05.2024    35413    128    53    

170

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    2052    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

6000 руб.

07.02.2018    107857    249    100    

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

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

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

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

И если брать произвольные запрашиваемые параметры, я пока не вникал, но на очереди стоит, вариант когда перед печатью идёт запрос каких либо параметров, которые можно использовать в запросе, как это сделать не подскажу.
3. baracuda 2 15.04.22 09:12 Сейчас в теме
(2) Если не силен в 1С то как вы оформили такую добротную обработку)
4. vPikalov 22 22.11.22 21:30 Сейчас в теме
(3) люблю программирование и решить задачу бывает приносит удовольствие, очаг бомбит, но и приносит удовольствие =)
5. Raskad 11 07.12.22 17:56 Сейчас в теме
А как в данном случае проверить помещается область или нет? ПроверитьВывод() здесь же уже не катит....
9. ruslanb 08.08.25 13:04 Сейчас в теме
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 и ЗУП тоже пробовал
Оставьте свое сообщение