Часто необходимо «немного» подправить существующую печатную форму. Изменить конфу просто, но потеряешь поддержку. Хорошо бы сделать внешнюю форму, но многочисленное освещение этого вопроса в интернете приводит только к новым вопросам. Продравшись через советы «гуру», предлагаю Вам коротенькую инструкцию:
1.Создать новую внешнюю обработку
2.В реквизиты добавить СсылкуНаОбъект можно неопределенный, но лучше на ДокументСсылка.Родитель
3.Скопировать Макет из родителя в новую обработку
4.Скопировать Процедуру Печать из модуля Родителя и превратить ее в Функцию Печать() Экспорт, именно так без параметров, если параметры необходимы описать их в теле функции
5.Скопировать все запрашиваемые функции и процедуры
6.Заменить прямые обращения к Реквизитам Родителя на
Реквизит=СсылкаНаОбъект.Реквизит;
7.Заменить ЭтотОбъект и ЭтотОбъект.Ссылка на СсылкаНаОбъект
8.Обратить Внимание! на вызов процедуры печати
было
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект, «»), НепосредственнаяПечать);
выдавало ошибку не найден «Номер»!!!
стало
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект, «»), НепосредственнаяПечать);
PS Теперь можно править Макет (осторожней с изменением его названия)
Прилагаю рабочий вариант НовогоСчета для БП 2.0.25.5
(0) В типовых на 8.1. по другому делается?
Да одинаково все и в 8.1, и в 8.2
Спасибо, пошел тренироваться 🙂
По другому делается в УТ-11
(4) Более общий случай по другому делается в БСП.
В управляемых все по другому. А в типовых «старых» есть прекрасный шаблонhttp://infostart.ru/public/67060/ в котором не нужно ничего переименовывать и как написано в описании выдирается любая печать за 5 минут.
Спасибо за инструкцию. Все ясно и коротко.
Да, спасибо! Очень чётко, кратко и понятно.
Спасибо! Очень нужная информация.
Спасибо автору!
Да всё так, ничего сложного нет. Для облегчения отладки можно приладить форму, добавить в неё реквизит СсылкаНаОбъект и написать обработчик для кнопки выполнить, что-то типа того:
ТабДокумент = Печать();
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент);
Это позволит избежать необходимости постоянного обновления во внешних обработках.
Спасибо. В самый раз! была задача сделать внешний счет на оплату 🙂
Технология стара, для 8.1 и для 8.2 не управляемого приложения. Для 8.2, управляемых приложений (УТ ред. 11, УНФ, Документооборот) технология изменилась, и вышеописанный метод не подойдет. Найдите тут на инфостарте как делать внешние печатные формы, обработки таб.частей, ввод на основании, ссылку не помню.
Не знаю как сама внешняя печатная форма, но комментарий к ней отличный. Коротко ясно и последовательно. Сделала то,что необходимо мне буквально за 30 минут. Получила отличный результат за короткое время, руководствуясь алгоритмом действий. Огромное спасибо!!!!!!
Спасибо! Потратил три вечера, но сделал первую в жизни внешнюю форму….
Уже не раз пришлось менять типовую форму. Спасибо за такую простую и полезную инструкцию
немножко вклинюсь:
4.Скопировать Процедуру Печать из модуля Родителя и превратить ее в Функцию Печать() Экспорт
процедуру переделываем в функцию не просто так! Эта функция должна вернуть табличный документ в качестве результата! Потому п. 8 теряет смысл: процедура Печать() в модуле документа получает табличный документ из функции Печать() внешней печ.формы и сама передаёт её в процедуру НапечататьДокумент().
В Вашем случае процедура НапечататьДокумент() вызывается дважды: во внешней обработке и в модуле документа.
Но потому как функция ничего не возвращает, то её результат есть Неопределено и второй вызов ничего не делает.
Нужно делать именно через результат функции, потому как в модуле документа ещё есть такие параметры, как КоличествоЭкземпляров, НаПринтер и НепосредственнаяПечать, которых нет во внешней печ. форме.