Создаем расширение для КА 2.5 "Печать по шаблону Open XML"

1. ВасяЧ 10.03.21 10:01 Сейчас в теме
Решаем творческую задачу на предмет создания расширения конфигурации КА 2.5 для печати договора контрагента с использованием БСП и макетов в формате Open XML. А далее - для печати трудового договора. Основная задача - заполнить в одном случае реквизиты контрагента и организации, в другом случае - сотрудника и организации.

БСП версии 3.1.4 умеет работать с форматом Open XML, берет на себя реализацию процессов по распаковке файла, замене параметров и обратной запаковке. Требуется добавить кнопки печати, вставить макеты и заполнить данные для печати.

В конфигурации БП 3.0 есть чудесный механизм печати договора с контрагентом на основе HTML и поля Форматированного документа. Конфигурация "Комплексная автоматизация" такого механизма не имеет, но там есть пример разработки Справочник "Карты лояльности", где применяется макет в формате MS Word.

По условиям задачи требуется вывести на печать два вида договора:
1. Договор со 100% предоплатой.
2. Договор с отсрочкой платежа.

Начинаем веселиться.

Читаем на ИТС инструкцию по разработке в БСП 3.1.4 Главу "Печать". На всякий случай не буду прямо цитировать, а то мало ли что) Хотя такая информация ДОЛЖНА быть в свободном доступе. Итак:

1. Найти модуль УправлениеПечатьюПереопределяемый
2. В модуле найти процедуру ПриОпределенииОбъектовСКомандамиПечати
3. Убедиться, что в процедуре перечислен требуемый объект.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ВасяЧ 10.03.21 10:06 Сейчас в теме
Что же, в процедуре ПриОпределенииОбъектовСКомандамиПечати ничего нет кроме вызова УправлениеПечатьюУТСервер.ОпределитьОбъектыСКомандамиПечати(СписокОбъектов)

Ну хорошо, посмотрим, что там. Да там целый список! И даже есть нужный нам

СписокОбъектов.Добавить(Справочники.ДоговорыКонтрагентов);

Отлично, первое условие выполнено. Двигаемся дальше.
3. user633533_encantado 11 10.03.21 10:50 Сейчас в теме
(2) Естественно он там есть , у договора есть свои печатные формы.
4. ВасяЧ 10.03.21 11:25 Сейчас в теме
Теперь нужно в МодулеМенеджера определить процедуру ДобавитьКомандыПечати

Создадим расширение конфигурации.

Хотелось бы в расширении работать только с модулями, не тащить в расширение формы.

В МодулеМенеджера уже есть процедура ДобавитьКомандыПечати, в которой ничего нет кроме вызова

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	ДоговорыКонтрагентовЛокализация.ДобавитьКомандыПечати(КомандыПечати);
КонецПроцедуры


а в процедуре ДоговорыКонтрагентовЛокализация.ДобавитьКомандыПечати(КомандыПечати); нет вообще ничего.

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
КонецПроцедуры


Хмм. Это типа так надо, да? Хорошо, добавляем в расширение наши команды печати:

Посмотрим в БСП "Счета на оплату покупателю", там как раз применяется куча разных способов печати, причем есть способ с Open XML, который сам определяет, запускать Word или OpenOffice. Круто же?


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


Отлично, на форме договора по волшбству появилась кнопка "Печать" с картинкой принтера и появляется меню с двумя пунктами "'Договор поставки. Предоплата" и Договор поставки. Отсрочка платежа.
5. ВасяЧ 10.03.21 11:27 Сейчас в теме
(3) Хотелось бы более раскрытое замечание, если возможно. Что естественно, если нет команд печати?
6. user633533_encantado 11 10.03.21 11:57 Сейчас в теме
(5) Если для объекта предусмотрено добавление печатных форма, а для КА 2.5 это так, то естественно что он там будет.

Вы сейчас описываете очевидные вещи для тех кто знаком с механизмом печати в БСП, зачем это все ?
7. ВасяЧ 10.03.21 12:06 Сейчас в теме
Для тех, кто не знаком с БСП. Чтобы те, кто знаком помогли понять очевидные им вещи тем, для кого эти вещи неочевидны.
8. ВасяЧ 10.03.21 12:21 Сейчас в теме
Теперь нужно разместить в расширении макеты договоров. Как пишет ИТС, при объекте, где определяется процедура печати.

Интересно, а если я захочу разместить файл макета в "Дополнительной информации" как до него потом добраться?

К имени макета СЛЕДУЕТ добавить специальный префикс, для макета Office Open XML – ПФ_DOC. А для чего так? Этот префикс как-то обрабатывается БСП? Или "так надо"? а если я не добавлю этот префикс?

Хорошо, назовем наши макеты "ПФ_DOC_ДоговорПоставкиПредоплата" и "ПФ_DOC_ДоговорПоставкиОтсрочкаПлатежа", добавим как двоичные файлы в дерево "Макеты" справочника "ДоговорыКонтрагентов" в наше расширение.

ИТС пишет, что путь к макету МОЖЕТ быть

для макетов в документах: Документ.<Имя документа>.<Имя макета>;
для макетов в обработках: Обработка.<Имя обработки>.<Имя макета>;
для общих макетов: ОбщийМакет.<Имя макета>

А как же наш справочник? Посмотрим)
9. ВасяЧ 10.03.21 14:03 Сейчас в теме
Коллеги, тем кому очевидны ответы на поставленные вопросы, не поленитесь, расскажите что думаете)
10. ВасяЧ 10.03.21 17:21 Сейчас в теме
Пути для макетов в справочнике (неужели) :

"Справочник.ДоговорыКонтрагентов.ПФ_DOC_ДоговорПоставкиПредоплата"
"Справочник.ДоговорыКонтрагентов.ПФ_DOC_ДоговорПоставкиОтсрочкаПлатежа".

в кавычках, потому что это тип Строка.

А каким должен быть макет?

Это документ в формате DOCX , где поля требующие подстановки данных из системы выделены фигурными скобками c тэгом v8 внутри скобок:

также можно выделять области в документе, например:

начало области "Заголовок": {v8 Область.Заголовок}

маркер "Контрагент": {v8 НаименованиеКонтрагента},
маркер "№ договора" {v8 НомерДоговора} и т.д.

конец области "Заголовок": {/v8 Область.Заголовок}



Подготовим документы в "Ворде", расставив в тексте договора нужные параметры
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот