Разработка программных средств формирования групповой спецификации в среде Creo

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

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

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

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

Таблица 3.6 - Атрибуты, используемые при форматировании текста, и их описание

Атрибут

Описание

font-family

Название шрифта

font-size

Размер шрифта

Text-align

Положение текста в блоке

Start-indent

Отступ слева

end-indent

Отступ справа

Размер шрифта указывается так: font-size=”14pt”. Атрибут text-align, указывающий положение текста в блоке, может принимать следующие значения: center, left, right. Отступы слева и справа указываются в миллиметрах.

По умолчанию границы блока невидимы, но с помощью специальных атрибутов можно указать fop-процессору, где их необходимо нарисовать. Также можно указать толщину линий, в противном случае она будет принята по умолчанию 3.6 мм. Атрибуты, используемые для задания границ и их толщины, представлены в таблице 3.7.

Таблица 3.7 - Атрибуты, используемые для задания границ и их толщины

Атрибут

Описание

border-style

Границы для всего блока

Border-before-style / border-top-style

Граница перед текстом

border-after-style / border-bottom-style

Граница после текста

Border-start-style / border-left-style

Граница слева

border-end-style / border-right-style

Граница справа

border-width

Толщина границы для всего блока

border-before-width / border-top-width

Толщина границы перед текстом

Border-after-width / border-bottom-width

Толщина границы после текста

Border-start-width / border-left-width

Толщина границы слева

Border-end-width / border-right-width

Толщина границы справа

Объект fo: block-container предназначен для группировки нескольких блоков, либо для задания некоторых свойств конкретного блока. В рассматриваемой спецификации в некоторых ячейках штампа текст располагается вертикально. Для того, чтобы в шаблоне XSL задать поворот текста на 90 градусов, необходимо воспользоваться атрибутом reference-orientation, принадлежащем элементу fo: block-container. При этом нужно разрешить поворот текста с помощью атрибута position, присвоив ему значение absolute [4]. Для того, чтобы опустить или приподнять текст, используют атрибут top. Если необходимо текст опустить, то указывается положительное значение отступа в миллиметрах, в противном случае - отрицательное.

Объект fo: table применяются для описания таблиц. К его прямым потомкам относятся следующие элементы: fo: table-column, fo: table-body, fo: table-row, fo: table-cell [2].

Элемент fo: table-column задаёт колонку в таблице. Последовательность из пяти таких объектов задаёт пять колонок, соответственно. С помощью атрибута column-number указывается порядковый номер колонки. При помощи column-width - её ширина.

Объект fo: table-body включает в себя узлы, описывающие строки и ячейки таблицы. Он задаёт рабочую зону таблицы. То есть в нём находится фактическое содержимое таблицы. В нём, с помощью соответствующих атрибутов, могут быть указаны свойства текста.

Элемент fo: table-row используется для группировки в строки ячеек таблицы. В нём с помощью атрибута line-height указывается высота строк.

Содержимое каждой ячейки размещается в объекте fo: table-cell. Пример использования элементов, описывающих представление таблиц, приведён ниже.

<fo: table>

<fo: table-column column-number="1" column-width="35mm"/>

<fo: table-column column-number="2" column-width="35mm"/>

<fo: table-column column-number="3" column-width="20mm"/>

<fo: table-body font-family="GOST_B" font-size="10pt" text-align="center">

<fo: table-row line-height="5.75mm" >

<fo: table-cell column-number="1" border-style="solid">

<fo: block> Инв. № подл. </fo: block>

</fo: table-cell>

<fo: table-cell column-number="2" border-before-style="solid" border-after-style="solid" border-right-style="solid">

<fo: block> Подп. и дата </fo: block>

</fo: table-cell>

<fo: table-cell column-number="3" border-before-style="solid" border-after-style="solid" border-right-style="solid">

<fo: block> Взам. инв. № </fo: block>

</fo: table-cell>

</fo: table-row>

<fo: table-body/>

<fo: table>

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

В элементе fo: table-cell, можно указать, что ячейки таблицы должны перекрывать несколько рядов или колонок, установив атрибуты number-columns-spanned и number-row-spanned в целое числовое значение, соответствующее количеству перекрыываемых данной ячейкой рядов и колонок. Необязательный атрибут column-number может изменить номер колонки, с которой начинается перекрытие. По умолчанию это текущая колонка.

Для вывода номера страницы в документе необходимо указать в шаблоне элемент <fo: page-number/> [4].

В разрабатываемом шаблоне спецификации встречаются строки таблицы, не содержащие данных. В этом случае процессор форматирующих объектов Apache FOP не выделяет места в pdf-документе для данной строки. Он только рисует границы ячеек, если они заданы. Для того, чтобы fop-процессор выделил место под строку, необходимо добавить в неё данные, к примеру, пробел. Но, Apache FOP пропускает те пробелы, которые указаны в начале и в конце текстовой строки, а также пробеллы "стоящие сами по себе". Для того, чтобы указать символ пробела явно, нужно воспользоваться записью такого вида: &#160;. Где 160 - код символа "пробел" в кодировке UTF-8. Рассматриваемый элемент &#160; относится к объектным ссылкам, "границы" объектной ссылки указываются с помощью символов & и;. Знак # указывает на то, что 160 - это код символа.

Если текст не помещается в ячейке таблицы, Apache FOP переносит его на новую строчку. В соответствии ГОСТ 2.113 - 75, многострочный текст в некоторых случаях может занимать одну строку таблицы. Для решения данной проблемы в случае с колонкой "Примечание" текст в PartList разбивается на две строки, данные которых помещаются соответственно в атрибуты: PRIMECHANIE_1 и PRIMECHANIE_2 разработанного XML документа. При этом уменьшается шрифт и задаются размеры для новых строк, входящих в ячейку. В результате текст располагается в ней в две строки, но принадлежит одной строке таблицы. В противном случае примечание выводится в атрибут PRIMECHANIE. Описанное представление ячейки таблицы приведено ниже.

<fo: table-cell border-after-style="solid" border-end-style="solid">

<fo: block font-size="14pt">

