Печатные формы используются для вывода объектов системы на печать (на принтер или для экспорта в файл). Они уже были кратко описаны в первой главе в разделе Печатные формы. Печатная форма представляет собой шаблон и скрипт, предоставляющий данные для заполнения шаблона. Обработкой шаблона занимается библиотека-движок XtraReports (
документация к нему доступна на официальном сайте разработчика).
В справочниках и документах печать доступна как из списковой формы, так и из формы редактирования. Причем набор форм для печати в списковой форме и форме редактирования может как различаться, так и пересекаться:
•при печати из формы редактирования на печать выводится единственный редактируемый объект –запись справочника или документ – открытый в форме редактирования;
•при печати из списковой формы на печать выводится список объектов (один или несколько), отмеченных в ней флагами.
Список всех печатные форм можно найти в справочнике Print forms:
Окно справочника разделено на две части: слева отображается дерево групп печатных форм, справа – список печатных форм выбранной слева группы.
Записи справочника можно фильтровать по Отображаемому в экранных формах названию печатной формы (Caption) и Тегам (Tag).
Открыть скрипт выбранной печатной формы в форме редактирования можно прямо из списковой формы справочника, выбрав пункт Edit script в контекстном меню.
Печатная форма обладает следующими свойствами:
•Caption – отображаемое в экранных формах название печатной формы;
•Template – шаблон печатной формы. Для каждого движка используется свой шаблон, который выбирается автоматически при выборе движка. Элемент управления шаблона отображает его объем и позволяет:
– открыть форму редактирования шаблона (доступно только для движка XtraReports);
– сохранить шаблон в файл;
– загрузить шаблон из файла.
Формы (способы) редактирования шаблона свои у каждого из движков, они будут описаны в соответствующих разделах;
•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 пикселей).
Кнопки справа от области предварительного просмотра иконки позволяют:
– загрузить иконку;
– сохранить загруженную ранее иконку на компьютер;
– удалить иконку;
•User help – комментарий к команде, который конечный пользователь может видеть в виде подсказки (hint), выпадающей при наведении курсора мыши на команду. Комментарий вводится для каждого из языков системы в открывающейся по клику по ссылке форме;
•Developer's comments – комментарии прикладного разработчика;
•Metadata tags – теги, используемые для описания функционала печатной формы.
Ряд параметров печатной формы сгруппирован по смысловым закладкам.
На закладке "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)– идентификатор справочника (объекта), ссылкой на который является параметр.
На закладке "Dictionaries" приведен список справочников, для которых используется данная печатная форма:
Список представляет собой перечень всех справочников, в котором флагами можно отметить те из них, для которых будет использована данная печатная форма. Закладка разбита на две части:
•в левой части закладки "Single record" перечислены справочники, в которых печатная форма используется для печати одной записи справочника. Данная печатная форма будет доступна при печати из формы редактирования записей выбранных справочников;
•в правой части закладки "Records list" перечислены справочники, в которых печатная форма используется для печати нескольких записей справочника (отмеченных флагами в его списковой форме). Соответственно эта печатная форма будет доступна при печати из списковой формы выбранных справочников.
Одна и та же печатная форма может использоваться как для печати одной (Single record), так и для печати нескольких (Records list) записей справочника. В этом случае при одинаковом шаблоне в скрипте печатной формы должны быть использованы два разных метода для заполнения его данными.
Списки можно фильтровать по Названию справочника в соответствии с введенным в поле Dictionary name текстом. Также списки можно дополнительно фильтровать с помощью флагов:
•Enable – по всем отмеченным флагами справочникам;
•Disable – по всем не отмеченным флагами справочникам;
•All – по всем справочникам независимо от установленного флага.
Очистить содержимое фильтра и отобразить полный список справочников можно нажатием на кнопку .
На закладке "Documents" приведен список документов (типов и подтипов), для которых используется данная печатная форма:
Список представляет собой перечень всех типов/подтипов документов, в котором флагами можно отметить те из них, для которых будет использована данная печатная форма. Закладка разбита на две части:
•в левой части закладки "Single record" перечислены подтипы документов, сгруппированные по типу, в которых печатная форма используется для печати одного документа. Данная эта печатная форма будет доступна при печати из формы редактирования документов выбранных подтипов;
•в правой части закладки "Records list" перечислены типы документов, в которых печатная форма используется для печати нескольких документов (отмеченных флагами в его списковой форме). Соответственно эта печатная форма будет доступна при печати из списковой формы документов выбранных типов.
Одна и та же печатная форма может использоваться как для печати одного (Single record), так и для печати нескольких (Records list) документов. В этом случае при одинаковом шаблоне в скрипте печатной формы должны быть использованы два разных метода для заполнения его данными.
Список "Single record" можно фильтровать по Названию типа или Названию подтипа документа в соответствии с введенными в поля Type name или Subtype name текстом. Список "Records list" можно фильтровать по Названию типа документа в соответствии с введенным в поле Type name текстом. Также списки можно дополнительно фильтровать с помощью флагов по подтипам/типам документов:
•Enable – по всем отмеченным флагами подтипам/типам;
•Disable – по всем не отмеченным флагами подтипам/типам;
•All – по всем подтипам/типам независимо от установленного флага.
Очистить содержимое фильтров и отобразить полные списки подтипов/типов документов можно нажатием на кнопку .
На закладке "Subtemplates" приведен список вспомогательных шаблонов (подшаблонов) печатной формы, используемых в основном шаблоне движком XtraReports:
Подшаблоны можно фильтровать по Названию в соответствии с введенным в поле "Name" текстом.
Подшаблоны можно добавлять или удалять
соответствующими кнопками в панели инструментов закладки. Для сохранения добавленного, измененного или удаленного подшаблона необходимо нажать кнопку
.
Каждый подшаблон имеет:
•Name – название;
•Data – собственно сам подшаблон, отображаемый в элементе управления с таким же функционалом , как и шаблон Template.
Скрипты печатных форм наследуются от класса 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. Если заголовок не указан, по умолчанию будет использовано название печатной формы на языке пользователя.