АВТОМАТИЗИРОВАННАЯ СИСТЕМА
РАСЧЕТОВ ЗА УСЛУГИ СВЯЗИ
«Fastcom»
версия 12
Руководство программиста.
Создание отчётов типа XML+XSLT.
Всего страниц -
Оглавление
Введение 3
Структура отчётов типа XML 4
Запросы и типы данных 4
Вложенные запросы 5
Сокращение выводимой информации 7
Применение XSLT 10
Атрибуты элементов 10
Заранее неизвестная структура вложенности 10
Печатные макеты 11
Деловая графика 12
Штрих-коды 12
Code128 12
Code39 13
EAN13 13
PDF417 13
QR 14
Выполнение из WEB-интерфейса пользователя АСР 14
Создание отчёта 15
Вызов XML-отчёта из собственных скриптов и внешних приложений 19
Формирование XML-схемы отчета 21
Введение
XML – Extended Markup Language – расширяемый язык разметки, предназначенный для представления структурированных данных. Является наследником языков разметки SGML и HTML. Текущая стандарт для версии 1.0 принят консорциумом W3C в 2008 году (http://www.w3.org/TR/2008/REC-xml-20081126/).
XML нашёл широкое применение, как универсальный формат обмена данными между различными программными системами, в том числе:
Контент-менеджера для Web-сайтов;
Конфигурационные файлы программного обеспечения;
CommerceML – единый формат обмена коммерческой информацией. Применяется в программных продуктах 1С для обмена каталогами, заказами и другими документами;
Системы документирования (DocBook и др.);
Язык разметки Web-страниц (XHTLM, более строгая версия языка HTML, использующая все правила XML);
Язык представления описания векторной графики SVG (Scalable Vector Graphics);
Представление документов в электронном виде в Федеральную Налоговую Службу (http://nalog.ru/otchet/el_vid/forms/forms5/);
и т.д.
Для преобразования данных, представленных в виде XML в другие форматы (XML и текстовые) разработано семейство рекомендаций под общим названием XSL (eXtensible Stylesheet Language), в которое входят:
XSLT (XSL Transformations) – язык преобразования XML-документов;
XSL-FO (XSL Formatting Objects) – язык разметки типографских макетов;
XPath – язык путей и выражений, используемый для доступа к отдельным частям XML-документов.
Настоящий документ описывает технологию формирования отчётов в формате XML, применяемую в АСР Fastcom, и предполагает наличие у разработчика отчётов базовых знаний о стандартах XML 1.0, XSLT 1.0. При отсутствии таких знаний рекомендуется ознакомиться со следующими материалами:
http://citforum.ru/internet/xml/ - Язык XML - практическое введение;
http://citforum.ru/internet/xslt/index.shtml– перевод стандарта XSLT на русский язык (не является официальным переводом).
Структура отчётов типа XML
Запросы и типы данных
Язык XML создан для представления структурированной информации, поэтому при разработке механизма генерации XML-отчётов в АСР Fastcom было уделено внимание структуре данных, но не их оформлению. Данные в формате XML представляются вложенными секциями, например:
ФЛ-2012/101
2012-05-20
Иван
Иванов
В АСР Fastcom каждая вложенная секция соответствует строке, возвращаемой простым запросом на языке SQL. Например, запрос SELECT CODE, NAME FROM RF_T_SERVICE_KIND
Сгенерирует XML-файл примерно следующего содержания:
LL_TRAF_IN
Объём входящего трафика
SMS_INFO
SMS-оповещение
При генерации XML действуют следующие правила:
Для каждой строки результата запроса создаётся секция, в проведённом примере - ;
Наименования столбцов приводятся к нижнему регистру, и выводятся в виде отдельных элементов;
Значения NULL выводятся в результирующий XML в сокращённой форме вида ;
Допускается выводить в XML значения типа «строка» (VARCHAR2), «число» (NUMBER), «дата» (DATE), «отметка времени» (TIMESTAMP, TIMESTAMP WITH TIMEZONE, TIMESTAMP WITH LOCAL TIMEZONE). Значения форматируются в следующем виде:
Строка – как есть. Если в строке могут встречаться спецсимволы XML, такие как “<�”, “&” и т.д. – получившийся файл может быть некорректным. В таком случае Вам придётся позаботиться о преобразовании таких символов в допустимый для XML вид самостоятельно, например с помощью вызова RP_P_XML.X:
SELECT RP_P_XML.X(‘<&>’) “bad_data” FROM DUAL
Преобразование не производится автоматически исходя из соображений производительности. Также Вам предоставляется самостоятельно собрать корректные конструкции XML внутри значений столбцов. При необходимости Вы можете включить режим автоматического преобразования строк для всего запроса с помощью соответствующего поля формы ввода запроса;
Число преобразуется к формату FM9999999999999999999.9999999999999999. Если такой формат не подходит – выполните преобразование в подходящий формат самостоятельно, используя функцию Oracle TO_CHAR;
При работе со значениями типов DATE и TIMESTAMP в результирующий XML данные выводятся в формате ‘YYYY-MM-DDTHH24:MI:SS’ или ‘YYYY-MM-DDTHH24:MI:SS.FFFFTZH:TZM’, что соответствует принятому в стандарте XML Schema1 типу данных dateTime. Символ ‘T’ не распознаётся Oracle в качестве элемента формата данных, поэтому при подстановке значений во вложенные запросы (в виде выражений {ИМЯ}) используются более привычные для Oracle форматы: ‘YYYY-MM-DD HH24:MI:SS’ для DATE, ‘YYYY-MM-DD HH24:MI:SS.FFFF’ для TIMESTAMP и ‘YYYY-MM-DD HH24:MI:SS.FFFF TZR’ для TIMESTAMP WITH TIMEZONE и TIMESTAMP WITH LOCAL TIMEZONE. Значения TIMESTAMP WITH LOCAL TIMEZONE выводятся по текущей временной зоне сессии, формирующей отчёт.
Использование других типов данных приведёт к ошибке выполнения отчёта.
Длина значения вместе с тегами и отступами не должна превышать 4000 символов.
Вложенные запросы
Для построения более сложных XML-отчётов применяются вложенные запросы, например для выгрузки всех объектов договоров по типам можно применить следующие запросы: SELECT CODE, NAME FROM RF_T_OBJECT_TYPE
и подчинённый запрос SELECT ID, IDENTIFER, HIST_FROM, HIST_TO, CONTRACT_ID
FROM CT_T_OBJECT
WHERE OBJECTTYPE_CODE=’{CODE}’
В результате получим XML-отчёт следующего вида:
PHONE
Телефон
LLINE
Выделенная линия
Для каждой строки запроса, перечисляющего типы договоров, был выполнен вложенный запрос. Результаты выполнения вложенного запроса размещаются внутри соответствующей секции вышестоящего запроса. В приведённом выше примере для типа объекта PHONE подчинённый запрос выдал две строки, а для типа объекта LLINE – ни одной.
В подчинённом запросе использована конструкция {CODE}, с помощью которой подчинённых запрос сослался на результаты вышестоящего запроса. Значение каждого столбца результирующих строк запроса доступно в подчинённых запросах любого уровня вложенности через конструкцию {ИМЯ}. Подстановка значений выполняется непосредственно в текст запроса, поэтому для строковых значений необходимо заключать конструкцию {ИМЯ} в кавычки для соблюдения синтаксиса языка SQL. Например:
… WHERE OBJECTTYPE_CODE=’{CODE}’
будет преобразовано в WHERE OBJECTTYPE_CODE=’LLINE’, что является синтаксически правильной конструкцией. Конструкция вида
… WHERE OBJECTTYPE_CODE={CODE}
будет преобразована к виду WHERE OBJECTTYPE_CODE=LLINE. Если столбец LLINE не определён, выполнение запроса завершится с ошибкой. Если определён – запрос будет синтаксически-правильным, но будет выдавать не те данные, которые ожидает разработчик. Тем не менее, иногда может иметь смысл выбирать имена столбцов или таблицы источника данных, основываясь на параметрах отчёта или результатах выполнения вышестоящих запросов.
Часто для связи сущностей используются числовые или символьные идентификаторы, не несущие смысловой нагрузки. Так в вышеприведённом примере значение поля CODE может быть не интересно получателю отчёта, но для того, чтобы сослаться на его значение в подчинённом запросе приходится выводить его в результирующий XML. Чтобы этого избежать, достаточно переименовать столбец результатов, включив в его наименование знак ‘$’. Подсистема генерации XML-отчётов не выводит такие значения в результирующий XML, но позволяет пользоваться ими во вложенных запросах: SELECT CODE “CODE$”, NAME FROM RF_T_OBJECT_TYPE;
SELECT IDENTIFER FROM CT_T_OBJECT WHERE OBJECTTYPE_CODE=’{CODE$}’;
Та же конструкция {ИМЯ} позволяет обращаться к параметрам вызова отчёта.
В том случае, если запрос имеет столбцы, имена которых совпадают с параметрами отчёта или именами столбцов вышестоящих запросов, то для вложенных запросов становятся доступны только эти значения. Например:
Отчёт параметрами CODE=’LLINE’, YEAR=’2012’ SELECT ‘ZZZ’ CODE, NAME FROM X WHERE X.CODE=’{CODE}’
--здесь{CODE}=LLINE, {YEAR}=2012 SELECT PARENT, DESCRIPTION FROM Y WHERE CODE=’{CODE}’
-- здесь {CODE}=ZZZ, {YEAR}=2012
Из вложенного запроса нет возможности обратиться к исходному значению переопределённого параметра. При необходимости такого обращения создавайте псевдонимы для значений, например:
Отчёт параметрами CODE=’LLINE’, YEAR=’2012’ SELECT ‘ZZZ’ CODE, NAME, CODE P_CODE$ FROM X WHERE X.CODE=’{CODE}’
--здесь{CODE}=LLINE, {YEAR}=2012 SELECT PARENT, DESCRIPTION FROM Y WHERE CODE=’{P_CODE$}’
--здесь{CODE}=ZZZ, {YEAR}=2012, {P_CODE$}=LLINE
Сокращение выводимой информации
В вышеприведённом примере выводимые в отчёт секции object содержат идентификатор договора. Структура базы данных АСР Fastcom позволяет иметь на одном договоре множество объектов.
В случае, если необходимо каждому выводимому в отчёт объекту сопоставить информацию о договоре (дата, номер), можно использовать еще один вложенный запрос вида: SELECT CONTRACT_NO, CONTRACT_DATE FROM CT_T_CONTRACT
WHERE ID=’{CONTRACT_ID}’
, но при этом информация о договоре, имеющем несколько объектов, будет выведена в отчёт несколько раз, что увеличит объём результирующего файла. Кроме того, вложенный запрос может быть затратным в вычислительном плане, и вычислять его с одними и теми же параметрами десятки раз – накладно.
Для обработки этой ситуации предлагается использовать механизм хранимых именованных наборов: во время выполнения отчётов можно накапливать значения в оперативной памяти, а затем использовать их в качестве таблиц для следующих запросов, например:
SELECT CODE$, NAME FROM RF_T_OBJECT_TYPE
SELECT ID, IDENTIFER, HIST_FROM, HIST_TO,
RP_P_XML.MN(‘CONTRACT’,CONTRACT_ID)CONTRACT_ID
FROM CT_T_OBJECT WHERE OBJECTTYPE_CODE=’{CODE$}’
SELECT ID, CONTRACT_NO, CONTRACT_DATE FROM CT_T_CONTRACT
WHERE ID IN ( SELECT DISTINCT COLUMN_VALUE FROMTABLE(RP_P_XML.RN(‘CONTRACT’)))
Вызов RP_P_XML.MN(NAME, VALUE) добавляет числовое значение VALUE в именованный список NAME. Значение NAME – любая строка длиной до 32 символов. Также существуют вызовы MS для строковых данных, MD для данных типа «дата», MT для данных TIMESTAMP, MZ для данных TIMESTAMP WITH TIME ZONE, ML для данных TIMESTAMP WITH LOCAL TIME ZONE.
Запрос “2.” Использует конструкцию SELECT COLUMN_VALUE FROM TABLE(RP_P_XML.RN(NAME)). Результатом такого запроса будут все числа, сохранённые в наборе NAME. К результатам допустимо применять любые операции SQL – сравнение, сортировка, объединение с другими таблицами и т.д.
Каждая из функций M<�тип данных> имеет аналогичную функцию R<�тип данных>, возвращающую содержимое именованного списка соответствующего тип данных.
Результатом выполнения отчёта, составленного из приведённых выше запросов, будет XML следующего вида:
PHONE
Телефон
207
ЁЖ-2004/1002
2004.08.16T00:00:00
Функции R<�тип> имеют второй параметр, при указании в котором значения ‘Y’ после возврата значений списка будет выполнена его очистка. Таким образом Вы можете сделать областью видимости именованного списка один из подзапросов, например
SELECT * FROM TABLE1
SELECT RP_P_XML.MN(‘A’,ID), COUNT(ID) FROM TABLE2 WHERE X={Y}
SELECT * FROM TABLE2 WHERE ID IN (SELECT COLUMN_NAME FROM RP_P_XML.RN(‘A’,’Y’))
Первый вызов запроса «a» запишет некоторые данные в именованный список ‘A’. Запрос «b» выберет данные из списка ‘A’, и очистит его. Следующий вызов запроса «a» (для следующей строки запроса «1») начнёт «с чистого листа». Если опустить второй параметр (‘Y’) у запроса «b», то второй вызов запроса «a» будет добавлять данные к уже имеющемся в сохранённом списке данным.
Применение XSLT
Настоящая глава не является учебником по XSLT, а только отвечает на вопросы «не получается сделать XML вот такого формата, как быть?».
Атрибуты элементов
Система генерации XML-отчётов не позволяет задавать атрибуты элементов в формате , но для некоторых форматов обмена это необходимо. Выполнить XSL-преобразование к такому виду очень просто. Шаблон
выполнит преобразование XML-элемента
value1
value2
к виду
Заранее неизвестная структура вложенности
Система генерации XML-отчётов в АСР Fastcom предполагает, что структура вложенности элементов известна заранее. Иногда бывает, что элемент может быть вложен в другой элемент такого-же типа неограниченное количество раз, например:
country
Россия
state
Свердловская область
city
Екатеринбург
zone
ВИЗ
Сгенерировать такой файл из АСР Fastcom непосредственно невозможно – сколько будет вложенных элементов неизвестно.
Для решения этой проблемы предлагается выгрузить элементы линейно, используя сохраняемые именованные наборы значений и/или конструкции SQL CONNECT BY PRIOR, снабдив элементы XML кодами привязки. Должен получиться XML следующего вида:
<id>100</</b>id>
country
Россия
200
100
state
Свердловская область
300
200
city
Екатеринбург
XSLT-конструкция вида
select=”../geo[parent = $cur]”/>
приведёт данные к желаемому виду.
Печатные макеты
Подсистема генерации отчётов АСР Fastcom умеет применять XSL-FO преобразование, используя библиотеку Apache FOP 2.1, распространяемую по лицензии Apache. Для получения файла в формате PDF необходимо предварительно выполнить XSL-преобразование в формат XSL-FO.
Преобразование может быть как создано вручную, так и с помощью сторонних WYSIWYG-редакторов, например Ecrion XF Designer.
Подсистема генерации отчётов автоматически определяет необходимость применения Apache FOP к результатам XML-преобразования по расширению имени файла, задаваемому через параметр отчёта SPOOL_FILE. (Подробнее о параметрах отчётов в документе «Порядок администрирования отчётов.doc»). Если расширение имени файла есть PDF, RTF, PS, PNG, TIFF (Форматирование в RFT и TIFF с текущей версией Apache FOP не рекомендуется – результат неудовлетворительный), XSLT-преобразование отчёта должно в результате выдавать корректный файл FO, который будет обработан библиотекой Apache FOP и выведен в требуемый формат.
Деловая графика
При необходимости включения в отчёты деловой графики предлагается использовать векторную графику в формате SVG (http://www.w3.org/Graphics/SVG/). Формат является расширением XML, поэтому преобразование в него Ваших данных возможно выполнить за одно XSL-преобразование. Также SVG-графика может быть обработана библиотекой Apache FOP с преобразованием в PDF или PNG (растровый графический формат).
В каталоге FASTCOM_HOME/REP/XML/diagram приведены готовые XSL-преобразования, которые можно использовать в своих отчётах, и примеры их использования.
Штрих-коды
Для генерации штрих-кодов Fastcom Report Producer использует библиотеку Barcode4J (http://barcode4j.sourceforge.net). Все описанные в разделе примеры штрих-кодов реализованы в библиотеке Barcode4J2, а не в коде Fastcom Report Producer. Повлиять на форматы XML-конструкций, добавить какие-то поля и т.д. разработчики АСР Fastcom не имеют возможности.
В состав АСР Fastcom входит отчёт XML$BARCODES, демонстрирующий возможности по генерации штрих-кодов.
Для вставки штрих-кодов в отчёты, форматируемый Apache FOP, используйте следующие конструкции:
В «заголовок» XSLT-файла отчёта поместите следующее объявление:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:bar="http://barcode4j.krysalis.org/ns"
>
Для вставки штрих-кодов в документ используйте следующие конструкции:
WIN32-версия может выполнять отчёты XML и XSLT-преобразования, используя свободно-распространяемые библиотеки iconv, libxml2, libxslt и zlib. Эта версия не может выполнять преобразования FOP.
Java-версия может выполнять отчёты XML и XSLT-преобразования с использованием библиотеки Apache Xalan, и FOP-преобразования с использованеим библиотеки Apache FOP.
Программа REPORT$XML диспетчера отчётов содержит обращение к действию Apache FOP, поэтому выполнение XML-отчётов без Java-версии приложения Fastcom Report Producer невозможно. Если Вы не испытываете необходимости в применении FOP-преобразований, Вы можете удалить это действие из программы REPORT$XML, и в этом случае для выполнения обычных XML+XSLT-отчётов Java-версия не потребуется.
Создание отчёта
Процедура общего описания отчёта аналогична созданию любого другого отчёта:
Создать отчёт в форме «Меню Fastcom/Администрирование/Отчёты/Отчёты».
Установить тип отчёта – XML+XSLT.
При этом имя файла отчёта станет необязательным полем, и появится кнопка «Запросы XML».
В поле «имя файла» ввести имя файла, содержащего таблицу стилей XSL-преобразования (программу преобразования). Файл должен находиться в каталоге FASTCOM_HOME/REP/XML.
Нажать кнопку «Запросы XML», и создать корневой запрос для отчёта.
В поле «XML-элемент» ввести имя элемента для каждой строки запроса.
Правила разметки документов XML предполагают, что документ содержит один и только один корневой элемент, поэтому корневой запрос отчёта необходимо составить так, чтобы он выдавал одну и только одну строку результатов, например запрос SELECT 1 IGNORE$ FROM DUAL
приведёт к выдаче единственной секции с именем (в данном случае) – report :
, внутри которой будут содержаться результаты выполнения остальных запросов.
Это также подходящее место для включения в результаты запроса копий значений входных параметров и/или общих для всего отчёта данных: SELECT CURRENT_DATE GENERATED, ‘{REQUESTED_BY}’ AUTHOR FROM DUAL
сгенерирует XML-документ вида
2012-05-30T12:42:00
Иванов Иван Иванович
, где CURRENT_DATE – системная функция, возвращающая текущую дату, {REQUESTED_BY} – значение соответствующего параметра отчёта.
Поле «Экранировать» указывает необходимость обработки спецсимволов языка XML, которые могут встречаться в результатах запроса (символы <, >, &). Установка значения в «Да» приведет к автоматической замене этих символов ВО ВСЕХ СТРОКОВЫХ СТОЛБЦАХ запроса на соответствующие последовательности (<>&), и приведёт к некоторому снижению производительности, особенно заметному за простых запросах, выдающих большое количество строк.
При необходимости ввести подчинённые запросы, использовав действие «Добавить подчинённый».
В форме ввода отчёта, в поле «Запрос XML» выбрать созданный корневой запрос отчёта.
На основании одного запроса (дерева подчинённых запросов) можно построить множество отчётов, различающихся используемым стилем XSL-преобразования и/или значениями скрытых параметров.
Сохранить отчёт, и ввести параметры его вызова:
Обязательным параметром для отчётов типа XML+XSLT является параметр SPOOL_FILE, задающий имя файла для вывода отчёта из «толстого» интерфейса Oracle Forms, и использующийся для вычисления расширения имени файла при формировании отчёта из «тонкого» Web-интерфейса пользователя АСР.
Добавьте отчёт в необходимые группы и установите права пользователей на использование отчёта.
Вызов XML-отчёта из собственных скриптов и внешних приложений
XML-отчёты могут использоваться не только в интерактивном режиме, но и для выполнения из внешних программ и скриптов.
При выполнении отчёта в оперативной памяти Oracle Database создаются и используются структуры, используемые для хранения результатов вышестоящих запросов и именованных наборов значений. При запуске отчётов важно выполнять очистку этих областей памяти, в противном случае вы рискуете получить некорректные данные в отчёте или использовать слишком много ресурсов сервера на уже не нужные задачи.
Для выполнения XML-отчёта необходимо выполнить следующие действия:
Очистить контекст отчёта (области оперативной памяти), выполнив процедуру RP_P_XML.NS_RESET. Если соединение с Oracle создано только для выполнения одного XML-отчёта, то очистку контекста можно не выполнять.
Установить значения параметров отчёта, выполнив вызовы RP_P_XML.S(NAME, VALUE), где:
NAME – строка, имя параметра,
VALUE – строка, значение параметра.
Установить в контекст значение идентификатора корневого запроса XML-отчёта вызовом RP_P_XML.SET_QUERY_ID(P_ID), где P_ID – идентификатор запроса в таблице RP_P_XML_QUERY.
Выбрать строки отчёта из представления RP_V_XML_REPORT.
Очистить контекст отчёта для освобождения ресурсов - RP_P_XML.NS_RESET.
Пример скрипта, генерирующего XML-отчёт (для утилиты SQLPLUS): -- уберём лишний вывод
set feed off term off ver off show off pau off
set pagesize 0
set linesize 0
set echo off
set trims on
set trim on
set newpage none
set underline off
BEGIN
-- очистка контекста
RP_P_XML.NS_RESET;
-- установка параметров
RP_P_XML.S(‘OWNER’,’1’);
RP_P_XML.S(‘CONTRACT_ID’,’12341’);
-- установим корневой запрос
RP_P_XML.SET_QUERY_ID(117);
END;
/ COL S FORMAT A4000 SPOOL result.xml
-- заголовок XML-файла
PROMPT -- выберем строки отчёта
SELECT COLUMN_VALUE S FROM RP_V_XML_REPORT; SPOOL off
QUIT
Из-за особенностей Oracle Database при возникновении ошибки в одном из вложенных запросов сообщение об ошибке в большинстве случаев будет содержать неактуальные данные, а именно код ошибки и никакой расшифровки.
Получить настоящий текст ошибки можно вызывав функцию RP_P_XML.GET_ERROR_TEXT, или выполнив отчёт RP_MESSAGES с параметром «подсистема АСР», установленным в XML REPORT.
Преобразование XSLT внутри Oracle Sever не выполняется. При необходимости воспользуйтесь утилитой H:\BIN\XML\xsltproc.exe или утилитой oraxsl из комплекта Oracle Database Server или Oracle Client.
Формирование XML-схемы отчета
Иногда для обмена данными с другими компаниями или работы с WYSIWYG-редакторами XML требуется описание структуры XML-файла, называемое XML Schema. АСР Fastcom предлагает отчёт с кодом XML_GENERATE_XSD, выполняющий генерацию схемы для XML-запроса, включая подчинённые запросы.
При работе отчёта выполняется разбор XML-запросов, при этом вместо параметров подставляются пустые строки. Следует писать XML-запросы так, чтобы они сохраняли синтаксическую правильность и без указания параметров, например в запросе: SELECT CONTRACT_NO FROM CT_T_CONTRACT WHERE ID={CONTRACT_ID}
при обработке отчётом XML_GENERATE_XSD параметр {CONTRACT_ID} будет заменён на пустую строку. Получившийся запрос SELECT CONTRACT_NO FROM CT_T_CONTRACT WHERE ID=
не является синтаксически корректным, и XML-схема для такого запроса не будет построена. При подстановке числовых значений безопасно добавлять лидирующий символ ‘0’, например так: SELECT CONTRACT_NO FROM CT_T_CONTRACT WHERE ID=0{CONTRACT_ID}
при генерации схемы запрос будет оканчиваться вполне корректной с точки зрения языка SQL конструкцией WHEREID=0, запрос будет проанализирован и схема составлена. При использовании запроса лидирующий ноль не внесёт изменения в поведение запроса: конструкция WHEREID=0123 равносильна конструкции WHEREID=123.
Сформированную отчётом схему следует рассматривать не как готовый продукт, а как шаблон для ручного редактирования, т.к. генератор не имеет полной информации о возможных результирующих данных, и не определяет ограничений на данные. Так, например, нет возможности автоматически выяснить, сколько строк вернёт тот или иной запрос – всегда одну, всегда больше одной, одну или ни одной и т.д. Неизвестно, может ли значение элемента быть NULL, быть только целым положительным, и т.д.
1 XML Schema – стандарт описания структуры XML-документов. Позволяет проверить корректность оформления XML-документа стандартными средствами, до загрузки документа в основное приложение. Описание стандарта: http://www.w3.org/standards/xml/schema
2 В текущей версии Fastcom Report Producer используется модифицированная версия библиотеки Barcode4J, т.к. при использовании «стандартной» версии библиотеки возникает конфликт по зависимостям с библиотекой Jasper Reports. Если Вы по каким-то причинам захотите заменить версию библиотеки Barcode4J на другую – приготовьтесь к тому, что её придётся собирать из исходных кодов с учётом других библиотек, используемых Fastcom Report Producer, и устранять «ошибки», появившиеся в Barcode4J из-за «неродных» версий библиотек.
Исходный код модифицированной библиотеки находится в %FATCOM_HOME%/SRC/fpr/gpl
Оглавление
Услуги связи по передаче данных и телематические услуги связи, оказываемые по сетям фиксированной связи альтаир-тула
Руководство пользователя оглавление
Данный документ описывает порядок и правила установки отчетов для пк мастер-Тур и отображения ссылок на печатные формы отчетов на...