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

21.09.21

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

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

Файлы

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

Наименование Скачано Купить файл
Печать Документа в *.doc
.epf 25,54Kb ver:1.0.0
68 2 500 руб. Купить

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Тестировалось в 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С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

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

24900 руб.

20.08.2024    75194    379    170    

325

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

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

10000 руб.

02.09.2020    268484    1494    421    

1179

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

22570 руб.

06.10.2023    40194    113    54    

126

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    63868    130    36    

137

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    8955    38    46    

52

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

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

17000 руб.

10.11.2023    26440    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2636    6    0    

21

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    54793    187    63    

220
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AnryMc 851 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 14 22.12.22 21:56 Сейчас в теме
сначала сделал все как в статье - не работает, потом скачал все таки обработку, думал мало ли.. не работает хоть как.. УТ 11.4.13.282 и ЗУП тоже пробовал
Для отправки сообщения требуется регистрация/авторизация