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

PAGE 5

ОГЛАВЛЕНИЕ


ВВЕДЕНИЕ

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

IP-телефония представляет собой реализацию телефонной связи по IP-сети, осуществляемую при помощи набора протоколов, технологий и специализированного оборудования. Передача голоса по сети происходит путем его переведения в цифровой вид, сжатия и разбиения на пакеты с последующим извлечением, декодированием и преобразованием в аналоговый сигнал на другой стороне. Будучи используемой для установления двусторонней связи, IP-телефония является частным случаем более общей технологии VoIP (Voice over IP), подразумевающей любую передачу голосового трафика по IP-протоколу [1].

Услуги IP-телефонии предоставляются операторами связи на коммерческой основе путем заключения договоров с абонентами. По масштабам охватываемой территории операторы подразделяются на локальных (город, район), региональных, национальных (страна) и транснациональных (международная связь) [2]. Для получения возможности осуществления своей деятельности операторы в большинстве стран мира, в том числе и в России, обязаны получать государственные лицензии на оказание услуг связи соответствующего профиля. Произошедшая в 1990-х годах демонополизация рынка услуг связи привела к появлению большого числа альтернативных операторов, конкурирующих между собой.

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

Таким образом, можно сказать, что одной из важнейших технологических задач IP-телефонии является маршрутизация вызовов, представляющая собой задание маршрута для обработки звонков, соответствующее требуемым условиям. Главным принципом маршрутизации вызовов является технология LCR (Least Cost Routing, маршрутизация по наименьшей стоимости звонка), обеспечивающая самую низкую себестоимость установления соединения внутри сети.

Маршрутизация обычно реализуется с помощью маршрутных таблиц, составленных на основе данных о действующих тарифах. Эти таблицы используются VoIP-коммутаторами (VoIP-switch), которые осуществляют реализацию телефонных соединений.

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

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


1. Назначение разработки

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

Областью применения разработки служит система биллинга и менеджмента IP Studio AMBS, используемая оператором связи ООО "ГЛОБАЛСАТ".

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

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

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

Актуальность разработки состоит в следующем:

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


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

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

  1. Рассмотреть функциональные возможности существующей системы биллинга и менеджмента IP Studio AMBS, используемой оператором связи; определить ее функциональные недостатки;
  2. Спроектировать и разработать программу динамической маршрутизации звонков при помощи средств СУБД Microsoft Access;
  3. Создать интерфейс для удобства работы оператора системы;
  4. Внедрить и отладить разработанную программу в биллинговую систему IP Studio AMBS;
  5. Протестировать работоспособность системы;
  6. Изучить вопросы охраны труда и экологии на рабочем месте, сделать выводы;
  7. Оформить пояснительную записку к дипломному проекту.


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

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

1.1 Деятельность транзитного оператора связи

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

Рис. 1. Схема перенаправления вызова транзитным оператором

1.2 Маршрутизация с использованием LCR

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

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

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

Качество связи может отличаться как у разных операторов, так и у одного оператора в разные периоды времени. Его обычно измеряют при помощи таких показателей, как Answer Seizure Ratio (коэффициент дозвона, ASR = успешные попытки соединений /все попытки соединений) и Average Call Duration (ACD, средняя длительность звонка). Если ACD очень мала, то очевидно, что качество связи настолько низкое, что абоненты не могут поговорить и вешают трубку. В случае значительных расхождений в значениях ACD по доступным маршрутам оператору нужно отдавать приоритет тем маршрутам, где ACD выше.

 Низкий ASR означает, что абоненты не могут дозвониться друг до друга из-за перегрузки маршрута. Этот показатель не является таким критическим, как низкая ACD, поскольку в этом случае технических проблем с каналом связи нет, и у оператора есть возможность перенаправить звонок по другому доступному маршруту.

1.3 Биллинговые системы

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

Системы биллинга (иногда в нормативных документах употребляется и другое название — автоматизированные системы расчета, АСР) — это разновидность прикладного программного обеспечения, используемая предприятиями связи для поддержки бизнес-процессов (рис. 2). Главное предназначение биллинговых систем — обеспечение автоматизации расчетов с клиентами и другими операторами, начиная от заключения договора оказания услуг связи и заканчивая выставлением счетов за них.

Рис. 2. Схема взаимодействия биллинговой системы

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

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

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

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

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

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


2. Обзор существующих решений

В данном дипломном проекте рассматриваются функциональные возможности системы биллинга и менеджмента пользователей IP-телефонии IP Studio AMBS (рис. 3), на основании которой будет разработана подсистема, устраняющая недостатки в составлении таблицы маршрутизации.

Рис. 3. Веб-интерфейс IP Studio AMBS

2.1 Функциональные возможности IP Studio AMBS

IP Studio AMBS представляет собой автоматизированную систему для управления и расчетов VoIP-трафика в работе крупных и средних операторов связи, разработанную компанией IP Studio Inc. Структура программы состоит из ядра, которым является сама биллинговая система, и дополнительно подключаемых модулей, расширяющих ее функционал [3].

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

  • Аутентификация операторов связи, то есть определение источников входящих вызовов;
  • Авторизация операторов, включающая в себя проверку их текущего баланса и прав совершения звонков по данному направлению;
  • Маршрутизация звонков — перенаправление каждого вызова по определенному направлению на список доступных встречных операторов в соответствии с маршрутной таблицей. В IP Studio AMBS статическая таблица маршрутизации звонков формируется вручную оператором биллинговой системы через веб-форму на основании данных из справочника направлений и списка операторов (рис. 4);
  • Учет и тарификация состоявшихся соединений, расчет стоимости покупки и продажи звонка;
  • Формирование счетов за выбранный период времени (например, за месяц);
  • Ведение статистики трафика, автоматическое формирование необходимых отчетов за выбранный период времени по любым операторам.

Рис. 4. Форма параметров маршрутизации

В базу данных IP Studio AMBS загружаются периодически обновляемые прайс-листы на услуги операторов-партнеров, приведенные в стандартизированный формат. Помимо этого, в ней хранится справочник направлений. На основании этих данных формируется маршрутная таблица, которая содержит наиболее выгодные маршруты прохождения телефонного звонка из пункта оригинации в пункт терминации. С этой таблицей через протокол RADIUS связана система MVTS, которая взаимодействует с другими коммутаторами посредством протоколов SIP и H.323. Для передачи речевого трафика коммутаторами используется протокол RTP.

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

Общая структура взаимодействия представлена на рис. 5.

Рис. 5. Схема взаимодействия программного обеспечения и оборудования в сети IP-телефонии

2.2 Протокол RADIUS

RADIUS (Remote Authentication in Dial-In User Service) — это протокол, разработанный для систем тарификации пользователей, работа которого осуществляется через обмен данными между центральной платформой и оборудованием.

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

Протокол RADIUS реализует аутентификацию (проверку подлинности субъекта), авторизацию (определение его полномочий доступа к различным сервисам) и сбор сведений об использованных каждым абонентом ресурсах (учет трафика) [4].

По своей форме сообщение RADIUS представляют собой заполненное поле данных пакета UDP.

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

  • Создание, хранение и управление учетными записями пользователей;
  • Блокирование доступа пользователя к учетной записи на основании достижения им установленного лимита;
  • Сбор статистики и анализ проведенных сессий;
  • Формирование отчетов по выбранным параметрам статистики;
  • Выставление счетов к оплате, их печать и рассылка.

2.3 MVTS

MVTS (MERA VoIP Transit Softswitch) — это используемый операторами связи пограничный контроллер сессий с широкими возможностями управления голосовым трафиком в сетях IP-телефонии. В частности, MVTS осуществляет проксирование голосового и сигнального трафика, соединение и концентрацию VoIP-потоков, а также их распределение по сетям с различными стандартами сигнализации. Коммутатор MVTS использует информацию заголовков пакетов в стеках протоколов 4 уровня модели OSI (Open Systems Interconnection, модель взаимодействия открытых систем) для управления приложениями и серверами, за счет чего его технологии позволяют осуществлять интеллектуальное управление трафиком, защиту сети и межсетевое взаимодействие.

Благодаря своей распределенной архитектуре MVTS подходит для работы крупных операторов связи, упрощая администрирование сети. Несколько взаимосвязанных серверов MVTS оперируют единым набором баз данных, осуществляя централизованный сбор и обработку трафика с программных коммутаторов (softswitch) и привратников (gatekeeper). Сокрытие сетевой структуры, встроенный контроль установления соединений и защита от проникновений извне позволяют обеспечить сетевую безопасность. В число функций описываемого контроллера сессий также входит сбор детальной статистики о работе сети.

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

Помимо этого, существует возможность подключения к MVTS внешних систем маршрутизации через протокол RADIUS, что позволяет операторам самостоятельно настраивать необходимые параметры и режимы маршрутизации вызовов [5].

2.4 SIP

SIP (Session Initiation Protocol, протокол установления сеанса) — это сетевой протокол прикладного уровня, обеспечивающий инициацию сеанса связи, его проведение и завершение. Для установления соединения SIP определяет адрес пользователя по его уникальному имени, выступая в качестве основы применения других протоколов для непосредственной передачи информации и других видов сервиса. Действующая реализация прокола SIP также поддерживает подключение и отключение дополнительных клиентов к установленному каналу связи, что используется для проведения медиаконференций.

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

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

В SIP используется адресация по имени домена или IP-адресу пользователя. Поддержка подобного формата позволяет интегрировать услуги SIP в существующую систему серверов DNS (Domain Name System, система имен доменов), преобразующих имена доменов в IP-адреса. Имея уникальный идентификатор, пользователь может пользоваться всеми услугами оператора, свободно перемещаясь в пределах сети.

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

2.5 H.323

H.323 — рекомендация Международного союза электросвязи (ITU-T), определяющая набор стандартов, описывающих сетевые протоколы, алгоритмы, процедуры и компоненты для пакетной передачи по сетям аудио- и видеоданных. Помимо этого, рекомендация Н.323 используется при решении задач управления адресацией, полосой пропускания сети и администрирования конечных пользователей. При помощи транслирующих сигнализацию и форматы данных шлюзов возможно обеспечение взаимодействия с сетями других типов связи [1]. В дополнение к этому стандарт H.323 позволяет использовать при создании сети устройства разных производителей.

Стек Н.323 состоит из следующих протоколов:

  • RTP (Real-time Transport Protocol, транспортный протокол реального времени) — используется для восстановления аналоговой информации реального времени. Пакеты RTP передаются при помощи протокола UDP (User Datagram Protocol, протокол пользовательских датаграмм), в то время как контроль доставки данных осуществляется управляющим протоколом RTCP (Real-time Transport Control Protocol);
  • Кодеки G.711, G.723.1, G.729 и др. — определяют алгоритмы компрессии и декомпрессии передаваемых по сети аудио- и видеоданных;
  • Q.931 — протокол сигнализации для установления и завершения соединения между абонентами;
  • H.245 — протокол, обеспечивающий передачу информации о поддерживаемых кодеках и числе используемых потоков в данном соединении для согласования использования канала;
  • RAS (Registration Admission Status, протокол регистрации, допуска и состояния) — протокол сигнализации, применяющийся для контроля доступа в сеть, информирования о состоянии полосы пропускания, регистрации пользователей в доменах и прекращения сеанса связи. Функционал протокола RAS реализуется путем обмена служебными сообщениями между контроллером зоны Н.323 и сетевыми терминалами, представляющими собой ПК или другие мультимедийные устройства, способные осуществлять передачу голоса (видео);
  • H.450 — набор протоколов, обеспечивающих дополнительные виды обслуживания в сети H.323.

2.6 ODBC

ODBC (Open Database Connectivity, открытый механизм взаимодействия с базами данных) — это стандартный программный интерфейс уровня вызова (Call Level Interface, CLI) для доступа приложений к базам данных. Данный стандарт служит для унификации взаимодействия программ с СУБД различных поставщиков вне зависимости от программно-аппаратной платформы [6]. Такая возможность реализуется благодаря наличию специально разработанных драйверов для всех БД и прочих источников данных, например, электронных таблиц или текстовых файлов.

Доступ к БД интерфейс ODBC предоставляет на основе стандарта ANSI языка SQL. При вызове функций ODBC приложение, которому необходимо указать только имя источника данных, устанавливает соединение с сервером БД, передает соответствующую команду SQL в качестве аргумента функции и обрабатывает полученный результат. Драйвер ODBC способен модифицировать запрос приложения так, чтобы он удовлетворял синтаксису SQL конкретной СУБД.

Структура ODBC включает в себя следующие компоненты:

  • ODBC API (Application Programming Interface, интерфейс создания приложений) — динамически подключаемая библиотека функций вызовов драйверов поддерживаемых СУБД. В свою очередь драйверы подразделяются на одно- и многоуровневые. Драйверы первой категории используются для работы с локальными БД, преобразуя синтаксис ANSI SQL в инструкции более низкого уровня для непосредственной обработки содержимого БД. Вторая категория драйверов работает по модели клиент-сервер, в дополнение к ANSI SQL поддерживая собственные инструкции используемой реляционной СУБД и используя ее сервер для обработки SQL-запросов;
  • Driver Manager (диспетчер драйверов) ODBC — библиотека, управляющая обработкой имен источников данных и загрузкой драйверов БД приложением;
  • Драйверы БД ODBC — динамически подключаемые библиотеки для обработки вызовов ODBC для используемых СУБД;
  • Библиотека курсоров ODBC — реализованный как уровень между диспетчером драйверов и драйверами ODBC компонент доступа к данным, создающий блочные или статические курсоры в случае, если драйвер их не поддерживает; 
  • Администратор источника данных ODBC — инструмент для создания источников данных и управления ими.

2.7 Анализ слабых сторон IP Studio AMBS

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

  1. Составление маршрутной таблицы для каждого направления осуществляется вручную через веб-форму, что могло быть приемлемым на начальном этапе работы компании. Однако с ростом масштаба деятельности оператора связи возникла необходимость автоматизации распределения трафика, поскольку число тарифов, предлагаемых операторами-партнерами, может достигать нескольких сотен, причем сами эти тарифы часто меняются в соответствии с ценовой политикой компаний, курсами валют и т.д. Необходимо автоматизировать процесс формирования маршрутной таблицы на основе актуальных предложений операторов и данных статистики;
  2. При формировании таблицы LCR (Least Cost Routing) доступно составление очень маленького числа маршрутов (не более трех), что может приводить к возникновению проблемы полного недозвона по определенным направлениям. Необходимо увеличить количество возможных выборов для обеспечения большей надежности соединения;
  3. Предложения операторов могут отличаться друг от друга, поскольку каждый из них ориентируется на свой собственный справочник направлений (телефонных кодов). Это может приводить к тому, что формируемое транзитным оператором совокупное предложение может содержать определенные неоднозначности. Например, один из партнеров предлагает конкретное направление в виде одного (короткого) телефонного кода, а другой партнер предлагает то же самое направление по более высокой цене в виде группы более длинных (дочерних) кодов. Простая консолидация предложений приведет к тому, что в маршрутной таблице фактически будут задействованы эти дочерние коды с более высокой ценой. Для решения этой проблемы необходимо привести все тарифные предложения к единому стандарту. Это может быть достигнуто применением процедуры экстраполяции тарифов;
  4. Необходимо обеспечить возможность автоматизированной коррекции маршрутной таблицы в зависимости от реального качества связи по каждому направлению, поскольку текущий функционал AMBS позволяет лишь вручную редактировать таблицу маршрутов на основе получаемой статистики соединений.


3. Лингвистическое обеспечение

3.1 SQL

SQL (Structured Query Language) — язык структурированных запросов, формальный непроцедурный информационно-логический язык программирования. Широко применятся в системах управления базами данных (СУБД) для описания, модификации и извлечения данных в реляционных БД [7].

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

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

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

Ключевым (зарезервированным) называется такое слово, которое имеет определенное значение в SQL, и его применение определено строгими правилами. Стиль программирования SQL предполагает написание операторов и прочих зарезервированных слов прописными буквами.

Идентификатор — это наименование объекта БД (таблицы, столбца и т.д.), которое не должно быть длиннее 128 знаков. В качестве идентификаторов также нельзя использовать ключевые слова. Каждый SQL-запрос должен заканчиваться точкой с запятой.

Возможности SQL позволяют создавать следующие виды запросов:

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

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

По своим выполняемым функциям все операторы SQL можно отнести к четырем группам:

  1. Язык определения данных (Data Definition Language, DDL) – позволяет определять хранящиеся в базе данных структуры, такие как таблицы, индексы, роли, или другие объекты, использование которых допускается в данной СУБД.
  2. Язык манипуляции данными (Data Manipulation Language, DML) – позволяет осуществлять извлечение данных из таблиц, вставку, изменение и удаление записей в базе данных.
  3. Язык определения доступа к данным (Data Control Language, DCL) – дает возможность контролировать доступ конкретных пользователей или их групп к объектам БД посредством предоставляемых и отменяемых привилегий.
  4. Язык управления транзакциями (Transaction Control Language, TCL) – позволяет контролировать процесс обработки транзакций в базе данных, где транзакция — это последовательность из одной или нескольких команд SQL, рассматривая СУБД как логическое неделимое целое.

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

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

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

3.2 Microsoft Visual Basic for Applications

Microsoft Visual Basic for Applications (VBA) — совокупность среды разработки и разновидности языка Visual Basic, получившая широкое распространение из-за включения в пакет Microsoft Office. VBA, как более простую реализацию VB, удобно использовать в тех случаях, когда необходимо быстро разработать прототип программы, написать макрос или приложение для базы данных. Отдельно стоит отметить, что созданные в VBA скрипты выполняются собственно в среде приложений Office. Инструменты среды разработки также позволяют визуально конструировать пользовательский интерфейс.

К основным недостаткам VBA относят в первую очередь то, что он работает только в операционных системах Windows и Mac OS X, что ограничивает его область использования. Также необходимо контролировать совместимость версий программного продукта, поскольку в более новых реализациях появляются ранее не существовавшие функциональные возможности.

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

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

Возможно совмещение VBA с другими языками программирования, например C++, за счет реализации на нем только пользовательского интерфейса. В качестве функциональной части программы в таком случае выступают динамически подключаемые библиотеки (DLL).

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

  • Создание дипломного проекта будет осуществляться в среде Microsoft Access, которая доступна как на рабочем месте оператора биллинговой системы, так и на персональном компьютере разработчика программного приложения. Следовательно, отсутствуют затраты на приобретение какой-либо дополнительной среды разработки.
  • Функциональных возможностей языка VBA вполне достаточно для реализации дипломного проекта в короткие сроки.
  • Полученный в итоге код является открытым для изменения. Поскольку данный проект реализуется для потребностей конкретной компании, это не является недостатком, а позволит вносить изменения в будущем.

3.3 Основные определения

Для описания работы подсистемы используются следующие принятые в проекте определения:

Маршрут вызова — это именованное направление для терминации вызова. Обычно под маршрутом понимается наименование оператора связи.

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

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

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

Консолидированная таблица — сводная таблица тарифных предложений операторов связи.


4. Информационное обеспечение

В качестве информационного обеспечения подсистемы динамической маршрутизации вызовов выступают таблицы базы данных IP Studio AMBS и СУБД для работы с ней. Взаимодействие с приложением осуществляется при помощи драйвера MySQL Connector ODBC на платформе CentOS.

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

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

СУБД MySQL Server 5.0

MySQL — свободная реляционная система управления базами данных (СУБД), разработка и поддержка которой осуществляется компанией Oracle Corporation. Реляционная модель данных предполагает хранение нормализованных данных в виде взаимосвязанных двумерных таблиц для удобства представления. Как правило, MySQL используется в качестве сервера для удаленной работы пользователей или приложений. Достоинством такой модели использования является удобство централизованной обработки клиентских запросов сервером, доступность данных, их надежное и безопасное хранение.

СУБД написана на языках С и С++, распространяется с открытым программным кодом и работает на большинстве современных платформ. MySQL Server 5.0 поддерживает стандарт языка SQL ANSI 92. Для соединения с приложениями используется драйвер MyODBC. Многие языки программирования имеют библиотеки для доступа к базам данных MySQL в своих интерфейсах создания приложений (API).

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

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


5. Описание структуры данных

5.1 Этап 1. Формирование маршрутной таблицы

5.1.1 Структура входных данных

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

  1. AMBS_RATE_NAMES — таблица имен тарифов (рис. 6).

Рис. 6. Таблица AMBS_RATE_NAMES

Поля:

  • ID — ключевое поле, код тарифного плана;
    • RATENAME — имя тарифного плана;
    • minsec, unpaidsec, discr_sec — параметры для определения числа нетарифицируемых при вызове секунд и округления в расчетах биллинговой системы, в проекте не использованы;
    • TYPE — направление трафика (входящий/исходящий);
    • SUBPAY — параметр расчетов биллинговой системы, в проекте не использован;
    • CURRENCY — валюта тарифного плана;
    • LAST_DATE — дата и время последнего обновления тарифного плана.
  1. AMBS_RATES — дочерняя таблица AMBS_RATE_NAMES, содержащая различные характеристики тарифов (рис. 7).

