новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

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

  • Добавить свою публикацию
  • для этого требуется регистрация

В двух предыдущих статьях (http://1clancer.ru/article/vneshnie_pechatnye_formy._avtoregistratsiya_v_baze_dannykh_chast_2_1065 и  http://1clancer.ru/article/vneshnie_pechatnye_formy._avtoregistratsiya_v_baze_dannykh_1061)  мы с вами разбирались, каким способом можно автоматизировать подключение  внешних печатных форм к документам. Но довольно часто  в стандартную конфигурацию программисты добавляют свои справочники, документы, регистры или перечисления. В созданных документах функционал  подключения внешних  печатных форм не используется, поскольку  нужна модификация документа.  Постараемся разобраться, анализируя любой документ из стандартной конфигурации, какой код отвечает за возможность подключения внешних печатных форм. Возьмем для опытов «Бухгалтерия для Украины» - мою любимую конфигурацию.  А подопытным  документом выступит документ «Доверенность».  Для начала  скопируем документ и копию назовем ЗаготовкаДокумента, действительно, если  эксперимент удастся, у нас будет заготовка  для документов. Копируя  которую  ми в новоскопированом документе получим  функционал  подключения внешних печатных форм. Виберем  форму документа  и  перейдем его модулю.  Процедур и функций великое множество, но большинство из них  нам к счастью ненужны.  Скорей всего  функционал подключения внешних печатных форм вызывается при  открытии документа, посмотрим на соответствующий обработчик:

 Изображение

Бинго!!! С первой попытки мы обнаружили  нужную процедуру.  Удаляем из обработчика все, что после в данной процедуре.  А также все другие процедуры  из модуля.  Оставим пока что только  переменные.  Удаляем все реквизиты документа и все табличные части,  форму документа  тоже редактируем, оставляем только номер и дату документа (стандартные реквизиты) а все  другое удаляем.   Запускаем документ, пробуем  напечатать подключенную внешнюю форму и видим, что она не выводится,  возвращаемся в код и думаем, нужно оставить  еще и  процедуру

 

Процедура ОсновныеДействияФормыПечать(Кнопка)
УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст);
КонецПроцедуры

 

 

Проверяем, вроде бы все нормально.

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

В итоге получаем такой код модуля формы:

 

// Хранит дерево макетов печатных форм
Перем мДеревоМакетов;
 
// Хранит элемент управления подменю печати
Перем мПодменюПечати;
 
// Хранит элемент управления кнопку печать по умолчанию
Перем мПечатьПоУмолчанию;
 
 
Процедура УстановитьКнопкиПечати()
		   
		    мДеревоМакетов = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(Ссылка, ПолучитьСтруктуруПечатныхФорм(), Новый Действие("ОсновныеДействияФормыПечать"), Новый Действие("ОсновныеДействияФормыУстановитьПечатьПоУмолчанию"));
 
		    УниверсальныеМеханизмы.УстановитьПодменюПечати    (мПодменюПечати, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов.Строки.Количество() > 0);
		    УниверсальныеМеханизмы.УстановитьПечатьПоУмолчанию(мПечатьПоУмолчанию, ЭлементыФормы.ОсновныеДействияФормы, мДеревоМакетов, Метаданные().Имя,Новый Действие("ОсновныеДействияФормыПечатьПоУмолчанию"));
 
		    Если Не мПодменюПечати = Неопределено Тогда
				   УниверсальныеМеханизмы.СформироватьПодменю(мДеревоМакетов, мПодменюПечати,Истина,Истина);
		    КонецЕсли;
		   
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
		   
		    // Установка кнопок печати
		    УстановитьКнопкиПечати();
		   
		    // Установка кнопок заполнение ТЧ
				  
КонецПроцедуры
 
Процедура ОсновныеДействияФормыПечать(Кнопка)
		   
		    УниверсальныеМеханизмы.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст);
		   
КонецПроцедуры

 

 

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

 

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

 

 

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

 

 
0
Читайте также
Культура программирования
1С программистам-пишите любые программы корректно (даже мелкие обработки)
Запросы и их обработка
Когда работают одновременно кассир, деспетчера.. программа зависает в нетиповой конфигурации
Разработки
Выгрузка данных из УТ 10.3.16.1 в Бухгалтерию 2.0
Обработка для выгрузки данных из УТ 10.3 в БП 2.0
Заполнение Статьи движения денежных средств в документах
Позволяет проставить реквизит в шапке документа
Выгрузка прайса загрузка заказа
Обработка для выгрузки прайса и создания закада УТ 10.3
Еще от автора
≡ к списку статей