Доработать типовую печатную форму через Расширение

1. denis83 12 03.07.20 11:35 Сейчас в теме
Возможно ли, например, в типовой макет Акт сверки, добавить через Расширение свой Подвал с данными?
Чтобы макет остался на поддержке, без выноса его во внешние печатные формы.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. serg33rus 32 04.07.20 16:06 Сейчас в теме
(1) А о какой конфигурации речь идет? В большинстве случаев проще и правильней свою внешнюю форму подключить. Правда придется переделывать какждый раз когда смениться форма в типовой. Но Акт сверки - это не та форма которая меняется часто.
2. oleg-x 22 03.07.20 12:12 Сейчас в теме
Зависит от того как формируется печатная форма, если там все в одной функции формируется и она возвращает табличный документ, то проще внешнюю печатную форму сделать, так как единственный способ перехватить, это заменить функцию.
trickster; alex-l19041; +2 Ответить
4. Alex_E 2369 04.07.20 16:24 Сейчас в теме
(2)
так как единственный способ перехватить, это заменить функцию.
Ойли? В расширение импортировать документ. С директивой &После в модуле менеджера документа сделать процедуру ДобавитьКомандыПечати со своим обработчиком - и ничего перехватывать не надо - в меню новый пункт и рисуем свою форму , какую хочется...)))
5. oleg-x 22 04.07.20 19:30 Сейчас в теме
(4) Вы как настоящий журналист, вырвали цитату из контекста и написали свою фигню. Нельзя изменить функцию (до или после), её можно только заменить, а вот процедуру можно. А если формирование идет в одной функции (что очень часто), то какой смысл делать расширение?
Поэтому и написано, что зависит от того как написана формирование печатной формы.
И вопрос, чем лучше делать расширение со своей печатной формой или же просто написать внешнюю печатную форму? В принципе если лень писать, то можно взять готовую и подправить как требуется.
6. Alex_E 2369 04.07.20 20:00 Сейчас в теме
(5)
Вы как настоящий журналист, вырвали цитату из контекста и написали свою фигню.
я написал много всякой фигни, можно даже тут посмотреть))))
Про нельзя До (&Перед) или &После функцию использовать (просветите, кстати попутно уж, раз так случилось, где запрещено &Перед/После для функций),так в этом конкретном случае и нужны процедуры из БСП
&После ("ДобавитьКомандыПечати")
Процедура _ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// Товарная накладная (ТОРГ-12) с услугами
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "ТОРГ12";
	КомандаПечати.Представление = НСтр("ru = 'Товарная накладная (ТОРГ-12) <свойвариант>'");
	КомандаПечати.Обработчик    = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
	КомандаПечати.СписокФорм    = "ФормаСписка,ФормаВыбора,ФормаДокументаОбщая,ФормаДокументаТовары";
	КомандаПечати.Порядок = 5;
	
	//итд
	
	
КонецПроцедуры

&После ("Печать")
Процедура _Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ТОРГ12") Тогда
.......
Показать


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

