Способ формирования отчётов системы «Галактика» в формате MS Word с использованием XML–технологии. |
Представлен пакет программных компонентов для формирования отчётов системы «Галактика» и других подобных программ.
Отчёты в формате MS Word формируются по данным прикладной программы по следующей схеме:
|
Данные из прикладной программы выгружаются во внешний текстовый файл в xml–формате. Для выгрузки используется присоединённая форма, формирующая xml–тэги. Выгруженные данные используются COM–компонентом формирования отчёта, который на основе шаблона формирует выходные документы в формате MS Word. Такие документы могут быть распечатаны, сохранены на диске, отправлены по почте клиентам.
Представляет собой COM–компонент, извлекающий данные из xml–файла и формирующий документ[ы] MS Word по заданному шаблону. Компонент формирует документы, содержащие не более одной таблицы спецификации (напр., счета, накладные, платёжные поручения и т.п.).
Для извлечения данных используется, в свою очередь, системный компонент (xml–parser) “Microsoft.XMLDOM”. Компонент (файл xml2word.wsc) написан на языке JavaScript, открыт для доработок и исполняется в операционной системе MS Windows 9x/NT/2000 с установленной системой Windows Scripting Host.
Компонент имеет следующие свойства и методы:
xmlFileName – имя файла, содержащего данные;
dotPath – каталог, содержащий шаблон отчёта (имя шаблона содержится в атрибуте dotfile тэга <doc>);
pathToSave – каталог, в котором будут сохранены отчёты в формате MS Word;
execute – метод, выполняющий формирование отчёта. При отсутствии ошибок метод возвращает пустую строку, иначе – код и описание ошибки. В процессе анализа xml–данных и шаблона отчёта возможные конфликты (состав и порядок следования информационных полей/тэгов) разрешаются в пользу шаблона è лишняя информация не используется, порядок полей – из шаблона.
Непосредственно преобразует выходной поток в файл xml–формата. Формируется по правилам разработки присоединённых форм с использованием компилятора FCOM и помещается в загружаемый ресурс (напр., XML.res). Заготовка формы может быть сформирована с помощью инструментария по шаблону отчёта.
При разработке нескольких отчётов на одной базовой форме целесообразно в присоединённой форме выводить всю информацию (все поля базовой формы), а отбор полей выполнять с помощью шаблона.
Представляет собой шаблон MS Word, содержащий поля для информации и элементы оформления выходного отчёта. Для разметки полей используются элементы Bookmarks(закладки), CustomProperties(дополнительные свойства) и Variables(внутренние переменные). Шаблон разрабатывается пользователем средствами MS Word (шрифтовое, цветовое, графическое оформление) с использованием инструментария (разметка полей, заготовка присоединённой формы). При изменениях шаблона модификации присоединённой формы не требуется.
Используется стандартный компонент MS Office 2000/XP в режиме сервера OLE-автоматизации под управлением компонента XML2Word.dkms. Формирует документ по шаблону, заполняет поля информацией, сохраняет и печатает выходные отчёты.
Используется в качестве среды исполнения для инструментария. Инструментарий использует средства MS Office Assistant.
Используется для запуска компонентов пакета по событию формирования отчёта прикладной программой. Состоит из двух компонентов:
монитор LOGMON.EXE – отслеживает момент генерации/изменения xml–файла и запускает скрипт;
скрипт MakeFromXML.vbs – инициирует компонент XML2Word.dkms и вызывает метод execute.
Используется для разметки шаблона отчёта и генерации заготовки присоединённой формы. Состоит из набора VBA–макросов, находящихся в файле XML4Gal.dot. Запуск макросов производится с помощью кнопок панели/toolbar «Работа с отчётом»
Разархивируйте XML4Gal.zip в отдельный каталог, напр., C:\XML4Gal. Создайте каталоги C:\XML4Gal\DOT и C:\XML4Gal\DOC.
Зарегистрируйте компонент XML2Word.dkms: в окне Explorer для файла xml2word.sct выполните команду контекстного меню “Register” (зарегистрировать). Выполните на компьютере, который будет выполнять формирование выходных отчётов.
Подключите инструментарий: в меню MS Word “Tools/Template and Add-Ins” добавьте и подключите файл C:\XML4Gal\XML4Gal.dot. Выполните на компьютере, на котором будет выполняться разработка шаблонов отчетов.
Сформируйте в MS Word новый документ типа «шаблон» и сохраните его в каталоге C:\XML4Gal\DOT под именем, например, MyReport.dot.
Выберите базовую форму системы «Галактика», которая будет прототипом для присоединённой формы (напр., prbdoc). Создайте пользовательские переменные (меню File/Properties/Custom) с именами GalPrototype и GalGroup и значениями «prbdoc» и «Продажа» соответственно. В поля Title и Subject (меню File/Properties/Summary) внесите строки «Счет СТАНДАРТНЫЙ (для России)» и «Печать через XML и Word-сервер». Эти поля и переменные будут использованы при формировании заготовки присоединённой формы.
Впишите в предполагаемые позиции вывода информации имена соответствующих полей базовой формы (напр., nomer, post и т.д.). Для удобства форматирования используйте таблицы с переменной шириной и высотой ячеек даже для полей, не входящих в табличную часть документа (спецификацию).
Оформите внешний вид отчёта с использованием шрифтов, стилей, графических вставок и т.п.
Выполните разметку полей, не входящих в спецификацию: выделите соответствующее имя, выполните макрос AddBookmark, ответьте на вопросы о типе и формате информации. Процедура создаёт набор «закладок» и внутренних переменных файла MyReport.dot.
Укажите таблицу в шаблоне, которая будет заполняться информацией спецификации (только для документов типа счетов/накладных, для документов типа платёжных поручений не требуется). Выделите таблицу и выполните макрос AddSpection. Таблица помечается закладкой с зарезервированным именем spec_table.
Выполните разметку полей для колонок таблицы спецификации: выделите соответствующую ячейку с именем поля, выполните макрос SetTagForSpecCol.
Проверить разметку полей можно с помощью макроса ShowBookmarks (кнопка панели/toolbar «Работа с отчётом»), который каждому отмеченному полю сопоставляет комментарий с именем поля (подсветка жёлтым цветом).
На разработанном шаблоне (см. 4.1 выше) выполните макрос MakeXMF, который сформирует файл MyReport.xmf, содержащий заготовку присоединённой формы. Заготовка содержит заголовок, перечень использованных в шаблоне полей, два цикла (по документам и по строкам спецификации) и шаблоны для формирования XML–тэгов.
Добавьте в заготовку циклы и др. необходимые элементы базовой формы, измените, если необходимо, информацию заголовка формы и режим формирования/печати отчёта (см. ниже). Присоединённая форма должна формировать выходной файл со структурой, описанной в 4.4 ниже.
Скомпилируйте форму в ресурс XML.res.
Настройте монитор Logmon.exe на запуск скрипта MakeFromXML.vbs с параметром «имя_результирующего_xml_файла» в каталоге C:\XML4Gal при изменениях результирующего файла (MyReport.xml в каталоге OUT).
Обеспечьте (параметрами в galnet.cfg) загрузку ресурса XML.res на рабочем месте системы «Галактика».
В соответствующем интерфейсе запустите печать документа в разработанную присоединённую форму. Закройте окно с xml–файлом.
Формирование xml–файла и печать отчёта не обязательно выполнять на одном компьютере. Параметр скрипта MakeFromXML.vbs может содержать имя протокола (напр., http://…), что даёт возможность выполнить формирование и печать документов на удалённом компьютере (LAN, Intranet).
<?xml version="1.0" encoding="cp866"?>
Заголовок файла, кодировка символов. Обязательный тег
<doclist nPrint="1" saveDoc="1">
Список документов, в атрибутах – режим формирования:
nPrint – количество печатных копий (-1 – запросить пользователя)
saveDoc – сохранение документа в файле (0 – не сохранять)
<doc dotfile="MyReport.dot">
dotfile - имя файла с шаблоном отчёта
<field protName="sdoc"><![CDATA[ данные ]]></field>
........
По количеству «простых» полей документа (protName – имя поля в прототипе).
<spec_table>
Спецификация
<row>
<col protName="Np"><![CDATA[ данные ]]></col>
........
По количеству колонок спецификации документа.
</row>
........
По количеству строк спецификации документа.
</spec_table>
</doc>
........
По количеству документов в файле.
</doclist>