Внешние печатные формы в управляемых формах 1С 8.3
Доработка печатной формы документа — самая распространенная доработка системы 1С 8.3. Однако при разработке нового функционала приходится снимать конфигурации с поддержки поставщика, что влечет за собой сложности при дальнейшем сопровождении 1С.
Внимание! Если Вам необходима разработка печатных форм любой сложности, но Вы не технический специалист — просто обратитесь к профессионалам. Подробности на странице услуги 1С.
Чтобы избежать таких проблем, фирмой 1С был придуман специальный функционал — подсистема «Дополнительных отчетов и обработок«, которая входит в БСП. Данный функционал позволяет без изменений в конфигурации добавить новую печатную форму или заменить старую.
Механизм заключается в разработке программистом внешней обработки, в которой описан программный код, формирующий нужную печатную форму. Данную обработку необходимо просто загрузить в пользовательском режиме (1С предприятие) в базу данных.
Этот функционал не новый, он достаточно давно используется в типовых конфигурациях. В настоящий момент актуальна версия библиотеки стандартных подсистем версии 2.х, в которой инструменты построены на механизме управляемых форм.
Рассмотрим методику разработки и настройки внешних печатных форм для 1С (8.2 или 8.3) именно в управляемом приложении, и ниже Вы можете скачать полученную внешнюю печатную форму.
Если у Вас нет времени читать, можете просмотреть наш видеоурок по созданию внешних печатных форм и подключению их на примере конфигурации 1С Бухгалтерии:
Пример создания внешней печатной формы в 1С 8.3
В нашем примере мы сделаем образец печатной формы «Счет» для документа «Реализация (акты, накладные)«.
Для начала создадим новую обработку и укажем в ней следующее:
1. Создадим экспортную функцию СведенияОВнешнейОбработке() в модуле объекта, укажем следующий код:
Формат возвращаемой структуры регламентирован, подробности можно узнать в разделах ИТС.
Они практически всегда одинаковы.
2. Вторым шагом необходимо создать экспортную процедуру Печать(), с помощью которой подсистема будет инициировать запуск печати из общих модулей подсистемы. Процедура содержит 4 параметра:
Процедура выглядит примерно следующим образом:
В ней формируется нужное количество табличных документов и готовится к печати. В нашем примере мы создадим функцию «СформироватьПечатнуюФорму()», которая будет возвращать табличный документ. Для примера мы предполагаем, что у нас всегда 1 печатная форма, поэтому передаём в функцию первый элемент массива (МассивОбъектов[0]).
Вот и всё, подготовительная часть обработки для внешней печатной формы в 1С 8.3 готова, осталось сделать непосредственно саму печатную форму в виде табличного документа, которую будет возвращать нужная функция.
Создание табличного документа
Подробно останавливаться на этом не будем, на эту тему есть большое количество материалов.
Представим лишь внешний вид макета нашего элементарного примера:
Подключение и тестирование ВПФ в 1С
В нашем примере мы запускаем конфигурации 1С Управление торговлей версии 11.1. Для добавления новой обработки необходимо в разделе «Администрирование» выбрать пункт «Печатные формы, отчеты и обработки». В нужном меню нужно нажать гиперссылку «Дополнительные отчеты и обработки» (если ссылка не активна, включите использование данного функционала — флаг расположен немного левее).
В открытом справочнике необходимо нажать на кнопку «добавить». Программа откроет диалоговое окно выбора файла, в котором необходимо указать файл разработанной нами ранее печатной формы. Если всё было сделано правильно, система автоматически заполнит все параметры, и останется только нажать кнопку «записать и закрыть»:
Как видно, параметры скопированы из функции «СведенияОВнешнейОбработке()».
Для того чтобы проверить работу обработки, необходимо в документе «Реализация товаров и услуг» открыть список печатных форм. В нём Вы уведите как «типовые» печатные формы, так и внешние, в том числе и наш добавленный:
При нажатии на команду система сформирует нужную нам форму:
Возможно, она не самая красивая, но как учебный пример, демонстрирующий работу в программе, вполне подойдет :).
Если у вас что-то не получается, рекомендую воспользоваться механизмом отладки внешних печатных форм.
Скачать получившийся пример внешней печатной формы можно по ссылке — ШаблонВнешнейПечатнойФормыБСП 2.0 (8.2).
Если Вам необходима разработка печатных форм любой сложности, но Вы не технический специалист — просто обратитесь к профессионалам. Мы предлагаем свои услуги на взаимовыгодных условиях. Подробности на странице 1С услуги.
Другие статьи по 1С:
Если вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Внешние обработки, печатные формы, обработки по заполнению табличных частей
В данном материале описываются особенности реализации механизма подключения «Внешние обработки, печатные формы, обработки по заполнению табличных частей» (далее ВПФО). Также перечисляются требования, предъявляемые к внешним обработкам, для возможности их использования данным механизмом.
Общее описание
Механизм предназначен для подключения (без изменения конфигурации):
Внешние печатные формы и обработки создаются разработчиком с соблюдением определенных условий. Условия обязательны для выполнения на этапе создания внешней обработки, для ее корректной работы в качестве подключаемой к конфигурации.
Для реализации механизма ВПФО используется справочник «Внешние обработки».
Для справочника предусмотрены специализированные реквизиты*:
ПРИМЕЧАНИЕ
Полный перечень реквизитов будет описан ниже, в разделе Техническая реализация механизма «Внешние обработки, печатные формы, обработки по заполнению табличных частей»
Для удобства, формы списков ВПФО вызываются раздельно, с предустановленным отбором по реквизиту «Вид обработки», из подменю «Сервис».
Добавлять и изменять ВПФО в базе данных может пользователь, обладающий правом администрирования дополнительных форм и обработок. Это отдельная роль в конфигурации.
Для остальных пользователей назначаются права на чтение(использование) и запись(изменение) по каждому элементу справочника ВПФО.
Преимущества использования механизма ВПФО перед механизмом платформы открытия внешних обработок:
Описание видов справочника ВПФО и требования к подключаемым внешним обработкам
Рассмотрим каждый вид ВПФО по отдельности.
Произвольная обработка
Для включения произвольных обработок в базу данных, необходимо указывать только внешнюю обработку, которая находится на диске.
Открытие произвольных обработок в форме списка производится при выборе элемента ВПФО с видом «Произвольная обработка». При этом, производится сохранение двоичных данных из реквизита «Хранилище внешней обработки» на диск во временный файл. После этого, у сохраненной внешней обработки открывается основная форма.
Основная форма для произвольной обработки должна быть определена обязательно.
Обработка для заполнения ТЧ объектов
Для обработок заполнения ТЧ необходимо указывать внешнюю обработку (файл на диске, с расширением epf), список объектов и их ТЧ, для которых необходимо использовать данную обработку.
В типовых конфигурациях объектами, использующими данный механизм, являются все документы, содержащие хоть одну табличную часть.
Перед открытием формы объекта в командных панелях табличных полей (источником данных для которых является табличная часть объекта), которым соответствуют определенные строки в справочнике ВПФО, программно добавляются пункты в подменю «Заполнить» (если подменю «Заполнить» отсутствует на командной панели, оно создается).
При нажатии на созданную перед открытием кнопку подменю «Заполнить» происходит сохранение соответствующей обработки на диск во временный файл, для сохраненной внешней обработки вызывается процедура:
Инициализировать (Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта)
Наличие экспортной процедуры «Инициализировать()» в модуле объекта обработки с видом «Заполнение табличных частей» обязательно. В теле данной процедуры должен располагаться программный код, заполняющий табличную часть в соответствии с назначением обработки.
Обработка так же может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки». Макет должен состоять из 2-х колонок – «полное имя объекта» и «имя табличной части».
Пример макета Параметры_Авторегистрации:
Внешняя печатная форма
Для подключаемых внешних печатных форм указывается:
Для каждого типа объекта дополнительно можно указать:
Вызов диалога настройка условий отбора осуществляется при начале выбора значения в колонке «отбор»:
В формах объектов, в командной панели формы (обычно это нижняя командная панель) формируется подменю кнопок печатных форм. Подменю формируется программно, при открытии формы и при записи объекта в форме (для обеспечения изменения пунктов меню в зависимости от данных объекта, и срабатыванию указанных в печатных формах условий отборов). В формируемом меню стандартные печатные формы отделяется от подключаемых разделителем.
Например:
Если находится подключаемая печатная форма, которой необходимо заменить стандартную, то она заменяется и показывается в списке стандартных печатных форм. В этом случае подключенная печатная форма отдельно в списке подключенных печатных форм не отображается.
При нажатии на любую из кнопок печати происходит определение, соответствует ли данная кнопка внешней печатной форме или встроенной в конфигурацию.
Для кнопок, соответствующих печатным формам встроенным в конфигурацию, вызывается встроенный механизм печати (данный механизм в рамках текущего проекта не рассматривается).
Для кнопок, соответствующих внешним печатным формам, происходит сохранение соответствующей обработки на диск во временный файл.
Для сохраненной внешней обработки:
Наличие реквизита «СсылкаНаОбъект» и экспортной функции «Печать()» в модуле объекта обработки с видом «Внешняя печатная форма» обязательно.
В теле функции «Печать()» должен располагаться программный код, который формирует и возвращает табличный документ, в соответствии со значением реквизита «СсылкаНаОбъект».
Обработка так же может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки» состоящий из одной колонки – полное имя объекта для которого будет создаваться соответствующая кнопка печати.
Пример макета Параметры_Авторегистрации:
При соблюдении этих требований пользователю будет достаточно указать при регистрации дополнительной печатной формы файл внешней обработки, после чего все реквизиты формы заполнятся автоматически.
Техническая реализация механизма «Внешние обработки, печатные формы, обработки по заполнению табличных частей»
В базе данных внешние обработки, печатные формы, обработки по заполнению табличных частей хранятся в справочнике «Внешние обработки». Справочник имеет следующую структуру:
ТабличнаяЧасть.Принадлежность. Хранит типы объектов, для которых задается ВПФО и прочие описанные ниже параметры. Табличная часть используется для элементов с видом обработки: «Печатная форма» или «Заполнение табличных частей».
Реквизиты табличной части:
** Используется только для элементов с видом обработки: «Заполнение табличных частей»
*** Используется только для элементов с видом обработки: «печатная форма».
Подключение дополнительных печатных форм к формам объектов конфигурации
Механизм дополнительных печатных форм является расширением стандартного механизма печатных форм объекта. Добавление дополнительной формы в общий список форм выполняется в процедурах модуля формы объекта перед открытием, после записи и при нажатии на кнопку «Установить печать по умолчанию».
Подменю «Печать» и кнопка «Печать по умолчанию» в форме объекта не должны присутствовать в обязательном порядке. Они формируются программно, в том случае, если есть хоть одна печатная форма и задана печать по умолчанию.
Подключение обработок по заполнению табличных частей к формам объектов конфигурации
Для обеспечения подключения механизма в форме объекта должны присутствовать следующие процедуры и функции:
СведенияОВнешнейОбработке для обработчика в 1С Предприятие 8.3
Сведения о внешней обработке
Чтобы подключить внешний отчет или обработку в справочник Дополнительные отчеты и обработки необходимо описать экспортную функцию СведенияОВнешнейОбработке() в модуле. Вот шаблон такой функции:
Описание полей возвращаемой структуры можно посмотреть в комментарии к функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(). Там можно получить актуальную информацию для вашей версии БСП.
Опишу основные поля структуры сведений о внешней обработке. При этом буду по минимуму повторять информацию в упомянутом комментарии, а постараюсь дополнить ее.
Поле «Вид»
Минимальным условием для регистрации внешнего отчета или обработки является заполненность поля «Вид». То есть, если вы создадите внешнюю обработку и пропишете в ней следующий код, то этого будет достаточно, чтобы добавить ее в справочник Дополнительные отчеты и обработки
Минимальное описание параметров регистрации
Возможные значения этого поля «Вид»
файла
на форме объекта или списка
«Сервис» — «Дополнительные обработки»
«Сервис» — «Дополнительные отчеты»
Поле «Вид» может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки (). Например, для вида «ПечатнаяФорма» есть функция ВидОбработкиПечатнаяФорма().
рекомендуется заполнять поле «Вид» таким способом
Поле «Назначение»
для конкретных видов
для всех документов
Этот параметр игнорируется, если поле «Вид» имеет значение «ДополнительнаяОбработка» или «ДополнительныйОтчет».
Поле «Наименование»
Это значение подставляется в наименование элемента справочника Дополнительные отчеты и обработки при создании.
Если не заполнено, то используется синоним внешней обработки/отчета.
Используется только для администрирования, а при добавлении в пункт меню, например, Печать будет подставляться наименование команды из таблицы команд, а не значение этого поля.
Поле «Команды»
Таблица значений, которая загружается в одноименную табличную часть элемента справочника Дополнительные отчеты и обработки при регистрации внешней обработки.
Эту табличную часть можно заполнить и вручную.
Каждой строке соответствует один пункт в соответствующих меню, описанных в таблице выше.
Чтобы команда внешней обработки появилась в нужном меню, обязательно нужно добавить хотя бы одну строку в эту таблицу.
Таблица «Команды», колонка «Использование»
В колонке «Использование» указывается тип вызываемой команды. По сочетанию Вид-Тип команды система определяет какая предопределенная процедура будет вызвана из внешней обработки/отчета, и где она будет объявлена — на клиенте или на сервере.
Наиболее часто используются процедуры Печать() и ВыполнитьКоманду(), а также открытие формы без обращения к методу.
Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды (), например, ТипКомандыВызовСерверногоМетода(). В каждой из этих функций есть подробный комментарий.
Кроме того различается состав и количество параметров, передаваемых во внешнюю обработку/отчет. Кратко опишу возможные варианты использования в таблице
Тип команды | Значение поля «Вид» | Вызываемая экспортная процедура |
---|---|---|
ВызовСерверногоМетода | ПечатнаяФорма | Печать( МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) |
ДополнительнаяОбработка ДополнительныйОтчет Отчет | ВыполнитьКоманду( ИдентификаторКоманды, ПараметрыВыполнения) | |
СозданиеСвязанныхОбъектов | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения) | |
ЗаполнениеОбъекта | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) | |
ВызовКлиентскогоМетода | ПечатнаяФорма | &НаКлиенте Печать( ИдентификаторКоманды, ОбъектыНазначенияМассив) |
ДополнительнаяОбработка ДополнительныйОтчет | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды) | |
СозданиеСвязанныхОбъектов | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) | |
ЗаполнениеОбъекта Отчет | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив) | |
Для всех видов | в форму передается параметр ДополнительнаяОбработкаСсылка | |
ОткрытиеФормы | СозданиеСвязанныхОбъектов ЗаполнениеОбъекта Отчет | в форму передается дополнительный параметр ОбъектыНазначения |
Для всех видов | в форму передаются параметры ИдентификаторКоманды ДополнительнаяОбработкаСсылка ИмяФормы | |
Отчет | Отчет с макетом СКД может не иметь форму, тогда будет использована общая форма для отчетов по умолчанию | |
ЗаполнениеФормы | ЗаполнениеОбъекта | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) |
СценарийВБезопасномРежиме | Для всех видов | см. описание в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер .ТипКомандыСценарийВБезопасномРежиме() |
ЗагрузкаДанныхИзФайла | ДополнительнаяОбработка | см. описание в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер .ТипКомандыЗагрузкаДанныхИзФайла() |
Для типа команды ВызовКлиентскогоМетода необходимо создать форму в обработке, назначить ее основной и объявить экспортную процедуру
Полезные процедуры
Рекомендую обратить внимание на следующие процедуры и функции:
Также будет полезно развернуть демо конфигурацию по БСП. В ней есть примеры внешних обработок и отчетов в справочнике внешних обработок.
Внешние печатные формы в 1С 8.2 и 8.3
Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.
Внешняя печатная форма — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и тем самым добавить новую печатную форму и/или заменить существующую.
Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних печатных форм и для управляемого и для обычного приложения рассматриваются в отдельной статье.
Внешняя печатная форма в управляемом приложении
Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).
Создание
Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().
Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:
Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).
Большинство параметров не являются обязательными для заполнения. В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов). Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.
Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:
Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).
Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:
Пример реализации функции Печать():