1с печать документа программно

Изменение существующих или создание новых печатных форм – задача довольно распространённая. Как правило, в таких случаях создаётся внешняя печатная форма и подключается через стандартную подсистему дополнительных отчётов и обработок. Однако, иногда возникают задачи, в которых печатная форма должна формироваться с учётом данных, вводимых пользователями непосредственно перед печатью. То есть, сначала должна открыться форма, в которую пользователь вводит данные, и только потом выполняется команда «Печать».

Допустим, нам нужно создать печатную форму некой справки, часть данных которой вводятся в форме перед печатью. Кнопка «Печать» должна располагаться на форме.

Создаём внешнюю обработку. В модуле обработки, в функции СведенияОВнешнейОбработке () , устанавливаем параметры регистрации внешней обработки.

Обычно для внешних печатных форм параметру «Вид» присваивается значение «Печатная форма», но так как у нас сначала должна открываться форма, то устанавливаем значение «Дополнительная обработка».

В этой же функции СведенияОВнешнейОбработке () при обращении к процедуре ДобавитьКоманду () для внешних печатных форм в параметр «Использование» обыкновенно передаётся значение «ВызовСерверногоМетода» или «ВызовКлиентскогоМетода». Здесь же мы укажем значение «ОткрытиеФормы».

В итоге функция будет выглядеть так:

Создаём макет печатной формы.

Далее создаём основную форму обработки и необходимые реквизиты формы. Создаём и размещаем на форме команду «Печать». Формировать табличный документ для печати будем в обработчике этой команды. В зависимости от того, какие данные требуются для печатной формы, организовываем заполнение табличного документа либо на клиенте, либо на сервере. В данном примере заполняем на сервере и затем возвращаем табличный документ на клиент.

Итак, в модуле формы:

Табличный документ сформирован, осталось вывести его для печати в предназначенную для этого общую форму «Печать документов». Сделаем это с помощью стандартных механизмов БСП.

Дополним обработчик команды «Печать»:

Теперь в результате выполнения команды «Печать» из формы нашей внешней обработки, табличный документ будет выводиться в форму «Печать документов», которая предоставляет удобный интерфейс для печати:

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Работа с табличным документом в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

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

zerbite 15.01.2016 10:36
Прочитано: 7548

Добрый день, всем.

имеется обработка в которой есть реквизит Объект.ПрихНакл, в которой хранится ссылка на документ ПоступлениеТоваровУслуг, для этого документа прописана внешняя печатная форма «Приемо-сдаточный акт», из документа все печатает. а как эту форму сформировать из обработки, или с любого другого случайного места?

Yandex
Возможно, вас также заинтересует
IBReiter 15.01.2016 11:30
Ответ № 1

В синтакс-помощнике посмотрите: Нужно сначала ее подключить, потом создать, а потом уже использовать по назначению

zerbite 15.01.2016 11:58
Ответ № 2

вот такой вариант?:

Процедура НапечататьРеестр(СсылкаНаОбъект) ВнешняяПФорма = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(«Реестр для отгрузки построчный»); ОбработкаОбъект = ВнешняяПФорма.ПолучитьОбъект(); ДанныеОбработки = ОбработкаОбъект.ХранилищеОбработки.Получить(); АдресХранилищаОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки); ИмяОбработки = Строка(ВнешняяПФорма.Ссылка.УникальныйИдентификатор()); Подключение = ВнешниеОбработки.Подключить(АдресХранилищаОбработки, ИмяОбработки , Истина); Отчет = ВнешниеОбработки.Создать(Подключение); Макет = Новый ТаблицаЗначений; Макет.Колонки.Добавить(«ИмяВРЕГ»); Стр = Макет.Добавить(); Стр.ИмяВРЕГ = «Макет»; Отчет.Печать(СсылкаНаОбъект, Макет, Неопределено, Неопределено);

zerbite 15.01.2016 11:59
Ответ № 3
Код 1C v 8.2 УП
IBReiter 15.01.2016 14:49
Ответ № 4

В обычном приложении можно так

Код 1C v 8.3

zerbite 19.01.2016 09:30
Ответ № 5

добрый день, IBReiter, спасибо за ваш ответ. но есть моменты.

метод Печать в модуле внешней печатной форме — это не функция, а процедура и выглядит она вот так

в свою очередь есть другая функция СформироватьПечатнуюФормуПриемоСдаточногоАкта(МассивОбъектов[0], ОбъектыПечати), которую при желании можно сделать Экспортной, и там действительно в конце происходит

возврат табличного документа.

но сейчас если печатаешь из документа то открывается специалальная обработка печати документов. а если будет просто ТабличныйДокумент.показать() то будет открыто просто табличное поле.

zerbite 19.01.2016 15:14
Ответ № 6

ответ оказался очень простой

код должен выполняться на клиенте, а функция НайтиВПФ() — должны быть на сервере и возвращать ссылку из Справочники.ДополнительныеОтчетыИОбработки

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: