Формирование печатных форм

 

Для формирования печатных форм в системе используются два объекта: «Макет» и «Табличный документ». Следует отметить, что «Макет» является объектом метаданных, чаще всего содержащим внутри себя «Табличный документ».

Если провести простые аналогии со строительством дома, то может получиться примерно следующее. Есть склад строительных материалов, на котором есть строительные блоки определенной конфигурации (макет). В процессе строительства (выполняется код программы) со склада берутся необходимы блоки, модифицируются под конечные условия, и «включаются» в строящийся дом (табличный документ).

Если тоже самое выразить в терминах 1С:Предприятия, то получится следующее.

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

 

 

Схематично это можно выразить следующим образом:

 

 


1. Более подробно будем знакомиться с процессом формирования печатных форм на примере печати справочника Номенклатуры.

Предварительно необходимо (обязательно) явно определить форму списка справочника «Номенклатура».

Откройте страницу «Макеты» конструктора справочника «Номенклатура». Внизу формы необходимо нажать на кнопку «Конструкторы» и выбрать «Конструктор печати».

 

В открывшемся окне конструктора необходимо отметить, что создается новая процедура в модуле формы списка. Имя процедуры «Печать».

 

2. После нажатия кнопки «Далее» потребуется определить состав выводимых на печать реквизитов справочника. В левом окне отображаются выбранные для печати реквизиты, в правом что можно выбрать. Выбор осуществляется либо двойным щелчком, либо с использованием кнопок - стрелок. Произведите перенос всех полей.

 

На третьей закладке конструктора необходимо проставить ряд полезных флажков:

 

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

 

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

3. Для этого в диалог формы списка необходимо добавить командную панель (предварительно «освободив» для нее место). Это можно сделать либо с помощью кнопки нижней панели инструментов «командная панель», либо воспользовавшись разделом главного меню программы «Форма», пунктом «Вставить элемент управления».

 

Далее необходимо зайти в свойства командной панели (обратите внимание на рамку выделения элемента управления и на заголовок окна свойств, там должно быть «Свойства: Командная панель»).

 

Измените способ выравнивания кнопок в панели на «Справа». Далее откройте свойства «конструктора кнопки» . В свойствах в свойство «Действие» выберите «Закрыть».

 

В свойство отображение необходимо выбрать значение «Надпись и картинка».

Настроив таким образом свойства «конструктора» кнопки, вы создали кнопку в командной панели, которая будет закрывать данную форму списка.

 

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

4. В результате у Вас в пользовательском режиме (при заполненном справочнике «номенклатура») при нажатии на кнопку «Печать» будет формироваться печатная форма справочника.

Рассмотрим теперь, как созданный нами механизм печати работает. Начнем с макета. Если открыть страничку «Макеты» конструктора справочника «Номенклатура», то с нее можно открыть созданный конструктором печати макет (он называется «Печать»). Выглядит он следующим образом:

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

Одним из других важных свойств у ячейки макета является свойство «Заполнение». Возможными значениями является:

  • Текст – в этом случае считается, что ячейка содержит текст, не подлежащий ни какой обработке
  • Параметр – в этом случае в ячейку записывается имя параметра (потом при получении именованной области этому параметру должно быть явно присвоено значение).
  • Шаблон – содержит конструкцию : текст [Имяпараметра1] текст [ИмяПараметра2]...

Кроме этого в ячейке (строке) можно определять так называемый «параметр расшифровки».

Если при «заполнении» именованной области в параметр расшифровки записать значение, имеющее тип «СправочникСсылка.Номенклатура», то если в сформированной в пользовательском режиме печатной форме выполнить двойной щелчок над данной ячейкой, то будет открыта форма соответствующего элемента (группы). Следует помнить, что в этом случае при формировании табличного документа свойства «Защита» должно быть выставлено в значение «Истина».

 

5. Рассмотрим текст, сформированной конструктором, процедуры.

Процедура Печать(Элемент)

ТабДок = Новый ТабличныйДокумент; //1

Макет = Справочники.Номенклатура.ПолучитьМакет("Печать"); //2

Секция = Макет.ПолучитьОбласть("Заголовок"); //3

ТабДок.Вывести(Секция); //4

Секция = Макет.ПолучитьОбласть("Шапка"); //5

ТабДок.Вывести(Секция); //6

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); //7

