Печатные формы

DevBookmark_PrintForms_ Печатные формы используются для вывода объектов системы на печать (на принтер или для экспорта в файл). Они уже были кратко описаны в первой главе в разделе Печатные формы. Печатная форма представляет собой шаблон и скрипт, предоставляющий данные для заполнения шаблона. Обработкой шаблона занимается библиотека-движок XtraReports (link документация к нему доступна на официальном сайте разработчика).

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

при печати из формы редактирования на печать выводится единственный редактируемый объект –запись справочника или документ – открытый в форме редактирования;

при печати из списковой формы на печать выводится список объектов (один или несколько), отмеченных в ней флагами.

Список всех печатные форм можно найти в справочнике Print forms:

PrintForms_scr_Dict

Окно справочника разделено на две части: слева отображается дерево групп печатных форм, справа – список печатных форм выбранной слева группы.

Записи справочника можно фильтровать по Отображаемому в экранных формах названию печатной формы (Caption) и Тегам (Tag).

Открыть скрипт выбранной печатной формы в форме редактирования можно прямо из списковой формы справочника, выбрав пункт Edit script в контекстном меню.

Печатная форма обладает следующими свойствами:

PrintForms_scr_DictEditForm1

Caption – отображаемое в экранных формах название печатной формы;

Template – шаблон печатной формы. Для каждого движка используется свой шаблон, который выбирается автоматически при выборе движка. Элемент управления шаблона отображает его объем и позволяет:

PrintForms_scr_DictEditForm1_But1 – открыть форму редактирования шаблона (доступно только для движка XtraReports);

PrintForms_scr_DictEditForm1_But2 – сохранить шаблон в файл;

PrintForms_scr_DictEditForm1_But3 – загрузить шаблон из файла.

Формы (способы) редактирования шаблона свои у каждого из движков, они будут описаны в соответствующих разделах;

Script – ссылка на скрипт. При создании новой печатной формы скрипт создается автоматически при ее сохранении. Нажатие на ссылку Click here to edit the script... при создании новой печатной формы приведет к сохранению формы и ее перезагрузке, затем откроется форма редактирования скрипта.

Скрипты печатных форм наследуются от класса PrintFormBase, который в свою очередь реализует интерфейс IPrintForm. Подробнее про них будет написано далее;

Script group – группа, которой принадлежит печатная форма;

Parameters – применение дополнительных параметров перед построением печатной формы:

None – дополнительные параметры запрошены не будут;

Parameter list – построение печатной формы будет предваряться открытием стандартной формы (генерируется системой Ultima Businessware® автоматически), в которой пользователю будет предложено заполнить ряд параметров;

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

Parameter form – специальная форма с дополнительными параметрами. Необходимо выбрать ее в случае, если в пункте Parameters выбрана опция Custom form. Данная форма должна быть предварительно сконструирована прикладным разработчиком, например, в Visual Studio, и помещена в общедоступный клиентский модуль (подробно процесс описан в разделе Формы запроса параметров интерактивных команд);

Icon – иконка печатной формы (размером 16 на 16 пикселей).

Кнопки справа от области предварительного просмотра иконки позволяют:

Dict_EditForm1_But1 – загрузить иконку;

Dict_EditForm1_But2 – сохранить загруженную ранее иконку на компьютер;

Dict_EditForm1_But3 – удалить иконку;

User help – комментарий к команде, который конечный пользователь может видеть в виде подсказки (hint), выпадающей при наведении курсора мыши на команду. Комментарий вводится для каждого из языков системы в открывающейся по клику по ссылке форме;

Developer's comments – комментарии прикладного разработчика;

Metadata tags – теги, используемые для описания функционала печатной формы.

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

bookmark На закладке "Parameters" перечислены дополнительные параметры, которые используются при построении/заполнении печатной формы. Все эти параметры используются (на стандартной форме) в случае, когда в пункте Parameters выбрана опция Parameter list. Параметры можно фильтровать по Названию в соответствии с введенным в поле "Name" текстом. Каждый параметр имеет:

