Изменение существующих или создание новых печатных форм – задача довольно распространённая. Как правило, в таких случаях создаётся внешняя печатная форма и подключается через стандартную подсистему дополнительных отчётов и обработок. Однако, иногда возникают задачи, в которых печатная форма должна формироваться с учётом данных, вводимых пользователями непосредственно перед печатью. То есть, сначала должна открыться форма, в которую пользователь вводит данные, и только потом выполняется команда «Печать».
Допустим, нам нужно создать печатную форму некой справки, часть данных которой вводятся в форме перед печатью. Кнопка «Печать» должна располагаться на форме.
Создаём внешнюю обработку. В модуле обработки, в функции СведенияОВнешнейОбработке () , устанавливаем параметры регистрации внешней обработки.
Обычно для внешних печатных форм параметру «Вид» присваивается значение «Печатная форма», но так как у нас сначала должна открываться форма, то устанавливаем значение «Дополнительная обработка».
В этой же функции СведенияОВнешнейОбработке () при обращении к процедуре ДобавитьКоманду () для внешних печатных форм в параметр «Использование» обыкновенно передаётся значение «ВызовСерверногоМетода» или «ВызовКлиентскогоМетода». Здесь же мы укажем значение «ОткрытиеФормы».
В итоге функция будет выглядеть так:
Создаём макет печатной формы.
Далее создаём основную форму обработки и необходимые реквизиты формы. Создаём и размещаем на форме команду «Печать». Формировать табличный документ для печати будем в обработчике этой команды. В зависимости от того, какие данные требуются для печатной формы, организовываем заполнение табличного документа либо на клиенте, либо на сервере. В данном примере заполняем на сервере и затем возвращаем табличный документ на клиент.
Итак, в модуле формы:
Табличный документ сформирован, осталось вывести его для печати в предназначенную для этого общую форму «Печать документов». Сделаем это с помощью стандартных механизмов БСП.
Дополним обработчик команды «Печать»:
Теперь в результате выполнения команды «Печать» из формы нашей внешней обработки, табличный документ будет выводиться в форму «Печать документов», которая предоставляет удобный интерфейс для печати:
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Добрый день, всем.
имеется обработка в которой есть реквизит Объект.ПрихНакл, в которой хранится ссылка на документ ПоступлениеТоваровУслуг, для этого документа прописана внешняя печатная форма «Приемо-сдаточный акт», из документа все печатает. а как эту форму сформировать из обработки, или с любого другого случайного места?
В синтакс-помощнике посмотрите: Нужно сначала ее подключить, потом создать, а потом уже использовать по назначению
вот такой вариант?:
Процедура НапечататьРеестр(СсылкаНаОбъект) ВнешняяПФорма = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(«Реестр для отгрузки построчный»); ОбработкаОбъект = ВнешняяПФорма.ПолучитьОбъект(); ДанныеОбработки = ОбработкаОбъект.ХранилищеОбработки.Получить(); АдресХранилищаОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки); ИмяОбработки = Строка(ВнешняяПФорма.Ссылка.УникальныйИдентификатор()); Подключение = ВнешниеОбработки.Подключить(АдресХранилищаОбработки, ИмяОбработки , Истина); Отчет = ВнешниеОбработки.Создать(Подключение); Макет = Новый ТаблицаЗначений; Макет.Колонки.Добавить(«ИмяВРЕГ»); Стр = Макет.Добавить(); Стр.ИмяВРЕГ = «Макет»; Отчет.Печать(СсылкаНаОбъект, Макет, Неопределено, Неопределено);
В обычном приложении можно так
Код 1C v 8.3
добрый день, IBReiter, спасибо за ваш ответ. но есть моменты.
метод Печать в модуле внешней печатной форме — это не функция, а процедура и выглядит она вот так
в свою очередь есть другая функция СформироватьПечатнуюФормуПриемоСдаточногоАкта(МассивОбъектов[0], ОбъектыПечати), которую при желании можно сделать Экспортной, и там действительно в конце происходит
возврат табличного документа.
но сейчас если печатаешь из документа то открывается специалальная обработка печати документов. а если будет просто ТабличныйДокумент.показать() то будет открыто просто табличное поле.
ответ оказался очень простой
код должен выполняться на клиенте, а функция НайтиВПФ() — должны быть на сервере и возвращать ссылку из Справочники.ДополнительныеОтчетыИОбработки
Источник: