39538

РАЗРАБОТКА ПРОГРАММЫ РАСПРЕДЕЛЕНИЯ ДОКУМЕНТООБОРОТА В МНОГОПРОФИЛЬНОМ ОАО

Дипломная

Информатика, кибернетика и программирование

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

Русский

2013-10-07

1.47 MB

17 чел.

МОСКОВСКИЙ ТЕХНИКУМ КОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ

Федеральное  государственное бюджетное  образовательное  учреждение высшего профессионального образования

«Российский государственный торгово-экономический университет»

УТВЕРЖДАЮ

Заместитель директора

по учебной работе

А.А.Давыдова

__/_______/____

РАЗРАБОТКА ПРОГРАММЫ РАСПРЕДЕЛЕНИЯ ДОКУМЕНТООБОРОТА В МНОГОПРОФИЛЬНОМ ОАО

Пояснительная записка

МТКПр РГТЭУ. 340016.000 81

МП 41-09

Листов 76

Старший консультант Н.А.Сидорова

 __/_______/____

Руководитель разработки Р.Х.Аляутдинов

 __/_______/____

Консультант по экономической части Г.Г.Кардаш

 __/_______/____

Рецензент В.С.Сычиков

 __/_______/____

Председатель предметной комиссии Н.А.Жилкина

 __/_______/____

Разработал М.С.Чекмарева

 __/_______/____

2013

Содержание

  1.  Введение 3
  2.  Специальная часть 5
    1.  Постановка задачи 5
      1.  Назначение задачи 5
      2.  Язык программирования 6
    2.  Схемы алгоритма программы 7
      1.  Схема алгоритма основной программы 7
      2.  Схема алгоритма процедуры Login clica 8
      3.  Схема алгоритма процедуры открытие главного окна 9
      4.  Схема алгоритма процедуры Редактирование 10
      5.  Схема алгоритма процедуры Инициализация 11
      6.  Схема алгоритма процедуры Добавление 12
      7.  Схема алгоритма процедуры Изменение 13
      8.  Схема алгоритма процедуры Добавление пользователя 13
      9.  Схема алгоритма процедуры  
    3.  Отладка программы
    4.  Инструкция по эксплуатации
  3.  Охрана труда
    1.  Введение
    2.  Техника безопасности при работе на компьютере
      1.  Требования по электрической безопасности
      2.  Особенности электропитания системного блока
      3.  Система гигиенических требований
      4.  Требования к видеосистеме
      5.  Требования к рабочему месту
      6.  Требования по обеспечению пожарной безопасности
      7.  Необходимые действия при завершении работы  
  4.  Экономическая часть
    1.  Технико-экономическое обоснование
    2.  Расчет трудоемкости
    3.  Расчет себестоимости
    4.  Анализ структуры себестоимости
    5.  Графическая часть
  5.  Заключение

Список литературы

Приложение А Листинг программы

Приложение Б Результаты выполнения программы


1 ВВЕДЕНИЕ

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

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

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

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


Управленческая деятельность (управление) основана на следующих процессах:

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

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

Целью данной дипломной работы является разработка программы распределение документооборота в многопрофильном ОАО

В задачах подобного рода используются такие языки программирования как С, С++, Assembler и Borland Delphi 7.

Для написания данной программы был выбран  объектно-ориентированный язык программирования Borland Delphi 7 и отлажена на IBM PC.


2 СПЕЦИАЛЬНАЯ ЧАСТЬ

2.1 Постановка задачи

Темой данной дипломной работы является «Разработка программы распределения документооборота в многопрофильном ОАО».

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

2.1.1 Назначение задачи

Разрабатываемая программа предназначена для:

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

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

Программа должна быть написана объектно-ориентированном языке программирования Borland Delphi 7 и отлажена.

2.1.3 Язык программирования

Delphi — императивный, структурированный, объектно-ориентированный язык программирования, диалект Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi начал жить своей самостоятельной жизнью и претерпевал различные изменения, связанные с современными тенденциями (например, с развитием платформы .NET) развития языков программирования: появились class helpers, перегрузки операторов и другое.

Object Pascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject.

Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal.

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


2.2 Схемы алгоритма программы

2.2.1 Схема алгоритма основной программы


2.2.2 Схема алгоритма процедуры Login clic


2.2.3 Схемы алгоритмов процедур Поиск, Редактирование, Мои документы, Сортировка

 
2.2.4 Схема алгоритма процедуры Редактирование

2.2.5 Схема алгоритма процедуры Инициализация

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

 
2.2.7 Схема алгоритма процедуры Добавление пользователя

 
2.2.8 Схема алгоритма процедуры Изменение

 
2.2.9 Схема алгоритма процедуры Главное окно


2.3 Отладка программы

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

Виды ошибок, допускаемых в процессе разработки:

  1.  технологические – это ошибки документации и фиксирования программ в памяти ЭВМ. Они составляют 5-10% от общего числа ошибок, обнаруживаемых при отладке;
  2.  программные. Количество этих ошибок зависит от квалификации разработчиков, от общего объема комплекса программ, от глубины логического и информационного взаимодействия модулей и от других факторов. Обычно программные ошибки составляют 1/3 всех ошибок;
  3.  алгоритмические. Эти ошибки обусловлены некорректной постановкой задачи. Такие ошибки составляют от 6% до 8% от общего числа;
  4.  системные. Такие ошибки возникают из-за неполной информации о реальных процессах, происходящих в источниках и потребителях информации. Обычно в начале отладки доля системных ошибок не велика (около 10%), но она существенно возрастает (до 35-40%) на завершающих этапах отладки.

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

Во время отладки программы были обнаружены ошибки различных видов. Ниже приведены некоторые из них:

  1.  синтаксические:
    1.  неправильное написание обращение к методу класса IniFile.Read;
    2.  неправильное написание цикла while;

  1.  алгоритмические:
    1.  неверный SQL – запрос (SELECT login FROM Сотрудники) вместо (SELECT login,password FROM Сотрудники);
    2.  неверное чтение из файла конфигурации IniFile.WriteString ('who','login',temp) вместо IniFile.WriteString ('Login','who',temp)

Все ошибки были исправлены. Испытания программы, проведенные с помощью:

  1.  добавления пользователей;
  2.  изменения пользователей;
  3.  удаления пользователей;
  4.  добавление документов;
  5.  изменения документов;
  6.  удаления документов;
  7.  просмотр документов;
  8.  сортировка документов по уровню;
  9.  поиск документа:
    •  по исходящему номеру;
    •  по входящему номеру

Показали работоспособность программы.

Следовательно, программа работает правильно.

Листинг программы приведен в приложении А, а результаты выполнения – в приложении Б.


2.4 Инструкция по эксплуатации

Минимальные требования работы программы:

  1.  установленный дистрибутив Microsoft .NET;
  2.  процессор архитектуры Intel 80386;
  3.  64 Mb оперативной памяти (в зависимости от размера базы);
  4.  операционная система семейства Microsoft Windows NT;
  5.  мышь;
  6.  любой PDF reader.

Для запуска программы необходимо дважды щелкнуть по файлу «Программа распределение документов.exe». При первом старте, программа откроет диалоговое окно, в котором следует выбрать базу данных (*.mdb). Диалоговое окно изображено на рисунке 2.1.

Рисунок 2.1 – Диалоговое  окно программы

После этого откроется стартовое окно программы. Стартовое окно программы изображено на рисунке 2.2.


Рисунок 2.2 – Стартовое  окно программы

В поле логин вводится логин, которое было выдано ранее администратором. Если ввод был выполнен правильно, то откроется главное окно программы. Главное окно программы изображено на рисунке 2.3.

Рисунок 2.3 – Главное окно программы

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


3
 ОХРАНА ТРУДА

3.1 Введение

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

  1.  как основной принцип трудового права и трудовых правоотношений;
  2.  как система законодательных актов, а также предупредительных и регламентирующих социально-экономических, организационных, технических, санитарно-гигиенических и лечебно-профилактических мероприятий, технических средств и методов, направленных на обеспечение безопасных условий труда (ГОСТ 12.0.002-80).

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

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

В состав системы охраны труда входят следующие элементы:

  1.  техника безопасности свод правил  и положений, направленный на обеспечение условий безопасного труда и/или проведения каких-либо других работ;
  2.  производственная санитария определяется как система организационных мероприятий и технических средств, предотвращающих или уменьшающих воздействие на работающих вредных производственных факторов;
  3.  гигиена труда характеризуется как профилактическая медицина, изучающая условия и характер труда, их влияние на здоровье и функциональное состояние человека и разрабатывающая научные основы и практические меры, направленные на профилактику вредного и опасного воздействия факторов производственной среды и трудового процесса на работающих;
  4.  электробезопасность – состояние защищённости работника от вредного и опасного воздействия электротока, электродуги, электромагнитного поля и статического электричества;
  5.  пожарная безопасность – состояние защищённости личности, имущества общества и государства от пожаров;
  6.  промышленная безопасность – состояние защищённости жизненно важных интересов личности и общества от аварий на опасных производственных объектах и последствий указанных аварий. В свою очередь охрана труда, электробезопасность, промышленная безопасность, пожарная безопасность являются составными частями;
  7.  безопасность жизнедеятельности – наука о комфортном и безопасном взаимодействии человека с техносферой;
  8.  управление безопасностью труда – организация работы по обеспечению безопасности, снижению травматизма и аварийности, профессиональных заболеваний, улучшению условий труда на основе комплекса задач по созданию безопасных и безвредных условий труда. Основана на применении законодательных нормативных актов в области охраны труда.

3.2 Техника безопасности при работе на

компьютере

3.2.1 Требования по электрической безопасности

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

  1.  недопустимо использование некачественных и изношенных компонентов в системе электроснабжения, а также их суррогатных заменителей: розеток, удлинителей, переходников, тройников. Недопустимо самостоятельно модифицировать розетки для подключения вилок, соответствующих иным стандартам. Электрические контакты розеток не должны испытывать механических нагрузок, связанных с подключением массивных компонентов (адаптеров, тройников и т. п.);
  2.  все питающие кабели и провода должны располагаться с задней стороны компьютера и периферийных устройств. Их размещение в рабочей зоне пользователя недопустимо;
  3.  запрещается производить какие-либо операции, связанные с подключением, отключением или перемещением компонентов компьютерной системы без предварительного отключения питания;
  4.  компьютер не следует устанавливать вблизи электронагревательных приборов и систем отопления;
  5.  недопустимо размещать на системном блоке, мониторе и периферийных устройствах посторонние предметы: книги, листы бумаги, салфетки, чехлы для защиты от пыли, так как это приводит к постоянному или временному перекрытию вентиляционных отверстий;
  6.  запрещается внедрять посторонние предметы в эксплуатационные или вентиляционные отверстия компонентов компьютерной системы.
  7.  вскрытие монитора пользователем не должно происходить ни при каких условиях, так как монитор содержит элементы, способные сохранять высокое напряжение на протяжении длительного времени после отключения от сети. Получение доступа к этим элементам не только опасно для жизни, но и технически бесполезно, так как ни одна составляющая монитора, не может быть подвергнута регулировке или настройке, которая улучшит его работу.

3.2.2 Особенности электропитания системного 

блока

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

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


3.2.3 Система гигиенических требований

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

3.2.4 Требования к видеосистеме

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

  1.  монитор компьютера должен удовлетворять следующим международным стандартам безопасности:
  2.  по уровню электромагнитных излучений – ТСО 95;
  3.  по параметрам качества изображения (яркость, контрастность, мерцание, антибликовые свойства и др.) – ТСО 99.

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

  1.  на рабочем месте монитор должен устанавливаться таким образом, чтобы исключить возможность отражения от его экрана в сторону пользователя источников общего освещения помещения;
  2.  расстояние от экрана монитора до глаз пользователя должно составлять от 50 до 70 см. Не надо стремиться отодвинуть монитор как можно дальше от глаз, опасаясь вредных излучений (по бытовому опыту общения с телевизором), потому что для глаза важен также угол обзора наиболее характерных объектов. Оптимально, размещение монитора на расстоянии 1,5 D от глаз пользователя, где D – размер экрана монитора, измеренный по диагонали. Сравните эту рекомендацию с величиной 3...5 D, рекомендованной для бытовых телевизоров, и сопоставьте размеры символов на экране монитора (наиболее характерный объект, требующий концентрации внимания) с размерами объектов, характерных для телевидения (изображения людей, сооружений, объектов природы). Завышенное расстояния от глаз до монитора приводит к дополнительному напряжению органов зрения, сказывается на затруднении перехода от работы с монитором к работе с книгой и проявляется в преждевременном развитии дальнозоркости;
  3.  важным параметром является частота кадров, которая зависит от свойств монитора, видеоадаптера и программных настроек видеосистемы. Для работы с текстами минимально допустима частота кадров 72 Гц. Для работы с графикой рекомендуется частота кадров от 85 Гц и выше.

3.2.5 Требования к рабочему месту

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

  1.  монитор должен быть установлен прямо перед пользователем и не требовать поворота головы или корпуса тела;
  2.  рабочий стол и посадочное место должны иметь такую высоту, чтобы уровень глаз пользователя находился чуть выше центра монитора. На экран монитора следует смотреть сверху вниз, а не наоборот. Даже кратковременная работа с монитором, установленным слишком высоко, приводит к утомлению шейных отделов позвоночника;
  3.  если при правильной установке монитора относительно уровня глаз выясняется, что ноги пользователя не могут свободно покоиться на полу, следует установить подставку для ног, желательно наклонную. Если ноги не имеют надежной опоры, это непременно ведет к нарушению осанки и утомлению позвоночника. Удобно, когда компьютерная мебель (стол и рабочее кресло) имеют средства для регулировки по высоте. В этом случае проще добиться оптимального положения;
  4.  клавиатура должна быть расположена на такой высоте, чтобы пальцы рук располагались на ней свободно, без напряжения, а угол между плечом и предплечьем составлял 100°-110°. При использовании обычных школьно-письменных столов добиться одновременно правильного положения и монитора, и клавиатуры практически невозможно. Для работы рекомендуется использовать специальные компьютерные столы, имеющие выдвижные полочки для клавиатуры.
  5.  при длительной работе с клавиатурой возможно утомление сухожилий кистевого сустава. Известно тяжелое профессиональное заболевание — кистевой туннельный синдром, связанное с неправильным положением рук на клавиатуре. Во избежание чрезмерных нагрузок на кисть желательно предоставить рабочее кресло с подлокотниками, уровень высоты которых, замеренный от пола, совпадает с уровнем высоты расположения клавиатуры;
  6.  при работе с мышью рука не должна находиться на весу. Локоть руки или хотя бы запястье должны иметь твердую опору. Если предусмотреть необходимое расположение рабочего стола и кресла затруднительно, рекомендуется применить коврик для мыши, имеющий специальный опорный валик. Нередки случаи, когда в поисках опоры для руки (обычно правой) располагают монитор сбоку от пользователя (соответственно, слева), чтобы он работал вполоборота, опирая локоть или запястье правой руки о стол. Этот прием недопустим. Монитор должен обязательно находиться прямо перед пользователем.

3.2.6 Требования по обеспечению пожарной безопасности

На рабочем месте запрещается иметь огнеопасные вещества.

В помещениях запрещается:

  1.  зажигать огонь;
  2.  включать электрооборудование, если в помещении пахнет газом;
  3.  курить;
  4.  сушить что-либо на отопительных приборах;
  5.  закрывать вентиляционные отверстия в электроаппаратуре.

Источниками воспламенения являются:

  1.  искра при разряде статического электричества;
  2.  искры от электрооборудования;
  3.  искры от удара и трения:
  4.  открытое пламя.

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

Помещения с электрооборудованием должны быть оснащены огнетушителями типа ОУ-2 или ОУБ-3.

3.2.7 Необходимые действия при завершении работы

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


4 ЭКОНОМИЧЕСКАЯ ЧАСТЬ

4.1 Технико-экономическое обоснование

Темой данной дипломной работы является «Разработка программы распределения документооборота в многопрофильном ОАО».

Данная программа предназначена для:

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

Программа написана на языке Borland Delphi 7, выполняется на IBM-PC совместимых ПК в операционных системах типа Windows XP c .Net Framework и выше.

Для определения экономической эффективности от внедрения задачи в производство необходимо рассчитать себестоимость данной задачи.

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

Себестоимость можно рассчитать по следующей формуле:

C = М + ПФ + Тр.заг. + Зосн. + Здоп. + Осоц. + Нцех. + Нзав. + Вн., (4.1)

где  C – себестоимость в рублях;

 М – стоимость материалов;

ПФ – полуфабрикаты;

Тр.заг. – транспортно-заготовительные расходы;

Зосн. – основная заработная плата;

Здоп. – дополнительная заработная плата;

Осоц. – отчисления на соцстрахование;

Нцех. – накладные цеховые расходы;

Нзав. – накладные заводские расходы;

Вн. – внепроизводственные расходы.

Так как разработка программы не предполагает использование материалов и полуфабрикатов и не сопровождается транспортно-заготовительными расходами формула (4.1) примет вид

C = Зосн. + Здоп. + Осоц. + Нцех. + Нзав. + Вн, (4.2)


4.2 Расчет трудоемкости

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

Трудоемкость – это сумма затрат труда (времени), необходимых для изготовления единицы продукции.

Трудоемкость решаемой задачи можно определить по следующей формуле

ТЭ = ТИ + ТА + ТБС + ТП + ТМР + ТОТЛ + ТЭВМ + ТД  ,  (4.3)

где  ТЭ – трудоёмкость в часах;

ТИ – затраты труда на изучение материала, описание задачи;

ТА  – затраты труда на разработку алгоритмов решения задачи;

ТБС  – затраты труда на разработку схем алгоритма программы;

ТП – затраты труда на программирование;

ТМР – затраты труда на машинно-ручные работы;

ТОТЛ – затраты труда на отладку программы;

ТЭВМ – время машинного счета на ЭВМ;

ТД – затраты труда на оформление документации.

Затраты труда на изучение и описание задачи определяются по формуле:

 (4.4)

где  Q – предполагаемое число программных команд данной стадии разработки;

–  коэффициент, учитывающий качество описания задачи, =1,5;

B –  производительность исполнителя, количество команд в час;

Ккв –  коэффициент квалификации исполнителя, Ккв  = 0,8.

Предполагаемое число команд данной стадии разработки можно определить по следующей формуле

(4.5)

где   q – предполагаемое число программных команд;

kслпр – коэффициент, учитывающий сложность программы, kслпр = 1,5 ;

t  – время работы программиста на данной стадии;

Pi  – коэффициент коррекции программы при ее разработке;

nk  – количество коррекций в программе.


Расчёт трудоёмкости на этапе изучения.

Рассчитаем время, затраченное на изучение и описание задачи по
формуле (4.5)

t = 5;

q = 75;

Pn = 0,07;

B = 85;

Kсл.пр. = 1,5;

Kкв. = 0.8;

nk = 4;

 = 1,5;

команд

часов

Величины ТА , ТБС , ТП , ТОТЛ вычисляются аналогичным способом по формуле:

                (4.6)

где вместо индекса j в каждом случае подставляется один из индексов рассчитываемых величин.

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

t = 6;

q = 20;

Pn = 0,07;

B = 25;

Kсл.пр. = 1,5;

Kкв. = 0.8;

nk = 6.

 команд

часов


Расчёт трудоёмкости на этапе разработки схем алгоритма.

t = 4;

q = 10;

Pn = 0,07;

B = 15;

Kсл.пр. = 1,5;

Kкв. = 0.8;

nk = 2.

 команд

часов

Расчёт  трудоёмкости  на  этапе программирования.

t = 20;

q = 25;

Pn = 0,07;

B = 25;

Kсл.пр. = 1,5;

Kкв. = 0.8;

nk = 10.

 команд

часов

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

Трудоёмкость на этапе отладки определяется по формуле:

ТОТЛ = Тотл.исп.отлЭВМ                 (4.7)

t = 10;

q = 4;

Pn = 0,07;

B = 5;

Kсл.пр. = 1,5;

Kкв. = 0.8;

nk = 10.

 команд

часов

Время отладки ЭВМ определяется по статистическим данным:

Тотл.ЭВМ  = 0.03+0.09+0,02+0.09+0.01+0.05+0.04+0.05+0.03=0,41 ч

ТОТЛ  = 25,5+0,41=25,91 ч

Расчёт трудоёмкости на этапе составления документации.

t = 10;

q = 20;

Pn = 0,07;

B = 20;

Kсл.пр. = 1,5;

Kкв. = 0.8;

nk = 3.

 команд

 часов

Расчёт трудоёмкости на этапе машинно-ручных работ.

Трудоёмкость на этапе машинно-ручных работ определяется по формуле:

                (4.8)

где   QВВ  – объем вводимой информации в символах (  20000);

НД – норма производительности при занесении информации при помощи клавиатуры (около 3 символов за 1 сек.).

TMP1, 85 часа

Расчёт трудоёмкости, связанный со временем машинного счета на ЭВМ. 

Трудоёмкость на этапе машинного счета на ЭВМ определяется по формуле:

Тэвмввавыв,              (4.9) 

где Тэвм – затраты труда на машинные операции;

Твв – затраты труда на ввод информации;

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

Твыв – затраты труда на вывод информации;


Формула для расчета машинного времени, необходимого для ввода информации

                       (4.10)

где  T  –   затраты труда на ввод/вывод информации;

m –   количество устройств ввода/вывода;

Qui – объем вводимой/выводимой информации в i-ое устройство ввода;

Bi –   быстродействие i-ого устройства ввода/вывода.

Машинное время ЭВМ, необходимое для арифметической и логической обработки информации можно определить по формуле:

           (4.11)

где na – количество арифметических операций;

ta – продолжительность арифметических операций;

t0 – среднее время обращения к запоминающему устройству;

ni – количество обращений к i-му внешнему запоминающему устройству;

k – число внешних запоминающих устройств.

Принимаем Тэвм = 0,01 часа.

Расчет суммарной трудоёмкости решения данной задачи на ЭВМ.

Теперь, зная все затраты труда на всех этапах решения задачи, мы можем узнать трудоёмкость решаемой задачи:

ТЭ = ТИ + ТА + ТБС + ТП + ТМР + ТОТЛ + ТД =

= 15,88 + 12,78 + 5,7 + 63,75 + 25,91 + 22,69 + 1,85 + 0,01 = 148,57 часов

Трудоёмкость решения данной задачи на ЭВМ составляет 148,57 часов.


4.3 Расчет себестоимости

При решении задачи на ЭВМ себестоимость разработки программы определяется по формуле:

,                    (4.12)

где Sэ себестоимость разработанной программы в рублях;

Sи себестоимость на этапе изучения описания задачи;

Sалг – себестоимость разработки алгоритмов решения задачи;

Sбс – себестоимость разработки схемы алгоритма программы;

Sпр – себестоимость на этапе программирования;

Sмр – себестоимость на этапе машинно-ручных работ;

Sотл   себестоимость на этапе отладки;

Sэвм – себестоимость работы на ЭВМ;

Sд – себестоимость разработки документации.

Все слагаемые себестоимости определяются по формуле

Sи-д= Lср.ч.  Ти-ддопсоццехзавотлЭВМСэвм,       (4.13)

где  Lср.ч.  – среднечасовая заработная плата работника.

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

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

Заработная плата включает:

  1.  заработная плата основная;
  2.  заработная плата дополнительная;
  3.  отчисления в фонд социального страхования.


Расчет основной заработной платы.

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

Зосн = Lср.ч. Т             (4.14)

Часовая тарифная ставка определяется по формуле

         (4.15)

где  Fg – месячный фонд времени (Fg = 21,8).

Трудоемкость, расчет которой произведен ранее, равна 148,57 ч.

руб/ч;

ТЭ = ТИ + ТА + ТБС + ТП + ТОТЛ + ТД;

ТЭ = 15,88 + 12,78 + 5,7 + 63,75 + 25,91 + 22,69 + 0,01 = 146,72 часов

Зосн = Lср.ч.   ТЭ  

Зосн=114,68  146,72 = 16825,85 руб.

Расчет дополнительной заработной платы.

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

Здоп = Зосн × 80%;

Здоп 

Расчет отчислений на социальные нужды. 

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

;


Расчет цеховых накладных расходов.

Цеховые накладные расходы определяются в процентном отношении от основной зарплаты и составляют 150 – 400%. В состав цеховых накладных расходов включаются такие затраты как заработная плата аппарата управления цехом (начальника цеха, заместителя начальника, нормировщика), амортизационные отчисления на текущий ремонт заданий, сооружений, на охрану труда в данном цехе и на непроизводительные затраты.

Расчет заводских накладных расходов.

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

Расчет затрат на ЭВМ.

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

Tотл.ЭВМ = 0,41 ч

Сэвм = 70 руб

Sи,алг,бс,пр,отл,д = Зосн + Здоп + Осоц + Нцех + Нзав + Tотл.ЭВМ × Сэвм =

= 16825,85 + 13460,68 + 10297,42+ 33651,70 + 16825,85 + 0,41 × 70 =

= 91090,20 руб.


Расчёт себестоимости машинно-ручных операций производится по формуле

Sмр = Lср.ч. Тмр + Здоп + Осоц + Нцех + Нзав + Тмр Сдисп,                  (4.16)

где Тмр – трудоёмкость на машинно-ручных операциях, Тмр = 1,85 ч;

Сд – себестоимость работы дисплея.

Расчет работы дисплея вычисляется по формуле

                                   (4.17)

где   Цдисп  балансовая стоимость дисплея;

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

Э  затраты на электроэнергию;

Tn  срок службы оборудования;

Fg  годовой действительный фонд времени работы оборудования;

Кн  коэффициент использования рабочего времени.

Затраты на электроэнергию вычисляются по формуле

           (4.18)

где Nэ – паспортная потребляемая мощность устройства;

    – коэффициент использования оборудования по мощности;

 Fg  годовой действительный фонд времени работы оборудования;

Сэ – промышленный тариф электроэнергии.

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

Fg = Д  р  tсм  (1 - 0,01 ψ),                 (4.19)

где Д – количество рабочих дней в планируемом периоде;

p – число смен работы оборудования;

– планируемый процент потерь времени на профилактику и ремонт оборудования;

tсм – средняя продолжительность смены.


По формуле (4.19) определим действительный годовой фонд времени:

Fg = 256  1  8  (1 - 0,01  6) = 1925,12 ч.

По формуле (4.18) рассчитаем затраты на электроэнергию:

Э = 0,04  0,8  3,04  1925,12 = 187,28 руб.

Зная все величины, мы можем по формуле определить себестоимость машино-часа работы дисплея:

Цдисп = 11200 руб.

= 1,2  

Тn  = 10 лет  

Kн = 0,8

Nэ = 0,04 кВт

= 0,8  

Cэ = 3,04

Д = 256

tсм = 8   

= 6%

Расчёт основной заработной платы:

Зосн = Lср.ч. Tмр;

Зосн = 114,68  1,85 = 212,16 руб.

Расчёт дополнительной заработной платы:

Здоп = Зосн80% ;

Здоп = = 169,73 руб.

Расчет отчислений на социальное страхование:

Осоц = (Зосндоп) 34% ;

Осоц == 129,84 руб.


Расчёт цеховых накладных расходов:

Нцех = Зосн  200% ;

Нцех = = 424,32 руб.

Расчёт заводских накладных расходов:

Нзав = Зосн  100% ;

Нзав =  = 212,16 руб.

Определим затраты, связанные с выполнением машинно-ручных работ на ЭВМ:

Sмр = 212,16 + 169,73 + 129,84 + 424,32 + 212,16 1,85 × 0,99 = 1150,04 руб.

Себестоимость машино-часа работы определяется по формуле

        (4.20)

где Фз – годовой фонд основной и дополнительной зарплаты персонала, обслуживающего ЭВМ;

Э – затраты на электроэнергию;

А – годовые амортизационные отчисления;

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

М – затраты на материалы, связанные с эксплуатацией ЭВМ;

Ж – затраты, связанные с эксплуатацией вспомогательного оборудования и инвентаря;

Аз – годовые амортизационные отчисления за используемую производственную площадь;

Кр – коэффициент, учитывающий расходы по содержанию, освещению, отоплению помещений;

Fg – действительный годовой фонд времени работы ЭВМ.

По данным предприятия стоимость одного часа работы на ЭВМ = 50 рублей.


Затраты, связанные с выполнением расчётов непосредственно на ЭВМ можно определить по следующей формуле

Sэвм = Тэвм  Сэвм ,                (20)

где Тэвм – трудоёмкость машинного счета;

Сэвм – себестоимость машинного часа работы ЭВМ.

Себестоимость решения задачи на ЭВМ:

SЭ = Sи,алг,бс,пр,отл,д + SМР + SЭВМ = 91090,20 + 1150,04 + 0,50 = 92240,74 руб.

Себестоимость решения задачи на ЭВМ составляет 92240,74 руб.


4.4 Анализ структуры себестоимости

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

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

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

Возможные пути снижения себестоимости для данной задачи:

  1.  применение современных методов разработки документаций;
  2.  использовать более экономные вычислительные системы энергосберегающего и офисного класса;
  3.  более рационально распределять время на профилактику и диагностику оборудования;
  4.  использование автоматических средств для мониторинга состояния ЭВМ и диагностики неисправностей;
  5.  применение более совершенных средств разработки;
  6.  реорганизация некоторых аспектов порядка и правил пользования ЭВМ с целью сокращения времени простоя оборудования.

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


4.5 Графическая часть

В таблице 4.1 приведена производительность труда программиста.

 Таблица 4.1 – Таблица производительности труда программиста

Характер работы

Производительность
количество команд в час

Изучение описания задачи

75-85

Разработка алгоритмов решения

20-25

Разработка схемы алгоритма

10-15

Программирование по схеме алгоритма с использованием алгоритмического языка

20-25

Автономная отладка программы

4-5

Оформление документации

15-20


В таблице 4.2 приведены значения трудоёмкости на различных этапах.

 Таблица 4.2 – Таблица трудоёмкости

Наименование затраты

Единица измерения

Трудоёмкость работы

1

Изучение описания задачи

час

       15,88

2

Разработка алгоритма программы

час

       12,78

3

Разработка схемы алгоритма

час

         5,70

4

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

час

       63,75

5

Машинно-ручные работы

час

         1,85

6

Отладка программы

час

       25,91

7

Оформление документации

час

       22,69

8

Трудоёмкость решения задачи на ЭВМ

час

     148,57


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

 Таблица 4.3 – Таблица калькуляции

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

Сумма, руб

% к итогу

% к Зосн

Прямые расходы

1

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

17038,01

18,47

100,00

2

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

13630,41

14,78

80,00

3

Отчисления на соц. страх.

10427,26

11,30

61,20

4

Стоимость работы ЭВМ

31,03

0,04

0,18

Косвенные расходы

5

Цеховые накладные расходы

34076,02

36,94

200,00

6

Заводские накладные расходы

17038,01

18,47

100,00

Производственная себестоимость

92420,72

100,00



Цеховая себестоимость

75202,73





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

4612,04

5,00



Полная себестоимость

96852,78

105,00




Пояснение к таблице калькуляции.

Зосн = Зосн(м.р.) + Зосн(и-д)

Зосн = 212,16 + 16825,85= 17038,01 руб.

Здоп = Здоп(м.р.) + Здоп(и-д)

Здоп = 169,73 + 13460,68 = 13630,41.

Осоц = Осоц(м.р.) + Осоц(и-д)

Осоц = 129,84 + 10297,42 = 10427,26 руб.

Нцех = Нцех(м.р.) + Нцех(и-д)

Нцех = 424,32 + 33651,7 = 34076,02 руб.

Нзав = Нзав(м.р.) +  Нзав(и-д)

Нзав = 212,16 + 16825,85 = 17038,01 руб.

Сэвм = Тотл×Сэвм + Тм.р.×Сдисп + Тэвм× Сэвм

Сэвм = 0,41×70 + 1,85 × 0,99 + 0,01 × 50 =31,03  руб.


В таблице 4.4 приведены технико-экономические показатели.

  Таблица 4.4 – Таблица технико-экономических показателей

Наименование показателя

Единица измерения

Формула расчёта

Результат

1

Трудоёмкость решения задачи на ЭВМ

час

Тэиабсп+
мротлэвмд

148,57

2

Себестоимость решения задачи на ЭВМ

руб

Sэ=Sи+Sалг+Sбс+Sпр+

+Sмр+Sотл+Sэвм+Sд

96852,78


5 ЗАКЛЮЧЕНИЕ

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

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

С экономической точки зрения трудоемкость разработки программы составила 148,57 часов, себестоимость – 96852 рубля 78 копеек.

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


Список литературы

      1) ZetLab Studio – Руководство разработчика

2)Кардаш Г.Г. Методические указания по курсовому и дипломному проектированию по предмету “Экономика отрасли”, 2003


ПРИЛОЖЕНИЕ А

(обязательное)

Листинг программы


/************************************************************************

ДИПЛОМНАЯ РАБОТА

Разработал: Чекмарева М.С

Версия:    1.00

Дата последних изменений: 30.05.2012

Тема: Разработка программы распределения документооборота в многопрофильном ОАО

Задание: Разработать программу для хранения документов в базе.

************************************************************************/

program Project1;

uses

 Forms,

 Unit1 in 'Unit1.pas' {Form1},

 Unit2 in 'Unit2.pas' {Form2},

 Unit3 in 'Unit3.pas' {Form3},

 Unit4 in 'Unit4.pas' {Form4},

 Unit5 in 'Unit5.pas' {Form5};

{$R *.res}

begin

 Application.Initialize;

 Application.Title := 'ProgramView';

 Application.CreateForm(TForm1, Form1);

 Application.CreateForm(TForm2, Form2);

 Application.CreateForm(TForm3, Form3);

 Application.CreateForm(TForm4, Form4);

 Application.CreateForm(TForm5, Form5);

 Application.Run;

end.


//
UNIT1.pas

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, Unit2,IniFiles;

type

 TForm1 = class(TForm)

   ADOConnection1: TADOConnection;

   ADOQuery1: TADOQuery;

   DataSource1: TDataSource;

   Edit1: TEdit;

   Edit2: TEdit;

   LogIn: TButton;

   Label1: TLabel;

   Label2: TLabel;

   Exit: TButton;

   dbOpen: TOpenDialog;

   procedure FormCreate(Sender: TObject);

   procedure LogInClick(Sender: TObject);

   procedure ExitClick(Sender: TObject);

   procedure FormKeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure Edit1KeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure Edit2KeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 IniFile: TIniFile;

implementation

{$R *.dfm}

//Инициализация формы

procedure TForm1.FormCreate(Sender: TObject);

var s0,s,s1,s2:string;

begin

 try

               if Monitor.Width<1024 then if Monitor.Height<768 then begin

                                                         ShowMessage('Разрешение меньше 1024x768 не поддерживается');

                                                         Application.Terminate;

                                                         end else Application.Terminate else begin

  IniFile:=TIniFile.Create('C:\windows\MyProg.ini');

  s0:=iniFile.ReadString('DataBase','db1.filePath','Ошибка чтения');

  if s0='Ошибка чтения' then

   if dbOpen.Execute then begin

                          s0:=dbOpen.FileName;

                          IniFile.WriteString('DataBase','db1.filePath',s0);

                          end;

   s:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+s0+';';

   s1:='Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="Password123";';

   s2:='Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;';

   ADOConnection1.ConnectionString:=s+s1+s2+'Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';

   ADOConnection1.Connected:=false;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT * FROM Сотрудники');

ADOQuery1.Active:=True;

s0:=IniFile.ReadString('Login','who','Ошибка');

if s0<>'Ошибка' then edit1.Text:=s0;

end;

 except on E:Exception do

 ShowMessage(E.ClassName+' ошибка '+e.message);

 end;

end;

//Нажатие кнопки вход

procedure TForm1.LogInClick(Sender: TObject);

var temp:string;

begin

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add('SELECT password,login from Сотрудники WHERE login='+#39+Edit1.Text+#39);

ADOQuery1.Active:=True;

if ADOQuery1.IsEmpty then ShowMessage('Пользователь '+Edit1.Text+' не найден')

                    else

                    if ADOQuery1.FieldByName('Password').Value<>Edit2.Text then ShowMessage('Не правильный пароль')

                    else

                    begin

                    temp:=ADOQuery1.fieldByName('Login').AsString;

                    IniFile.WriteString('Login','who',temp);

                    ADOQuery1.SQL.Clear;

                     ADOQuery1.SQL.Add('SELECT Familiya,name,Otchestvo from Сотрудники WHERE login='+#39+temp+#39);{+#39+Edit2.Text+#39);}

                     ADOQuery1.Open;

                     temp:=ADOQuery1.FieldByName('name').Value;

                    Form2.lbl1.Caption:=ADOQuery1.FieldByName('Familiya').Value+' '+temp[1]+'.';

                    temp:=ADOQuery1.FieldByName('Otchestvo').Value;

                    Form2.lbl1.Caption:=Form2.lbl1.Caption+' '+temp[1]+'.';

                    ADOQuery1.SQL.Clear;

                    ADOQuery1.SQL.Add('Select type from Сотрудники where login='+#39+Edit1.Text+#39);

                    ADOQuery1.Open;

                    if UpperCase(ADOQuery1.FieldByName('type').Value)='ADMIN' then

                      Form2.dbRepair.Visible:=True

                      else

                     Form2.dbRepair.Visible:=False;

                    Visible:=False;

                    Form2.Show;

                    end;

end;

//Нажатие кнопки выход

procedure TForm1.ExitClick(Sender: TObject);

begin

Close;

end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

begin

if (key=66)and(Shift=[ssAlt]) then

                             if MessageDlg('Выбрать другую базу?',mtConfirmation,[mbOK]+[mbCancel],0)=mrOk then

                             begin

                             ADOConnection1.Connected:=false;

                             ADOConnection1.ConnectionString:='';

                             IniFile.DeleteKey('DataBase','db1.filePath');

                             FormCreate(sender);

                             end;

if  (Key=27) then ExitClick(sender);

end;

//Нажатие кнопки с клавиатуры в текстовом поле 1

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

begin

if Key=13 then Edit2.SetFocus else if Key=40 then Edit2.SetFocus;

end;

//Нажатие кнопки с клавиатуры в текстовом поле 2

procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

begin

if Key=13 then LogInClick(sender) else if Key=38 then edit1.SetFocus;

end;

end.


//Unit2.pas

unit Unit2;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Grids, DBGrids, StdCtrls, DB, ADODB,ShellAPI,COMobj;

type

 TForm2 = class(TForm)

   dbgrd1: TDBGrid;

   lbl1: TLabel;

   ADOConnection2: TADOConnection;

   ADOQuery2: TADOQuery;

   DataSource2: TDataSource;

   OpenPDF: TButton;

   dbRepair: TButton;

   ViewMyDoc: TButton;

   FindDoc: TButton;

   Label1: TLabel;

   editDoc: TEdit;

   Find: TButton;

   exitFind: TButton;

   Sort: TButton;

   forName: TRadioButton;

   ForID: TRadioButton;

   editComment: TButton;

   procedure FormCreate(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

   procedure dbRepairClick(Sender: TObject);

   procedure FindDocClick(Sender: TObject);

   procedure exitFindClick(Sender: TObject);

   procedure FindClick(Sender: TObject);

   procedure FormKeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure OpenPDFClick(Sender: TObject);

   procedure ViewMyDocClick(Sender: TObject);

   procedure SortClick(Sender: TObject);

   procedure editCommentClick(Sender: TObject);

   procedure FormShow(Sender: TObject);

   procedure dbgrd1KeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure FormResize(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form2: TForm2;

implementation

uses Unit1,Unit3;

var path:string;

   check:boolean;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);

begin

 try

   ADOConnection2.ConnectionString:=form1.ADOConnection1.ConnectionString;

   ADOConnection2.Connected:=true;

Label1.Visible:=false;

editDoc.Visible:=false;

Find.Visible:=false;

exitFind.Visible:=false;

forName.Visible:=false;

forID.Visible:=false;

editComment.Visible:=false;

//WindowState:=wsMaximized;

Width:=Monitor.Width;

Height:=Monitor.Height;

left:=0;

top:=0;

dbgrd1.Columns.Items[9].Width:=Monitor.Width-995;

dbgrd1.Width:=Monitor.Width-50;

dbgrd1.Height:=Monitor.Height-295;

dbRepair.Top:=dbgrd1.Height+143;

OpenPDF.Top:=dbgrd1.Height+143;

ViewMyDoc.Top:=dbgrd1.Height+143;

FindDoc.Top:=dbgrd1.Height+143;

Sort.Top:=dbgrd1.Height+143;

editDoc.top:=dbgrd1.Height+31;

Label1.top:=dbgrd1.Height+31;

forName.Top:=dbgrd1.Height+56;

ForID.Top:=dbgrd1.Height+72;

Find.Top:=dbgrd1.Height+95;

exitFind.Top:=dbgrd1.Height+95;

lbl1.Top:=dbgrd1.Height+189;

if Monitor.Width=1024 then dbgrd1.Columns.Items[9].Width:=89;

WindowState:=wsMaximized;

except on e:Exception do

ShowMessage(e.ClassName+' ошибка: '+e.Message);

end;

end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

 //Подтверждение на закрытие.

 If MessageDlg('Завершить приложение?', mtConfirmation, mbOkCancel,0)=mrOk Then

    begin

    Action:=caFree; //Нажата Ok - закрываем форму.

    if FileExists(path+'\temp.pdf') then DeleteFile(path+'\temp.pdf');

    ADOQuery2.SQL.Clear;

Form1.ADOQuery1.SQL.Clear;

form3.ADOQuery3.sql.Clear;

form3.ADOQuery3_1.SQL.Clear;

ADOQuery2.Destroy;

Form1.ADOQuery1.Destroy;

form3.ADOQuery3.Destroy;

form3.ADOQuery3_1.Destroy;

    Form1.Close;

    end

 Else

    Action:=caNone; //Нажата Cancel - игнорируем закрытие.

end;

procedure TForm2.dbRepairClick(Sender: TObject);

begin

Visible:=false;

ADOQuery2.SQL.Clear;

Form3.show;

end;

procedure TForm2.FindDocClick(Sender: TObject);

begin

FindDoc.Visible:=false;

Label1.Visible:=true;

editDoc.Visible:=true;

editDoc.SetFocus;

find.Visible:=true;

exitFind.Visible:=true;

forName.Visible:=true;

forName.Checked:=true;

FORID.Visible:=true;

end;

procedure TForm2.exitFindClick(Sender: TObject);

begin

FindDoc.Visible:=true;

Label1.Visible:=false;

editDoc.Visible:=False;

find.Visible:=false;

exitFind.Visible:=false;

forName.Visible:=false;

forId.Visible:=false;

if check then begin

             ADOQuery2.SQL.Clear;

             ADOQuery2.SQL.Add('SELECT * FROM Документы');

             ADOQuery2.Active:=true;

             end;

end;

procedure TForm2.FindClick(Sender: TObject);

begin

check:=true;

ADOQuery2.SQL.Clear;

if forName.Checked then ADOQuery2.SQL.Add('SELECT * FROM Документы where inum LIKE'+#39+editDoc.Text+'%'+#39)

                  else ADOQuery2.SQL.Add('SELECT * FROM Документы where ID LIKE'+#39+editDoc.Text+'%'+#39);

ADOQuery2.Active:=true;

end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

begin

if (key=88)and(shift=[ssAlt]) then

if MessageDlg('Сменить пользователя?',mtWarning,[mbOK]+[mbCancel],0)=mrOK then

begin

form1.Edit1.Text:=IniFile.ReadString('login','who','Логин');

form1.Edit2.clear;

ADOQuery2.SQL.Clear;

Form1.ADOQuery1.SQL.Clear;

form3.ADOQuery3.sql.Clear;

form3.ADOQuery3_1.SQL.Clear;

Visible:=false;

form1.Show;

end;

end;

procedure TForm2.OpenPDFClick(Sender: TObject);

var blob:TStream;

   s:Integer;

begin

try

 if ADOQuery2.FieldByName('PDF').AsString='' then ShowMessage('Файл PDF не загружен в базу'+#13#10+'Обратитесь к '+ADOQuery2.fieldByName('who_is').AsString+' !')

 else

 begin

 ADOQuery2.Edit;

 blob:=ADOQuery2.CreateBlobStream(ADOQuery2.FieldByName('PDF'),bmRead);

 blob.Seek(0,soFromBeginning);

 with TFileStream.Create(PChar(path+'\temp.pdf'),fmCreate) do

 try

   CopyFrom(blob,blob.size);

     finally

       Free;

       blob.Free;

       ADOQuery2.Post;

       s:=ShellExecute(Handle,'open',PChar(path+'\temp.pdf'),nil, nil, SW_SHOWMAXIMIZED);

       if s<=32 then

       case s of

       0:ShowMessage('Оперативной системе не хватает памяти или ресурсов.');

       5:ShowMessage('Операционная система отказывает в доступе к указаному файлу.');

       8:ShowMessage('Не достаточно памяти для завершения операции.');

       26:ShowMessage('Нарушение совместного доступа');

       end;

       end;

       end;

       except on E:Exception do

       ShowMessage('Ошибка '+e.Message);

       end;

       end;

procedure TForm2.ViewMyDocClick(Sender: TObject);

begin

   try

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('SELECT * FROM Документы where komy LIKE '+#39+lbl1.Caption+#39);//'+#39+editDoc.Text+'%'+#39);

ADOQuery2.Active:=true;

if ADOQuery2.IsEmpty then

                     begin

                     ShowMessage('На Ваше имя нету документов');

                     FormShow(sender);

                     end

   except on E:Exception do

   ShowMessage(E.ClassName + ' ошибка: '+E.Message);

   end;

end;

procedure TForm2.SortClick(Sender: TObject);

begin

  try

ADOQuery2.Sort:='level';

  except on E:Exception do

  ShowMessage(E.ClassName + ' ошибка: '+E.Message);

  end;

end;

procedure TForm2.editCommentClick(Sender: TObject);

begin

{dbgrd1.Options:=dbgrd1.Options+[dgEditing];

ADOQuery2.Edit;

ADOQuery2.post;}

end;

procedure TForm2.FormShow(Sender: TObject);

begin

  try

ADOConnection2.Connected:=true;

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add('SELECT * FROM Документы');

ADOQuery2.Active:=true;

ADOQuery2.Sort:='date';

  except on E:Exception do

  ShowMessage(E.ClassName + ' ошибка: '+E.Message);

  end;

end;

procedure TForm2.dbgrd1KeyDown(Sender: TObject; var Key: Word;

 Shift: TShiftState);

begin

if Key=13 then OpenPDFClick(Sender);

end;

procedure TForm2.FormResize(Sender: TObject);

begin

Width:=Monitor.Width;

Height:=Monitor.Height;

left:=0;

top:=0;

WindowState:=wsMaximized;

end;

begin

 path:=GetCurrentDir;

end.


//UNIT3.pas

unit Unit3;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls,ComObj;

type

 TForm3 = class(TForm)

   ADOConnection3: TADOConnection;

   ADOQuery3: TADOQuery;

   DataSource3: TDataSource;

   BDRep: TDBGrid;

   ADOConnection3_1: TADOConnection;

   ADOQuery3_1: TADOQuery;

   DataSource3_1: TDataSource;

   DBGrid1: TDBGrid;

   edit_db1: TButton;

   Del_obj_db1: TButton;

   insert_obj_db1: TButton;

   Edit_db2: TButton;

   Del_obj_db2: TButton;

   Insert_obj_db2: TButton;

   procedure FormCreate(Sender: TObject);

   procedure CompactDatabase_JRO(DatabaseName: string; DestDatabaseName: string =

  ''; Password: string = '');

   procedure edit_db1Click(Sender: TObject);

   procedure Del_obj_db1Click(Sender: TObject);

   procedure insert_obj_db1Click(Sender: TObject);

   procedure Del_obj_db2Click(Sender: TObject);

   procedure Insert_obj_db2Click(Sender: TObject);

   procedure Edit_db2Click(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

   procedure FormShow(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form3: TForm3;

implementation

uses Unit1,Unit2,Unit4,Unit5;

var dir:string;

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);

begin

ADOConnection3.ConnectionString:=Form1.ADOConnection1.ConnectionString;

ADOConnection3.Connected:=True;

ADOConnection3_1.ConnectionString:=Form2.ADOConnection2.ConnectionString;

ADOConnection3_1.Connected:=True;

end;

procedure TForm3.CompactDatabase_JRO(DatabaseName: string; DestDatabaseName: string =

  ''; Password: string = '');

const

  Provider = 'Provider=Microsoft.Jet.OLEDB.4.0;';

var

  TempName: array[0..MAX_PATH] of Char; // Имя временного файла

  TempPath: string; // Путь до него

  Name: string;

  Src, Dest: WideString;

  V: Variant;

begin

  try

    Src := Provider + 'Data Source=' + DatabaseName;

    if DestDatabaseName <> '' then

      Name := DestDatabaseName

    else

    begin

      // Выходная база не указана - используем временный файл

      // Получаем путь для временного файла

      TempPath := ExtractFilePath(DatabaseName);

      if TempPath = '' then

        TempPath := GetCurrentDir;

      //Получаем имя временного файла

      GetTempFileName(PChar(TempPath), 'mdb', 0, TempName);

      Name := StrPas(TempName);

    end;

    DeleteFile(PChar(Name)); // Этого файла не должно существовать, удаляем его :))

    Dest := Provider + 'Data Source=' + Name;

    if Password <> '' then

    begin

      Src := Src + ';Jet OLEDB:Database Password=' + Password;

      Dest := Dest + ';Jet OLEDB:Database Password=' + Password;

    end;

    V := CreateOleObject('jro.JetEngine');

    try

      V.CompactDatabase(Src, Dest); // сжимаем

    finally

      V := 0;

    end;

    if DestDatabaseName = '' then

    begin // т.к. выходная база не указана

      DeleteFile(PChar(DatabaseName)); //То удаляем не упакованную базу

     // и переименовываем упакованную базу

     if RenameFile(Name, DatabaseName) then

                   begin

                     ShowMessage('Процедура сжатию и восстановлению базы данных успешно завершена.');

                   end;

    end;

  except

    // Выдаем сообщение об исключительной ситуации

    on E: Exception do

      ShowMessage(e.message);

  end;

end;

procedure TForm3.edit_db1Click(Sender: TObject);

var s:string;

begin

visible:=False;

s:=ADOQuery3.FieldByName('name').AsString;

Form4.Edt1.Text:=s;

S:=ADOQuery3.FieldByName('familiya').AsString;

form4.edit1.Text:=s;

S:=ADOQuery3.FieldByName('otchestvo').AsString;

form4.edt2.Text:=s;

s:=ADOQuery3.fieldByName('login').AsString;

form4.edt3.Text:=s;

s:=ADOQuery3.FieldByName('Password').AsString;

form4.edt4.Text:=s;

S:=ADOQuery3.FieldByName('type').AsString;

if (UpperCase(s)='ADMIN') then Form4.profile.ItemIndex:=0 else Form4.profile.ItemIndex:=1;

form4.insert.Visible:=false;

form4.Edit_db.visible:=true;

Form4.show;

end;

procedure TForm3.Del_obj_db1Click(Sender: TObject);

begin

if MessageDlg('Вы действительно хотите удалить : '+ADOQuery3_1.fieldByName('name').AsString+' ?',mtConfirmation,[mbOK]+[mbCancel],0)=mrOK then

ADOQuery3.Delete;

end;

procedure TForm3.insert_obj_db1Click(Sender: TObject);

begin

visible:=False;

form4.insert.Visible:=true;

form4.Edit_db.Visible:=false;

Form4.Edit1.Clear;

Form4.edt1.Clear;

Form4.edt2.Clear;

form4.edt3.Clear;

Form4.edt4.Clear;

Form4.profile.ItemIndex:=1;

form4.show;

end;

procedure TForm3.Del_obj_db2Click(Sender: TObject);

begin

if MessageDlg('Вы действительно хотите удалить документ: '+ADOQuery3_1.fieldByName('ID').AsString+' от '+ADOQuery3_1.FieldByName('dateot').AsString+' ?',mtConfirmation,[mbOK]+[mbCancel],0)=mrOK then

ADOQuery3_1.Delete;

end;

procedure TForm3.Insert_obj_db2Click(Sender: TObject);

var sTemp:string;

begin

visible:=False;

form5.red_db2.Visible:=false;

form5.Ins_obj_db2.Visible:=true;

form5.Edit_ID.Clear;

form5.Edit_inum.Clear;

form5.Edit_who.Clear;

form5.Edit_PDF.clear;

form5.Edit_comment.clear;

form5.Edit_PDF.Visible:=True;

form5.Label5.Visible:=True;

form5.Edit_MultiSelect.Visible:=True;

form5.PDFSelect.Visible:=True;

ADOQuery3.First;

while not ADOQuery3.Eof do begin

 sTemp:=ADOQuery3.FieldByName('name').AsString;

 sTemp:=ADOQuery3.FieldByName('Familiya').AsString+' '+sTemp[1]+'. '+ADOQuery3.FieldByName('Otchestvo').AsString[1]+'.';

 Form5.Edit_who.Items.Add(sTemp);

 ADOQuery3.Next;

end;

form5.Show;

end;

procedure TForm3.Edit_db2Click(Sender: TObject);

var sTemp:string;

begin

visible:=False;

form5.Edit_ID.text:=ADOQuery3_1.FieldByName('ID').AsString;

form5.Edit_inum.text:=ADOQuery3_1.FieldByName('inum').AsString;

Form5.DateTime.Date:=StrToDate(ADOQuery3_1.FieldByName('dateot').AsString);

form5.Edit_level.ItemIndex:=form5.Edit_level.Items.IndexOf(ADOQuery3_1.FieldByName('level').AsString);

form5.Edit_type.ItemIndex:=form5.Edit_type.Items.IndexOf(ADOQuery3_1.FieldByName('type').AsString);

form5.Edit_comment.text:=ADOQuery3_1.FieldByName('comment').AsString;

form5.red_db2.Visible:=true;

form5.Ins_obj_db2.Visible:=false;

form5.Edit_PDF.Visible:=false;

form5.Label5.Visible:=false;

form5.Edit_MultiSelect.Visible:=false;

form5.PDFSelect.Visible:=false;

form5.Edit_who.Clear;

ADOQuery3.First;

while not ADOQuery3.Eof do begin

 sTemp:=ADOQuery3.FieldByName('name').AsString;

 sTemp:=ADOQuery3.FieldByName('Familiya').AsString+' '+sTemp[1]+'. '+ADOQuery3.FieldByName('Otchestvo').AsString[1]+'.';

 Form5.Edit_who.Items.Add(sTemp);

 ADOQuery3.Next;

end;

form5.Edit_who.ItemIndex:=form5.Edit_who.Items.IndexOf(ADOQuery3_1.FieldByName('komy').AsString);

form5.show;

end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);

var sTemp:string;

begin

if MessageDlg('Закрыть работу с БД?',mtConfirmation,[mbOK]+[mbCancel],0)=mrOk then

begin

action:=caHide;

if FileExists(dir+'\tmp.pdf') then DeleteFile(dir+'\tmp.pdf');

ADOQuery3.SQL.Clear;

ADOQuery3_1.SQL.Clear;

form1.ADOConnection1.Connected:=False;

Form2.ADOConnection2.Connected:=False;

ADOConnection3_1.Connected:=False;

ADOConnection3.Connected:=False;

sTemp:=IniFile.ReadString('DataBase','db1.filePath','Err');

if sTemp<>'Err' then CompactDatabase_JRO(sTemp,'','Password123');

form2.Show;

end

else Action:=caNone;

end;

procedure TForm3.FormShow(Sender: TObject);

begin

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add('Select * From Сотрудники');

ADOQuery3.Active:=True;

ADOQuery3_1.SQL.Clear;

ADOQuery3_1.SQL.Add('Select * From Документы');

ADOQuery3_1.Active:=True;

end;

begin

dir:=GetCurrentDir;

end.

//UNIT4.pas

unit Unit4;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls;

type

 TForm4 = class(TForm)

   grp1: TGroupBox;

   lbl1: TLabel;

   Edit1: TEdit;

   lbl2: TLabel;

   edt1: TEdit;

   lbl3: TLabel;

   edt2: TEdit;

   profile: TComboBox;

   lbl4: TLabel;

   edt3: TEdit;

   edt4: TEdit;

   lbl5: TLabel;

   lbl6: TLabel;

   Edit_db: TButton;

   insert: TButton;

   procedure Edit_dbClick(Sender: TObject);

   procedure insertClick(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form4: TForm4;

implementation

uses Unit3;

{$R *.dfm}

procedure TForm4.Edit_dbClick(Sender: TObject);

begin

if (edit1.Text='') or (edt1.Text='') or (edt2.Text='') or (edt3.Text='') or (edt4.text='') or (profile.Text='')

then

ShowMessage('Одно из полей пустое')

else begin

    Form3.ADOQuery3.Edit;

    Form3.ADOQuery3.FieldByName('familiya').AsString:=Edit1.Text;

    Form3.ADOQuery3.FieldByName('name').AsString:=edt1.text;

    Form3.ADoQuery3.FieldByName('otchestvo').asString:=edt2.text;

    Form3.ADoQuery3.FieldByName('login').asString:=edt3.text;

    Form3.ADoQuery3.FieldByName('Password').asString:=edt4.text;

    Form3.ADoQuery3.FieldByName('type').asString:=profile.text;

    end;

end;

procedure TForm4.insertClick(Sender: TObject);

begin

if (edit1.Text='') or (edt1.Text='') or (edt2.Text='') or (edt3.Text='') or (edt4.text='') or (profile.Text='')

then

ShowMessage('Одно из полей пустое')

else begin

    form3.ADOQuery3.Insert;

    form3.ADOQuery3.FieldByName('Familiya').AsString:=Edit1.Text;

    Form3.ADOQuery3.FieldByName('name').AsString:=edt1.text;

    Form3.ADoQuery3.FieldByName('otchestvo').asString:=edt2.text;

    Form3.ADoQuery3.FieldByName('login').asString:=edt3.text;

    Form3.ADoQuery3.FieldByName('Password').asString:=edt4.text;

    Form3.ADoQuery3.FieldByName('type').asString:=profile.text;

    end;

end;

procedure TForm4.FormCreate(Sender: TObject);

begin

profile.Items.Clear;

profile.Items.Add('Admin');

profile.Items.Add('User');

end;

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);

begin

 Visible:=false;

form3.show;

end;

end.

//Unit5.pas

unit Unit5;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls,DateUtils, OleCtnrs,ADODB,db,ShellAPI, ComCtrls;

type

 TForm5 = class(TForm)

   Edit_ID: TEdit;

   Label1: TLabel;

   PDFSelect: TButton;

   PDFOpen: TOpenDialog;

   Ins_obj_db2: TButton;

   Edit_inum: TEdit;

   Label2: TLabel;

   red_db2: TButton;

   Label3: TLabel;

   Edit_level: TComboBox;

   Label4: TLabel;

   Edit_type: TComboBox;

   Label5: TLabel;

   Edit_PDF: TEdit;

   Edit_comment: TEdit;

   Label6: TLabel;

   lbl1: TLabel;

   Edit_who: TComboBox;

   Edit_MultiSelect: TCheckBox;

   DateTime: TDateTimePicker;

   lbl2: TLabel;

   procedure ExecuteWait(const sProgramm: string; const sParams: string = '';defDir:string=''; fHide: Boolean = false);

   procedure PDFSelectClick(Sender: TObject);

   procedure Ins_obj_db2Click(Sender: TObject);

   procedure red_db2Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var  Form5: TForm5;

implementation

uses unit3,Unit2, Math;

var dir:string;

{$R *.dfm}

procedure TForm5.ExecuteWait(const sProgramm: string; const sParams: string = ''; defDir:string=''; fHide: Boolean = false);

   var

     ShExecInfo: TShellExecuteInfo;

   begin

     FillChar(ShExecInfo, sizeof(ShExecInfo), 0);

     with ShExecInfo do

     begin

       cbSize := sizeof(ShExecInfo);

       fMask := SEE_MASK_NOCLOSEPROCESS;

       lpFile := PChar(sProgramm);

       lpParameters := PChar(sParams);

       lpVerb := 'open';

       lpDirectory:=pChar(defDir);

       if (not fHide) then

         nShow := SW_SHOW

       else

         nShow := SW_HIDE;

     end;

     if (ShellExecuteEx(@ShExecInfo) and (ShExecInfo.hProcess <> 0)) then

       try

         WaitForSingleObject(ShExecInfo.hProcess, INFINITE)

       finally

         CloseHandle(ShExecInfo.hProcess);

       end;

end;

procedure TForm5.PDFSelectClick(Sender: TObject);

var s,sNum:string;

   i:integer;

begin

try

PDFOpen.Options:=PDFOpen.Options-[ofAllowMultiSelect];

if Edit_MultiSelect.Checked=true then PDFOpen.Options:=PDFOpen.Options+[ofAllowMultiSelect];

if PDFOpen.Execute then if Edit_MultiSelect.Checked then begin

                                                        for i:=0 to PDFOpen.Files.Count-1 do

                                                            begin

                                                            s:=' "'+PDFOpen.Files.Strings[i]+'"';

                                                            sNum:=sNum+s;

                                                            end;

                                                        Edit_PDF.Text:=sNum;

                                                        end

                                                        else

                                                        Edit_PDF.Text:=PDFOpen.FileName;

except on E:Exception do

ShowMessage(e.ClassName+' Ошибка: '+e.Message);

end;

end;

procedure TForm5.Ins_obj_db2Click(Sender: TObject);

var blob:TMemoryStream;

begin

try

if (Edit_ID.Text='') or (Edit_inum.Text='') or (Edit_level.Text='') or (Edit_type.text='') or (Edit_PDF.Text='') then ShowMessage('Одно из полей пустое')

else

{if Edit_MultiSelect.Checked=false then

        if FileExists(Edit_PDF.Text) then}

                                     begin

                                     form3.ADOQuery3_1.Insert;

                                     ExecuteWait(dir+'\pdftk.exe',Edit_PDF.Text+' cat output tmp.pdf',dir,true);

                                     blob:=TADOBlobStream.create(TBlobField(form3.ADOQuery3_1.FieldByName('PDF')),bmWrite);

                                     blob.LoadFromFile(dir+'\tmp.pdf');

                                     form3.ADOQuery3_1.FieldByName('ID').asString:=Edit_ID.text;

                                     Form3.ADOQuery3_1.FieldByName('inum').AsString:=Edit_inum.Text;

                                     Form3.ADOQuery3_1.FieldByName('dateot').AsString:=DateToStr(DateTime.Date);

                                     Form3.ADOQuery3_1.FieldByName('level').AsString:=Edit_level.Text;

                                     form3.ADOQuery3_1.FieldByName('type').AsString:=Edit_type.Text;

                                     Form3.ADOQuery3_1.FieldByName('komy').AsString:=Edit_who.Text;

                                     form3.ADOQuery3_1.FieldByName('who_is').AsString:=form2.lbl1.Caption;

                                     form3.ADOQuery3_1.FieldByName('date').AsString:=DateToStr(date);

                                     form3.ADOQuery3_1.FieldByName('comment').AsString:=Edit_comment.text;

                                     ShowMessage('Запись добавлена в базу');

                                     blob.Free;

                                     PDFOpen.FreeOnRelease;

                                     form3.ADOQuery3_1.Post;

                                     Visible:=false;

                                     form3.Show;

                                     end

except on E:Exception do

ShowMessage(E.ClassName+' ошибка '+e.Message);

end;

end;

procedure TForm5.red_db2Click(Sender: TObject);

begin

try

if (Edit_ID.Text='') or (Edit_inum.Text='') or (Edit_level.Text='') or (Edit_type.Text='') then ShowMessage('Одно из полей пустое')

else

                                     begin

                                     form3.ADOQuery3_1.edit;

                                     form3.ADOQuery3_1.FieldByName('ID').asString:=Edit_ID.Text;

                                     Form3.ADOQuery3_1.FieldByName('inum').AsString:=Edit_inum.Text;

                                     Form3.ADOQuery3_1.FieldByName('dateot').AsString:=DateToStr(DateTime.Date);

                                     Form3.ADOQuery3_1.FieldByName('level').AsInteger:=StrToInt(Edit_level.Text);

                                     form3.ADOQuery3_1.FieldByName('type').AsString:=Edit_type.Text;

                                     form3.ADOQuery3_1.FieldByName('who_is').AsString:=form2.lbl1.Caption;

                                     Form3.ADOQuery3_1.FieldByName('komy').AsString:=Edit_who.Text;

                                     form3.ADOQuery3_1.FieldByName('date').AsString:=DateToStr(date);

                                     form3.ADOQuery3_1.FieldByName('comment').AsString:=Edit_comment.text;

                                     ShowMessage('Запись изменина');

                                     form3.ADOQuery3_1.Post;

                                     visible:=false;

                                     form3.Show

                                     end

except on E:Exception do

ShowMessage(E.ClassName+' ошибка '+e.Message);

end;

end;

procedure TForm5.FormCreate(Sender: TObject);

begin

Edit_level.Items.Add('1');

Edit_level.Items.Add('2');

Edit_level.Items.Add('3');

Edit_type.Items.Add('Приказ');

Edit_type.Items.Add('Письмо');

Edit_type.Items.Add('Факс');

Edit_type.Items.Add('Служебная записка');

Edit_type.Items.Add('Акт');

Edit_type.Items.Add('Распоряжение');

Edit_type.Items.Add('Заявление');

end;

procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);

begin

visible:=false;

form3.Show;

end;

begin

dir:=GetCurrentDir;

end.


ПРИЛОЖЕНИЕ Б

(обязательное)

Результаты выполнения программы


Результаты выполнения программы представлены на рисунках Б.1, Б.2, Б.3, Б.4, Б.5 и Б.6.

Рисунок Б.1 – Главное окно программы


 

А также другие работы, которые могут Вас заинтересовать

44569. Одноранговые сети. Рабочая группа 45.5 KB
  Все пользователи решают сами какие данные и ресурсы каталоги принтеры факсмодемы на своем компьютере сделать общедоступными по сети Одноранговая сеть Рабочая группа – это небольшой коллектив объединенный общей целью и интересами. Эти сети относительно просты.
44570. Сети на основе сервера 70.5 KB
  Поэтому большинство сетей используют выделенные серверы Выделенными называются такие серверы которые функционируют только как сервер исключая функции РС или клиента. Круг задач которые выполняют серверы многообразен и сложен. Чтобы приспособиться к возрастающим потребностям пользователей серверы в ЛВС стали специализированными. Так например в операционной системе Windows NT Server существуют различные типы серверов: Файлсерверы и принтсерверы.
44571. Комбинированные сети 46 KB
  На рабочих станциях ЛВС устанавливают Windows NT WorkSttion или Windows 95 98 которые будут управлять доступом к ресурсам выделенного сервера и в то же время предоставлять в совместное использование свои жесткие диски а по мере необходимости разрешать доступ и к своим данным Структура комбинированной ЛВС Комбинированные сети – наиболее распространенный тип ЛВС но для их правильной и надежной защиты необходимы определенные знания и навыки планирования. А вот различия между одноранговыми сетями и ЛВС с выделенными серверами существенно...
44572. Понятие топологии сети и базовые топологии 31 KB
  Термин топология сети или просто топология характеризует физическое расположение компьютеров сетевых сред передачи данных и других компонентов сети. Топология – это стандартный термин который: используется при описании основной компоновки сети; дает способ сравнивать и классифицировать различные сети. Топология сети обуславливает ее технические характеристики.
44573. Топология типа «шина» 82.5 KB
  В ней используется один сетевой кабель именуемый магистралью или сегментом вдоль которого подключены все РС сети. Пакет в виде электрических сигналов передается по шине в обоих направлениях всем компьютерам сети. Так как в каждый момент времени в сети может вести передачу только одна РС то производительности ЛВС зависит от количества РС подключенных к шине. Чем их больше тем больше ожидающих передачи данных тем ниже производительности сети.
44574. Топология типа «звезда» 65.5 KB
  Основное достоинство этой топологии в том что если повреждена какая-либо РС или отдельное соединение между РС и концентратором вся сеть остается работоспособной. Как недостатки организации такой топологии следует отметить следующее: Так как все РС подключены к центральной точке то для больших ЛВС значительно увеличивается расход кабеля. Концентраторы являются центральным узлом в топологии звезда.
44575. Топология типа «кольцо» 41 KB
  Кроме того изменение конфигурации сети или подключение новой РС требует остановки всей сети.
44576. Комбинированные топологии 66 KB
  Звезда –шина strbus - это комбинация топологий шина и звезда Чаще всего это выглядит так: несколько сетей с топологией звезда объединяются при помощи магистральной шины. Топология €œзвезда-кольцо Звезда-кольцо strring – кажется похожей на звезду-шину И в том и в другом случае компьютеры подключены к концентратору который фактически формирует кольцо или шину.
44577. Сравнительные характеристики топологий 31.5 KB
  При значительных объемах трафика уменьшается пропускная способность; трудная локализация проблем; выход из строя кабеля остановит работу пользователей. выход из строя одной РС выводит из строя всю сеть; трудно локализовать проблемы; изменение конфигурации сети требует остановки всей сети. Звезда легко модифицировать сеть добавляя новые РС; централизованный контроль и управление; выход из строя РС не влияет на работу сети. Выход из стоя центрального концентратора выводит из стоя всю сеть.