Разработка приложения по автоматизации продаж кредитных продуктов через офисы банка

Автоматизация работы кредитного отдела банка, решений бизнес-процесса выдачи кредитов и карт. Определения методологии и языка IDEF0, программа Dreamweaver. Правильно построенные и действительные документы XML. Создание отчётов с помощью JasperReports.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 22.06.2013
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Работа, выполняемая в рамках одноименного процесса. По основному заемщику заполняются соответствующие анкетные данные.

Прикрепление документов

Форма позволяет добавить скан необходимых документов персоны.

Выбор продукта

Работа, выполняемая одноименным подпроцессом. Используется для выбора кредитного продукта, который будет вместе с основным заемщиком будет использован для формирования заявки.

Добавление сущности в заявку

Работа предполагает вызов сервиса заявок. Первый раз выполняется для формирования заявки, последующие разы - для добавления новых сущностей (залог и поручители) в заявку.

Сервис заявки по переданному id продукта проверяет полноту заявки и возвращает указание на недостающие типы сущностей либо подтверждает полноту заявки.

Управление структурой заявки

Сотрудник Банка видит структуру заявки: списки поручителей и объектов залога, а так же итоги проверки полноты заявки.

Условия ветвления:

Сотрудник может удалить выбранную сущность из заявки, перейдя на работу Удаление сущности из заявки

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

Если заявка соответствует структуре, определяемой продуктом, Сотрудник может завершить процесс.

Удаление сущности из заявки

Работа выполняется сервисом заявок. В сервис передается id Заявки и id удаляемой сущности. Сервис возвращает критерий полноты заявки.

Ввод/Изменение информации о поручителе

Работа, выполняемая в рамках одноименного подпроцесса.

Ввод/Изменение информации о залоге.

Работа, выполняемая в рамках одноименного подпроцесса

В работе процесса участвуют следующие подпроцессы:

· Выбор продукта

· Ввод/Изменение информации о поручителе

· Ввод/Изменение информации о залоге.

4.5 Подпроцесс Заведения/Обновления персоны

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

4.5.1 Схема подпроцесса

Рисунок 4.5.1 - Схема подпроцесса "Заведение/Обновление персоны"

Входы/выходы процесса:

· Контекст процесса на входе должен содержать id персоны, который может быть равен null, если персона должна быть заведена в рамках подпроцесса.

· На выходе подпроцесса, как минимум содержится id персоны.

4.5.2 Шаги процесса

Таблица 4.5.2 - Описание шагов процесса

Шаг

Описание

Ветвление по содержанию id персоны

Если id персоны на входе null, значит, подпроцесс вызывается для заведения персоны, иначе - для обновления данных о персоне, заведенной ранее

Чтение данных о персоне

Данные о персоне с заданным id запрашиваются через сервис персон и помещаются в контекст процесса для последующего обновления.

Ввод анкеты. Шаг 1.

На форму вводятся или обновляются данные персоны по Шагу 1. Данные персоны берутся из контекста и после редактирования помещаются в контекст. Справочники полей формы строятся отдельным серверным скриптом, который запрашивает их на стороне сервиса справочников.

Ввод анкеты. Шаг 2.

На форму вводятся или обновляются данные персоны по Шагу 2. Данные персоны берутся из контекста и после редактирования помещаются в контекст. Справочники полей формы строятся отдельным серверным скриптом, который запрашивает их на стороне сервиса справочников. Тот же скрипт обеспечивает вызов сервиса поиска по КЛАДР.

Запись данных о персоне

Данные о персоне передаются сервису персон. Сервис персон, если передаваемый id равен null, создает новую запись о персоне, иначе - обновляет существующую.

4.6 Подпроцесс "Внутренняя проверка персоны"

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

В отношении подпроцесса на уровне продукта или направления бизнеса можно задать следующие параметры:

· Проверка на терроризм/экстремизм (CONTROL_TERRORISM):

o Нет проверки (NO_TERRORISM). Принимается как значением по умолчанию.

o Отказ, если персона в списках (REJECTION_TERRORISM)

o Ручной контроль через подпроцесс Детализация списков террористов (MANUAL_TERRORISM)

o Вызов дополнительной работы (ADDITIONAL_TERRORISM)

· Бал отсечения (TERRORISM_SCORE) - бал (0-1), возвращаемый сервисом проверки на терроризм/экстремизм, по факту значению которого персона подлежит отказать, либо осуществить дополнительную проверку. Значение по умолчанию: 1.

· Проверка по списку недействительных паспортов (CONTROL_PASSPORT):

o Нет проверки (NO_PASSPORT). Принимается как значение по умолчанию.

o Отказ, если паспорт в списках (REJECTION_PASSPORT)

o Вызов дополнительной работы (ADDITIONAL_PASSPORT)

4.6.1 Схема подпроцесса

Рисунок 4.6.1 - Схема подпроцесса "Внутренняя проверка персоны"

Входы/выходы процесса:

· На входе контекст содержит id персоны и id продукта

· На выходе контекст содержит, как минимум, id персоны и итоги проверки: пройдена/не пройдена.

4.6.2 Шаги процесса

Таблица 4.6.2 - Описание шагов процесса

Шаг

Описание

Чтение данных персоны

Id персоны передается в сервис персон. Сервис персоны, возвращает идентификационные данные персоны, которые перемещаются в контекст.

Чтение управляющих параметров

В сервис продуктов отправляется запрос на чтение параметров подпроцесса. Сервис возвращает значения параметров, которые помещаются в контекст.

Условия ветвления:

Если CONTROL_TERRORISM = NO_TERRORISM и CONTROL_PASSPORT = NO_PASSPORT, подпроцесс завершается.

Если CONTROL_TERRORISM! = NO_TERRORISM, процесс уходит на работу "Проверка на терроризм".

Если CONTROL_TERRORISM = NO_TERRORISM, но CONTROL_PASSPORT! = NO_PASSPORT, процесс уходит на работу "Проверка паспорта".

Проверка на терроризм

В сервис проверки на терроризм передаются данные персоны. Сервис возвращает бал соответствия персоны террористу списка. Бал добавляется в контекст.

Условия ветвления:

Если бал меньше TERRORISM_SCORE и CONTROL_PASSPORT = NO_PASSPORT, процесс заканчивается

Если бал меньше TERRORISM_SCORE и CONTROL_PASSPORT! = NO_PASSPORT, процесс уходит на вызов работу проверки паспорта

Если бал больше TERRORISM_SCORE и CONTROL_TERRORISM = REJECTION_TERRORISM, в контексте фиксируется отказ персоне и процесс заканчивается.

Если бал больше TERRORISM_SCORE и CONTROL_TERRORISM = MANUAL_TERRORISM, процесс уходит на работу Ручной Контроль сотрудником Банка.

Если бал больше TERRORISM_SCORE и CONTROL_TERRORISM = ADDITIONAL_TERRORISM, процесс уходит на вызов дополнительной работы по терроризму.

Вызов дополнительной работы по терроризму

Потенциальная точка вставки дополнительного пользовательского подпроцесса обработки ситуации, когда персона признана террористом.

Ручной контроль сотрудником Банка

На форме Сотрудник Банка уведомляется о том, что бал больше TERRORISM_SCORE. Сотрудник Банка может:

Запустить подпроцесс Детализации списка террористов

Проставить в контекст признак, что персона является террористом и завершить процесс.

Проставить в контекст признак, что персона не является террористом. Если CONTROL_PASSPORT = NO_PASSPORT, процесс завершиться. Если CONTROL_PASSPORT! = NO_PASSPORT, процесс уйдет на работу Проверка паспорта.

Проверка паспорта

В сервис проверки списка паспортов передаются данные паспорта персоны. Возвращается признак наличия паспорта в списках недействительных паспортов, который проставляется в контекст процесса.

Условия ветвления:

Если CONTROL_PASSPORT = REJECTION_PASSPORT, в контекст выставляется признак отказа персоне и процесс завершается.

Если CONTROL_PASSPORT = ADDITIONAL_PASSPORT, осуществляется переход к работе Вызов дополнительной работы по паспортам.

Вызов дополнительной работы по паспортам.

Потенциальная точка вставки дополнительного пользовательского подпроцесса обработки ситуации, когда паспорт персоны найден в списках недействительных паспортов.

4.7 Подпроцесс "Выбор продукта"

Подпроцесс предназначен для выбора продукта кредитования и просмотра подробной информации о нём.

4.7.1 Схема подпроцесса

Рисунок 4.7.1 - Схема подпроцесса "Выбор продукта"

Входы/выходы процесса:

· На входе контекст id группы продуктов и признак, характеризующий формат использования подпроцесса.

· На выходе контекст содержит id продукта

4.7.2 Шаги процесса

Таблица 4.7.2 - Описание шагов процесса

Шаг

Описание

Получение списка продуктов

В сервис продуктов передается id группы. Сервис продуктов возвращает список продуктов.

Просмотр списка продуктов

Сотрудник Банка может просмотреть список продуктов и выбрать для клиента наиболее интересный. Id выбранного продукта помещается в контекст процесса.

Получение детальной информации о продукте

В сервис продуктов отправляется запрос на получение детальной информации о продукте с заданным id.

Просмотр детальной информации

Сотрудник Банка видит и может озвучить детальную информацию по продукту.

4.8 Процесс "Мониторинг кредитных обязательств"

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

4.8.1 Схема процесса

Рисунок 4.8.1 - Схема процесса "Мониторинг кредитных обязательств"

4.8.2 Шаги процесса

Таблица 4.8.2 - Описание шагов процесса

Шаг

Описание

Загрузка данных в реестр

Сервис обмена данными с R-Style выгружает всю информацию о клиентах с задолженностью, а также клиентов с ожидающей просроченной задолженностью.

Распределение задач сотрудникам

Руководитель СБ распределяет клиентов с просрочкой, а также клиентов с ожидающей просрочкой сотрудникам СБ.

Обработка и фиксирование результатов

Работа выполняется в рамках подпроцесса "Обработка и фиксирование результатов"

5. Программа Dreamweaver

Формы разрабатывались в программе Dreamweaver.

Система Dreamweaver - это визуальный редактор гипертекстовых документов. Мощная профессиональная программа Dreamweaver обладает всеми необходимыми средствами для генерации страниц HTML любой сложности и масштаба. Она обеспечивает режим визуального проектирования (WYSIWYG), отличается очень чистой работой с исходным текстом Web-документов, обладает встроенными средствами поддержки больших сетевых проектов.

Программа позволяет создавать проекты для настольных ПК, смартфонов, планшетов и других устройств в визуальном режиме и с помощью кода.

6. XML

XML (Extensible Markup Language - расширяемый язык разметки) является инструментарием для хранения данных, конфигурируемым

транспортным средством для информации любого рода, развивающимся и открытым стандартом, воспринятым всеми - от банкира до веб-мастера. Всего за несколько лет он в равной степени захватил воображение экспертов в области технологий и специалистов в промышленности. В чем же причина его успеха?

Краткий перечень возможностей XML говорит сам за себя:

XML позволяет хранить и упорядочивать информацию почти любого рода в формате, приспособленном к потребностям пользователя.

Будучи открытым стандартом, XML не связан с судьбой какой-либо отдельной компании или с конкретным программным обеспечением.

Используя Unicode в качестве стандартного набора символов, XML поддерживает внушительное число различных систем письма и

символов, от скандинавских рунических символов до китайских

идеографов Хань.

XML предоставляет несколько способов проверки качества документа путем применения синтаксических правил, внутренней проверки ссылок, сравнения с моделями документов и типов данных.

Благодаря простому и понятному синтаксису, а также однозначной структуре, XML легко читается и анализируется, как человеком, так и программами.

XML легко сочетается с таблицами стилей для создания документов, оформленных в любом требуемом стиле. Чистота информационной структуры не служит помехой изменениям оформления.

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

Правила XML жестко трактуют все, что касается структуры. Документ должен иметь такую разметку, чтобы не существовало двух способов интерпретации имен, порядка и иерархии элементов. Это значительно уменьшает число ошибок и сложность кода. Программы недолжны ни о чем "догадываться" или пытаться исправлять синтаксические ошибки, как это часто делают браузеры HTML, потому что различные процессоры XML должны давать одинаковые результаты.

Конечно, это затрудняет написание хорошей разметки XML. Автор должен проверить синтаксис документа с помощью синтаксического анализатора, чтобы оставить минимум ошибок для последующих обрабатывающих программ, обеспечить защиту целостности данных и непротиворечивость результатов.

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

6.1. Простота использования

Чтобы получить широкое распространение, XML должен быть простым. Люди не хотят изучать сложную систему лишь для того, чтобы создать документ. XML интуитивен, элегантен и легко читается. Он позволяет разработать собственный язык разметки, удовлетворяющий нескольким логичным правилам. Это маленькое подмножество SGML, из которого выкинуто то, что не требуется большинству пользователей. Простота также благоприятствует разработке приложений. Если писать программы, обрабатывающие файлы XML, просто, появится большее число более дешевых программ. Правила XML строги, но они делают усилия по анализу и обработке файлов более предсказуемыми, а потому значительно более легкими. Простота ведет к изобилию. Можете представлять себе XML как своего рода ДНК для многих различных способов выражения информации. Таблицы стилей для определения внешнего вида и преобразования структуры документа можно писать на языке под названием XSL, основанном на XML. Еще одним видом XML являются схемы моделирования документов. Такая вездесущесть означает, что одни и те же средства можно применять для редактирования и обработки во многих различных технологиях.

6.2 Правильно построенные и действительные документы XML

Стандартом определены два уровня правильности документа XML:

· Правильно построенный (англ. well-formed). Правильно построенный документ соответствует всем общим правилам синтаксиса XML, применимым к любому XML-документу. И если, например, начальный тег не имеет соответствующего ему конечного тега, то это неправильно построенный документ XML. Документ, который неправильно построен, не может считаться документом XML; XML-процессор (парсер) не должен обрабатывать его обычным образом и обязан классифицировать ситуацию как фатальная ошибка.

· Действительный (англ. valid). Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая дополнительная проверка корректности документа на соответствие заранее определённым, но уже внешним правилам, в целях минимизации количества ошибок, например, структуры и состава данного, конкретного документа или семейства документов. Эти правила могут быть разработаны как самим пользователем, так и сторонними разработчиками, например, разработчиками словарей или стандартов обмена данными. Обычно такие правила хранятся в специальных файлах - схемах, где самым подробным образом описана структура документа, все допустимые названия элементов, атрибутов и многое другое. И если документ, например, содержит не определённое заранее в схемах название элемента, то XML-документ считается недействительным; проверяющий XML-процессор (валидатор) при проверке на соответствие правилам и схемам обязан (по выбору пользователя) сообщить об ошибке.

Данные два понятия не имеют достаточно устоявшегося стандартизированного перевода на русский язык, особенно понятие valid, которое можно также перевести, как имеющий силу, правомерный, надёжный, годный, или даже проверенный на соответствие правилам, стандартам, законам. Некоторые программисты применяют в обиходе устоявшуюся кальку "Валидный".

6.3 Синтаксис XML

В этом разделе рассматривается лишь правильное построение документов XML, то есть их синтаксис.

XML - это описанная в текстовом формате иерархическая структура, предназначенная для хранения любых данных. Визуально структура может быть представлена как дерево элементов. Элементы XML описываются тегами.

6.4 Корневой элемент

Важнейшее обязательное синтаксическое требование заключается в том, что документ имеет только один корневой элемент (англ. root element) (также иногда называемый элемент документа (англ. document element)). Это означает, что текст или другие данные всего документа должны быть расположены между единственным начальным корневым тегом и соответствующим ему конечным тегом.

6.5 Комментарий

В любом месте дерева может быть размещен элемент-комментарий. XML-комментарии размещаются внутри специального тега, начинающегося с символов <! - и заканчивающегося символами - ->. Два знака дефис (--) внутри комментария присутствовать не могут.

6.6 Теги

Остальная часть этого XML-документа состоит из вложенных элементов, некоторые из которых имеют атрибуты и содержимое. Элемент обычно состоит из открывающего и закрывающего тегов, обрамляющих текст и другие элементы. Открывающий тег состоит из имени элемента в угловых скобках, например, <step>, а закрывающий тег состоит из того же имени в угловых скобках, но перед именем ещё добавляется косая черта, например, </step>. Имена элементов, как и имена атрибутов, не могут содержать пробелы, но могут быть на любом языке, поддерживаемом кодировкой XML-документа. Имя может начинаться с буквы, подчёркивания, двоеточия. Остальными символами имени могут быть те же символы, а также цифры, дефис, точка.

Содержимым элемента (англ. content) называется всё, что расположено между открывающим и закрывающим тегами, включая текст и другие (вложенные) элементы. Ниже приведён пример XML-элемента, который содержит открывающий тег, закрывающий тег и содержимое элемента:

<step>Шаг 1</step>

Для того чтобы данные из базы попадали на форму приложения необходимо отправить XML запрос, с соответствующей структурой, пример запроса на форму "Ввод анкеты. Шаг 1", представлен в приложении Б.

7. Создание отчётов с помощью JasperReports

JasperReports - это Java-библиотека для создания отчётов. На основе XML-шаблонов отчётов генерируются готовые для печати документы, консолидирующие данные из различных источников. Отчёты могут выводиться на экран, принтер, либо в форматы PDF, RTF, HTML, XLS, CSV и XML. Основной частью шаблона является SQL-запрос, который указывает какие данные необходимо выбрать из базы данных для генерации отчёта, либо через указания пути xPath. В XML-шаблоне допустимо применение стилей и выражений (для проверки или вычисления результата). Также возможна группировка данных по требуемому полю.

Дизайн JasperReports описывается в специальном XML файле шаблона, который называется JRXML. Данный шаблон можно создать в ручном режиме (текстовый редактор), или используя различные графические дизайнеры для JasperReports.

Тег

jasperReport

указывает на начало отчета. Для того, чтобы использовать поля, сначала их необходимо описать.

<field name="name" class="java. lang. String" />

В описание входит имя поля name и его java-class class. После описания поля, к нему можно обращаться следующим образом:

$F{name}

Директива $F{…} указывает на использование именно поля.

7.1 Работа в JasperReport. Создание отчётов

После запуска программы iReport на экране появится следующее окно

Рисунок 7 - Рабочая область

Для создания нового отчета необходимо выбрать пункт меню File - New…

После этого появится окно с выбором шаблона создаваемого отчета:

Рисунок 8 - Выбор формата отчёта

Выбираем подходящий шаблон (чаще всего это будет Blank A4) и нажимаем кнопку "Open this Template".

Появится окно следующего вида

Рисунок 9 - Всплывающее окно выбора места хранения отчёта

В этом окне можно задать имя отчета и папку для его сохранения.

После этого нажимаем кнопку "Next" и получаем поздравление, что шаблон успешно сгенерирован.

Рисунок 10 - Успешное создание отчёта

Нажимаем кнопку "Finish".

Открывается окно с редактором отчета

Рисунок 11 - Окно с редактором отчёта

Слева в окне виден список элементов шаблона отчета

Центральная часть окна разделена на части шаблон листа отчета

В блоке Title указывается заголовок общий для всего документа, будет отображаться только на первой странице отчета

Блок Page Header заголовок отображаемый на каждой странице

Блок Page Footer отображаемый на каждой странице

В блок Detail должны находиться данные которые необходимо отобразить на странице.

Если справой стороны окна iReport нет панели объектов отчета, то для ее отображения можно воспользоваться пунктом меню Window - Palette или нажать Ctrl + Shift + 8

После этого окно должно принять следующий вид

Рисунок 12 - Рабочая область

7.2 Создание статического текста в отчете

Для создания статического текст в отчета необходимо на палитре элементов нажать на элемент Static Text и перетянуть его в нужное место шаблона отчета.

Рисунок 13 - Выбор элемента

Для примера я перетянула Static Text в блок Title

Рисунок 14 - Пример Static Text в отчёте

При двойном клике на Static Text можно изменить его значение.

Например так

Рисунок 14 - Закладки

Если нажать на кнопку "XML", обведенную синим прямоугольником отобразиться xml код отчета

Рисунок 15 - Закладка XML

Если нажать на кнопку "Preview", обведенную синим прямоугольником то отобразиться окно предварительного просмотра отчета

Пример шаблона xml, созданного отчёта "Информационный лист " можно просмотреть в Приложении В.

Заключение

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

Реализована возможность мониторинга кредитных обязательств с нарушенными обязательствами и взаимодействие с заемщиками для раннего выявления проблемных кредитов

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

Решение по автоматизации банковского фронт-офиса обеспечивает:

· эффективную масштабируемость бизнеса (тысячи точек продаж)

· производительность обработки (миллионы клиентских счетов)

· легкость обновления и поддержки (централизованное хранилище данных)

· быстрое подключение разнообразных каналов продаж

· скоринг физических лиц с учетом макроэкономических данных по локальному рынку кредитования и параметров кредитных продуктов - как для новых рынков, так и с использованием кредитных историй

· минимальное время для принятия решения о кредитовании и оформления сделки

· существенное снижение банковских рисков

Список использованных источников

1. Википедия. Свободная энциклопедия [Электронный ресурс] / - Режим доступа: http://ru. wikipedia.org/wiki/IDEF0 - (дата обращения: 01.05.2012);

2. Википедия. Свободная энциклопедия [Электронный ресурс] / - Режим доступа http://ru. wikipedia.org/wiki/XML - (дата обращения: 13.05.2012);

3. Википедия. Свободная энциклопедия [Электронный ресурс] / - Режим доступа http://ru. wikipedia.org/wiki/JasperReports- (дата обращения: 13.05.2012);

4. Методология функционального моделирования IDEF0: /Руководящий документ /ИПК Издательство стандартов 2000 г. - 62 с.;

5. Изучаем XML/Эрик Рэй/ Санкт-Петербург 2001г. - 408 с.;

6. Heffelfinger, D. JasperReports 3.5 for Java Developers // Heffelfinger David; Packt Publishing Ltd - 2009. - 368 c.

7. Ясенев В.Н. Автоматизированные информационные системы в экономике: Учебно-методическое пособие. - Н. Новгород, 2007 г. - 439 с.

Приложение А

Пример кода шаблона формы "Ввод анкеты. Шаг 1”

Часть кода программы, написанный на html, с использованием javaScript:

<script type="text/javascript" src="js/svw/tabsContent. js"></script>

<script>

var tabGroup = "PaperInfo";

function check (id) {

edit = document. getElementById (id);

edit. disabled =! edit. disabled;

textArea = document. getElementById ('ChangesReason');

if (edit. disabled) {

edit. value = '';

edit. removeAttribute ('required');

}else{

edit. setAttribute ('required', 'required');

}

if (! document. getElementById ("PrevLastName"). disabled ||

! document. getElementById ("PrevFirstName"). disabled ||

! document. getElementById ("PrevMiddleName"). disabled) {

textArea. setAttribute ('required', 'required');

textArea. removeAttribute ('disabled');

}else{

textArea. removeAttribute ('required');

textArea. setAttribute ('disabled','true');

}

}

function addTab (tabId) {

var count = createTab (tabGroup, getTextById (tabId));

var content = createTabContent (count, tabId);

createItems (tabGroup, content, count);

generateOnChange ();

tabVal = undefined;

setupCalendars (count);

}

