Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения

Разработка АИС по принятию и обработке заявок

Работа из раздела: «Программирование, компьютеры и кибернетика»

/

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

Кафедра «Теоретических основ информатики»

Специальность 080801.65 «Прикладная информатика (в экономике)»

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

На тему

Разработка АИС по принятию и обработке заявок

Работу выполнил В.П. Кычанов

студент группыЗС-351400-41 (к)

Научный руководитель

к.ф.-м.н., доцент М.А. Клочков

Ижевск 2012

Аннотация

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

Содержание

Введение

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

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

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

1. Описание предметной области

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

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

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

Библиотека ITIL создавалась для систематического и последовательного распространения передового опыта по управлению ИТ-услугами. Этот подход основывается на качестве услуг и разработке эффективных и рациональных процессов.

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

По всем вопросам, связанным с использованием сервисов ИТ, пользователи должны обращаться только в службу ИТ.

Рано или поздно обращения пользователей за помощью в ИТ-подразделение становятся нормой. Но при этом возникают новые трудности. Приняв решение обратиться за поддержкой в отдел ИТ, пользователь обычно оказывается перед проблемой: кому именно задать вопрос?

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

Можно спросить любого сотрудника отдела ИТ. Он, скорее всего, посоветует, к кому именно следует обратиться. Далее нужно спросить у рекомендованного. Цепочка может продолжаться и дальше. Пользователю действовать таким образом неудобно.

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

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

Службы поддержки пользователей обеспечивают:

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

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

Контроль над последовательностью исполнения работ, потраченным временем и ресурсами.

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

Эскалация запросов и инцидентов, оповещение соответствующих администраторов.

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

Отчётность по затратам времени и средств на выполнение запросов.

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

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

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

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

Запросы на изменение состояния системы - например, установку нового оборудования и программного обеспечения.

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

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

Этап 1

Проектирование базы данных (БД) системы учёта заявок в отдел информационных технологий:

1. Проектирование инфологической модели БД.

2. Проектирование даталогической модели БД.

3. Построение физической модели БД.

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

Этап 2

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

Необходимо реализовать следующие приложения:

1. Оформление заявки в отдел ИТ (место заявителя).

Должно обладать следующими функциями:

А. Регистрировать заявки в БД

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

В. Отслеживать статус заявок

2. Прием заявки в отделе ИТ (место оператора).

Должно обладать следующими функциями:

А. Отображать заявки, зарегистрированные в системе

Б. Назначать приоритет заявке

В. Назначать исполнителя заявки

Г. Иметь возможность открывать закрытые заявки

3. Исполнение заявки в отделе ИТ (место исполнителя).

Должно обладать следующими функциями:

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

Б. Иметь возможность фильтровать заявки по приоритетности, типу инцидента

В. Формировать ответ на заявку

Г. Закрывать исполненные заявки

4. Настройка ИС (место администратора ИС)

Должно обладать следующими функциями:

А. Инициализация системы (создать пустую БД заявок, зарегистрировать исполнителей)

Б. Регистрировать новых исполнителей

В. Добавлять новые типы инцидентов

Г. Формировать отчеты о работе системы

3. Анализ задачи

3.1 Обзор существующих систем

3.1.1 Службы поддержки (Service Desk)

3.1.1.1 Naumen Service Desk

Поддержка ОС:

Кроссплатформенное ПО

Сайт программы:

http://www.naumen.ru/products/service_desk/

Русский интерфейс:

да

Размер дистрибутива:

Неизвестно

Условия распространения:

Коммерческое ПО

Версия:

4.0

На сегодняшний день Naumen Service Desk является ведущим российским решением для построения ITSM. С 2002 года на его основе было реализовано более 250 успешных проектов в России, Украине и Казахстане, выполненных силами специалистов компании NAUMEN и ее партнеров. За эти годы продукт завоевал популярность у консультантов, ИТ-специалистов и руководителей служб Help Desk и ИТ-департаментов, работающих в сервисных компаниях, компаниях розничной торговли, банках, промышленных предприятиях, государственных учреждениях и телекоммуникационных компаниях.

Ведение единой клиентской базы: настраиваемые карточки клиентов/контактных лиц; хранение всей истории взаимоотношений с клиентом; анализ клиентской базы по всем параметрам (настраиваемый генератор отчетов)

Управление инцидентами:

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

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

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

Управление проблемами:

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

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

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

Управление сервисами и соглашениями:

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

Управление соглашениями (ведение справочников бизнес-соглашений (SLA), операционных оглашений (OLA), поддерживающих соглашений (UC); гибко настраиваемые карточки соглашений - возможность задать разный набор полей для разных типов соглашений; возможность настройки для каждого типа соглашения своего жизненного цикла и индивидуального вида формы; определение в каждом соглашении параметров оказания и поддержки сервисов, сроков действия соглашения; связь соглашений с получателями и поставщиками сервисов, конфигурационными единицами; уведомления о нарушении соглашений об уровне сервиса, настраиваемая эскалация);

Управление конфигурациями (учет и классификация конфигурационных единиц, ведение CMDB; неограниченная типизация КЕ (аппаратное обеспечение, программное обеспечение, серверное оборудования и т.д.); возможность указания для каждого КЕ своего набора полей и своего жизненного цикла; настройка связей между конфигурационными единицами; наличие настраиваемого справочника текущих статусов конфигурационной единицы; хранение полной истории изменения каждой конфигурационной единицы; возможность автоматической проверки соответствия статуса конфигурационной единицы информации в CMDB при интеграции с системами мониторинга; возможность привязки КЕ к пользователю, которому КЕ передана в эксплуатацию; возможность указания в карточке КЕ сотрудника ИТ, который отвечает за обслуживания данной КЕ; возможность индивидуальной настройки формы КЕ для каждой категории КЕ; хранение всей истории событий с КЕ; генератор отчетов по всем КЕ; модуль универсального импорта для синхронизации базы данных КЕ системы с внешними системами, включая функцию аудита (проверка изменений в базе данных КЕ с результатами инвентаризации); интеграция с системами MS SCCM, LANDesk, Nagios, MS SCOM и т.д.);

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

Анализ и отчетность (встроенные средства построения отчетов по заданным шаблонам по всем объектам в системе; возможность детализации отчетов по временным периодам (год, месяц, неделя, сутки, час); возможность экспорта содержания отчетов во внешние системы; возможность создания новых шаблонов отчетов; использование внешних OLAP средств для построения отчетов);

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

3.1.1.2 TrackStudio Service Desk

Поддержка ОС:

Кроссплатформенное ПО

Сайт программы:

http://www.trackstudio.ru

Русский интерфейс:

да

Размер дистрибутива:

Windows - 64 Мб, Linux - 126 Мб

Условия распространения:

Shareware

Версия:

4.0.16

TrackStudio Service Desk - это конфигурация для управления ИТ услугами (IT Service Management), построенная на основе библиотеки ITIL v3.

В данной конфигурации реализованы следующие процессы ITIL: управление инцидентами; управление конфигурациями; управление проблемами; управление запросами на изменения; управление базой знаний (управление временными решениями); частично реализовано управление SLA

TrackStudio -- это интегрированная система управления задачами, документацией и файлами, созданная для разработчиков программного обеспечения и ИТ-отделов компаний. Ключевая особенность TrackStudio -- иерархическая организация задач с бесконечным уровнем вложенности. Эта особенность позволяет поддерживать конфигурационную базу данных (CMDB) любого уровня детализации. А поддержка независимых и гибко настраиваемых процессов (workflow) -- реализовать все процессы, описанные в ITIL. Благодаря возможностям по гибкой настройке, а также механизму вычисляемых дополнительных полей и триггеров, удалось, не меняя ни строчки в исходном коде TrackStudio, создать интегрированный продукт, приспособленный для решения конкретной задачи: организации службы поддержки.

TrackStudio Enterprise выпускается в двух вариантах: Standalone -- для рабочих станций с графическим окружением под управлением Microsoft Windows или GNU/Linux, и WAR -- для серверов.

Вариант Standalone поставляется с утилитой для настройки и запуска TrackStudio Server Manager. В комплект также входит сервер приложений jetty, почтовый сервер jes и СУБД Hypersonic SQL.

Вариант WAR предназначен для запуска под имеющимся сервером приложений (обычно это Tomcat). Он содержит не скомпилированные JSP, которые Tomcat собирает сам. Этот вариант настраивается путем редактирования файлов properties.

Все процессы, реализованные в системе TrackStudio Service Desk взаимосвязаны. Основной процесс -- это управление инцидентами. При создании инциденты связываются с зарегистрированными в системе конфигурационными единицами. В ходе решения инцидента для него может быть создана (или привязана) Проблема. Каждой проблеме и, следовательно, каждому инциденту соответствует временное решение. Для некоторых из проблем могут быть также созданы запросы на изменения. В процессе реализации запросов на изменения добавляются, удаляются или изменяются конфигурационные единицы.

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

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

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

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

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

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

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

3.1.2 Службы помощи (Help Desk)

3.1.2.1 HelpdeskAdvanced

Поддержка ОС:

Microsoft Windows Server

Сайт программы:

http://www.helpdeskadvanced.net

Русский интерфейс:

Нет

Размер дистрибутива:

Неизвестно

Условия распространения:

Коммерческое ПО

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

Основные модули:

Отслеживание заявок (Tracking) (модуль маршрутизации и отслеживания заявок с возможностью гибких настроек администратором; интерфейс может подстраиваться самими операторами; управление и полный контроль соглашений по уровню сервиса (SLA); контроль в реальном времени и отслеживание основных показателей работы службы; процедуры маршрутизации заявок в соответствии с их типом, клиентом, важностью и т.д.);

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

HelpDesk (основной модуль для автоматического пополнения базы данных знаний, эффективный поиск готовых решений, с помощью механизма PowerHelpDesk®; каталогизация и архивирование)

Дополнительные модули:

iWeb PRO (доступ операторов службы поддержки к HDA посредством браузера Internet Explorer, для полного управления заявками и регистрации действий);

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

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

Управление активами (Asset) (управление активами и их компонентами (например, hardware & software, производственное оборудование, другие высокотехнологичные системы); учетные записи, гарантийные контракты на обслуживание, настраиваемые механизмы слежения соглашений об уровне поддержки (Service Level Agreement - SLA); связь с другими, внешними источниками данных и автоматический импорт);

SMS (включает hardware аппарат для отсылки и получения сообщений SMS, позволяющий связать HDA с мобильными средствами связи);

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

SDK (модуль SDK (Software Development Kit) для интеграции с внешними средствами разработки и программирования в среде HDA; используется для разработки интерфейсов в приложении);

Workflow (интеграция бизнес-процессов c HDA для управления событиями и действиями; визуальный проектировщик процедуры обработки заявок (workflow));

PowerFinder (модуль для организации поиска и индексации документов и другой информации в HDA или корпоративной сети);

XML .net (обеспечивает доступ ко всей структуре HDA посредством использования webservices™ и протокола XML; интеграция с внешними системами с возможностью передачи регулярных обновлений между сетевыми системами; предназначен для связи с базами данных и внешними приложениями);

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

Управление автоматическими оповещениями администраторов HDA, управление подпиской и автоматическая отсылка.

3.1.2.2 AstroSoft HelpDesk

Поддержка ОС:

Microsoft Windows Server

Сайт программы:

http://astrosoft.ru

Русский интерфейс:

Да

Размер дистрибутива:

Неизвестно

Условия распространения:

Коммерческое ПО - 235000 руб. (лицензия на сервер)

AstroSoft HelpDesk - автоматизация службы поддержки пользователей: автоматическая обработка заявок на техническую поддержку; гибкая система маршрутизации; создание единой Базы Знаний; легкий Web-интерфейс; масштабируемая архитектура системы; интеграция с системой мониторинга MS MOM2005; интеграция с подсистемой инвентаризации MS SMS 2003; открытый интерфейс Web-services для интеграции с внешними системами.

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

Использование HelpDesk при внедрении и эксплуатации решений класса ERP, при сопровождении корпоративных информационных систем и систем АСУ ТП, на поддержке конечных пользователей, позволяет снизить совокупную стоимость владения информационной системой.

Основу AstroSoft HelpDesk составляет база данных Microsoft SQL Server, в которой регистрируются все заявки пользователей и инциденты с привязкой к пользователям, структуре организации, сервисам ИТ-системы и полная история их обработки, каталог пользователей, а также разнообразная служебная информация. Кроме того, в базе данных накапливаются ответы на наиболее часто задаваемые вопросы и полезные сведения в виде иерархически структурированной Базы Знаний, предоставляющей возможности полнотекстового поиска на русском и английском языках.

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

Функциональные особенности системы:

Масштабируемость (Система AstroSoft HelpDesk может расти вместе с ростом потребностей предприятия, обслуживать как Intranet , так и Extranet пользователей. При необходимости распределения нагрузки по нескольким серверам легко создаются и подключаются новые точки входа в систему. Для распределения нагрузки на сервера баз данных, оптимизации трафика и организации сложных систем с независимыми службами поддержки и единой точкой контроля используется система нескольких связанных серверов баз данных.);

Использование стандартных технологий (Использование при разработке системы технологий SQL, HTML, JavaScript, XML, SMTP, POP 3, Net, Web services позволяет создавать дополнительные приложения и надстройки. Примером такой надстройки может быть автоматическое создание заявки в службу поддержки различными системными процессами при возникновении тех или иных внештатных ситуаций.);

Веб-интерфейс (Сервер приложения построен на основе Microsoft Internet Information Server . Клиентом системы является Internet Explorer версий 5.01 и выше. Таким образом, отпадает необходимость установки дополнительного клиентского ПО на рабочие станции и обеспечивается минимальная совокупная стоимость владения системой. Для пользователя интерфейс приложения выглядит максимально просто, он интуитивно понятен и не требует лишних усилий при работе со службой поддержки.);

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

Интеграция внешними приложениями (Благодаря использованию протокола SOAP и технологий XML AstroSoft HelpDesk легко интегрируется с внешними приложениями. При использование разработанных АстроСофт коннекторов возможна интеграция с Microsoft MOM 2005 и Microsoft SMS 2003, а открытый интерфейс WEB - services и поддержка внешних приложений на уровне архитектуры позволяют легко создавать собственные коннекторы);

Маршрутизация (После начальной настройки системы HelpDesk движение запросов происходит автоматически. Постановка запроса на маршрут и его движение по нему производится согласно атрибутам запроса (например, по ключевым словам, сервису и / или типу запроса), атрибутам пользователя, зарегистрировавшему запрос, а также действиям операторов на промежуточных этапах маршрута);

База Знаний (База Знаний является важным элементом системы и служит для накопления и повторного использования полезной информации. Для удобства просмотра статьи Базы Знаний создаются в формате HTML с возможностью форматирования текста, вставки рисунков, ссылок и файлов любого типа. Система экспертного согласования и утверждения публикаций в Базе Знаний является уникальной особенностью системы AstroSoft HelpDesk)

Полнотекстовый поиск (Система предоставляет возможности полнотекстового поиска на русском и английском языках в Базе Знаний и в базе данных заявок пользователей. Существует также возможность встраивания в систему модулей полнотекстового поиска на любом другом языке и поддержки морфологического анализа);

Средства анализа (Мощная встроенная подсистема отчетов позволяет производить анализ заявок и инцидентов, выявлять проблемы корпоративной информационной системы, оценивать качество работы служб поддержки и планировать ее ресурсы. Благодаря реализации подсистемы на платформе MS Reporting services поддерживаются разработки и внедрение собственных отчетов. Уникальной и удобной особенностью является наличие планировщика отчетов: достаточно один раз настроить параметры и расписание, после чего система будет самостоятельно генерировать и отправлять отчеты подписчику);

HelpDesk и ITIL (Стандартная поставка системы позволяет внедрить в организациях процессы управления инцидентами, изменениями и уровнем сервиса);

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

Управление инцидентами (Встроенный маршрутизатор позволяет формализовать и автоматизировать все процедуры распределения запросов на закрытие инцидента. Использование соглашений об уровне сервиса позволяет автоматизировать процедуру приоретизации запросов);

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

3.1.2.3 HEAT Power Desk

Поддержка ОС:

Microsoft Windows 98SE / Me / NT 4.0 / 2000 / XP / Server 2003

Сайт программы:

http://www.frontrange.com/ProductsSolutions/Detail.aspx?id=62&LangType=1049

Русский интерфейс:

Да

Размер дистрибутива:

неизвестно

Условия распространения:

Коммерческое ПО

Версия:

9.5

Семейство решений IT Service Management

Семейство продуктов HEAT является результатом более чем пятнадцатилетнего опыта работы в области управления обслуживанием. HEAT объединяет основные компоненты для сервисного обслуживания и поддержки в одном решении, позволяющем уменьшить расходы и повысить качество обслуживания клиентов. Мощные функциональные возможности HEAT и лучшие в отрасли методики оказания поддержки можно расширить путем объединения различных продуктов семейства HEAT или интеграции системы с любым из модулей IT Service Management.

HEAT Power Desk:

Модули работы с заявками: Call Logging - модуль работы с заявками Клиентов; Alert Monitor - модуль оповещения специалистов служб поддержки о событиях; First Level Support - база знаний (решения типовых заявок);

Модули автоматизации: Auto Ticket Generator - создание заявок на основе почтовых сообщений; Business Process Automation Module - выполнение бизнес-правил;

Модули управления: Manager's Console - индикаторы текущих процессов (для руководства); Answer Wizard - мастер работы с отчетами ;

Модули администрирования: Quick Start Wizard - быстрая настройка собственной БД для работы с HEAT; LoadDB Utility - загрузка БД HEAT; Administrator - гибкая настройка интерфейса и функциональности HEAT

Дополнительные модули продукта HEAT:

HEAT® Plus Knowledge - база знаний в виде web-приложения(Модуль HEAT® Plus Knowledge позволяет осуществлять поиск сведений любого формата. HEAT® Plus Knowledge обрабатывает информацию в режиме реального времени, позволяя сотрудникам и Клиентам осуществлять глобальный поиск по нескольким репозиториям. HEAT® Plus Knowledge легко предоставляет информацию в единообразном виде, что сокращает время на поиск решения возникшей проблемы и на обучение персонала.);

HEAT® Self Service™ - «самообслуживание» для Клиентов (Модуль HEAT® Self Service™ позволяет сотрудникам и Клиентам Компании самостоятельно вводить свои заявки в БД HEAT® и получать информацию о решении этих заявок.);

HEAT® Asset Tracker - управление конфигурациями (ИТ-активами) (HEAT® Asset Tracker облегчает управление конфигурациями аппаратного и программного обеспечения, позволяя быстро и точно собрать сведения о программных и аппаратных средствах на различных платформах. HEAT® Asset Tracker позволяет управлять жизненным циклом ИТ-активов с момента приобретения до списания, с учетом промежуточных изменений, что дает возможность вести контроль ИТ-бюджета предприятия и повышать эффективность работы.);

iHEAT™ - тонкий клиент (Тонкий клиент - iHEAT™ позволяет получить доступ ко всей функциональности HEAТ через Internet. Сотрудники и Клиенты предприятия получат беспрепятственный и экономичный доступ к HEAT-приложениям, собранным на одном сервере.);

HEAT® Plus Remote Support Suite (HEAT® Plus Remote Support Suite представляет собой модуль, отвечающий за обеспечение безопасности при удаленной работе с HEAT®. Этот модуль предоставляет возможность получения сведений в режиме реального времени (чат, средства передачи файлов, а также средства удаленного исполнения программ и перезагрузки).).

3.1.3 Системы учета заявок

3.1.3.1 Регистрация заявок LAN

Поддержка ОС:

Microsoft Windows 2000 / XP / Vista / 7 / Server 2003 / Server 2008.

Сайт программы:

http://andysoftware.com/ru/rrlan/index.htm

Русский интерфейс:

да

Размер дистрибутива:

21 Мб

Условия распространения:

ShareWare - 1900 руб.

Версия:

3.2.1

'Регистрация заявок LAN' - Help Desk система для учета и отслеживания заявок и вопросов от пользователей в сети.

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

Администратор (диспетчер), у которого установлена программа 'Администратор', получает уведомление о поступившей заявке и обрабатывает её. Он может назначить исполнителя и направить заявку ему. Исполнитель в свою очередь получает об этом уведомление. Администратор может удалять заявки, направлять их исполнителям или изменять статус, а исполнитель - только изменять статус.

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

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

Программа состоит из 3-х модулей: программа 'Сервер', программа 'Администратор' и программа 'Клиент'.

Программа 'Сервер' (rrLAN_server.exe) содержит в себе программу, которая обрабатывает заявки, а также сервер баз данных Firebird. Программа обязательно устанавливается на 1 компьютер. Программа является сервером, который принимает заявки от пользователей. Если, по какой-либо причине, программа будет отключена, заявки будут находиться в режиме ожидания, и поступят на обработку сразу после включения программы.

Программа 'Администратор' (rrLAN_admin.exe) содержит в себе программу, с помощью которой можно просматривать и редактировать заявки, делать отчеты, создавать задачи и многое другое. Устанавливается на любое число компьютеров всем администраторам, исполнителям или наблюдателям.

Программа 'Клиент' (rrLAN_client.exe) содержит программу, с помощью которой создаются заявки. Устанавливается всем пользователям, которые будут отправлять заявки.

Основной набор функций:

Регистрация и отслеживание заявок от пользователей в локальной сети TCP/IP (или в VPN-сети). Программа-сервер работает в постоянном режиме и принимает заявки от пользователей.

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

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

Четыре типа пользователей программы. Клиенты - это пользователи сети, которые передают заявки; Администраторы/диспетчеры - это пользователи, которые могут просматривать заявки, назначать исполнителей, изменять статус; Исполнители - это пользователи, которые могут просматривать заявки, которые поступили именно к ним и изменять их статус и описание; Наблюдатели - это пользователи, которые могут просматривать все заявки и создавать отчеты. Авторизация для администраторов.

Возможность формирования отчетов на основании полученных заявок. В программу включены несколько отчетов, которые в полной степени показывают сведения о поступивших заявках и их обработке. Вы можете создавать свои отчеты с помощью мастера отчетов. В программу встроен генератор на основе мощного инструмента Fast Report 4, который позволяет делать экспорт в форматы xls, rtf, pdf, txt, jpg и другие форматы.

Уведомления по e-mail. Каждому пользователю может быть указан свой электронный адрес, по которому будет приходить письмо в случае поступления заявки. Если это администратор, то письмо приходит при поступлении заявки на сервер. Если это исполнитель - письмо приходит в случае, если администратор направит исполнителю эту заявку.

Задачи. Возможность назначать задачи и связывать их с заявками. Есть возможность устанавливать напоминания. 3 вида приоритета для задач.

Диалог администратора с клиентом (чат). Администратор может соединяться с клиентом для выяснения подробностей относительно заявки.

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

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

Карточка заявки. Формирование и печать карточки с информацией о заявке.

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

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

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

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

3.1.3.2 Заявки ИТ

Поддержка ОС:

Кроссплатформенное ПО

Сайт программы:

http://kurkov.info

Русский интерфейс:

да

Размер дистрибутива:

4 Мб

Условия распространения:

Shareware

Версия:

от 19.12.2011

Заявки ИТ - это система с WEB-интерфейсом и Windows-клиентами, позволяющая упростить и автоматизировать учет и обработку заявок поступающих в отдел ИТ. Обладает мощным генератором отчётов FastReport, который поможет Вам составить отчёт любой сложности.

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

3.1.4 Вывод

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

3.2 Выбор инструментальных средств

3.2.1 Клиент-серверные СУБД

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

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

3.2.1.1 Microsoft SQL Server

