1с как отладить внешнюю печатную форму
Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.
Внешняя печатная форма — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и тем самым добавить новую печатную форму и/или заменить существующую.
Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних печатных форм и для управляемого и для обычного приложения рассматриваются в отдельной статье.
Внешняя печатная форма в управляемом приложении
Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).
Создание
Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().
Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:
Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).
Большинство параметров не являются обязательными для заполнения. В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов). Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.
Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:
- игнорируется привилегированный режим;
- запрещена работа с COM;
- запрещена загрузка внешних компонент;
- запрещен запуск внешних приложений и команд ОС;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к интернету.
Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).
Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:
Частенько вижу рекомендации по отладке внешних печатных форм в управляемом приложении через ошибки, дополнительные обработки и т.д. и т.п. В то время как это можно сделать полностью аналогично отладке в толстом клиенте. Имеется ввиду способ - когда к внешней обработке добавляется форма где есть реквизит ссылкаНаОбъект, и эта форма вызывает уже процедуру формирования табличного документа из модуля объекта и показывает сформированный табличный документ.
Итак в модуле внешней обработки мы имеем процедуру:
Процедура стандартная, она вызывает функцию формирования табличного документа ПечатьСчетДоговор(МассивОбъектов), эту самую функцию нам и нужно вызвать из добавленой формы и показать результат.
добавляем в отчет реквизит СсылкаНаОбъект того типа что нам нужен здесь, один в один как в толстом клиенте. Создаем форму - реквизит на ней добавится автоматом. Добавляем на форме кнопку - Печать, привязываем к ней команду Печать и создаем автоматом процедуру на сервере и на клиенте.
Здесь немного уже доработано руками. Во первых процедуру на сервере заменяем на функцию. На клиенте сответственно дописываем метод Показать(). Мы же хотим увидеть сформированный табличный документ? В функции Команда1НаСервере() мы вытягиваем табличный документ - напрямую обращаемся к функции модуля ПечатьСчетДоговора(. ) - и передаем этот табличный документ на клиента, понятно что сервер нам его не покажет. РеквизитФормыВЗначение(..) нужен чтоб перегнать объект в состояние - когда его процедуры(модуля) может увидеть клиент, как пишет 1с получаем объект прикладного типа, иначе ничего не получится.
Если мы запустим обработку в таком варианте, то увидим ошибку - функция ПечатьСчетДоговора(массив1) не обнаружена. Делаем последний штрих - в модуле на сделать эту функцию экспортной.
Доработка минимальная, и займет немногим больше времени чем в толстом клиенте. Отлаженную печатную форму без всяких изменений можно добавить во внешние отчеты и обработки - она будет полностью работоспособна.
Теперь мы можем свободно отлаживать форму открыв ее через меню файл. Переходить на ошибки напрямую в конфигуратор/обработку и вставлять готовую печатную форму в дополнительные отчеты и обработки без всяких допиливаний - как есть.
Рассмотрим настройку и создание новых печатных форм в системе 1С 8.3.
Создание внешних печатных форм для управляемого приложения рассмотрено в отдельной статье.
Самый простой способ создания печатной формы — с помощью встроенного конструктора печатных форм. Рассмотрим пошаговую инструкцию по созданию и настройке печатной формы на примере создания печатной формы «Счет покупателю».
Создание и настройка печатной формы 1С 8.3
Первый шаг — необходимо зайти в палитру свойств нужного нам документа и выбрать Действия — Конструкторы — Конструктор печати:
Первый вопрос системы — выбор варианта работы конструктора. Настройки аналогичны, если у Вас конфигурация работает в управляемом режиме — выберите его, если нет — выберите обычные формы. Мы рассмотрим создание на обычной форме.
Следующий шаг — выбор названия процедуры для печати. Назовём её «Печать счета».
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Далее необходимо выбрать реквизиты, которые нужно указать в шапке печатной формы в том порядке, который нам необходим:
После выбора реквизитов шапки печатной формы 1С 8.2 следует сделать выбор данных для табличной части:
Когда и этот шаг сделан, нужно выбрать реквизиты подвала аналогично реквизитам в шапке.
На последней странице можно оставить всё по умолчанию и нажать ОК:
Что получаем в итоге?
Правильно оформленный макет печатной формы:
Процедура, полностью формирующая печатную форму документа:
Которые можно настроить в 1С 8.2, как нужно нам.
Вывод вызова созданной печатной формы 1С
Для вызова созданной печатной формы нужно просто разместить кнопку на форму документа. Это сделать очень просто. Для начала создадим кнопку на форме, назовем её «Печать счета»:
Нажимаем на кнопку «лупы» у действия — мы попадем в модуль формы, где вписываем вызов процедуры печати вновь созданного счета:
Где «ПечатьСчета» — имя нашей процедуры.
Созданная и настроенная печатная форма выглядит так:
Другие статьи по 1С:
В дополнение — наш видеоурок по созданию внешних печатных форм и подключению их на примере конфигурации 1С Бухгалтерии:
Подавляющее большинство разработчиков 1С, работающих в типовых конфигурациях, пользуются внешними печатными формами. Это отличный функционал библиотеки стандартных подсистем, который позволяет без изменения конфигурации добавлять свои печатные формы к объектам конфигурации. Но многие начинающие программисты сталкиваются с препятствием в виде неработающей отладки в таких печатных формах. Однако ей можно воспользоваться, если правильно настроить свой внешний файл дополнения к 1С.
Настраиваем внешнюю печатную форму для отладки
Чтобы получить возможность контролировать в пошаговом режиме формирование печатной формы, необходимо сделать еще одну внешнюю обработку. Ее отличие заключается в том, что добавлен реквизит с типом соответствующим документу конфигурации и форма обработки. В форму нужно поместить поле для указания реквизита и кнопку для выполнения печати.
Рис.1 Отладка внешней печатной формы 1С 8.3
На кнопку выполнения печати необходимо назначить процедуру на клиенте. В ней будем задавать новый табличный документ и передавать его вместе с ссылкой в функцию на сервере. Также на клиенте нам необходимо выводить табличный документ, ведь на сервере это невозможно. Полный текст процедуры на клиентской стороне:
На серверной стороне код будет сложнее – в этой функции будет происходить получение данных, подключение к макету и его заполнение. На основе этих данных формируется табличный документ и возвращается на клиент, чтобы вывести его на экран пользователя. Рассмотрим команды серверной части подробнее:
- Получаем макет из обработки;
- Получаем данные для вывода;
- Очищаем табличный документ и начинаем формировать его заново. Получаем область, заполняем все переменные в макете, параметры табличного документа и возвращаем на клиентскую сторону готовый к выводу табличный документ.
Чтобы начать отладку внешних печатных форм, необходимо установить в тексте модуля точку останова. Для этого воспользуйтесь клавишей F9, специальным значком на панели инструментов или двойным щелчком на серой вертикальной линии слева от кода модуля. После этого необходимо прямо из конфигуратора запустить 1С Предприятие в режиме отладки.
Рис.2 Отладка внешней печатной формы 1С 8.3
Чтобы начать отладку нашей внешней печатной формы, необходимо открыть ее и, нажав на кнопку, запустить процесс формирования табличного документа. Узнать, что идет процесс отладки, вы сможете по изменившемуся значку точки останова (к его форме круга добавилась стрелочка). Теперь вы можете управлять пошаговым выполнением операторов алгоритма, используя следующие «горячие» клавиши:
- F11 (Шагнуть в) – Переходит на следующий шаг или заходит внутрь функции;
- F10 (Шагнуть через) – Переходит на следующий шаг, вычисляя значения всех функций;
- F11+Shift (Шагнуть из) – Завершает выполнение кода в текущей процедуре и попадает в то место алгоритма, откуда она была вызвана;
- F10+Shift (Идти до курсора) – Позволяет «промотать» выполнение процедуры до места, которое вы обозначите моргающим курсором.
Рис.3 Отладка внешней печатной формы 1С 8.3
Также можно использовать табло и стек вызовов для просмотра данных и вложенности вызовов процедур и функций. Если вы найдете ошибку алгоритма формирования печатной формы, после ее исправления необходимо открыть ее заново в режиме управляемых форм 1С Предприятия. После того как вы отладите печатную форму и будете уверены в качестве кода, можно будет использовать его в других местах.
- Главная
- Программирование 1С
- 1С. Печать из формы внешней обработки, вывод табличного документа в общую форму "Печать документов" посредством БСП.
1С. Печать из формы внешней обработки, вывод табличного документа в общую форму "Печать документов" посредством БСП.
Изменение существующих или создание новых печатных форм – задача довольно распространённая. Как правило, в таких случаях создаётся внешняя печатная форма и подключается через стандартную подсистему дополнительных отчётов и обработок. Однако, иногда возникают задачи, в которых печатная форма должна формироваться с учётом данных, вводимых пользователями непосредственно перед печатью. То есть, сначала должна открыться форма, в которую пользователь вводит данные, и только потом выполняется команда "Печать".
Допустим, нам нужно создать печатную форму некой справки, часть данных которой вводятся в форме перед печатью. Кнопка "Печать" должна располагаться на форме.
Создаём внешнюю обработку. В модуле обработки, в функции СведенияОВнешнейОбработке () , устанавливаем параметры регистрации внешней обработки.
Обычно для внешних печатных форм параметру "Вид" присваивается значение "Печатная форма", но так как у нас сначала должна открываться форма, то устанавливаем значение "Дополнительная обработка".
В этой же функции СведенияОВнешнейОбработке () при обращении к процедуре ДобавитьКоманду () для внешних печатных форм в параметр "Использование" обыкновенно передаётся значение "ВызовСерверногоМетода" или "ВызовКлиентскогоМетода". Здесь же мы укажем значение "ОткрытиеФормы".
В итоге функция будет выглядеть так:
Создаём макет печатной формы.
Далее создаём основную форму обработки и необходимые реквизиты формы. Создаём и размещаем на форме команду "Печать". Формировать табличный документ для печати будем в обработчике этой команды. В зависимости от того, какие данные требуются для печатной формы, организовываем заполнение табличного документа либо на клиенте, либо на сервере. В данном примере заполняем на сервере и затем возвращаем табличный документ на клиент.
Итак, в модуле формы:
Табличный документ сформирован, осталось вывести его для печати в предназначенную для этого общую форму "Печать документов". Сделаем это с помощью стандартных механизмов БСП.
Дополним обработчик команды "Печать":
Теперь в результате выполнения команды "Печать" из формы нашей внешней обработки, табличный документ будет выводиться в форму "Печать документов", которая предоставляет удобный интерфейс для печати:
- 1С
- Управляемые формы
- Обработки
- Внешняя печатная форма
- Печать
- Библиотека стандартных подсистем (БСП)
Комментарии
Простите, а как получить данные того объекта, к которому будет привязана эта форма?
Печатная форма же должна заполняться данными из документа или справочника, к которому привязана.
Реально работающий пример в отличие от других советов. Большое спасибо, у меня наконец все получилось .
Читайте также: