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

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

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

 

Все это делается довольно просто))

Вы можете посмотреть видео данной статьи по адресу: http://youtu.be/OdY5JdHMilU

И так, создадим новую обработку.

Мы будем создавать внешний счет на оплату покупателю, поэтому обработку так и назовем: «СчетНаОплатуВнешний».

 

Сохраним ее на жесткий диск.

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

Зайдем в модуль обработки, и создадим экспортную функцию СведенияОВнешнейОбработке.

 

 

Внутри этой функции создадим структуру ПараметрыРегистрации, которая будет содержать определенный список полей. Каждое поле мы разберем в отдельности.

 

 

Создадим первый элемент структуры, он будет иметь ключ с название «Вид».

 

Значением данной связки КлючИЗначение идет одна из строк:

 

  • «ДополнительнаяОбработка»
  • «ДополнительныйОтчет»
  • «ЗаполнениеОбъекта»
  • «Отчет»
  • «ПечатнаяФорма»
  • «СозданиеСвязанныхОбъектов»

 

В нашем случае должна быть строка «ПечатнаяФорма».

Следующий элемент структуры должен иметь ключ с названием Назначение.

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

Они должны иметь тип строка, и в следующем формате:

 

Документ.»НазваниеДокумента»

Справочник.»НазваниеСправочника»

 

У нас этот массив будет возвращать отдельная функция ПолучитьНазначениеОбработки.

 

Создадим ее.

 

Допишем созданный последним элемент структуры.

 

Создадим новый элемент структуры, ключ которого будет называться «Наименование»,

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

Следующий элемент структуры будет иметь название «Версия»,  значением данного элемента будет версия обработки. Задается программистом на его усмотрение.

Следующий элемент имеет название «Информация», который содержит краткую информацию по обработке.

Следующий элемент имеет название «БезопасныйРежим», его необходим устанавливать в значение истина или ложь, в зависимости от того необходимо устанавливать или отключать безопасный режим во время выполнения обработки. Мы установим значение  Ложь.

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

Создадим функцию и таблицу значений внутри нее.

Теперь создадим пять колонок этой таблицы.

И первая колонка – Представление.

Эта колонка – представление команды в пользовательском интерфейсе, т.е. то что пользователь увидит при нажатии кнопки печать в документе или справочнике.

Вторая колонка – Идентификатор.

Это может быть любая текстовая строка, уникальная в пределах данной обработки.

 

Третья колонка – Использование.

Параметр данной колонки типа строка, должен принимать одно из четырех  значений –

 

  • ОткрытиеФормы – Открывает форму обработки.
  • ВызовКлиентскогоМетода – будет вызвана клиентская процедура из модуля формы обработки.
  • ВызовСерверногоМетода  — будет вызвана серверная процедура из модуля обработки.
  • СценарийВБезопасномРежиме – тоже будет вызвана серверная процедура из модуля обработки в безопасном режиме.

 

Конкретно мы будем использовать вызов серверного метода.

 

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

 

 

И последняя колонка – модификатор. Это дополнительный модификатор команды. В нашем случае будет иметь название ПечатьXML.

 

Теперь создадим процедуру, которая будет заполнять данную таблицу значений.

 

В данном коде все понятно.

В функции СведенияОВнешнейОбработке создадим команду и заполним ее.

 

Создаем таблицу значений:

Теперь заполним ее.

Еще раз пройдемся по параметрам.

 

  • Первый параметр, непосредственно таблица команд вновь созданная.
  • Второй параметр, как будет отображаться команда пользователю.
  • Третий – уникальный идентификатор команды, запомните его, он нам еще пригодиться.
  • Четвертый параметр – использование, как будет вызвана ваша команда, и от куда.
  • Пятый  параметр – показывать оповещение, мы не будем это делать.
  • Шестой параметр – модификатор, в нашем случае он всегда один ПечатьXML.

 

Теперь передадим вновь созданную таблицу команд в структуру ПараметрыРегистрации.

И пусть наша функция СведенияОВнешнейОбработке возвращает данную структуру.

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

 

Теперь в модуле объекта создадим процедуру Печать.

 

 

И вот начинается самое интересное, теперь вам необходимо войти в аналогичную процедуру в менеджере объекта счет на оплату покупателю, и перенести код в вашу обработку.

Сделаем это.

Откроем модуль менеджера документа Счет на оплату покупателю.

 

 

Находим процедуру печать, и раскроем ее.

 

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

 

Поскольку мы будем выводить простую печать, то копируем второе условие

И копируем последнюю строку кода.

 

 

Теперь смотрим на скопированный код. Нам необходимо скопировать из модуля менеджера документа функцию ПолучитьТаблицуСведенийСчетаНаОплату

 

 

Делаем проверку модуля обработки и находим следующую ошибку:

 

Находим данную функцию в модуле менеджера документа и копируем ее.

 

 

 

Еще раз делаем проверку модуля. Ошибок не обнаружено.

 

Продолжаем, теперь нам необходимо, что бы брался наш макет, и печатался по нашей команде.

Нас интересует вот этот кусок кода.

 

В нашем случае, интересна процедура – ПечатьСчетаНаОплату

 

 

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

 

Делаем проверку модуля. Ругается на несуществующую процедуру.

 

 

Переходим в общий модуль, от куда мы взяли процедуру ПечатьСчетаНаОплату, находим проблемную процедуру, и копируем ее в модуль обработки.

 

Проверяем еще раз ошибки. Все нормально.

 

Теперь зайдем в скопированную функцию ПечатьСчетаНаОплату, и посмотрим, где там подтягивается макет.

 

Находим данный макет в общих макетах и копируем его в макеты нашей обработки.

 

 

 

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

 

 

Все! Больше нас эта процедура не интересует. Теперь зайдем в наш скопированный макет, и сделаем какое-нибудь изменение, что бы вы видели, что команда подтянула именно макет из внешней обработки.

 

 

Вернемся обратно в процедуру печать.

Убираем название модуля ПечатьТорговыхДокументов перед функцией ПечатьСчетаНаОплату, т.к. будем брать нашу функцию из модуля обработки. Убираем слово «Общий макет», перед названием макета.

И теперь осталась одна небольшая хитрость, без которой ваш внешний отчет не будет работать. Необходимо текст «счетзаказ».

Заменить на название идентификатора команды.

Все, сохраняем данную обработку. И запускаем 1С предприятие из конфигуратора.

Идем в администрирование. В дополнительные отчеты и бработки.

Нажимаем на кнопку создать и выбираем нашу созданную обработку.

 

 

Записываем. И смотрим, как выходит наша печатная форма.

 

 

Источник: http://infostart.ru/public/286059/

Запись опубликована в рубрике Программирование и сопровождение 1с. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Solve : *
36 ⁄ 18 =