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

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

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

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

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

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Санкт-Петербургский государственный политехнический университет"

Институт информационных технологий и управления Высшая инженерная школа

ВЫПУСКНАЯ РАБОТА

СИСТЕМА УПРАВЛЕНИЯ ПРЕДПРИЯТИЕМ

программа профессиональной переподготовки "Разработка веб-сайтов"

Выполнил:

Субботин Алексей Николаевич

Руководитель:

Бенкен Елена Сергеевна

Санкт-Петербург 2015

Содержание

  • Введение
  • 1. Анализ и проектирование сайта
  • 1.1 Цели и задачи данной работы
  • 1.2 Проектирование содержания сайта
  • 2. Обзор возможностей системы управления предприятием
  • 2.1 Аналоги под ОС Windows
  • 2.2 Обзор средств разработки СУП для браузера
  • 3. Этапы разработки
  • 3.1 Техническое задание
  • 3.2 Разработка дизайна
  • 3.3 Верстка (HTML5 и CSS 3.0)
  • 3.4 Проектирование базы данных
  • 3.5 Программирование
  • 3.6 Тестирование и отладка
  • Заключение
  • Список использованной литературы
  • Приложения

Введение

Целью данной дипломной работы является создание полнофункционального, современного сайта системы управления предприятием. Стремительное развитие информационных технологий предоставляет большие возможности для создания экономических систем в браузере. Многие программы, такие как "1С: Предприятие", "SAP Business" и другие зависимы от операционной системы Windows. А если и представляется возможным партирование под Linux, то это дополнительные затраты рабочего времени и соответственно экономических ресурсов организации (финансовых, временных и пр.).

Благодаря технологиям PHP, JavaScript, JQuery, AJAX, MySQL у нас есть широкие возможности для создания динамических WEB-страниц и хранения большого количества данных в хорошо организованном, структурированном виде.

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

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

сайт дизайн база управление

1. Анализ и проектирование сайта

1.1 Цели и задачи данной работы

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

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

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

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

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

В конечном итоге, это - создание СУП с использованием новейших технологий: PHP, JavaScript, JQuery, AJAX, MySQL, которые повысят конкурентоспособность системы по сравнению со своими аналогами на рынке программного обеспечения и услуг.

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

· создание и контроль рабочих процессов, происходящих на предприятии;

· система авторизации, добавление и удаление пользователей;

· служба технической поддержки (добавление, удаление записей);

· редактирование инструкций;

· создание, редактирование и добавление ведомостей согласно ГОСТ;

· ведение маршрутных карт согласно ГОСТ с возможностью контроля рабочего процесса;

· ведение табеля учета рабочего времени.

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

1.2 Проектирование содержания сайта

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

Полнофункциональное меню навигации в начале каждой страницы:

Схема 1: "Схема навигации для СУП"

Рис. 1: "Сформированное меню навигации на каждой странице сайта"

Рис. 2: "Система навигации на сайте СУП"

На странице навигации, представленной выше, можно найти пункты меню базы оборудования, спецификаций карт раскроя, программы для станков с ЧПУ, базы сотрудников организации, разделенные на группы: рабочие, служащие и мастера.

Все это нам помогает сориентироваться в системе, как и меню сверху страницы для доступа к основным функциям программной системы управления предприятием.

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

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

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

Заказ-наряд необходим после заполнения опросного листа для последующего оформления технического решения и отпуска в производство. Технические решения и заказ-наряды должны иметь текстовые поля для заполнения которых предусматривается определенные функции, такие как выбор времени (JQuery datapicker), текстовый редактор (JQwidgets jqxeditor), которые весьма полезны и необходимы.

2. Обзор возможностей системы управления предприятием

2.1 Аналоги под ОС Windows

Сейчас на рынке программного обеспечения широко представлены системы на основе "1С", которые обладают большим функционалом в плане разработки, благодаря конфигуратору. Недостатком является отсутствие WEB-системы для работы через браузер.

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

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

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

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

2.2 Обзор средств разработки СУП для браузера

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

Вполне простой в настройке фреймворк YII позволяет сделать множество функций, не прикладывая много усилий. Аналогов нашей системы найти не удалось.

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

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

3. Этапы разработки

3.1 Техническое задание

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

Далее на схеме №1 представлена иерархическая структура предприятия:

Схема №2: "Иерархическая структура предприятия"

Таб. №1: "Описание функций, которые должны быть реализованы в системе"

№ п/п

Название функции

Описание

1.

Запись процессов

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

2.

Контроль процессов

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

3.

Техническая поддержка

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

4.

Блокировка сайта

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

5.

Ограничение доступа

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

6.

Управление базой данных

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

7.

Управление пользователями

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

8.

Ведение ведомостей