function createTabContent (count, tabId) {

var table = createTable ("PaperInfo");

var tbody = createTableBody (table);

var tr;

// i-я строка

tr = createTableRow (tbody);

tr. append (createEmptyCell ());

tr. append (createCheckboxCell ("Не действует", "IsActive"));

tbody. append (tr);

// 2-я строка

tr = createTableRow (tbody);

tr. append (createEmptyCell ());

tr. append (createCheckboxCell ("Основной документ", "IsMain"));

tbody. append (tr);

// 3-я строка

tr = createTableRow (tbody);

tr. append (createLabelCell ('Серия документа<span class="red">*</span>'));

tr. append (createInputTextCell ("PaperSeries", "required"));

tr. append (createLabelCell ('Кем выдан<span class="red">*</span>'));

tr. append (createInputTextCell ("IssueDepartment", "required"));

tbody. append (tr);

// 4-я строка

tr = createTableRow (tbody);

tr. append (createLabelCell ('Номер документа<span class="red">*</span>'));

tr. append (createInputTextCell ("PaperNumber", "required"));

tr. append (createLabelCell ('Код подразделения'));

tr. append (createInputTextCell ("DivisionCode"));

tbody. append (tr);

// 5-я строка

tr = createTableRow (tbody);

tr. append (createLabelCell ('Дата выдачи<span class="red">*</span>'));

tr. append (createCalendarCell ("IssueDate", count, "required"));

tr. append (createLabelCell ('Действителен до'));

tr. append (createCalendarCell ("ExpiryDate", count));

tbody. append (tr);

// i-я строка

tr = createTableRow (tbody);

tbody. append (createInputHidden ("PaperInfoId"));

var input = $ ("<input type='hidden'>"). attr ("name","PaperType"). val (tabId);

tbody. append (input);

// tbody. append (createInputHidden ("PaperType"));

tbody. append (tr);

table. append (tbody);

return table;

}

function setupCalendars (count) {

jQuery (setCalendar ("IssueDate", count));

jQuery (setCalendar ("ExpiryDate", count));

// Здесь прописываются календари со вкладок (если они там есть)

}

// склонение ФИО

function copyName () {

var sex = null;

if ($ ("input [name='Sex']: checked"). val () == 'CLIENT. SEX. M') sex = false;

if ($ ("input [name='Sex']: checked"). val () == 'CLIENT. SEX. F') sex = true;

if (sex == null) {

alert ("Пол не выбран");

return;

}

var lastName = $ ("input [name='LastName'] "). val ();

var firstName = $ ("input [name='FirstName'] "). val ();

var middleName = $ ("input [name='MiddleName'] "). val ();

$ ("input [name='FullNameAblative'] "). val (FullName2Genitive (lastName, firstName, middleName, sex));

$ ("input [name='FullNameDative'] "). val (FullName2Dative (lastName, firstName, middleName, sex));

$ ("input [name='FullNameGenitive'] "). val (FullName2Ablative (lastName, firstName, middleName, sex));

}

$ (document). ready (function () {

});

</script>

<form id="inputForm" name="inputForm" action="updateVisualAction. htm" method="post">

<input type="hidden" name="workId" value="$! workId"/>

<input type="hidden" name="jsonForm" value=""/>

<input type="hidden" name="buttonName" value=""/>

<div class="local_header">Идентификационные данные</div>

<div class="object_container" name="Person">

<input type="hidden" name="PersonId" value="$! Content. Person. PersonId">

<div class="object_container" name="PersonInfo">

<input type="hidden" name="PersonInfoId" value="$! Content. Person. PersonInfo. PersonInfoId">

<table class="table_form_style">

<tbody>

<td class="td_left_label_form_style">Фамилия<span class="red">*</span></td>

<td class="td_field_form_style">

<input name="LastName" value="$! Content. Person. PersonInfo. LastName" type="text" class="input_text_style_medium"

required="required" maxlength=”100" fio expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +">

</td>

<td class="td_left_label_form_style">Меняли ли вы Фамилию? </td>

<td class="td_field_form_style">

<input id="IsChangeLastName" type="checkbox" name="IsChangeLastName"

value="$! Content. Person. PersonInfo. IsChangeLastName" #if ("$! Content. Person. PersonInfo. IsChangeLastName" == "true")

checked #end/ onclick="check ('PrevLastName')">Да

</td>

<div class="display_none">

Поля "Предыдущая фамилия/Имя/Отчество" появляются после того как активированы соответстующие крыжи "Да"

</div>

<td class="td_left_label_form_style">Предыдущая Фамилия<span class="red">*</span></td>

<td class="td_field_form_style">

<input id="PrevLastName" name="PrevLastName" value="$! Content. Person. PersonInfo. PrevLastName" type="text"

class="input_text_style_medium" maxlength=”100" fio expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +" #if ("$! Content. Person. PersonInfo. IsChangeLastName"! = "true")

disabled #end/>

</td>

<td class="td_left_label_form_style">Дата изменения Фамилии</td>

<td class="td_field_form_style">

#set ($params = {

"id": "PrevLastNameDate",

"name": "PrevLastNameDate",

"value": "$! Content. Person. PersonInfo. PrevLastNameDate",

"chars": "0123456789. ",

"maxlength": "10"

})

#calendar ($params)

</td>

<tr class="tr_form_style">

<td class="td_left_label_form_style">Имя<span class="red">*</span></td>

<td class="td_field_form_style">

<input name="FirstName" value="$! Content. Person. PersonInfo. FirstName" type="text"

class="input_text_style_medium" maxlength=”100" required="required" fio expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +">

</td>

<td class="td_left_label_form_style">Меняли ли вы Имя? </td>

<td class="td_field_form_style">

<input id="IsChangeFirstName" type="checkbox" name="IsChangeFirstName"

value="$! Content. Person. PersonInfo. IsChangeFirstName" #if ("$! Content. Person. PersonInfo. IsChangeFirstName" == "true")

checked #end/ onclick="check ('PrevFirstName')">Да

</td>

<td class="td_left_label_form_style">Предыдущее Имя<span class="red">*</span></td>

<td class="td_field_form_style">

<input id="PrevFirstName" name="PrevFirstName" value="$! Content. Person. PersonInfo. PrevFirstName" type="text"

class="input_text_style_medium" maxlength=”100" fio expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +"

#if ("$! Content. Person. PersonInfo. IsChangeFirstName"! = "true")

disabled #end/>

</td>

<td class="td_left_label_form_style">Дата изменения Имени</td>

<td class="td_field_form_style">

#set ($params = {

"id": "PrevFirstNameDate",

"name": "PrevFirstNameDate",

"value": "$! Content. Person. PersonInfo. PrevFirstNameDate",

"chars": "0123456789. ",

"maxlength": "10"

})

#calendar ($params)

</td>

</tr>

<tr class="tr_form_style">

<td class="td_left_label_form_style">Отчество<span class="red">*</span></td>

<td class="td_field_form_style">

<input name="MiddleName" value="$! Content. Person. PersonInfo. MiddleName" type="text"

class="input_text_style_medium" maxlength=”100" required="required" fio expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +">

</td>

<td class="td_left_label_form_style">Меняли ли вы Отчество? </td>

<td class="td_field_form_style">

<input id="IsChangeMiddleName" type="checkbox" name="IsChangeMiddleName"

value="$! Content. Person. PersonInfo. IsChangeMiddleName" #if ("$! Content. Person. PersonInfo. IsChangeMiddleName" == "true")

checked #end/ onclick="check ('PrevMiddleName')">Да

</td>

<td class="td_left_label_form_style">Предыдущее Отчество<span class="red">*</span></td>

<td class="td_field_form_style">

<input id="PrevMiddleName" name="PrevMiddleName" value="$! Content. Person. PersonInfo. PrevMiddleName" type="text"

class="input_text_style_medium" maxlength=”100" fio expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +"

#if ("$! Content. Person. PersonInfo. IsChangeMiddleName"! = "true")

disabled #end/>

</td>

<td class="td_left_label_form_style">Дата изменения Отчества</td>

<td class="td_field_form_style">

#set ($params = {

"id": "PrevMiddleNameDate",

"name": "PrevMiddleNameDate",

"value": "$! Content. Person. PersonInfo. PrevMiddleNameDate",

"chars": "0123456789. ",

"maxlength": "10"

})

#calendar ($params)

</td>

</tr>

<tr class="tr_form_style">

<td class="td_left_label_form_style">Дата рождения<span class="red">*</span></td>

<td class="td_field_form_style">

#set ($params = {

"id": "Birthday",

"name": "Birthday",

"value": "$! Content. Person. PersonInfo. Birthday",

"chars": "0123456789. ",

"maxlength": "10",

"required": "required"

})

#calendar ($params)

</td>

</tr>

</tbody>

</table>

<table class="table_form_style">

<tbody>

<tr class="tr_form_style">

<td class="td_left_label_form_style">Пол<span class="red">*</span></td>

<td class="td_field_form_style">

<input type="radio" name="Sex"

value="CLIENT. SEX. M" #if ("$! Content. Person. PersonInfo. Sex" == "CLIENT. SEX. M")

checked="checked" #end>Мужской

<input type="radio" name="Sex"

value="CLIENT. SEX. F" #if ("$! Content. Person. PersonInfo. Sex" == "CLIENT. SEX. F")

checked="checked" #end >Женский

</td>

<td class="td_left_label_form_style">Причина изменения <span class="red">*</span></td>

<td colspan="3">

<textarea id="ChangesReason" name="ChangesReason" cols="50" rows=""

#if ("$! Content. Person. PersonInfo. IsChangeMiddleName"! = "true" &&

"$! Content. Person. PersonInfo. IsChangeLastName"! = "true" &&

"$! Content. Person. PersonInfo. IsChangeFirstName"! = "true")

disabled #end>$! Content. Person. PersonInfo. ChangesReason</textarea>

</td>

</tr>

</tbody>

</table>

<div class="local_header">Склонение ФИО</div>

<table class="table_form_style">

<tbody>

<tr class="tr_form_style">

<td class="td_left_label_form_style">ФИО в РП (Кого?) <span class="red">*</span></td>

<td class="td_field_form_style">

<input name="FullNameGenitive" value="$! Content. Person. PersonInfo. FullNameGenitive" type="text"

class="input_text_style_long" maxlength=”320" required="required" expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +">

</td>

</tr>

<tr class="tr_form_style">

<td class="td_left_label_form_style">ФИО в ДП (Кому?) <span class="red">*</span></td>

<td class="td_field_form_style">

<input name="FullNameDative" value="$! Content. Person. PersonInfo. FullNameDative" type="text"

class="input_text_style_long" maxlength=”320" required="required" expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +">

</td>

</tr>

<tr class="tr_form_style">

<td class="td_left_label_form_style">ФИО в ТП (Кем?) <span class="red">*</span></td>

<td class="td_field_form_style">

<input name="FullNameAblative" value="$! Content. Person. PersonInfo. FullNameAblative" type="text"

class="input_text_style_long" maxlength=”320" required="required" expression=" ([А-яЁё] +-| [А-яЁё] +\s?) +">

</td>

<td>&nbsp; </td>

<td style="align=left">

<button class="blue" type="button" onclick="copyName ()">

<span><em>Склонение ФИО</em></span>

</button>

</td>

</tr>

</tbody>

</table>

<div class="local_header">Дополнительно</div>

<table class="table_form_style" width="100%" cellspacing="0" cellpadding="0">

<tbody>

<tr class="tr_form_style">

<td class="td_left_label_form_style">Гражданство<span class="red">*</span></td>

<td class="td_field_form_style">

<select class="select_style_middle" name="Citizenship" required="required">

#foreach ($item in $sorter. sort ($contentUtil. findDictionary ($Content, "COUNTRY"),"Name"))

<option value="$! item. Code" #if ("$! item. Code" == "$! Content. Person. PersonInfo. Citizenship")

selected #end>$! item. Name</option>

#end

</select>

</td>

<td class="td_left_label_form_style">ИНН</td>

<td class="td_field_form_style">

<input name="INN" value="$! Content. Person. PersonInfo. INN" type="text" class="input_text_style_medium">

</td>

<tr class="tr_form_style">

<td class="td_left_label_form_style">Признак резидентства<span class="red">*</span></td>

<td class="td_field_form_style">

<input type="radio" name="IsResident" value="true" #if ("$! Content. Person. PersonInfo. IsResident" == "true")

checked="checked" #end>Резидент

<input type="radio" name="IsResident"

value="false" #if ("$! Content. Person. PersonInfo. IsResident" == "false") checked="checked" #end >Нерезидент

</td>

<td class="td_left_label_form_style">Место рождения<span class="red">*</span></td>

<td class="td_field_form_style">

<input name="BirthdayPlace" value="$! Content. Person. PersonInfo. BirthdayPlace" type="text"

class="input_text_style_medium" required="required" maxlength=”100”>

</td>

</tbody>

</table>

<div class="local_header">Документы персоны</div>

#set ($items= [])

#foreach ($item in $contentUtil. findDictionary ($Content, "DOCUMENT"))

#set ($item = {"id": $item. Code,"name": $item. Name})

#if ($items. add ($item)) #end

#end

#set ($params = {

"title": "Добавить документ",

"onClick": "deleteTab ('PaperInfo', 'Удалить? ')",

"inputClass": "input_text_style_long",

"selectBoxClass": "selectbox_wrapper_long",

"items": $items

}

)

#selectBox ($params)

<div id="tabsAreaPaperInfo" name="PaperList" class="tabs_area object_container">

<div class="tabs_header">

<input type="hidden" name="countPaperInfo" value="0" unused="true">

#set ($tabsParam = [])

#tabs ({"name": "tabsPaperInfo","tabs": $tabsParam})

#set ($addTab =

"<script language='JavaScript'>" + "

tabVal = {

PaperSeries: '$" + "! item. PaperSeries',

PaperType: '$" + "! item. PaperType',

IsActive: '$" + "! item. IsActive',

IsMain: '$" + "! item. IsMain',

PaperNumber: '$" + "! item. PaperNumber',

PaperInfoId: '$" + "! item. PaperInfoId',

IssueDate: '$" + "! item. IssueDate',

IssueDepartment: '$" + "! item. IssueDepartment',

ExpiryDate: '$" + "! item. ExpiryDate',

DivisionCode: '$" + "! item. DivisionCode'

}

addTab ('$" + "! item. PaperType');

</script>"

)

#set ($tabList = $! Content. Person. PersonInfo. PaperList. PaperInfo)

#if ("$! Content. Person. PersonInfo. PaperList. PaperInfo. get (0)" == "" && $tabList)

#set ($item = $tabList)

#evaluate ($addTab)

#else

#foreach ($item in $tabList)

#evaluate ($addTab)

#end

#end

</div>

<br/>

</div>

</div>

<! - -Person - ->

</div>

<! - -PersonInfo - ->

<hr/>

<br/>

<div class="display_none">

При нажатии кнопки "Отмена" отображается сообщение: "Процесс не завершен. Прервать?".

</div>

<div>

<div>

<div style="float: left; ">

<button class="blue" type="button" onclick="cancelAction ()">

<span><em>Отмена</em></span>

</button>

<button class="blue" type="button" onclick="nextAction ()">

<span><em>Далее</em></span>

</button>

</div>

<div style="float: right">

<button class="blue" type="button" onclick="exitAction ()">

<span><em>Выход</em></span>

</button>

</div>

</div>

<div style="clear: both"><br/></div>

</div>

</form>

<script>

registerListeners (document. inputForm);

</script>

Приложение Б

Пример кода xml-запроса к форме "Ввод анкеты. Шаг 1”

<Envelope>

<Body>

<PersonInfoReadRs>

<Person>

<PersonId>1501</PersonId>

<PersonExtId></PersonExtId>

<PersonInfo>

<FullNameAblative>Иванова Ивана Ивановича</FullNameAblative>

<FullNameGenitive>Ивановым Иваном Ивановичем</FullNameGenitive>

<BirthdayPlace>New York</BirthdayPlace>

<FullNameDative>Иванову Ивану ивановичу</FullNameDative>

<LastName>Иванов</LastName>

<PersonInfoId>6476</PersonInfoId>

<CreateDate></CreateDate>

<Birthday>01.01.2001</Birthday>

<MiddleName>Иван</MiddleName>

<PersonId>1501</PersonId>

<Email>my@gmail.com</Email>

<FirstName>Иванович</FirstName>

<PersonInfoIp></PersonInfoIp>

<Sex>CLIENT. SEX. M</Sex>

<PrevLastName>Путин</PrevLastName>

<Citizenship>RU</Citizenship>

<PrevMiddleName>ВсеРавно</PrevMiddleName>

<PrevLastNameDate>04.04.2012</PrevLastNameDate>

<IsResident>false</IsResident>

<IsChangeMiddleName>true</IsChangeMiddleName>

<ExtensionExternalKey>6476</ExtensionExternalKey>

<PrevFirstName>Аня</PrevFirstName>

<ChangesReason>надоело</ChangesReason>

<PersonInfoExtId>7874</PersonInfoExtId>

<UserId></UserId>

<PhoneStr></PhoneStr>

<PrevFirstNameDate>05.04.2012</PrevFirstNameDate>

<FirstNameEn></FirstNameEn>

<INN>1212123</INN>

<LastNameEn></LastNameEn>

<TitlePrefix></TitlePrefix>

<PrevMiddleNameDate>05.04.2012</PrevMiddleNameDate>

