Автоматизированная система управления медицинского страхования
Введение
В соответствие с Законом РФ «О
медицинском страховании граждан в Российской Федерации» обязательное
медицинское страхование (ОМС) является составной частью государственной системы
социального страхования.
Все граждане РФ независимо от пола,
возраста, состояния здоровья, места жительства, уровня личного дохода, имеют
право на бесплатное получение медицинских услуг, включенных в государственную
программу ОМС. Нормы, касающиеся обязательного медицинского страхования,
распространяются на всех взрослых граждан с момента заключения с ними трудового
соглашения, а также на детей.
Средства ОМС находятся в
государственной собственности РФ. Для реализации государственной политики в
области ОМС созданы Федеральный и территориальный фонды обязательного медицинского
страхования как самостоятельные некоммерческие финансово-кредитные учреждения.
На территории Хабаровского края
обязательным медицинским страхованием занимается Хабаровский краевой фонд
обязательного медицинского страхования (ХКФОМС). Основными задачами краевого
фонда являются:
обеспечение
реализации Закона Российской Федерации «О медицинском страхование граждан в
Российской Федерации»;
обеспечение
предусмотренных федеральным законодательством прав граждан в системе
обязательного медицинского страхования;
обеспечение
всеобщности обязательного медицинского страхования граждан;
обеспечение
финансовой устойчивости системы обязательного медицинского страхования;
достижение
социальной справедливости и равенства всех граждан в системе обязательного медицинского
страхования.
Информационный контур формирования
сводного регистра застрахованных на территории края является трехуровневым.
Субъектами первого (нижнего) уровня
являются пункты регистрации застрахованных (ПРЗ) в качестве которых выступают
представительства филиалов Хабаровского краевого фонда ОМС. ПРЗ непосредственно
заключают договоры с предприятиями плательщиками на страхование сотрудников,
регистрируют договоры, выдают полисы ОМС сотрудникам предприятий, регистрируют
застрахованных, для страхования неработающего населения заключаются договоры с
администрацией территории.
Программное обеспечение филиала
должно обеспечивать:
а) ввод в базу данных реквизитов
договоров с предприятиями плательщиками;
б) присвоение уникального
номера каждому договору в рамках территории;
в) ввод в базу данных
реквизитов застрахованных;
г) присвоение уникального
номера каждому застрахованному в рамках территории;
д) передавать в электронном
виде в соответствии с определённым форматом изменения в регистре договоров и регистре
застрахованных;
е) принимать в соответствии с
протоколом результаты приема регистров от субъектов верхних уровней.
Субъектами второго (среднего) уровня
являются филиалы ХКОФМС. На уровне филиала непосредственно договоры не
регистрируются и полисы ОМС не выдаются, а проводится агрегирование и проверка
информации от ПРЗ, относящихся к данному филиалу с последующей передачей её в
ХКФОМС.
Программное обеспечение филиала
должно обеспечивать:
а) приём информации от всех
подчинённых ПРЗ в установленном формате;
б) проверка представленной
информации;
в) агрегирование всех регистров
в единый регистр договоров (ЕРД) филиала;
г) агрегирование всех
регистров в единый регистр застрахованных (ЕРЗ) филиала;
д) передача ЕРД и ЕРЗ в
установленном формате в ХКФОМС.
Субъектами третьего (верхнего)
уровня является ХКФОМС, на уровне которого производится агрегирование сводного
регистра застрахованных (СРЗ).
Программное обеспечение ТФОМС должно
обеспечивать:
а) ведение и формирование
сводного регистра жителей территории и предприятий плательщиков;
б) ежемесячное формирование СРД
и СРЗ по итогам приема и обработки ЕРД и ЕРЗ от всех филиалов;
в) формирование текущего ЕРД и
ЕРЗ для каждого филиала (по запросу);
г) формирование отчётных
документов.
1. Постановка задачи
.1 Введение
Разрабатываемый программный комплекс
предназначен для замены устаревшего программного обеспечения «Программа учёта
выдачи полисов ОМС» работающего в системе MS-DOS и написанного на языке
программирования Clipper.
Clipper - система программирования приложений в среде БД, включающая в
себя быстрый компилятор программ. Система Clipper представляет собой, по
существу, СУБД компилирующего типа с автономным языком, в значительной мере
совместимую по входному языку программирования и организации базы данных с СУБД
dBaseIII PLUS. Clipper работает в среде операционной системы MS DOS версии 2.0
и выше. В компиляции текстов программ на исходном языке он порождает
загрузочные программные модули, не требующие каких-либо системных средств на
стадии исполнения. Язык программирования Clipper позволяет создавать
отдельные программы, пакеты программ и независимые информационные системы
благодаря возможности манипулирования файлами различных типов - таблиц данных
(.dbf), «примечания» (.dbt), индексов (.ntx), форм и отчетов (.frm), временных
переменных (.mem) и текстов (.txt).
К недостаткам использования в
качестве СУБД Clipper, можно отнести следующее:
все
рабочие файлы находятся на файл-сервере, в данном случае на локальной машине
размещения программного обеспечения;
база
данных является однопользовательской;
низкий
уровень обеспечения безопасности;
проблемы
с русской кодировкой;
проблемы
с масштабированием;
отсутствие
параллельной обработки данных;
невозможность
распределённой обработки данных.
Заменяемое программное обеспечение,
написанное на языке программирования баз данных Clipper, имеет ряд существенных
недостатков:
база
данных не является нормализованной, так как присутствует избыточность и
дублирование информации. В результате ввода не корректных и противоречивых
данных возникает нарушения целостности данных.
не
отвечает требованиям, предъявляемым к информационной безопасности -
безопасность данных обеспечивается на программном уровне, что не может
обеспечить необходимый уровень безопасности, так как таблицы базы данных
хранятся в открытом виде в файлах с расширением dbf, для модификации
которых достаточно открыть их в любом dbf-редакторе.
низкая
скорость обработки данных;
неудобный
пользовательский интерфейс;
Разрабатываемый программный комплекс
«АСУ медицинского страхования» работающий под управлением СУБД MS SQL Server 2005 лишён всех выше
перечисленных недостатков. Преимущества перехода от СУБД Clipper к СУБД MS SQL Server 2005, следующие:
оптимизированный
многопользовательский режим работы с развитой системой транзакционной обработки
данных, что обеспечивает одновременную работу с базой данных большого числа
пользователей;
надёжные
средства защиты информации;
эффективные
инструменты для разграничения доступа к БД;
поддержка
широкого диапазона аппаратно - программных платформ;
развитые
средства управления, контроля, мониторинга и администрирования сервера БД;
поддержка
таких эффективных инструментариев, как: триггеры, функции, хранимые процедуры,
представления, курсоры, язык Transact - SQL;
масштабируемость.
застрахованный программный
автоматизированный медицинский
1.1.1 Цель проекта и
область применения
Необходимо разработать модули,
обеспечивающие:
импорт
данных из Clipper в MS SQL Server 2005;
подготовка
файлов регистра застрахованных и регистра договоров для передачи в
представительства и филиалы ХКФОМС;
приём
файлов регистра застрахованных и регистра договоров из представительств и
филиалов ТФОМС;
формирование
отчётных документов;
регистрация
пользователей на сервере;
установка
прав доступа пользователей на инструкции и объекты базы данных.
Разрабатываемые модули являются
частью программного комплекса «АСУ медицинского страхования», предназначенного
для замены устаревшего программного обеспечения используемого в страховой
медицинской компании «Газпроммедтсрах» и обеспечивающего распределённую
обработку данных.
1.1.2 Термины и
сокращения
АСУ - автоматизированная система
управления.
БД - база данных.
ИФС - информационно - функциональная
схема.
ЛПУ - лечебно профилактическое
учреждение.
РД - регистр договоров.
РЗ - регистр застрахованных.
ПРЗ - пункт регистрации
застрахованных.
ПО - программное обеспечение.
ПС - программное средство.
ОМС - обязательное медицинское
страхование.
ОС - операционная система.
СМО - страховая медицинская
организация.
СУБД - система управления базами
данных.
ТФОМС - территориальный фонд
обязательного медицинского страхования.
ХКФОМС - Хабаровский краевой фонд
обязательного медицинского страхования.
1.1.3 Краткий обзор
Необходимо разработать программный
комплекс, предназначенный для осуществления основных функций СМО: функции
страхования, функции контроля за выполнением условий договоров со
страхователями и медицинскими учреждениями, функции формирования отчётов СМО в
ТФОМС.
Функции пунктов выдачи страховых
медицинских полисов ОМС:
регистрация
граждан, застрахованных по ОМС, выдача и учёт движения страховых медицинских
полисов ОМС;
регистрация
договоров ОМС граждан, заключённых между СМО и юридическим или физическим лицом
- плательщиком единого социального налога;
регистрация
договоров на предоставление лечебно-профилактической помощи (медицинских услуг)
гражданам, застрахованным по ОМС, заключённых между МСО и медицинским
учреждением;
формирование
и ведение баз данных застрахованных по ОМС граждан, договоров страхования и
договоров на оказание медицинской помощи застрахованным гражданам (ввод,
изменение, удаление записей);
контроль
баз данных - формирование результатов запросов к базам данных по заданным
пользователем критериям.
Функции головных СМО:
формирование
сводных баз по страховой медицинской организации;
формирование
отчётов СМО в ТФОМС о численности застрахованных, движении страховых
медицинских полисов, операциях по обязательному медицинскому страхованию;
1.2 Общее описание
.2.1 Обзор программного
средства
Аппаратный и программный интерфейсы
Разрабатываемый программный комплекс
предназначен для работы под управлением ОС Microsoft Windows NT/2k/XP, обеспечивающей
взаимодействие с аппаратными средствами компьютера. База данных работает под
управлением СУБД MS SQL Server 2005, расположенной на специально выделенном
компьютере сервере. Между компьютерами пользователей и сервером будут постоянно
осуществляться сетевые взаимодействия в рамках локальной вычислительной сети. В
качестве протокола передачи данных необходимо использовать стек протоколов
управления передачей TCP/IP.
Для взаимодействия с базами данных
СУБД MS SQL Server 2005 и СУБД Clipper используется технология ADO.NET. Для доступа к MS SQL Server технология ADO.NET использует источник данных SQL Managed Provider, а для доступа к Clipper - ADO Managed Provider. SQL Managed Provider
работает по специальному протоколу, называемому TabularData Stream (TDS) и
ориентированному на работу с MS SQL Server, что позволяет увеличить скорость передачи данных и тем самым
повысить общую производительность приложения. ADO Managed Provider -
предназначен для работы с произвольной базой данных, за счёт своей
универсальности имеет проигрыш в производительности по сравнению с SQL Managed
Provider. Для работы программного комплекса необходимо установить на машине
клиента Microsoft Windows®.NET Framework 2.0, основными компонентами которой являются общеязыковая среда
выполнения и библиотека классов. Общеязыковая среда выполнения управляет кодом во
время работы приложения, а также обеспечивает управление памятью, управление
потоками и удалённое взаимодействие. Библиотека классов представляет коллекцию
многократно используемых типов, которые надежно интегрируются с общеязыковой
средой выполнения.
Требования к
адаптации рабочих мест
Предъявляются следующие требования:
- операционная система Windows NT/2k/XP;
- NET. Framework версии 2.0 - набор библиотек и системных компонентов, необходимых
для работы приложений, созданных на платформе.NET. Компоненты этой платформы
используются в процессе работы программного комплекса;
- наличие сетевого
соединения по протоколу TCP/IP между компьютерами в сети.
1.2.2 Характеристики
пользователя
Пользователями программного
комплекса «АСУ медицинского страхования», являются сотрудники СМО. Все
пользователи должны обладать элементарными навыками работы на компьютере.
Пользователями программного
комплекса являются:
системный
администратор организации, владеющий профессиональными навыками работы с СУБД MS SQL Server и ОС семейства Windows;
оператор
- работа с клиентами, ведение БД;
секретарь
- контроль соблюдения нормативных документов.
1.2.3 Пользовательский
интерфейс
На рисунке 1 представлена главная
экранная форма программного комплекса.
Рисунок 1 - Главная экранная форма
программного комплекса «АСУ медицинского страхования»
На главной экранной форме
представлено:
строка
меню - предоставляет доступ к основным командам, выполняемым программным
комплексом;
панель
инструментов «База данных» - панель с кнопками предназначенными для выполнения
команд над таблицами (добавление записи, редактирование записи, удаление
записи, поиск данных в таблице, быстрый поиск данных в таблице, фильтрация
данных в таблице, отмена изменений в таблице);
графическое
окно - служит для представления табличной информации;
строка
состояния - вывод вспомогательной информации по выполняемым задачам, вывод
подсказок к пунктам меню.
Импорт данных из Clipper в SQL Server 2005
Для выполнения импорта данных
необходимо выбрать пункт меню «Файл->Импорт базы данных», после чего
пользователю необходимо в диалоговом окне (рисунок 2) указать папку в качестве
источника данных. Выбрав папку, можно выполнить одно из следующих действий:
- «Отмена» - произойдёт закрытие
диалогового окна и отмена выполнения импорта данных;
«ОК» - произойдёт закрытие
диалогового окна и начнётся процесс импорта данных.
При импорте данных, все не
обработанные записи РЗ и РД будут занесены в лог-файл. По завершению импорта
данных будет выведено диалоговое окно, информирующее о завершение задачи. Если
какие-то записи будут не обработаны, то в диалоговом окне (рисунок 3) будет
указано количество не обработанных записей, а так же будет предложено открыть
лог-файл.
Рисунок 2 - Выбор папки источника
данных
Рисунок 3 - Завершение импорта
данных
Формирование файла регистра
договоров
Выбрав пункт меню «Файл ->
Сводный регистр договоров -> Экспорт данных в файл», на экране появится
форма (рисунок 4), где будет предложено выбрать период регистрации договоров.
Далее необходимо указать период и выполнить одно из следующих действий:
нажав кнопку «Отмена» произойдёт
закрытие формы и отмена выполнения формирования файла РД;
нажав кнопку «ОК» начнётся процесс
формирования файла РД, по окончании которого на экране появится окно (рисунок
5), информирующее о завершение выполнения задачи и количестве обработанных
записей.
Рисунок 4 - Выбор периода регистрации
договоров
Рисунок 5 - Сообщение о завершение
выполнения задачи
Формирование файла регистра
застрахованных
Выбрав пункт меню «Файл ->
Сводный регистр застрахованных -> Экспорт данных в файл», на экране появится
форма (рисунок 6), где будет предложено выбрать период регистрации
застрахованных. Далее необходимо указать период и выполнить одно из следующих
действий:
нажав кнопку «Отмена» произойдёт
закрытие формы и отмена выполнения формирования файла РЗ;
нажав кнопку «ОК» начнётся процесс
формирования файла РЗ, по окончании которого на экране появится окно (рисунок
7), информирующее о завершение выполнения задачи и количестве обработанных
записей.
Рисунок 6 - Выбор периода
регистрации застрахованных
Рисунок 7 - Сообщение о завершение
выполнения задачи
Приём файла регистра договоров
Выбрав пункт меню «Файл ->
Сводный регистр договоров -> Импорт данных из файла», на экране появится
форма (рисунок 8), где необходимо выбрать файл РД. Выбрав файл и нажав кнопку
«Открыть», на экране появится диалоговое окно с вопросом на подтверждение
выполнения извлечения данных. Нажав кнопку «ОК» произойдёт извлечение данных.
По окончании извлечения данных, пользователь будет проинформирован о завершение
операции. Если во время выполнения извлечения данных происходит сбой, то по
завершении данной операции на экране появляется окно (рисунок 9), информирующее
о количестве не обработанных записей, так же будет предложено просмотреть лог-файл.
Рисунок 8 - Выбор файла РД
Рисунок 9 - Неудачное извлечение
данных
Приём файла регистра застрахованных
Выбрав пункт меню «Файл ->
Сводный регистр застрахованных -> Импорт данных из файла», на экране
появится форма (рисунок 10), где необходимо выбрать файл РЗ. Выбрав файл и
нажав кнопку «Открыть», на экране появится диалоговое окно с вопросом на
подтверждение выполнения извлечения данных. Нажав кнопку «ОК» произойдёт
извлечение данных. При успешном выполнение извлечения данных, появится
диалоговое окно с сообщением о завершение операции извлечения данных. Если во
время выполнения извлечения данных происходит сбой, то по завершении данной
операции на экране появляется окно (рисунок 11), информирующее о количестве не
обработанных записей, так же будет предложено просмотреть лог-файл.
Рисунок 10 - Выбор файла РЗ
Рисунок 11 - Неудачное извлечение
данных
Формирование отчётов
При формировании отчёта РЗ,
предоставляется полная информация о численности застрахованных по: району
выдачи, району проживания, ЛПУ, предприятиям.
Формирование бланков для
страховых медицинских полисов
Выбрав пункт меню «Файл -> Отчёты
-> Страховой полис» на экране появится диалоговое окно (рисунок 12), для
выбора критерия формирования полиса:
период
- период регистрации полисов
При отсутствии зарегистрированных
полисов за отчётный период, будет показан пустой бланк;
фамилия
- фамилия застрахованного
Будут показаны все полисы, где
фамилия застрахованного будет соответствовать указанной в поле ввода;
показать
все полисы.
Будут показаны медицинские полисы
для всех застрахованных.
Рисунок 12 - Выбор критерия для
формирования бланка
На рисунке 13 представлена форма для
предварительного просмотра и распечатки бланков страховых медицинских полисов.
Для просмотра бланков помимо панели навигации, предусмотрен список
застрахованных, в котором указываются застрахованные, для которых были
сформированы бланки. Чтобы просмотреть бланк для застрахованного, необходимо в
списке застрахованных выбрать необходимое имя. В строке состояния указывается
общее количество бланков, номер текущего бланка, а также масштаб отображения
бланка. Имеется: поиск, быстрый поиск, панель навигации для быстрого просмотра
бланков, настройка печати, вывод документа на печать.
В бланке для каждого застрахованного
предоставляется следующая информация:
серия
полиса;
номер
полиса;
Ф.И.О.
застрахованного;
социальное
положение;
год
рождения;
пол;
место
работы;
адрес
постоянного места проживания;
период
действия полиса;
номер
договора ОМС;
период
действия договора;
дата
выдачи полиса.
Формирование отчёта
регистра застрахованных по району выдачи
Выбрав пункт меню «Файл -> Отчёты
-> Регистр застрахованных -> По районам выдачи», появится отчёт РЗ по
району выдачи медицинского полиса.
Формирование отчёта
регистра застрахованных по месту проживания
Выбрав пункт меню «Файл -> Отчёты
-> Регистр застрахованных -> По месту проживания», появится отчёт РЗ по
месту проживания застрахованного.
Формирование отчёта
регистра застрахованных по лечебно профилактическим учреждениям
Выбрав пункт меню «Файл -> Отчёты
-> Регистр застрахованных -> По ЛПУ» на экране появится отчёт РЗ по ЛПУ
(рисунок 16).
Формирование отчёта
регистра застрахованных по предприятиям
Выбрав пункт меню «Файл -> Отчёты
-> Регистр застрахованных -> По предприятиям» на экране появится отчёт РЗ
по предприятиям.
Администрирование БД
Выбрав пункт меню «Функции ->
Администрирование», появится форма подключения к серверу (рисунок 18).
Рисунок 18 - Форма подключения к
серверу
Здесь необходимо обязательно
указать:
сервер
- адрес сервера, к которому происходит подключение;
логин -
логин системного администратора или администратора безопасности;
пароль;
база -
имя БД над которой будет производиться администрирование.
Нажав после ввода необходимой
информации кнопку «Подключение», будет выполнено одно из следующих действий:
при не
корректно введённых параметрах на экране появится диалоговое окно с сообщение
об ошибке подключения к серверу;
при
правильно введённых параметрах на экране появится форма для администрирования.
Функции формы администрирования:
регистрация
учётной записи;
редактирования
учётной записи;
удаление
учётной записи;
установка
прав доступа на объекты и инструкции БД.
Регистрация учётной записи
Для регистрации учётной записи
необходимо указать:
имя
пользователя - пользователь БД;
логин -
логин для подключения к БД;
пароль.
После чего нужно нажать кнопку
«Добавить», для регистрации пользователя, либо «Отмена», для отмены регистрации
пользователя.
После регистрации пользователя он
будет добавлен в список пользователей.
Редактирование учётной
записи
Для редактирования учётной записи,
необходимо выбрать учётную запись в списке пользователей, после чего необходимо
указать новые данные и нажать кнопку «Изменить» для принятия изменений, либо
«Отмена» для отмены изменений.
Удаление учётной записи
Для удаления учётной записи,
необходимо выбрать учётную запись в списке пользователей и нажать кнопку
«Удалить», после чего появится форма для подтверждения удаления учётной записи.
Установка прав доступа на
объекты и инструкции БД
Для установки прав доступа на
объекты и инструкции БД, необходимо указать пользователя в всплывающем меню и
нажать кнопку «Выбрать», после чего на экране будут отображены все права
доступа пользователя на таблицы (рисунок 20) и хранимые процедуры (рисунок 21).
Доступны следующие ограничения:
операция
выборки (SELECT) - просмотр записей в таблице или представление;
операция
вставки (INSERT) - добавление новых записей в таблицу или представление;
операция
изменения (UPDATE) - изменение содержимого записей таблицы или представления;
операция
удаления (DELETE) - удаление записей из таблиц или представлений;
выполнение
хранимых процедур (EXECUTE) - выполнение хранимой процедуры или определяемой пользователем
функции. Все SQL - инструкции выполняются внутри хранимых процедур, что
значительно повышает уровень безопасности данных, а также снижает сетевой
трафик, так как при вызове процедуры, необходимо только указать входные данные,
вся обработка происходит на стороне сервера.
1.2.4 Характеристики ПО
Надёжность
Приложение должно:
контролировать
корректность передаваемых данных;
корректно
реагировать на исключительные ситуации;
информировать
пользователя о возникших ошибках;
обеспечивать
пользователю функциональность в соответствие с назначенными ему правами;
реализовывать
все предусмотренные функции;
время
реакции системы на запросы должно быть приемлемым.
Переносимость
Приложение корректно работает на
операционных системах Windows NT/2k/XP и корректно передаёт данные по протоколу TCP/IP.
2. Функциональная часть
.1 Список функций
Должны быть реализованы следующие
функции:
извлечения
данных из СУБД Clipper в СУБД SQL Server 2005
формирование
файлов РЗ для отправки в филиалы;
формирование
файлов РД для отправки в филиалы;
приём
файлов РЗ от филиалов;
приём
файлов РД от филиалов;
формирования
отчётных документов:
отчёт
РЗ по районам выдачи;
отчёт
РЗ по месту проживания;
отчёт
РЗ по ЛПУ;
отчёт
РЗ по предприятиям;
бланк
страхового медицинского полиса;
управление
правами доступа пользователей над объектами БД:
регистрация
новой учётной записи;
редактирования
учётной записи;
удаления
учётной записи;
установка
прав над объектами и инструкциями БД для учётной записи.
2.2 Требования к
функциям
.2.1
Информационно-функциональная схема
Информационно-функциональная схема
дает комплексное представление об основных элементах реализации конкретного
функционального процесса. Схема позволяет видеть, на какие элементы
информационной базы опирается реализация отдельных функций приложения,
источники информации, ее пользователей, также пользователей, участвующих в
реализации функций АИС. В ИФС используются следующие условные обозначения
(рисунок 22).
Рисунок 22 - Условные обозначения,
принятые для описания информационно-функциональной схемы
2.2.2 Импорт данных из
СУБД Clipper в СУБД MS SQL Server 2005
Данная функция предназначена для
автоматизации импорта данных из СУБД Clipper в СУБД MS SQL Server 2005, выполняя при этом преобразование данных к нужному формату и
проверяя их на корректность. Выполняется импорт всех данных, при этом будет
сформирован лог-файл для РЗ и РД, где будут указаны ошибочные записи. Типичные
ошибки: дублирование ключевых полей, расхождение даты регистрации с датой
окончания действия документа, незаполненные необходимые поля, не правильный
формат данных.
При извлечении данных, должны
выполняться следующие действия:
подключение
к серверу под логином администратора;
выбор
папки источника данных;
извлечение
данных из файлов;
формирование
лог - файла при возникновении ошибок;
информирование
пользователя о завершение операции извлечения.
Рисунок 23 - Фрагмент ИФС для
функции «Импорт данных»
2.2.3 Формирование
файлов регистра застрахованных
Данная функция предназначена для
формирования файла регистра застрахованного за отчётный период для оправки в
СМО. После формирования файла РЗ, необходимо проверить правильность и полноту
заполнения всех данных.
Не допускается:
нулевое
значение, неполное либо неверное заполнение поля: серия и номер паспорта
(свидетельства о рождении);
нулевое
значение серии полиса;
пустое
поле улицы, номера дома.
Рисунок 24 - Фрагмент ИФС для
функции «Формирование файла регистра застрахованных»
2.2.4 Формирование
файлов регистра договоров
Данная функция предназначена для
формирования файла регистра договоров за отчётный период для оправки в СМО.
После формирования файла РД, необходимо проверить правильность и полноту
заполнения всех данных. Дата начала действия договора должна быть указана у
всех договоров и не должна быть больше или равна дате окончания действия
договора, а также не должна быть больше даты проведения корректировки.
При формировании файла РД для
отправки в филиал, должны выполняться следующие действия:
выбор
периода регистрации договоров;
формирование
файла РД по дате регистрации;
информирования
пользователя о завершение операции формирования файла.
Информационно-функциональная схема
представлена на рисунке 25
Рисунок 25 - Фрагмент ИФС для
функции «Формирование файла регистра договоров»
2.2.5 Приём
файлов регистра застрахованных
Данная функция предназначена для
импорта данных из файла РЗ, поступающего от СМО. При выполнении импорта
осуществляется проверка данных и формируется лог-файл.
При приёме файла РЗ, должны выполняться
следующие действия:
выбор
файла для приёма;
извлечение
данных из файла РЗ;
формирование
лог-файла при возникновении ошибок;
информирования
пользователя о завершение операции приёма файла.
Информационно-функциональная схема
представлена на рисунке 26.
Рисунок 26 - Фрагмент ИФС для
функции «Импорт данных из файла регистра застрахованных»
2.2.6 Приём
файлов регистра договоров
Данная функция предназначена для
импорта данных из файла РД, поступающего от СМО. При выполнении импорта
осуществляется проверка данных и формируется лог-файл.
При приёме файла РД из филиала,
должны выполняться следующие действия:
выбор
файла для приёма;
извлечение
данных из файла РД;
формирование
лог-файла при возникновении ошибок;
информирования
пользователя о завершение операции приёма файла.
Информационно-функциональная схема
представлена на рисунке 27.
Рисунок 27 - Фрагмент ИФС для
функции «Импорт данных из файла регистра договоров»
2.2.7 Формирование
отчётных документов
Данные функции предназначены для
формирования отчётной информации и документов на печать. Отчёты должен быть
представлены на формате А4 с возможностью вывода содержащейся в них информации
на печать. Реализованы следующие отчёты:
отчёт
РЗ по районам выдачи (рисунок 28);
отчёт
РЗ по месту проживания (рисунок 29);
отчёт
РЗ по ЛПУ (рисунок 30);
отчёт
РЗ по предприятиям (рисунок 31);
бланк
медицинского полиса (рисунок 32).
Рисунок 28 - Фрагмент ИФС для отчёта
«Регистр застрахованных по району выдачи»
Рисунок 29 - Фрагмент ИФС для отчёта
«Регистр застрахованных по району проживания»
Рисунок 30 - Фрагмент ИФС для отчёта
«Регистр застрахованных по ЛПУ»
2.2.8 Управления правами
доступа над объектами БД
Для администрирования БД необходимо
подключиться к серверу, указав: адрес сервера, логин администратора либо
администратора безопасности, пароль, имя БД над которой будет производиться
администрирование. Для администрирования предусмотрены следующие действия:
а) регистрация новой учётной
записи
1) ввод имени учётной
записи, для которой будут настроены права доступа;
2) ввод логина и пароля, для
подключения к серверу;
3) регистрация учётной записи.
б) редактирования учётной записи
1) ввод нового логина и
пароля для подключения к серверу;
2) редактирование учётной записи.
в) удаления учётной записи
1) запрос на
подтверждение удаления учётной записи;
2) при подтверждении удаления,
должно выполняться удаление учётной записи.
г) установка прав над объектами
и инструкциями БД для учётной записи.
При регистрации учётной записи, ей
автоматически присваиваются роли: db_reader - члены этой роли, могут выполнять инструкцию SELECT для любой
таблицы или представления в базе; db_datawriter - члены это роли, могут
выполнять добавление (insert), редактирование (update) и удаление (delete)
записей таблиц и представлений базы данных.
Роли db_datareader и db_datawriter
обеспечивают доступ ко всем таблицам базы данных. После этого для учётной
записи можно запретить или разрешить выполнение той или иной инструкции над
объектами БД.
3. Информационное
обеспечение приложения
.1 Концептуальная модель
данных
Концептуальная модель является
логической схемой базы данных для проектируемой системы. Основными объектами
концептуальной модели являются сущности и связи. Сущность - некоторый
обособленный объект или событие моделируемой системы, имеющий определенный
набор свойств - атрибутов. Сущность может обладать одним или несколькими
атрибутами, которые однозначно идентифицируют каждый образец сущности, и может
обладать любым количеством связей с другими сущностями.
3.2 Физическая модель
данных
Между таблицами базы данных
существуют определенные взаимосвязи. Для поддержания этих взаимосвязей, а также
для обеспечения корректности хранимых данных на вводимую информацию накладывают
ряд ограничений, называемых ограничениями целостности (ОЦ). Ограничения
целостности - логические ограничения, накладываемые на данные. Этим внутренним
ОЦ описываются функциональные зависимости между атрибутами внутри отношения.
3.2.1 Список таблиц базы
данных
Список таблиц приложения
«Автоматизированная система управления медицинского страхования» представлен в
таблице 3.1.
Таблица 3.1 - Список таблиц базы
данных
Идентификатор таблицы
|
Название таблицы
|
Описание таблицы
|
allowableservices
|
Дополнительные услуги
|
areas
|
Районы
|
Список районов субъектов РФ
|
brancheslist
|
Услуги
|
Список допустимых услуг для отделений ЛПУ
|
citizensage
|
Возрастная группа
|
Список возрастных групп
|
classtype
|
Классификатор типов договора
|
Список договоров с юридическими и физическими лицами
|
contractlist
|
Регистр договоров
|
Список заключённых договоров с СМО
|
document
|
Документы
|
Список доступных типов документа удостоверяющих личность
гражданина
|
insuredcategories
|
Категории застрахованных
|
Список категорий застрахованных
|
insuredlist
|
Регистр застрахованных
|
Справочник застрахованных
|
lpubranches
|
Отделения ЛПУ
|
Список отделений ЛПУ
|
lpucategories
|
Категории ЛПУ
|
Справочник категорий ЛПУ
|
lpulist
|
ЛПУ
|
Список ЛПУ
|
lpusubord
|
Подчинённость ЛПУ
|
Список типов подчинения ЛПУ
|
lputype
|
Тип ЛПУ
|
Список типов ЛПУ
|
occupieditem
|
Населённые пункты
|
Справочник населённых пунктов
|
periods
|
Периоды
|
Список календарных месяцев
|
policiesmovement
|
Движение полиса
|
Список признаков движения полисов
|
Prz
|
Пункт регистра застрахованных
|
Справочник пунктов регистра застрахованных
|
regions
|
Регионы
|
Список регионов РФ
|
secondnames
|
Классификатор отчеств
|
Список классификаторов отчеств
|
Smo
|
Страховые медицинские организации
|
Список страховых медицинских организаций
|
socialstatus
|
Социальное положение
|
Список классификаторов социального положения
|
specificationslist
|
Уточнения предприятий
|
Список уточнений предприятий
|
streetslist
|
Улицы
|
Территориальный список улиц
|
3.2.2
Структура таблиц базы данных
Структура таблиц базы данных
программного комплекса представлена в таблицах 3.2-3.25.
Таблица 3.2 - Структура таблицы
«allowableservices»
Код поля
|
Наименование поля
|
Тип поля
|
asid*
|
Код дополнительной услуги
|
int
|
Standart
|
Стандарт
|
int
|
Tariff
|
Коэффициент регионального тарифа
|
float
|
tariffnonresident
|
Тариф иногородним
|
float
|
Salary
|
Процент на заработную плату
|
float
|
charge
|
Процент начисления на заработную плату
|
float
|
Feed
|
Процент на питание
|
float
|
medicines
|
Процент на медикаменты
|
float
|
Таблица 3.3 - Структура таблицы
«areas»
Код поля
|
Наименование поля
|
Тип поля
|
aid*
|
Код района
|
int
|
ainame
|
Район
|
varchar(50)
|
Rid
|
Код региона
|
int
|
Таблица 3.4 - Структура таблицы
«brancheslist»
Код поля
|
Наименование поля
|
Тип поля
|
blid*
|
Код отделения
|
smallint
|
blname
|
Отделение
|
varchar(50)
|
Таблица 3.5 - Структура таблицы
«citizensage»
Код поля
|
Наименование поля
|
Тип поля
|
caid*
|
Код возрастной группы
|
smallint
|
caname
|
Возрастная группа
|
varchar(50)
|
Таблица 3.6 - Структура таблицы
«classtype»
Код поля
|
Наименование поля
|
Тип поля
|
ctid*
|
Код типа договора
|
Int
|
ctname
|
Тип договора
|
varchar(50)
|
Таблица 3.7 - Структура таблицы
«document»
Код поля
|
Наименование поля
|
Тип поля
|
Docid*
|
Код документа
|
int
|
docname
|
Документ
|
varchar(50)
|
Таблица 3.8 - Структура таблицы «contractlist»
Код поля
|
Наименование поля
|
Тип поля
|
clid*
|
Номер договора
|
int
|
Reg
|
Регистрационный индекс
|
smallint
|
registrationid
|
Регистрационный номер
|
int
|
registrationdate
|
Дата регистрации
|
smalldatetime
|
Ctid
|
Код типа договора
|
int
|
inn1
|
Инн1
|
bigint
|
inn2
|
Инн2
|
bigint
|
Kpp
|
Кпп
|
bigint
|
Nw
|
Состояние договора
|
bit
|
clname
|
Договор
|
varchar(100)
|
startdate
|
Начало действия договора
|
smalldatetime
|
enddate
|
Окончание действия договора
|
smalldatetime
|
address
|
Адрес
|
varchar(50)
|
mailindex
|
Почтовый индекс
|
int
|
Oiid
|
Код населённого пункта
|
int
|
Slid
|
Код улицы
|
int
|
hnumber
|
Номер дома
|
smallint
|
Ofkv
|
Номер офиса
|
smallint
|
Chief
|
Руководитель
|
varchar(40)
|
telephone
|
Телефон
|
bigint
|
omsrespondible
|
Ответственный за ОМС
|
varchar(40)
|
addinf
|
Дополнительная информация
|
varchar(100)
|
payments
|
Платежи
|
bit
|
Таблица 3.9 - Структура таблицы «insuredcategories»
Код поля
|
Наименование поля
|
Тип поля
|
icid*
|
Код категории застрахованных
|
smallint
|
icname
|
Категория застрахованных
|
varchar(70)
|
Таблица 3.10 - Структура таблицы «lpubranches»
Код поля
|
Наименование поля
|
Тип поля
|
Lpuid*
|
Код ЛПУ
|
int
|
blid*
|
Код отделения ЛПУ
|
smallint
|
Count
|
Количество работников
|
smallint
|
Таблица 3.11 - Структура таблицы «lpucategories»
Код поля
|
Наименование поля
|
Тип поля
|
lcid*
|
Код категории ЛПУ
|
smallint
|
lcname
|
Категория ЛПУ
|
varchar(15)
|
Таблица 3.12 - Структура таблицы «insuredlist»
Код поля
|
Наименование поля
|
Тип поля
|
number*
|
Номер полиса
|
int
|
clid*
|
Серия полиса
|
int
|
Pmid
|
Код признака движения полиса
|
smallint
|
Kms
|
КМС
|
bigint
|
Pr
|
Признак печати
|
bit
|
startdate
|
Дата начала действия полиса
|
smalldatetime
|
enddate
|
Дата окончания действия полиса
|
smalldatetime
|
telephone
|
Телефон
|
bigint
|
slid2
|
Код уточнения предприятия
|
char(1)
|
Docid
|
Код типа документа
|
int
|
docnumber
|
Документ
|
varchar(20)
|
Os
|
ОС
|
bit
|
surname
|
Фамилия
|
varchar(20)
|
Nid
|
Код имени
|
int
|
Snid
|
Код отчества
|
int
|
birthdate
|
Дата рождения
|
smalldatetime
|
Male
|
Пол
|
bit
|
Ssid
|
Код социального статуса
|
smallint
|
disterr
|
Код населённого пункта
|
int
|
Ils
|
ИЛС
|
int
|
resterr
|
Код населённого пункта
|
int
|
Slid
|
Код улицы
|
int
|
House
|
Номер дома
|
smallint
|
Cas
|
Номер корпуса
|
char(5)
|
Str
|
Номер строения
|
char(5)
|
apartament
|
Номер квартиры
|
smallint
|
Icid
|
Код категории застрахованных
|
smallint
|
pigroup
|
Категория инвалидности
|
smallint
|
Lpuid
|
Код ЛПУ
|
int
|
outdate
|
smalldatetime
|
changedate
|
Дата изменения данных
|
smalldatetime
|
operator
|
Оператор
|
smallint
|
Smoid
|
Код СМО
|
char(2)
|
Таблица 3.13 - Структура таблицы «lpusubord»
Код поля
|
Наименование поля
|
Тип поля
|
lsid*
|
Код подчинения ЛПУ
|
smallint
|
lsname
|
Наименование подчинения ЛПУ
|
varchar(40)
|
Таблица 3.14 - Структура таблицы «lpulist»
Код поля
|
Наименование поля
|
Тип поля
|
Lpuid*
|
Код ЛПУ
|
int
|
lpuname
|
ЛПУ
|
varchar(50)
|
Lsid
|
Код подчинения ЛПУ
|
smallint
|
Caid
|
Код возрастной группы
|
smallint
|
Ltid
|
Код типа ЛПУ
|
smallint
|
ltnumber
|
Номер ЛПУ
|
smallint
|
Tuzo
|
Тузо
|
int
|
Okpo
|
ОКПО
|
int
|
Okogu
|
ОКОГУ
|
int
|
Okato
|
ОКАТО
|
int
|
Code
|
Код
|
float
|
Okopf
|
ОКПФ
|
int
|
Oiid
|
Код района
|
int
|
address
|
Адрес
|
varchar(50)
|
Slid
|
Код улицы
|
int
|
hnumber
|
Номер дома
|
smallint
|
mailindex
|
Почтовый индекс
|
int
|
Lcid
|
Код категории ЛПУ
|
smallint
|
regtar
|
Коэффициент регионального тарифа
|
float
|
maindoctor
|
Главный врач
|
varchar(20)
|
chiefaccountant
|
Главный бухгалтер
|
varchar(20)
|
contractnumber
|
Номер договора
|
int
|
Date
|
Дата заключения договора
|
smalldatetime
|
attachedpop
|
Прикреплённое население
|
int
|
m16
|
Младше 16
|
int
|
m1660
|
Мужчины от 16 до 60
|
int
|
g1655
|
Женщины от 16 до 55
|
int
|
m60
|
Мужчины старше 60
|
int
|
g55
|
Женщины старше 55
|
int
|
Asid
|
Код дополнительных услуг ЛПУ
|
int
|
Таблица 3.15 - Структура таблицы «occupieditem»
Код поля
|
Наименование поля
|
Тип поля
|
oiid*
|
Код населённого пункта
|
int
|
oiname
|
Населённый пункт
|
varchar(50)
|
Aid
|
Код района
|
int
|
Таблица 3.16 - Структура таблицы «lputype»
Код поля
|
Наименование поля
|
Тип поля
|
ltid*
|
Код типа ЛПУ
|
smallint
|
ltname
|
Тип ЛПУ
|
varchar(50)
|
Таблица 3.17 - Структура таблицы «names»
Код поля
|
Наименование поля
|
Тип поля
|
nid*
|
Код имени
|
Int
|
Nname
|
Имя
|
varchar(20)
|
Таблица 3.18 - Структура таблицы «policiesmovement»
Код поля
|
Наименование поля
|
Тип поля
|
pmid*
|
Код признака движения полиса
|
smallint
|
Pmname
|
Признак движения полиса
|
varchar(40)
|
Таблица 3.19 - Структура таблицы «prz»
Код поля
|
Наименование поля
|
Тип поля
|
Przid*
|
Код ПРЗ
|
char(4)
|
Przname
|
ПРЗ
|
varchar(40)
|
Smoid
|
Код СМО
|
char(2)
|
Oiid
|
Код района
|
int
|
Slid
|
Код улицы
|
int
|
Hnumber
|
Номер дома
|
smallint
|
Chief
|
Руководитель
|
varchar(20)
|
Matrespon
|
Материально ответственный
|
varchar(20)
|
Properator
|
Оператор
|
varchar(20)
|
Telephone
|
Телефон
|
int
|
Таблица 3.20 - Структура таблицы «regions»
Код поля
|
Наименование поля
|
Тип поля
|
rid*
|
Код региона
|
int
|
Rname
|
Регион
|
varchar(50)
|
Таблица 3.21 - Структура таблицы «secondnames»
Код поля
|
Наименование поля
|
Тип поля
|
snid*
|
Код отчества
|
int
|
snname
|
Отчество
|
varchar(20)
|
Таблица 3.22 - Структура таблицы «smo»
Код поля
|
Наименование поля
|
Тип поля
|
Smoid*
|
Код СМО
|
char(2)
|
smname
|
СМО
|
varchar(50)
|
Oiid
|
Код района
|
int
|
Slid
|
Код улицы
|
int
|
hnumber
|
Номер дома
|
smallint
|
Chief
|
Руководитель
|
varchar(40)
|
chiefaccountant
|
Главный бухгалтер
|
varchar(40)
|
mischief
|
Руководитель АСУ
|
varchar(40)
|
telephone
|
Телефон
|
int
|
tfomscontract
|
Договор с ТФМСО
|
varchar(8)
|
stardate
|
Дата начала
|
smalldatetime
|
enddate
|
Дата окончания
|
smalldatetime
|
Таблица 3.23 - Структура таблицы «socialstatus»
Код поля
|
Наименование поля
|
Тип поля
|
ssid*
|
Код социального положения
|
smallint
|
Ssname
|
Социальное положение
|
varchar(40)
|
Sscategory
|
Категория социального положения
|
varchar(25)
|
Таблица 3.24 - Структура таблицы specificationslist»
Код поля
|
Наименование поля
|
Тип поля
|
slid*
|
Код уточнения предприятия
|
char(1)
|
Slname
|
Уточнение предприятия
|
varchar(25)
|
Таблица 3.25 - Структура таблицы «streetslist»
Код поля
|
Наименование поля
|
Тип поля
|
slid*
|
Код улицы
|
int
|
slname
|
Улица
|
varchar(50)
|
.2.3 Оценка объёма БД
Расчёт верхней оценки объёма
информационной базы для разрабатываемого программного комплекса представлен в
таблице 3.26.
Таблица 3.26 - Объём таблиц БД
Название таблицы
|
Размер записи, б
|
Количество записей
|
Объём, Кб
|
Дополнительные услуги
|
32
|
100
|
3,1
|
Районы
|
58
|
3000
|
169,9
|
Услуги
|
52
|
100
|
5,1
|
Возрастная группа
|
52
|
3
|
0,2
|
Классификатор типов договора
|
54
|
30
|
1,6
|
Регистр договоров
|
406
|
5000
|
1982,4
|
Документы
|
54
|
20
|
1,1
|
Категории застрахованных
|
72
|
50
|
3,5
|
Регистр застрахованных
|
146
|
1500000
|
213867,2
|
Отделения ЛПУ
|
8
|
50
|
0,4
|
Категории ЛПУ
|
17
|
6
|
0,1
|
ЛПУ
|
232
|
500
|
113,3
|
Подчинённость ЛПУ
|
42
|
30
|
1,2
|
Тип ЛПУ
|
52
|
40
|
2,0
|
Классификатор имён
|
24
|
10000
|
Населённые пункты
|
58
|
5000
|
283,2
|
Движение полиса
|
42
|
10
|
0,4
|
Пункт регистра застрахованных
|
120
|
300
|
35,2
|
Регионы
|
54
|
90
|
4,7
|
Классификатор отчеств
|
24
|
20000
|
468,8
|
Страховые медицинские организации
|
202
|
30
|
5,9
|
Социальное положение
|
67
|
15
|
1,0
|
Уточнения предприятий
|
26
|
3
|
0,1
|
Улицы
|
54
|
10000
|
527,3
|
Максимальный суммарный объем БД
программного комплекса «АСУ медицинского страхования» может достигать 212,6 Мб.
4. Программное
обеспечение приложения
Программный комплекс разработан в
среде программирования Microsoft Visual Studio 2005 для Windows 2000/XP/2003 с использованием в качестве
механизма доступа к ресурсам СУБД программного инструментария ADO.NET. Интерфейс ADO.NET реализует все
низкоуровневые операции работы с базами данных и является разделяемым ресурсом,
то есть может использоваться несколькими приложениями одновременно.
Выбор в качестве среды разработки Microsoft Visual Studio 2005 обусловлен хорошим
сочетанием возможностей технологии визуального программирования с мощью
объектно-ориентированного аппарата языка C#.
Технология визуального
программирования позволяет быстро и качественно создавать всевозможные экранные
формы и элементы интерфейса, что необходимо для удобства работы конечного
пользователя.
Язык C#, являясь объектно-ориентированным,
позволяет подходить к разработке внутреннего ядра программы, опираясь на
концепцию системного анализа. Унаследовав все лучшие стороны языков высокого
уровня, C# объединяет высокую производительность средств быстрой разработки
(RAD)
с мощью и гибкостью C++. При проектировании программного комплекса активно
использовались методы объектно-ориентированного программирования.
Выбор интерфейс ADO.NET обусловлен
универсальностью подхода к технологии управления базами данных.
Ориентирование приложения для работы
под операционными системами Windows 2000/XP/2003 позволяет в полной мере
использовать в программе унифицированный данными операционными системами
механизм взаимодействия пользователя с программным комплексом - интерфейс
пользователя.
Разработка концептуальной и
физической модели данных выполнена в Power Designer v9.0. фирмы Sybase.
В качестве СУБД использовалась СУБД Microsoft SQL Server 2005 фирмы Microsoft.
Заключение
В результате дипломного
проектирования для филиала открытого акционерного общества «Газпроммедстрах»
был разработан и реализован программный комплекс «Автоматизированная система
управления медицинского страхования». В системе реализованы основные функции
СМО: функции страхования, функции контроля за выполнением условий договора со
страхователями и медицинскими учреждениями, функции формирования отчётов СМО в
ТФОМС о численности застрахованных, движении страховых медицинских полисов,
операциях по обязательному медицинскому страхованию.
Приложение отвечает всем
поставленным требованиям. Осуществлён импорт данных из СУБД Clipper в СУБД MS SQL Server, обеспечивающий перенос
существующих данных из устаревшего программного обеспечения в разработанный
программный комплекс. Реализовано формирование отчётных документов,
предоставляющих всю необходимую для работы информацию. Разработан модуль для
администрирования БД, обеспечивающий гибкую настройку прав пользователей над
объектами БД.
Разработанные в ВКР модули являются
составной частью программного комплекса «Автоматизированная система управления
медицинского страхования», который планируется к внедрению в компании ОАО
«Газпроммедстрах».
Список источников
1. Нейгель, Кристиан, Ивьен, Билл, Глин, Джей. C# 2005 для профессионалов.: Пер. с
англ. - М.: Издательский дом «Вильямс», 2006. - 1376 с.: - Парал.тит. англ.
2. Постолит А.В. Visual Studio.NET: разработка приложений
баз данных. - СПб.: БХВ-Петербург, 2003. - 544 с.: ил.
. Сеппа Д. Microsoft ADO.NET/Пер. с англ. - М.:
Издательско-торговый дом Русская Редакция, 2003- - 640 стр.: ил.
. http://www.rsdn.ru/
. http://msdn.microsoft.com/
. http://support.microsoft.com/
ПРИЛОЖЕНИЕ А
Исходный текст приложения.
/*Импорт БД*/
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Data.OleDb;System.Data.SqlClient;System.IO;System.Globalization;Microsoft.Office.Interop.Excel;connect_dbf
= null;connect_mdf = null;rdr_dbf;cmd_dbf = new OleDbCommand();cmd_mdf = new
SqlCommand();workdirectory = "";decimal_sep = System.Globalization.NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator;//разделитель
дробных чисел(регионалные стандарты)_log_File to_file = null;e = new DataSet();
#region Обрабатываем выбор пункта
меню "импорт базы данных"void
импортБазыДанныхToolStripMenuItem_Click(object sender, EventArgs e)
{
//указываем путь к файлам
бд(folderBrowser.ShowDialog() == DialogResult.OK)
{(folderBrowser.SelectedPath);();
}
}
#endregion
#region Создаём временную директорию
и копируем необходимые файлы из папки источника для дальнейшей обработкиcreateFiles(string
directoryOut)
{
{directoryIn = "";=
Directory.CreateDirectory(".\\Temp").ToString();.Copy(directoryOut +
"\\common\\region.dbf", directoryIn + "\\region.dbf",
true);.Copy(directoryOut + "\\common\\region.cdx", directoryIn +
"\\region.cdx", true);.Copy(directoryOut +
"\\fizpers\\sltipdog.dbf", directoryIn + "\\sltipdog.dbf",
true);.Copy(directoryOut + "\\fizpers\\sltipdog.cdx", directoryIn +
"\\sltipdog.cdx", true);.Copy(directoryOut + "\\fizpers\\dogovor.dbf",
directoryIn + "\\dogovor.dbf", true);.Copy(directoryOut +
"\\fizpers\\dogovor.cdx", directoryIn + "\\dogovor.cdx",
true);.Copy(directoryOut + "\\common\\tpdoc.dbf", directoryIn +
"\\tpdoc.dbf", true);.Copy(directoryOut + "\\common\\tpdoc.cdx",
directoryIn + "\\tpdoc.cdx", true);.Copy(directoryOut +
"\\common\\kateg.dbf", directoryIn + "\\kateg.dbf",
true);.Copy(directoryOut + "\\common\\kateg.cdx", directoryIn +
"\\kateg.cdx", true);.Copy(directoryOut +
"\\fizpers\\fizpers.dbf", directoryIn + "\\fizpers.dbf",
true);.Copy(directoryOut + "\\fizpers\\fizpers.cdx", directoryIn +
"\\fizpers.cdx", true);.Copy(directoryOut +
"\\common\\klpu.dbf", directoryIn + "\\klpu.dbf",
true);.Copy(directoryOut + "\\common\\klpu.cdx", directoryIn +
"\\klpu.cdx", true);.Copy(directoryOut + "\\common\\infostr.dbf",
directoryIn + "\\infostr.dbf", true);.Copy(directoryOut +
"\\common\\infostr.cdx", directoryIn + "\\infostr.cdx",
true);.Copy(directoryOut + "\\common\\slpod.dbf", directoryIn +
"\\slpod.dbf", true);.Copy(directoryOut +
"\\common\\slpod.cdx", directoryIn + "\\slpod.cdx",
true);.Copy(directoryOut + "\\common\\sltlpu.dbf", directoryIn +
"\\sltlpu.dbf", true);.Copy(directoryOut +
"\\common\\sltlpu.cdx", directoryIn + "\\sltlpu.cdx",
true);.Copy(directoryOut + "\\fizpers\\slimx.dbf", directoryIn +
"\\slimx.dbf", true);.Copy(directoryOut +
"\\fizpers\\slimx.cdx", directoryIn + "\\slimx.cdx",
true);.Copy(directoryOut + "\\common\\slprz.dbf", directoryIn +
"\\slprz.dbf", true);.Copy(directoryOut + "\\common\\slprz.cdx",
directoryIn + "\\slprz.cdx", true);.Copy(directoryOut +
"\\common\\slprp.dbf", directoryIn + "\\slprp.dbf",
true);.Copy(directoryOut + "\\common\\slprp.cdx", directoryIn +
"\\slprp.cdx", true);.Copy(directoryOut + "\\fizpers\\slotx.dbf",
directoryIn + "\\slotx.dbf", true);.Copy(directoryOut +
"\\fizpers\\slotx.cdx", directoryIn + "\\slotx.cdx",
true);.Copy(directoryOut + "\\common\\slmso.dbf", directoryIn +
"\\slmso.dbf", true);.Copy(directoryOut +
"\\common\\slmso.cdx", directoryIn + "\\slmso.cdx",
true);.Copy(directoryOut + "\\common\\socpol.dbf", directoryIn +
"\\socpol.dbf", true);.Copy(directoryOut +
"\\common\\socpol.cdx", directoryIn + "\\socpol.cdx",
true);.Copy(directoryOut + "\\common\\slreg.dbf", directoryIn +
"\\slreg.dbf", true);.Copy(directoryOut +
"\\common\\slreg.cdx", directoryIn + "\\slreg.cdx",
true);.Copy(directoryOut + "\\fizpers\\streetx.dbf", directoryIn +
"\\street.dbf", true);.Copy(directoryOut +
"\\fizpers\\streetx.cdx", directoryIn + "\\street.cdx",
true);.Copy(directoryOut + "\\fizpers\\slpred.dbf", directoryIn +
"\\slpred.dbf", true);.Copy(directoryOut +
"\\fizpers\\slpred.cdx", directoryIn + "\\slpred.cdx",
true);
//начинаем извлекать данные
}(Exception exp)
{.Show(exp.ToString(),
"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion
#region Подключение к
БД/Отключениеvoid ConnectToBD()
{
{_dbf = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source="+workdirectory+"\\Temp\\;Extended Properties=dBase IV;User
ID=Admin;Password=");_dbf.Open();_mdf = new SqlConnection(@"Data
Source=(local)\SQLEXPRESS;Initial Catalog=DataBase;Integrated
Security=SSPI");_mdf.Open();
}(Exception exp)
{.Show("Ошибка подключения к
базе данных:\n" + exp.ToString());
}
}void
отклчToolStripMenuItem_Click(object sender, EventArgs e)
{_dbf.Close();_mdf.Close();
}
#endregion
#region заполнение таблицvoid
FillingTables()
{
{
//Функция извлечения списка
улиц_list_streets();
//Функция извлечения категорий
застрахованных_insured_categories();
//Функция извлечения категорий ЛПУ
_lpu_categories();
//Функция извлечения типов
документа_documents();
//Функция извлевчения категорий
социального положения_social_status();
//Функция извлевчения типов
ЛПУ_lpu_types();
//Функция извлечения списка признака
движения полиса_policie_movement();
//Функция извлечения списка
подчинённости ЛПУ_lpu_subord();
//Функция извлечения списка
имён_list_names();
//Функция извлечения списка
отчеств_list_second_names();
//Функция извлечения списка
уточнений предприятия_list_specifications();
//Функция извлечения классификаторов
договора_type_class();
//Функция извлечения списка
регионов/районов/населённых пунктов_cadastr();
//Функция установки возрастного
положения_age();
//Функция извлечения списка
страховых медецинских организаций_smo();
//Функция извлечения списка пунктов
регистра застрахованных_prz();
//Функция извлечения списка лечебно
профилактических учреждений_lpu();
//Функция извлечения списка
договоров_contracts();
//Функция извлечения списка
застрахованных_insureds();
}(Exception exp)
{.Show(exp.ToString());
}
}
#endregion
#region функции заполения таблиц
//Извлекаем список
улицextract_list_streets()
{_dbf.CommandText = "(select
name from street where name<>'') union (select ul from fizpers where
ul<>'' order by ul)";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText
= "if object_id('select_street') is not null drop function
select_street";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_street(@name varchar(50)) returns int as begin return (select
count(slname) from streetslist where slname=@name) end";_mdf.ExecuteNonQuery();
//Процедура добавления
улицы_mdf.CommandText = "if object_id('streetslist_insert') is not null
drop procedure streetslist_insert";_mdf.ExecuteNonQuery();_mdf.CommandText
= "create procedure streetslist_insert @street varchar(50) as begin if(dbo.select_street(@street)=0)
insert into streetslist (slname) values (@street)
end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec streetslist_insert
'{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем категории
застрахованныхextract_insured_categories()
{_dbf.CommandText = "select
distinct name from kateg where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if object_id('select_insured_categories')
is not null drop function
select_insured_categories";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_insured_categories(@name varchar(70)) returns int
as begin return (select count(icname) from insuredcategories where
icname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('insured_categories_insert') is not null drop procedure
insured_categories_insert";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create procedure insured_categories_insert @categ varchar(70) as begin
if(dbo.select_insured_categories(@categ)=0) insert into insuredcategories
(icname) values (@categ) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText =string.Format("exec
insured_categories_insert
'{0}'",rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем категории
ЛПУextract_lpu_categories()
{_dbf.CommandText = "select
distinct name from klpu where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_lpu_categories') is not null drop function
select_lpu_categories";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_lpu_categories(@name varchar(15)) returns int as
begin return (select count(lcname) from lpucategories where lcname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('lpu_categories_insert') is not null drop procedure
lpu_categories_insert";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create procedure lpu_categories_insert @categ varchar(15) as begin
if(dbo.select_lpu_categories(@categ)=0) insert into lpucategories (lcname)
values (@categ) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для добавления
записи_mdf.CommandText = string.Format("exec lpu_categories_insert
'{0}'",rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем типы
документовextract_documents()
{_dbf.CommandText = "select
distinct name from tpdoc where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_document') is not null drop function
select_document";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_document(@name varchar(50)) returns int as begin return (select
count(docname) from document where docname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('documents_insert') is not null drop procedure
documents_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
procedure documents_insert @doc varchar(50) as begin
if(dbo.select_document(@doc)=0) insert into document (docname) values (@doc)
end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec documents_insert
'{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем категории социального
положенияextract_social_status()
{_dbf.CommandText = "select
distinct name from socpol where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_social_status') is not null drop function
select_social_status";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_social_status(@name varchar(40)) returns int as
begin return (select count(ssname) from socialstatus where ssname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('social_status_insert') is not null drop procedure
social_status_insert";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create procedure social_status_insert @social varchar(40),@sscategory
varchar(25) as begin if(dbo.select_social_status(@social)=0) insert into
socialstatus (ssname,sscategory) values (@social,@sscategory)
end";_mdf.ExecuteNonQuery();category="";//категория: работающий/не
работающий(rdr_dbf.Read())
{
{((rdr_dbf["name"].ToString()
== "В\\служащий") || (rdr_dbf["name"].ToString() ==
"Пенсионер (работающий)") || (rdr_dbf["name"].ToString() ==
"Работающий, служащий"))= "Работающее население";=
"Неработающее население";
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec
social_status_insert '{0}','{1}'",
rdr_dbf["name"].ToString(),category);_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем типы
ЛПУextract_lpu_types()
{_dbf.CommandText = "select
distinct name from sltlpu where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_lpu_type') is not null drop function
select_lpu_type";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_lpu_type(@name varchar(40)) returns int as begin return (select
count(ltname) from lputype where ltname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('lpu_type_insert') is not null drop procedure lpu_type_insert";_mdf.ExecuteNonQuery();_mdf.CommandText
= "create procedure lpu_type_insert @type varchar(40) as begin
if(dbo.select_lpu_type(@type)=0) insert into lputype (ltname) values (@type)
end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec lpu_type_insert
'{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список признака движения
полисаextract_policie_movement()
{_dbf.CommandText = "select distinct
name from slprp where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_policie_movement') is not null drop function
select_policie_movement";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_policie_movement(@name varchar(40)) returns int as
begin return (select count(pmname) from policiesmovement where pmname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('policie_movement_insert') is not null drop procedure policie_movement_insert";_mdf.ExecuteNonQuery();_mdf.CommandText
= "create procedure policie_movement_insert @policie varchar(40) as begin
if(dbo.select_policie_movement(@policie)=0) insert into policiesmovement
(pmname) values (@policie) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec
policie_movement_insert '{0}'",
rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список подчинённости
ЛПУextract_lpu_subord()
{_dbf.CommandText = "select
distinct name from slpod where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_lpu_subord') is not null drop function
select_lpu_subord";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_lpu_subord(@name varchar(40)) returns int as begin return
(select count(lsname) from lpusubord where lsname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('lpu_subord_insert') is not null drop procedure
lpu_subord_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
procedure lpu_subord_insert @subord varchar(40) as begin
if(dbo.select_lpu_subord(@subord)=0) insert into lpusubord (lsname) values
(@subord) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec lpu_subord_insert
'{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список
имёнextract_list_names()
{_dbf.CommandText = "(select
name from slimx where high<>'' and name<>'') union (select im from
fizpers where im<>'' order by im)";_dbf = cmd_dbf.ExecuteReader();
//Функция проверки наличия имени в
базе данных_mdf.CommandText = "if object_id('select_name') is not null
drop function select_name";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_name(@name varchar(20)) returns int as begin
return(select count(nname) from names where nname=@name)
end";_mdf.ExecuteNonQuery();
//Процедура добавления
имени_mdf.CommandText = "if object_id('names_insert') is not null drop
procedure names_insert";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create procedure names_insert @name varchar(20) as begin
if(dbo.select_name(@name)=0) insert into names (nname) values (@name)
end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec names_insert
'{0}'", rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список
отчествextract_list_second_names()
{_dbf.CommandText = "(select
name from slotx where high<>'' and name<>'') union (select ot from
fizpers where ot<>'' order by ot)";_dbf = cmd_dbf.ExecuteReader();
//Функция проверки наличия отчества
в базе данных_mdf.CommandText = "if object_id('select_second_name') is not
null drop function
select_second_name";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_second_name(@sname varchar(20)) returns int as begin
return(select count(snname) from secondnames where snname=@sname)
end";_mdf.ExecuteNonQuery();
//Процедура добавления
отчества_mdf.CommandText = "if object_id('second_names_insert') is not
null drop procedure
second_names_insert";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create procedure second_names_insert @sname varchar(20) as begin
if(dbo.select_second_name(@sname)=0) insert into secondnames (snname) values
(@sname) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec
second_names_insert '{0}'",
rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список уточнений
предприятияextract_list_specifications()
{_dbf.CommandText = "select
distinct code,name from slpred where name<>'' and code<>'' order by
name";_dbf = cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_list_specifications') is not null drop function
select_list_specifications";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_list_specifications(@name varchar(25)) returns int
as begin return(select count(slname) from specificationslist where
slname=@name) end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('list_specifications_insert') is not null drop procedure
list_specifications_insert";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create procedure list_specifications_insert @id char(1), @specific
varchar(25) as begin if(dbo.select_list_specifications(@specific)=0) insert into
specificationslist (slid,slname) values (@id,@specific)
end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec
list_specifications_insert '{0}','{1}'", rdr_dbf["code"].ToString().Trim(),
rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}{ }
}_dbf.Close();
}
//Извлекаем классификаторы типов
договораextract_type_class()
{ _dbf.CommandText = "select
distinct name from sltipdog where name<>'' order by name";_dbf =
cmd_dbf.ExecuteReader();_mdf.CommandText = "if
object_id('select_type_class') is not null drop function
select_type_class";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_type_class(@name varchar(50)) returns int as begin return(select
count(ctname) from classtype where ctname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('type_class_insert') is not null drop procedure
type_class_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
procedure type_class_insert @type varchar(50) as begin
if(dbo.select_type_class(@type)=0) insert into classtype (ctname) values
(@type) end";_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec type_class_insert
'{0}'",rdr_dbf["name"].ToString());_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список
регионов/районов/населённых пунктовextract_cadastr()
{request = "";//строка
запроса_dbf.CommandText = "select code,name from region order by
code";_dbf = cmd_dbf.ExecuteReader();
//Функция проверки наличия региона в
базе данных_mdf.CommandText = "if object_id('select_region') is not null
drop function select_region";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_region(@name varchar(50)) returns int as begin
return (select count(rname) from regions where rname=@name)
end";_mdf.ExecuteNonQuery();
//Функция проверки наличия района в
базе данных_mdf.CommandText = "if object_id('select_area') is not null
drop function select_area";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_area(@code int,@name varchar(50)) returns int as
begin return (select count(aname) from areas where aname=@name and aid=@code)
end";_mdf.ExecuteNonQuery();
//Функция проверки наличия
населённого пункта в базе данных_mdf.CommandText = "if
object_id('select_occupieditem') is not null drop function
select_occupieditem";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_occupieditem(@code int,@name varchar(50)) returns
int as begin return (select count(oiname) from occupieditem where oiname=@name
and oiid=@code) end";_mdf.ExecuteNonQuery();
//Процедура добавления
регион/район/населённый пункт_mdf.CommandText = "if
object_id('cadastr_insert') is not null drop procedure
cadastr_insert";_mdf.ExecuteNonQuery();= "create procedure
cadastr_insert ";+= "@code varchar(10),@name varchar(50) as ";+=
"begin ";+= "declare @length int set @length=len(@code)
";+= "if ((@length=3) and (substring(@code,1,1)='0')) if (dbo.select_region(@name)=0)
insert into regions (rid,rname) values (@code,@name) ";+= "if
(@length=6) if (dbo.select_area(@code,@name)=0) insert into areas
(aid,aname,rid) values (@code,@name,substring(@code,1,3)) ";+= "if
(@length>6) if (dbo.select_occupieditem(@code,@name)=0) insert into
occupieditem (oiid,oiname,aid) values (@code,@name,substring(@code,1,6))
";+= "end";_mdf.CommandText =
request;_mdf.ExecuteNonQuery();(rdr_dbf.Read())
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec cadastr_insert
'{0}','{1}'",rdr_dbf["code"].ToString(),rdr_dbf["name"].ToString().Replace("'",""));_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Устанавливаем возрастное
положениеinsert_age()
{[] age_str ={ "Взрослое
население", "Детское население", "Взрослое и детское
население" };_mdf.CommandText = "if object_id('select_age') is not
null drop function select_age";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_age(@name varchar(50)) returns int as begin return
(select count(caname) from citizensage where caname=@name)
end";_mdf.ExecuteNonQuery();_mdf.CommandText = "if
object_id('age_insert') is not null drop procedure
age_insert";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
procedure age_insert @status varchar(50) as begin if(dbo.select_age(@status)=0)
insert into citizensage (caname) values (@status)
end";_mdf.ExecuteNonQuery();(int i = 0; i < 3; i++)
{
{
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec age_insert
'{0}'",age_str[i]);_mdf.ExecuteNonQuery();
}
{ }
}
}
//Извлекаем список страховых
организацийextract_smo()
{request = "";//строка
запроса_dbf.CommandText = "select m.code,m.name,(select distinct region
from slreg where code=m.okr) as region,m.gd,m.gb,m.sasu,m.tel,m.dogovor,
m.dbeg, m.dend from slmso m order by m.code";_dbf =
cmd_dbf.ExecuteReader();
//Функция проверки наличия СМО в
базе данных_mdf.CommandText = "if object_id('select_smo') is not null drop
function select_smo";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_smo(@smoid char(2)) returns int as begin
return(select count(smoid) from smo where smoid=@smoid)
end";_mdf.ExecuteNonQuery();
//Процедура добавления новой
СМО_mdf.CommandText = "if object_id('smo_insert') is not null drop
procedure smo_insert";_mdf.ExecuteNonQuery();= "create procedure
smo_insert @smoid char(2),@smoname varchar(50),@oiid int,@chief
varchar(40),@chiefaccountant varchar(40),@mischief varchar(40), @telephone
int,@tfomscontract varchar(8),@startdate datetime,@enddate datetime ";+=
"as begin ";+= "if(year(@startdate)=1900) set @startdate=null
if(year(@enddate)=1900) set @enddate=null ";+=
"if(dbo.select_smo(@smoid)=0) ";+= "insert into smo
(smoid,smoname,oiid,chief,chiefaccountant,mischief,telephone,tfomscontract,startdate,enddate)
values (@smoid,@smoname,@oiid,@chief,@chiefaccountant,@mischief,@telephone,@tfomscontract,@startdate,@enddate)
end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();telephone;start =
new DateTime();//дата началаend = new DateTime();//дата
окончания(rdr_dbf.Read())
{
{.TryParse(rdr_dbf["tel"].ToString(),
out telephone);.TryParse(rdr_dbf["dbeg"].ToString(),out
start);(start.Year == 1)=
Convert.ToDateTime("1.1.1900");.TryParse(rdr_dbf["dend"].ToString(),out
end);(end.Year == 1)= Convert.ToDateTime("1.1.1900");
//вызов хранимой процедуры для добавления
записи_mdf.CommandText = string.Format("exec smo_insert
'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}'",
rdr_dbf["code"].ToString(), rdr_dbf["name"].ToString(),
rdr_dbf["region"].ToString(), rdr_dbf["gd"].ToString(),
rdr_dbf["gb"].ToString(), rdr_dbf["sasu"].ToString(),
telephone, rdr_dbf["dogovor"].ToString(),
start.ToString("MM.dd.yyyy"),
end.ToString("MM.dd.yyyy"));_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлекаем список пунктов регистра
застрахованныхextract_prz()
{request="";//строка
запроса_dbf.CommandText = "select p.code,p.name,p.q,(select distinct
region from slreg where code=p.okr) as region,p.gd,p.gb,p.sasu,p.tel from slprz
p order by p.code";_dbf = cmd_dbf.ExecuteReader();
//Функция проверки наличия ПРЗ в
базе данных_mdf.CommandText = "if object_id('select_prz') is not null drop
function select_prz";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_prz(@przid char(4)) returns int as begin
return(select count(przid) from prz where przid=@przid) end";_mdf.ExecuteNonQuery();
//Процедура добавления
ПРЗ_mdf.CommandText = "if object_id('prz_insert') is not null drop
procedure prz_insert";_mdf.ExecuteNonQuery();= "create procedure
prz_insert @przid char(4),@przname varchar(50),@smoid char(2),@oiid int,@chief
varchar(20),@matrespon varchar(20),@pcoperator varchar(20),@telephone int
";+= "as begin "; += "if (dbo.select_prz(@przid)=0)
";+= "insert into prz
(przid,przname,smoid,oiid,chief,matrespon,pcoperator,telephone) values (@przid,@przname,@smoid,@oiid,@chief,@matrespon,@pcoperator,@telephone)
end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();tel =
0;//телефон(rdr_dbf.Read())
{
{.TryParse(rdr_dbf["tel"].ToString(),out
tel);
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec prz_insert
'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}'",rdr_dbf["code"],rdr_dbf["name"],rdr_dbf["q"],rdr_dbf["region"],rdr_dbf["gd"],rdr_dbf["gb"],rdr_dbf["sasu"],tel);_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлечение списка лечебно
профилактических учрежденийextract_lpu()
{request = ""; //строка
запроса_dbf.CommandText = "select i.code,i.name,(select distinct sl.name
from slpod sl where sl.code=i.pod),i.tl1,(select distinct slt.name from sltlpu
slt where
slt.code=i.tl),i.nom,i.tuzo,i.okpo,i.okogu,i.okato,i.otr,i.okopf,(select
distinct s.region from slreg s where s.code=i.okr) as region,i.addr,(select
k.name from klpu k where k.code=i.kt) as klpu,i.krr,i.gv,i.gb,dd from infostr i
order by i.code";_dbf = cmd_dbf.ExecuteReader();
//Функция поиска ключа подчинённости
ЛПУ по наименованию_mdf.CommandText = "if object_id('select_lpu_subord')
is not null drop function
select_lpu_subord";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_lpu_subord(@lsname varchar(40)) returns int as begin
return(select lsid from lpusubord where lsname=@lsname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа возрастного
ограничения по наименованию_mdf.CommandText = "if
object_id('select_citizens_age') is not null drop function
select_citizens_age";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_citizens_age(@caname varchar(30)) returns int as
begin return(select caid from citizensage where caname=@caname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа типа ЛПУ по
наименованию_mdf.CommandText = "if object_id('select_lpu_type') is not
null drop function
select_lpu_type";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_lpu_type(@ltname varchar(40)) returns int as begin return(select
ltid from lputype where ltname=@ltname) end";_mdf.ExecuteNonQuery();
//Функция поиска ключа категорий ЛПУ
по наименованию_mdf.CommandText = "if object_id('select_lpu_categories')
is not null drop function select_lpu_categories";_mdf.ExecuteNonQuery();_mdf.CommandText
= "create function select_lpu_categories(@lcname varchar(15)) returns int
as begin return(select lcid from lpucategories where lcname=@lcname)
end";_mdf.ExecuteNonQuery();
//Функция проверки наличия ЛПУ в
базе данных_mdf.CommandText = "if object_id('select_lpu') is not null drop
function select_lpu";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_lpu(@lpuid int) returns int as begin return(select
count(lpuid) from lpulist where lpuid=@lpuid) end";_mdf.ExecuteNonQuery();
//Процедура добавления лечебно
профилактического учреждения_mdf.CommandText = "if object_id('lpu_insert')
is not null drop procedure lpu_insert";_mdf.ExecuteNonQuery();=
"create procedure lpu_insert @lpuid int,@lpuname varchar(50),@lsname varchar(40),@age_id
int,@ltname varchar(40),@ltnumber int,@tuzo int,@okpo int,@okogu int,@okato
int,@code float,@okopf int,@oiid int,@address varchar(50),@lcname
varchar(15),@regtar float,@maindoctor varchar(20),@chiefaccountant
varchar(20),@date datetime ";+= "as begin ";+= "declare
@age varchar(30) ";+= "if (@age_id=1) set @age='Взрослое население'
";+= "if (@age_id=2) set @age='Детское население' ";+= "if
(@age_id=3) set @age='Взрослое и детское население' ";+= "if
(year(@date)=1900) set @date=null ";+= "if (dbo.select_lpu(@lpuid)=0)
";+= "insert into lpulist
(lpuid,lpuname,lsid,caid,ltid,ltnumber,tuzo,okpo,okogu,okato,code,okopf,oiid,address,lcid,regtar,maindoctor,chiefaccountant,date)
values (@lpuid,@lpuname,dbo.select_lpu_subord(@lsname),dbo.select_citizens_age(@age),dbo.select_lpu_type(@ltname),@ltnumber,@tuzo,@okpo,@okogu,@okato,@code,@okopf,@oiid,@address,dbo.select_lpu_categories(@lcname),@regtar,@maindoctor,@chiefaccountant,@date)
end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();code_ot = 0;//код
отр.kof = 0;//коэффициент регистрационного тарифаdate = new DateTime();//дата
регистрации(rdr_dbf.Read())
{
{.TryParse(rdr_dbf["otr"].ToString().Replace(",",decimal_sep).Replace(".",decimal_sep),
out
code_ot);.TryParse(rdr_dbf["krr"].ToString().Replace(",",decimal_sep).Replace(".",decimal_sep),
out kof);.TryParse(rdr_dbf["dd"].ToString(),out date);(date.Year ==
1)= Convert.ToDateTime("1.1.1900");
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec lpu_insert
'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}'",
rdr_dbf["code"].ToString(), rdr_dbf[1].ToString(),
rdr_dbf[2].ToString(), rdr_dbf["tl1"].ToString(),
rdr_dbf[4].ToString(), rdr_dbf["nom"].ToString(), rdr_dbf["tuzo"].ToString(),
rdr_dbf["okpo"].ToString(), rdr_dbf["okogu"].ToString(),
rdr_dbf["okato"].ToString(),
code_ot.ToString().Replace(",", "."),
rdr_dbf["okopf"].ToString(), rdr_dbf["region"].ToString(),
rdr_dbf["addr"].ToString(), rdr_dbf["klpu"].ToString(),
kof.ToString().Replace(",", "."),
rdr_dbf["gv"].ToString(), rdr_dbf["gb"].ToString(),
date.ToString("MM.dd.yyyy"));_mdf.ExecuteNonQuery();
}
{ }
}_dbf.Close();
}
//Извлечения списка
договоровextract_contracts()
{request = "";//строка
запроса_dbf.CommandText = "select ndog,rnp,regdat,(select distinct name
from sltipdog where code=sltipdog) as
ctname,inn,kpp,unemp,name,dbeg,dend,adres,boss,tel,otv,dopinf from dogovor
order by ndog";_dbf = cmd_dbf.ExecuteReader();
//Функция поиска ключа типа
классификатора по наименованию_mdf.CommandText = "if
object_id('select_type_class') is not null drop function
select_type_class";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_type_class(@ctname varchar(50)) returns int as begin return(select
ctid from classtype where ctname=@ctname) end";_mdf.ExecuteNonQuery();
//Функция проверки наличия договора
в базе данных_mdf.CommandText = "if object_id('select_contract') is not
null drop function
select_contract";_mdf.ExecuteNonQuery();_mdf.CommandText = "create function
select_contract(@clid int) returns int as begin return(select count(clid) from
contractlist where clid=@clid) end";_mdf.ExecuteNonQuery();
//Процедура добавления
договора_mdf.CommandText = "if object_id('contracts_insert') is not null
drop procedure contracts_insert";_mdf.ExecuteNonQuery();= "create
procedure contracts_insert @clid int,@regnum varchar(8),@registrationdate
smalldatetime,@ctname varchar(50),@inn1 bigint,@inn2 bigint,@kpp bigint,@nw
bit,@clname varchar(100),@startdate datetime,@enddate datetime,@address
varchar(50),@chief varchar(40),@telephone bigint,@omsresponsible
varchar(40),@addinf varchar(100) ";+= "as begin ";+=
"declare @reg varchar(2) ";+= "declare @registrationid
varchar(5) ";+= "set @reg=substring(@regnum,1,2) ";+= "set
@registrationid=substring(@regnum,4,5) ";+= "if
(year(@registrationdate)=1900) set @registrationdate=null ";+= "if
(dbo.select_contract(@clid)=0) ";+= "insert into contractlist
(clid,reg,registrationid,registrationdate,ctid,inn1,inn2,kpp,nw,clname,startdate,enddate,address,chief,telephone,omsresponsible,addinf)
values
(@clid,@reg,ltrim(@registrationid),@registrationdate,isnull(dbo.select_type_class(@ctname),null),@inn1,@inn2,@kpp,@nw,@clname,@startdate,@enddate,@address,@chief,@telephone,@omsresponsible,@addinf)
end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();regdate = new
DateTime();//дата регистрацииstart_reg = new DateTime();//дата начала
действияend_reg = new DateTime();//дата окончания действияinn1, inn2;//ИННpos,
kpp;tel;//телефон
//переменные для работы c Excelfile
= "";count_string = 0;column = 0;<string[]> records_list = new
List<string[]>();//список не обработанных записей(rdr_dbf.Read())
{
{.TryParse(rdr_dbf["regdat"].ToString(),out
regdate);(regdate.Year==1)=Convert.ToDateTime("1.1.1900");
//выделяем
инн=rdr_dbf["inn"].ToString();=rdr_dbf["inn"].ToString().IndexOf("/");(pos!=
-1)
{=
rdr_dbf["inn"].ToString().Substring(0, pos);=
rdr_dbf["inn"].ToString().Substring(pos + 1,
rdr_dbf["inn"].ToString().Length - pos - 1);
}=
"0";(rdr_dbf["kpp"].ToString() == "")= 0;=
Convert.ToInt32(rdr_dbf["kpp"]);.TryParse(rdr_dbf["dbeg"].ToString(),out
start_reg);.TryParse(rdr_dbf["dend"].ToString(),out
end_reg);.TryParse(rdr_dbf["tel"].ToString().Replace("-","").Trim(),out
tel);
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec contracts_insert
'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}'",
rdr_dbf["ndog"], rdr_dbf["rnp"], regdate.ToString("MM.dd.yyyy"),
rdr_dbf["ctname"], inn1, inn2, kpp, rdr_dbf["unemp"],
rdr_dbf["name"], start_reg.ToString("MM.dd.yyyy"),
end_reg.ToString("MM.dd.yyyy"),rdr_dbf["adres"],rdr_dbf["boss"],tel,rdr_dbf["otv"],rdr_dbf["dopinf"]);_mdf.ExecuteNonQuery();
}
{[] temp_record = new
string[16];//текущая запись_string++;(column = 0; column < 16;
column++)_record[column] = rdr_dbf[column].ToString();_list.Add(temp_record);
}
}
//создание лог файла(count_string
> 0)
{_file = new To_log_File();=
workdirectory + "\\log_file_contract_" + DateTime.Now.Date.ToString().Substring(0,
10) + ".xls";_file.create_log_file(records_list, count_string, file,
true);
}.Show("Импорт данных
завершён.", "Информация", MessageBoxButtons.OK,
MessageBoxIcon.Information);_dbf.Close();
}
//Извлечение списка
застрахованныхextract_insureds()
{request="";//строка
запроса_dbf.CommandText = "select s_pol,n_pol,(select distinct name from
slprp where code=jt) as pmid,lprint,n_kms,dp,dendp,tel,namewk,(select name from
tpdoc where code=tipd) as docname,sn_pasp,ft,fam,im,ot,dr,w,(select name from
socpol where code=sp) as ssname,regp,ils,regs,ul,dom,kor,str,kv,(select
distinct name from kateg where code=kt) as
icname,gr,mcod,psdate,sysdate,sysoper,old_q from fizpers order by
s_pol";_dbf = cmd_dbf.ExecuteReader();
//Функция поиска ключа признака движения
полиса по наименованию_mdf.CommandText = "if object_id('select_pmid') is
not null drop function
select_pmid";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_pmid(@pmname varchar(40)) returns int as begin return(select
pmid from policiesmovement where pmname=@pmname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа уточнения
предприятия по наименованию_mdf.CommandText = "if
object_id('select_specification') is not null drop function
select_specification";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_specification(@slname varchar(25)) returns char(1)
as begin return(select slid from specificationslist where slname=@slname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа типа
документа по наименованию_mdf.CommandText = "if
object_id('select_document') is not null drop function
select_document";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_document(@docname varchar(50)) returns int as begin
return(select docid from document where docname=@docname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа имени по
наименованию_mdf.CommandText = "if object_id('select_name') is not null
drop function select_name";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_name(@name varchar(20)) returns int as begin
return(select nid from names where nname=@name)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа отчества по
наименованию_mdf.CommandText = "if object_id('select_sname') is not null
drop function select_sname";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_sname(@snname varchar(20)) returns int as begin
return(select snid from secondnames where snname=@snname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа социального
статуса по наименованию_mdf.CommandText = "if object_id('select_status')
is not null drop function
select_status";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_status(@ssname varchar(40)) returns int as begin return(select
ssid from socialstatus where ssname=@ssname) end";_mdf.ExecuteNonQuery();
//Функция поиска ключа населённого
пункта по наименованию_mdf.CommandText = "if
object_id('select_occupieditem') is not null drop function
select_occupieditem";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_occupieditem(@oiid int) returns int as begin
return(select oiid from occupieditem where oiid=@oiid)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа улицы по
наименованию_mdf.CommandText = "if object_id('select_streets') is not null
drop function select_streets";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_streets(@slname varchar(50)) returns int as begin
return(select slid from streetslist where slname=@slname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа категории
застрахованного по наименованию_mdf.CommandText = "if
object_id('select_categories') is not null drop function
select_categories";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_categories(@icname varchar(70)) returns int as begin
return(select icid from insuredcategories where icname=@icname)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа ЛПУ по
наименованию_mdf.CommandText = "if object_id('select_lpu') is not null
drop function select_lpu";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_lpu(@lpuid char(7)) returns char(7) as begin
return(select lpuid from lpulist where lpuid=@lpuid)
end";_mdf.ExecuteNonQuery();
//Функция поиска ключа СМО по
наименованию_mdf.CommandText = "if object_id('select_smo') is not null
drop function select_smo";_mdf.ExecuteNonQuery();_mdf.CommandText =
"create function select_smo(@smoid char(2)) returns char(2) as begin
return(select smoid from smo where smoid=@smoid)
end";_mdf.ExecuteNonQuery();
//Функция проверки наличия
застрахованного в базе данных_mdf.CommandText = "if
object_id('select_insureds') is not null drop function
select_insureds";_mdf.ExecuteNonQuery();_mdf.CommandText = "create
function select_insureds(@clid int,@number int) returns int as begin
return(select count(clid) from insuredlist where clid=@clid and number=@number)
end";_mdf.ExecuteNonQuery();
//Процедура добавления
застрахованного_mdf.CommandText = "if object_id('insureds_insert') is not
null drop procedure insureds_insert";_mdf.ExecuteNonQuery();= "create
procedure insureds_insert @clid int,@number int,@pmname varchar(40),@pr
bit,@kms bigint,@startdate datetime,@enddate datetime,@telephone bigint,@slname
varchar(25),@docname varchar(50),@docnumber varchar(20),@os bit,@surname
varchar(20),@name varchar(20),@second varchar(20),@birthdate datetime,@male
bit,@ssname varchar(40),@oiid1 int,@ils int,@oiid2 int,@strname
varchar(50),@house int,@cas char(5),@str char(5),@apartment int,@icname
varchar(70),@pigroup int,@lpuid char(7),@outdate datetime,@changedate
datetime,@operator int,@smoid char(2) ";+= "as begin ";+=
"if(year(@outdate)=1900) set @outdate=null ";+=
"if(dbo.select_insureds(@clid,@number)=0) ";+= "insert into
insuredlist
(clid,number,pmid,pr,kms,startdate,enddate,telephone,slid2,docid,docnumber,os,surname,nid,snid,birthdate,male,ssid,disterr,ils,resterr,slid,house,cas,str,apartment,icid,pigroup,lpuid,outdate,changedate,operator,smoid)
values
(@clid,@number,dbo.select_pmid(@pmname),@pr,@kms,@startdate,@enddate,@telephone,dbo.select_specification(@slname),dbo.select_document(@docname),@docnumber,@os,@surname,dbo.select_name(@name),dbo.select_sname(@second),@birthdate,@male,dbo.select_status(@ssname),dbo.select_occupieditem(@oiid1),@ils,dbo.select_occupieditem(@oiid2),dbo.select_streets(@strname),@house,@cas,@str,@apartment,dbo.select_categories(@icname),@pigroup,dbo.select_lpu(@lpuid),@outdate,@changedate,@operator,dbo.select_smo(@smoid))
end";_mdf.CommandText = request;_mdf.ExecuteNonQuery();start_reg=new
DateTime();//дата регистрацииend_reg = new DateTime();//дата окончанияbirthdate
= new DateTime();//дата рожденияsurrender = new DateTime();//дата сдачиchange =
new DateTime();//дата измененияtelephone=0;//телефонos = false;male =
false;//пол (муж. - true, жен. - false)ils = 0;house=0, apartment=0;//дом,
квартираgroupe=0, oper=0;//группа инвалидности, оператор
//переменные для работы c Excelfile
= "";count_string = 0;column = 0;<string[]> records_list = new
List< string[]>();//список не обработанных записей(rdr_dbf.Read())
{
{.TryParse(rdr_dbf["dp"].ToString(),out
start_reg);.TryParse(rdr_dbf["dendp"].ToString(),out
end_reg);.TryParse(rdr_dbf["tel"].ToString(),out
telephone);(rdr_dbf["ft"].ToString().Replace("*",
"True") == "True")= true;=
false;.TryParse(rdr_dbf["dr"].ToString(),out
birthdate);(rdr_dbf["w"].ToString() == "1")= true;= false;.TryParse(rdr_dbf["ils"].ToString(),
out ils);.TryParse(rdr_dbf["dom"].ToString(), out
house);.TryParse(rdr_dbf["kv"].ToString(), out
apartment);.TryParse(rdr_dbf["gr"].ToString(), out
groupe);.TryParse(rdr_dbf["sysoper"].ToString(), out
oper);.TryParse(rdr_dbf["psdate"].ToString(), out
surrender);(surrender.Year == 1)=
Convert.ToDateTime("1.1.1900");.TryParse(rdr_dbf["sysdate"].ToString(),
out change);
//вызов хранимой процедуры для
добавления записи_mdf.CommandText = string.Format("exec insureds_insert
'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}','{19}','{20}','{21}','{22}','{23}','{24}','{25}','{26}','{27}','{28}','{29}','{30}','{31}','{32}'",
rdr_dbf["s_pol"], rdr_dbf["n_pol"], rdr_dbf["pmid"],
rdr_dbf["lprint"], Convert.ToInt64(rdr_dbf["n_kms"]),
start_reg.ToString("MM.dd.yyyy"),
end_reg.ToString("MM.dd.yyyy"), telephone,
rdr_dbf["namewk"], rdr_dbf["docname"],
rdr_dbf["sn_pasp"], os, rdr_dbf["fam"],
rdr_dbf["im"], rdr_dbf["ot"],
birthdate.ToString("MM.dd.yyyy"), male, rdr_dbf["ssname"],
rdr_dbf["regp"], ils, rdr_dbf["regs"],
rdr_dbf["ul"], house, rdr_dbf["kor"],
rdr_dbf["str"], apartment, rdr_dbf["icname"], groupe,
rdr_dbf["mcod"], surrender.ToString("MM.dd.yyyy"),
change.ToString("MM.dd.yyyy"), oper,
rdr_dbf["old_q"]);_mdf.ExecuteNonQuery();
}
{[] temp_record = new
string[33];//текущая запись_string++;(column = 0; column < 33;
column++)_record[column] = rdr_dbf[column].ToString();_list.Add(temp_record);
}
}
//создание лог файла(count_string
> 0)
{_file = new To_log_File();=
workdirectory + "\\log_file_insured_" +
DateTime.Now.Date.ToString().Substring(0, 10) +
".xls";_file.create_log_file(records_list, count_string,
file,false);(MessageBox.Show("Импорт данных завершён.\nКоличество не
обработанных записей: " + count_string + " \nОткыть лог файл?",
"Информация", MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==
DialogResult.Yes).Diagnostics.Process.Start(file);
}.Show("Импорт данных
завершён.", "Информация", MessageBoxButtons.OK,
MessageBoxIcon.Information);_dbf.Close();
}
#endregion