Профессия — 1С

Рукопашный бой Карташ

Категории

Внешние обработки

рубрики: Начинающим | Дата: 24 Июнь, 2014

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




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

Чтобы внешние обработки работали корректно они должны соответствовать определенным правилам. Рассмотрим эти правила.

Внешние печатные формы

Создаем внешнюю обработку. В ней должны присутствовать следующие обязательные элементы:

  • Реквизит СсылкаНаОбъект с типом СправочникСсылка.ИмяСправочника или ДокументСсылка.ИмяДокумента
  • Макет. Если видоизменяется типовой макет, то он конечно копируется из типового документа или справочника и дорабатывается. Либо создается с нуля, если создается какая то специфическая печатная форма.
  • ВнешняяПечатнаяФорма

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

    
    
    Функция Печать() Экспорт
    	
    	ТабДокумент			= Новый ТабличныйДокумент;
    	Макет				= ПолучитьМакет("Макет");
    	ОбластьМакетаШапка	= Макет.ПолучитьОбласть("Шапка");
    
    	ОбластьМакетаШапка.Параметры.МойПараметр = "Мой параметр";
    	
    	//ТабДокумент.Показать();
    	Возврат ТабДокумент;
    	
    КонецФункции
    
    

    Хочу обратить внимание на закомментированную строку «//ТабДокумент.Показать();». Эта строка в раскомментированном виде используется для отладки.




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

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

ФормаВнешнейПечатнойФормы_ВЗ



Процедура КнопкаВыполнитьНажатие(Кнопка)

	Печать();
	
КонецПроцедуры

Внешние обработки заполнения табличных частей

Внешняя обработка по заполнению табличной части должна удовлетворять следующим условиям:

  • В модуле объекта должна присутствовать следующая экспортная процедура:

    
    
    Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноПолеОбъекта) Экспорт
    
    

    здесь:

    • Объект — в этот параметр будет передан ДокументОбъект или СправочникОбъект для которого вызывается данная процедура
    • ИмяТабличнойЧасти — в этот параметр будет передана строка содержащая имя табличной части, которая будет заполняться
    • ТабличноПолеОбъекта — в этот параметр будет передан элемент формы «табличное поле», которое будет заполняться
      Честно говоря никогда не пользовался этим параметром. Обычно обращаюсь к табличной части через ее имя.

    И опять же для отладки удобно в обработку добавить реквизиты со ссылкой на документ или справочник, а также с именем табличной части. Или в коде имя табличной части задать. И соответсnвенно по кнопке выполнить вызываем процедуру Инициализировать()

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

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

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С