<xsl: value-of select="@PRIMECHANIE"/>

</fo: block>

<fo: block-container line-height="3.82mm" position="absolute">

<fo: block font-size="10pt">

<xsl: value-of select="@PRIMECHANIE_1"/>

</fo: block>

</fo: block-container>

<fo: block-container top="3.82mm" line-height="3.82mm" position="absolute">

<fo: block font-size="10pt">

<xsl: value-of select="@PRIMECHANIE_2"/>

</fo: block>

</fo: block-container>

</fo: table-cell>

Разработанный шаблон XSL, описывающий представление групповой спецификации по ГОСТ 2.113 - 75, приведён в приложении A.

3.4 Алгоритм преобразования исходного XML в новый XML

В соответствии с ГОСТ 2.113 - 75 в групповой спецификации отступы в виде строк между разделами могут задаваться в зависимости от требований организации. Как правило, первая и последняя строки основной области страницы должны быть пустыми. Не допускается разрыв в виде переноса на другой лист между наименованием раздела и соответствующими данными. Если данные заполняют не всю страницу, необходимо, добавить, пусты строки.

Средствами, предоставляемыми XSL и MSXSL, не возможно обеспечить выполнение всех перечисленных требований. В настоящей квалификационной работе для решения указанной проблемы разработано специальное приложение, преобразующее исходный xml-документ в новый xml-документ. В частности, это приложение определяет, где в таблице спецификации необходимо вставить "пустые" строки (<line FORM="&#160; "/>), и добавляет их.

Приложение разработано на языке С++, имеет графический пользовательский интерфейс и использует библиотеки: MFC и Win32API. Процесс его реализации описан в пункте 4.

3.5 Использование MSXSL и Apache FOP

Для выполнения XSLT-инструкций, описанных в разработанном шаблоне, применим программу MSXSL. Для запуска преобразования xml-документа в fo-файл необходимо выполнить команду: msxsl example. xml example. xsl /o example. fo

Где msxsl - это программный модуль, выполняющий преобразование. Example. xml - имя преобразуемого xml-файла. Example. xsl - имя применяемого xsl-шаблона. Следующий элемент указывает на то, что полученный в результате файл должен быть сохранен. Последний элемент указывает имя файла результата. В рассмотренном примере, в качестве параметров передаются только имена файлов. Подразумевается, что файлы находятся в одном каталоге с MSXSL. Если это не так, необходимо передать полный путь к тем, которые находятся в не рабочего каталога, рассматриваемого приложения.

После создания fo-файла, содержащего xml-данные и объекты форматирования, необходимо запустить приложение Apache FOP для преобразования его в pdf-файл.

На сегодняшний день рекомендуемая консорциумом World Wide Web версия fop-процессора 0.20.5. Но, по причине того, что программа этой версии не поддерживает возможность поворота текста, была выбрана последняя версия 0.93 [11].

Apache FOP, по умолчанию, не поддерживает шрифтов алфавита русского языка. Что бы их подключить, необходимо выполнить следующие действия (на примере Arial).

1 этап. Скопировать нужный файл шрифта (Arial. ttf) из каталога Windows в каталог fop-процессора (к примеру, в C: \fop-0.93\conf\Fonts).

2 этап. Выполнить следующую команду (для генерации описания шрифта):

java - cp C: \fop-0.93\build\fop. jar; C: \fop-0.93\lib\avalon-framework-4.2.0. jar; C: \fop-0.93\lib\commons-logging-1.0.4. jar; C: \fop-0.93\lib\commons-io-1.1 jar org. apache. fop. fonts. apps. TTFReader - d C: \fop-0.93\conf\Fonts\Arial. ttf C: \fop-0.93\conf\Fonts\Arial. xml

3 этап. Добавить запись в файл C: \fop-0.93\conf\fop. xconf, следующего вида (должна находиться внутри тэгов <fonts> </fonts>):

<font metrics-url="C: \fop-0.93\conf\Fonts\arial. xml" kerning="yes" embed - url="C: \fop-0.93\conf\Fonts\arial. ttf">

<font-triplet name="Arial" style="normal" weight="normal"/>

<font-triplet name="ArialMT" style="normal" weight="normal"/>

</font>

Запуск FOP производится с помощью команды:

C: \fop-0.93\fop - c C: \fop-0.93\conf\fop. xconf Example. fo Example. pdf.

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

Второй предназначен для того, чтобы применился третий.

Третий атрибут - это путь к файлу с объявлением шрифтов.

Четвёртый атрибут - путь к fo-файлу.

Пятый атрибут - путь к pdf-файлу.

В рамках текущей главы:

- разработана структура xml-документа;

- разработаны xsl-шаблоны, описывающие преобразование и представление групповой спецификации;

- подключены шрифты, поддерживающие кириллицу, к приложению Apache FOP;

- выяснен формат командной строки для программ MSXSL и Apache FOP.

4. Разработка конвертера xml-представлений групповых спецификаций на сборочное изделие, в pdf-формат

4.1 Разработка приложения

4.1.1 Реализация пользовательского интерфейса

Для разработки интерфейса пользователя воспользуемся средствами, предоставляемыми Microsoft Visual Studio 2010 и библиотекой MFC. Использование которой возможно только при написании программ на языке Visual C++. Для создания проекта в рассматриваемой среде программирования, необходимо: запустить рассматриваемую программу (в случае, если она уже инсталлирована на ПК, иначе, сначала установить её); в меню "File" выбрать "New"; в открывшемся подменю щёлкнуть левой кнопкой мыши по "Project", рисунок 4.1; в открывшемся окне, в элементе, отображающем дерево проектов выбрать "Visual C++", а затем "MFC"; в дочернем окне с названием "Templates", выбрать "MFC Application"; указать имя создаваемого проекта (в нашем случае "XMLConverter"), и каталог, где он будет располагаться, как показано на рисунке 4.2; щёлкнуть "OK"; в открывшемся окне, во вкладке "Application Type", указать "Dialog based"; выбрать "Use MFC in a static library" (в этом случае все библиотеки MFC, при компиляции, будут упакованы в файл EXE, разрабатываемого приложения), как показано на рисунке 4.3; щелкнуть "Finish".

Рисунок 4.1 - Подменю с использованием кнопки "Project"

Рисунок 4.2 - "XMLConverter" с располагаемым каталогом

Рисунок 4.3 - Выбор категории "Use MFC in a static library"

В созданном проекте, для редактирования диалогового окна, щёлкаем в меню по "View". В открывшемся списке выбираем "Resource View". В появившемся окне, в дереве представляющем ресурсы проекта, щёлкаем по элементу "Dialog". В раскрывшемся списке выбираем "IDD_XMLCONVERTOR_DIALOG", как показано на рисунке 4.4.

Рисунок 4.4 - Выбор диалога "IDD_XMLCONVERTOR_DIALOG"

Для добавления элементов в форму, нам понадобится меню "Toolbox". Для его открытия необходимо щёлкнуть в меню "View" по элементу с соответствующим именем. Из появившегося диалогового меню будем использовать объекты: "Button", "Edit Control", "Combo Box", "Static Text", "List Control". На рисунке 4.5 показана часть меню "Toolbox".

Рисунок 4.5 - Часть меню "Toolbox"

Для того чтобы добавить элемент, достаточно щёлкнуть мышкой по выбранному объекту, и держа клавишу нажатой, перетащить его на редактируемый диалог. Для открытия окна свойств добавленного элемента необходимо, щёлкнуть по нему правой кнопкой мыши, выбрать, в появившемся контекстном меню, элемент "Properties" (Рисунок 4.6).

Добавим необходимые элементы к окну разрабатываемого приложения, как показано на рисунке 4.7 С помощью поля "Caption", свойств каждого объекта, приведём его заголовок в соответствие с рассмотренным рисунком.

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

Рисунок 4.7 - Добавление необходимых элементов к окну разрабатываемого приложения

Для того чтобы при запуске приложения кнопки: "Преобразовать xml в pdf" и "Удалить выбранный элемент" были не активны, нужно установить, в свойствах каждого элемента, значение поля "Disabled" в "True". Чтобы элемент "List Control" отображал колонки, необходимо в его свойствах, для поля "View" указать значение "Report". Для оконного объекта "Combo Box", в поле "Type" нужно выбрать значение "Drop List". Чтобы рассматриваемый объект содержал значения, воспользуемся полем Data, введя в него строку вида "ГрупСпец_Ф1_gost-B_0-9; ГрупСпец_Ф1_gost-B_10-19; ГрупСпец_Ф1_gost-B_20-29;". В которой через точку с запятой указан список значений элемента "Combo Box". Так как поле, в котором будет отображаться директория для вывода pdf-файлов, не должно подвергаться редактированию, установим его свойство "Read Only" в "True".

Добавим в класс разрабатываемой формы функции - обработчики событий, вызываемые по нажатию соответствующей кнопки. То есть, определим методы, каждый из которых будет вызываться при получении формой соответствующего сообщения от Windows. Для этого, в редакторе форм, два раза щелкнем по кнопке в окне разрабатываемой программы. Редактор Visual Studio автоматически добавит функцию - обработчик сообщения "ON_BN_CLICKED" (отправляемого Windows приложению при щелчке левой кнопкой мыши по элементу "Buttom"), которое поступит в очередь и обработается приложением в порядке следования. Так как сообщения обрабатываются программой очень быстро, щёлчек пользователя по описываемой кнопке, запущенного на выполнение приложения, вызовет соответствующую функцию практически мгновенно. Таким образом добавляются обрабочки событий щелчка левой кнопки мыши для каждого объекта "Buttom".

Для элемента формы типа "List Control", с идентификатором ресурса "IDC_LIST1" определим три обработчика следующих сообщений: "LVN_ITEMCHANGED", "LVN_DELETEITEM", "LVN_ITEMACTIVATE". Первый будет вызываться при выборе элемента, рассматриваемого объекта. Второй при его удалении. Третий при двойном щелчке мышкой по элементу. Для их добавления, необходимо щёлкнуть правой кнопкой мыши по рассматриваемому элементу, в окне редактора форм, и в появившемся меню выбрать "Add Event Handler". В выведенном окне (Рисунок 4.8): выбрать сообщение; указать класс (в данном случае "CXMLConverterDlg"), в который будет добавлена функция; ввести имя добавляемого метода в поле с названием "Function handler name" или оставить предложенное по умолчанию. После выполнения описанных действий щёлкнуть по кнопке "Add and Edit".

Рисунок 4.8 - Указание класса "CXMLConverterDlg"

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

CListCtrl *pList = (CListCtrl*) GetDlgItem (IDC_LIST1);

pList->InsertColumn (0,_T ("Полный путь к xml-файлу"),0,370,-1);

pList->InsertColumn (1,_T ("Статус"),0,100,-1);

pList->InsertColumn (2,_T ("Состояние"),0,100,-1);

Здесь, с помощью функции GetDlgItem () получаем указатель на оконный элемент с идентификатором "IDC_LIST1". Метод InsertColumn () создаёт колонку. В него в качестве параметров передаются: порядковый номер, название, положение текста (0 означает, что текст будет выравниваться по левому краю), ширина, связь с другими колонками (если значение - 1, связи нет). Макрос _T () применяется для преобразования строки в Unicode. Рассмотренный фрагмент кода необходимо поместить в виртуальную функцию OnInitDialog (), которая вызывается Windows при инициализации диалогового окна [6].

Данные выводятся в "IDC_LIST1" с помощь функций: InsertItem () и SetItem (). Первый метод используется для добавления элементов в главный (первый) столбец. Второй для добавления элементов в дочнрние столбцы. В качестве параметра в каждую из функций передается указатель на структуру типа "LV_ITEM". Которая содержит переменные определяющие: номер (позицию) элемента в строке, номер столбца, выводимый текст, максимальную длину выводимой строки. Структура инициализируется перед вызовом функций: InsertItem () и SetItem () [6]. Демонстрационный пример кода представлен ниже.

CListCtrl *pList = (CListCtrl*) GetDlgItem (IDC_LIST1);

LV_ITEM lvitem;

lvitem. mask = LVIF_TEXT;

lvitem. iItem = 0;

lvitem. iSubItem = 0;

lvitem. pszText = str. GetBuffer ();

lvitem. cchTextMax = lstrlen (str);

pList->InsertItem (&lvitem);

lvitem. iSubItem = 1;

lvitem. pszText = _T ("Не выполнено");

lvitem. cchTextMax = lstrlen (_T ("Не выполнено"));

pList->SetItem (&lvitem);

Флаг "LVIF_TEXT" разрешает вывод текста. Переменная str строкового типа CString, который является классом входящем в MFC и предоставляет широкие возможности работы со строкой.

Переменная данного типа является динамической, то есть память под нее выделяется по мере необходимости. Так как переменная pszText, структуры lvitem, должна присвоить указатель, адресующий статический блок памяти, необходимо сделать его таковым. Для этого применяется метод класса CString именуемый GetBuffer () [6]. Чтобы считать данные из элемента типа "List Control", нужно заменить в рассмотренном коде вызов функции InsertItem () на GetItem (). После её выполнения в переменной str окажется текст требуемой ячейки.

Чтобы удалить необходимую строку, используют функцию DeleteItem (), как показано ниже.

CListCtrl *pList = (CListCtrl*) GetDlgItem (IDC_LIST1);

pList->DeleteItem (m_nSelectItem);

Где m_nSelectItem - порядковый номер удаляемой строки. Весь элемент "List Control" очищают с помощью метода DeleteAllItems ().

Для ввода полного пути к преобразуемому xml-файлу, воспользуемся стандартным диалоговым классом CFileDialog, предоставляемым MFC. Объявим переменную типа этого класса.

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

Второй установим в 0. Третий, указывает, какого типа файлы будут видны в диалоге. Для запуска построения модального диалогового окна открытия файла воспользуемся функцией DoModal ().

Данный метод возвратит управление основному окну приложения только после закрытия им вызванного.

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

CFileDialog fdialog (TRUE,0,_T ("*. xml"));

fdialog. DoModal ();

Для выбора директории в которую будут сохраняться pdf-файлы, воспользуемся стандартным диалогом Windows. Для этого объявим структуру BROWSEINFO, присвоим переменным, принадлежащем ей, значения, как показано ниже.

wchar_t sDir [512];

BROWSEINFO brinfo;

brinfo. hwndOwner = 0;

brinfo. pidlRoot = 0;

brinfo. pszDisplayName = sDir;

brinfo. lpszTitle =_T ("Выберите папку для вывода pdf-файлов");

brinfo. ulFlags = BIF_RETURNONLYFSDIRS;

brinfo. lpfn = 0;

brinfo. lParam = 0;

Для вывода диалогового окна воспользуемся функцией SHBrowseForFolder (&brinfo).

Которая возвращает значение типа LPITEMIDLIST. Используя переменную рассмотренного типа и функцию SHGetPathFromIDList () получим путь к выбранной пользователем папке. Пример представлен ниже.

LPITEMIDLIST pDirList = SHBrowseForFolder (&brinfo);

SHGetPathFromIDList (pDirList,sDir);

В результате будет выводится диалог представленный на рисунке 4.9.

Рисунок 4.9 - Выведение диалога

Для того, чтобы сделать не активными кнопки программы необходимо воспользоваться функциями: GetDlgItem () и EnableWindow (). Первая возврвщает указатель на объект. Вторая делает его пассивным, либо активным, в зависимости от значений FALSE или TRUE, соответственно. Применение этих функций продемонстрированно ниже.

GetDlgItem (IDC_BUTTON1) - >EnableWindow (FALSE);

Для предусмотрения возможности ввода количества отступов до и после раздела в генерируемой спецификации, создадим с помощью редактора форм диалоговое окно. Для этого в меню "Resource View" (Рисунок 4.4) нужно щёлкнуть правой кнопкой мыши по элементу "Dialog" и выбрать "Add Resource". В появившемся окне (Рисунок 4.10) выбрать "Dialog" и щёлкнуть "New". В результате в проект будет добавлен новый шаблон диалога. После выполнения ряда действий, принципы проведения которых были описаны ранее, получется диалоговое окно представленное на рисунке 4.11.

Рисунок 4.10 - Выбор категории "Dialog" и кнопки "New"

Рисунок 4.11 - Получение диалогового окна

После создания формы диалога, необходимо добавить для нее класс в проект. Для этого необходимо щёлкнуть правой кнопкой мыши по форме и в появившемся контекстном меню выбрать "Add Class". В выведенном на экран окне указать имя создаваемого класса "CSetting" в поле "Class name". В качестве базового класса, методы которого будут наследоваться, оставить предложенный по умолчанию CDialog. Щелкнуть "Finish". При добавлении событий для элементов формы, их обрабочики будут помещаться в определённый для них класс Setting. То есть, в только что созданный. Далее неообходимо указать заголовочный файл нового диалога в cpp-файле основного диалога. Затем внести объявление класса в виде записи "class CSetting" в заголовочный файл класса CXMLConverterDlg. Для вызова окна представленного на рисунке 4.11 при щелчке мышкой по кнопке в главном диалоге, необходимо внести в обработчик соответствующего события код представленный ниже.

CSitting *pSitting = new CSitting ();

pSitting->DoModal ();

delete [] pSitting;

Для того, чтобы считывать и хранить значения вносимые в элемент "Edit Controll" необходимо добавить переменную. Для этого в редакторе форм необходимо щёлкнуть правой кнопкой мыши по нужному объекту, выбрать в меню "Add Variable". В появившемся окне указать категорию, имя и тип переменной. Возможно так же ввести минимальное и максимальное её значения. Пример представлен на рисунке 4.12.

Рисунок 4.12 - Выбор объекта "Add Variable"

В результате выполнения работ описанных в текущей главе, был разработан пользовательский интерфейс приложения XMLConverter.

4.1.2 Разработка функций реализующих алгоритм преобразования исходного XML в новый XML

Во время выполнения настоящей квалификационной работы был разработан алгоритм преобразования xml-документа в промежуточный xml-документ. При его рассмотрении примем во внимание, что все расчёты количества добавляемых строк ведутся с учётом заданных величин отступов сверху и снизу для разделов в спецификации. Отступы представлены в виде пустых строк. Введём в алгоритм счётчик общего количества строк i. Он нужен для контроля позиции текущего элемента, а также, чтобы вычислить количество пустых строк, которые необходимо добавить в конец xml-документа. Перед запуском алгоритма i равно 0. Под элементами будем понимать, теги <line/> и <section/>. Преобразование рассматривается на уровне этих объектов. Рассматривая их, будем иметь в виду, что они несут с собой данные, хранимые в атрибутах. Каждый из этих элементов (<line/> и <section/>) образует строку таблицы спецификации. То есть, говоря о строке pdf-документа, будем подразумевать, что это <line/> или <section/> xml-документа и наоборот.

Алгоритм состоит из следующих шагов.

1 этап. Увеличиваем счётчик на единицу. Рассматриваем i-ю строку xml-документа. Если это <section/>, переходим к этапу 2. Иначе переходи к этапу 5.

2 этап. Проверяем, не попадёт ли раздел на вторую строку страницы спецификации, при добавлении пустых строк (по одной, начиная с нуля) сверху, в пределах заданного отступа. Если да, вносим необходимое число пустых элементов <line/> и увеличиваем счётчик на количество добавленных строк. Переходим к этапу 7. Иначе, увеличиваем счётчик на величину заданного отступа. Переходим к этапу 3.

3 этап. Проверяем, не получается ли разрыв между разделом и первой не пустой строкой, после него, в виде переноса последней на другой лист спецификации, при добавлении пустых строк (по одной, начиная с нуля) снизу, в пределах заданного отступа. Если да, добавляем перед <section/> необходимое число <line/>, сдвигая, таким образом, раздел на вторую строку следующего листа. Увеличиваем счётчик на число добавленных строк. Переходим к этапу 7. В противном случае переходим к этапу 4.

4 этап. Проверяем, не попадёт ли раздел на первую строку страницы спецификации. Если да, добавляем перед <section/> один пустой <line/> и увеличиваем счётчик на единицу. Переходим к этапу 7.

5 этап. Проверяем, не попадёт ли <line/> на последнюю строку страницы спецификации. Если да, добавляем перед ним две пустых строки и увеличиваем счётчик на два. исло добавленных строкего, в виде переноса последней люсмые в атрибутах. Переходим к следующему этапу.

6 этап. Проверяем, не попадёт ли <line/> на первую строку страницы спецификации. Если да, добавляем перед ним один пустой <line/> и увеличиваем счётчик на единицу. Переходим к этапу 8.

7 этап. Увеличиваем счётчик на величину заданного отступа снизу раздела. Переходим к следующему этапу. исло добавленных строкего, в виде переноса последней люсмые в атрибутах.

8 этап. Проверяем, если, достигнут конец xml-документа, вычисляем количество, пустых строк, которые необходимо добавить, чтобы последний лист спецификации pdf, был заполнен полностью. В противном случае переходим к этапу 1.

Перейдем к программной реализации представленного алгоритма. Чтение данных из xml-файла производится с помощью функции ReadFile (). Но, для начала, необходимо открыть файл с помощью функции CreateFile () [10]. Рассмотрим следующий фрагмент кода.

HANDLE hFile = CreateFile (sDir,GENERIC_READ,0,0,OPEN_EXISTING,0,0);

DWORD fileSize = GetFileSize (hFile,0);

char *fileBuffer = new char [fileSize];

DWORD bytesRead;

ReadFile (hFile,fileBuffer,fileSize,&bytesRead,0);

Первый параметр передаваемый в функцию CreateFile () - это строковая переменная содержащая путь к открываемому xml-файлу. Флаг GENERIC_READ означает, что файл открывается только для чтения. Флаг OPEN_EXISTING сведетельствует от том будет открыт существующий файл. Рассматривыемый метод возвращает идентификатор открытого ресурса (файла). Функция GetFileSize () возвращает размер открытого файла. С помощью функции ReadFile () данные всего файла считываются в оперативную память (по адресу содержащемуся в fileBuffer). Третий параметр рассматриваемого метода - количество байт для чтения. После выполнения функции, переменная bytesRead будет содержать число реально прочитанных байт.

Для программной проверки, не попадёт ли раздел на вторую строку страницы спецификации (этап 2, рассмотренного алгоритма) был разработан следующий фрагмент кода.

for (DWORD k = 0; k < kline_before + 1; k++)

{

if ( ( (*line) + k == 2) || ( (*line) + k == (K+2)) || ( ( ( (*line) + k - (K+2)) % T == 0) && ( ( (*line) + k) > (K+2))))

{

positionSectionStart [section] [2] = k;

yes = true;

break;

}

}

Здесь переменная kline_before содержит значение количесива пустых <line/> добавляемых сверху <section/>. По адресу хранящимуся в line, находится значение счётчика строк. Переменная K - это количество строк на первой странице спецификации. Т - количество строк на 2й и последующих страницах спецификации. Переменная section содержит количество просмотренных разделов. И соответственно, номер текущего раздела. Переменая массива positionSectionStart [section] [2] содержит количество строк добавляемых перед текущим разделом. Переменная массива positionSectionStart [section] [0] содержит позицию символа < (текущего тега <section/> или <line/>) в xml-файле. Значение элемента массива positionSectionStart [section] [1] информирует о том, что positionSectionStart [section] [0] содержит позицию объекта <section> или <line/>.

Для программной проверки разрыва между разделом и первой не пустой строкой, после него, в виде переноса последней на другой лист спецификации (этап 3, рассмотренного алгоритма), был разработан следующий фрагмент кода.

for (DWORD k = 0; k < kline_after + 2; k++)

{

// Проверяем не попала ли секция в конец листа спецификации

if ( ( ( (*line) +k) == K) || ( ( ( ( (*line) +k-K) %T) == 0) && ( ( (*line) +k) > K)))

{

(*section10_29) ++;

positionSection10_29 [*section10_29] [0] = section;

// Должны быть добавлены как минимум 2 строки

positionSection10_29 [*section10_29] [1] = k + 2;

*line += k + 2;

break;

}

}

Здесь переменная kline_after одержит значение количесива пустых <line/> добавляемых снизу <section/>. По адресу хранящимуся в section10_29 находится значение счётчика разделов попавших в начало или конец листа спецификации. Элемент массива positionSection10_29 [*section10_29] [0] содержит порядковый номер раздела в xml-документе. Переменая positionSection10_29 [*section10_29] [2] содержит число дополнительно добавляемых строк перед разделом, для переноса его на новый лист спецификации.

Программная реализация проверки попадания раздела в конец листа спецификации представлена ниже.

if ( (*line == 1) || (*line == (K+1)) || ( ( (*line - (K+1)) %T== 0) && ( (*line > (K+1))))

{

(*section10_29) ++;

positionSection10_29 [*section10_29] [0] = section;

positionSection10_29 [*section10_29] [1] = 1;

*line ++;

break;

}

Проверка на этапах 5 и 6 реализуется аналогично.

Код функций, реализующих алгоритм преобразования xml-файла в новый xml-документ, представлен в приложении B.

4.2 Создание инсталляционного пакета

Для создания пакета инсталляции разработанного приложения и всех сопутствующих компонентов воспользуемся бесплатно распространяемой программой "NetScat Extreme Installer", версии 1.04. Для этого, после её запуска на вкладке "Общие" введём данные, как показано на рисунке 4.13.

Рисунок 4.13 - Использование программы "NetScat Extreme Installer"

На вкладке "Файлы" укажем директорию, в которой находятся файлы, предназначенные для компоновки создаваемого инсталлятора. Вкладка "Ярлыки" предназначена для ввода данных о ярлыках, которые необходимо создать инсталлятору при установке приложения. Соответствующие информационные поля заполняются, как показано на рисунке 4.14. Запись "%Desktop%" обозначает, что ярлык будет создан на рабочем столе. То есть вместо этой записи будет подставлен путь к папке рабочего стола. Запись "%Dest%" обозначает путь к рабочей папке устанавливаемого приложения. Далее необходимо набрать текст лицензионного соглашения на вкладке "Соглашение". Есть возможность загрузить уже существующее соглашение из файла с расширением rtf или txt. На вкладке "Языки" выбираются языки, перечень которых будет предложен при запуске инсталляционного пакета, созданного NetScat Extreme Installer. Результат выбора определит, какой из представленных языков будет использован мастером, для ведения диалога с пользователем во время установки.

Рисунок 4.14 - Заполнение соответствующих информационных полей

Последним этапом настройки параметров создаваемого инсталлятора является выбор вкладки "Построение", в которой указывается степень сжатия. После чего необходимо щёлкнуть "Построить". В появившемся окне ввести имя файла и выбрать папку для его сохранения. Щёлкнуть "Ok".

В результате работы программы NetScat Extreme Installer, был создан инсталляционный пакет для программы XMLConvertor и сопутствующих ей компонентов.

4.3 Руководство пользователя

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

1 этап. Для установки программы запустить файл

XMLConverter_Setup. exe, следовать предписаниям программы установщика.

2 этап. После завершения установки, на рабочем столе будет создан ярлык к приложению, воспользоваться им для запуска программы.

3 этап. После запуска приложения, щёлкнуть мышкой по кнопке "Выбрать xml-файл". Файлов можно выбрать несколько, все они будут преобразованы поочерёдно. Если выбран не тот файл, его можно удалить из списка, воспользовавшись кнопкой "Удалить выбранный элемент".

4 этап. Выбрать с помощью ниспадающего списка требуемый xsl-шаблон, он будет применён для всех выбранных xml-файлов.

5 этап. Выбрать папку для вывода pdf-файлов, щёлкнув "Выбрать папку для вывода pdf-файлов" или оставить предложенную по умолчанию (путь к директории отображается в строке состояния). Выбранный Вами путь сохраняется в системной базе Windows (реестре) и в случае последующих запусков программы считывается.

6 этап. В случае необходимости переопределения количества отступов для разделов спецификации, щёлкнуть по кнопке "Отступы". В появившемся окне, в соответствующие поля, ввести величину отступов.

7 этап. Щёлкнуть преобразовать xml в pdf. На экране появятся поочерёдно два окна консоли. Это работают MSXSL и процессор форматирующих объектов Apache FOP.

8 этап. После выполнения требуемых операций xml-файлы будут преобразованы в PDF, напротив каждого пути (отображаемого в окне приложения) в столбце состояния появится надпись "Выполнено".

9 этап. Для открытия директории, где находятся полученные pdf-файлы с помощью встроенного в Windows файлового менеджера Explorer, достаточно щёлкнуть по кнопке "Открыть".

В рамках настоящей квалификационной работы было разработано приложение, предоставляющее интуитивно понятный пользовательский интерфейс, позволяющий управлять компонентами, входящими в его состав. Был разработан и реализован в программе, алгоритм обработки структуры данных xml-файла в новый xml-документ. Пример первых двух страниц полученного pdf-документа, в результате работы программы XMLConverter, представлен соответственно в приложениях С и D.

5. Организационно-экономические расчеты

5.1 Обоснование необходимости и актуальности разработки

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

Локализацией одной из систем, а именно Creo, занимаются специалисты инженерно-консалтинговой компании Солвер. Данная промышленная система обладает возможностью параллельной разработки изделия: основной стратегией, применяемой ведущими компаниями. Многочисленный набор программных решений позволяет выбрать необходимую конфигурацию каждого рабочего места в соответствии с его функциональностью. Сюда включаются возможности промышленного дизайна, проектирования механических конструкций (в том числе, управление большими сборками), имитации функциональности изделия, изготовления и управления инженерными данными.

Основные задачи, которые ставятся перед любой системой автоматизированного проектирования - это сокращение сроков разработки нового изделия и повышение качества выполнения проекта. Creo решает эти задачи оптимальным путем. Программа обладает рядом преимуществ по сравнению с конкурентами. Но, как и любой другой продукт, не лишен недостатков.

Один из недостатков Creo - отсутствие удобных средств подготовки конструкторской документации в соответствии с отечественной ЕСКД. В том числе - средств формирования спецификаций на сборочное изделие.

Для преодоления указанного недостатка в компании "Солвер" был разработан плагин (надстройка) PartList для формирования спецификаций на сборочное изделие в соответствии с отечественными ГОСТами.

Модуль PartList предназначен для автоматизации процесса создания спецификации на сборочное изделие, разработанное в Creo (Рисунок 1). После установки модуль автоматически подключается в момент запуска Creo и позволяет назначать значения параметров спецификации компонентов сборки, устанавливать позиции компонентов (автоматически или вручную), формировать выходной документ для просмотра и печати.

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

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

5.2 Определение трудоемкости разработки программного продукта

Для определения трудоемкости разработки программного продукта воспользуемся "Укрупненными нормами времени на изготовление и сопровождение программных средств вычислительной техники" (далее - "Нормы").

Параметры разрабатываемого ПП приведены в таблице 5.1.

Таблица 5.1 - Параметры разрабатываемого ПП

Параметр

Значение

Стадии разработки ПП

1) техническое задание

2) технический проект

3) рабочий проект

4) внедрение

Степень новизны ПП

ПС, является развитием определенного параметрического ряда ПС на прежнем типе ЭВМ/ОС

Новый тип ЭВМ

----------

Новый тип ОС

----------

Степень охвата реализуемых функций стандартными ПП

60%

Средства разработки ПП

Системы программирования на основе

Java c СУБД (MySQL), Google Web Toolkit, Spring Framework, Hibernate

Характер среды разработки

Персональные IBM PC-совместимые ЭВМ c ОС Windows

Группа сложности

Группа 3 (минимальная сложность)

Функции ПП

1) вывод данных на экран

2) обработка ошибочных ситуаций

3) формирование базы данных

4) обработка записей базы данных

5) конвертация документа

В соответствии с параметрами ПП, указанными в таблице 5.1, определим численные величины, характеризующие ПП, используя для этого табличные зависимости, определенные "Нормами".

Результаты приведем в таблице 5.2.

Таблица 5.2 - Численные величины, характеризующие ПП

Величина

Обозначение

Значение

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

LПрПр

0,06

LТП

0,5

LРП

0,34

LВн

0,1

Поправочный коэффициент, учитывающий степень новизны ПП и использование при разработке ПП новых типов ЭВМ и ОС

KН

0,40

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

KТ

0,8

Поправочный коэффициент, учитывающий характер среды разработки и средства разработки ПП

KУР

0,17

Используя данные таблицы 5.2, произведем расчеты, необходимые для определения трудоемкости ПП, в соответствии с "Нормами". Значения рассчитанных величин приведем в таблице 5.3 Общий объем разрабатываемого ПП оценен в 24010 условных машинных команд.

Таблица 5.3 - Расчет трудоемкости ПП

Величина

Обозначение и

порядок расчета

Значение

Коэффициент сложности ПП

1,16

Общий объем разрабатываемого ПП

36940

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

TБ

1528

Трудоемкость разработки ПП с учетом конкретных условий разработки, чел. дни

259,8

Общая трудоемкость разработки ПП, чел. дни

301,37

Общая трудоемкость разработки ПП, определяем по формуле:

= 125,3 чел. дней.

Таким образом, общая трудоемкость разработки ПП равняется 125,3 чел. дней.

5.3 Определение состава исполнителей

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

Таблица 5.4 - Расчет необходимого количества исполнителей

Величина

Обозначение и

порядок расчета

Значение

Общее число дней в году

DK

365

Число выходных и праздничных дней в году

DВ

118

Фонд рабочего времени одного работающего в месяц, дни

20.6

Директивный срок выполнения разработки, мес.

Д

4

Среднее число исполнителей, участвующих в разработке ПП, определяем по формуле:

Состав исполнителей для реализации рассматриваемого ПП - это руководитель проекта, ведущий программист, трое программистов и оператор БД. Данные об окладах персонала приведены в таблице 5.5.

Таблица 5.5 - Состав исполнителей разработки ПП

Профессия исполнителя

Количество, чел.

Месячный оклад, р.

1. Руководитель проекта

1

24 500

2. Ведущий программист

1

13 000

Всего

2

37 500

5.4 Расчет сметной стоимости и договорной цены разработки ПП

На момент написания работы ставка социальных отчислений составляет 30%;

Сметную стоимость и договорную цену ПП рассчитаем в таблице 5.12, выполнив предварительно расчеты составляющих сметной стоимости в таблицах 5.6-5.11.

Показатели, используемые при расчете затрат на оплату труда работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала, укажем в таблице 5.7.

Таблица 5.6 - Расчет затрат на материалы и покупные изделия

Наименование материала

Цена за

единицу, р.

Норма

Расхода, шт

Стоимость, р.

1 Бумага для принтера

200

3

600

2 Ручка

20

3

60

3 Диск DVD-RW

50

3

150

Итого

810

Транспортно-заготовительные расходы (15%)

121.5

Всего

931.5

Таблица 5.7 - Показатели, по расчету затрат на оплату труда работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала

Показатель

Обозначение

Норматив минимальной заработной платы в РФ на дату планового расчета, р.

ЗMIN

Повышающий коэффициент

KП

Количество ПЭВМ, обслуживаемых одним работником

НОБСЛ

Процент премии

П

Расчет затрат на оплату труда работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала, проведем в таблице 5.8 При расчете исходим из того, что в информационно-вычислительном центре, где проходит разработка ПП, всего 10 машин.

Таблица 5.8 - Затраты на оплату труда работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала

Персонал, обеспечивающий функционирование ПЭВМ

Должность работника

Показатель

