Создаем расширение для КА 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 Область.Заголовок}



Подготовим документы в "Ворде", расставив в тексте договора нужные параметры
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день