Рис. 7. Таблица AMBS_RATES

Поля:

  • ID — ключевое поле, уникальный идентификатор записи тарифного значения;
  • CODE_ID — идентификатор телефонного кода;
  • RATE_ID — код тарифного плана;
  • PRICE — значение тарифа;
  • RATE_DATE — начальная дата действия тарифа;
  • TIME_ID, ROUND_ID — идентификаторы параметров расчетов биллинговой системы, в проекте не использованы;
  • STOP_DATE — дата окончания действия тарифа;
  • minsec, unpaidsec, discr_sec, round_sec — параметры для определения числа нетарифицируемых при вызове секунд и округления в расчетах биллинговой системы, в проекте не использованы;
  • from_tm — начальная граница времени суток действия тарифа;
  • to_tm — конечная граница времени суток действия тарифа;
  • state — статус тарифа: действующий (0) или закрытый (1);
  • fround, ncnt, close_hour — дополнительные временные параметры, в проекте не использованы;
  • capacity — пропускная способность линии;
  • GRP, DENY_GRP — коды групп, в проекте не использованы;
  • TZ_ID — идентификатор временной зоны;
  • DB_DATE — время создания или модификации записи;
  • FEE_LIMIT — лимит платежа.
  1. AMBS_DEST — таблица-справочник направлений (рис. 8).

Рис. 8. Таблица AMBS_DEST

Поля:

  • ID — ключевое поле, уникальный идентификатор записи;
  • DEST_NAME — наименование направления;
  • COUNTRY_CODE — телефонный код страны;
  • DEST_CODES — список телефонных кодов направления;
  • CITY_NAME — название города;
  • DEST_TYPE — тип направления: фиксированный, мобильный или спутниковый.
  1. AMBS_DEST_CODE — дочерняя таблица AMBS_DEST, хранящая телефонные коды направлений (рис. 9).

Рис. 9. Таблица AMBS_DEST_CODE

Поля:

  • DEST_ID — уникальный идентификатор направления;
  • CODE — телефонный код направления.
  1. AMBS_SITE — справочник маршрутов и их характеристик (рис. 10).

Рис. 10. Таблица AMBS_SITE

Поля:

  • ID — ключевое поле, уникальный идентификатор записи;
  • SITENAME — наименование маршрута.

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

5.1.2 Структура внутренних данных

Внутренними данными для работы программного модуля на первом этапе являются 4 локальные таблицы:

  1. Offer_Consolidated_Item — таблица, создаваемая путем запроса на выборку полей и значений из пяти входных таблиц (рис. 11).

Рис. 11. Таблица Offer_Consolidated_Item

Поля:

  • COUNTRY_CODE — телефонный код страны;
  • DEST_TYPE — тип направления: фиксированный, мобильный или спутниковый;
  • DEST_NAME — наименование направления;
  • RouteName — наименование маршрута;
  • Prefix — телефонный код направления;
  • RateEff — тариф в рублях.
  1. Offer_Consolidated — таблица с переменным количеством столбцов, содержащая актуальные тарифы операторов (рис. 12). После процедуры экстраполяции таблица становится консолидированной, так как заполняется недостающими значениями тарифов.

Рис. 12. Таблица Offer_Consolidated

Поля:

  • Prefix — телефонный код направления.

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

  1. Offer_Consolidated_Dest — справочная таблица направлений, используемая для установления ограничений в режиме экстраполяции (рис. 13).

Рис. 13. Таблица Offer_Consolidated_Dest

Поля:

  • Prefix — телефонный код направления;
  • DEST_NAME — наименование направления;
  • DEST_TYPE — тип направления: фиксированный, мобильный или спутниковый;
  • COUNTRY_CODE — телефонный код страны.
  1. Route_List — таблица, содержащая список маршрутов для каждого телефонного кода (рис. 14).

Рис. 14. Таблица Route_List

Поля:

  • Prefix — телефонный код направления;
  • Rate 1-6 — минимальные тарифы в рублях, упорядоченные по возрастанию;
  • Route 1-6 — операторы, предлагающие данные тарифы.
  1. Route_Param — таблица, данные из которой в итоге загружаются на сервер AMBS и используются для маршрутизации звонков в сети IP-телефонии (рис. 15). Route_Param получается из таблицы Route_List переходом от телефонных кодов к названиям направлений для удобства работы с коммутаторами. Для одновременной загрузки на сервер доступны 3 маршрута.

Рис. 15. Таблица Route_Param

Поля:

  • dest_id — цифровой системный код направления;
  • DEST_NAME — наименование направления;
  • first_route, second_route, third_route — уникальные цифровые системные коды данных операторов;
  • Rate1-3 — упорядоченные по возрастанию минимальные тарифы в рублях;
  • Route1-3 — операторы, предлагающие данные тарифы.

5.1.3 Структура выходных данных

Результатом работы программного модуля на этом этапе является загрузка составленных маршрутов на сервер в таблицу AMBS_rparam, используемую системой AMBS для управления коммутаторами (рис. 16).

Рис. 16. Таблица AMBS_rparam

Поля:

  • dest_id — цифровой системный код направления;
  • first_route, second_route, third_route - соответственно первый, второй и третий маршруты вызова по данному направлению.

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


5.2 Этап 2. Проверка качества связи

5.2.1 Структура входных данных

Для этого этапа входными данными служит таблица AMBS_CDR_CUR, содержащая данные тарификации состоявшихся соединений (CDR, Call Detail Record) в текущем месяце (рис. 17).

Рис. 17. Таблица AMBS_CDR_CUR

Поля:

  • CID — уникальный идентификатор звонка;
  • TBLTYPE — тип таблицы (содержит данные о нулевых или ненулевых соединениях);
  • BILL_DATE — дата осуществления тарификации;
  • SRC_PRICE — тариф продажи в валюте контракта;
  • DST_PRICE — тариф покупки в валюте контракта;
  • SRC_SYS_PRICE — тариф продажи в валюте системы (USD, доллары США);
  • DST_SYS_PRICE — тариф покупки в валюте системы;
  • SRC_SITE — наименование оператора-отправителя;
  • DST_SITE — наименование оператора-получателя;
  • SRC_OPER — код оператора-отправителя звонка;
  • DST_OPER — код оператора-получателя звонка;
  • SRC_DEST — телефонный код направления в прайсе продажи;
  • DST_DEST — телефонный код направления в прайсе закупки;
  • SRC_RID, DST_RID — параметры операторов-отправителей и получателей, в проекте не использованы;
  • SCR_CODE — префикс в прайс-листе продажи;
  • DST_CODE — префикс в прайс-листе закупки;
  • MAX_CODE — максимальное значение префикса, в проекте не использовано;
  • DST_NUMBER_BILL — полный телефонный номер;
  • SRC_BILL_TIME — время тарификации у отправителя;
  • DST_BILL_TIME — время тарификации у получателя;
  • SRC_BILL_DATE — дата тарификации у отправителя;
  • DST_BILL_DATE — дата тарификации у получателя;
  • SERVER_ID — код сервера AMBS;
  • VHOUR — код интервала времени суток;
  • SUCC_FLAG — признак осуществления удачного соединения.

5.2.2 Структура внутренних данных

Tmp_Term_Stat — промежуточная таблица, в которую помещаются данные статистики с коммутаторов (рис. 18).

Рис. 18. Таблица Tmp_Term_Stat

Поля:

  • FirstPrefix — первый телефонный код, закрепленный за направлением (используется в связи с тем, что число телефонных кодов у различных направлений может варьироваться);
  • DEST_NAME — наименование направления;
  • DEST_ID — уникальный идентификатор направления;
  • RATE_ID — код тарифного плана;
  • Terminator — оператор, принимающий звонок;
  • Attempts — число попыток;
  • Calls — число успешно осуществленных звонков по данному направлению;
  • Minutes — общая длительность трафика по данному направлению;
  • ASR — Answer Seizure Ratio, коэффициент дозвона;
  • ACD — Average Call Duration, средняя продолжительность звонка.

5.2.3 Структура выходных данных

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

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

Блокировка выбранных маршрутов из таблицы Tmp_Term_Stat происходит путем изменения значений поля state с 0 на 1 в таблице AMBS_RATES на сервере.


6. Разработка алгоритма

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

  1. Загрузка актуальных тарифов и направлений звонков из базы данных на сервере в таблицу Offer_Consolidated_Item;
  2. Создание консолидированной таблицы предложений Offer_Consolidated с помощью SQL-запроса;
  3. Создание справочной таблицы Offer_Consolidated_Dest, используемой программой для проведения экстраполяции тарифов;
  4. Экстраполяция консолидированной таблицы Offer_Consolidated с помощью скрипта на VBA;
  5. Формирование LCR-таблицы Route_List с помощью скрипта на VBA;
  6. Создание таблицы Route_Param при помощи SQL-запроса путем перехода от телефонных кодов к названиям направлений;
  7. Загрузка данных из таблицы Route_Param в маршрутную таблицу системы AMBS на сервере;
  8. Анализ статистики с коммутатора путем получения детализированных записей обо всех соединениях (CDR), определение каналов с низкой пропускной способностью и формирование промежуточной демонстрационной таблицы Tmp_Term_Stat;
  9. Корректировка базы данных в соответствии с полученной статистикой посредством пометок перегруженных каналов как недоступных.

Схема алгоритма изображена на рис. 19.

Рис. 19. Алгоритм работы приложения


КОНСТРУКТОРСКО-ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

1. Выбор программного обеспечения

1.1 Microsoft Office Access

Microsoft Access — реляционная система управления базами данных (СУБД), являющаяся одним из продуктов пакета Microsoft Office. MS Access относится к категории СУБД, ориентированных на конечных потребителей, поскольку ее возможности позволяют вести работу с базами данных, не имея навыков программирования. Как правило, Access используется для создания и эксплуатации настольных БД небольшого объема, а также для доступа к данным организации или предприятия, хранящимся на сервере.

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

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

Ядром БД в Access является компонент Microsoft Jet Database engine, механизм реляционной базы данных, обеспечивающий связь СУБД с физическими данными на жестком диске и организацию сетевого интерфейса для работы по модели клиент-сервер с БД под управлением Microsoft SQL Server 2000.

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

Объект БД представляет собой самодостаточный компонент базы данных, взаимодействующий с физическими данными и представляющий их в особом формате [11]. В Microsoft Access насчитывается 7 типов объектов БД:

  1. Таблицы — это наборы данных по определенной теме, отображаемые в виде строк и столбцов. Таблицы являются фундаментальными объектами базы данных, поскольку все остальные объекты различным образом связаны с ними или зависят от них. Элементами структуры таблиц являются записи и поля. Запись представляет собой строчку в таблице, хранящую некие упорядоченные данные. Число записей в таблице не ограничено. Поле таблицы — это столбец, хранящий данные определенного типа (текст, число, дата и т.д.). В Access в одной таблице доступно для отображения 255 полей. Поля разных таблиц могут быть связанными через первичные и внешние ключи, в таком случае они обычно имеют одинаковое имя во всех таблицах. С помощью связанных полей устанавливается связь между таблицами или запросами.
  2. Запросы — это инструменты для получения из одной или нескольких таблиц сведений, соответствующих какому-либо критерию. Также запросы могут быть использованы для изменения необходимых данных. Результаты выборки запроса предоставляются в виде таблицы. Запросы Access также могут служить источниками данных для новых запросов или других объектов БД. Для построения запросов в Access можно использовать такие средства, как Мастер или Конструктор запросов.

В MS Access выделяют следующие виды запросов:

  • Запрос на выборку — для извлечения данных из одной или нескольких таблиц БД и их представления в заданном формате. Помимо этого запрос может выполнять какие-либо манипуляции с выбранными строками;
    • Запрос с параметрами — используется для извлечения в интерактивном режиме сведений, соответствующих определенным критериям. Запросы такого типа подходят для расширения возможностей других видов запросов;
    • Запрос на изменение — предназначен для создания новых таблиц, добавления записей, редактирования или удаления уже существующих данных;
    • Перекрестный запрос — используется для группировки данных в строках (столбцах), позволяя анализировать полученную информацию;
  1. Формы — графический интерфейс пользователя для работы с БД. С их помощью можно вносить данные в таблицы, редактировать или удалять записи. Сами формы не хранят данных, а только служат инструментом для отображения содержимого таблиц или запросов. Для работы с формами используются элементы управления (например, кнопки, текстовые поля, списки и т.д.) и их свойства, определяющие поведение конкретного элемента при выполнении пользователем каких-либо действий.
  2. Отчеты — это объекты для удобного графического представления и дальнейшей печати данных из таблицы или запроса в соответствующем формате, однако сами данные в отчете редактированию не подлежат.
  3. Страницы доступа к данным — это HTML- страницы, используемые для просмотра и работы с данными через сеть. При просмотре страницы через веб-обозреватель (браузер) открывается ее локальная копия, через которую можно редактировать содержимое таблиц и генерировать отчеты.
  4. Макросы — это объекты БД, с помощью которых выполнение часто повторяющихся операций может быть автоматизировано. Сам макрос состоит из нескольких макрокоманд с указанным именем, аргументами и условиями исполнения. Связанные макросы в Access можно объединять в группы, сохраняя их как отдельный макрос.
  5. Модули — это объекты для хранения наборов текстов процедур на VBA. По своей сути модули, как и макросы, предназначены для автоматизации выполнения каких-либо операций, однако их возможности позволяют решать задачи более высокого уровня сложности. В Access модули используются либо как отдельный объект БД, либо как часть другого объекта (формы, отчета). Первые называются стандартными модулями, содержат некие стандартные процедуры и могут быть вызваны для обработки событий в различных объектах БД. Модули, включенные в другие объекты, называются модулями класса. Записанный в них код процедур на VBA используется для обработки событий, происходящих с элементами форм или отчетов.

В Microsoft Access есть возможность просматривать содержимое БД в различных форматах. К основным режимам просмотра относятся:

  • Режим конструктора — доступен для всех объектов БД. При помощи него можно создавать новые объекты или изменять структуру уже существующих, в то время как изменить сами данные в БД нельзя.
  • Режим таблицы — доступен только для представления таблиц, запросов и форм. В этом режиме данные могут быть добавлены в таблицу, изменены или удалены из нее.
  • Режим SQL — позволяет просматривать и редактировать запросы в базовой форме синтаксиса языка SQL;
  • Режим формы — используется для отображения и ввода данных в созданных формах, что позволяет редактировать содержимое таблиц. В этом режиме макет формы недоступен для изменений;
  • Режим предварительного просмотра — доступен для просмотров печатных отчетов с заполненными фактическими данными;
  • Режим просмотра страницы — демонстрирует содержимое страницы доступа к данным, например, источники записей, кнопки перехода и т.д.

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

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

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

Аналогичным образом Microsoft Access дает возможность экспорта объектов БД в другие программы, создавая для этого локальную копию используемого объекта БД в формате файла назначения [12].

1.2 Обоснование использования Microsoft Access

При выборе Microsoft Access в качестве среды разработки дипломного проекта были изучены основные характеристики и функциональные возможности данной СУБД. В итоге были сделаны следующие выводы:

  • Microsoft Access входит в стандартный комплект поставки Microsoft Office, поэтому отсутствует надобность в приобретении и установке дополнительных средств разработки;
  • Выбранная СУБД предоставляет широкие возможности для управления данными, используемыми в работе биллинговой системы, обеспечивая их наглядное представление;
  • Встроенные средства конструирования запросов и язык VBA дают возможность разработать приложение для автоматизации системы маршрутизации звонков в короткие сроки.


2. Разработка программы

2.1 SQL-запросы

  1. qryAMBS_Rates_Add — запрос на добавление данных из пяти таблиц AMBS на сервере в локальную таблицу Offer_Consolidated_Item (рис. 20).

Рис. 20. Вид конструктора запроса qryAMBS_Rates_Add

Текст запроса:

INSERT INTO Offer_Consolidated_Item (COUNTRY_CODE, DEST_TYPE, DEST_NAME, RouteName, Prefix, RateEff)

SELECT AMBS_DEST.COUNTRY_CODE, AMBS_DEST.DEST_TYPE, AMBS_DEST.DEST_NAME, AMBS_SITE_.SITENAME, AMBS_DEST_CODE.CODE, If ([CURRENCY]='RUB',[PRICE],cRoundUp([PRICE]*64,3)) AS PRICE_RUR

FROM (AMBS_SITE_ INNER JOIN (AMBS_DEST_CODE INNER JOIN (AMBS_DEST INNER JOIN AMBS_RATES ON AMBS_DEST.ID = AMBS_RATES.CODE_ID) ON AMBS_DEST_CODE.DEST_ID = AMBS_DEST.ID) ON AMBS_SITE_.rate_t = AMBS_RATES.RATE_ID) INNER JOIN AMBS_RATE_NAMES ON AMBS_RATES.RATE_ID = AMBS_RATE_NAMES.ID

WHERE (((AMBS_DEST.COUNTRY_CODE)="7") AND ((AMBS_DEST_CODE.CODE) Not Like "79*") AND ((AMBS_RATES.STOP_DATE)=#12/30/9999#) AND ((AMBS_RATE_NAMES.TYPE)=3) AND ((AMBS_RATES.state)=0) AND ((AMBS_SITE_.serve_rate_t)=1));


  1. qryAMBS_Rates_Consolidated — перекрестный запрос формирующий консолидированную таблицу тарифных предложений (рис. 21).

Рис. 21. Вид конструктора запроса qryAMBS_Rates_Consolidated

Текст запроса:

TRANSFORM First (Offer_Consolidated_Item.RateEff) AS Rate

SELECT Offer_Consolidated_Item.Prefix

FROM Offer_Consolidated_Item

GROUP BY Offer_Consolidated_Item.Prefix

PIVOT Offer_Consolidated_Item.RouteName;

  1. qryAMBS_Rates_Dest_Add — запрос, при помощи которого формируется справочная таблица направлений Offer_Consolidated_Dest (рис. 22).

Рис. 22. Вид конструктора запроса qryAMBS_Rates_Dest_Add

Текст запроса:

INSERT INTO Offer_Consolidated_Dest (COUNTRY_CODE, Prefix, DEST_NAME, DEST_TYPE)

SELECT Offer_Consolidated_Item.COUNTRY_CODE, Offer_Consolidated_Item.Prefix, Offer_Consolidated_Item.DEST_NAME, Offer_Consolidated_Item.DEST_TYPE

FROM Offer_Consolidated_Item

GROUP BY Offer_Consolidated_Item.COUNTRY_CODE, Offer_Consolidated_Item.Prefix, Offer_Consolidated_Item.DEST_NAME, Offer_Consolidated_Item.DEST_TYPE;

  1. qryRoute_Param_Add — запрос, добавляющий записи в маршрутную таблицу Route_Param (рис. 23).

Рис. 23. Вид конструктора запроса qryRoute_Param_Add

Текст запроса:

INSERT INTO Route_Param (DEST_NAME, Rate1, Route1, Rate2, Rate3, Route2, Route3)

SELECT Offer_Consolidated_Dest.DEST_NAME, Route_List.Rate1, Route_List.Route1, Route_List.Rate2, Route_List.Rate3, Route_List.Route2, Route_List.Route3

FROM Route_List INNER JOIN Offer_Consolidated_Dest ON Route_List.Prefix = Offer_Consolidated_Dest.Prefix

GROUP BY Offer_Consolidated_Dest.DEST_NAME, Route_List.Rate1, Route_List.Route1, Route_List.Rate2, Route_List.Rate3, Route_List.Route2, Route_List.Route3

ORDER BY Offer_Consolidated_Dest.DEST_NAME;

  1. qryRoute_Param_Upd — запрос, переводящий направления и маршруты в коды таблиц AMBS (рис. 24).

Рис. 24. Вид конструктора запроса qryRoute_Param_Upd

Текст запроса:

UPDATE (((Route_Param INNER JOIN AMBS_DEST ON Route_Param.DEST_NAME = AMBS_DEST.DEST_NAME) LEFT JOIN AMBS_SITE AS AMBS_SITE_1 ON Route_Param.Route1 = AMBS_SITE_1.SITENAME) LEFT JOIN AMBS_SITE AS AMBS_SITE_2 ON Route_Param.Route2 = AMBS_SITE_2.SITENAME) LEFT JOIN AMBS_SITE AS AMBS_SITE_3 ON Route_Param.Route3 = AMBS_SITE_3.SITENAME SET Route_Param.dest_id = [AMBS_DEST].[ID], Route_Param.first_route = [AMBS_SITE_1].[ID], Route_Param.second_route = [AMBS_SITE_2].[ID], Route_Param.third_route = [AMBS_SITE_3].[ID];

  1. qryAMBS_CDR_Stat_add — запрос для формирования таблицы статистики Tmp_Term_Stat (рис. 25).

Рис. 25. Вид конструктора запроса qryAMBS_CDR_Stat_add

Текст запроса:

INSERT INTO Tmp_Term_Stat (FirstPrefix, DEST_NAME, DEST_ID, RATE_ID, Terminator, Attempts, Calls, Minutes, ASR, ACD)

SELECT First(AMBS_CDR_CUR.DST_CODE) AS [First-DST_CODE], AMBS_DEST.DEST_NAME, AMBS_DEST_CODE.DEST_ID, AMBS_SITE.rate_t, AMBS_SITE.SITENAME AS Terminator, Count(AMBS_CDR_CUR.CID) AS Attempts, Sum(AMBS_CDR_CUR.SUCC_FLAG) AS Calls, Sum(AMBS_CDR_CUR.DST_BILL_TIME) AS Minutes, Sum(AMBS_CDR_CUR.SUCC_FLAG)/[Attempts] AS ASR, If (Sum([SUCC_FLAG])=0,0,Sum([DST_BILL_TIME])/Sum([SUCC_FLAG])) AS ACD

FROM ((AMBS_CDR_CUR INNER JOIN AMBS_SITE ON AMBS_CDR_CUR.DST_SITE = AMBS_SITE.ID) INNER JOIN AMBS_DEST_CODE ON AMBS_CDR_CUR.DST_CODE = AMBS_DEST_CODE.CODE) INNER JOIN AMBS_DEST ON AMBS_DEST_CODE.DEST_ID = AMBS_DEST.ID

WHERE (((AMBS_CDR_CUR.BILL_DATE) Between GetDate(0) And GetDate(1)))

GROUP BY AMBS_DEST.DEST_NAME, AMBS_DEST_CODE.DEST_ID, AMBS_SITE.rate_t, AMBS_SITE.SITENAME

HAVING (((Count(AMBS_CDR_CUR.CID))>=GetMinAttempt()));

  1. qryAMBS_CDR_Stat_del — запрос, удаляющий записи из таблицы Tmp_Term_Stat в соответствии с заданными через форму параметрами (рис. 26).

Рис. 26. Вид конструктора запроса qryAMBS_CDR_Stat_del

Текст запроса:

DELETE Tmp_Term_Stat.*, Tmp_Term_Stat.ASR, Tmp_Term_Stat.ACD

FROM Tmp_Term_Stat

WHERE (((Tmp_Term_Stat.ASR)>GetMinASR()) AND ((Tmp_Term_Stat.ACD)>GetMinACD()));

  1. qryAMBS_Routes_del — запрос для удаления блока записей из маршрутной таблицы AMBS_rparam перед загрузкой новых маршрутов (рис. 27).

Рис. 27. Вид конструктора запроса qryAMBS_Routes_del

Текст запроса:

DELETE AMBS_rparam.*, AMBS_rparam.dest_id

FROM AMBS_rparam

WHERE (((AMBS_rparam.dest_id) In (SELECT dest_id FROM Route_Param;)));

  1. qryAMBS_Routes_Upload — запрос для выгрузки маршрутной таблицы на сервер (рис. 28).

Рис. 28. Вид конструктора запроса qryAMBS_Routes_Upload

Текст запроса:

INSERT INTO AMBS_rparam (dest_id, first_route, second_route, third_route, oper_id, direction, route_oper, enable, [user])

SELECT Route_Param.dest_id, Route_Param.first_route, Route_Param.second_route, Route_Param.third_route, -2 AS oper_id, 0 AS direction, 0 AS route_oper, 1 AS enable, 'admin' AS [user]

FROM Route_Param;

  1. qryAMBS_Rates_Block — запрос, блокирующий неработающие предложения в таблице AMBS_RАTES путем изменения значений в поле state (рис. 29).

Рис. 29. Вид конструктора запроса qryAMBS_Rates_Block

Текст запроса:

UPDATE AMBS_RATES INNER JOIN Tmp_Term_Stat ON (AMBS_RATES.RATE_ID = Tmp_Term_Stat.RATE_ID) AND (AMBS_RATES.CODE_ID = Tmp_Term_Stat.DEST_ID) SET AMBS_RATES.state = 1

WHERE (((AMBS_RATES.state)=0) AND ((AMBS_RATES.RATE_DATE)<Date()) AND ((AMBS_RATES.STOP_DATE)>Date()));


2.2 Алгоритмы процедур

2.2.1 Экстраполяция тарифов



2.2.2 Формирование LCR


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

3.1 Основные требования к графическому интерфейсу пользователя

Графический интерфейс пользователя — это совокупность средств и методов взаимодействия пользователя с устройством, реализованная через представление всех доступных функций и объектов в виде графических элементов на экране (диалоговых окон, кнопок, сообщений и т.д.), доступ пользователя к которым осуществляется при помощи устройств ввода информации. 

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

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

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

Объединение элементов в группы позволяет обозначить их взаимосвязь и облегчить ориентирование пользователя.

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

3.2 Создание формы в Microsoft Access при помощи средств VBA

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

Добавление новой формы в проект осуществляется через команду меню InsertUserForm (ВставкаUserForm). На ней можно размещать выбранные из служебной панели элементы управления — составляющие диалогового окна, позволяющие пользователю осуществлять взаимодействие с программой.

При разработке пользовательского интерфейса были использованы следующие элементы управления:

  • Label (Надпись) — предназначен для создания на форме надписей и заголовков в виде статического текста;
  • Field (Поле) — редактируемое поле для ввода текстовых данных в произвольной форме;
  • OptionButton (Переключатель) — кнопка переключения для выбора альтернативных вариантов;
  • CommandButton (Кнопка) — кнопка с прикрепленной к ней VBA-процедурой. Как правило, заголовок кнопки раскрывает ее назначение;
  • ComboBox (Поле со списком) — раскрывающееся поле со списком, содержащее предлагаемые пользователю значения. В некоторых случаях может редактироваться пользователем с целью добавления новых значений;
  • Frame (Прямоугольник) — рамка, при помощи которой можно визуально и логически группировать элементы диалогового окна.

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

  • Click — вызывается щелчком мыши по объекту;
  • Open — используется при открытии диалогового окна.

3.3 Функции используемых элементов

В соответствии со структурой программы элементы формы разделены на 2 группы: относящиеся к составлению маршрутной таблицы и управляющие параметрами контроля качества соединений (рис. 30). Назначение каждого элемента описано в таблице 1.

Таблица 1

Функции элементов управления формы

Наименование элемента управления

Выполняемое действие

Значение по умолчанию

Выборка тарифов на дату

Задает дату выборки тарифов

Текущая дата

Маска телефонного кода

Фильтр, определяющий диапазон выбираемых кодов направлений

7 (Россия)

Курс для тарифов в USD

Указывает текущий курс валюты, в которой составлены тарифы

55

Ограничения экстраполяции тарифов

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

по типу

Максимальное число маршрутов

Осуществляет выбор числа автоматически составляемых маршрутов (от 1 до 6)

6

Загрузка тарифов

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

-

Синтез LCR

Инициирует процесс составления маршрутной таблицы

-

Обновление маршрутов

Удаляет старые маршруты из БД AMBS на сервере и загружает на их место новые. Обновляется не вся таблица, а только блок записей, соответствующий содержимому локальной таблицы Route_Param

-

Период

Задает границы интересующего оператора периода статистики

текущие сутки

Минимальное число попыток

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

100

Минимальный ASR

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

0,05

Минимальный ACD

Задает минимальную среднюю длительность звонка, достаточную для отбраковки направления

0,10

Сбор статистики

Запускает процедуру сбора статистики с коммутаторов

-

Просмотр статистики

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

-

Блокировка тарифов

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

-

Рис. 30. Внешний вид формы

Рис. 31. Сообщение об ошибке


4. Технология отладки программы

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

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

4.1 Основные типы ошибок

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

  • синтаксические ошибки;
  • ошибки компиляции;
  • ошибки времени исполнения (runtime-ошибки);
  • логические ошибки.

Синтаксические ошибки возникают в результате неправильного ввода кода. Это самые простые ошибки: они обнаруживаются редактором кода Visual Basic сразу и являются результатом несоблюдения разработчиком синтаксиса языка или просто невнимательности при вводе кода [14]. Большинство синтаксических ошибок может быть распознано редактором VBA в процессе введения или редактирования текста программы. При таком распознавании на экран выводится окно текстового сообщения, сопровождающееся звуковым сигналом.

Стоит отметить, что в сообщении редактора VBA ошибка обозначается как Compile error, то есть ошибка компиляции, поскольку проверка синтаксиса осуществляется при помощи запуска компилятора. Тем не менее, ошибки такого рода относят к синтаксическим.

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

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

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

4.2 Средства отладки кода в VBA

4.2.1 Режим прерывания

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

Для выхода из режима прерывания можно воспользоваться командой RunContinue (ЗапускПродолжить), в этом случае программа продолжит свое выполнение в обычном режиме до тех пор, пока не будет осуществлено ее запланированное завершение. Помимо этого для той же цели могут быть использованы также нажатие клавиши F5 или щелчок мыши по кнопке Continue (Продолжить) на панели Debug (Отладка).

Если необходимо выйти из режима прерывания с завершением работы программы, то нужно воспользоваться командой RunReset (ЗапускСброс), или нажать кнопку Reset на панели Debug.

Существует несколько способов переведения редактора VBA в режим прерывания:

  1. Переход из окна сообщения об ошибке — осуществляется при помощи нажатия кнопки Debug в диалоговом окне сообщения о runtime-ошибке при его возникновении. Диалоговое окно содержит информацию о номере ошибки и краткое описание причины ее возникновения. Нажатие на кнопку Debug открывает окно кода программы. В нем желтым цветом выделен оператор, из-за которого возникла runtime-ошибка.
  2. Переход в процессе исполнения кода — путем нажатия Esc или Ctrl+Break в процессе работы программы. Стоит заметить, что в этом случае неизвестно заранее, в какой точке выполнения программа находится на данный момент времени. После прерывания исполнения программы возникает диалоговое окно сообщения об ошибке с надписью о том, что выполнение кода было прервано. Нажатие кнопки Debug в этом случае также переведет программу в режим прерывания; редактор выделит текущий выполняющийся оператор.
  3. Переход через использование точек останова. Точки останова (иногда — контрольные точки, breakpoints) — это специальным образом помеченные строки в программе, в которых ее выполнение приостанавливается. При достижении установленной точки останова VBA переключается в режим прерывания. В ходе использования таких точек та часть команд программы, которая не нуждается в проверке, выполняется с полной скоростью, и только по достижении тех операторов, работу которых необходимо тщательно проконтролировать, программа переходит в режим прерывания. Точка останова может быть помещена в любой строке программы, содержащей исполняемый оператор, работа которого служит предполагаемым источником возникновения ошибок. В разных процедурах одного проекта может быть задано несколько контрольных точек. Установить или снять точку останова можно, установив курсор вставки на строке, в которой необходимо переключение в режим прерывания, и произведя одно из следующих действий: использовав команду DebugToggle Breakpoint (ОтладкаТочка останова), нажав клавишу F9, использовав кнопку Toggle Breakpoint панели инструментов Debug или щелкнув левой кнопкой мыши на границе окна модуля напротив нужной строки. В результате совершенных действий строка выделяется темно-красным, и слева напротив нее появляется крупная точка такого же цвета. Точки останова действительны до тех пор, пока их не удалили или не закрыли рабочий проект, в котором они были установлены.
  4. Переход при использовании оператора Stop — осуществляется по достижении вставленного в текст программы оператора Stop. Этот метод напоминает предыдущий, но с той разницей, что ключевое слово Stop сохраняется при закрытии проекта, поэтому с его помощью отладку можно проводить в несколько сеансов. Когда редактор встречает оператор Stop, он приостанавливает выполнение программы и отображает модуль и процедуру, которые содержат исполняемый оператор; происходит переход в режим прерывания. После того, как отладка выполнена, все операторы Stop должны быть удалены из текста программы.


4.2.2 Пошаговое выполнение программы

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

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

Существуют четыре команды для запуска пошагового выполнения программы:

  1. DebugStep Into (ОтладкаШаг с заходом) или клавиша F8 — выполняет по одной строке программы, начиная с первой. При переходе к вызову процедуры выполняет первый ее оператор.
  2. DebugStep Over (ОтладкаШаг с обходом) или клавиши Shift+F8 — аналогично выполняет по одной строке программы, но при вызове процедуры выполняет ее как одну инструкцию. Такая команда используется при отладке в том случае, если заранее известно, что в данной процедуре ошибок нет, и позволяет сэкономить время.
  3. DebugStep Out (ОтладкаШаг с выходом) или клавиши Ctrl+Shift+F8 — используется для выхода из текущей процедуры и передает управление следующей по порядку инструкции, если она существует.
  4. DebugRun To Cursor (ОтладкаВыполнить до текущей позиции) или клавиши Ctrl+F8 — выполняет процедуру от текущего места до установленного в выбранной инструкции курсора. Благодаря этой команде есть возможность проконтролировать место остановки программы, выполнив без прерываний не содержащие ошибок инструкции.

4.2.3 Наблюдение за значениями переменных

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

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

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

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

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

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

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

Окно Call Stack (Стек вызова) позволяет просмотреть список последовательно вызванных процедур, которые привели к функции или процедуре, выполняющейся в данный момент. В этом окне кнопка Show (Показать) используется для поиска в тексте программы оператора, вызвавшего исполняемую функцию.

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

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

4.2.4 Обработчик ошибок

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

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

Ловушка прерываний устанавливается с помощью оператора On Error, указывающего на местоположение обработчика прерывания в процедуре. Для выхода из блока обработки ошибок используется оператор Resume. Важным является не только указать место возникновения ошибки в коде, но и обозначить причины ее появления. Для этого чаще всего используется объект Err и его методы Number, указывающий номер возникшей ошибки, и Description, содержащий ее краткое описание.


5. Решение задачи на ЭВМ

Функциональные возможности разработанного приложения отвечают заданным требованиям. Результат работы приложения продемонстрирован на рис. 32—40.

Рис. 32. Операция загрузки тарифов

Рис. 33. Загруженная таблица Offer_Consolidated_Item

Рис. 34. Процесс формирования маршрутной таблицы

Рис. 35. Полученный справочник направлений

Рис. 36. Сформированная таблица Route_Param

Рис. 37. Обновление маршрутов на сервере

Рис. 38. Сбор статистики соединений

Рис. 39. Сформированная таблица Tmp_Term_Stat

Рис. 40. Блокировка тарифов


ОХРАНА ТРУДА

1. Охрана труда

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

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

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

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

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

Охрана труда включает в себя следующие элементы:

  • техника безопасности;
  • санитарно-гигиенические нормы;
  • пожарная безопасность;
  • электробезопасность;
  • управление рисками профессии [16].

2. Микроклимат рабочей зоны

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

Микроклимат производственных помещений определяется:

  • относительной влажностью воздуха, измеряемой в %;
  • скоростью движения воздуха, м/с;
  • температурой воздуха, °С;
  • температурой поверхностей окружающих конструкций (стен, пола, потолка, технологического оборудования и т.д.), °С;
  • интенсивностью теплового облучения, Вт/м2.

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

Значения данных параметров в рабочей зоне производственных помещений должны соответствовать нормам, установленным в ГОСТ 12.1.005 — 76. Под рабочей зоной понимается пространство высотой до 2 метров над уровнем пола, где располагается рабочее место. Рабочее место считается постоянным, если работающий сотрудник находится за ним более половины своего рабочего времени или более двух часов непрерывно. При работе в различных местах рабочей зоны вся она считается постоянным рабочим местом.

Таблица 2

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

Сезон года

Категория работ

Температура, °С

Относительная

влажность, %

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

Холодный и переходный периоды года

Легкая — I

20—23

60—40

0,2

Средней тяжести — II а

18—20

60—40

0.2

Средней тяжести — II б

17—19

60—40

0,3

Тяжелая — III

16—18

60—40

0,3

Теплый период года

Легкая — I

22—25

60—40

0,2

Средней тяжести —II а

21—23

60—40

0,3

Средней тяжести — II б

20—22

60—40

0,4

Тяжелая — III

18—21

60—40

0,5

В рамках дипломного проекта предполагается рассмотреть факторы микроклимата рабочей зоны, влияющие на оператора персональной электронно-вычислительной машины (ПЭВМ). Данный вид работы может быть отнесен к легкой категории. Таким образом, в соответствии с таблицей 2 во время холодного периода года температура воздуха в помещении должна составлять 20—23 °С, относительная влажность воздуха — 40—60 %, скорость движения воздуха — не более 0,2 м/с.

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

Перегрев

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

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

Повышенная влажность воздуха

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

Сухость воздуха

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

Ветер и сквозняки

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

3. Рекомендации по поддержанию оптимального микроклимата

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

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

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

Теплообмен организма человека осуществляется тремя способами — путем конвекции (за счет движения воздуха и разницы температур), излучения (при помощи отдачи теплоты менее нагретым телам) и испарения пота с поверхности кожи. С учетом этих физических процессов предлагаются следующие основные методы защиты от перегрева в помещении:

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

В качестве мер индивидуальной защиты можно рассматривать:

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


ЭКОЛОГИЧЕСКАЯ ЧАСТЬ

1. Природа электромагнитного излучения

Электромагнитное излучение – процесс испускания электромагнитных волн ускоренно движущимися заряженными частицами, а также само переменное электромагнитное поле этих волн [17]. Скорость распространения электромагнитных волн в вакууме составляет 3*108 м/с, а в различных веществах – в зависимости от их магнитной проницаемости.

Полоса частот электромагнитных излучений (ЭМИ) составляет спектр (рис. 41), в котором ЭМИ характеризуются длиной волны, частотой излучения и энергией кванта [17]. Все эти величины связаны друг с другом: энергия кванта прямо пропорциональна частоте волны и обратно пропорциональна ее длине (таблица 3).

Рис. 41. Спектр ЭМИ

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

Таблица 3

Общая классификация неионизирующих электромагнитных излучений

Вид излучения

Диапазон длин волн

Диапазон частот

Энергия кванта

Ультрафиолетовое излучение

100 — 400 нм

3000 — 750 ТГц

12,4 — 3,11 эВ

Оптическое излучение

400 — 780 нм

750 — 385 ТГц

3,11 — 1,58 эВ

Инфракрасное излучение

780 нм — 0,1 мм

385 — 3 ТГц

1,58 эВ — 1,24 мэВ

Гипервысокочастотное излучение

0,1 — 1 мм

3000 — 300 ГГц

1,24 мэВ — 1240 мкэВ

Сверхвысокочастотное или микроволновое излучение

1 мм — 1 м

300 — 0,3 ГГц

1240 мкэВ — 1240 нэВ

Радиочастотное излучение

1 м — 1 км

300 — 0,3 МГц

1240 нэВ — 1240 пэВ

Низкочастотное излучение

1 — 10 км

300 кГц — 3 Гц

1240 пэВ — 12,4 фэВ

2. Источники электромагнитного излучения

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

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

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

3. Влияние электромагнитного излучения на здоровье человека

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

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

Влияние на нервную систему

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

Влияние на иммунную систему

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

Влияние на сердечно-сосудистую систему

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

Влияние на половую систему

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

4. Меры защиты от ЭМИ

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

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

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

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

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

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

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

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

5. Рекомендации для безопасной работы за ПЭВМ

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

  • Грамотно размещать мебель и технику в зонах работы и отдыха. Оптимальным является расстояние в 2—3 м от ближайшего распределительного щита или силового кабеля. Рекомендуемое пространство между задними частями видеомониторов — 2 м, между боковыми частями — не менее 1,2 м; 
  • Осуществлять в работе за компьютером каждые 2 часа перерывы продолжительностью 15—20 минут;
  • Не располагать в непосредственной близости от рабочих мест микроволновые печи и холодильники;
  • По возможности не располагать несколько электроприборов рядом, поскольку воздействие пересекающихся электромагнитных полей более вредно. Безопасным считается расстояние в 1,5 м;
  • При работе с ноутбуком избегайте класть его на колени, потому что излучение батареи аккумулятора достаточно сильное.


ЗАКЛЮЧЕНИЕ

В результате выполнения дипломного проекта была разработана подсистема динамической маршрутизации звонков в сети IP-телефонии, необходимость применения которой была выявлена при изучении функциональных возможностей биллинговой системы IP Studio AMBS, используемой компанией-оператором связи ООО "ГЛОБАЛСАТ".

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

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

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



СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Росляков А.В. IP-телефония / А.В. Росляков, М.Ю. Самсонов, И.В. Шибаева. — М.: Эко-Трендз, 2003. — 252 с.
  2. Олифер В.Г. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов. 4-е изд. / В.Г. Олифер, Н.А. Олифер. — СПб.: Питер, 2010. — 944 с.
  3. IP Studio Inc. Описание IP Studio AMBS [Электронный ресурс] / Режим доступа: http://www.ipstudio.net/index.php?option=com_content&task=view&id=69&Itemid=140, свободный. — (Дата обращения: 29.04.2015).
  4. Биллинговая система ExpertBilling. Технологии. RADIUS — служба удаленной аутентификации входящих звонков пользователей [Электронный ресурс] / Режим доступа: http://expertbilling.ru/page/radius.html, свободный. — (Дата обращения: 29.04.2015).
  5. Издание CNews. MERA Systems: Решения для VoIP-операторов [Электронный ресурс] / Режим доступа: http://www.cnews.ru/reviews/free/voip/s/mera/#transit, свободный. — (Дата обращения: 29.04.2015).
  6. Библиотека официальной технической документации MSDN Microsoft. Интерфейс ODBC. [Электронный ресурс] / Режим доступа: https://msdn.microsoft.com/ru-ru/library/s9ds2ktb.aspx, свободный. — (Дата обращения: 10.04.2015).
  7. Фиайли К. SQL / К. Фиайли: Пер. с англ. — М.: ДМК Пресс, 2003. — 456 с.
  8. Грофф Дж. SQL: Полное руководство / Дж. Грофф, П. Вайнберг: Пер. с англ. — 2-е изд., перераб. и доп. — К.: Издательская группа BHV, 2001. — 816 c.
  9. Библиотека официальной технической документации MSDN Microsoft. Microsoft.VisualBasic — пространство имен. [Электронный ресурс] / Режим доступа: https://msdn.microsoft.com/ru-ru/library/Microsoft.VisualBasic(v=vs.110).aspx, свободный. — (Дата обращения: 09.04.2015).
  10. Гандерлой М. Автоматизация Microsoft Access с помощью VBA / М. Гандерлой, С.С. Харкинз: Пер. с англ. — М.: Издательский дом "Вильямс", 2006. — 416 с.
  11. Тимошок Т.В. Microsoft Access 2003. Самоучитель / Т.В. Тимошок. — М.: Издательский дом "Вильямс" , 2004. — 464 с.
  12. Служба поддержки Microsoft.  Microsoft Access. [Электронный ресурс] / Режим доступа: http://support.microsoft.com/ru-ru/kb/831858/ru, свободный. — (Дата обращения: 11.04.2015).
  13. Гультяев А.К. Проектирование и дизайн пользовательского интерфейса / А.К. Гультяев, В.А. Машин. — М.: Корона-Принт, 2007. — 352 с.
  14. Кузьменко В.Г. Программирование на VBA 2002 / В.Г. Кузьменко. — М.: ООО "Бином-Пресс", 2003. — 880 с.
  15. Трудовой кодекс Российской Федерации от 30 декабря 2001 г. № 197-ФЗ // Собрание законодательства Российской Федерации. — 2002. — № 1 (часть I) ст. 3. — Ст. 209.
  16. Российская энциклопедия по охране труда: В 3-х т. / Рук. проекта М.Ю. Зурабов; Отв. ред. А.Л. Сафонов. — 2-е изд., перераб. и доп. — М.: Издательство НЦ ЭНАС, 2007.
  17. Кудряшов Ю.Б. Радиационная биофизика: радиочастотные и микроволновые электромагнитные излучения. Учебник для ВУЗов / Ю.Б. Кудряшов, Ю.Ф. Перов, А.Б. Рубин. — М.: ФИЗМАТЛИТ, 2008. — 184 с.


ПРИЛОЖЕНИЕ 1

СОДЕРЖИМОЕ ВНЕШНЕГО МОДУЛЯ

Public Function RatesExtrapolation(RateApproxMode As Integer) As Integer

' Экстраполяция тарифов в матрице консолидированного предл-я Offer_Consolidated

' от старших префиксов к младшим (от коротких к длинным)

' RateApproxMode - режим экстраполяции тарифов:

' RateApproxMode = 1 - по Prefix без ограничений

' RateApproxMode = 2 - с ограничениями по типу Prefix (используется вспомогательный справочник Offer_Consolidated_Dest)

Const Process As String = "Экстраполяция тарифов " 'заголовок процесса

Dim DB As Database 'текущая база данных

Dim rsExt As Recordset 'рекордсет основной матрицы

Dim rsInt As Recordset 'рекордсет для определения границ экстраполяции

Dim rstParent As Recordset 'рекордсет "родительской" мини-матрицы

Dim MinPrefix As String, MaxPrefix As String 'границы отрезка экстраполяции

Dim MyApproxGrp As String 'критерий экстраполяции

Dim i As Long, k As Integer 'счетчики записей и столбцов

Dim TotalRec As Long, TotalFld As Long 'границы основной матрицы

Dim MySQL As String, FldName As String, Crit As String 'контекстные переменные

Dim FLD As Field 'текущее поле

RatesExtrapolation = 0

Set DB = CurrentDb

Set rsExt = DB.OpenRecordset("Offer_Consolidated", dbOpenSnapshot)

'Подсчет кол-ва рабочих столбцов в матрице консолидированного предл-я

TotalFld = -1

For Each FLD In rsExt.Fields

TotalFld = TotalFld + 1

Next

'Сканирование столбцов

k = 0

For Each FLD In rsExt.Fields

FldName = FLD.Name

If FldName <> "Prefix" Then

k = k + 1

'Определение минимальной длины префикса, мин и макс префикса

MySQL = "SELECT Min(Len(Offer_Consolidated_Dest.Prefix)) AS MinLen, Min(Offer_Consolidated_Dest.Prefix) AS MinPrefix, Max(Offer_Consolidated_Dest.COUNTRY_CODE)+1 AS MaxPrefix FROM Offer_Consolidated INNER JOIN Offer_Consolidated_Dest ON Offer_Consolidated.Prefix = Offer_Consolidated_Dest.Prefix WHERE Not [" + FldName + "] Is Null;"

If TableSize(MySQL) = 0 Then

MinPrefix = ""

MaxPrefix = ""

Else

Set rsInt = DB.OpenRecordset(MySQL, dbOpenSnapshot)

rsInt.MoveFirst

MinLenPrefix = rsInt("MinLen")

MinPrefix = rsInt("MinPrefix")

MaxPrefix = rsInt("MaxPrefix")

rsInt.Close

End If

'Сканирование рабочих записей данного столбца

Select Case RateApproxMode

Case 1:

MySQL = "SELECT Prefix, [" + FldName + "] AS Rate FROM Offer_Consolidated WHERE Prefix Between '" + MinPrefix + "' And '" + MaxPrefix + "' AND [" + FldName + "] Is Null ORDER BY Prefix DESC;"

Case 2:

MySQL = "SELECT Offer_Consolidated_Dest.COUNTRY_CODE + Offer_Consolidated_Dest.DEST_TYPE AS ApproxGrp, Offer_Consolidated_Dest.Prefix, [" + FldName + "] AS Rate FROM Offer_Consolidated INNER JOIN Offer_Consolidated_Dest ON Offer_Consolidated.Prefix = Offer_Consolidated_Dest.Prefix WHERE Offer_Consolidated_Dest.Prefix Between '" + MinPrefix + "' And '" + MaxPrefix + "' AND [" + FldName + "] Is Null ORDER BY Offer_Consolidated_Dest.Prefix DESC;"

End Select

TotalRec = TableSize(MySQL)

If TotalRec > 0 Then

'инициация индикатора

V = SysCmd(acSysCmdInitMeter, Process + " - " + CStr(k) + "/" + CStr(TotalFld) + " (" + CStr(TotalRec) + ")", TotalRec)

'получатель

Set rsInt = DB.OpenRecordset(MySQL, dbOpenDynaset)

'источник

Select Case RateApproxMode

Case 1:

'экстраполяция без ограничений

MySQL = "SELECT Prefix, [" + FldName + "] AS Rate FROM Offer_Consolidated WHERE Not [" + FldName + "] Is Null ORDER BY Prefix DESC;"

Case 2:

'экстраполяция с ограничениями по типу префикса

MySQL = "SELECT Offer_Consolidated_Dest.COUNTRY_CODE+Offer_Consolidated_Dest.DEST_TYPE AS ApproxGrp, Offer_Consolidated_Dest.Prefix, [" + FldName + "] AS Rate FROM Offer_Consolidated INNER JOIN Offer_Consolidated_Dest ON Offer_Consolidated.Prefix = Offer_Consolidated_Dest.Prefix WHERE Not [" + FldName + "] Is Null ORDER BY Offer_Consolidated_Dest.Prefix DESC;"

End Select

Set rstParent = DB.OpenRecordset(MySQL, dbOpenSnapshot)

i = 1

rsInt.MoveFirst

Do Until rsInt.EOF

MyPrefix = rsInt("Prefix")

CurLenPrefix = Len(MyPrefix)

If RateApproxMode > 1 Then MyApproxGrp = rsInt("ApproxGrp")

Do While CurLenPrefix > MinLenPrefix

CurLenPrefix = CurLenPrefix - 1

MyPrefix = Left(MyPrefix, CurLenPrefix)

Crit = "Prefix='" + MyPrefix + "'"

If RateApproxMode > 1 Then Crit = Crit + " AND ApproxGrp='" + MyApproxGrp + "'"

rstParent.FindFirst Crit

If Not rstParent.NoMatch Then

rsInt.Edit

rsInt("Rate") = rstParent("Rate")

rsInt.Update

Exit Do

End If

Loop

' обновление индикатора

V = SysCmd(acSysCmdUpdateMeter, i)

i = i + 1

rsInt.MoveNext

Loop

rstParent.Close

rsInt.Close

V = SysCmd(acSysCmdRemoveMeter)

End If

End If

Next

rsExt.Close

DB.Close

End Function

Public Function Route_List(tblNameIN As String, tblNameOUT As String, MaxRow As Integer) As Integer

' Формирование таблицы LCR (Least Cost Routing)

' tblNameIN - имя таблицы исходных данных

' tblNameOUT - имя таблицы результатов

' MaxRow - кол-во маршрутов в выходной таблице (не более 10)

' Описание используемых переменных

Const Process As String = "Формирование LCR " 'заголовок индикатора процесса

Dim DB As Database 'текущая база данных

Dim FLD As Field 'текущее поле

Dim rsIN As Recordset, rsOUT As Recordset 'рекордсеты вх и вых таблиц

Dim i As Long, TotalRec As Long 'счетчик и общее число записей

Dim RouteList(1 to 10) As String 'список маршрутов

Dim RateList(1 to 10) As Integer 'список тарифов

Dim j As Integer, k As Integer 'счетчики маршрутов (j,k=1..MaxRow)

Dim isNewRoute As Boolean 'признак нового маршрута

' Инициация переменных

Route_List = 0

Call ClearTable(tblNameOUT)

Set DB = CurrentDb

Set rsIN = DB.OpenRecordset(tblNameIN, dbOpenSnapshot)

Set rsOUT = DB.OpenRecordset(tblNameOUT, dbOpenDynaset)

' Инициация индикатора

rsIN.MoveLast

TotalRec = rsIN.RecordCount 'подсчет кол-ва записей входной таблицы

V = SysCmd(acSysCmdInitMeter, Process + " - " + CStr(TotalRec), TotalRec)

i = 1

rsIN.MoveFirst

' Организация цикла по всем записям (префиксам)

Do Until rsIN.EOF

' инициация Списков тарифов и маршрутов

For k = 1 To MaxRow

RateList(k) = 999

RouteList(k) = ""

Next

' Выбор маршрутов в порядке возрастания их тарифов

For k = 1 To MaxRow

For Each FLD In rsIN.Fields

If FLD.Name <> "Prefix" And (Not IsNull(FLD.Value)) Then

' маршрут новый? (не использован на ранних выборах)

isNewRoute = True

For j = 1 To k

If FLD.Name = RouteList(j) Then isNewRoute = False

Next j

If (FLD.Value < RateList(k)) And isNewRoute Then

RateList(k) = FLD.Value

RouteList(k) = FLD.Name

End If

End If

Next

Next k

' запись результата поиска в выходную таблицу

If RateList(1) < 999 Then

rsOUT.AddNew

rsOUT("Prefix") = rsIN("Prefix")

For k = 1 To MaxRow

If RateList(k) < 999 Then

rsOUT("Rate" + CStr(k)) = RateList(k)

rsOUT("Route" + CStr(k)) = RouteList(k)

End If

Next k

rsOUT.Update

End If

' обновление индикатора процесса

i = i + 1

V = SysCmd(acSysCmdUpdateMeter, i)

rsIN.MoveNext

Loop 'rsIN

V = SysCmd(acSysCmdRemoveMeter)

rsIN.Close

rsOUT.Close

DB.Close

End Function


ПРИЛОЖЕНИЕ 2

СОДЕРЖИМОЕ МОДУЛЯ ФОРМЫ

Option Compare Database

Private Sub Form_Open(Cancel As Integer)

Dim DB As Database

'Сокрытие окна БД и формирование заголовка приложения

Set DB = CurrentDb

DB.Properties("StartUpShowDBWindow") = False

'Получение имени папки запуска приложения (для временных файлов БД)

StartPath = DBEngine.Workspaces(0).Databases(0).Name

While Right(StartPath, 1) <> "\": StartPath = Left(StartPath, Len(StartPath) - 1): Wend

'Обнуление индикатора

V = SysCmd(acSysCmdRemoveMeter)

'Установка фокуса на 1-й кнопке

Me!btnDownload.SetFocus

End Sub

Private Sub btnCallStat_Click()

Const Process As String = "Загрузка статистики соединений"

Dim DB As Database

Dim QD As QueryDef

'Проверка наличия связи с сервером

If TableSize("isConnect") < 0 Then MsgBox PMsgNoConnect, vbExclamation, Process: Exit Sub

'Запрос подтверждения операции

If MsgBox(PMsgDoAction, vbQuestion + vbYesNo, Process) = vbNo Then Exit Sub

'Загрузка статистики соединений в AMBS_tmp_Term_Stat

V = SysCmd(acSysCmdSetStatus, Process)

BegDate = Me!DatеStart ' начальная дата выборки

EndDate = Me!DatеEnd ' конечная дата выборки

MinAttempt = Me!MinAtt ' мин число попыток соединений по каждому направлению

MinASR = Me!Min_ASR ' минимальный ASR

MinACD = Me!Min_ACD ' минимальный ACD

Set DB = CurrentDb

DB.Execute "DELETE * FROM Tmp_Term_Stat;"

Set QD = DB.QueryDefs("qryAMBS_CDR_Stat_add"): QD.Execute: QD.Close ' выборка без фильтров MinASR и MinACD

Set QD = DB.QueryDefs("qryAMBS_CDR_Stat_del"): QD.Execute: QD.Close ' удаление по фильтрам MinASR и MinACD

V = SysCmd(acSysCmdRemoveMeter)

DB.Close

MsgBox PMsgComplete, vbInformation, Process

End Sub

Private Sub btnDownload_Click()

Const Process As String = "Загрузка тарифов из AMBS"

Dim DB As Database

Dim QD As QueryDef

Dim TotalRecOld As Long 'число записей в буфере до загрузки

Dim TotalRecNew As Long 'число записей в буфере после загрузки

'Проверка наличия связи с сервером

If TableSize("isConnect") < 0 Then MsgBox PMsgNoConnect, vbExclamation, Process: Exit Sub

'Запрос подтверждения операции

If MsgBox(PMsgDoAction, vbQuestion + vbYesNo, Process) = vbNo Then Exit Sub

Set DB = CurrentDb

TotalRecOld = TableSize("Offer_Consolidated_Item")

If TotalRecOld > 0 Then

If MsgBox("Найдено записей в буфере загрузки: " + CStr(TotalRecOld) + EOL() + EOL() + "Удалить предыдущую загрузку?", vbQuestion + vbYesNo, Process) = vbYes Then

DB.Execute "DELETE * FROM Offer_Consolidated_Item;"

End If

End If

'Выборка актуальных тарифов из БД сервера и загрузка в Offer_Consolidated_Item

V = SysCmd(acSysCmdSetStatus, Process)

CurDate = Me!DateSelect ' выборка тарифов, активных на дату

MyPrefix = CStr(Me!PrefixMask) + "*" ' маска телефонного кода

MyVolume = Me!RateUSD ' Курс для тарифов в USD

Set QD = DB.QueryDefs("qryAMBS_Rates_Add"): QD.Execute: QD.Close

TotalRecNew = TableSize("Offer_Consolidated_Item")

V = SysCmd(acSysCmdRemoveMeter)

DB.Close

MsgBox PMsgComplete + EOL() + EOL() + "Добавлено записей в буфер: " + CStr(TotalRecNew - TotalRecOld), vbInformation, Process

End Sub

Private Sub btnLCR_Click()

Const Process As String = "Формирование таблицы LCR"

Const TmpDB As String = "TmpRoute0.mdb"

Dim WS As Workspace

Dim DB As Database, TempDB As Database

Dim QD As QueryDef

Dim MaxRow As Integer

Dim TmpFile As String

'Проверка наличия исходных данных

If TableSize("Offer_Consolidated_Item") = 0 Then MsgBox "Не загружены тарифы!", vbCritical, Process: Exit Sub

'Запрос подтверждения операции

If MsgBox(PMsgDoAction, vbQuestion + vbYesNo, Process) = vbNo Then Exit Sub

'Удаление файла временной БД, хранящей старую версию Offer_Consolidated

TmpFile = StartPath & TmpDB

Kill TmpFile

btnUpload.SetFocus

btnLCR.Enabled = False

Set DB = CurrentDb

Set WS = Workspaces(0)

'Создание новой временной БД для формирования Offer_Consolidated

Set TempDB = WS.CreateDatabase(TmpFile, dbLangGeneral)

'Создание сводной матрицы тарифов Offer_Consolidated из Offer_Consolidated_Item

V = SysCmd(acSysCmdSetStatus, Process & " : сводной матрицы тарифов")

DB.Execute "SELECT * INTO Offer_Consolidated IN '" + TmpFile + "' FROM qryAMBS_Rates_Consolidated;"

'Создание локального справочника направлений Offer_Consolidated_Dest

V = SysCmd(acSysCmdSetStatus, Process & " : создание справочника типов направлений")

DB.Execute "DELETE * FROM Offer_Consolidated_Dest;"

Set QD = DB.QueryDefs("qryAMBS_Rates_Dest_Add"): QD.Execute: QD.Close

'Экстраполяция тарифов в Offer_Consolidated по выбранному методу

If grpPrefixApproxMode > 0 Then

Call RatesExtrapolation(grpPrefixApproxMode)

End If

'Создание списка маршрутов Route_List из Offer_Consolidated

MaxRow = Me!MaxRow 'предельное количество выбранных маршрутов

Call Route_List("Offer_Consolidated", "Route_List", MaxRow)

'Создание таблицы маршрутов Route_Param из Route_List (текстовые поля)

V = SysCmd(acSysCmdSetStatus, Process & " : создание таблицы маршрутов")

DB.Execute "DELETE * FROM Route_Param;"

Set QD = DB.QueryDefs("qryRoute_Param_Add"): QD.Execute: QD.Close

TempDB.Close

DB.Close

V = SysCmd(acSysCmdRemoveMeter)

btnLCR.Enabled = True

DoCmd.OpenTable "Route_Param", acViewNormal

MsgBox PMsgComplete, vbInformation, Process

End Sub

Private Sub btnRateBlock_Click()

Const Process As String = "Блокировка нерабочих предложений"

Dim DB As Database

Dim QD As QueryDef

'Проверка наличия связи с сервером

If TableSize("isConnect") < 0 Then MsgBox PMsgNoConnect, vbExclamation, Process: Exit Sub

'Запрос подтверждения операции

If MsgBox(PMsgDoAction, vbQuestion + vbYesNo, Process) = vbNo Then Exit Sub

'Блокировка тарифов нерабочих напр-й в AMBS_RATES на основе AMBS_tmp_Term_Stat

V = SysCmd(acSysCmdSetStatus, Process)

Set DB = CurrentDb

Set QD = DB.QueryDefs("qryAMBS_Rates_Block"): QD.Execute: QD.Close

V = SysCmd(acSysCmdRemoveMeter)

DB.Close

MsgBox PMsgComplete, vbInformation, Process

End Sub

Private Sub btnStatEdit_Click()

DoCmd.OpenTable "Tmp_Term_Stat", acViewNormal

End Sub

Private Sub btnUpload_Click()

Const Process As String = "Выгрузка маршрутов"

Dim DB As Database

Dim QD As QueryDef

'Проверка наличия связи с сервером

If TableSize("isConnect") < 0 Then MsgBox PMsgNoConnect, vbExclamation, Process: Exit Sub

'Запрос подтверждения операции

If MsgBox(PMsgDoAction, vbQuestion + vbYesNo, Process) = vbNo Then Exit Sub

V = SysCmd(acSysCmdSetStatus, Process)

Set DB = CurrentDb

'Создание таблицы маршрутов Route_Param из Route_List

V = SysCmd(acSysCmdSetStatus, Process & " : оцифровка направлений и маршрутов")

Set QD = DB.QueryDefs("qryRoute_Param_Upd"): QD.Execute: QD.Close

'Удаление старых маршрутов из AMBS_rparam

V = SysCmd(acSysCmdSetStatus, Process & " : удаление старых маршрутов на сервере")

Set QD = DB.QueryDefs("qryAMBS_Routes_del"): QD.Execute: QD.Close

'Выгрузка новых маршрутов в AMBS_rparam

V = SysCmd(acSysCmdSetStatus, Process & " : добавление новых маршрутов на сервер")

Set QD = DB.QueryDefs("qryAMBS_Routes_Upload"): QD.Execute: QD.Close

V = SysCmd(acSysCmdRemoveMeter)

DB.Close

MsgBox PMsgComplete, vbInformation, Process

End Sub

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