gifts2017

Подход к организации печати одного макета документа из обычной и управляемой форм документа (интерфейс Такси)

Опубликовал Иван Пантелеев (RailMen) в раздел Печать - Универсальные печатные формы

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

Задание. Реализовать печать макета «Заказ клиента» из обычной и управляемой формы одноименного документа.

Выполнение задания.

1. Пусть дан документ «ЗаказКлиента», в котором есть реквизиты документа и табличная часть.

А так же две формы: управляемая и обычная, с размещенными на них реквизитами.  Создан простейший макет. 

2. Создадим подчиненный объект документа – команду «Печать». С ее помощью реализуем возможность печати макета из управляемой формы.

 

В свойстве команды «Тип параметра команды» укажем «ДокументСсылка.ЗаказКлиента».

 

В модуле команды создадим процедуру ОбработкаКоманды:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
          Команды.ПечатьЗаказа(ПараметрКоманды); //вызов клиентского общего модуля Команды
КонецПроцедуры


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

Определим в модуле экспортную процедуру ПечатьЗаказа:

Процедура ПечатьЗаказа(ПараметрКоманды) Экспорт
   ТабДок = Новый ТабличныйДокумент;

   НаСервере.Печать(ТабДок, ПараметрКоманды); //вызов серверного общего модуля Команды

   ТабДок.ОтображатьСетку = Ложь;
   ТабДок.Защита = Ложь;
   ТабДок.ТолькоПросмотр = Ложь;
   ТабДок.ОтображатьЗаголовки = Ложь;
   ТабДок.Показать();
КонецПроцедуры

4. Создадим общий модуль НаСервере. Определим его свойства как показано на рисунке

Определим в модуле экспортную процедуру Печать:

Процедура Печать(ТабДок, ПараметрКоманды) Экспорт
      
Документы.ЗаказКлиента.Печать(ТабДок, ПараметрКоманды); //вызов модуля менеджера документа
КонецПроцедуры


5. Создадим модуль менеджера документа. Именно в нем мы полностью пропишем алгоритм заполнения макета. 

Процедура Печать(ТабДок, Ссылка) Экспорт
   Макет = Документы.ЗаказКлиента.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст = "…"; //сам текст запроса нам не принципиален
   Запрос.Параметры.Вставить("Ссылка", Ссылка); //в качестве параметра указываем Ссылку – параметр процедуры
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьСоставШапка = Макет.ПолучитьОбласть("СоставШапка");
   ОбластьСостав = Макет.ПолучитьОбласть("Состав");
   ТабДок.Очистить();

   ВставлятьРазделительСтраниц = Ложь;
   Пока
Выборка.Следующий() Цикл
      Если
ВставлятьРазделительСтраниц Тогда
         ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;

      ТабДок.Вывести(ОбластьЗаголовок);

      Шапка.Параметры.Заполнить(Выборка);
      ТабДок.Вывести(Шапка, Выборка.Уровень());

      ТабДок.Вывести(ОбластьСоставШапка);
      ВыборкаСостав = Выборка.Состав.Выбрать();
      Пока
ВыборкаСостав.Следующий() Цикл
         ОбластьСостав.Параметры.Заполнить(ВыборкаСостав);
         ТабДок.Вывести(ОбластьСостав, ВыборкаСостав.Уровень());
      КонецЦикла;

      ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
КонецПроцедуры

 

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

Теперь реализуем печать из обычной формы.

 

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

Процедура Печать(Кнопка)
    
Команды.ПечатьЗаказа(Ссылка); //вызов клиентского общего модуля Команды
КонецПроцедуры

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

 


См. также

Подписаться Добавить вознаграждение
Комментарии
1. Максим Кузнецов (Makushimo) 11.10.13 06:18
просто и лаконично
в копилку
2. MagIvan (RailMen) 14.10.13 00:58
3. ghOst Bu (ilonnaa) 23.12.13 09:28
4. Олеся Потапова (O-lesya) 25.12.13 12:04
Спасибо,очень помогло.Было бы здорово теперь посмотреть печать документа из внешней печ.формы(с возможностью выбора в ней дополнит.реквизитов)
5. mikhailovaew (mikhailovaew) 24.01.14 11:35
В управляемых формах ничего не понимаю. Вопрос: для печати документа обязательно тащить процедуры в общие модули, или все же можно ограничиться размещением процедур в модуле менеджера и объекта с инструкциями перепроцессора?
6. MagIvan (RailMen) 24.01.14 13:02
(5) Если необходимо реализовать функционал печати одного макета и из управляемой и из обычной формы, то делать лучше так, как написано в статье.

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