<IsChangeLastName>true</IsChangeLastName>

<FullName></FullName>

<SubdivisionId></SubdivisionId>

<IsChangeFirstName>true</IsChangeFirstName>

<AddressList>

<AddressInfo>

<Apartment>10</Apartment>

<Street>ул. Советская</Street>

<IsCheckSame>false</IsCheckSame>

<Area>обл. Курганская</Area>

<Building>9</Building>

<AddressInfoId>9494</AddressInfoId>

<Country>NL</Country>

<CreateDate></CreateDate>

<City>д. Гомзино</City>

<PostIndex>641570</PostIndex>

<Region>р-н. Частоозерский</Region>

<PersonId>1501</PersonId>

<Kingdom>null</Kingdom>

<AddressType>ADDRESS. PH. REGISTRATION</AddressType>

<House>8</House>

<CountryCode></CountryCode>

<AddressInfoIp></AddressInfoIp>

<IsAddressStr>false</IsAddressStr>

<AddressStr>null</AddressStr>

<PropertyType></PropertyType>

<OtherFormProperty></OtherFormProperty>

<ExtensionExternalKey>9494</ExtensionExternalKey>

<StreetType>null</StreetType>

<AddressInfoExtId>9495</AddressInfoExtId>

<FormProperty></FormProperty>

<Okato></Okato>

<RegistrationDate>12.02.2011</RegistrationDate>

<Structure>1212222</Structure>

<CityType>null</CityType>

<Kladr></Kladr>

</AddressInfo>

</AddressList>

<PhoneList>

<PhoneInfo>

<Description>null</Description>

<PhoneInfoId>10194</PhoneInfoId>

<PhoneInfoIp></PhoneInfoIp>

<PersonId>1501</PersonId>

<ZoneCode>23</ZoneCode>

<PhoneNumber>213132</PhoneNumber>

<CountryCode>23</CountryCode>

<PhoneType>TYPE. PHONE. HOME</PhoneType>

<CreateDate></CreateDate>

<ExtPhone>null</ExtPhone>

<PhoneInfoExtId>10195</PhoneInfoExtId>

<ExtensionExternalKey>10194</ExtensionExternalKey>

<IsPhoneStr>false</IsPhoneStr>

<PhoneStr>null</PhoneStr>

</PhoneInfo>

</PhoneList>

<PaperList>

<PaperInfo>

<PaperSeries>HB</PaperSeries>

<ExpiryDate>08.05.2012</ExpiryDate>

<IssueDate>13.12.2006</IssueDate>

<IssueDepartment>Саоми</IssueDepartment>

<PaperInfoId>9496</PaperInfoId>

<PersonId>1501</PersonId>

<PaperType>DOC. PASSPORT</PaperType>

<IsActive>false</IsActive>

<PaperNumber>23323744</PaperNumber>

<IsMain>true</IsMain>

<PaperInfoIp></PaperInfoIp>

<CreateDate></CreateDate>

<DivisionCode>2JFF3</DivisionCode>

<PaperInfoExtId>9497</PaperInfoExtId>

<ExtensionExternalKey>9496</ExtensionExternalKey>

<CountryCode>null</CountryCode>

</PaperInfo>

</PaperList>

</PersonInfo>

</Person>

</PersonInfoReadRs>

</Body>

</Envelope>

Приложение В

Пример кода xml-шаблона к отчёту "Информационный лист”

<? xml version="1.0" encoding="UTF-8"? >

<jasperReport xmlns="http://jasperreports. sourceforge.net/jasperreports" xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http://jasperreports. sourceforge.net/jasperreports http://jasperreports. sourceforge.net/xsd/jasperreport. xsd" name="Информационный лист" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">

<property name="ireport. zoom" value="1.0"/>

<property name="ireport. x" value="0"/>

<property name="ireport. y" value="0"/>

<style name="table">

<box>

<pen lineWidth="1.0" lineColor="#000000"/>

</box>

</style>

<style name="table_TH" mode="Opaque" backcolor="#FFE2BF">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table_CH" mode="Opaque" backcolor="#FFF3E6">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table_TD" mode="Opaque" backcolor="#FFFFFF">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table 1">

<box>

<pen lineWidth="1.0" lineColor="#000000"/>

</box>

</style>

<style name="table 1_TH" mode="Opaque" backcolor="#FFE2BF">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table 1_CH" mode="Opaque" backcolor="#FFF3E6">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table 1_TD" mode="Opaque" backcolor="#FFFFFF">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table 2">

<box>

<pen lineWidth="1.0" lineColor="#000000"/>

</box>

</style>

<style name="table 2_TH" mode="Opaque" backcolor="#FFE2BF">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table 2_CH" mode="Opaque" backcolor="#FFF3E6">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<style name="table 2_TD" mode="Opaque" backcolor="#FFFFFF">

<box>

<pen lineWidth="0.5" lineColor="#000000"/>

</box>

</style>

<subDataset name="PhoneDataSet">

<queryString language="xPath">

<! [CDATA [/Content/Person/PersonInfo/PhoneList/PhoneInfo]] >

</queryString>

<field name="ZoneCode" class="java. lang. String">

<fieldDescription><! [CDATA [ZoneCode]] ></fieldDescription>

</field>

<field name="PhoneNumber" class="java. lang. String">

<fieldDescription><! [CDATA [PhoneNumber]] ></fieldDescription>

</field>

<field name="PhoneType" class="java. lang. String">

<fieldDescription><! [CDATA [PhoneType]] ></fieldDescription>

</field>

<field name="CountryCode" class="java. lang. String">

<fieldDescription><! [CDATA [CountryCode]] ></fieldDescription>

</field>

</subDataset>

<subDataset name="CreditDataset">

<queryString language="xPath">

<! [CDATA [/Content/Person/FormInfo/CreditList/CreditInfo]] >

</queryString>

<field name="CreditOrganization" class="java. lang. String">

<fieldDescription><! [CDATA [CreditOrganization]] ></fieldDescription>


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.