Значение

Порядок расчета РОСН

Значение РОСН

Инженер - электронщик

ЗMIN

7500

10 800

KП

1

НОБСЛ

10

П

20

Системный программист

ЗMIN

6500

9 360

KП

1

НОБСЛ

10

П

20

Оператор

ЗMIN

5200

7 488

KП

1

НОБСЛ

10

П

20

Административный персонал

Начальник ИВЦ

ЗMIN

10000

14 400

KП

1

НОБСЛ

10

П

20

Вспомогательный персонал

Уборщица

ЗMIN

4700

6 768

KП

1

НОБСЛ

10

П

20

Расчет затрат на электроэнергию произведем в таблице 5.9.

Таблица 5.9 - Расчет затрат на электроэнергию

Величина

Обозначение и

порядок расчета

Значение

Длительность рабочей смены, час

tСМ

8

Количество рабочих дней в плановом периоде

DР

247

Продолжительность нерабочего времени в предпраздничные дни, час

tП

1

Количество предпраздничных дней в плановом периоде

DП

9

Номинальный фонд времени работы оборудования за рассчитываемый период, час

1975

Число рабочих смен в сутки

KСМ

1

Процент плановых потерь рабочего времени, %

Б

20

Эффективный годовой фонд времени работы ПЭВМ, час

1 580

Стоимость электроэнергии на момент выполнения плановых расчетов, р. /кВт-час

ЦЭ

2,97

Суммарная мощность ПЭВМ с периферией, кВт

PЭВМ

1

Затраты на силовую электроэнергию, р.

4692,6

Суммарная мощность, которая идет на освещение, кВт

PОСВ

0,5

Затраты на осветительную электроэнергию, р.

2346,3

Расчет затрат на эксплуатацию специального оборудования произведем в таблице 5.10.

Таблица 5.10 - Расчет на эксплуатацию специального оборудования

Показатель

Значение

Основная заработная плата работников, обеспечивающих функционирование ПЭВМ, в том числе:

инженера-электронщика;

системного программиста;

оператора.

10 800

9 360

7 488

Основная заработная плата административного персонала

14 400

Основная заработная плата вспомогательного персонала

6 768

Общая основная заработная плата работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала за расчетный период

48 816

Дополнительная заработная плата работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала

9 763

Социальные отчисления с заработной платы работников, обеспечивающих функционирование ПЭВМ, административного и вспомогательного персонала

10 170

Амортизационные отчисления с оборудования

2100

Затраты на электроэнергию, в том числе:

затраты на силовую электроэнергию;

затраты на электроэнергию, идущую на освещение.

4692,6

2346,3

Общие затраты на электроэнергию

7038,9

Расходы на профилактику оборудования

540

Прочие производственные расходы

14 644,8

Годовые расходы на содержание и эксплуатацию одной ПЭВМ

91 690

Стоимость одного машино-часа работы ПЭВМ

59,1

Сумма расходов на содержание и эксплуатацию ПЭВМ, относящихся к данному программному продукту, составит 7400,2 р.

Расчет затрат на оплату труда и социальные отчисления осуществляется в таблице 5.11.

Таблица 5.11 - Расчет затрат на оплату труда и социальные отчисления

Профессия исполнителя

Количество исполнителей, чел.

Месячный оклад, р.

Заработная плата за период разработки ПП, р. (4 месяца)

Руководитель проекта

1

24 500

98 000

Ведущий программист

1

13 000

52 000

Итого

2

18 750

150 000

Дополнительная заработная плата (15%)

-

-

22 500

Социальные отчисления с заработной платы р (30%)

-

-

51 750

Расчет сметной стоимости и договорной цены разработки ПП произведем в таблице 5.12.

Таблица 5.12 - Расчет стоимости и договорной цены разработки ПП

Наименование статьи затрат

Сумма, р.

Материалы и покупные изделия

931.5

Расходы на содержание и эксплуатацию оборудования

7400

Основная заработная плата исполнителей

150 000

Дополнительная заработная плата исполнителей

22 500

Социальные отчисления с заработной платы р

51 750

Научные и производственные командировки

-

Контрагентские расходы

-

Накладные расходы

90000

Сметная стоимость разработки ПП

322 581.5

Прибыль (20 %)

64516

Договорная цена разработки

387098

Таким образом, стоимость разработки программного комплекса программных средств для представления групповой спецификации на сборочное изделие, генерируемой модулем PartList в среде Creo, в pdf-формате. составляет 387098 рублей.

5.5 Расчет трудоемкости сопровождения ПП

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

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

Таблица 5.13 - Параметры, влияющие на расчет трудоемкости сопровождения ПП

Параметр

Значение

Характер внедрения

Локальное внедрение ПС

Функции ПП

Вывод данных на экран

Формирование базы данных

Объем документации

1,5 тыс строк

В соответствии с параметрами, влияющими на трудоемкость сопровождения ПП, указанными в таблице 5.13, определим численные величины, характеризующие сопровождение ПП. Проведем расчеты, необходимые для определения трудоемкости сопровождения ПП. Результаты приведем в Таблице 5.14.

Таблица 5.14 - Расчет трудоемкости сопровождения ПП

Величина

Обозначение и

порядок расчета

Значение

Коэффициент, учитывающий уровень повышения сложности ПС

KСЛ

0,33

Коэффициент, учитывающий наличие в фонде аналогов ПС

KАН

1,12

Норма времени на проверку функционирования поставленных ПП

на контрольных задачах пользователя

НВР. ОС.

13

Трудоемкость приемки и освоения опытного образца ПП

4,8

Коэффициент, учитывающий степень участия службы сопровождения в разработке ПС

KУЧ

1,2

Норма времени на настройку поставленных ПП на параметры задач пользователей

НВР. ПР.

7

Трудоемкость проверки и оценки опытного образца ПП

2,772

Норма времени на анализ ОПС

НВР АН

5,3

Трудоемкость разработки документации по доработке ПП

2,1

Норма времени на обучение специалистов организации-заказчика работе с ПП

НВР. ОБ.


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

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