Система хранения, ведения, добавления, изменения ведомостей изготовления на предприятии согласно ГОСТ.

9.

Маршрутные карты

Ведение маршрутных карт согласно ГОСТ с возможностью контроля рабочего процесса.

10.

Табель учета рабочего времени

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

Далее представлена схема технологических рабочих процессов:

Схема №3: "Технологические рабочие процессы на предприятии"

Здесь реализуется контроль исполнения. Главный инженер контролирует исполнение процессов через нашу систему.

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

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

Пользователи должны добавляться с правами user от имени admin. В нашей системе есть четкое разграничение прав доступа, которое характеризуется тремя уровнями: system, admin, user, с числовыми значениями: 0, 10 и 20 соответственно.

Благодаря такому разграничению у нас появляется возможность создавать и удалять записи в системе helpdesk (технической поддержки) и контролировать исполнение процессов (ставить отметки об исполнении).

3.2 Разработка дизайна

Макет сайта делается в графическом редакторе Adobe Photoshop CC 14 с применением десятипиксельной сетки и разбивается по слоям. В итоге, мы можем видеть такой макет титульной страницы:

Рис. 3: "Титульная страница системы управления предприятием"

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

Такое сочетание гармонирует с цветовым кругом в дизайне и отражает творческий позыв автора.

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

Разработана система авторизации, основанная на SESSION:

Рис. 4: "Система авторизации на сайте www.unionpoint.ru"

Потом можно выйти из системы, что очень удобно:

Рис. 5: "Выход из системы управления предприятием"

Особое внимание нужно уделить не только титульной странице, на которой разместится инструкция по пользованию системой и руководство пользователя, но и системе записи процессов и контроля исполнения:

Рис. 6: "Система записи процессов"

Здесь мы видим дату записи, имя пользователя слева, номер и название самого процесса исполнения - справа. Особых правил здесь можно не придерживаться. Главное, чтобы процесс отражал суть происходящей операции в данной организации.

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

Система контроля исполнения:

Рис. 7: "Система контроля процессов на предприятии"

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

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

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

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

Рис. 8: "Страница технической поддержки"

Удалять записи может только администратор с определенным паролем:

Рис. 9: "Удаление записи из технической поддержки с правами администратора и паролем"

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

Рис. 10: "Страница редактирования информации на главной странице"

Чтобы не сбивать пользователя с мысли о работе, не отвлекать его, разработано выпадающее меню на JavaScript:

Рис. 11: "Выпадающее меню на JavaScript"

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

3.3 Верстка (HTML5 и CSS 3.0)

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

3.4 Проектирование базы данных

Большое внимание нужно уделить четкой и логичной структуре базы данных. Это необходимый каркас для сайта, на который в дальнейшем можно будет добавить представление и взаимодействие с БД через PDO языка PHP.

1. Краткое описание таблиц:

Название

Описание

privileges

группы пользователей

auth

логины и пароли пользователей (допускаются русские символы)

processing

процессы на предприятии

support

техническая поддержка

system

специальные и служебные данные (инструкции хранятся по пользованию системой и пр.)

2. Описание полей:

Таблица: privileges

role

уровень доступа в числовом формате

glogin

описание группы в текстовом формате

Таблица: auth

login

имя пользователя

password

пароль

role

уровень доступа и соотв. к какой группе он относится

Таблица: processing

id

уникальный идентификатор процесса

otdel

отдел или цех в котором происходит процесс

login

автор процесса

message

полное описание процесса

dtW

дата создания

state

отметка о снятии или закрытии

Таблица: support

id

уникальный идентификатор записи в службу поддержки

name

имя, от кого было написано сообщение

email

адрес, по которому можно связаться

text

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

role

права доступа для удаления

Таблица: system

id

уникальный идентификатор

role

уровень доступа

text

текстовая запись

Далее, представлена схема таблиц базы данных UnionPoint, www.unionpoint.ru

Рис. 12: "Предварительный вариант схемы базы данных"

Более подробное описание структуры базы данных, а также скрипт по её созданию, приведены в приложении №1.

3.5 Программирование

Более подробное описание программного кода представлено в приложении 3.

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

Далее, каждая страница представляет собой объект класса PHP, который унаследует поля и методы главного класса.

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

Таб. 2: "Описание программных файлов в проекте СУП"

Название файла

Название класса

Описание

1.

index. php

Index

Содержит методы для отображения на экране главной страницы сайта

2.

instructions. php

Instruct

Инструкции по пользованию системой

3.

processing. php

Proc

Система записи процессов, происходящих на предприятии

4.

controlling. php

Contrl

Система контроля исполнения, происходящих процессов на предприятии

5.

auth. php

Auth

Авторизация в системе по вводу логина и пароля

6.

tech. support. php

Tech

Система технической поддержки, которая взаимодействует с классом class_guestbook. php

7.

class_guestbook. php

Guestbook

Содержит класс для создания гостевой книги на сайте. В нашем случае, взаимодействует с tech. support. php

8.

edit. php

Edit

Система редактирования инструкций с текстовым редактором на JavaScript

9.

deff. php

Default

Настройки по умолчанию (логин, пароль к базе данных и пр.). Содержит константы.

10.

inc. php

LibInc

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

11.

admin. db. php

AdminBase

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

12.

admin. user. php

AdminUser

Удаление и добавление пользователей с правами user в системе управления предприятием

13.

admin. site. php

AdminSite

Ограничение доступа к сайту в определенное время

14.

header. php

Header

Заголовок на каждой странице сайта

15.

footer. php

Footer

"Подвал" на каждой странице сайта

Система каталогов на сайте:

1. Корневой каталог

a. css - каталог для стилевых таблиц

b. img - каталог с картинками

c. js - каталог с JavaScript

программные файлы php, без каталога, в корневом каталоге.

3.6 Тестирование и отладка

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

Бывает, что для тестирования используются сложные программы, тогда тестировщик выступает и в качестве программиста. Бывает, что программы содержат ошибки и по мнению авторов языка С++, каждая программа должна содержать хотя бы одну ошибку.

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

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

Заключение

В данной дипломной работе был разработан сайт системы управления предприятием, который находится по адресу unionpoint.ru на постоянном хостинге в интернете.

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

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

Была достигнута задача максимально удобного интерфейса для сайта, доступа к разнообразным функциям системы управления предприятием. Многие надписи являются гиперссылками с параметрами GET, позволяющими получить сквозную навигацию в нашей системе.

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

Список использованной литературы

1. PHP, MySQL, XML: Программирование для Интернета; Автор: Елена Бенкен; Издательство: БХВ-Петербург; 2011 г.

2. Разработка веб-приложений с помощью PHP и MySQL, PHP and MySQL Web Development; Авторы: Люк Веллинг, Лаура Томсон; Издательство: Вильямс; 2010 г.

3. PHP и jQuery для профессионалов, Pro PHP and jQuery; Автор: Джейсон Ленгсторф; Переводчик: А. Гузикевич; Языки: Русский; Издательство: Вильямс; 2010 г.

4. AJAX: программирование для Интернета; Автор: Елена Бенкен; Издательство: БХВ-Петербург; 2012 г.

5. Головоломки на PHP для хакера.2 изд; Автор: Максим Кузнецов; Издательство: БХВ-Петербург, 2008 г.

6. Объектно-ориентированное программирование на PHP; Автор: Максим Кузнецов; Издательство: БХВ-Петербург, 2012 г.

7. Интернет-ресурс: http://www.php. su/ - мощнейший информационный сайт по функциям и классам языка программирования PHP.

8. Интернет-ресурс: http://php.net/manual/ru/ - русскоязычная документация по языку PHP на официальном сайте PHP.net.

9. Интернет-ресурс: http://www.softtime.ru/bookphp/ - весьма неплохой справочник по функциям PHP.

10. Интернет-ресурс: http://htmlbook.ru/ - мощный справочник по тегам HTML, каскадным таблицам стилей CSS и некоторым JavaScript функциям.

11. Интернет-ресурс: http://learn. javascript.ru/ - мощнейший сайт документации по языку JavaScript: учебники, книги, справочники, форум, чат и многое другое.

12. Интернет-ресурс: http://api. jquery.com/ - API-документация по JQuery.

13. Интернет-ресурс: http://api. jqueryui.com/ - API-документация по JQuery UI.

14. Интернет-ресурс: http://jquery. page2page.ru/index. php5/JQuery_UI - мощная справочная система по JQuery UI.

15. Интернет-ресурс: http://www.jqwidgets.com/jquery-widgets-documentation/ - документация к библиотеке JQWidgets.

Приложения

Приложение 1

Создание структуры базы данных:

SET NAMES utf8;

CREATE DATABASE IF NOT EXISTS unionpoint DEFAULT CHARACTER SET utf8;

CREATE TABLE IF NOT EXISTS product (

id int (5) NOT NULL AUTO_INCREMENT,

product VARCHAR (50) NOT NULL,

drawing_number_of_product VARCHAR (50) NOT NULL, sheet_number int (5) NOT NULL,

node VARCHAR (50) NOT NULL,

drawing_number_of_node VARCHAR (50) NOT NULL,

sheet_all int (5) NOT NULL,

number_node_of_product VARCHAR (50) NOT NULL,

data DATE NOT NULL,

number_of_product_code VARCHAR (50) NOT NULL, number_of_product VARCHAR (50) NOT NULL,

PRIMARY KEY (id));

CREATE TABLE IF NOT EXISTS node (

node_id int (5) NOT NULL AUTO_INCREMENT,

id int (5) NOT NULL,

route VARCHAR (50) NOT NULL,

assembly_drawing VARCHAR (50) NOT NULL,

part_number VARCHAR (50) NOT NULL,

designation VARCHAR (50) NOT NULL,

part_name VARCHAR (50) NOT NULL,

number VARCHAR (50) NOT NULL,

weight_1 VARCHAR (50) NOT NULL,

weight VARCHAR (50) NOT NULL,

mark VARCHAR (50) NOT NULL,

size VARCHAR (50) NOT NULL,

norm VARCHAR (50) NOT NULL,

FOREIGN KEY (id) REFERENCES product2 (id),

PRIMARY KEY (node_id));

CREATE TABLE IF NOT EXISTS order (

order_id int (5) NOT NULL AUTO_INCREMENT,

number_of_order VARCHAR (50) NOT NULL,

PRIMARY KEY (order_id));

CREATE TABLE IF NOT EXISTS route (

route_id int (5) NOT NULL AUTO_INCREMENT,

id int (5) NOT NULL,

order_id int (5) NOT NULL,

number_of_route VARCHAR (50) NOT NULL,

number_of_operation VARCHAR (50) NOT NULL, name_of_equipment VARCHAR (50) NOT NULL, code_of_equipment VARCHAR (50) NOT NULL,

shop VARCHAR (50) NOT NULL,

operation VARCHAR (50) NOT NULL,

rate VARCHAR (50) NOT NULL,

working_time_1 VARCHAR (50) NOT NULL,

tariff_1 VARCHAR (50) NOT NULL,

working_time VARCHAR (50) NOT NULL,

tariff VARCHAR (50) NOT NULL,

working_personnel_number VARCHAR (50) NOT NULL,

worker VARCHAR (50) NOT NULL,

quantity_operation VARCHAR (50) NOT NULL,

FOREIGN KEY (id) REFERENCES node2 (node_id),

FOREIGN KEY (order_id) REFERENCES order2 (order_id), PRIMARY KEY (route_id));

CREATE TABLE IF NOT EXISTS card (

card_id int (5) NOT NULL AUTO_INCREMENT,

route_id int (5) NOT NULL,

job VARCHAR (50) NOT NULL,

developer VARCHAR (50) NOT NULL,

data_create DATE NOT NULL,

data_change DATE NOT NULL,

data_current DATE NOT NULL,

item int (5) NOT NULL,

part_number_card VARCHAR (50) NOT NULL, number_of_parts_card int (5) NOT NULL,

weight_part int (5) NOT NULL,

profile_part VARCHAR (50) NOT NULL,

norm_part int (5) NOT NULL,

FOREIGN KEY (route_id) REFERENCES route2 (route_id), PRIMARY KEY (card_id));

CREATE TABLE IF NOT EXISTS defect (

defect_id int (5) NOT NULL AUTO_INCREMENT,

route_id int (5) NOT NULL,

data_create DATE NOT NULL,

quantity_add int (5) NOT NULL,

quantity_brak int (5) NOT NULL,

quantity_ves int (5) NOT NULL,

text_brak TEXT NOT NULL,

text_otk TEXT NOT NULL,

FOREIGN KEY (route_id) REFERENCES route2 (route_id), PRIMARY KEY (defect_id));

CREATE TABLE IF NOT EXISTS eq (

eq_id int (5) NOT NULL AUTO_INCREMENT,

position int (5) NOT NULL,

model VARCHAR (50) NOT NULL,

name_eq VARCHAR (50) NOT NULL,

number_eq VARCHAR (50) NOT NULL,

organisation VARCHAR (50) NOT NULL,

year_eq VARCHAR (50) NOT NULL,

wshop_eq BOOLEAN NOT NULL,

wshop_name VARCHAR (50) NOT NULL,

wshop_master VARCHAR (50) NOT NULL,

PRIMARY KEY (eq_id));

ALTER TABLE route ADD note VARCHAR (50) NOT NULL,

ADD route_mode VARCHAR (50) NOT NULL;

ALTER TABLE route ADD number_detal int (5) NOT NULL;

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

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

FOREIGN KEY (id) REFERENCES product (id), PRIMARY KEY (id)

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

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

FOREIGN KEY (id) REFERENCES node (id), FOREIGN KEY (id) REFERENCES order (id), PRIMARY KEY (id)

Такая система позволяет организовать связь между таблицами заказов и ведомостей. Маршрутная карта, получается, связана с другими таблицами посредством первичных (PRIMARY KEY) и вторичных (FOREIGN KEY) ключей.

Таблица "card" хранит карты раскроя и другую специальную информацию технологического процесса. Тоже присутствует "card_id" и REFERENCES с "route_id" на "id" в таблицу "route". В таблице "defect" хранятся акты о браке по принципу карт раскроя, а в таблице "eq" перечень оборудования.

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

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

Приложение 2

Для масштабируемой верстки на сайте используются относительные размеры. Например, для блока "conteiner":

#conteiner{

width: 95%;

margin: auto;

background-color: #d3d1d1;

box-shadow: 0px 2px 2px #444;

border: 1px solid #4e4d4d;

background-color: #e9e9e9;

min-width: 800px;

min-height: 600px;

}

Так мы добиваемся масштабируемости в зависимости от размера экрана устройства (параметр width: 95%), равномерный отступ (параметр margin: auto), тени по краям блока (параметр box-shadow: 0px 2px 2px #444) и максимальную ширину (параметр min-width: 800px), чтобы наша страница не превратилась в кашу и маленьком разрешении экрана.

Все параметры CSS помещаются в отдельный файл "style. css" и подключаются в начале каждой страницы:

<link rel="stylesheet" href="css/style. css" type="text/css" />

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

Заголовок каждой страницы настраивается тоже из одного файла:

#header {

background: url (. /img/shapka. gif) repeat-x;

border: 1px solid #dadada;

height: 60px;

margin-bottom: 30px;

font-style: normal;

font-size: 0.9em;

}

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

Блок внизу сайта тоже настраивается через "style. css", вот таким способом:

#footer {

float: left;

border-top: 1px solid #4e4d4d;

text-align: right;

font-size: 0.6em;

font-style: normal;

margin: 30px;

width: 95%;

}

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

Поле ввода пароля тоже настраивается через CSS-файл:

#password {

text-align: center;

font-size: 1.2em;

height: 16px;

}

А также другие поля и поля при наведении:

input: hover {

color: green;

font-weight: bold;

}

p {

float: left;

margin-left: 50px;

}

. normer{

width: 100%;

text-align: center;

background-image: url (. /img/normer. gif);

}

. print_button img{

width: 25px;

cursor: pointer;

float: left;

}

. error{

color: red;

position: relative;

left: 150px;

}

Приложение 3

Программные файлы на сайте имеют иерархическую структуру. В начале у нас создается файл библиотеки "lib. php", где находятся основные функции работы с базой данных.

<? php

include "deff. php";

