Как создать внешнюю печатную форму из встроенной. Публикации. Создание макета печатной формы

23.02.2024
Редкие невестки могут похвастаться, что у них ровные и дружеские отношения со свекровью. Обычно случается с точностью до наоборот
Как создать внешнюю печатную форму на основе готовой? 1С 8.0/8.1
_______________________________________________________

Предполагается, что у вас есть уже знания, полученные в процессе чтения темы, поэтому подробно затрагиваются только новые вопросы.

Итак: нам потребовалось немного изменить макет счёта на оплату покупателю (работать будем с конфигигурацией Бухгалтерия 1.6):
- убрать заголовок в макете счета на оплату (текст "Внимание! Оплата данного счета..., при наличии доверенности и паспорта.")
- изменить представление поставщика (т.е. нас) по требованию банка
(задача из реальной жизни с временем работы на 15-20 минут)

Создание обработки будет состоять их двух этапов:
1 - создание полного аналога исходной печатной формы
2 - доработка под собственные нужды

Этап первый

Для начала создадим пустую внешнюю обработку, только макет создавать не будем -
мы его скопируем для последующего изменения из основной конфигурации. Чтобы скопировать макет в обработку из конфигурации - достаточно
выделить его в дереве объектов, далее зайти в меню Правка -Копировать , после в дереве данных обработки в ветке макетов выбрать
в меню Правка -Вставить Более удобный путь - напрямую перетащить мышкой этой макет из основной конфигурации в дерево данных
обработки.

И пишем такой код:

Функция Печать() Экспорт //... тут мы что-нибудь напишем потом КонецФункции

Что мы сделали: для работы внешней печатной формы требуется экспортная (т.е. видимая для других объектов конфигурации) функция Печать ,
которая должна возвращать в основную программу сформированный табличный документ для предварительно просмотра и последующей печати.

Что бы не изобретать велосипед - посмотрим, как происходит формирование табличного документа в основной конфигурации: для этого мы зайдём
в модуль документа СчтНаОплатуПокупателю Найдём в модуле функцию Печать , которая выглядит примерно вот так:

// Процедура осуществляет печать документа. Можно направить печать на // экран или принтер, а также распечатать необходмое количество копий. // // Название макета печати передается в качестве параметра, // по переданному названию находим имя макета в соответствии. // // Параметры: // НазваниеМакета - строка, название макета. // Процедура Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт // Получить экземпляр документа на печать Если ИмяМакета = "Счет" Тогда ТабДокумент = ПечатьСчетаЗаказа(ИмяМакета); КонецЕсли; УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, РаботаСДиалогами.СформироватьЗаголовокДокумента(ЭтотОбъект, ""), НепосредственнаяПечать); КонецПроцедуры // Печать

В нашем случае получается, что для печати счёта в эту функцию передается параметр ИмяМакета равный строковой переменной "счет" ,
если посмотреть на код, мы увидим, что для формирование стандартного счета используется функция ПечатьСчетаЗаказа(...) , которую теперь
нам и требуется найти в коде модуля документа. Обвчно она расположена чуть выше функции печать(...)
Итак, вот сокращенный текст этой функции:

// Функция формирует табличный документ с печатной формой заказа или счета, // разработанного методистами // // Возвращаемое значение: // Табличный документ - сформированная печатная форма // Функция ПечатьСчетаЗаказа(Тип) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка); // ...код программы... ОбластьМакета.Параметры.Заполнить(Шапка); ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции // ПечатьСчетаЗаказа()

Как мы видим, в конце работы этой функции возвращается сформированный табличный документ - нам остается только полностью скопировать текст
этой функции (начиная со строки "Запрос = Новый Запрос;" и заканчивая строкой "Возрат ТабДокумент;") и вставить его в тело подготовленой функции
Печать в модуле нашей обработки.

После того, как вставим текст функции - попробуем сохранить обработку. Конфигуратор предупредит нас, что в модуле он обнаружил ошибки и выведет
их в в окно служебных сообщений. Вот примерный тест этих ошибок:

{ВнешняяОбработка.ВнешняяОбработка1(102,7)}: Переменная не определена (Тип) Если <>Тип = "Счет" Тогда {ВнешняяОбработка.ВнешняяОбработка1(224,7)}: Переменная не определена (Тип) Если <>Тип = "Счет" Тогда {ВнешняяОбработка.ВнешняяОбработка1(107,15)}: Переменная не определена (СтруктурнаяЕдиница) Если ТипЗнч(<>СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда {ВнешняяОбработка.ВнешняяОбработка1(108,40)}: Переменная не определена (СтруктурнаяЕдиница) Банк = ?(НЕ ЗначениеЗаполнено(<>СтруктурнаяЕдиница.БанкДляРасчетов), СтруктурнаяЕдиница.Банк, СтруктурнаяЕдиница.БанкДляРасчетов); {ВнешняяОбработка.ВнешняяОбработка1(108,77)}: Переменная не определена (СтруктурнаяЕдиница) Банк = ?(НЕ ЗначениеЗаполнено(СтруктурнаяЕдиница.БанкДляРасчетов), <>СтруктурнаяЕдиница.Банк, СтруктурнаяЕдиница.БанкДляРасчетов); {ВнешняяОбработка.ВнешняяОбработка1(108,102)}: Переменная не определена (СтруктурнаяЕдиница) Банк = ?(НЕ ЗначениеЗаполнено(СтруктурнаяЕдиница.БанкДляРасчетов), СтруктурнаяЕдиница.Банк, <>СтруктурнаяЕдиница.БанкДляРасчетов); {ВнешняяОбработка.ВнешняяОбработка1(112,38)}: Переменная не определена (СтруктурнаяЕдиница) НомерСчета = ВернутьРасчетныйСчет(<>СтруктурнаяЕдиница); {ВнешняяОбработка.ВнешняяОбработка1(123,21)}: Переменная не определена (СтруктурнаяЕдиница) Если ПустаяСтрока(<>СтруктурнаяЕдиница.ТекстКорреспондента) Тогда {ВнешняяОбработка.ВнешняяОбработка1(125,27)}: Переменная не определена (СтруктурнаяЕдиница) Если ЗначениеЗаполнено(<>СтруктурнаяЕдиница.БанкДляРасчетов) Тогда {ВнешняяОбработка.ВнешняяОбработка1(126,59)}: Переменная не определена (СтруктурнаяЕдиница) ТекстКорреспондента = ТекстКорреспондента + " р/с " + <>СтруктурнаяЕдиница.НомерСчета {ВнешняяОбработка.ВнешняяОбработка1(127,15)}: Переменная не определена (СтруктурнаяЕдиница) + " в " + <>СтруктурнаяЕдиница.Банк + " " + СтруктурнаяЕдиница.Банк.Город; {ВнешняяОбработка.ВнешняяОбработка1(127,47)}: Переменная не определена (СтруктурнаяЕдиница) + " в " + СтруктурнаяЕдиница.Банк + " " + <>СтруктурнаяЕдиница.Банк.Город; {ВнешняяОбработка.ВнешняяОбработка1(130,26)}: Переменная не определена (СтруктурнаяЕдиница) ТекстКорреспондента = <>СтруктурнаяЕдиница.ТекстКорреспондента; {ВнешняяОбработка.ВнешняяОбработка1(112,17)}: Процедура или функция с указанным именем не определена (ВернутьРасчетныйСчет) НомерСчета = <>ВернутьРасчетныйСчет(СтруктурнаяЕдиница);

Давайте разберём эти ошибки:
*** 1. Переменная не определена (Тип) - если посмотреть исходный код функции, становиться ясно, что переменная тип являлась параметром:
Функция ПечатьСчетаЗаказа(Тип) , мы же этот параметр удалили. В данном случае - этот параметр содержал в себе строку с именем макета
для печати. Т.к. нам требуется печатать только один макет - определеим эту переменную следующим образом: мы измененим заголовок
функции Печать в модуле обработки:

Функция Печать(Тип = "Счет")

Что означает такая запись: она означает, что если в функцию небыл передан параметр, то параметр Тип примет значение
по умолчанию "Счет" , что нам и требуется для работы.

*** 2. Переменная не определена (СтруктурнаяЕдиница) - данная переменная является реквизитом документа СчетНаОплатуПокупателю , т.к.
в модуле внешней печатной формы мы этот реквизит не видим (мы не находимся в теле объекта документ), то получим эту переменную через
ссылку на документ, т.е. через реквизит обработки СсылкаНаОбъект , в который програама передат ссылку на текущий документ.
Добавим в начало функции следующую строку:

*** 3. Процедура или функция с указанным именем не определена (ВернутьРасчетныйСчет) - данная функция определена (т.е. описана) в модуле
документа, соответственно - нам достаточно полностью перенести код этой функции в нашу обработку.

Итак, теперь модуль обработки выглядит примерно следующим образом:

Функция ВернутьРасчетныйСчет(СчетКонтрагента) БанкДляРасчетов = СчетКонтрагента.БанкДляРасчетов; Результат = ?(БанкДляРасчетов.Пустая(), СчетКонтрагента.НомерСчета, СчетКонтрагента.Банк.КоррСчет); Возврат Результат; КонецФункции // ВернутьРасчетныйСчет() // Функция формирует табличный документ с печатной формой заказа или счета, // разработанного методистами // // Возвращаемое значение: // Табличный документ - сформированная печатная форма // Функция Печать(Тип = "Счет") Экспорт СтруктурнаяЕдиница = СсылкаНаОбъект.СтруктурнаяЕдиница; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка); // ...текст программы... ОбластьМакета.Параметры.Заполнить(Шапка); ТабДокумент.Вывести(ОбластьМакета); Возврат ТабДокумент; КонецФункции // ПечатьСчетаЗаказа()

Если всё правильно сделано - то теперь мы можем сохранить обработку и мы получим полный внешний аналог встроенной печатной формы.

Этап второй

Теперь внесём необходимые изменения при печати в макет (предполагается, что вы умеете работать с макетами), а также изменим
текст поставщика в шапке счёта.

Как мы видим по коду программы, текст получателя заполняется в этом месте:

Если ПустаяСтрока(СтруктурнаяЕдиница.ТекстКорреспондента) Тогда ТекстКорреспондента = СведенияОПоставщике.ПолноеНаименование; Если ЗначениеЗаполнено(СтруктурнаяЕдиница.БанкДляРасчетов) Тогда ТекстКорреспондента = ТекстКорреспондента + " р/с " + СтруктурнаяЕдиница.НомерСчета + " в " + СтруктурнаяЕдиница.Банк + " " + СтруктурнаяЕдиница.Банк.Город; КонецЕсли; Иначе ТекстКорреспондента = СтруктурнаяЕдиница.ТекстКорреспондента; КонецЕсли; ОбластьМакета.Параметры.ПредставлениеПоставщика = ТекстКорреспондента;

Закзазчик поставил условие, что бы текст для данной ячеки брался из наименования плательщика в платежных поручениях на
перечисление налогов. Этот текст храниться в реквизите элемента справочника Организации - нам осталось только
получить к нему доступ. Если посмотреть на реквизиты документа, то мы уидим что в них храниться данные об организации,
по которой выписывался документ, а нужный нам текст храниться в реквизите организации - теперь мы знаем, как получить доступ:

ОбластьМакета.Параметры.ПредставлениеПоставщика = СсылкаНаОбъект.Организация.НаименованиеПлательщикаПриПеречисленииНалогов;

Вот и всё - макет готов к работе и его можно подключать к конфигурации!

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

PS. Обсуждения, вопросы, предложения - всё в теме.

Осуществляется в соответствии со стандартным макетом печатной формы, встроенным в приложение разработчиками (его называют "поставляемым" макетом).

При необходимости, вы можете изменить стандартный макет и, в дальнейшем, осуществлять печать документа на основе вашего персонального ("пользовательского") макета. Для редактирования макета печатной формы предусмотрен механизм выгрузки на локальный компьютер. Правка макета проводится в локальной версии приложения системы "1С:Предприятие" (в частности, можно использовать бесплатное приложение 1С:Предприятие - Работа с файлами).


Для изменения макета печатной формы выполните следующее.




Редактирование макета печатной формы завершено, при выводе на печать документа будет использоваться макет, в который были внесены изменения.

Если вы захотите вернуться к прежнему макету печатной формы, нажмите кнопку Использовать стандартный макет . При этом, отредактированный макет будет по-прежнему присутствовать на сервере, и его можно будет снова включить нажатием кнопки Изменить .

Желаем приятной работы!

Как вставить в макет печатной формы логотип компании?

Приведем конкретный пример редактирования макета печатной формы Счета на оплату , а именно, рассмотрим, как вставить в него изображение, например, логотип компании (это изображение необходимо предварительно заготовить и сохранить в виде графического файла, например, в формате png или jpg).


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

Желаем приятной работы!

Внешние печатные формы для обычного приложения (для конфигурация Бухгалтерия предприятия 2.0, Зарплата и управление персоналом 2.5, Управление торговлей 10.3 и т.д.) создаются довольно просто по сравнению с внешними печатными формами для управляемого приложения.

Для чего создавать внешние печатные формы

Преимущество внешней печатной формы по сравнению с обычной в том, что она позволяет избежать изменения конфигурации информационной базы. А это значит, что процесс последующего обновления конфигурации не будет усложнен. Кроме того, внешние печатные формы наряду с внешними обработками являются единственным вариантом расширения функционала базовых версий конфигураций 1С, которые нельзя изменять вообще.

Ну и последнее: внешние печатные формы легче тиражировать, т.к. они представляют собой отдельный файл, который можно быстро подключить к информационной базе.

Как создать внешнюю печатную форму

Рассмотрим процесс создания внешней печатной формы 1С по шагам:

  1. Создаем внешнюю обработку. Для этого в конфигураторе выбираем пункт меню Файл — Новый… И в открывшемся диалоговом окне — Внешняя обработка .
  2. Создаем реквизит внешней обработки с именем СсылкаНаОбъект . Тип реквизита — ссылка на справочник или документ, для которого создается внешняя печатная форма. Одна и та же форма может применяться для нескольких типов объектов, в этом случае тип данных реквизита СсылкаНаОбъект должен быть составным.
  3. В модуле объекта создаем экспортную функцию с именем Печать , которая должна возвращать готовый табличный документ печатной формы.

Часто бывает, что нужно слегка подкорректировать макет уже существующей печатной формы и сделать ее внешней. Например, добавить на макет печать организации и подпись руководителя.

Создание внешней печатной формы на основе стандартной с незначительными изменениями

Рассмотрим эту процедуру на примере создания внешней печатной формы универсального передаточного документа для документа Реализация товаров и услуг 1С:Бухгалтерии. От стандартной печатной формы она будет отличаться наличием печати организации.

  1. Создаем внешнюю обработку с реквизитом СсылкаНаОбъект, тип данных — ДокументСсылка.РеализацияТоваровУслуг.
  2. Находим макет стандартной печатной формы УПД (он находится в общих макетах) и копируем (перетаскиваем) его в окно внешней обработки. Макеты других печатных форм могут находиться в самих документах или справочниках.
  3. Вносим необходимые изменения в скопированный макет печатной формы.
  4. Находим функцию, отвечающую за формирование печатной формы. Эта функция должна возвращать сформированный табличный документ. Копируем ее содержание в экспортную функцию Печать() в модуле объекта внешней обработки.
    В нашем случае это функция ПечатьУниверсальногоПередаточногоДокумента() Экспорт из модуля объекта документа Реализация товаров и услуг.
    Если изменения макета были существенными (изменялись области и/или параметры), то необходимо внести соответствующие корректировки в функцию печати.
  5. Пытаемся сохранить внешнюю обработку. При этом, скорее всего, появятся сообщения об ошибках, связанных с отсутствием некоторых процедур и функций, вызываемых функцией печати. Эти функции и процедуры необходимо найти в исходном документе и так же скопировать в модуль объекта внешней обработки. Либо скорректировать ссылку, если исходная функция или процедура экспортная.
  6. (не обязательно). Для тестирования внешней печатной формы удобно сделать ее форму, на которую вынести реквизит СсылкаНаОбъект . Кнопка Выполнить должна вызывать процедуру Печать() из модуля объекта. Для этого событию нажатия кнопки задается процедура:

Заходим в Сервис ->Дополнительные отчеты и обработки ->Дополнительные внешние печатные формы .

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

Нажимаем кнопку Открыть и выбираем файл с нужной печатной формой. После этого при необходимости задаем нужное имя (поле Наименование).

Если печатная форма содержит параметры авторегистрации, то всплывет сообщение по этому поводу. Нажимаем Да .Если же этого не будет, то необходимо самим указать к какому документу будет привязана данная форма.Для этого надо добавить строку в табличную часть "Принадлежность печатной формы", где в поле "Представление объекта" выбрать тот тип документа, к которому мы привязываем форму. Так как в нашем примере это акт списания материалов, то выбираем документ Требование-накладная.

После этого заходим в любой документ Требование-накладная, нажимаем Печать, и выбираем только что добавленную форму.

Для БП 3.0, ЗУП 3.0, УТ 11, КА 2.0, ERP 2.0.

Для демонстрации добавления печатной формы в управляемом интерфейсе покажу добавление внешней формы счета на оплату к одноименному документу в Бухгалтерии 3.0.

Заходим в соответствующий раздел программы:


Необходимо, чтобы был включен признак использования внешних отчетов и обработок, переходим по гиперссылке в список внешних объектов:

В открывшемся списке нажимаем Создать :


В диалоговом окне выбираем нужный файл:


Заполнилась карточка внешнего объекта: в размещении видим тип объекта базы, к которому будет привязана форма и чуть ниже ее название:


Запишем и закроем форму созданного внешнего объекта.

Теперь зайдем в любой документ Счет на оплату покупателю и выведем меню печати:


В данной статье описано как подключить внешнюю печатную форму в базу 1С на примере конфигурации «Управление торговлей 10.3»

Конфигурация «Управление торговлей 10.3» — это конфигурация на, так называемых, «ОБЫЧНЫХ» формах, а не на «УПРАВЛЯЕМЫХ» как «Управление торговлей 11.2», для «УПРАВЛЯЕМЫХ» форм рекомендуем прочитать .

Наша инструкция «показывает» как подключить внешнюю печатную форму в 1С с конфигурацией на «ОБЫЧНЫХ» формах а именно:

  • «Бухгалтерия 2.0»
  • «Управление торговлей 10.3»
  • «Зарплата и управление персоналом 2.5»
  • «Комплексная автоматизация 1.1»
  • «Управление производственным предприятием 1.3»
  • «Розница 1.0»
  • и другие подобные конфигурации.

Для того чтобы подключить внешнюю печатную форму в 1С нам понадобится пройти 11 шагов.

1 — Меню «Сервис». 2 — Выбираем «Внешние печатные формы и обработки». 3 — Далее — «Внешние печатные формы» (см. рис. ниже ↓)

Для того чтобы убедить вас в том, что данная инструкция подходит и для других конфигураций на «ОБЫЧНЫХ» формах — представим те же начальные 1-2-3 шага, но уже не в «Управление торговлей 10.3», а в «Бухгалтерия 2.0» там всё также за исключением чуть-чуть измененных слов в подпунктах, а именно…

1 — Меню «Сервис»(так же как и в «УТ 10.3», да и в других).
2 — Здесь «Дополнительные отчеты и обработки», а не «Внешние печатные формы и обработки» как в «УТ 10.3»,
но все-равно смысл тот-же и находится там же в меню «Сервис».
3 — И затем — «Дополнительные внешние печатные формы», т.е. лишнее слово «Дополнительные», если сравнивать с «УТ 10.3» (см. рис. ниже ↓)

Далее продолжим все-таки на примере «Управление торговлей 10.3» без лишних сравнений.
4 — Нажимаем на кнопку «+« т.е. «Добавить». 5 — Кнопка где нарисована папка (при наведении появится подсказка: «Заменить файл внешней обработки»).

В новых версиях 1С (начиная с августа 2016 года) в программу встроен механизм предупреждения об опасности использования неизвестных внешних обработок, которые могут содержать «вирусы», в более ранних версиях программы предупреждение возникать не будет! Если оно возникло, то для подключения внешней обработки будет необходимо - 6 - нажать кнопку «Продолжить». (см. рис. ниже ↓)

7 — Выбираем каталог, в котором размещен нужный нам файл внешней печатной формы. 8 — Выделяем наш файл. 9 — Нажимаем «Открыть» (см. рис. ниже ↓)

10 — Внешняя печатная форма может иметь параметры авторегистрации, как в нашем случае, здесь имеет смысл нажать «Да» — тем самым использовать эти параметры при регистрации, т.е. автоматически выбрать те объекты (документы или может, например, справочники) в которых можно будет использовать подключаемую внешнюю печатную форму (см. рис. ниже ↓)

Вот и все, у нас заполнилась таблица «Принадлежность печатной формы», благодаря параметрам авторегистрации, мы видим наименование подключаемой внешней печатной формы, возможно у вас заполнится поле «Комментарий» и т.п. Вы можете добавлять свои объекты в таблицу «Принадлежность печатной формы», например, для наших обработок «Универсальная печатная форма договора», которая поддерживает печать многих документов и справочников, но параметры авторегистрации установлены только для основных: 10* — Нажимаете на зеленую кнопку «Добавить» и выбираете в какие объекты так же разместить в обработку. Теперь остается только — 11 — нажать на кнопку «ОК» и (см. рис. ниже ↓)

Сейчас стоит проверить — все ли мы сделали правильно?
Для этого выберем, объект для проверки, например документ «Реализация товаров и услуг», который указан в таблице «Принадлежность печатной формы», это значит что подключенную печатную форму можно использовать в данном документе! Проверим… (см. рис. ниже ↓)

Для проверки возможности печати открываем любой документ вида: «Реализация товаров и услуг». 13 — Нажимаем кнопку «Печать».
Видим — появилось окно выбора печатных форм, среди них присутствует — 14 — подключенная нами внешняя печатная форма (см. рис. ниже ↓)

Последние материалы сайта