ЗЫ без обид, просто не мог не ответить.....опять же гляишь про расширение чего новое узнаю...
7. oleg-x 22 04.07.20 20:16 Сейчас в теме
Перед и после это можно процедуру перехватить, а если функция, то можно только вместо. Читал как то, что можно будет часть кода заменить в расширение из стандартной процедуры, но это уже в новых версиях платформы будет или уже сделали.
Вопрос, зачем в расширение добавлять свою команду печати, если все равно придется писать свою печатную форму? Не проще внешнюю печатную форму сделать?
9. Alex_E 2369 04.07.20 20:25 Сейчас в теме
(7)
Вопрос, зачем в расширение добавлять свою команду печати,
- например если "нужной" клиенту печатной формы в документе или хочется в меню Печать вывести её в конкретной строке - например в первой
(7)
если все равно придется писать свою печатную форму?
- тут не совсем корректно сказано - "придётся писать" писать придётся что внешнюю, что встроенную, но кода в расширении может понадобится совсем чуть чуть, а для ВПФ таки практически всегда больше. Плюс отладка в расширении гораздо комфортней, чем в ВПФ.
(7)
Не проще внешнюю печатную форму сделать?
- не, не проще, я много лет использовал и использую ВПФ, но с появлением и, что особенно важно, развитием расширений, ВПФ делаю всё реже и реже - в расширении проще и быстрее получается...
12. oleg-x 22 06.07.20 10:50 Сейчас в теме
(9) Разрабатывая ВПФ, нужно иметь шаблон (экономит время). В большинстве случаев достаточно скопировать стандартные процедуры и функции из типовой или обращаться к ним, если возможно.
Проблему с отладкой уже давно решили, просто надо немного заморочиться один раз.
А вообщем как делать, решает каждый сам, кто бы что не говорил, но это не так важно. Тут главное что бы заказчик был доволен и все работало, а там хоть через компоненту. Заказчика в большинстве случаев это не волнует.
8. oleg-x 22 04.07.20 20:18 Сейчас в теме
По поводу формирования всей печатной формы в одной функции примеров много. Само получение данных для формирования может быть и в отдельной процедуре/функции, но формирование табличного документа идет в одной процедуре/функции.
10. Alex_E 2369 04.07.20 20:33 Сейчас в теме
(8) Получение табличного документа практически всегда это функция, только для её вызова в раширении или ВПФ один хрен надо писать ещё много чего, и Процедура Печать в ВПФ будет всё равно...
Печатные формы в типовых конфигурациях сейчас ... с одной функцией ... примеров много...ню ню...
Или имеются ввиду бесчисленные нетленки? Так там и макет может выводиться с сеточкой (видел много раз), работает жеж))))
А вот печать в типовых сейчас с одной функцией - это ж натить надо - тут и обработки и общие модули,вот это не часто, а практически везде...или я не прав?
11. oleg-x 22 06.07.20 10:42 Сейчас в теме
(10) Про нетленки говорить незачем, там может быть все что угодно (хотя и в типовых своего хватает). А по теме, например УТ 11 акт сверки. Есть процедура "печать".
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"АктСДаннымиКонтрагента",
			НСтр("ru='Акт сверки взаимных расчетов (с задолженностью по данным контрагента)'"),
			СформироватьПечатнуюФормуАктСДаннымиКонтрагента(МассивОбъектов, ОбъектыПечати));

Вот такой код вызова формирования ТабличногоДокумента.
То есть в одной функции формируется вся печатная форма. Она может вызывать разные общие модули и прочее, но формирование идет в одной функции и возвращенный табличный документ добавляется в коллекцию, а дальше отправляется на печать.
И в принципе незачем разбивать формирование ТабличногоДокумента на части в большинстве случаев.

То есть не используется множество разный функций и процедур, куда можно было бы точечно вмешаться, работать с уже готовым документом, можно, но это уже если что то добавить в конце или начале документа или добавить элемент по определенным координатам.
Если же говорить про печать в целом, то да. В типовых это в классике выглядит так:
Есть процедура "Печать", куда передаются ссылка на документ и названия печатных форм.
Далее вызывается формирование соответствующей формы.
Далее отправляется на печать.
Но это Вы и без меня знаете, но это ни как точечно не позволяет изменить формирование, например доработать макет и при формирование подставить свой макет.
А вот печать в типовых сейчас с одной функцией - это ж натить надо - тут и обработки и общие модули,вот это не часто, а практически везде...или я не прав?

По своему Вы правы, просто все это вызывается из одной функции и единственный способ это изменить, это заменить функцию (скопировать в расширение и поправить как надо).
13. denis83 12 15.07.20 16:26 Сейчас в теме
В итоге сделал через Расширение

- Добавил в Расширение типовой макет ПФ_MXL_АктСверкиВзаимныхРасчетов

- в модуль менеджера Расширения добавил две функции:


1.
&Вместо("ВыборкаДанныхДокумента")
Функция зсп_ВыборкаДанныхДокумента(МассивОбъектов, НастройкиПечати)

тут в структуру НастройкиПечати добавил свое Значение.


2.
&Вместо("ТекстЗапросаДанныеДокумента")
Функция зсп_ТекстЗапросаДанныеДокумента(НастройкиПечати)
	
	Результат = ПродолжитьВызов(НастройкиПечати);
	
	// добавим в типовой запрос КонтактыМенеджера
	Результат = СтрЗаменить(Результат,
		"ДокументСверки.ФИОРуководителяКонтрагента КАК ФИОРуководителяКонтрагента,",
		"ДокументСверки.ФИОРуководителяКонтрагента КАК ФИОРуководителяКонтрагента," + " " + НастройкиПечати.КонтактыМенеджера + " КАК КонтактыМенеджера," );
	
	Результат = СтрЗаменить(Результат,
		"МАКСИМУМ(ДолжностьРуководителяКонтрагента),",
		"МАКСИМУМ(ДолжностьРуководителяКонтрагента)," + " МАКСИМУМ(КонтактыМенеджера),");
	
	Возврат Результат;
	
КонецФункции
Показать


тут сделал замену запроса, добавил свое


- и на макете добавил Параметр КонтактыМенеджера
Оставьте свое сообщение

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