Microsoft SQL Server (http://www.microsoft.com/sqlserver/ru/ru/default.aspx) -- система управления реляционными базами данных, разработанная корпорацией Microsoft (http://www.microsoft.com/ru/ru/default.aspx).

Используется для небольших и средних по размеру баз данных, и в последние 5 лет -- для крупных баз данных масштаба предприятия, конкурирует с другими СУБД в этом сегменте рынка. Microsoft SQL Server в качестве языка запросов использует версию SQL, получившую название Transact-SQL (сокращённо T-SQL), являющуюся реализацией SQL-92 (стандарт ISO для SQL) с множественными расширениями. T-SQL позволяет использовать дополнительный синтаксис для хранимых процедур и обеспечивает поддержку транзакций (взаимодействие базы данных с управляющим приложением).

Microsoft SQL Server Express является бесплатно распространяемой версией SQL Server. Данная версия имеет некоторые технические ограничения, указанные ниже (речь идёт о версии MS SQL Express 2008). Такие ограничения делают её непригодной для развертывания больших баз данных, но вполне годится для ведения продуктов класса «1С-предприятие» и серьёзных программных комплексов в масштабах небольшой компании. Содержит полноценную поддержку новых типов данных, в т.ч. XML-спецификации. Фактически, это полноценный MS SQL Server, включая все его компоненты программирования, поддержку национальных алфавитов и Unicode. Поэтому используется в приложениях, при проектировании или для самостоятельного изучения. Нет никаких препятствий для дальнейшего развёртывания накопленной базы данных на MS SQL Server.

3.2.1.2 Interbase

Interbase -- СУБД от компании Borland (http://www.borland.com/). В 2000 году компания Borland выпустила версию InterBase 6.0 в открытых кодах -- InterBase 6 Open Source Edition, под InterBase Public License (IPL). Не было выпущено ни документации, ни системы тестирования, ни системы сборки проекта -- просто груда некомпилируемых исходников. Фактически Borland в тот момент отказался от дальнейшего развития InterBase. 31 июля 2000 года инициативная группа, отчаявшись добиться от Borland поддержки или хотя бы внятной позиции, скопировала исходные коды InterBase 6 и образовала проект Firebird -- полностью Open Source проект, основанный на кодах InterBase 6 Open Source. В 2001 году компания Borland снова решила развивать InterBase. В следующей версии InterBase (6.5) компания Borland очевидно отказалась от модели бизнеса на основе Open Source. Чуть позже официально полностью была прекращена поддержка InterBase Open Source Edition. В настоящее время последней версией является InterBase XE (2010). Основные достоинства последней версии InterBase от предидущих версий:

1. В Interbase 2010 появилась 64-х-битная архитектура, благодаря чему разработчикам удалось достигнуть значительного увеличения объемов контентно-адресуемой памяти. Это позволяет преодолеть ограничения на размер таблиц и размер обрабатываемых данных.

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

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

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

5. Работа в облаке. СУБД Interbase 2010 развертывается в Cloud Computing (среде облачных вычислений), что позволяет приложению получать мгновенный доступ к ресурсам.

Традиционным достоинством считается кроссплатформенность -- InterBase поддерживает GNU/Linux, Microsoft Windows, Unix и Solaris.

3.2.1.3 Firebird (FirebirdSQL)

Firebird (FirebirdSQL) -- компактная, кроссплатформенная, свободная система управления базами данных (СУБД), работающая на GNU/Linux, Microsoft Windows и разнообразных Unix платформах.

В качестве преимуществ Firebird можно отметить многоверсионную архитектуру, обеспечивающую параллельную обработку оперативных и аналитических запросов (это возможно потому, что читающие пользователи не блокируют пишущих), компактность (дистрибутив 5Mb), высокую эффективность и мощную языковую поддержку для хранимых процедур и триггеров. Firebird используется в различных промышленных системах с 2001 г. Это коммерчески независимый проект C и C++ программистов, технических советников и разработчиков мультиплатформенных систем управления базами данных, основанный на исходном тексте, выпущенном корпорацией Borland 25 июля 2000 года в виде свободной версии Interbase 6.0. Среди недостатков перечислятся отсутствие кеша результатов запросов, индексов fulltext для полнотекстового поиска.

Основные изменения последней версии Firebird (2.5):

1. Управление пользователями через SQL (CREATE USER/ALTER USER/DROP USER).

2. Модификация представлений через инструкции ALTER VIEW и CREATE OR ALTER VIEW.

3. Возможность изменять вычисляемые поля ALTER COLUMN.

4. Оператор SIMILAR TO позволяет проверять регулярные выражения в условии WHERE, CHECK и в операторе * IF расширения PSQL.

3.2.1.4 MySQL

MySQL -- свободная система управления базами данных (СУБД). MySQL является собственностью компании Sun Microsystems (http://ru.sun.com/), осуществляющей разработку и поддержку приложения. Распространяется под GNU General Public License и под собственной коммерческой лицензией, на выбор. Помимо этого компания MySQL AB разрабатывает функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.

MySQL портирована на большое количество платформ: AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server 2003 и Windows Vista. Существует также порт MySQL к OpenVMS. Важно отметить, что компания MySQL AB предоставляет для свободной загрузки не только исходные коды СУБД, но и откомпилированные и оптимизированные под конкретные операционные системы готовые исполняемые модули, которые можно загрузить с зеркал, представленных на официальном сайте (http://dev.mysql.com/downloads/). MySQL имеет API для языков Delphi, C, C++, Эйфель, Java, Лисп, Perl, PHP, Python, Ruby, Smalltalk и Tcl, библиотеки для языков платформы .NET, а также обеспечивает поддержку для ODBC посредством ODBC-драйвера MyODBC.

3.2.2 Язык программирования и среда разработки

В качестве языка программирования и среды разработки были выбраны - Visual Basic.NET и Microsoft Visual Studio 2008. Метод выбора заключался в уровне знаний языка и среды программирования, необходимых для выполнения работы.

Visual Basic .NET (VB.NET) -- это объектно-ориентированный язык программирования. Microsoft Visual Studio 2008 -- это мощная и настраиваемая среда программирования, которая содержит все инструменты, необходимые для быстрого и эффективного создания надежных программ для Windows. Большинство возможностей Visual Studio можно одинаково использовать в Visual Basic .NET, Visual C++ .NET, Visual C# .NET и Visual J# .NET.

3.2.3 Вывод

Поскольку существующая программно-аппаратная среда предприятия построена на базе решений Microsoft, будет достаточным выбрать в качестве СУБД Microsoft SQL Server 2008 R2. В качестве языка программирования и среды разработки выбраны - Visual Basic.NET и Microsoft Visual Studio 2008.

4. Решение задачи

4.1 Создание модели ИС

Для проведения анализа и реорганизации бизнес - процессов предназначено CASE-средство верхнего уровня AllFusion Process Modeler r7.1.

Построение модели информационной системы начинается с описания функционирования системы в целом в виде контекстной диаграммы. На рисунке П1.1. представлена контекстная диаграмма «Деятельность отдела ИТ по принятию и обработке заявок» в стандарте IDEF0.

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

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

Диаграмма работы «Принять заявку» изображена на рисунке П1.3. Диаграмма работы «Рассмотрение заявки» изображена на рисунке П1.4. Диаграмма работы «Управление» изображена на рисунке П1.5.

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

4.2.1 Инфологическая модель данных

В ходе анализа предметной области были выделены следующие сущности:

Заявка (Номер заявки, Идентификатор инцидента, Идентификатор исполнителя, Идентификатор приоритета, Идентификатор статуса, ФИО заявителя, Номер телефона заявителя, Время открытия, Время закрытия, Время выполнения, Номер заявителя, Имя ПК, Номер кабинета, Удалена, Отклонена)

Данные заявки (Номер заявки, Образ данных)

Комментарий заявки (Номер заявки, Время комментария, Комментарий)

Также в предметной области выделены следующие справочники:

Тип инцидента (Идентификатор, Имя инцидента)

Статус заявки (Идентификатор, Имя статуса)

Приоритет заявки (Идентификатор, Имя приоритета)

Исполнитель (Идентификатор, Имя исполнителя)

Описанные выше сущности образуют связи, описанные в таблице 4.1.

Таблица 4.1

Связи между сущностями

Сущность

Тип связи

Сущность

Тип инцидента

Один - ко многим

Заявка

Статус заявки

Один - ко многим

Заявка

Приоритет заявки

Один - ко многим

Заявка

Исполнитель

Один - ко многим

Заявка

Заявка

Один - к одному

Данные заявки

Заявка

Один - к одному

Комментарий заявки

На рисунке 4.1. представлена инфологическая модель данных, разработанная при помощи AllFusion ERwin Data Modeler r7.2.

Описанные выше сущности образуют связи, описанные в таблице 4.1.

4.2.2 Даталогическая модель данных

На основе инфологической модели была разработана даталогическая модель (рисунок 4.2.).

Рисунок 4.1. Инфологическая модель данных

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

Рисунок 4.2 Даталогическая модель данных

admins - соответствует сущности Исполнитель

Таблица 4.2

Таблица admins

Наименование поля

Тип поля

Описание

id_users

Счетчик

Идентификатор

admin

Текстовый (50)

Имя исполнителя

attach - соответствует сущности Данные заявки

Таблица 4.3

Таблица attach

Наименование поля

Тип поля

Описание

id_ticket

Счетчик

Идентификатор

image

Двоичные данные

Образ данных

comments - соответствует сущности Комментарий

Таблица 4.4

Таблица comments

Наименование поля

Тип поля

Описание

id_ticket

Счетчик

Идентификатор

dt_comments

Дата и время

Время комментария

comments

Текстовый

Комментарий

incident - соответствует сущности Тип инцидента

Таблица 4.5

Таблица incident

Наименование поля

Тип поля

Описание

id_incident

Счетчик

Идентификатор

name_incident

Текстовый (50)

Имя инцидента

priority - соответствует сущности Приоритет заявки

Таблица 4.6

Таблица priority

Наименование поля

Тип поля

Описание

id_priority

Счетчик

Идентификатор

name_priority

Текстовый (20)

Приоритет

status - соответствует сущности Статус заявки

Таблица 4.7

Таблица status

Наименование поля

Тип поля

Описание

id_status

Счетчик

Идентификатор

name_status

Текстовый (20)

Статус

ticket - соответствует сущности Заявка

Таблица 4.8

Таблица ticket

Наименование поля

Тип поля

Описание

id_ticket

Счетчик

Идентификатор

id_incident

Числовой

Идентификатор инцидента

id_status

Числовой

Идентификатор статуса

id_priority

Числовой

Идентификатор приоритета

id_users

Числовой

Идентификатор исполнителя

fio

Текстовый (50)

Системное имя заявителя

phone

Текстовый (20)

Номер телефона

open_ticket

Дата и время

Время открытия

close_ticket

Дата и время

Время закрытия

work_time

Дата и время

Время выполнения

tabel

Числовой

Номер заявителя

pc_inv

Текстовый (50)

Имя ПК

room

Числовой

Номер кабинета

deleted

Логический

Удалена или нет

otklon

Логический

Отклонена или нет

4.2.3 Физическая модель данных

На рисунке 4.3. изображена физическая модель данных, разработанная в AllFusion ERwin Data Modeler r7.2.

Рисунок 4.3 Физическая модель данных

4.2.4 Построение схемы данных

На рисунке 4.4. приведен список таблиц, реализованных в Microsoft SQL Server 2008

Рисунок 4.4 Список таблиц БД

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

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

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

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

Рисунок 4.5 Схема данных

4.3 Разработка интерфейса

4.3.1 Приложение «Заявки - Пользователь»

4.3.1.1 Главное окно

Главное окно приложения «Заявки - Пользователь» изображено на рисунке 4.6. Позволяет создать заявку в отдел ИТ. Заполнение всех полей формы обязательно, за исключением снимка экрана. Имя пользователя и сетевое имя компьютера заполняются автоматически. Приложение отображает заявки созданные пользователем с компьютера, на котором запущено приложение. Количество отображаемых заявок изменяется в настройках. Для просмотра заявки необходимо выполнить двойной клик указателем мышь на заявке.

Рис 4.6 Главное окно приложения «Заявки - Пользователь»

4.3.1.2 Окно «Настройки»

Окно «Настройки» приложения «Заявки - Пользователь» изображено на рисунке 4.7. Форма содержит поля для ввода имени сервера БД, имени БД, количества отображаемых заявок и интервал обновления списка заявок.

Рис. 4.7 Окно «Настройки» приложения «Заявки - Пользователь»

4.3.1.3 Окно заявки

Окно «Заявка» в приложении «Заявки - Пользователь» изображено на рисунке 4.8. Для открытия окна заявки необходимо выполнить двойной клик указателем мышь по заявке в главном окне.

Рис. 4.8 Окно «Заявка» в приложении «Заявки - Пользователь»

4.3.1.4 Окно «Снимок экрана»

Окно «Снимок экрана» в приложении «Заявки - Пользователь» изображено на рисунке 4.9.

Рис. 4.9 Окно «Снимок экрана» в приложении «Заявки - Пользователь»

4.3.2 Приложение «Заявки - Оператор»

4.3.2.1 Главное окно

Главное окно в приложении «Заявки - Оператор» изображено на рисунке 4.10. Дает пользователю информацию по заявкам, поступившим в систему, отображает закрытые (выполненные) заявки. Для открытия заявки и просмотра данных необходимо выполнить двойной клик указателем мышь на заявке.

Рис. 4.10 Главное окно в приложении «Заявки - Оператор»

При сворачивании окна приложение прячется в системный трей (рисунок 4.11).

Рисунок 4.11

При получении новой заявки на экран выводится всплывающее сообщение (рисунок 4.12.), если приложение свернуто, то оно выводится на экран.

Рисунок 4.12

4.3.2.2 Окно «Заявка»

Окно «Заявка» в приложении «Заявки - Оператор» изображено на рисунке 4.13. Отображает информацию для принятия решения о назначении исполнителя или отклонении заявки. Позволяет назначить исполнителя и указать приоритетность заявки.

Рис. 4.13 Окно «Заявка» в приложении «Заявки - Оператор»

4.3.2.3 Окно настроек

Окно «Настройки» в приложении «Заявки - Оператор» изображено на рисунке 4.14. Форма содержит поля для ввода имени сервера БД, имени БД, времени обновления списка заявок.

Рис. 4.14 Окно «Настройки» в приложении «Заявки - Оператор»

4.3.2.4 Окно «Снимок экрана»

Окно «Снимок экрана» в приложении «Заявки - Оператор» изображено на рисунке 4.15.

Рис. 4.15 Окно «Снимок экрана» в приложении «Заявки - Оператор»

4.3.3 Приложение «Заявки - Исполнитель»

4.3.3.1 Главное окно

Главное окно в приложении «Заявки - Исполнитель» изображено на рисунке 4.16. Отображает списки заявок по приоритетности.

Рис. 4.16 Главное окно в приложении «Заявки - Исполнитель»

При сворачивании окна приложение прячется в системный трей (рисунок 4.17.).

Рисунок 4.17

При получении новой заявки на экран выводится всплывающее сообщение (рисунок 4.18.), если приложение свернуто, то оно выводится на экран.

Рисунок 4.18

4.3.3.2 Окно «Настройки»

Окно «Настройки» в приложении «Заявки - Исполнитель» изображено на рисунке 4.19. Форма содержит поля для ввода имени сервера БД, имени БД, времени обновления списка заявок.

Рис. 4.19 Окно «Настройки» в приложении «Заявки - Исполнитель»

4.3.3.3. Окно «Заявка»

Окно «Заявка» в приложении «Заявки - Исполнитель» изображено на рисунке 4.20.

Рис. 4.20 Окно «Заявка» в приложении «Заявки - Исполнитель»

4.3.3.4 Окно «Снимок экрана»

Окно «Снимок экрана» в приложении «Заявки - Исполнитель» изображено на рисунке 4.21.

Рис. 4.21 Окно «Снимок экрана» в приложении «Заявки - Исполнитель»

4.3.4 Приложение «Заявки - Настройка»

4.3.4.1 Главное окно

Главное окно в приложении «Заявки - Настройка» изображено на рисунке 4.22.

Рисунок 4.22 Главное окно в приложении «Заявки - Настройка»

4.3.4.2 Окно «Инциденты»

Окно «Инциденты» в приложении «Заявки - Настройка» изображено на рисунке 4.23. Форма отображает информацию о типах инцидентов в системе и позволяет добавить новые типы инцидентов.

Рисунок 4.23 Окно «Инциденты» в приложении «Заявки - Настройка»

4.3.4.3 Окно «Исполнители»

Окно «Исполнители» в приложении «Заявки - Настройка» изображено на рисунке 4.24. Форма отображает информацию об исполнителях и позволяет добавить в систему новых исполнителей.

Рисунок 4.24 Окно «Исполнители» в приложении «Заявки - Настройка»

4.3.4.4 Окно «Настройка БД»

Окно «Настройка БД» в приложении «Заявки - Настройка» изображено на рисунке 4.25. Форма содержит поля для ввода имени сервера БД, имени БД.

Рисунок 4.25 Окно «Настройка БД» в приложении «Заявки - Настройка»

При начальной настройке системы для создания пустой базы данных необходимо в окне «Настройка БД» нажать кнопку «Создать базу данных». При успешном создании БД на экран выведется соответствующее сообщение.

4.3.4.5 Окно «Очистка БД за период»

Окно «Очистка БД за период» в приложении «Заявки - Настройка» изображено на рисунке 4.26. Дает возможность удалить заявки из базы данных или установить статус «Удалена» за определенный период.

Рисунок 4.26 Окно «Очистка БД за период» в приложении «Заявки - Настройка»

4.3.4.6 Окно «Очистка всей БД»

Окно «Очистка всей БД» в приложении «Заявки - Настройка» изображено на рисунке 4.27. Дает возможность удалить все заявки из базы данных или установить статус «Удалена».

Рисунок 4.27 Окно «Очистка всей БД» в приложении «Заявки - Настройка»

4.3.4.7 Окно «Отчеты»

Окно «Отчеты» в приложении «Заявки - Настройка» изображено на рисунке 4.28. Дает возможность формировать отчеты по заявкам в системе, включая заявки со статусом «Удалена». Отчеты формируются в документы Microsoft Word. Примеры отчетов находятся в Приложении 2.

Рисунок 4.28. Окно «Отчеты» в приложении «Заявки - Настройка»

5. Результаты испытаний

Тестирование производилось под управлением операционной системы Microsoft Windows XP Professional Service Pack 3, Microsoft Windows 7 Professional Service Pack 1. В качестве СУБД выступал Microsoft SQL Server 2008 R2 Standard Edition. В качестве пакета приложений Microsoft Office, необходимого для формирования отчетов выступал Microsoft Office 2007. В ходе тестирования были проверены все функции системы. Ошибок выявлено не было.

Заключение

В ходе выполнения работы:

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

* Разработаны соответствующие приложения для визуализации работы с базой данных.

Поставленная задача выполнена полностью.

Список источников

1. http://www.itsmonline.ru/software/for.php - Независимый ITSM-портал, зарубежные ITSM-системы.

2. http://www.itsmonline.ru/software/native.php - Независимый ITSM-портал, отечественные ITSM-системы.

3. «ITIL Поддержка услуг», Ай-Теко, ISBN 0-11-330948-1.

4. http://www.community.terrasoft.ru/bc/practice/5072 - ИТ-менеджмент начинается с Service Desk, Александр Злотко,Руководитель направления Terrasoft Service Desk.

5. http://www.interface.ru/home.asp?artId=2373 - ИТ-отдел: как бороться с ленью, Илья Штефан.

6. http://admina.net.kg/article/100-helpdesk.html - Help Desk

7. http://www.itsmonline.ru/phparticles/show_news_one.php?n_id=231 -Управление изменениями с помощью регламентации, Сергей Рубцов, 2005

8. http://www.iteam.ru/publications/it/section_51/article_1977 - Опыт использования стандарта IDEF0, Сергей Рубцов

Приложение 1

Диаграмма «Деятельность отдела ИТ по принятию и обработке заявок»

Рисунок П 1.1 Контекстная диаграмма «Деятельность отдела ИТ по принятию и обработке заявок»

Рисунок П 1.2 Диаграмма верхнего уровня «Деятельность отдела ИТ по принятию и обработке заявок»

Рисунок П 1.3 Диаграмма декомпозиции «Принять заявку»

Рисунок П1.4. Диаграмма декомпозиции «Рассмотрение заявки»

Рисунок П 1.5 Диаграмма декомпозиции «Управление»

Приложение 2

Отчет о невыполненных заявках - 14.06.2012 4:04:24

Номер

Пользователь

Инцидент

Текст заявки

1

1831-00-325

Отсутствуют сетевые диски

Нет диска G

3

1831-00-478

Проблема с принтером

Печатает с полосой

5

1831-00-784

Создание нового рабочего места

Новое место

6

1831-00-045

Проблема с принтером

Не печатает

7

1831-00-657

Не открывается файл

G:obmenвася.txt

8

1831-00-465

Проблема с электронной почтой

Много спама

9

1831-00-479

Телефония

Не работает телефон

11

1831-00-478

Проблема с компьютером

Не загружается windows

13

1831-00-657

Перемещение техники

Переключить принтер

14

1831-00-479

Другое

Не могу подписать файл

15

1831-00-112

Проблема с электронной почтой

Проблемная почта

Всего заявок - 12

Всего типов инцидентов - 9

Всего пользователей - 9

Отчет о выполненных заявках - 14.06.2012 4:08:00 за период - с 07.06.2012 20:06:47 по 14.06.2012 0:00:00

Номер

Пользователь

Инцидент

2

1831-00-112

Проблема с компьютером

4

1831-00-953

Проблема с интернетом

10

user

Отсутствуют сетевые диски

12

user

Проблема с сетью

16

1831-00-045

Отсутствуют сетевые диски

Всего заявок - 5

Всего типов инцидентов - 4

Всего пользователей - 4

Отчет о заявках по исполнителям - 14.06.2012 4:10:57 за период - с 07.06.2012 20:06:47 по 14.06.2012 0:00:00

Кычанов В.П.

31831-00-478 Проблема с принтером

61831-00-045 Проблема с принтером

91831-00-479 Телефония

111831-00-478 Проблема с компьютером

131831-00-657 Перемещение техники

Миронов В.В.

11831-00-325 Отсутствуют сетевые диски

51831-00-784 Создание нового рабочего места

71831-00-657 Не открывается файл

141831-00-479 Другое

Тестовый

21831-00-112 Проблема с компьютером

41831-00-953 Проблема с интернетом

81831-00-465 Проблема с электронной почтой

10user Отсутствуют сетевые диски

12user Проблема с сетью

151831-00-112 Проблема с электронной почтой

161831-00-045 Отсутствуют сетевые диски

Отчет об отклоненных заявках - 14.06.2012 4:12:15 за период - с 07.06.2012 20:06:47 по 14.06.2012 0:00:00

Номер

Пользователь

Инцидент

Текст заявки

17

Не назначен

Проблема с компьютером

Не включается

Всего заявок - 1

Всего типов инцидентов - 1

Всего пользователей - 1

Приложение 3. Коды программ

«Заявки - Пользователь»

Public Class Form1

Dim server As String

Dim StartDate As String = '19811121 00:00:00'

Dim time As String = '00:00:00'

Dim PC As String = My.Computer.Name

Dim USR As String = Split(My.User.Name, '')(1)

Dim img_path As String =

My.Computer.FileSystem.SpecialDirectories.Temp

Public srv As String = Split(GetSettings(), '%')(0)

Public it_db As String = Split(GetSettings(), '%')(1)

Public refr_time As String = Split(GetSettings(), '%')(2)

Public ticket_count As String = Split(GetSettings(), '%')(3)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Me.MaximizeBox = False

Timer1.Interval = CInt(refr_time) * 1000

tbox_user.Text = USR

tbox_pc.Text = PC

If srv <> '1' And it_db <> '1' Then

If TestConnect(srv, 'master') Then

If TestConnect(srv, it_db) Then

FillForm()

Else

MsgBox('Не найдена база данных. Обратитесь к администратору за

именем базы данных', MsgBoxStyle.Information, 'Информация')

Dim result As MsgBoxResult = MsgBox('Изменить базу данных?',

MsgBoxStyle.OkCancel, 'Информация')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

Else

MsgBox('Не правильные настройки. SQL Server не найден',

MsgBoxStyle.Information, 'Информация')

Dim result As MsgBoxResult = MsgBox('Выполнить настройку?',

MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

Else

Dim result As MsgBoxResult = MsgBox('Программа не настроена.

Настроить?', MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

End Sub

Private Sub picbox_screen_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles picbox_screen.Click

GetPrintSceen()

End Sub

Private Sub button_create_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles button_create.Click

If srv <> '1' And it_db <> '1' Then

If TestConnect(srv, it_db) Then

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

If tbox_room.Text = '' Then

tbox_room.BackColor = Color.Red

End If

If tbox_phone.Text = '' Then

tbox_phone.BackColor = Color.Red

End If

If (cbox_priority.SelectedIndex = -1) Or (cbox_priority.Text = '') Or _

(cbox_priority.SelectedItem <> cbox_priority.Text) Then

cbox_priority.BackColor = Color.Red

End If

If (cbox_type.SelectedIndex = -1) Or (cbox_type.Text = '') Or _

(cbox_type.SelectedItem <> cbox_type.Text) Then

cbox_type.BackColor = Color.Red

End If

If tbox_ticket.Text = '' Then

tbox_ticket.BackColor = Color.Red

End If

If (tbox_room.Text <> '') And (tbox_phone.Text <> '') And

(tbox_ticket.Text <> '') And _

(cbox_priority.SelectedIndex > -1) And (cbox_priority.SelectedItem =

cbox_priority.Text) And _

(cbox_type.SelectedIndex > -1) And (cbox_type.SelectedItem =

cbox_type.Text) Then

Dim dn As String = GetDateNowString()

Dim cmd As String = _

'INSERT INTO [ticket] ' & _

'([fio],[phone],[id_incident],[id_priority],' & _

'[id_status],[id_users],[open_ticket],[close_ticket],' & _

'[work_time],[tabel],[pc_inv],[room],[deleted],[otklon]) ' & _

'VALUES ('' & _

tbox_user.Text & '','' & _

tbox_phone.Text & '',' & _

CStr(cbox_type.SelectedIndex + 1) & ',' & _

CStr(cbox_priority.SelectedIndex + 1) & ',' & _

'1' & ',' & _

'-1' & ',' & _

'CONVERT(datetime,'' & dn & '',12)' & ',' & _

'CONVERT(datetime,'' & StartDate & '',12)' & ',' & _

'CONVERT(time,'' & time & '',12)' & ',' & _

'1' & ','' & tbox_pc.Text & '','' & tbox_room.Text & '','0','0')'

SqlCommand1.CommandText = cmd

SqlAdapter1.InsertCommand = SqlCommand1

SqlAdapter1.InsertCommand.Connection = SqlConnection1

SqlAdapter1.InsertCommand.Connection.Open()

SqlAdapter1.InsertCommand.ExecuteNonQuery()

SqlAdapter1.InsertCommand.Connection.Close()

Dim l_id As Integer = GetLastID()

FillComment(l_id, '----Пользователь----' & vbCrLf &

tbox_ticket.Text.ToString, dn)

Dim attach As String = img_path & 'img_zayavka_' & CStr(l_id) & '.jpg'

Try

picbox_screen.Image.Save(attach,

System.Drawing.Imaging.ImageFormat.Jpeg)

Catch ex As Exception

picbox_screen.ErrorImage.Save(attach,

System.Drawing.Imaging.ImageFormat.Jpeg)

End Try

FillAttach(l_id, attach)

My.Computer.FileSystem.DeleteFile(attach)

clearText()

MsgBox('Заявка создана', MsgBoxStyle.Information, 'Сообщение')

If Not CheckBox1.Checked Then

FillDataGridView(srv, it_db)

End If

End If

End If

Try

picbox_screen.Image = picbox_screen.ErrorImage

picbox_screen.Refresh()

Catch ex As Exception

End Try

Else

Dim result As MsgBoxResult = MsgBox('Программа не настроена.

Настроить?', MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

End Sub

Private Sub tbox_room_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_room.Click

tbox_room.BackColor = Color.White

End Sub

Private Sub cbox_priority_Click(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles cbox_priority.Click

cbox_priority.BackColor = Color.White

End Sub

Private Sub tbox_phone_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_phone.Click

tbox_phone.BackColor = Color.White

End Sub

Private Sub cbox_type_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles cbox_type.Click

cbox_type.BackColor = Color.White

End Sub

Private Sub tbox_ticket_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_ticket.Click

tbox_ticket.BackColor = Color.White

End Sub

Private Function GetDateNowString() As String

Dim sd, sm, sy, sh, sn, ss As String

Dim dn As Date = DateAndTime.Now

If DateAndTime.Hour(dn) < 10 Then

sh = '0' + DateAndTime.Hour(dn).ToString

Else

sh = DateAndTime.Hour(dn).ToString

End If

If DateAndTime.Minute(dn) < 10 Then

sn = '0' + DateAndTime.Minute(dn).ToString

Else

sn = DateAndTime.Minute(dn).ToString

End If

If DateAndTime.Second(dn) < 10 Then

ss = '0' + DateAndTime.Second(dn).ToString

Else

ss = DateAndTime.Second(dn).ToString

End If

sy = DateAndTime.Year(dn).ToString

If DateAndTime.Month(dn) < 10 Then

sm = '0' + DateAndTime.Month(dn).ToString

Else

sm = DateAndTime.Month(dn).ToString

End If

If DateAndTime.Day(dn) < 10 Then

sd = '0' + DateAndTime.Day(dn).ToString

Else

sd = DateAndTime.Day(dn).ToString

End If

GetDateNowString = sy & sm & sd & ' ' & sh & ':' & sn & ':' & ss

End Function

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Timer1.Tick

If srv <> '1' And it_db <> '1' Then

If TestConnect(srv, it_db) Then

FillDataGridView(srv, it_db)

End If

End If

End Sub

Private Sub FillDataGridView(ByVal server As String, ByVal DBN As

String)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog='

& DBN & ';Integrated Security=True'

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim c_row, c_col As Integer

Dim cmd As String = 'SELECT TOP ' & ticket_count & ' [id_ticket]' & _

',[id_status]' & _

',[id_users]' & _

',[open_ticket]' & _

',[close_ticket]' & _

',[id_incident]' & _

'FROM [ticket] where fio like '' & USR & '' and PC_inv like '' & _

PC & '' and deleted = 0 and otklon = 0 ORDER BY [ID_ticket] DESC'

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

Try

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

c_col = DataSet2.Tables.Item(0).Columns.Count

If c_row > 0 Then

DataGridView1.RowCount = c_row

DataGridView1.ColumnCount = c_col

DataGridView1.Columns.Item(0).HeaderText = 'Номер заявки'

DataGridView1.Columns.Item(1).HeaderText = 'Статус заявки'

DataGridView1.Columns.Item(2).HeaderText = 'Исполнитель'

DataGridView1.Columns.Item(3).HeaderText = 'Открыта'

DataGridView1.Columns.Item(4).HeaderText = 'Закрыта'

DataGridView1.Columns.Item(5).HeaderText = 'Тип инцидента'

For i = 1 To c_row

For j = 1 To c_col

If j = 2 Then

DataGridView1.Item(j - 1, i - 1).Value =

GetStatus(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1))

Else

If j = 3 Then

DataGridView1.Item(j - 1, i - 1).Value =

GetAdmin(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1))

Else

If j = 5 Then

If DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1).ToString =

'21.11.1981 0:00:00' Then

DataGridView1.Item(j - 1, i - 1).Value = 'Не закрыта'

Else

DataGridView1.Item(j - 1, i - 1).Value =

DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1).ToString

End If

Else

If j = 6 Then

DataGridView1.Item(j - 1, i - 1).Value =

GetIncident(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1))

Else

DataGridView1.Item(j - 1, i - 1).Value =

DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1).ToString

End If

End If

End If

End If

Next

Next

End If

SqlAdapter2.SelectCommand.Connection.Close()

Catch ex As Exception

End Try

End Sub

Private Sub clearText()

tbox_room.Text = ''

tbox_pc.Text = PC

tbox_pc.ReadOnly = True

tbox_user.Text = USR

tbox_user.ReadOnly = True

CheckBox1.Checked = False

tbox_phone.Text = ''

tbox_ticket.Text = ''

cbox_priority.Text = ''

cbox_type.Text = ''

End Sub

Private Function GetStatus(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_status]' & _

'FROM [status] where id_status = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetStatus = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetAdmin(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [admin]' & _

'FROM [admins] where id_users = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetAdmin = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetIncident(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_incident]' & _

'FROM [incident] where id_incident = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetIncident = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetComment(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [comments]' & _

'FROM [comments] where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetComment = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetLastID() As Integer

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'select MAX(id_ticket) as id_ticket from ticket ' & _

'where fio like '' & tbox_user.Text & '' and ' & _

'pc_inv like '' & tbox_pc.Text & '''

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetLastID = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Sub FillComment(ByVal id As Integer, ByVal comment As String,

ByVal dn As String)

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

Dim cmd As String = _

'INSERT INTO [comments]' & _

'([id_ticket]' & _

',[dt_comments]' & _

',[comments])' & _

'VALUES' & _

'(' & CStr(id) & ',CONVERT(datetime,'' & dn & ''),'' & comment & '')'

tbox_ticket.Text = cmd

SqlCommand1.CommandText = cmd

SqlAdapter1.InsertCommand = SqlCommand1

SqlAdapter1.InsertCommand.Connection = SqlConnection1

SqlAdapter1.InsertCommand.Connection.Open()

SqlAdapter1.InsertCommand.ExecuteNonQuery()

SqlAdapter1.InsertCommand.Connection.Close()

End Sub

Private Sub FillAttach(ByVal id As Integer, ByVal attach As String)

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

Dim cmd As String = _

'INSERT INTO [attach] (' & _

'[id_ticket],[image]) ' & _

'VALUES (' & id & ',0x0)'

SqlCommand1.CommandText = cmd

SqlAdapter1.InsertCommand = SqlCommand1

SqlAdapter1.InsertCommand.Connection = SqlConnection1

SqlAdapter1.InsertCommand.Connection.Open()

SqlAdapter1.InsertCommand.ExecuteNonQuery()

SqlAdapter1.InsertCommand.Connection.Close()

File2SqlBlob(attach, id)

End Sub

Private Sub File2SqlBlob(ByVal SourceFilePath As String, ByVal id As

Integer)

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim cn As New SqlClient.SqlConnection(con_string)

Dim cmd As New SqlClient.SqlCommand('UPDATE attach SET

Image=@Image WHERE id_ticket=' & CStr(id), cn)

Dim fs As New System.IO.FileStream(SourceFilePath, IO.FileMode.Open,

IO.FileAccess.Read)

Dim b(fs.Length() - 1) As Byte

fs.Read(b, 0, b.Length)

fs.Close()

Dim P As New SqlClient.SqlParameter('@Image', SqlDbType.Image,

b.Length, ParameterDirection.Input, False, 0, 0, Nothing,

DataRowVersion.Current, b)

cmd.Parameters.Add(P)

cn.Open()

cmd.ExecuteNonQuery()

cn.Close()

End Sub

Private Sub SqlBlob2File(ByVal DestFilePath As String, ByVal id As

Integer)

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim PictureCol As Integer = 0

Dim cn As New SqlClient.SqlConnection(con_string)

Dim cmd As New SqlClient.SqlCommand('SELECT image FROM attach

WHERE id_ticket=' & CStr(id), cn)

cn.Open()

Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader()

dr.Read()

Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As

Byte

dr.GetBytes(PictureCol, 0, b, 0, b.Length)

dr.Close()

cn.Close()

Dim fs As New System.IO.FileStream(DestFilePath, IO.FileMode.Create,

IO.FileAccess.Write)

fs.Write(b, 0, b.Length)

fs.Close()

End Sub

Private Sub GetPrintSceen()

Me.Hide()

Threading.Thread.Sleep(1000)

Dim bmpScreenShot As Bitmap

Dim gfxScreenshot As Graphics

bmpScreenShot = New Bitmap(Screen.PrimaryScreen.Bounds.Width,

Screen.PrimaryScreen.Bounds.Height,

Imaging.PixelFormat.Format32bppArgb)

gfxScreenshot = Graphics.FromImage(bmpScreenShot)

gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,

Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size,

CopyPixelOperation.SourceCopy)

picbox_screen.Image = bmpScreenShot

Me.Show()

End Sub

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object,

ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)

Handles LinkLabel1.LinkClicked

Form2.Visible = True

Form2.Activate()

End Sub

Function TestConnect(ByVal server As String, ByVal DBN As String) As

Boolean

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog='

& DBN & ';Integrated Security=True'

Dim result As String = ''

Try

Dim cn As New SqlClient.SqlConnection(con_string)

cn.Open()

cn.Close()

Catch ex As Exception

result = ex.Message

End Try

If result = '' Then

TestConnect = True

Else

TestConnect = False

End If

End Function

Sub FillForm()

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

FillDataGridView(srv, it_db)

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

SqlCommand1.CommandText = 'select * from incident'

SqlAdapter1.SelectCommand = SqlCommand1

SqlAdapter1.SelectCommand.Connection = SqlConnection1

Dim c_row As Integer

Try

SqlAdapter1.SelectCommand.Connection.Open()

SqlAdapter1.Fill(DataSet1)

c_row = DataSet1.Tables.Item(0).Rows.Count

cbox_type.Items.Clear()

For i = 1 To c_row

cbox_type.Items.Add(DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(1))

Next

SqlAdapter1.SelectCommand.Connection.Close()

Catch ex As Exception

End Try

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = 'select * from priority'

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

Try

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

cbox_priority.Items.Clear()

For i = 1 To c_row

cbox_priority.Items.Add(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(1))

Next

SqlAdapter2.SelectCommand.Connection.Close()

Catch ex As Exception

End Try

'GetPrintSceen()

End Sub

Function GetSettings() As String

Dim s As String = '1%1%30%10'

Dim r As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath

& 'settings.ini') Then

r =

My.Computer.FileSystem.OpenTextFileReader(My.Application.Info.Direct

oryPath & 'settings.ini')

s = r.ReadLine

r.Close()

If s = '' Then s = '1%1%30%10'

End If

GetSettings = s

End Function

Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles

MyBase.FormClosed

Dim wr As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath

& 'settings.ini') Then

My.Computer.FileSystem.DeleteFile(My.Application.Info.DirectoryPath &

'settings.ini')

End If

wr =

My.Computer.FileSystem.OpenTextFileWriter(My.Application.Info.Directo

ryPath & 'settings.ini', False)

wr.WriteLine(srv & '%' & it_db & '%' & refr_time & '%' & ticket_count)

wr.Close()

End Sub

Private Sub DataGridView1_CellDoubleClick(ByVal sender As

System.Object, ByVal e As

System.Windows.Forms.DataGridViewCellEventArgs) Handles

DataGridView1.CellDoubleClick

Dim cur_row As Integer = DataGridView1.CurrentRow.Index

Dim cur_id_value As Integer = DataGridView1.Item(0, cur_row).Value

Dim cur_inc_value As String = DataGridView1.Item(5, cur_row).Value

OpenTicket(cur_id_value, cur_inc_value)

End Sub

Sub OpenTicket(ByVal id As Integer, ByVal id_inc As String)

Form3.Visible = True

Form3.Activate()

Form3.l_id.Text = 'Заявка №' & CStr(id)

Form3.l_incident.Text = 'Тип инцидента - ' & id_inc

Form3.tbox_ticket.Text = GetComment(id)

End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

If CheckBox1.Checked Then

tbox_pc.Text = ''

tbox_pc.ReadOnly = False

tbox_user.ReadOnly = False

Else

tbox_pc.Text = PC

tbox_user.Text = USR

tbox_pc.ReadOnly = True

tbox_user.ReadOnly = True

End If

End Sub

End Class

Public Class Form2

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button2.Click

If (tbox_server.Text = '') Then

tbox_server.BackColor = Color.Red

If tbox_DB.Text = '' Then tbox_DB.BackColor = Color.Red

Else

If tbox_DB.Text = '' Then

tbox_DB.BackColor = Color.Red

Else

If Form1.TestConnect(tbox_server.Text, tbox_DB.Text) Then

If tbox_refresh_t.Text = '' Then tbox_refresh_t.Text = '30'

SaveSettings(tbox_server.Text, tbox_DB.Text, tbox_refresh_t.Text,

tbox_count_tick.Text)

Me.Close()

Form1.FillForm()

Else

Dim result As MsgBoxResult = MsgBox('Не правильные настройки!

Повторить?', MsgBoxStyle.OkCancel, 'Информация')

If result = MsgBoxResult.Ok Then

tbox_server.BackColor = Color.Red

tbox_DB.BackColor = Color.Red

End If

End If

End If

End If

End Sub

Private Sub Form2_FormClosed(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles

MyBase.FormClosed

Form1.Enabled = True

End Sub

Private Sub SaveSettings(ByVal server As String, ByVal DBN As String,

ByVal refr_tm As String, ByVal c_tick As String)

Form1.srv = server

Form1.it_db = DBN

Form1.refr_time = refr_tm

Form1.ticket_count = c_tick

End Sub

Private Sub tbox_server_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_server.Click

tbox_server.BackColor = Color.White

End Sub

Private Sub tbox_DB_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_DB.Click

tbox_DB.BackColor = Color.White

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

tbox_server.Text = Form1.srv

tbox_DB.Text = Form1.it_db

tbox_refresh_t.Text = Form1.refr_time

tbox_count_tick.Text = Form1.ticket_count

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button1.Click

If Form1.TestConnect(tbox_server.Text, tbox_DB.Text) Then

MsgBox('Соединение успешно установлено', MsgBoxStyle.Information,

'Сообщение')

Else

MsgBox('Неправильные настройки', MsgBoxStyle.Information,

'Сообщение')

End If

End Sub

End Class

Public Class Form3

Private Sub Form3_FormClosed(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles

MyBase.FormClosed

Form1.Enabled = True

End Sub

End Class

«Заявки - Оператор»

Public Class Form1

Dim server As String

Dim StartDate As String = '19811121 00:00:00'

Dim PC As String = My.Computer.Name

Dim USR As String = Split(My.User.Name, '')(1)

Dim img_path As String =

My.Computer.FileSystem.SpecialDirectories.Temp

Public tmp1 As String

Public srv As String = Split(GetSettings(), '%')(0)

Public it_db As String = Split(GetSettings(), '%')(1)

Public refr_time As String = Split(GetSettings(), '%')(2)

Public ticket_count As String = Split(GetSettings(), '%')(3)

Dim c1, c2 As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

Label1.ForeColor = Me.BackColor

Me.MaximizeBox = False

Timer1.Interval = CInt(refr_time) * 1000

If srv <> '1' And it_db <> '1' Then

If TestConnect(srv, 'master') Then

If TestConnect(srv, it_db) Then

FillForm()

c1 = DataGridView1.RowCount

c2 = DataGridView2.RowCount

Else

MsgBox('Не найдена база данных. Обратитесь к администратору за

именем базы данных', MsgBoxStyle.Information, 'Информация')

Dim result As MsgBoxResult = MsgBox('Изменить базу данных?',

MsgBoxStyle.OkCancel, 'Информация')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

Else

MsgBox('Не правильные настройки. SQL Server не найден',

MsgBoxStyle.Information, 'Информация')

Dim result As MsgBoxResult = MsgBox('Выполнить настройку?',

MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

Else

Dim result As MsgBoxResult = MsgBox('Программа не настроена.

Настроить?', MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Form2.Activate()

Me.Enabled = False

End If

End If

End Sub

Sub FillForm()

FillDataGridView(srv, it_db, DataGridView1, '1')

TabControl1.TabPages.Item(0).Text = 'Поступившие (' &

CStr(DataGridView1.RowCount) & ')'

FillDataGridView(srv, it_db, DataGridView2, '5')

TabControl1.TabPages.Item(1).Text = 'Закрытые (' &

CStr(DataGridView2.RowCount) & ')'

End Sub

Function GetSettings() As String

Dim s As String = '1%1%30%10'

Dim r As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath

& 'settings.ini') Then

r =

My.Computer.FileSystem.OpenTextFileReader(My.Application.Info.Direct

oryPath & 'settings.ini')

s = r.ReadLine

r.Close()

If s = '' Then s = '1%1%30%10'

End If

GetSettings = s

End Function

Function TestConnect(ByVal server As String, ByVal DBN As String) As

Boolean

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog='

& DBN & ';Integrated Security=True'

Dim result As String = ''

Try

Dim cn As New SqlClient.SqlConnection(con_string)

cn.Open()

cn.Close()

Catch ex As Exception

result = ex.Message

End Try

If result = '' Then

TestConnect = True

Else

TestConnect = False

End If

End Function

Private Sub SqlBlob2File(ByVal DestFilePath As String, ByVal id As

Integer)

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim PictureCol As Integer = 0

Dim cn As New SqlClient.SqlConnection(con_string)

Dim cmd As New SqlClient.SqlCommand('SELECT image FROM attach

WHERE id_ticket=' & CStr(id), cn)

cn.Open()

Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader()

dr.Read()

Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As

Byte

dr.GetBytes(PictureCol, 0, b, 0, b.Length)

dr.Close()

cn.Close()

Dim fs As New System.IO.FileStream(DestFilePath, IO.FileMode.Create,

IO.FileAccess.Write)

fs.Write(b, 0, b.Length)

fs.Close()

End Sub

Private Function GetComment(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [comments]' & _

'FROM [comments] where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetComment = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetIncident(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_incident]' & _

'FROM [incident] where id_incident = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetIncident = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

база данный информационный заявка

Private Function GetStatus(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_status]' & _

'FROM [status] where id_status = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetStatus = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetUsersID(ByVal admin As String) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' &

it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [id_users]' & _

'FROM [admins] where [admin] like '' & CStr(admin) & '''

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetUsersID = CStr(DataSet2.Tables.Item(0).Rows.Item(0).Item(0))

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Sub FillDataGridView(ByVal server As String, ByVal DBN As String,

ByRef DGV As DataGridView, ByVal status As String)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog='

& DBN & ';Integrated Security=True'

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim c_row, c_col As Integer

Dim cmd As String = 'SELECT [id_ticket]' & _

',[fio]' & _

',[phone]' & _

',[pc_inv]' & _

',[room]' & _

',[open_ticket]' & _

',[id_incident]' & _

'FROM [ticket] WHERE [deleted] = 0 and [otklon] = 0 and [id_status] = '

& status

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Close()

Try

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

c_col = DataSet2.Tables.Item(0).Columns.Count

If c_row > 0 Then

DGV.RowCount = c_row

DGV.ColumnCount = c_col

DGV.Columns.Item(0).HeaderText = 'Номер заявки'

DGV.Columns.Item(1).HeaderText = 'ФИО'

DGV.Columns.Item(2).HeaderText = 'Телефон'

DGV.Columns.Item(3).HeaderText = 'Имя компьютера'

DGV.Columns.Item(4).HeaderText = 'Кабинет'

DGV.Columns.Item(5).HeaderText = 'Открыта'

DGV.Columns.Item(6).HeaderText = 'Тип инцидента'

For i = 1 To c_row

For j = 1 To c_col

If j = 7 Then

DGV.Item(j - 1, i - 1).Value =

GetIncident(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1))

Else

If j = 0 Then DGV.Item(j - 1, i - 1).Value =

DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1)

DGV.Item(j - 1, i - 1).Value = DataSet2.Tables.Item(0).Rows.Item(i -

1).Item(j - 1).ToString

End If

Next

Next

End If

Catch ex As Exception

End Try

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Timer1.Tick

Dim m1, m2 As String

Dim rc1, rc2 As Integer

FillForm()

rc1 = DataGridView1.RowCount

rc2 = DataGridView2.RowCount

If c1 < rc1 Or c2 < rc2 Then

If c1 < rc1 Then

m1 = vbTab & 'Поступившие - ' & CStr(rc1 - c1) & '(' & rc1 & ')' &

vbCrLf

c1 = rc1

Else

m1 = ''

End If

If c2 < rc2 Then

m2 = vbTab & 'Закрытые - ' & CStr(rc2 - c2) & '(' & rc2 & ')'

c2 = rc2

Else

m2 = ''

End If

If Me.WindowState = FormWindowState.Minimized Then

Me.Show()

Me.WindowState = FormWindowState.Normal

End If

NotifyIcon1.ShowBalloonTip(5000, 'ticket_operator', 'ЗАЯВКИ:' &

vbTab & vbTab & vbCrLf & _

m1 & m2, ToolTipIcon.Info)

End If

End Sub

Private Sub DataGridView1_CellDoubleClick(ByVal sender As

System.Object, ByVal e As

System.Windows.Forms.DataGridViewCellEventArgs) Handles

DataGridView1.CellDoubleClick, DataGridView2.CellDoubleClick

Dim cur_row As Integer = sender.CurrentRow.Index

Dim cur_id_value As Integer = sender.Item(0, cur_row).Value

Dim cur_inc_value As String = sender.Item(6, cur_row).Value

Label1.Text = CStr(cur_id_value)

Form3.L_user.Text = 'Пользователь - ' & sender.Item(1, cur_row).Value

& _

' Тел. ' & sender.Item(2, cur_row).Value & _

' Каб. ' & sender.Item(4, cur_row).Value

OpenTicket(cur_id_value, cur_inc_value)

tmp1 = img_path & 'image_z_' & CStr(cur_id_value) & '.jpg'

SqlBlob2File(tmp1, cur_id_value)

Form3.PictureBox1.ImageLocation = tmp1

Form3.PictureBox1.Load()

End Sub

Sub OpenTicket(ByVal id As Integer, ByVal id_inc As String)

Form3.Visible = True

Form3.Activate()

Form3.l_id.Text = 'Заявка №' & CStr(id)

Form3.l_incident.Text = 'Тип инцидента - ' & id_inc

Form3.tbox_ticket.Text = GetComment(id)

End Sub

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object,

ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs)

Handles LinkLabel1.LinkClicked

Form2.Visible = True

Form2.Activate()

End Sub

Private Sub Form1_LocationChanged(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.LocationChanged

If Me.WindowState = FormWindowState.Minimized Then

Me.Hide()

End If

End Sub

Private Sub NotifyIcon1_DoubleClick(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick

Me.Show()

Me.WindowState = FormWindowState.Normal

End Sub

Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles

MyBase.FormClosed

NotifyIcon1.Dispose()

End Sub

End Class

Public Class Form2

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button2.Click

If (tbox_server.Text = '') Then

tbox_server.BackColor = Color.Red

If tbox_DB.Text = '' Then tbox_DB.BackColor = Color.Red

Else

If tbox_DB.Text = '' Then

tbox_DB.BackColor = Color.Red

Else

If Form1.TestConnect(tbox_server.Text, tbox_DB.Text) Then

If tbox_refresh_t.Text = '' Then tbox_refresh_t.Text = '30'

SaveSettings(tbox_server.Text, tbox_DB.Text, tbox_refresh_t.Text,

tbox_count_tick.Text)

Me.Close()

Form1.FillForm()

Else

Dim result As MsgBoxResult = MsgBox('Не правильные настройки!

Повторить?', MsgBoxStyle.OkCancel, 'Информация')

If result = MsgBoxResult.Ok Then

tbox_server.BackColor = Color.Red

tbox_DB.BackColor = Color.Red

End If

End If

End If

End If

End Sub

Private Sub Form2_FormClosed(ByVal sender As System.Object, ByVal e

As System.Windows.Forms.FormClosedEventArgs) Handles

MyBase.FormClosed

Form1.Enabled = True

End Sub

Private Sub SaveSettings(ByVal server As String, ByVal DBN As String,

ByVal refr_tm As String, ByVal c_tick As String)

Form1.srv = server

Form1.it_db = DBN

Form1.refr_time = refr_tm

Form1.ticket_count = c_tick

End Sub

Private Sub tbox_server_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_server.Click

tbox_server.BackColor = Color.White

End Sub

Private Sub tbox_DB_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles tbox_DB.Click

tbox_DB.BackColor = Color.White

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

tbox_server.Text = Form1.srv

tbox_DB.Text = Form1.it_db

tbox_refresh_t.Text = Form1.refr_time

tbox_count_tick.Text = Form1.ticket_count

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button1.Click

If Form1.TestConnect(tbox_server.Text, tbox_DB.Text) Then

MsgBox('Соединение успешно установлено', MsgBoxStyle.Information,

'Сообщение')

Else

MsgBox('Неправильные настройки', MsgBoxStyle.Information,

'Сообщение')

End If

End Sub

End Class

Public Class Form3

Dim USR As String = Split(My.User.Name, '')(1)

Dim cur_id As Integer

Private Sub Form3_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Enabled = True

PictureBox1.Image.Dispose()

My.Computer.FileSystem.DeleteFile(Form1.tmp1)

End Sub

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked

Form4.PictureBox1.ImageLocation = Form1.tmp1

Form4.PictureBox1.Load()

Form4.Visible = True

Form4.Activate()

End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click

Form4.PictureBox1.ImageLocation = Form1.tmp1

Form4.PictureBox1.Load()

Form4.Visible = True

Form4.Activate()

End Sub

Private Function GetComment(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [comments]' & _

'FROM [comments] where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetComment = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim selected_isp As Integer = cbox_ispoln.SelectedIndex

If selected_isp > -1 Then

cur_id = CInt(Form1.Label1.Text)

UpdateIspoln(cur_id, selected_isp)

UpdateStatus(cur_id, 2) 'назначено

UpdatePriority(cur_id, cbox_priority.SelectedIndex + 1)

MsgBox('Заявка назначена', MsgBoxStyle.Information, 'Сообщение')

Form1.FillForm()

Else

MsgBox('Заявка не назначена. Не выбран исполнитель', MsgBoxStyle.Information, 'Сообщение')

End If

Form1.FillDataGridView(Form1.srv, Form1.it_db, Form1.DataGridView1, '1')

Form1.FillDataGridView(Form1.srv, Form1.it_db, Form1.DataGridView2, '5')

Me.Close()

End Sub

Private Sub UpdateIspoln(ByVal id As Integer, ByVal ispoln As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set id_users = ' & CStr(ispoln) & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Sub UpdateStatus(ByVal id As Integer, ByVal status As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial

Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set id_status = ' & CStr(status) & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Sub UpdateDT(ByVal id As Integer, ByVal DT As String)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set close_ticket = convert(datetime,'' & DT & '')' & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Function GetDateNowString() As String

Dim sd, sm, sy, sh, sn, ss As String

Dim dn As Date = DateAndTime.Now

If DateAndTime.Hour(dn) < 10 Then

sh = '0' + DateAndTime.Hour(dn).ToString

Else

sh = DateAndTime.Hour(dn).ToString

End If

If DateAndTime.Minute(dn) < 10 Then

sn = '0' + DateAndTime.Minute(dn).ToString

Else

sn = DateAndTime.Minute(dn).ToString

End If

If DateAndTime.Second(dn) < 10 Then

ss = '0' + DateAndTime.Second(dn).ToString

Else

ss = DateAndTime.Second(dn).ToString

End If

sy = DateAndTime.Year(dn).ToString

If DateAndTime.Month(dn) < 10 Then

sm = '0' + DateAndTime.Month(dn).ToString

Else

sm = DateAndTime.Month(dn).ToString

End If

If DateAndTime.Day(dn) < 10 Then

sd = '0' + DateAndTime.Day(dn).ToString

Else

sd = DateAndTime.Day(dn).ToString

End If

GetDateNowString = sy & sm & sd & ' ' & sh & ':' & sn & ':' & ss

End Function

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

End Sub

Private Sub Form3_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

SqlCommand1.CommandText = 'select * from admins'

SqlAdapter1.SelectCommand = SqlCommand1

SqlAdapter1.SelectCommand.Connection = SqlConnection1

SqlAdapter1.SelectCommand.Connection.Open()

SqlAdapter1.Fill(DataSet1)

Dim c_row As Integer = DataSet1.Tables.Item(0).Rows.Count

cbox_ispoln.Items.Clear()

For i = 2 To c_row

cbox_ispoln.Items.Add(DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(1))

Next

SqlAdapter1.SelectCommand.Connection.Close()

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = 'select name_priority from priority'

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

cbox_priority.Items.Clear()

For i = 1 To c_row

cbox_priority.Items.Add(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(0))

Next

SqlAdapter2.SelectCommand.Connection.Close()

Dim SqlAdapter3 As New SqlClient.SqlDataAdapter

Dim DataSet3 As New DataSet

Dim SqlConnection3 As New SqlClient.SqlConnection

SqlConnection3.ConnectionString = con_string

Dim SqlCommand3 As New SqlClient.SqlCommand

SqlCommand3.CommandText = 'SELECT [id_priority]' & vbCrLf & _

'FROM [ticket] where id_ticket = ' & Form1.Label1.Text

SqlAdapter3.SelectCommand = SqlCommand3

SqlAdapter3.SelectCommand.Connection = SqlConnection3

SqlAdapter3.SelectCommand.Connection.Open()

SqlAdapter3.Fill(DataSet3)

Dim npriority As String = DataSet3.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter3.SelectCommand.Connection.Close()

cbox_priority.SelectedIndex = npriority - 1

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim selected_pri As Integer = cbox_priority.SelectedIndex

If selected_pri > -1 Then

cur_id = CInt(Form1.Label1.Text)

UpdatePriority(cur_id, selected_pri + 1)

MsgBox('Приоритет изменен', MsgBoxStyle.Information, 'Сообщение')

Else

MsgBox('Приоритет не изменен. Не выбран приоритет', MsgBoxStyle.Information, 'Сообщение')

End If

End Sub

Private Sub UpdatePriority(ByVal id As Integer, ByVal priority As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set id_priority = ' & CStr(priority) & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Sub LinkLabel2_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked

SetOtklon(CInt(Form1.Label1.Text))

MsgBox('Заявка отклонена', MsgBoxStyle.Information, 'Сообщение')

End Sub

Private Sub SetOtklon(ByVal id As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set otklon = 1 ' & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

Me.Close()

Form1.FillForm()

End Sub

End Class

Public Class Form4

Private Sub Form4_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form3.Enabled = True

PictureBox1.Image.Dispose()

End Sub

End Class

«Заявки - Исполнитель»

Public Class Form1

Dim server As String

Dim StartDate As String = '19811121 00:00:00'

Dim PC As String = My.Computer.Name

Dim USR As String = Split(My.User.Name, '')(1)

Dim img_path As String = My.Computer.FileSystem.SpecialDirectories.Temp

Public tmp1 As String

Public srv As String = Split(GetSettings(), '%')(0)

Public it_db As String = Split(GetSettings(), '%')(1)

Public refr_time As String = Split(GetSettings(), '%')(2)

Public ticket_count As String = Split(GetSettings(), '%')(3)

Dim c1, c2, c3 As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Me.MaximizeBox = False

Timer1.Interval = CInt(refr_time) * 1000

If srv <> '1' And it_db <> '1' Then

If TestConnect(srv, 'master') Then

If TestConnect(srv, it_db) Then

FillForm()

c1 = DataGridView1.RowCount

c2 = DataGridView2.RowCount

c3 = DataGridView3.RowCount

Else

MsgBox('Не найдена база данных. Обратитесь к администратору за именем базы данных', MsgBoxStyle.Information, 'Информация')

Dim result As MsgBoxResult = MsgBox('Изменить базу данных?', MsgBoxStyle.OkCancel, 'Информация')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

Else

MsgBox('Не правильные настройки. SQL Server не найден', MsgBoxStyle.Information, 'Информация')

Dim result As MsgBoxResult = MsgBox('Выполнить настройку?', MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

Else

Dim result As MsgBoxResult = MsgBox('Программа не настроена. Настроить?', MsgBoxStyle.OkCancel, 'Сообщение')

If result = MsgBoxResult.Ok Then

Form2.Visible = True

Me.Enabled = False

End If

End If

End Sub

Sub FillForm()

Dim n1, n2, n3 As Integer

FillDataGridView(srv, it_db, DataGridView1, '3')

n1 = DataGridView1.RowCount

TabControl1.TabPages.Item(0).Text = 'Высокий (' & CStr(n1) & ')'

Try

If CStr(DataGridView1.Item(0, 0).Value) = '' Then

TabControl1.TabPages.Item(0).Text = 'Высокий (0)'

End If

Catch ex As Exception

End Try

FillDataGridView(srv, it_db, DataGridView2, '2')

n2 = DataGridView2.RowCount

TabControl1.TabPages.Item(1).Text = 'Нормальный (' & CStr(n2) & ')'

Try

If CStr(DataGridView2.Item(0, 0).Value) = '' Then

TabControl1.TabPages.Item(1).Text = 'Нормальный (0)'

End If

Catch ex As Exception

End Try

FillDataGridView(srv, it_db, DataGridView3, '1')

n3 = DataGridView3.RowCount

TabControl1.TabPages.Item(2).Text = 'Низкий (' & CStr(n3) & ')'

Try

If CStr(DataGridView3.Item(0, 0).Value) = '' Then

TabControl1.TabPages.Item(2).Text = 'Низкий (0)'

End If

Catch ex As Exception

End Try

End Sub

Function GetSettings() As String

Dim s As String = '1%1%30%10'

Dim r As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & 'settings.ini') Then

r = My.Computer.FileSystem.OpenTextFileReader(My.Application.Info.DirectoryPath & 'settings.ini')

s = r.ReadLine

r.Close()

If s = '' Then s = '1%1%30%10'

End If

GetSettings = s

End Function

Function TestConnect(ByVal server As String, ByVal DBN As String) As Boolean

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog=' & DBN & ';Integrated Security=True'

Dim result As String = ''

Try

Dim cn As New SqlClient.SqlConnection(con_string)

cn.Open()

cn.Close()

Catch ex As Exception

result = ex.Message

End Try

If result = '' Then

TestConnect = True

Else

TestConnect = False

End If

End Function

Private Sub SqlBlob2File(ByVal DestFilePath As String, ByVal id As Integer)

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' & it_db & ';Integrated Security=True'

Dim PictureCol As Integer = 0

Dim cn As New SqlClient.SqlConnection(con_string)

Dim cmd As New SqlClient.SqlCommand('SELECT image FROM attach WHERE id_ticket=' & CStr(id), cn)

cn.Open()

Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader()

dr.Read()

Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte

dr.GetBytes(PictureCol, 0, b, 0, b.Length)

dr.Close()

cn.Close()

Dim fs As New System.IO.FileStream(DestFilePath, IO.FileMode.Create, IO.FileAccess.Write)

fs.Write(b, 0, b.Length)

fs.Close()

End Sub

Private Function GetComment(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' & it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [comments]' & _

'FROM [comments] where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetComment = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetIncident(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' & it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_incident]' & _

'FROM [incident] where id_incident = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetIncident = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetStatus(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' & it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_status]' & _

'FROM [status] where id_status = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetStatus = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetUsersID(ByVal admin As String) As String

Dim con_string As String = 'Data Source=' & srv & ';Initial Catalog=' & it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [id_users]' & _

'FROM [admins] where [login] like '' & CStr(admin) & '''

Try

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetUsersID = CStr(DataSet2.Tables.Item(0).Rows.Item(0).Item(0))

SqlAdapter2.SelectCommand.Connection.Close()

Catch ex As Exception

End Try

End Function

Private Sub FillDataGridView(ByVal server As String, ByVal DBN As String, ByRef DGV As DataGridView, ByVal priority As String)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog=' & DBN & ';Integrated Security=True'

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim c_row, c_col As Integer

Dim cmd As String = 'SELECT [id_ticket]' & _

',[fio]' & _

',[phone]' & _

',[pc_inv]' & _

',[room]' & _

',[open_ticket]' & _

',[id_incident]' & _

'FROM [ticket] WHERE [id_users] = ' & GetUsersID(USR) & ' and [deleted] = 0 and [otklon] = 0 and [id_status] > 1 and [id_status] < 5 and [id_priority] = ' & _

priority

Try

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

c_col = DataSet2.Tables.Item(0).Columns.Count

If c_row > 0 Then

DGV.RowCount = c_row

DGV.ColumnCount = c_col

DGV.Columns.Item(0).HeaderText = 'Номер заявки'

DGV.Columns.Item(1).HeaderText = 'ФИО'

DGV.Columns.Item(2).HeaderText = 'Телефон'

DGV.Columns.Item(3).HeaderText = 'Имя компьютера'

DGV.Columns.Item(4).HeaderText = 'Кабинет'

DGV.Columns.Item(5).HeaderText = 'Открыта'

DGV.Columns.Item(6).HeaderText = 'Тип инцидента'

For i = 1 To c_row

For j = 1 To c_col

If j = 7 Then

DGV.Item(j - 1, i - 1).Value =

GetIncident(DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1))

Else

If j = 0 Then DGV.Item(j - 1, i - 1).Value =

DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1)

DGV.Item(j - 1, i - 1).Value = DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1).ToString

End If

Next

Next

Else

DGV.Rows.Clear()

DGV.RowCount = 0

End If

SqlAdapter2.SelectCommand.Connection.Close()

Catch ex As Exception

End Try

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Timer1.Tick

Dim m1, m2, m3 As String

Dim rc1, rc2, rc3 As Integer

FillForm()

rc1 = DataGridView1.RowCount

rc2 = DataGridView2.RowCount

rc3 = DataGridView3.RowCount

If c1 < rc1 Or c2 < rc2 Or c3 < rc3 Then

If c1 < rc1 Then

m1 = vbTab & 'Высокий приоритет - ' & CStr(rc1 - c1) & '(' & rc1 & ')' & vbCrLf

c1 = rc1

Else

m1 = ''

End If

If c2 < rc2 Then

m2 = vbTab & 'Нормальный приоритет - ' & CStr(rc2 - c2) & '(' & rc2 & ')' & vbCrLf

c2 = rc2

Else

m2 = ''

End If

If c3 < rc3 Then

m3 = vbTab & 'Низкий приоритет - ' & CStr(rc3 - c3) & '(' & rc3 & ')'

c3 = rc3

Else

m3 = ''

End If

If Me.WindowState = FormWindowState.Minimized Then

Me.Show()

Me.WindowState = FormWindowState.Normal

End If

NotifyIcon1.ShowBalloonTip(5000, 'ticket_admin', 'НОВЫЕ ЗАЯВКИ:' & vbTab & vbTab & vbCrLf & _

m1 & m2 & m3, ToolTipIcon.Info)

End If

End Sub

Private Sub DataGridView1_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick, DataGridView3.CellDoubleClick, DataGridView2.CellDoubleClick

Dim cur_row As Integer = sender.CurrentRow.Index

If CStr(sender.Item(0, 0).Value) <> '' Then

If cur_row > -1 And sender.RowCount > 0 Then

Dim cur_id_value As Integer = sender.Item(0, cur_row).Value

Dim cur_inc_value As String = sender.Item(6, cur_row).Value

Form3.L_user.Text = 'Пользователь - ' & sender.Item(1, cur_row).Value & _

' Тел. ' & sender.Item(2, cur_row).Value & _

' Каб. ' & sender.Item(4, cur_row).Value

OpenTicket(cur_id_value, cur_inc_value)

tmp1 = img_path & 'image_z_' & CStr(cur_id_value) & '.jpg'

SqlBlob2File(tmp1, cur_id_value)

Form3.PictureBox1.ImageLocation = tmp1

Form3.PictureBox1.Load()

End If

End If

End Sub

Sub OpenTicket(ByVal id As Integer, ByVal id_inc As String)

Form3.Visible = True

Form3.Activate()

Form3.l_id.Text = 'Заявка №' & CStr(id)

Form3.l_incident.Text = 'Тип инцидента - ' & id_inc

Form3.tbox_ticket.Text = GetComment(id)

End Sub

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked

Form2.Visible = True

Form2.Activate()

End Sub

Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

NotifyIcon1.Dispose()

Dim wr As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & 'settings.ini') Then

My.Computer.FileSystem.DeleteFile(My.Application.Info.DirectoryPath & 'settings.ini')

End If

wr = My.Computer.FileSystem.OpenTextFileWriter(My.Application.Info.DirectoryPath & 'settings.ini', False)

wr.WriteLine(srv & '%' & it_db & '%' & refr_time & '%' & ticket_count)

wr.Close()

End Sub

Private Sub NotifyIcon1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick

Me.Show()

Me.WindowState = FormWindowState.Normal

End Sub

Private Sub Form1_LocationChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LocationChanged

If Me.WindowState = FormWindowState.Minimized Then

Me.Hide()

End If

End Sub

End Class

Public Class Form2

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

If (tbox_server.Text = '') Then

tbox_server.BackColor = Color.Red

If tbox_DB.Text = '' Then tbox_DB.BackColor = Color.Red

Else

If tbox_DB.Text = '' Then

tbox_DB.BackColor = Color.Red

Else

If Form1.TestConnect(tbox_server.Text, tbox_DB.Text) Then

If tbox_refresh_t.Text = '' Then tbox_refresh_t.Text = '30'

SaveSettings(tbox_server.Text, tbox_DB.Text, tbox_refresh_t.Text, tbox_count_tick.Text)

Me.Close()

Form1.FillForm()

Else

Dim result As MsgBoxResult = MsgBox('Не правильные настройки! Повторить?', MsgBoxStyle.OkCancel, 'Информация')

If result = MsgBoxResult.Ok Then

tbox_server.BackColor = Color.Red

tbox_DB.BackColor = Color.Red

End If

End If

End If

End If

End Sub

Private Sub Form2_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Enabled = True

End Sub

Private Sub SaveSettings(ByVal server As String, ByVal DBN As String, ByVal refr_tm As String, ByVal c_tick As String)

Form1.srv = server

Form1.it_db = DBN

Form1.refr_time = refr_tm

Form1.ticket_count = c_tick

End Sub

Private Sub tbox_server_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbox_server.Click

tbox_server.BackColor = Color.White

End Sub

Private Sub tbox_DB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tbox_DB.Click

tbox_DB.BackColor = Color.White

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

tbox_server.Text = Form1.srv

tbox_DB.Text = Form1.it_db

tbox_refresh_t.Text = Form1.refr_time

tbox_count_tick.Text = Form1.ticket_count

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If Form1.TestConnect(tbox_server.Text, tbox_DB.Text) Then

MsgBox('Соединение успешно установлено', MsgBoxStyle.Information, 'Сообщение')

Else

MsgBox('Неправильные настройки', MsgBoxStyle.Information, 'Сообщение')

End If

End Sub

End Class

Public Class Form3

Dim USR As String = Split(My.User.Name, '')(1)

Dim cur_id As Integer

Private Sub Form3_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Enabled = True

PictureBox1.Image.Dispose()

My.Computer.FileSystem.DeleteFile(Form1.tmp1)

Timer1.Enabled = False

UpdateStatus(cur_id, 4) 'отложить

End Sub

Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked

Form4.PictureBox1.ImageLocation = Form1.tmp1

Form4.PictureBox1.Load()

Form4.Visible = True

Form4.Activate()

End Sub

Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click

Form4.PictureBox1.ImageLocation = Form1.tmp1

Form4.PictureBox1.Load()

Form4.Visible = True

Form4.Activate()

End Sub

Private Function GetComment(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [comments]' & _

'FROM [comments] where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetComment = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If tbox_otvet.Text <> '' Then

UpdateComment(cur_id)

tbox_otvet.Text = ''

End If

End Sub

Private Sub UpdateComment(ByVal id As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE comments' & vbCrLf & _

'SET comments = '' & tbox_ticket.Text & vbCrLf & _

'----' & USR & '----' & vbCrLf & _

tbox_otvet.Text & ''' & vbCrLf & _

'WHERE (id_ticket = ' & CStr(id) & ')'

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

tbox_ticket.Text = GetComment(cur_id)

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

UpdateStatus(cur_id, 4)

Me.Close()

End Sub

Private Sub UpdateStatus(ByVal id As Integer, ByVal status As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set id_status = ' & CStr(status) & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Sub UpdateDT(ByVal id As Integer, ByVal DT As String)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'UPDATE ticket' & vbCrLf & _

'set close_ticket = convert(datetime,'' & DT & '')' & vbCrLf & _

'WHERE id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

Private Sub Form3_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Timer1.Enabled = True

cur_id = CInt(Split(l_id.Text, '№')(1))

UpdateStatus(cur_id, 3)

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

If tbox_otvet.Text <> '' Then

UpdateComment(cur_id)

tbox_otvet.Text = ''

Else

tbox_otvet.Text = '-------'

UpdateComment(cur_id)

tbox_otvet.Text = ''

End If

Me.Close()

UpdateDT(cur_id, GetDateNowString())

UpdateStatus(cur_id, 5)

UpdateWT(cur_id)

End Sub

Private Function GetDateNowString() As String

Dim sd, sm, sy, sh, sn, ss As String

Dim dn As Date = DateAndTime.Now

If DateAndTime.Hour(dn) < 10 Then

sh = '0' + DateAndTime.Hour(dn).ToString

Else

sh = DateAndTime.Hour(dn).ToString

End If

If DateAndTime.Minute(dn) < 10 Then

sn = '0' + DateAndTime.Minute(dn).ToString

Else

sn = DateAndTime.Minute(dn).ToString

End If

If DateAndTime.Second(dn) < 10 Then

ss = '0' + DateAndTime.Second(dn).ToString

Else

ss = DateAndTime.Second(dn).ToString

End If

sy = DateAndTime.Year(dn).ToString

If DateAndTime.Month(dn) < 10 Then

sm = '0' + DateAndTime.Month(dn).ToString

Else

sm = DateAndTime.Month(dn).ToString

End If

If DateAndTime.Day(dn) < 10 Then

sd = '0' + DateAndTime.Day(dn).ToString

Else

sd = DateAndTime.Day(dn).ToString

End If

GetDateNowString = sy & sm & sd & ' ' & sh & ':' & sn & ':' & ss

End Function

Private Sub UpdateWT(ByVal id As Integer)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = _

'UPDATE [ticket]' & vbCrLf & _

'SET [work_time] = (select [close_ticket]-[open_ticket] from [ticket] where id_ticket = ' & CStr(id) & ')' & vbCrLf & _

'where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

SqlAdapter2.SelectCommand.Connection.Close()

End Sub

End Class

Public Class Form4

Private Sub Form4_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form3.Enabled = True

PictureBox1.Image.Dispose()

End Sub

End Class

«Заявки - Настройка»

Public Class Form1

Dim server As String

Dim StartDate As String = '19811121 00:00:00'

Dim PC As String = My.Computer.Name

Dim USR As String = Split(My.User.Name, '')(1)

Dim img_path As String = My.Computer.FileSystem.SpecialDirectories.Temp

Public tmp1 As String

Public srv As String = Split(GetSettings(), '%')(0)

Public it_db As String = Split(GetSettings(), '%')(1)

Public refr_time As String = Split(GetSettings(), '%')(2)

Public ticket_count As String = Split(GetSettings(), '%')(3)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Form2.Visible = True

Form2.Activate()

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Form3.Visible = True

Form3.Activate()

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Form4.Visible = True

Form4.Activate()

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Form5.Visible = True

Form5.Activate()

Form5.TextBox1.Text = srv

Form5.TextBox2.Text = it_db

End Sub

Function GetSettings() As String

Dim s As String = '1%1%30%10'

Dim r As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & 'settings.ini') Then

r = My.Computer.FileSystem.OpenTextFileReader(My.Application.Info.DirectoryPath & 'settings.ini')

s = r.ReadLine

r.Close()

If s = '' Then s = '1%1%30%10'

End If

GetSettings = s

End Function

Function TestConnect(ByVal server As String, ByVal DBN As String) As Boolean

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog=' & DBN & ';Integrated Security=True'

Dim result As String = ''

Try

Dim cn As New SqlClient.SqlConnection(con_string)

cn.Open()

cn.Close()

Catch ex As Exception

result = ex.Message

End Try

If result = '' Then

TestConnect = True

Else

TestConnect = False

End If

End Function

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing

Dim wr As Object

If My.Computer.FileSystem.FileExists(My.Application.Info.DirectoryPath & 'settings.ini') Then

My.Computer.FileSystem.DeleteFile(My.Application.Info.DirectoryPath & 'settings.ini')

End If

wr = My.Computer.FileSystem.OpenTextFileWriter(My.Application.Info.DirectoryPath & 'settings.ini', False)

wr.WriteLine(srv & '%' & it_db & '%' & refr_time & '%' & ticket_count)

wr.Close()

End Sub

End Class

Public Class Form2

Private Sub Form2_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Visible = True

Form1.Activate()

End Sub

Private Sub Form2_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Form1.Visible = False

End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

FillDGVInc(Form1.srv, Form1.it_db, DataGridView1)

End Sub

Private Sub FillDGVInc(ByVal server As String, ByVal DBN As String, ByRef DGV As DataGridView)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog=' & DBN & ';Integrated Security=True'

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim c_row, c_col As Integer

Dim cmd As String = 'SELECT [id_incident],[name_incident] FROM [incident]'

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

Try

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

c_col = DataSet2.Tables.Item(0).Columns.Count

If c_row > 0 Then

DGV.RowCount = c_row

DGV.ColumnCount = c_col

DGV.Columns.Item(0).HeaderText = 'Номер'

DGV.Columns.Item(1).HeaderText = 'Инцидент'

For i = 1 To c_row

For j = 1 To c_col

DGV.Item(j - 1, i - 1).Value = DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1).ToString

Next

Next

End If

SqlAdapter2.SelectCommand.Connection.Close()

Catch ex As Exception

MsgBox('Ошибка: ' & ex.Message, MsgBoxStyle.Information, 'Сообщение')

Me.Close()

End Try

End Sub

Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Click

TextBox1.BackColor = Color.White

TextBox1.Text = ''

TextBox1.ForeColor = Color.Black

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If TextBox1.Text = '' Then

TextBox1.BackColor = Color.Red

TextBox1.Text = 'Введите инцидент'

TextBox1.ForeColor = Color.White

Else

AddIncident(TextBox1.Text)

FillDGVInc(Form1.srv, Form1.it_db, DataGridView1)

MsgBox('Инцидент добавлен', MsgBoxStyle.Information, 'Сообщение')

TextBox1.Text = ''

End If

End Sub

Private Sub AddIncident(ByVal incident As String)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

Dim cmd As String = _

'INSERT' & vbCrLf & _

'INTO incident(name_incident)' & vbCrLf & _

'VALUES ('' & incident & '')'

SqlCommand1.CommandText = cmd

SqlAdapter1.InsertCommand = SqlCommand1

SqlAdapter1.InsertCommand.Connection = SqlConnection1

Try

SqlAdapter1.InsertCommand.Connection.Open()

SqlAdapter1.InsertCommand.ExecuteNonQuery()

SqlAdapter1.InsertCommand.Connection.Close()

Catch ex As Exception

MsgBox('Ошибка: ' & ex.Message, MsgBoxStyle.Information, 'Сообщение')

End Try

End Sub

End Class

Public Class Form3

Private Sub Form3_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Visible = True

Form1.Activate()

End Sub

Private Sub Form3_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Form1.Visible = False

End Sub

Private Sub TextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Click

TextBox1.BackColor = Color.White

TextBox1.Text = ''

TextBox1.ForeColor = Color.Black

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If TextBox1.Text = '' Or TextBox2.Text = '' Then

If TextBox1.Text = '' Then

TextBox1.BackColor = Color.Red

TextBox1.Text = 'Введите исполнителя'

TextBox1.ForeColor = Color.White

End If

If TextBox2.Text = '' Then

TextBox2.BackColor = Color.Red

TextBox2.Text = 'Введите логин'

TextBox2.ForeColor = Color.White

End If

Else

AddIspoln(TextBox1.Text, TextBox2.Text)

FillDGVIsp(Form1.srv, Form1.it_db, DataGridView1)

MsgBox('Исполнитель добавлен', MsgBoxStyle.Information, 'Сообщение')

TextBox1.Text = ''

TextBox2.Text = ''

End If

End Sub

Private Sub AddIspoln(ByVal ispoln As String, ByVal isp_l As String)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

Dim cmd As String = _

'INSERT' & vbCrLf & _

'INTO admins(admin, login)' & vbCrLf & _

'VALUES ('' & ispoln & '','' & isp_l & '')'

SqlCommand1.CommandText = cmd

SqlAdapter1.InsertCommand = SqlCommand1

SqlAdapter1.InsertCommand.Connection = SqlConnection1

SqlAdapter1.InsertCommand.Connection.Open()

SqlAdapter1.InsertCommand.ExecuteNonQuery()

SqlAdapter1.InsertCommand.Connection.Close()

End Sub

Private Sub FillDGVIsp(ByVal server As String, ByVal DBN As String, ByRef DGV As DataGridView)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim con_string As String = 'Data Source=' & server & ';Initial Catalog=' & DBN & ';Integrated Security=True'

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim c_row, c_col As Integer

Dim cmd As String = 'SELECT [id_users],[admin],[login] FROM [admins]'

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

Try

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c_row = DataSet2.Tables.Item(0).Rows.Count

c_col = DataSet2.Tables.Item(0).Columns.Count

If c_row > 0 Then

DGV.RowCount = c_row

DGV.ColumnCount = c_col

DGV.Columns.Item(0).HeaderText = 'Номер'

DGV.Columns.Item(1).HeaderText = 'Исполнитель'

DGV.Columns.Item(2).HeaderText = 'Логин'

For i = 1 To c_row

For j = 1 To c_col

DGV.Item(j - 1, i - 1).Value = DataSet2.Tables.Item(0).Rows.Item(i - 1).Item(j - 1).ToString

Next

Next

End If

SqlAdapter2.SelectCommand.Connection.Close()

Catch ex As Exception

MsgBox('Ошибка: ' & ex.Message, MsgBoxStyle.Information, 'Сообщение')

Me.Close()

End Try

End Sub

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

FillDGVIsp(Form1.srv, Form1.it_db, DataGridView1)

End Sub

Private Sub TextBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.Click

TextBox2.BackColor = Color.White

TextBox2.Text = ''

TextBox2.ForeColor = Color.Black

End Sub

End Class

Imports Microsoft.Office.Interop

Public Class Form4

Private Sub Form4_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Visible = True

Form1.Activate()

End Sub

Private Sub Form4_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Form1.Visible = False

End Sub

Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

End Sub

Private Function MinDate() As Date

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'select open_ticket from ticket where id_ticket = (select MIN(id_ticket) from ticket)'

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

MinDate = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

If RadioButton1.Checked Then

RadioButton1.ForeColor = Color.Black

DateTimePicker1.Enabled = False

DateTimePicker2.Enabled = False

Label1.ForeColor = Color.DarkGray

Label2.ForeColor = Color.DarkGray

Label3.ForeColor = Color.DarkGray

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton1.ForeColor = Color.DarkGray

End If

End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

If RadioButton2.Checked Then

RadioButton2.ForeColor = Color.Black

DateTimePicker1.Enabled = True

DateTimePicker2.Enabled = True

Label1.ForeColor = Color.Black

Label2.ForeColor = Color.Black

Label3.ForeColor = Color.Black

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton2.ForeColor = Color.DarkGray

End If

End Sub

Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged

If RadioButton3.Checked Then

RadioButton3.ForeColor = Color.Black

DateTimePicker1.Enabled = True

DateTimePicker2.Enabled = True

Label1.ForeColor = Color.Black

Label2.ForeColor = Color.Black

Label3.ForeColor = Color.Black

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton3.ForeColor = Color.DarkGray

End If

End Sub

Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged

If RadioButton4.Checked Then

RadioButton4.ForeColor = Color.Black

DateTimePicker1.Enabled = True

DateTimePicker2.Enabled = True

Label1.ForeColor = Color.Black

Label2.ForeColor = Color.Black

Label3.ForeColor = Color.Black

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton4.ForeColor = Color.DarkGray

End If

End Sub

Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton5.CheckedChanged

If RadioButton5.Checked Then

RadioButton5.ForeColor = Color.Black

DateTimePicker1.Enabled = True

DateTimePicker2.Enabled = True

Label1.ForeColor = Color.Black

Label2.ForeColor = Color.Black

Label3.ForeColor = Color.Black

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton5.ForeColor = Color.DarkGray

End If

End Sub

Private Sub RadioButton6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton6.CheckedChanged

If RadioButton6.Checked Then

RadioButton6.ForeColor = Color.Black

DateTimePicker1.Enabled = True

DateTimePicker2.Enabled = True

Label1.ForeColor = Color.Black

Label2.ForeColor = Color.Black

Label3.ForeColor = Color.Black

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton6.ForeColor = Color.DarkGray

End If

End Sub

Private Sub RadioButton7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton7.CheckedChanged

If RadioButton7.Checked Then

RadioButton7.ForeColor = Color.Black

DateTimePicker1.Enabled = True

DateTimePicker2.Enabled = True

Label1.ForeColor = Color.Black

Label2.ForeColor = Color.Black

Label3.ForeColor = Color.Black

Dim d As Date = MinDate()

DateTimePicker1.Value = d

DateTimePicker1.MinDate = d

DateTimePicker2.MinDate = d

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

Else

RadioButton7.ForeColor = Color.DarkGray

End If

End Sub

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

If RadioButton1.Checked Then

Otchet_Nevyp()

End If

If RadioButton2.Checked Then

Otchet_Vyp()

End If

If RadioButton3.Checked Then

Otchet_PoIsp()

End If

If RadioButton4.Checked Then

Otchet_Otkl()

End If

If RadioButton5.Checked Then

Otchet_ProblUsers()

End If

If RadioButton6.Checked Then

Otchet_ProblPC()

End If

If RadioButton7.Checked Then

Otchet_Dynamic()

End If

End Sub

Private Sub Otchet_Nevyp()

Dim StartDate As String = Form6.GetDateString(DateTimePicker1.Value)

Dim EndDate As String = Form6.GetDateString(DateTimePicker2.Value)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

SqlCommand1.CommandText = 'select [id_ticket],[fio],[id_incident] from [ticket]' & vbCrLf & _

'where [id_status] < 5 and [otklon] = 0 ' & vbCrLf & _

'and [open_ticket] >= convert(datetime,'' & StartDate & '',12) and [open_ticket] <= convert(datetime,'' & EndDate & '',12)'

SqlAdapter1.SelectCommand = SqlCommand1

SqlAdapter1.SelectCommand.Connection = SqlConnection1

Dim c_row, c_col As Integer

Dim id_ticket, fio, incident, comment As String

Try

Dim oWord As Word.Application

Dim oDoc As Word.Document

Dim oTable As Word.Table

Dim oPara1, oPara2, oPara3, oPara4 As Word.Paragraph

oWord = CreateObject('Word.Application')

oWord.Visible = True

oDoc = oWord.Documents.Add

oPara1 = oDoc.Content.Paragraphs.Add

oPara1.Range.Text = 'Отчет о невыполненных заявках - ' & DateAndTime.Now.ToString

oPara1.Range.Font.Size = 13

oPara1.Range.Font.Bold = True

oPara1.Range.InsertParagraphAfter()

SqlAdapter1.SelectCommand.Connection.Open()

SqlAdapter1.Fill(DataSet1)

c_row = DataSet1.Tables.Item(0).Rows.Count

c_col = DataSet1.Tables.Item(0).Columns.Count

oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item('endofdoc').Range, c_row + 1, 4)

oTable.Range.ParagraphFormat.SpaceAfter = 6

oTable.Range.Font.Size = 11

oTable.Range.Font.Bold = False

oTable.Rows.Borders.Enable = True

oTable.Columns.Borders.Enable = True

oTable.Columns(1).SetWidth(43, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(2).SetWidth(80, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(3).SetWidth(170, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(4).SetWidth(179, Word.WdRulerStyle.wdAdjustNone)

oTable.Rows.Item(1).Range.Font.Bold = True

oTable.Rows.Item(1).Shading.BackgroundPatternColor = Word.WdColor.wdColorGray15

oTable.Cell(1, 1).Range.Text = 'Номер'

oTable.Cell(1, 2).Range.Text = 'Пользователь'

oTable.Cell(1, 3).Range.Text = 'Инцидент'

oTable.Cell(1, 4).Range.Text = 'Текст заявки'

For i = 1 To c_row

id_ticket = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(0)

fio = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(1)

incident = GetIncident(DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(2))

comment = GetComment(id_ticket)

oTable.Cell(i + 1, 1).Range.Text = CStr(id_ticket)

oTable.Cell(i + 1, 2).Range.Text = CStr(fio)

oTable.Cell(i + 1, 3).Range.Text = CStr(incident)

oTable.Cell(i + 1, 4).Range.Text = Replace(CStr(comment), '----Пользователь----' & vbCrLf, '')

Next

SqlAdapter1.SelectCommand.Connection.Close()

oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'select COUNT(*) from ticket where [id_status] < 5 and [otklon] = 0'

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

Dim nz As String = DataSet2.Tables.Item(0).Rows.Item(0).Item(0).ToString

SqlAdapter2.SelectCommand.Connection.Close()

oPara2.Range.ParagraphFormat.SpaceBefore = 0

oPara2.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara2.Range.ParagraphFormat.SpaceAfter = 0

oPara2.Range.ParagraphFormat.SpaceAfterAuto = False

oPara2.Range.Text = 'Всего заявок - ' & vbTab & vbTab & vbTab & nz

oPara2.Range.Font.Size = 11

oPara2.Range.Font.Bold = True

oPara2.Range.InsertParagraphAfter()

oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter3 As New SqlClient.SqlDataAdapter

Dim DataSet3 As New DataSet

Dim SqlConnection3 As New SqlClient.SqlConnection

cmd = 'select distinct [id_incident] from [ticket] where [id_status] < 5 and [otklon] = 0'

SqlConnection3.ConnectionString = con_string

Dim SqlCommand3 As New SqlClient.SqlCommand

SqlCommand3.CommandText = cmd

SqlAdapter3.SelectCommand = SqlCommand3

SqlAdapter3.SelectCommand.Connection = SqlConnection3

SqlAdapter3.SelectCommand.Connection.Open()

SqlAdapter3.Fill(DataSet3)

Dim ninc As String = DataSet3.Tables.Item(0).Rows.Count.ToString

SqlAdapter3.SelectCommand.Connection.Close()

oPara3.Range.ParagraphFormat.SpaceBefore = 0

oPara3.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara3.Range.ParagraphFormat.SpaceAfter = 0

oPara3.Range.ParagraphFormat.SpaceAfterAuto = False

oPara3.Range.Text = 'Всего типов инцидентов - ' & vbTab & ninc

oPara3.Range.Font.Size = 11

oPara3.Range.Font.Bold = True

oPara3.Range.InsertParagraphAfter()

oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter4 As New SqlClient.SqlDataAdapter

Dim DataSet4 As New DataSet

Dim SqlConnection4 As New SqlClient.SqlConnection

cmd = 'select distinct convert(char(11),[fio]) from [ticket] where [id_status] < 5 and [otklon] = 0'

SqlConnection4.ConnectionString = con_string

Dim SqlCommand4 As New SqlClient.SqlCommand

SqlCommand4.CommandText = cmd

SqlAdapter4.SelectCommand = SqlCommand4

SqlAdapter4.SelectCommand.Connection = SqlConnection4

SqlAdapter4.SelectCommand.Connection.Open()

SqlAdapter4.Fill(DataSet4)

Dim nfio As String = DataSet4.Tables.Item(0).Rows.Count.ToString

SqlAdapter4.SelectCommand.Connection.Close()

oPara4.Range.ParagraphFormat.SpaceBefore = 0

oPara4.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara4.Range.ParagraphFormat.SpaceAfter = 0

oPara4.Range.ParagraphFormat.SpaceAfterAuto = False

oPara4.Range.Text = 'Всего пользователей - ' & vbTab & nfio

oPara4.Range.Font.Size = 11

oPara4.Range.Font.Bold = True

oPara4.Range.InsertParagraphAfter()

Catch ex As Exception

End Try

End Sub

Private Sub Otchet_Vyp()

Dim StartDate As String = Form6.GetDateString(DateTimePicker1.Value)

Dim EndDate As String = Form6.GetDateString(DateTimePicker2.Value)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

SqlCommand1.CommandText = 'select [id_ticket],[fio],[id_incident] from [ticket]' & vbCrLf & _

'where [id_status] = 5 and [otklon] = 0 ' & vbCrLf & _

'and [open_ticket] >= convert(datetime,'' & StartDate & '',12) and [open_ticket] <= convert(datetime,'' & EndDate & '',12)'

SqlAdapter1.SelectCommand = SqlCommand1

SqlAdapter1.SelectCommand.Connection = SqlConnection1

Dim c_row, c_col As Integer

Dim id_ticket, fio, incident, comment As String

Try

Dim oWord As Word.Application

Dim oDoc As Word.Document

Dim oTable As Word.Table

Dim oPara0, oPara1, oPara2, oPara3, oPara4 As Word.Paragraph

oWord = CreateObject('Word.Application')

oWord.Visible = True

oDoc = oWord.Documents.Add

oPara0 = oDoc.Content.Paragraphs.Add

oPara0.Range.Text = 'Отчет о выполненных заявках - ' & DateAndTime.Now.ToString

oPara0.Range.Font.Size = 13

oPara0.Range.Font.Bold = True

oPara0.Range.ParagraphFormat.SpaceBefore = 0

oPara0.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara0.Range.ParagraphFormat.SpaceAfter = 0

oPara0.Range.ParagraphFormat.SpaceAfterAuto = False

oPara0.Range.InsertParagraphAfter()

oPara1 = oDoc.Content.Paragraphs.Add

oPara1.Range.Text = 'За период - с ' & DateTimePicker1.Value.ToString & _

' по ' & DateTimePicker2.Value.ToString

oPara1.Range.Font.Size = 12

oPara1.Range.Font.Bold = False

oPara1.Range.ParagraphFormat.SpaceBefore = 0

oPara1.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara1.Range.ParagraphFormat.SpaceAfter = 20

oPara1.Range.ParagraphFormat.SpaceAfterAuto = False

oPara1.Range.InsertParagraphAfter()

SqlAdapter1.SelectCommand.Connection.Open()

SqlAdapter1.Fill(DataSet1)

c_row = DataSet1.Tables.Item(0).Rows.Count

c_col = DataSet1.Tables.Item(0).Columns.Count

oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item('endofdoc').Range, c_row + 1, 3)

oTable.Range.Font.Size = 11

oTable.Range.Font.Bold = False

oTable.Rows.Borders.Enable = True

oTable.Columns.Borders.Enable = True

oTable.Columns(1).SetWidth(43, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(2).SetWidth(80, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(3).SetWidth(349, Word.WdRulerStyle.wdAdjustNone)

oTable.Rows.Item(1).Range.Font.Bold = True

oTable.Rows.Item(1).Shading.BackgroundPatternColor = Word.WdColor.wdColorGray15

oTable.Cell(1, 1).Range.Text = 'Номер'

oTable.Cell(1, 2).Range.Text = 'Пользователь'

oTable.Cell(1, 3).Range.Text = 'Инцидент'

For i = 1 To c_row

id_ticket = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(0)

fio = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(1)

incident = GetIncident(DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(2))

comment = GetComment(id_ticket)

oTable.Cell(i + 1, 1).Range.Text = CStr(id_ticket)

oTable.Cell(i + 1, 2).Range.Text = CStr(fio)

oTable.Cell(i + 1, 3).Range.Text = CStr(incident)

Next

SqlAdapter1.SelectCommand.Connection.Close()

oTable.Range.ParagraphFormat.SpaceBefore = 0

oTable.Range.ParagraphFormat.SpaceBeforeAuto = False

oTable.Range.ParagraphFormat.SpaceAfter = 0

oTable.Range.ParagraphFormat.SpaceAfterAuto = False

oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

oPara2.Range.ParagraphFormat.SpaceBefore = 0

oPara2.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara2.Range.ParagraphFormat.SpaceAfter = 0

oPara2.Range.ParagraphFormat.SpaceAfterAuto = False

oPara2.Range.Text = 'Всего заявок - ' & vbTab & vbTab & vbTab & c_row.ToString

oPara2.Range.Font.Size = 11

oPara2.Range.Font.Bold = True

oPara2.Range.InsertParagraphAfter()

oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter3 As New SqlClient.SqlDataAdapter

Dim DataSet3 As New DataSet

Dim SqlConnection3 As New SqlClient.SqlConnection

Dim cmd As String = 'select distinct [id_incident] from [ticket] where [id_status] = 5 and [otklon] = 0 ' & _

'and [open_ticket] >= convert(datetime,'' & StartDate & '',12) and [open_ticket] <= convert(datetime,'' & EndDate & '',12)'

SqlConnection3.ConnectionString = con_string

Dim SqlCommand3 As New SqlClient.SqlCommand

SqlCommand3.CommandText = cmd

SqlAdapter3.SelectCommand = SqlCommand3

SqlAdapter3.SelectCommand.Connection = SqlConnection3

SqlAdapter3.SelectCommand.Connection.Open()

SqlAdapter3.Fill(DataSet3)

Dim ninc As String = DataSet3.Tables.Item(0).Rows.Count.ToString

SqlAdapter3.SelectCommand.Connection.Close()

oPara3.Range.ParagraphFormat.SpaceBefore = 0

oPara3.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara3.Range.ParagraphFormat.SpaceAfter = 0

oPara3.Range.ParagraphFormat.SpaceAfterAuto = False

oPara3.Range.Text = 'Всего типов инцидентов - ' & vbTab & ninc

oPara3.Range.Font.Size = 11

oPara3.Range.Font.Bold = True

oPara3.Range.InsertParagraphAfter()

oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter4 As New SqlClient.SqlDataAdapter

Dim DataSet4 As New DataSet

Dim SqlConnection4 As New SqlClient.SqlConnection

cmd = 'select distinct convert(char(11),[fio]) from [ticket] where [id_status] = 5 and [otklon] = 0 ' & _

'and [open_ticket] >= convert(datetime,'' & StartDate & '',12) and [open_ticket] <= convert(datetime,'' & EndDate & '',12)'

SqlConnection4.ConnectionString = con_string

Dim SqlCommand4 As New SqlClient.SqlCommand

SqlCommand4.CommandText = cmd

SqlAdapter4.SelectCommand = SqlCommand4

SqlAdapter4.SelectCommand.Connection = SqlConnection4

SqlAdapter4.SelectCommand.Connection.Open()

SqlAdapter4.Fill(DataSet4)

Dim nfio As String = DataSet4.Tables.Item(0).Rows.Count.ToString

SqlAdapter4.SelectCommand.Connection.Close()

oPara4.Range.ParagraphFormat.SpaceBefore = 0

oPara4.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara4.Range.ParagraphFormat.SpaceAfter = 0

oPara4.Range.ParagraphFormat.SpaceAfterAuto = False

oPara4.Range.Text = 'Всего пользователей - ' & vbTab & nfio

oPara4.Range.Font.Size = 11

oPara4.Range.Font.Bold = True

oPara4.Range.InsertParagraphAfter()

Catch ex As Exception

End Try

End Sub

Private Sub Otchet_PoIsp()

Dim StartDate As String = Form6.GetDateString(DateTimePicker1.Value)

Dim EndDate As String = Form6.GetDateString(DateTimePicker2.Value)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

SqlCommand1.CommandText = 'select distinct [id_users] from [ticket]' & vbCrLf & _

'where [otklon] = 0 ' & vbCrLf & _

'and [open_ticket] >= convert(datetime,'' & _

StartDate & '',12) and [open_ticket] <= convert(datetime,'' & _

EndDate & '',12)'

SqlAdapter1.SelectCommand = SqlCommand1

SqlAdapter1.SelectCommand.Connection = SqlConnection1

Dim c_row, c1_row As Integer

Dim id_ticket, fio, incident As String

Try

Dim oWord As Word.Application

Dim oDoc As Word.Document

Dim oPara0, oPara1 As Word.Paragraph

oWord = CreateObject('Word.Application')

oWord.Visible = True

oDoc = oWord.Documents.Add

oPara0 = oDoc.Content.Paragraphs.Add

oPara0.Range.Text = 'Отчет о заявках по исполнителям - ' & DateAndTime.Now.ToString

oPara0.Range.Font.Size = 13

oPara0.Range.Font.Bold = True

oPara0.Range.ParagraphFormat.SpaceBefore = 0

oPara0.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara0.Range.ParagraphFormat.SpaceAfter = 0

oPara0.Range.ParagraphFormat.SpaceAfterAuto = False

oPara0.Range.InsertParagraphAfter()

oPara1 = oDoc.Content.Paragraphs.Add

oPara1.Range.Text = 'За период - с ' & DateTimePicker1.Value.ToString & _

' по ' & DateTimePicker2.Value.ToString

oPara1.Range.Font.Size = 12

oPara1.Range.Font.Bold = False

oPara1.Range.ParagraphFormat.SpaceBefore = 0

oPara1.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara1.Range.ParagraphFormat.SpaceAfter = 20

oPara1.Range.ParagraphFormat.SpaceAfterAuto = False

oPara1.Range.InsertParagraphAfter()

SqlAdapter1.SelectCommand.Connection.Open()

SqlAdapter1.Fill(DataSet1)

c_row = DataSet1.Tables.Item(0).Rows.Count

Dim id_user As Integer

Dim n_user As String

For i = 1 To c_row

id_user = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(0)

n_user = GetAdmin(id_user)

oPara1.Range.Font.Bold = True

oPara1.Range.ParagraphFormat.SpaceAfter = 10

oPara1.Range.InsertAfter(n_user & vbCrLf)

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'select [id_ticket],[fio],[id_incident] from [ticket] where [otklon] = 0 ' & _

'and [open_ticket] >= convert(datetime,'' & _

StartDate & '',12) and [open_ticket] <= convert(datetime,'' & _

EndDate & '',12) and [id_users] = ' & id_user.ToString

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

c1_row = DataSet2.Tables.Item(0).Rows.Count

For j = 1 To c1_row

oPara1.Range.Font.Bold = False

oPara1.Range.ParagraphFormat.SpaceAfter = 0

id_ticket = DataSet2.Tables.Item(0).Rows.Item(j - 1).Item(0)

fio = DataSet2.Tables.Item(0).Rows.Item(j - 1).Item(1)

incident = GetIncident(DataSet2.Tables.Item(0).Rows.Item(j - 1).Item(2))

oPara1.Range.InsertAfter(id_ticket & vbTab & fio & vbTab & incident & vbCrLf)

Next

Next

Catch ex As Exception

End Try

End Sub

Private Sub Otchet_Otkl()

Dim StartDate As String = Form6.GetDateString(DateTimePicker1.Value)

Dim EndDate As String = Form6.GetDateString(DateTimePicker2.Value)

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter1 As New SqlClient.SqlDataAdapter

Dim DataSet1 As New DataSet

Dim SqlConnection1 As New SqlClient.SqlConnection

SqlConnection1.ConnectionString = con_string

Dim SqlCommand1 As New SqlClient.SqlCommand

SqlCommand1.CommandText = 'select [id_ticket],[fio],[id_incident] from [ticket]' & vbCrLf & _

'where [otklon] = 1 ' & vbCrLf & _

'and [open_ticket] >= convert(datetime,'' & _

StartDate & '',12) and [open_ticket] <= convert(datetime,'' & _

EndDate & '',12)'

SqlAdapter1.SelectCommand = SqlCommand1

SqlAdapter1.SelectCommand.Connection = SqlConnection1

Dim c_row, c_col As Integer

Dim id_ticket, fio, incident, comment As String

Try

Dim oWord As Word.Application

Dim oDoc As Word.Document

Dim oTable As Word.Table

Dim oPara0, oPara1, oPara2, oPara3, oPara4 As Word.Paragraph

oWord = CreateObject('Word.Application')

oWord.Visible = True

oDoc = oWord.Documents.Add

oPara0 = oDoc.Content.Paragraphs.Add

oPara0.Range.Text = 'Отчет об отклоненных заявках - ' & DateAndTime.Now.ToString

oPara0.Range.Font.Size = 13

oPara0.Range.Font.Bold = True

oPara0.Range.ParagraphFormat.SpaceBefore = 0

oPara0.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara0.Range.ParagraphFormat.SpaceAfter = 0

oPara0.Range.ParagraphFormat.SpaceAfterAuto = False

oPara0.Range.InsertParagraphAfter()

oPara1 = oDoc.Content.Paragraphs.Add

oPara1.Range.Text = 'За период - с ' & DateTimePicker1.Value.ToString & _

' по ' & DateTimePicker2.Value.ToString

oPara1.Range.Font.Size = 12

oPara1.Range.Font.Bold = False

oPara1.Range.ParagraphFormat.SpaceBefore = 0

oPara1.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara1.Range.ParagraphFormat.SpaceAfter = 20

oPara1.Range.ParagraphFormat.SpaceAfterAuto = False

oPara1.Range.InsertParagraphAfter()

SqlAdapter1.SelectCommand.Connection.Open()

SqlAdapter1.Fill(DataSet1)

c_row = DataSet1.Tables.Item(0).Rows.Count

c_col = DataSet1.Tables.Item(0).Columns.Count

oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item('endofdoc').Range, c_row + 1, 4)

oTable.Range.ParagraphFormat.SpaceAfter = 6

oTable.Range.Font.Size = 11

oTable.Range.Font.Bold = False

oTable.Rows.Borders.Enable = True

oTable.Columns.Borders.Enable = True

oTable.Columns(1).SetWidth(43, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(2).SetWidth(80, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(3).SetWidth(170, Word.WdRulerStyle.wdAdjustNone)

oTable.Columns(4).SetWidth(179, Word.WdRulerStyle.wdAdjustNone)

oTable.Rows.Item(1).Range.Font.Bold = True

oTable.Rows.Item(1).Shading.BackgroundPatternColor = Word.WdColor.wdColorGray15

oTable.Cell(1, 1).Range.Text = 'Номер'

oTable.Cell(1, 2).Range.Text = 'Пользователь'

oTable.Cell(1, 3).Range.Text = 'Инцидент'

oTable.Cell(1, 4).Range.Text = 'Текст заявки'

For i = 1 To c_row

id_ticket = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(0)

fio = DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(1)

incident = GetIncident(DataSet1.Tables.Item(0).Rows.Item(i - 1).Item(2))

comment = GetComment(id_ticket)

oTable.Cell(i + 1, 1).Range.Text = CStr(id_ticket)

oTable.Cell(i + 1, 2).Range.Text = CStr(fio)

oTable.Cell(i + 1, 3).Range.Text = CStr(incident)

oTable.Cell(i + 1, 4).Range.Text = Replace(CStr(comment), '----Пользователь----' & vbCrLf, '')

Next

oPara2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

oPara2.Range.ParagraphFormat.SpaceBefore = 0

oPara2.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara2.Range.ParagraphFormat.SpaceAfter = 0

oPara2.Range.ParagraphFormat.SpaceAfterAuto = False

oPara2.Range.Text = 'Всего заявок - ' & vbTab & vbTab & vbTab & c_row

oPara2.Range.Font.Size = 11

oPara2.Range.Font.Bold = True

oPara2.Range.InsertParagraphAfter()

oPara3 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter3 As New SqlClient.SqlDataAdapter

Dim DataSet3 As New DataSet

Dim SqlConnection3 As New SqlClient.SqlConnection

Dim cmd As String = 'select distinct [id_incident] from [ticket] where [otklon] = 1 ' & _

'and [open_ticket] >= convert(datetime,'' & _

StartDate & '',12) and [open_ticket] <= convert(datetime,'' & _

EndDate & '',12)'

SqlConnection3.ConnectionString = con_string

Dim SqlCommand3 As New SqlClient.SqlCommand

SqlCommand3.CommandText = cmd

SqlAdapter3.SelectCommand = SqlCommand3

SqlAdapter3.SelectCommand.Connection = SqlConnection3

SqlAdapter3.SelectCommand.Connection.Open()

SqlAdapter3.Fill(DataSet3)

Dim ninc As String = DataSet3.Tables.Item(0).Rows.Count.ToString

SqlAdapter3.SelectCommand.Connection.Close()

oPara3.Range.ParagraphFormat.SpaceBefore = 0

oPara3.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara3.Range.ParagraphFormat.SpaceAfter = 0

oPara3.Range.ParagraphFormat.SpaceAfterAuto = False

oPara3.Range.Text = 'Всего типов инцидентов - ' & vbTab & ninc

oPara3.Range.Font.Size = 11

oPara3.Range.Font.Bold = True

oPara3.Range.InsertParagraphAfter()

oPara4 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item('endofdoc').Range)

Dim SqlAdapter4 As New SqlClient.SqlDataAdapter

Dim DataSet4 As New DataSet

Dim SqlConnection4 As New SqlClient.SqlConnection

cmd = 'select distinct convert(char(11),[fio]) from [ticket] where [otklon] = 1 ' & _

'and [open_ticket] >= convert(datetime,'' & _

StartDate & '',12) and [open_ticket] <= convert(datetime,'' & _

EndDate & '',12)'

SqlConnection4.ConnectionString = con_string

Dim SqlCommand4 As New SqlClient.SqlCommand

SqlCommand4.CommandText = cmd

SqlAdapter4.SelectCommand = SqlCommand4

SqlAdapter4.SelectCommand.Connection = SqlConnection4

SqlAdapter4.SelectCommand.Connection.Open()

SqlAdapter4.Fill(DataSet4)

Dim nfio As String = DataSet4.Tables.Item(0).Rows.Count.ToString

SqlAdapter4.SelectCommand.Connection.Close()

oPara4.Range.ParagraphFormat.SpaceBefore = 0

oPara4.Range.ParagraphFormat.SpaceBeforeAuto = False

oPara4.Range.ParagraphFormat.SpaceAfter = 0

oPara4.Range.ParagraphFormat.SpaceAfterAuto = False

oPara4.Range.Text = 'Всего пользователей - ' & vbTab & nfio

oPara4.Range.Font.Size = 11

oPara4.Range.Font.Bold = True

oPara4.Range.InsertParagraphAfter()

Catch ex As Exception

End Try

End Sub

Private Sub Otchet_ProblUsers()

End Sub

Private Sub Otchet_ProblPC()

End Sub

Private Sub Otchet_Dynamic()

End Sub

Private Function GetIncident(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [name_incident]' & _

'FROM [incident] where id_incident = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetIncident = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetComment(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [comments]' & _

'FROM [comments] where id_ticket = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetComment = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

Private Function GetAdmin(ByVal id As Integer) As String

Dim con_string As String = 'Data Source=' & Form1.srv & ';Initial Catalog=' & Form1.it_db & ';Integrated Security=True'

Dim SqlAdapter2 As New SqlClient.SqlDataAdapter

Dim DataSet2 As New DataSet

Dim SqlConnection2 As New SqlClient.SqlConnection

Dim cmd As String = 'SELECT [admin]' & _

'FROM [admins] where id_users = ' & CStr(id)

SqlConnection2.ConnectionString = con_string

Dim SqlCommand2 As New SqlClient.SqlCommand

SqlCommand2.CommandText = cmd

SqlAdapter2.SelectCommand = SqlCommand2

SqlAdapter2.SelectCommand.Connection = SqlConnection2

SqlAdapter2.SelectCommand.Connection.Open()

SqlAdapter2.Fill(DataSet2)

GetAdmin = DataSet2.Tables.Item(0).Rows.Item(0).Item(0)

SqlAdapter2.SelectCommand.Connection.Close()

End Function

End Class

Imports System.Data.Odbc

Public Class Form5

Private Sub Form5_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Form1.Visible = False

End Sub

Private Sub Form5_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form1.Visible = True

Form1.Activate()

End Sub

Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Label3.Text = 'Действие выполнять' & vbCrLf & 'один раз'

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Form1.srv = TextBox1.Text

Form1.it_db = TextBox2.Text

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

DBCreate()

End Sub

Private Sub DBCreate()

Dim cmd1 As String = _

'CREATE DATABASE [' & TextBox2.Text & '] ON PRIMARY ' & vbCrLf & _

'( NAME = N'' & TextBox2.Text & '', FILENAME = N'C:' & TextBox2.Text & '.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )' & vbCrLf & _

' LOG ON ' & vbCrLf & _

'( NAME = N'' & TextBox2.Text & '_log', FILENAME = N'C:' & TextBox2.Text & '_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)' &

vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

COMPATIBILITY_LEVEL = 100' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET ANSI_NULL_DEFAULT OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET ANSI_NULLS OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET ANSI_PADDING

OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET ANSI_WARNINGS

OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET ARITHABORT OFF

' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET AUTO_CLOSE OFF

' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

AUTO_CREATE_STATISTICS ON ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET AUTO_SHRINK

OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

AUTO_UPDATE_STATISTICS ON ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

CURSOR_CLOSE_ON_COMMIT OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

CURSOR_DEFAULT GLOBAL ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

CONCAT_NULL_YIELDS_NULL OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

NUMERIC_ROUNDABORT OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

QUOTED_IDENTIFIER OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

RECURSIVE_TRIGGERS OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET DISABLE_BROKER

' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

AUTO_UPDATE_STATISTICS_ASYNC OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

DATE_CORRELATION_OPTIMIZATION OFF ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET

PARAMETERIZATION SIMPLE ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET READ_WRITE ' &

vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET RECOVERY

SIMPLE ' & vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET MULTI_USER ' &

vbCrLf & _

'ALTER DATABASE [' & TextBox2.Text & '] SET PAGE_VERIFY

CHECKSUM '

Dim cmd2 As String = _

'USE [' & TextBox2.Text & ']' & vbCrLf & _

'IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [' &

TextBox2.Text & '] MODIFY FILEGROUP [PRIMARY] DEFAULT' &

vbCrLf & _

'USE [' & TextBox2.Text & ']' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'CREATE TABLE [dbo].[status](' & vbCrLf & _

'[id_status] [int] IDENTITY(1,1) NOT NULL,' & vbCrLf & _

'[name_status] [text] NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_status] PRIMARY KEY CLUSTERED ' & vbCrLf & _

'(' & vbCrLf & _

'[id_status] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'CREATE TABLE [dbo].[priority](' & vbCrLf & _

'[id_priority] [int] IDENTITY(1,1) NOT NULL,' & vbCrLf & _

'[name_priority] [text] NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_priority] PRIMARY KEY CLUSTERED ' & vbCrLf & _

'(' & vbCrLf & _

'[id_priority] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'CREATE TABLE [dbo].[incident](' & vbCrLf & _

'[id_incident] [int] IDENTITY(1,1) NOT NULL,' & vbCrLf & _

'[name_incident] [text] NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_incident] PRIMARY KEY CLUSTERED ' & vbCrLf & _

'(' & vbCrLf & _

'[id_incident] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'CREATE TABLE [dbo].[admins](' & vbCrLf & _

'[id_users] [int] IDENTITY(-1,1) NOT NULL,' & vbCrLf & _

'[admin] [text] NOT NULL,' & vbCrLf & _

'[login] [text] NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_admins] PRIMARY KEY CLUSTERED ' & vbCrLf & _

'(' & vbCrLf & _

'[id_users] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'CREATE TABLE [dbo].[ticket](' & vbCrLf & _

'[id_ticket] [int] IDENTITY(1,1) NOT NULL,' & vbCrLf & _

'[fio] [text] NOT NULL,' & vbCrLf & _

'[phone] [text] NOT NULL,' & vbCrLf & _

'[id_incident] [int] NOT NULL,' & vbCrLf & _

'[id_priority] [int] NOT NULL,' & vbCrLf & _

'[id_status] [int] NOT NULL,' & vbCrLf & _

'[id_users] [int] NULL,' & vbCrLf & _

'[open_ticket] [datetime] NOT NULL,' & vbCrLf & _

'[close_ticket] [datetime] NULL,' & vbCrLf & _

'[work_time] [time] NULL,' & vbCrLf & _

'[tabel] [smallint] NOT NULL,' & vbCrLf & _

'[pc_inv] [text] NOT NULL,' & vbCrLf & _

'[room] [text] NOT NULL,' & vbCrLf & _

'[deleted] [bit] NOT NULL,' & vbCrLf & _

'[otklon] [bit] NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_ticket] PRIMARY KEY CLUSTERED ' & vbCrLf

& _

'(' & vbCrLf & _

'[id_ticket] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'CREATE TABLE [dbo].[comments](' & vbCrLf & _

'[id_ticket] [int] NOT NULL,' & vbCrLf & _

'[dt_comments] [datetime] NOT NULL,' & vbCrLf & _

'[comments] [text] NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_comments] PRIMARY KEY CLUSTERED ' & vbCrLf & _

'(' & vbCrLf & _

'[id_ticket] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,

IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]' & vbCrLf & _

'SET ANSI_NULLS ON' & vbCrLf & _

'SET QUOTED_IDENTIFIER ON' & vbCrLf & _

'SET ANSI_PADDING ON' & vbCrLf & _

'CREATE TABLE [dbo].[attach](' & vbCrLf & _

'[id_ticket] [int] NOT NULL,' & vbCrLf & _

'[image] [varbinary](max) NOT NULL,' & vbCrLf & _

' CONSTRAINT [PK_attach] PRIMARY KEY CLUSTERED ' & vbCrLf

& _

'(' & vbCrLf & _

'[id_ticket] ASC' & vbCrLf & _

')WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' & vbCrLf & _

') ON [PRIMARY]' & vbCrLf & _

'SET ANSI_PADDING OFF' & vbCrLf & _

'ALTER TABLE [dbo].[attach] WITH CHECK ADD CONSTRAINT [FK_attach_ticket] FOREIGN KEY([id_ticket])' & vbCrLf & _

'REFERENCES [dbo].[ticket] ([id_ticket])' & vbCrLf & _

'ON UPDATE CASCADE' & vbCrLf & _

'ALTER TABLE [dbo].[attach] CHECK CONSTRAINT [FK_attach_ticket]' & vbCrLf & _

'ALTER TABLE [dbo].[comments] WITH CHECK ADD CONSTRAINT [FK_comments_ticket] FOREIGN KEY([id_ticket])' & vbCrLf & _

'REFERENCES [dbo].[ticket] ([id_ticket])' & vbCrLf & _

'ON UPDATE CASCADE' & vbCrLf & _

'ALTER TABLE [dbo].[comments] CHECK CONSTRAINT [FK_comments_ticket]' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] WITH CHECK ADD CONSTRAINT [FK_ticket_admins] FOREIGN KEY([id_users])' & vbCrLf & _

'REFERENCES [dbo].[admins] ([id_users])' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] CHECK CONSTRAINT [FK_ticket_admins]' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] WITH CHECK ADD CONSTRAINT [FK_ticket_incident] FOREIGN KEY([id_incident])' & vbCrLf & _

'REFERENCES [dbo].[incident] ([id_incident])' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] CHECK CONSTRAINT [FK_ticket_incident]' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] WITH CHECK ADD CONSTRAINT [FK_ticket_priority] FOREIGN KEY([id_priority])' & vbCrLf & _

'REFERENCES [dbo].[priority] ([id_priority])' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] CHECK CONSTRAINT [FK_ticket_priority]' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] WITH CHECK ADD CONSTRAINT [FK_ticket_status] FOREIGN KEY([id_status])' & vbCrLf & _

'REFERENCES [dbo].[status] ([id_status])' & vbCrLf & _

'ALTER TABLE [dbo].[ticket] CHECK CONSTRAINT [FK_ticket_status]'

Dim cmd3 As String = _

'USE [' & TextBox2.Text & ']' & vbCrLf & _

'INSERT' & vbCrLf & _

'INTO admins(admin,login)' & vbCrLf & _

'VALUES ('Не назначен','Нет')' & vbCrLf & _

'INSERT' & vbCrLf & _

'INTO incident(name_incident)' & vbCrLf & _

'VALUES ('Другое'),('Не открывается файл'),('Отсутствуют сетевые диски'),('Перемещение техники'),' & vbCrLf & _

'('Проблема с интернетом'),('Проблема с компьютером'),('Проблема с сетью'),('Проблема с электронной почтой'),' & vbCrLf & _

'('Проблема с принтером'),('Создание нового рабочего места'),('Телефония')' & vbCrLf & _

'INSERT' & vbCrLf & _

'INTO priority(name_priority)' & vbCrLf & _

'VALUES ('Низкий'),('Нормальный'),('Высокий')' & vbCrLf & _

'INSERT' & vbCrLf & _

'INTO status(name_status)' & vbCrLf & _

'VALUES ('Открыта'),('Назначена'),('В работе'),('Отложена'),('Закрыта')'

Dim conn_string As String = 'Driver={SQL Server};Server=' & TextBox1.Text & ';Trusted_Connection=Yes;Database=master;'

If Not Form1.TestConnect(TextBox1.Text, TextBox2.Text) Then

ExQuery(conn_string, cmd1)

conn_string = 'Driver={SQL Server};Server=' & TextBox1.Text & ';Trusted_Connection=Yes;Database=' & TextBox2.Text & ';'

ExQuery(conn_string, cmd2)

ExQuery(conn_string, cmd3)

MsgBox('База ' & Chr(34) & TextBox2.Text & Chr(34) & ' создана на сервере ' & _

Chr(34) & TextBox1.Text & Chr(34) & '.', _

MsgBoxStyle.Information, 'Сообщение')

Else

MsgBox('База ' & Chr(34) & TextBox2.Text & Chr(34) & ' не создана на сервере ' & _

Chr(34) & TextBox1.Text & Chr(34) & ', т.к. существует база с таким же именем.', _

MsgBoxStyle.Information, 'Сообщение')

End If

End Sub

Function ExQuery(ByVal connectionString As String, ByVal cmd As String) As Integer

Dim command As New OdbcCommand(cmd)

Using connection As New OdbcConnection(connectionString)

command.Connection = connection

Try

connection.Open()

ExQuery = command.ExecuteNonQuery()

Catch ex As Exception

MsgBox('Ошибка: ' & ex.Message, MsgBoxStyle.Information, 'Сообщение')

End Try

End Using

End Function

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Form6.Visible = True

Form6.Activate()

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Form7.Visible = True

Form7.Activate()

End Sub

End Class

Public Class Form6

Private Sub Form6_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Form5.Visible = False

End Sub

Private Sub Form6_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form5.Visible = True

Form5.Activate()

End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

If CheckBox1.Checked Then

DateTimePicker1.Enabled = True

Else

DateTimePicker1.Enabled = False

End If

End Sub

Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged

If CheckBox2.Checked Then

DateTimePicker2.Enabled = True

Else

DateTimePicker2.Enabled = False

End If

End Sub

Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

DateTimePicker1.MaxDate = Date.Today

DateTimePicker2.MaxDate = Date.Today

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim StartDate, EndDate As String

If CheckBox1.Checked Then

StartDate = GetDateString(DateTimePicker1.Value.Date)

Else

StartDate = '20120101 00:00:00'

End If

If CheckBox2.Checked Then

EndDate = GetDateString(DateTimePicker2.Value.Date)

Else

EndDate = '21001231 00:00:00'

End If

If Not DateTimePicker1.Value.Date = DateTimePicker2.Value.Date Then

Dim cmd As String = ''

Dim cmd1 As String = _

'declare @mint int, @maxt int' & vbCrLf & _

'SELECT @mint=MIN(id_ticket)' & vbCrLf & _

'FROM [ticket] where [open_ticket] > convert(datetime,'' & StartDate & '',12) and [open_ticket] < convert(datetime,'' & EndDate & '',12)' & vbCrLf & _

'select @maxt=MAX(id_ticket)' & vbCrLf & _

'FROM [ticket] where [open_ticket] > convert(datetime,'' & StartDate & '',12) and [open_ticket] < convert(datetime,'' & EndDate & '',12)' & vbCrLf

Dim cmd2 As String = _

'UPDATE ticket' & vbCrLf & _

'SET deleted = 1 where ([id_ticket] >= @mint) and ([id_ticket] <= @maxt) and ([deleted] = 0)'

Dim cmd3 As String = _

'delete from [comments] where ([id_ticket] >= @mint) and ([id_ticket] <= @maxt)' & vbCrLf & _

'delete from [attach] where ([id_ticket] >= @mint) and ([id_ticket] <= @maxt)' & vbCrLf & _

'delete from [ticket] where ([id_ticket] >= @mint) and ([id_ticket] <= @maxt)'

Dim conn_string As String = 'Driver={SQL Server};Server=' & Form1.srv & ';Trusted_Connection=Yes;Database=' & Form1.it_db & ';'

If CheckBox3.Checked Then

cmd = cmd1 & cmd3

Else

cmd = cmd1 & cmd2

End If

Dim delt As Integer = Form5.ExQuery(conn_string, cmd)

If delt > 0 Then

If CheckBox3.Checked Then

MsgBox('Удалено записей - ' & CStr(delt / 3), MsgBoxStyle.Information, 'Сообщение')

Else

MsgBox('Удалено записей - ' & CStr(delt), MsgBoxStyle.Information, 'Сообщение')

End If

Else

MsgBox('Нет данных для удаления', MsgBoxStyle.Information, 'Сообщение')

End If

Else

MsgBox('Нулевой интервал. Измените дату', MsgBoxStyle.Information, 'Сообщение')

End If

End Sub

Function GetDateString(ByVal dt As DateTime) As String

Dim sd, sm, sy, sh, sn, ss As String

Dim dn As Date = dt

If DateAndTime.Hour(dn) < 10 Then

sh = '0' + DateAndTime.Hour(dn).ToString

Else

sh = DateAndTime.Hour(dn).ToString

End If

If DateAndTime.Minute(dn) < 10 Then

sn = '0' + DateAndTime.Minute(dn).ToString

Else

sn = DateAndTime.Minute(dn).ToString

End If

If DateAndTime.Second(dn) < 10 Then

ss = '0' + DateAndTime.Second(dn).ToString

Else

ss = DateAndTime.Second(dn).ToString

End If

sy = DateAndTime.Year(dn).ToString

If DateAndTime.Month(dn) < 10 Then

sm = '0' + DateAndTime.Month(dn).ToString

Else

sm = DateAndTime.Month(dn).ToString

End If

If DateAndTime.Day(dn) < 10 Then

sd = '0' + DateAndTime.Day(dn).ToString

Else

sd = DateAndTime.Day(dn).ToString

End If

GetDateString = sy & sm & sd & ' ' & sh & ':' & sn & ':' & ss

End Function

End Class

Public Class Form7

Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

CheckBox3.Text = 'Физическое удаление' & vbCrLf & 'записей'

End Sub

Private Sub Form7_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed

Form5.Visible = True

Form5.Activate()

End Sub

Private Sub Form7_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown

Form5.Visible = False

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim cmd As String = ''

Dim cmd1 As String = _

'UPDATE ticket' & vbCrLf & _

'SET deleted = 1 where ([deleted] = 0)'

Dim cmd2 As String = _

'delete from [comments]' & vbCrLf & _

'delete from [attach]' & vbCrLf & _

'delete from [ticket]'

Dim conn_string As String = 'Driver={SQL Server};Server=' & Form1.srv & ';Trusted_Connection=Yes;Database=' & Form1.it_db & ';'

If CheckBox3.Checked Then

cmd = cmd2

Else

cmd = cmd1

End If

Dim delt As Integer = Form5.ExQuery(conn_string, cmd)

If delt > 0 Then

If CheckBox3.Checked Then

MsgBox('Удалено записей - ' & CStr(delt / 3), MsgBoxStyle.Information, 'Сообщение')

Else

MsgBox('Удалено записей - ' & CStr(delt), MsgBoxStyle.Information, 'Сообщение')

End If

Me.Close()

Else

MsgBox('Нет данных для удаления', MsgBoxStyle.Information, 'Сообщение')

End If

End Sub

End Class

ref.by 2006—2025
contextus@mail.ru