Name – название параметра;

Caption – название, отображаемое в экранных формах;

Type Identity – тип параметра (подробнее см. раздел Типы данных);

Is Required – флаг, указывающий обязателен ли параметр для заполнения;

Save History – флаг, указывающий на необходимость помнить последнее введенное пользователем значение параметра;

String Size (доступен для типов данных Text и String) – ограничивает на указанную величину размер значения параметра;

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

Default Value (доступен для всех типов данных кроме Binary) – значение параметра по умолчанию, которое используется в форме дополнительных параметров;

Referenced Dictionary ID (доступен для типа данных Long)– идентификатор справочника (объекта), ссылкой на который является параметр.

bookmark На закладке "Dictionaries" приведен список справочников, для которых используется данная печатная форма:

PrintForms_scr_DictEditForm2

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

в левой части закладки "Single record" перечислены справочники, в которых печатная форма используется для печати одной записи справочника. Данная печатная форма будет доступна при печати из формы редактирования записей выбранных справочников;

в правой части закладки "Records list" перечислены справочники, в которых печатная форма используется для печати нескольких записей справочника (отмеченных флагами в его списковой форме). Соответственно эта печатная форма будет доступна при печати из списковой формы выбранных справочников.

Одна и та же печатная форма может использоваться как для печати одной (Single record), так и для печати нескольких (Records list) записей справочника. В этом случае при одинаковом шаблоне в скрипте печатной формы должны быть использованы два разных метода для заполнения его данными.

Списки можно фильтровать по Названию справочника в соответствии с введенным в поле Dictionary name текстом. Также списки можно дополнительно фильтровать с помощью флагов:

Enable – по всем отмеченным флагами справочникам;

Disable – по всем не отмеченным флагами справочникам;

All – по всем справочникам независимо от установленного флага.

Очистить содержимое фильтра и отобразить полный список справочников можно нажатием на кнопку DocCommnads_scr_DictEdit2_ClearAll.

bookmark На закладке "Documents" приведен список документов (типов и подтипов), для которых используется данная печатная форма:

PrintForms_scr_DictEditForm3

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

в левой части закладки "Single record" перечислены подтипы документов, сгруппированные по типу, в которых печатная форма используется для печати одного документа. Данная эта печатная форма будет доступна при печати из формы редактирования документов выбранных подтипов;

в правой части закладки "Records list" перечислены типы документов, в которых печатная форма используется для печати нескольких документов (отмеченных флагами в его списковой форме). Соответственно эта печатная форма будет доступна при печати из списковой формы документов выбранных типов.

Одна и та же печатная форма может использоваться как для печати одного (Single record), так и для печати нескольких (Records list) документов. В этом случае при одинаковом шаблоне в скрипте печатной формы должны быть использованы два разных метода для заполнения его данными.

Список "Single record" можно фильтровать по Названию типа или Названию подтипа документа в соответствии с введенными в поля Type name или Subtype name текстом. Список "Records list" можно фильтровать по Названию типа документа в соответствии с введенным в поле Type name текстом. Также списки можно дополнительно фильтровать с помощью флагов по подтипам/типам документов:

Enable – по всем отмеченным флагами подтипам/типам;

Disable – по всем не отмеченным флагами подтипам/типам;

All – по всем подтипам/типам независимо от установленного флага.

Очистить содержимое фильтров и отобразить полные списки подтипов/типов документов можно нажатием на кнопку DocCommnads_scr_DictEdit2_ClearAll.

bookmark На закладке "Subtemplates" приведен список вспомогательных шаблонов (подшаблонов) печатной формы, используемых в основном шаблоне движком XtraReports:

PrintForms_scr_DictEditForm4

Подшаблоны можно фильтровать по Названию в соответствии с введенным в поле "Name" текстом.

