как использовать внешние печатные формы
Подключение внешней печатной формы
Часто простые бухгалтера сталкиваются с необходимостью подключения внешних печатных форм. что бы наглядно это показать и написана данная статья. Пример будет демонстрироваться на базе «ЗиКГУ Корп» 3.1.8.185 но он одинаков почти для всех конфигураций написанных с использованием БСП (все типовые на управляемых формах).
В режиме 1с предприятие (обычный запуск) переходим в пункт меню «Администрирование» и выбираем пункт меню «Печатные формы, отчеты и обработки» нажатием левой кнопки мыши . Откроется окно «Печатные формы, отчеты и обработки». Нажатием левой кнопки мыши устанавливаем флажок в поле «Дополнительный отчеты и обработки»
появится пункт меню «Дополнительный отчеты и обработки»
. Нажатием левой кнопки мыши на данный пункт меню откроем форму «Дополнительных отчетов и обработок»
.
Нажатием на кнопку «Добавить из файла» откроем форму создания дополнительной обработки на вопрос системы безопасности конфигурации ответим «Продолжить»
Откроется окно выбора внешней обработки , выберем ведомость в банк двойным нажатием левой кнопки по нужной ведомости. данные из внешней обработки подставятся в форму
. нажатием на кнопку «Записать и закрыть» подтверждаем создание дополнительной печатной формы.
Для проверки переходим в пункт меню «Выплаты» и открываем «Ведомости в банк». Нажмем кнопку «Печать» и увидим добавленную печатную форму «ведомость в банк (пакет документов) А4»
Как видим ничего сложного нет, при правильно написанной внешней печатной форме любой бухгалтер справится с данный вопросом за пару минут.
Создание внешней печатной формы под УП с возможностью передачи параметров (для конфигураций на БСП)
Статья отображает частное мнение автора по данному вопросу и не претендует на истину в последней инстанции. Поэтому если кто-то может предложить иные способы решения данной проблемы, можете писать их в комментах)
Видеоверсию данной статьи можете посмотреть тут: http://youtu.be/9JlR-2rNW6o
Поставим задачу: вывести счет на оплату покупателя внешний с дополнительным комментарием.
Первый метод.Вывод табличного документа.
Данный метод можно назвать довольно топорным, но зато быстрым и не требующим каких-то особых дополнительных движений. Мы просто получаем табличный документ счета, и выводим его на экран.
Для описания этого метода возьмем обработку СчетНаОплатуПокупателюВнешний.e pf из предыдущей моей статьи. Добавим реквизит обработки: Комментарий, тип строка(100).
Добавим форму обработки, на которой разместим данный реквизит, разместим кнопку «Печать» и создадим команду формы «Печать»
Также у формы создадим параметр «ОбъектыНазначения» тип«Произвольный» (сделайте его ключевым)
Поясню, при открытии формы, в этот параметр будут записаны все объекты, для которых открывается данная печатная форма.
&НаСервере
Функция ПечатьСерверная ()
КонецФункции
&НаКлиенте
Процедура Печать ( Команда )
Получим объект обработки.
ЭтотОбъектОбработка = РеквизитФормыВЗначение («Объект»);
Теперь перейдем в модуль обработки. И внесем кое какие изменения в уже написанный код.
Теперь перейдем в процедуру Печать, сделаем функцией, и оставим только первый параметр МассивОбъектов
Смотрим на тело функции, тот код который там написан в нашем случае не применим. Поэтому мы вычистим ее, оставив только код, с помощью которого можно получить табличный документ это функция ПолучитьТаблицуСведенийСчетаНаОплатуи функция ПечатьСчетаНаОплату, функция ПечатьСчетаНаОплату возвращает табличный документ.
Должен получиться следующий код:
Функция Печать ( МассивОбъектов ) Экспорт
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату ( МассивОбъектов );
Поскольку параметр объекты печати является списком значений,содержащим распечатываемые документ(справочники), то создадим данный список, и заполним его объектами из массива и возвратим табличный документ.
Функция Печать ( МассивОбъектов ) Экспорт
ТаблицаСведенийСчетНаОплату = ПолучитьТаблицуСведенийСчетаНаОплату ( МассивОбъектов );
Теперь изменим макет, добавив комментарий в подвал счета.
Осталось в функции ПечатьСчетаНаОплату у соответствующей области макета соответствующему параметру присвоить реквизит обработки Комментарий .
Обращаю ваше внимание, у других конфигураций и других объектов могу быть иные процедуры формирования табличного документа, чем те которые приведены в примере, в данной статья показан общий механизм.
Заканчиваем работу с модулем обработки и переходим в модуль формы. В функцию ПечатьСерверная()
Вызовем функцию ПечатьСерверная на клиенте, и покажем сформированный табличный документ.
Сохраняем печатную форму и добавляем в дополнительные отчеты и обработки конфигурации.
Перейдем в документ, выберем данную печатную форму.
Выйдет форма, в которой мы заполним поле комментарий.
Нажимаем печать и выходит табличный документ.
Возможно многих и устроит подобный вариант выхода печатной формы. Кто же хочет, что бы выходила типовая форма.
То изучайте вторую и третью часть этой статьи.
Второй метод. Использованиедополнительных сведений документа.
Для этого заходим в список счетов на оплату покупателю инажимаем кнопку дополнительные сведения
Откроется форма Дополнительных сведений, пока она пустая,т.к. нет ни каких сведений привязанных к данному документу.
Что бы создать их заходим в Все действия – Изменить составдополнительных сведений.
Пишем наименование КомментарийДополнительный, тип значениявыбираем строка. И записываем новое дополнительное сведение.
Все оно создано, и появится в списке дополнительных сведений документа Счет наоплату покупателю. Запишем в него какой-нибудь комментарий, и сохраним.
Теперь нам осталось узнать под каким именем данноедополнительное сведение сохранилось в плане видов характеристик « Дополнительные реквизиты и сведения ».
Зайдем в него через меню «Все функции».
Все. Все необходимые приготовления мы сделали, теперьперейдем к написанию обработки, которая будет подставлять в комментарийзначение данного дополнительного сведенья.
Как и в предыдущей части, за основу мы будем брать обработкуиз моей предыдущей статьи.
Исправим в процедуре сведения СведенияОВнешнейОбработке() наименование параметра регистрации и представление команды, что бы можно былоотличить нашу новую обработку.
Функция СведенияОВнешнейОбработке () экспорт
Теперь создадим функцию, которая получает по ссылке надокумент, и по ссылке на доп сведение значения. Кто не знает, поясню, чтозначения доп сведений в БСП хранятся в регистре сведений «ДополнительныеСведения»
Где в измерении Объект хранится ссылка на документ, визмерении Свойство – ссылка на план видов характеристик Дополнительные сведенияи реквизиты, а в ресурсе Значение – значение данного сведения для данногодокумента.
Посмотрите на состав регистра в нашем случае.
Поэтому создадим функцию в которую будем передавать массивдокументов и массив дополнительных сведений, а возвращать она будетсоответствующую выгрузку запроса.
МассивДопСведений = Новый Массив ;
Теперь добавим в макет новый параметр «Комментарий»
Первым делом нам необходимо извлечь из таблицы значений ТаблицаДопСвойств значение для распечатываемого документа и нужного дополнительного свойства. Дляэтого получим ссылку на доп. свойства используя наименование, которое мы ужезнаем.
//Получимзначение доп свойства для данного документа
После этого создаем структуру с полями Документ иДопСведение, в которую вставим ссылку на наш документ и ссылку на найденноедополнительное сведение.
Ищем в таблице значений ТаблицаДопСвойств строки по данномуотбору.
Проверим, есть ли в полученном массиве записи, и если естьто возьмем первый элемент массива, который будет являться строкой таблицы значений, и получим содержимоеколонки «Значение». Запишем этосодержимое в параметр.
ЗначениеДопСведения = МассивЗначения [0]. Значение ;
Осталось сохранить обработку, добавить ее в дополнительныепечатные формы и посмотреть как выйдет наш счет.
Данным способом можно решить большинство задач где необходимо ввести дополнительные параметры во внешнюю печатную форму. Но если он вас чем-то не устраивает, остается третий способ интерактивным вызовом формы ПечатьДокументов и передачей в нее параметров. Он приведен в комментариях к моей предыдущей статье.
Как создать внешнюю печатную форму для обычного приложения 1С
Внешние печатные формы для обычного приложения (для конфигурация Бухгалтерия предприятия 2.0, Зарплата и управление персоналом 2.5, Управление торговлей 10.3 и т.д.) создаются довольно просто по сравнению с внешними печатными формами для управляемого приложения.
Для чего создавать внешние печатные формы
Преимущество внешней печатной формы по сравнению с обычной в том, что она позволяет избежать изменения конфигурации информационной базы. А это значит, что процесс последующего обновления конфигурации не будет усложнен. Кроме того, внешние печатные формы наряду с внешними обработками являются единственным вариантом расширения функционала базовых версий конфигураций 1С, которые нельзя изменять вообще.
Ну и последнее: внешние печатные формы легче тиражировать, т.к. они представляют собой отдельный файл, который можно быстро подключить к информационной базе.
Как создать внешнюю печатную форму
Рассмотрим процесс создания внешней печатной формы 1С по шагам:
Часто бывает, что нужно слегка подкорректировать макет уже существующей печатной формы и сделать ее внешней. Например, добавить на макет печать организации и подпись руководителя.
Создание внешней печатной формы на основе стандартной с незначительными изменениями
Рассмотрим эту процедуру на примере создания внешней печатной формы универсального передаточного документа для документа Реализация товаров и услуг 1С:Бухгалтерии. От стандартной печатной формы она будет отличаться наличием печати организации.
Внешние печатные формы для нетиповой конфигурации (управляемое приложение)
Возникла необходимость использования в не типовой конфигурации (управляемое приложение) механизма внешних печатных форм.
Сразу оговорюсь, что статья начального уровня и далее последует “изобретение велосипеда”, который не подойдет для типовых конфигураций.
Варианты решения задачи:
1) Попробуем реализовать работу с внешними печатными формами самостоятельно
Для такого варианта реализации нам понадобятся:
Создаем справочник ДополнительныеПечатныеФормы
— ХранилищеПечатнойФормы, тип ХранилищеЗначения;
— ДатаЗагрузки, тип дата;
— Комментарий, тип строка;
— КомментарийКФайлу, тип строка;
— Табличная часть ОбъектыПечати:
— Представление, тип строка;
— СсылкаОбъекта, составной тип ДокументСсылка, СправочникСсылка.
В справочнике необходимо указать типы объектов метаданных, для которых будет доступна печатная форма, и загрузить обработку внешней печатной формы в справочник.
Выбор типов объектов для печати:
Добавим реквизит формы спОбъектовПечати типа СписокЗначений.
В обработчике формы ПриСозданииНаСервере заполним список:
Импорт внешней печатной формы в справочник:
Организуем выбор файла внешней печатной формы и помещаем его во временное хранилище.
Запись в справочник:
Получаем из временного хранилища данные обработки и записываем их в справочник в обработчике ПередЗаписьюНаСервере():
Создаем общую команду
В конфигураторе создаем новую общую команду ДополнительныеПечатныеФормы. Устанавливаем свойства:
Также создался модуль команды, в котором будем вызывать выбора печатных форм:
В методе ОткрытьФормуКомандДополнительныхПечатныхФорм() подготовим параметры, и откроем форму со списком печатных форм:
Создаем общую форму
Создаем новую общую форму типа «произвольная форма». Форма будет принимать параметры: СсылкаОбъекта (будет содержать тип объекта, выводимого на печать) и ОбъектыПечати (список объектов для печати).
Добавляем реквизиты формы:
В таблицу ПечатныеФормы будем выводить список встроенных и внешних печатных форм для данного типа объектов. Также предоставим возможность выбирать необходимые формы для печати установкой флагов в строках таблицы.
Таблица будет содержать колонки:
При создании на сервере заполним таблицу печатных форм:
Также можно добавить на форму команды «Отметить все» и «Снять отметки» для группового выделения всех печатных форм и снятия всех отметок.
Теперь реализуем обработку печати выбранных печатных форм для переданных объектов.
Получим из таблицы отмеченные флажками печатные формы. Далее, обходя в цикле выбранные печатные формы, будем выполнять на сервере печать списка объектов. В качестве результата получим массив табличных документов, для которого и организуем вывод на экран.
Общие модули
Создаем общие модули: ОбычныеПечатныеФормы (сервер, вызов сервера), ДополнительныеПечатныеФормы (сервер, вызов сервера) и ДополнительныеПечатныеФормыКлиент (клиент).
Опишем методы ЗапуститьПечать() модулей обычных и дополнительных печатных форм. Более детально с модулями можно ознакомиться в конфигурации.
Замечание : в случае возникновения ошибок печати, сообщения выводятся в табличный документ.
Описание создания внешней печатной формы
Важно: подготовка внешних печатных форм для типовых конфигураций отличается от приводимого упрощенного примера.
Внешняя печатная форма будет представлять собой внешнюю обработку *.epf, содержащую макет и экспортную функцию Печать(МассивСсылок) в модуле объекта.
Функция Печать() вызывается из метода ЗапуститьПечать() модуля ДополнительныеПечатныеФормы. Она принимает массив ссылок на объекты, для которых необходимо получить печатные формы.
Схема работы: новый табличный документ создается для каждой ссылки, область печати заполняется данными объекта и добавляется в табличный документ. В качестве результата возвращается массив готовых печатных форм (табличных документов).
В тестовой конфигурации создан документ Письмо, для которого подготовлены несколько печатных форм для печати конвертов. Каждая печатная форма соответствует одному стандартному размеру конверта.
Таким образом, воспользовавшись пакетной печатью, можно получить сразу несколько печатных форм для разных типов конвертов как для одного, так и для нескольких писем одновременно.
2) Интеграция БСП
Подробно процесс внедрения БСП можно найти обратившись к документации http://its.1c.ru/db/bspdoc.
Замечу только, что нам понадобится подсистема ДополнительныеОтчетыИОбработки из группы стандартных подсистем.
Также обязательными, для включения в собственную конфигурацию, будут подсистемы:
Описание создания типовой внешней печатной формы
Как и в приведенном выше примере, нам потребуется создать внешнюю обработку *.epf.
Общая структура модуля обработки:
Функция возвращает структуру параметров регистрации:
Используется для формирования печатных форм объектов.
Замечания:
Предложенная реализация механизма внешних печатных форм далека от идеала, обладает значительным количеством ограничений и некоторыми недостатками по сравнению с реализацией в БСП. Например, для подключения внешней печатной формы новому типа объекта необходимо будет изменить тип параметра общей команды «ДополнительныеПечатныеФормы».
Но, тем не менее, является достаточно простым и работоспособным примером работы с внешними печатными формами в управляемом приложении.
Создание внешней печатной формы для управляемого приложения в 1С 8.3
Рассмотрим написание простейшей внешней печатной формы в 1С 8.3 для управляемого приложения на примере конфигураций Бухгалтерия 3.0 и Управление торговлей 11 (данная печатная форма будет работать в обоих этих конфигурациях).
Например нам требуется написать внешнюю печатную форму к документу Реализация товаров и услуг: вывести основные данные документа, а так же из табличной части Товары: номенклатуру, цену, количество и сумму.
Создание внешней обработки
В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя, добавляем реквизит Документ с типом ДокументСсылка.РеализацияТоваровУслуг, он не является обязательным для работы печатной формы, но пригодится нам для ее регистрации в базе.
Создание макета печатной формы
Добавляем новый макет, тип макета оставляем Табличный документ. На макете создаем три области: Шапка, Данные и Подвал. Сделать это можно выделив нужное количество строк и нажав меню Таблица->Имена->Назначить имя (Ctrl+Shift+N).
После этого начинаем располагать в областях текст и параметры. В шапку выведем название печатной формы, номер документа и организацию, а также нарисуем границы шапки таблицы и напишем имена колонок. При создании параметра в свойствах ячейки, на закладке макет следует установить свойство Заполнение в значение Параметр.
В области Данные создадим параметры для вывода строк табличной части(Номенклатура, цена и т.д.), а в области Подвал для итогов по количеству и сумме.
Программирование
Зайдем в модуль объекта печатной формы Действия->Открыть модуль объекта.
Получите понятные самоучители по 1С бесплатно:
Теперь в модуле объекта следует создать обязательную функцию СведенияОВнешнейОбработке(). Она необходима для регистрации печатной формы в справочнике ДополнительныеОтчетыИОбработки, в ней собирается структура с данными для подключения формы. Эта функция, а также ряд сопутствующих ей, практически одинаковы для всех печатных форм, поэтому их можно просто копировать в новую печатную форму ничего не меняя.
Рассмотрим содержание функции СведенияОВнешнейОбработке(). Для начала создадим ее в модуле:
Создадим структуру ПараметрыРегистрации в которой и будут храниться все данные необходимые для регистрации.
Создадим массив МассивНазначений в котором будут храниться наименования документов и справочников из которых будет производиться печать.
Наименование нашей печатной формы запишем в переменную Наименование, для того что бы не прописывать его в ручную вынесем получение наименования в отдельную функцию, которая будет получать его из представления внешней обработки.
А теперь заполним переменную.
Заполним МассивНазначений используя реквизит внешней обработки Документ. Также вынесем получение элемента массива в отдельную функцию.
А теперь добавим полученные данные в массив.
Конечно этот метод не является правильным для случая, когда у вас несколько назначений, но для одного вполне годится.
Приступим к заполнению структуры ПараметрыРегистрации.
Вид внешней обработки, может быть: ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов, ПечатнаяФорма и т.д.
Назначение заполним уже полученным массивом:
Наименование из уже заполненной переменной:
Номер версии можно поставить любой по желанию:
Безопасный режим не даст печатной форме вносить изменения в базу данных. Но она у нас вполне безобидна =), поэтому ставим значение Ложь.
В поле Информация вносим описание печатной формы для пользователя. Запишем туда Наименование.
Приступим к созданию команды, которая необходима для вывода на печать нашей печатной формы. Опишем колонки ТаблицыКоманд, вынеся это в отдельную функцию.
Вызовем сознанную функцию.
Добавим команду печати, вынеся этот процесс в отдельную функцию:
Параметры функции ДобавитьКоманду:
Вызов функции выглядит так:
Осталось передать заполненную таблицу команд в ПараметрыРегистрации:
И возвратить их из функции:
На этом создание функции СведенияОВнешнейОбработке() завершено, все параметры необходимые для регистрации печатной формы собраны. Вот полный код этой и сопутствующих функций:
Приступим к написанию кода, который будет формировать нашу печатную форму. Так как при создании команды печати мы использовали параметр ВызовСерверногоМетода, то в модуле объекта создаем обязательную серверную процедуру Печать(если использовать ВызовКлиентскогоМетода, то процедура Печать должна быть клиентской и располагаться в модуле основной формы обработки).
В процедуре Печать нам следует сформировать табличный документ с данными нашей печатной формы и добавить его в Коллекцию печатных форм. Для заполнения табличного документа создадим в модуле объекта серверную функцию ПечатьФормы, передадим в параметр массив со ссылками на печатаемые документы(МассивОбъектов).
В функции создадим переменную для табличного документа, в который будет выводится печатная форма, получим макет и области макета.
Для того чтобы получить строки табличной части Товары всех печатаемых документов используем запрос.
В параметр запроса передаем МассивОбъектов, что бы указать в условии ГДЕ, что нам нужны данные только тех документов из которых выводим печатную форму. Чтобы получить выборку запроса, сначала выполняем его, а затем выгружаем.
Теперь при помощи цикла обойдем все ссылки из массива объектов и в одном табличном документесформируем печатные формы для всех выбранных документов.
В данном цикле начнем формирование печатных форм каждого из документов.
Заполним параметры шапки и выведем ее в табличный документ.
Из полученной запросом таблицы значений ОбщаяВыборка выберем строки только по текущему документу, для этого сформируем структуру отбора. Поле структуры должно называться также, как и поле таблицы по которому осуществляется поиск.
Теперь отберем нужные строки используя метод НайтиСтроки( ) и получим выборку по документу.
Заполним и выведем область Подвал.
Для того что бы печатная форма каждого документа выводилась на отдельном листе, поставим горизонтальный разделитель.
Возвращаем заполненный табличный документ из функции ПечатьФормы.
Код функции ПечатьФормы целиком:
Теперь осталось добавить сформированный табличный документ Коллекцию печатных форм. Для добавления табличного документа в коллекцию можно воспользоваться типовой процедурой ВывестиТабличныйДокументВКоллекцию из модуля УправлениеПечатью(процедура есть и в Бухгалтерии 3.0и в Управление торговлей 11). В параметры этой процедуры необходимо передать:
Для параметров ИмяМакета и СинонимМакета используем уже созданные нами процедуры, которые использовались для заполнения сведений о внешней обработки. Таким образом процедура Печать будет выглядеть следующим образом:
Обратите внимание, что для заполнения параметра ТабличныйДокумент вызывается функция ПечатьФормы, которая описана выше.
На этом создание печатной формы в управляемом приложении завершено, файл с ней доступен можно скачать по ссылке. О том, как подключить печатную форму к документу будет рассказано в следующей статье.
Смотрите видео по созданию внешней печатной формы для управляемого приложения: