/
Федеральное государственное бюджетное образовательноеучреждение высшего профессионального образования«Удмуртский государственный университет»
Кафедра «Теоретических основ информатики»
Специальность 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