Пока Выборка.Следующий() = Истина Цикл //8

Объект = Выборка.ПолучитьОбъект(); //9

Если Объект.ЭтоГруппа = Истина Тогда //10

Секция = Макет.ПолучитьОбласть("Группа"); //11

Секция.Параметры.Код = Объект.Код; //12

Секция.Параметры.Наименование =Объект.Наименование; //13

ТабДок.Вывести(Секция); //14

Иначе //15

Секция = Макет.ПолучитьОбласть("Элемент"); //16

Секция.Параметры.Код = Объект.Код; //17

Секция.Параметры.Наименование = Объект.Наименование; //18

Секция.Параметры.ПолноеНаименование = Объект.ПолноеНаименование; //19

Секция.Параметры.Артикул = Объект.Артикул; //20

ТабДок.Вывести(Секция); //21

КонецЕсли; //22

КонецЦикла; //23

 

ТабДок.ОтображатьСетку = Ложь; //24

ТабДок.Защита = Истина; //25

ТабДок.ТолькоПросмотр = Истина; //26

ТабДок.ОтображатьЗаголовки = Ложь; //27

ТабДок.Показать(); //28

КонецПроцедуры

Приведем пояснения к тексту процедуры

1 – Создается новый табличный документ

2 – Получается макет «Печать»

3 – Из макета выбирается именованная область «Заголовок»

4 – Так как именованная область «Заголовок» не содержит ни каких параметров, то она сразу же включается в табличный документ

5 - Из макета выбирается именованная область «Шапка»

6 – Так как именованная область «Шапка» не содержит ни каких параметров, то она сразу же включается в табличный документ

7 – Получается выборка справочника «Номенклатура». Обратите внимание, что у объекта «СправочникМенеджер.Номенклатура» есть два метода выборки:

  • Выбрать() (получается выборка упорядоченная по представлению)
  • ВыбратьИерархически() (получается выборка упорядоченная по иерархии справочника)

8 – Организуется перебор полученной выборки

9 – С помощью метода выборки «ПолучитьОбъект()» получается значение, имеющее тип «СправочникОбъект.Номенклатура» (с помощью объекта данного вида можно производить модификацию записей справочника).

10 – Проверяем является ли текущий объект группой (проверка имеет смысл только для иерархических справочников с иерархией групп и элементов).

11 – В случае истинности условия из макета выбирается именованная область «Группа»

12 – Заполняется параметр «Код» именованной области. Следует обратить внимание на то, что параметр именованной области необходимо заполнять явно, в не зависимости от того, есть ли в контексте процедуры переменная с таким именем или нет.

13 – Заполняется параметр «Наименование» именованной области.

14 – Именованная область с заполненными параметрами включается в табличный документ.

15 - Определяется раздел, выполняющийся при ложности условия (10)

16 – В случае ложности условия из макета выбирается именованная область «Элемент»

17 – Заполняется параметр «Код» именованной области.

18 – Заполняется параметр «Наименование» именованной области.

19 – Заполняется параметр «ПолноеНаименование» именованной области.

20 – Заполняется параметр «Артикул» именованной области.

21 – Именованная область с заполненными параметрами включается в табличный документ.

22 – Заканчивается блок описания условия

23 – Заканчивается описание тела цикла

24 – У табличного документа отключается вывод сетки

25 – Включается защита ячеек

26 – Определяется свойство «Только просмотр»

27 – Отключается отображение заголовков

28 – Табличный документ отображается в виде отдельного окна.

 

 

6. Произведите создание макета для печати справочника Сотрудники.

На первом шаге создания макета установите следующие параметры:

 

На втором шаге перенесите все поля для вывода на печать.

На третьем шаге ничего менять не надо.

Затем нажмите кнопку Готово.

Программа автоматически создаст готовый макет и программный код в модуле формы ФормаСписка.

 

7. Вставьте на форму ФормаСписка новую командную панель и добавьте на нее кнопку Печать.

Для данной кнопки добавьте следующую процедуру:

 

8. Таким образом, в модуле формы ФормаСписка получаем следующий программный код:

 

 

9. Запустите систему в режиме 1С: Предприятие. Введите подразделения: Бухгалтерия, Маркетинг, Торговые представители, Управление, а затем произвольно добавьте по 1-2 записи в каждое подразделение. Проверьте работоспособность кнопки Печать.