class LibUP {

public $arrMap = array ("Лос", "Гильотина", "Гибочный пресс", "Плазма",

"Газорезка", "Токарная", "Расточная",

[…]

function NewOpenBaseDataMySQL ($pdoSet) {

// блок подключения к базе данных

try {

$pdoSet = new PDO ('mysql: host='. DTBASE_SERVER, DTBASE_USER, DTBASE_PASSWORD);

} catch (PDOException $e) {

echo 'Error: '. $e->getMessage ();

return false;

}

$pdoSet->query ('SET NAMES utf8; ');

$stmt = $pdoSet->query ('USE '. DTBASE_NAME);

[…]

}

$stmt = $pdoSet->query ('SELECT * FROM node2; ');

if ( (! $stmt) || ($stmt->rowCount () == 0)) {

[…]

$pdoSet->query ($query);

}

return $pdoSet;

}

Также функции работы с датой:

function GetOverData ($valover, $mode) {

if ( (isset ($_POST [$valover])) && ($_POST [$valover]! = '')) {

if ($mode == 0) {

$newDate = $_POST [$valover];

}

if ($mode == 1) {

$originalDate = $_POST [$valover];

$newDate = date ("d-m-Y", strtotime ($originalDate));

}

} else {

if ($mode == 0) {

$newDate = date ('Y-m-d', time ());

}

if ($mode == 1) {

$newDate = date ('d-m-Y', time ());

}

}

return $newDate;

}

Заголовок на каждой странице вызывается из одного метода класса:

function ViewHeader () {

// проверка пароля при входе в систему

if ( (! file_exists ('. htaccess')) && (! file_exists ('. htpasswd'))) {

if ( (! isset ($_COOKIE ["index"])) || (crypt ("union full danied for cookie", $_COOKIE ["index"])! = $_COOKIE ["index"])) {

echo "<script>document. location. href='sign. php? role=index'; </script>";

Exit;

}

}

echo "<a href=\"index. php\"><div id=\"header\"><img src=\"img/logo_ask_grey. gif\" title=\"Система управления предприятием\" alt=\"Система управления предприятием\" /><div><h3>СУПП<br />Система управления производственными процессами</h3></div></div></a>";

// навигационное меню

echo "<input type=button onClick=\"history. back (); \" style=\"width: 130px; cursor: pointer; \" value=' &larr; Назад '>";

echo "<input type=button onClick=\"history. forward (); \" style=\"width: 130px; cursor: pointer; \" value=' Вперед &rarr; '>";

echo "<input type=button onClick=\"location. href='index. php'\" style=\"width: 130px; cursor: pointer; \" value=' &alpha; ск Главная '>";

[…]

}

В начале каждого файла происходит наследование класса:

include "lib. php";

class MailIndex extends LibUP {

[…]

}

А также подключение стилевых таблиц, вспомогательных библиотек JavaScript:

<link rel="stylesheet" href="css/themes/base/jquery. ui. all. css" type="text/css" />

<link rel="stylesheet" href="css/style. css" type="text/css" />

<script src="js/all. js"></script>

<script src="js/jquery-1.5.1 js"></script>

<script src="js/ui/jquery. ui. core. js"></script>

<script src="js/ui/jquery. ui. widget. js"></script>

<script src="js/ui/jquery. ui. position. js"></script>

<script src="js/ui/jquery. ui. autocomplete. js"></script>

<script src="js/ui/jquery. ui. accordion. js"></script>

Потом идет настройка этих библиотек:

<script type="text/javascript">

$ (function () {

$ ("#accordion"). accordion ({

autoHeight: false,

navigation: true,

collapsible: true

});

});

</script>

Так настраивается на нашем сайте "Аккордион", а подключается так:

<div id="accordion"> - достаточно указать id, все очень просто подключается.

Так вызываются селекторы: $this->Selector ('question');

Код самого селектора:

function Selector ($button_id) {

$query = "SELECT tech_id, dogovor_number, dogovor_date FROM tech ORDER BY tech_id; ";

@ $stmt = $this->pdo->query ($query);

if ( ($stmt) && ($stmt->rowCount () > 0)) {

echo "В наличии: <select id=\"". $button_id. "_tech_id\">";

for ($i=0; $row = $stmt->fetch (); $i++) {

if ( (isset ($_POST ["tech_id"])) && ($_POST ["tech_id"] == $row ["tech_id"])) {

echo "<option value=\"". $row ["tech_id"]. "\" selected>". $row ["dogovor_number"];

} else {

echo "<option value=\"". $row ["tech_id"]. "\">". $row ["dogovor_number"];

}

}

}

Так просто на сайте можно выбрать номер договора.

Функция "autocomplite" создается скриптом PHP:

function ScriptJSForDraftSearch () {

$query = "SELECT * FROM draft2 ORDER BY id; ";

@ $stmt = $this->pdo->query ($query);

if ( ($stmt) && ($stmt->rowCount () > 0)) {

echo "<script>";

echo "$ (function () {";

echo "var availableTags = [";

for ($i=0; $row = $stmt->fetch (); $i++) {

if ($i < $stmt->rowCount () - 1) {

echo "\"". $row ["number_draft"]. "\",";

} else {

echo "\"". $row ["number_draft"]. "\"";

}

}

echo "]; ";

echo "$ (\"#draft_id\"). autocomplete ({";

echo "source: availableTags";

echo "}); ";

echo "}); ";

echo "</script>";

}

}

<input id="draft_id"> - а так просто подключается на сайте.

С помощью скрипта "jqxValidator" мы выдаем всплывающую подсказку:

<script type="text/javascript">

$ (document). ready (function () {

$ ("Form"). jqxValidator ({ rules: [

{ input: "#draft_id", message: 'Не менее 5 символов! ', action: 'keyup click', rule: 'minLength=5' }]

});

});

</script>

А с помощью такого скрипта мы показываем кнопку перехода наверх внизу каждой станицы:

<link rel="stylesheet" href="css/scrollup. css">

<div id="scrollup">

<img src="img/up. png" class="up" alt="Прокрутить вверх" />

<script src="js/scrollup. js"></script>

</div>

В каждом файлу мы показываем заголовок с помощью вызова метода:

$MyIndex->ViewHeader ();

Там же происходит проверка авторизации.

Таким образом, мы подключаем текстовый редактор:

<link rel="stylesheet" type="text/css" href="js/jqwidgets/styles/jqx. base. css" />

<script type="text/javascript" src="js/scripts/angular. min. js"></script>

<script type="text/javascript" src="js/scripts/jquery-1.11.1 min. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxcore. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxdata. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxbuttons. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxcheckbox. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxdropdownlist. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxwindow. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxmenu. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxscrollbar. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxeditor. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxlistbox. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxdropdownbutton. js"></script>

<script type="text/javascript" src="js/jqwidgets/jqxangular. js"></script>

<script type="text/javascript" src="js/scripts/demos. js"></script>

<script type="text/javascript">

var demoApp = angular. module ("demoApp", ["jqwidgets"]);

demoApp. controller ("demoController", function ($scope) {

$scope. content = $ ("#textEdit").html ();

$scope. editorSettings = { width: 800, height: 300 };

$scope.html = "";

$scope. $watch ("content", function () {

$scope.html = $ ("<TEXTAREA></TEXTAREA>").html ($scope. content). text ();

});

});

</script>

А с помощью функции PHP вызываем редактор на странице:

function GetJavaEditor ($textEdit) {

echo "<tr><td colspan=\"4\">";

echo "<div ng-controller=\"demoController\">";

echo "<jqx-editor jqx-settings=\"editorSettings\" ng-model=\"content\"></jqx-editor>";

echo "<TEXTAREA NAME=\"dogovor_text_order\" ng-bind=\"html\" COLS=1 ROWS=1 style=\"visibility: hidden; width: 1px; height: 1px; display: none; \" ></TEXTAREA>";

echo "<div id=\"textEdit\" style=\"visibility: hidden; display: none; \" >". $textEdit. "</div>";

echo "</div>";

echo "</td></tr>";

}

В каждом файле есть метод "view", который имеет структуру:

function View () {

echo "<FORM ACTION=\"". $_SERVER ['SCRIPT_NAME']. "\" METHOD=\"POST\">";

где у нас есть форма для отправки на сервер с именем страницы.

Функция показывает заполненную форму для печати:

function ViewPrint ($tech_id) {

echo "<h2>Заказ-наряд</h2>";

echo "<table class=\"table_view\">";

echo "<tr><td style=\"width: 230px; \">";

echo "Заказ-наряд № </td><td>". $this->GetValueInTech ("dogovor_order", $tech_id);

echo "</td><td style=\"width: 130px; \">";

echo "Договор № </td><td style=\"width: 50%; \">". $this->GetValueInTech ("dogovor_number", $tech_id);

echo "</td></tr>";

echo "<tr><td>Заказчик: </td><td>". $this->GetValueInTech ("p23", $tech_id). "</td></tr>";

echo "<tr><td>Наименование продукции</td><td>Кол-во</td><td>Срок изготовления</td><td>Примечание</td></tr>";

echo "<tr><td>". $this->GetValueInTech ("dogovor_name", $tech_id). "</td>";

echo "<td>". $this->GetValueInTech ("dogovor_quantity", $tech_id). "</td>";

echo "<td>". $this->GetValueInTech ("dogovor_date", $tech_id). "</td>";

echo "<td>". $this->GetValueInTech ("p15", $tech_id). "</td></tr>";

echo "<tr><td colspan=\"4\">".

$this->GetValueInTech ("dogovor_text_order", $tech_id). "</td></tr>";

echo "</table>";

}

Функции добавления и сохранения:

function Add () {

$query = "INSERT INTO tech2 (dogovor_order, dogovor_number, p23, dogovor_name, dogovor_quantity, dogovor_date, p15, dogovor_text_order) VALUES ('". $_POST ['dogovor_order']. "', '". $_POST ['dogovor_number']. "', '". $_POST ['p23']. "', '". $_POST ['dogovor_name']. "', '". $_POST ['dogovor_quantity']. "', '". $_POST ['dogovor_date']. "', '". $_POST ['p15']. "', '". $_POST ['dogovor_text_order']. "'); ";

$this->pdo->query ($query);

}

function Save ($tech_id) {

$query = "UPDATE tech2 SET dogovor_order='". $_POST ['dogovor_order']. "', dogovor_number='". $_POST ['dogovor_number']. "', p23='". $_POST ['p23']. "', dogovor_name='". $_POST ['dogovor_name']. "', dogovor_quantity='". $_POST ['dogovor_quantity']. "', dogovor_date='". $_POST ['dogovor_date']. "', p15='". $_POST ['p15']. "', dogovor_text_order='". $_POST ['dogovor_text_order']. "' WHERE tech_id='". $tech_id. "'; ";

$this->pdo->query ($query);

}

Функции выбора чертежа, загрузки и скачивания:

function GetOutBase ($number_of_drawing) {

@ $stmt = $this->pdo->query ("SELECT * FROM draft2; ");

if ( (! $stmt) || ($stmt->rowCount () == 0)) {

$query="CREATE TABLE IF NOT EXISTS draft2 (id int (5) NOT NULL AUTO_INCREMENT, number_draft VARCHAR (50) NOT NULL, fname_draft VARCHAR (50) NOT NULL, PRIMARY KEY (id)); ";

$this->pdo->query ($query);

}

@ $stmt = $this->pdo->query ("SELECT id, fname_draft FROM draft2 WHERE number_draft='". $number_of_drawing. "'; ");

if ( ($stmt) && ($stmt->rowCount () > 0)) {

$row = $stmt->fetch ();

echo "<p>Номер чертежа: <b> [". $number_of_drawing. "] ЕСТЬ</b> в базе. </p>";

echo "<FORM ACTION=\"file. php\" METHOD=\"POST\">";

echo "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"". $number_of_drawing. "\">";

echo "<p><INPUT TYPE=\"submit\" NAME=\"download\" VALUE=\" Скачать \"></p>";

echo "</FORM>";

} else {

echo "<p>Номера чертежа <b> [". $number_of_drawing. "] НЕТ</b> в базе. </p>";

echo "<FORM ENCTYPE=\"multipart/form-data\" ACTION=\"". $_SERVER ['SCRIPT_NAME']. "\" METHOD=\"POST\">";

echo "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"". $number_of_drawing. "\">";

echo "<p><INPUT TYPE=\"submit\" NAME=\"upload\" VALUE=\" Загрузить файл \"></p>";

echo "<p><INPUT TYPE=\"file\" NAME=\"userfile\"></p>";

echo "</FORM>";

}

}

function Upload ($number_of_drawing) {

if ($_FILES ['userfile'] ['tmp_name']! = '') {

$query="SELECT * FROM draft2 WHERE number_draft='". $number_of_drawing. "'";

@ $stmt = $this->pdo->query ($query);

if ( (! $stmt) || ($stmt->rowCount () < 1)) {

$query="INSERT INTO draft2 (number_draft, fname_draft) VALUES ('". $number_of_drawing. "', '". $_FILES ["userfile"] ["name"]. "'); ";

@ $stmt = $this->pdo->query ($query);

}

$query="UPDATE draft2 SET fname_draft='". $_FILES ["userfile"] ["name"]. "' WHERE number_draft='". $number_of_drawing. "'; ";

@ $stmt = $this->pdo->query ($query);

$query="SELECT id, fname_draft FROM draft2 WHERE number_draft='". $number_of_drawing. "'";

@ $stmt = $this->pdo->query ($query);

$row = $stmt->fetch ();

if (! file_exists ('draft/')) {

mkdir ('draft/');

}

if (! file_exists ('draft/id_'. $row ['id']. "/")) {

mkdir ('draft/id_'. $row ['id']. "/");

}

Copy ($_FILES ['userfile'] ['tmp_name'], "draft/id_". $row ['id']. "/id. data");

$new_filename = $row ['fname_draft'];

if (strpos (__FILE__, ': ')! = 0) {

$new_filename = mb_convert_encoding ($new_filename, "Windows-1251", "utf-8");

}

Copy ($_FILES ['userfile'] ['tmp_name'], "draft/id_". $row ['id']. "/". $new_filename);

if ($stmt) {

echo "<p>Файл успешно добавлен. </p>";

} else {

echo "<p>Произошла ошибка при добавлении файла! </p>";

}

} else {

echo "<p>Имя файла не должно быть пустым! </p>";

}

}

function SelectorDraft () {

$query = "SELECT * FROM draft2 ORDER BY id; ";

@ $stmt = $this->pdo->query ($query);

if ( ($stmt) && ($stmt->rowCount () > 0)) {

echo "В наличии: <select id=\"selector_draft_id\" style=\"width: 60%; margin-top: 2px; \">";

for ($i=0; $row = $stmt->fetch (); $i++) {

if ( (isset ($_POST ["selector_draft_id"])) && ($_POST ["selector_draft_id"] == $row ["number_draft"])) {

echo "<option value=\"". $row ["number_draft"]. "\" selected>". $row ["number_draft"];

} else {

echo "<option value=\"". $row ["number_draft"]. "\">". $row ["number_draft"];

}

}

}

function NewDraft () {

echo "<table style=\"width: 430px; margin: auto; \"><tr><td colspan=\"2\"><FORM ENCTYPE=\"multipart/form-data\" ACTION=\"". $_SERVER ['SCRIPT_NAME']. "\" METHOD=\"POST\">";

echo "<p style=\"width: 100%\">Номер чертежа <br /> (в спец. форм. XX. XX. XXX. XXX и т.п.): <br /><INPUT TYPE=\"text\" NAME=\"id\" style=\"width: 330px; \"></p>";

echo "</td></tr><tr><td><p><INPUT TYPE=\"file\" NAME=\"userfile\"></p><br />";

echo "</td><td><INPUT style=\"width: 130px; \" TYPE=\"submit\" NAME=\"upload\" VALUE=\" Загрузить файл \">";

echo "</FORM></td></tr>";

echo "<tr><td style=\"text-align: center; padding: 30px; \">";

echo $this->SelectorDraft ();

echo "</td><td><input type=button id=\"draft_download\" style=\"width: 130px; cursor: pointer; margin-top: 2px; \" value=' Скачать '>";

echo "</td></tr>";

echo "</table>";

}

Размещено на Allbest.ru


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

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