Подшаблоны можно добавлять Dictionaries_Button_1 или удалять Dictionaries_Button_4 соответствующими кнопками в панели инструментов закладки. Для сохранения добавленного, измененного или удаленного подшаблона необходимо нажать кнопку Dict_EditForm1_But2.

Каждый подшаблон имеет:

Name – название;

Data – собственно сам подшаблон, отображаемый в элементе управления с таким же функционалом PrintForms_scr_DictEditForm1_But1PrintForms_scr_DictEditForm1_But2PrintForms_scr_DictEditForm1_But3, как и шаблон Template.

DevBookmark_Scripts Скрипты печатных форм наследуются от класса PrintFormBase (из пространства имен Ultima.Server.Printing), который в свою очередь реализует интерфейс IPrintForm (из пространства имен Ultima.Printing).

Интерфейс IPrintForm реализует следующие методы:

SlimTable GetDataTemplate(string subReportName = null) – возвращает шаблон данных печатной формы:

subReportName – название подшаблона (необязательный параметр);

SlimTable GetData(Type dictionaryType, long id, IDictionary<string, object> parameters) – возвращает данные печатной формы для указанной записи справочника:

dictionaryType – тип справочника;

id – идентификатор записи справочника;

parameters – дополнительные параметры;

SlimTable GetData(IDictionaryRecord record, IDictionary<string, object> parameters) – возвращает данные печатной формы для указанной записи справочника:

record – запись справочника;

parameters – дополнительные параметры;

SlimTable GetData(Type dictionaryType, long[] ids, IDictionary<string, object> parameters) – возвращает данные печатной формы для указанных записей справочника:

dictionaryType – тип справочника;

ids – идентификаторы записей справочника;

parameters – дополнительные параметры;

SlimTable GetData(IDictionaryTable records, IDictionary<string, object> parameters) – возвращает данные печатной формы для указанного массива записей справочника:

records – записи справочника;

parameters – дополнительные параметры;

SlimTable GetData(long id, IDictionary<string, object> parameters) – возвращает данные печатной формы для одного документа:

id – идентификатор документа;

parameters – дополнительные параметры;

SlimTable GetData(long[] ids, IDictionary<string, object> parameters) – возвращает данные печатной формы для нескольких документов:

id – идентификаторы документов;

parameters – дополнительные параметры;

SlimTable GetData(IDictionary<string, object> parameters) – возвращает данные печатной формы (не получает на входе какой-либо объект):

parameters – дополнительные параметры.

Класс SlimTable контейнер данных для печатных форм реализует интерфейсы IEnumerable и ITypedList. Его свойство TableName – имя контейнера. В случае наличия у печатной формы подшаблонов (subtemplate) имена контейнеров должны совпадать с именами подшаблонов.

Таким образом, в скрипте печатной формы необходимо задать шаблон данных печатной формы и заполнить его данными, переопределив методы GetDataTemplate и GetData:

[Import]

private IDocumentManager DocumentManager { get; set; }

 

public override SlimTable GetDataTemplate(string subReportName = null)

{

 var template = new SlimTable();

 template.Fields["BuhNo"] = typeof(string);

 template.Fields["BuhDate"] = typeof(DateTime);

 template.Fields["CurrentDate"] = typeof(DateTime);

 

 return template;

}

 

public override SlimTable GetData(long recordId, IDictionary<string, object> parameters)

{

 var doc = DocumentManager.GetDocument(recordId) as PurchaseDocument;

 

 var buhNo = doc.AccountingNo;

 var buhDate = doc.AccountingDate;

 var currentDate = DateTime.Now;

 

 var data = new SlimTable("Report");

 data.Add(new

 {

         BuhNo = buhNo,

         BuhDate = buhDate,

         CurrentDate = currentDate,

 });

 

 return data;

}

Чтобы указать заголовок печатной формы (который виден как заголовок окна предварительного просмотра), нужно указать свойство SlimTable.Caption. Если заголовок не указан, по умолчанию будет использовано название печатной формы на языке пользователя.