Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.
Внешняя печатная форма — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и тем самым добавить новую печатную форму и/или заменить существующую.
Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних печатных форм и для управляемого и для обычного приложения рассматриваются в отдельной статье.
Внешняя печатная форма в управляемом приложении
Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).
Создание
Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().
Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; //указываем сведения о внешней печатной форме ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Версия", "1.2"); ПараметрыРегистрации.Вставить("ВерсияБСП", "3.0.1.287"); ПараметрыРегистрации.Вставить("Наименование", "Печатная форма для ПКО"); ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма для документов"); //используем безопасный режим, это накладывает некоторые ограничения ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); //определим документы и/или справочники //в которых будет использоваться эта печатная форма ПараметрыРегистрации.Вставить("Назначение", Новый Массив); ПараметрыРегистрации.Назначение.Добавить("Документ.ПриходныйКассовыйОрдер"); //используется для дополнительных отчетов //подключенных к подсистеме "Варианты отчетов" ПараметрыРегистрации.Вставить("ОпределитьНастройкиФормы", Ложь); //если требуются исключения из безопасного режима, их можно запросить ПараметрыРегистрации.Вставить("Разрешения", Новый Массив); ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("https","yandex.ru",80,"очень надо")); //определяем таблицу команд ПараметрыРегистрации.Вставить("Команды", ПолучитьТаблицуКоманд()); //добавляем команду Команда = ПараметрыРегистрации.Команды.Добавить(); Команда.Представление = "Печатная форма для ПКО (внешняя)"; Команда.Идентификатор = "ПечатнаяФормаДляПКО"; Команда.Использование = "ВызовСерверногоМетода"; Команда.ПоказыватьОповещение = Истина; Команда.Модификатор = "ПечатьMXL"; Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ЗаменяемыеКоманды", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции |
Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).
Большинство параметров не являются обязательными для заполнения. В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов). Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.
Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:
- игнорируется привилегированный режим;
- запрещена работа с COM;
- запрещена загрузка внешних компонент;
- запрещен запуск внешних приложений и команд ОС;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к интернету.
Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).
Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:
- МассивОбъектов — массив ссылок на объекты, для которых требуется сформировать табличные документы;
- КоллекцияПечатныхФорм — служебная таблица значений, через нее передаются имена макетов для которых могут быть сформированы табличные документы, а также возвращаются синонимы (представления) макетов, сформированные табличные документы и другая информация;
- ОбъектыПечати — список значений, к котором устанавливается соответствие между объектами и именами областей печати табличного документа (нужно для возможности печати комплектов документов);
- ПараметрыВывода — структура с предопределенными ключами, через которую можно вернуть некоторые параметры.
Пример реализации функции Печать():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатнаяФормаДляПКО"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = "Печатная форма для ПКО"; КонецЕсли; КонецПроцедуры Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати) ТабДок = Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет("Макет"); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ПервыйДокумент = Истина; Для Каждого ОбъектСсылка Из МассивОбъектов Цикл Если Не ПервыйДокумент Тогда //выводим документы на разных страницах ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1; ОбластьСтрока.Параметры.Документ = ОбъектСсылка; ТабДок.Вывести(ОбластьСтрока); //зададим область печати объекта в табличном документе УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, НомерСтрокиНачало, ОбъектыПечати, ОбъектСсылка); КонецЦикла; Возврат ТабДок; КонецФункции |
В коде выше мы находим нашу печатную форму по идентификатору и формируем для нее табличный документ.
Подключение
Подключение нашей внешней печатной формы на примере «Бухгалтерии предприятия, редакция 3.0».
Вкратце повторю основные этапы:
- Открываем вкладку «Администрирование» и переходим в раздел «Печатные формы, отчеты и обработки»;
- Устанавливаем галку «Дополнительные отчеты и обработки» и переходим в раздел «Дополнительные отчеты и обработки»;
- Жмем кнопку «Добавить из файла» и выбираем файл печатной формы;
- (Необязательно) Меняем наименование, комментарии, настраиваем видимость, изменяем размещение;
- Жмем кнопку «Записать и закрыть».
Внешняя печатная форма в обычном приложении
Теперь рассмотрим создание внешней печатной формы в обычном приложении — создадим печатную форму для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 2.0). Несмотря на то, что задача та же, решается она по другому.
Создание
Внешняя печатная форма в обычном приложении — это внешняя обработка, в которой имеется реквизит «СсылкаНаОбъект» произвольного типа, в который будет передана ссылка на объект, для которого требуется выполнить печать, и экспортной функции Печать() в модуле объекта, которая вызывается без параметров и возвращает табличный документ.
Кроме этого может присутствовать реквизит «ДополнительныеПараметры» произвольного типа, через который, в виде структуры, будут передаваться дополнительные параметры примитивного типа.
Также во внешней печатной форме может присутствовать макет с названием «Параметры_Авторегистрации» в первой колонке которого можно перечислить объекты метаданных, к которым принадлежит печатная форма. Используется этот макет для автоматического заполнения принадлежности печатной формы.
Такой же макет (но с указанием табличной части) используется во внешних обработках табличных частей, о которых имеется отдельная статья.
Пример реализации функции Печать():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Функция Печать() Экспорт ТабДок = Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет("Макет"); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ОбластьСтрока.Параметры.Документ = СсылкаНаОбъект; ТабДок.Вывести(ОбластьСтрока); //обращение к дополнительным параметрам рекомендуется снабдить //соответствующими проверками Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда Если ДополнительныеПараметры.Свойство("ТестПараметр") Тогда ОбластьСтрока.Параметры.Документ = ДополнительныеПараметры.ТестПараметр; ТабДок.Вывести(ОбластьСтрока); КонецЕсли; КонецЕсли; Возврат ТабДок; КонецФункции |
Подключение
Подключим нашу внешнюю печатную форму на примере «Бухгалтерии предприятия, редакция 2.0».
Основные этапы:
- Открываем справочник внешних печатных форм (Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы);
- Добавляем новый элемент справочника и указываем файл печатной формы;
- Записываем элемент.
- (Необязательно) Меняем имеющиеся настройки — представления, отборы, дополнительные параметры и прочее.
На этом все, надеюсь, что эта статья была Вам полезна.
Загрузка...
Доброго времени суток!
В конфигурации 1С БП 2.0 присутствуют 2 формы вывода на печать: управляемая (ПечатьДокументов) и обычная (ФормаПечати). Возможно-ли в Толстом клиенте на обычных формах через внешнюю печатную форму использовать управляемую форму печати документа? Процедура общего модуля «УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати», которая вызывает данную форму в конфигурации не используется». Для чего она нужна?
Можно, если нет данного функционала можно дописать самому или нанять внешнего разработчика.