Разработка базы данных "Аптека" для ГУЗ НО "Медицинский информационно-аналитический центр"

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.10.2015
Размер файла 2,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

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

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

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

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

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

4.7 Электробезопасность

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

В рассматриваемом помещении находится следующее электрооборудование (классификация согласно ГОСТ 12.2.007.0-75 ССБТ "Изделия электротехнические. Общие требования безопасности"):

электротехнические изделия с классом защиты I: 4 ПЭВМ с видео дисплеями, принтер, ПРТО;

элеткротехнические изделия с классом защиты 0: осветительные приборы.

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

Поражение человека электрическим током в данном помещении может произойти по следующим причинам:

прикосновение к сетевому шнуру с поврежденной изоляцией;

прикосновение к корпусу электроприбора, оказавшегося под напряжением вследствие повреждения изоляции;

неисправность проводки, выключателей, розеток.

Электробезопасность, в соответствии с ГОСТ 12.1.019-79 ССБТ "Электробезопасность. Общие требования", должна обеспечиваться:

конструкцией электроустановок;

техническими способами и средствами защиты;

организационными и техническими мероприятиями.

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

номинального напряжения, рода и частоты тока электроустановки (220В, частота переменного тока 50Гц);

способа электроснабжения (от стационарной сети);

режима нейтрали (глухозаземленная нейтраль);

вида исполнения (стационарные);

условий внешней среды (помещения без повышенной опасности);

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

видов работ (эксплуатация).

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

безопасное расположение токоведущих частей (внутри корпуса);

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

защитное отключение (защита от перегрузок и коротких замыканий);

малые напряжения (клавиатура, мышь);

предупредительная сигнализации (зеленая лампа на системном блоке).

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

защитное зануление;

защитное отключение.

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

4.8 Пожарная безопасность

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

бумага;

мебель;

полиматериалы (пластмассовые корпуса ПЭВМ).

Наиболее вероятные причины возникновения пожара в рассматриваемом помещении:

короткое замыкание;

нарушение правил пожарной безопасности;

нарушение изоляции токонесущих частей;

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

Согласно НПБ 105-03 "Определение категорий помещений и зданий по взрывопожарной и пожарной опасности", данное помещение относится к категории "В".

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

Таблица 4.9 - Категории помещений в зависимости от удельной пожарной нагрузки

Категория помещения

Удельная пожарная нагрузка g на участке, МДж/м-2

В1

Более 2200

В2

1401 - 2200

В3

181 - 1400

В4

1 - 180

(4.1)

где - количество i-го материала пожарной нагрузки, кг;

- низшая теплота сгорания i-го материала пожарной нагрузки, МДж/кг.

Удельная пожарная нагрузка , МДж /, определяется из соотношения:

(4.2)

где - площадь размещения пожарной нагрузки, (но не менее 10 ).

Таким образом .

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

Пожарная безопасность обеспечивается согласно ГОСТ 12.1.004-91 ССБТ "Пожарная безопасность":

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

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

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

применением технологического процесса и оборудования, удовлетворяющего требованиям электростатической искробезопасности по ГОСТ 12.1.018;

устройством молниезащиты зданий, сооружений и оборудования.

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

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

Применением средств пожаротушения.

При защите от пожара помещений, оборудованных ПЭВМ, рекомендуется применять хладоновые и углекислотные огнетушители с учетом предельно допустимой концентрации огнетушащего вещества. Для защиты рассматриваемого помещения используются огнетушители ОУ-5. На этаже, где расположено рассматриваемое помещение имеется два ручных углекислотных огнетушителя типа ОУ-5. Расстояние от возможного очага пожара до места размещения огнетушителя не должно превышать 30 м (так как помещение категории В).

Применением автоматических установок пожарной сигнализации и пожаротушения.

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

Таблица 4.10 - Перечень помещений, подлежащих защите АУПТ и АУПС

Объект защиты

АУПТ

АУПС

Помещения связи

Помещение для размещения персональных ЭВМ на рабочих столах пользователей

Независимо от площади

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

В таблице 4.11 указаны различные параметры для производственных зданий согласно СНиП 31-03-2001. Рассматриваемое здание относится к III степени огнестойкости.

Таблица 4.11 Производственные здания

Категория зданий или пожарных отсеков

Высота здания*, м

Степень огнестойкости зданий

Класс конструктивной пожарной опасности зданий

Площадь этажа, м2, в пределах

пожарного отсека зданий

одноэтажных

в два этажа

в три этажа и более

В

48

III

С0

25000

10400

5200

В таблице 4.12 указаны пределы огнестойкости строительных конструкций для рассматриваемого здания, согласно СНиП 21-01-97 "Пожарная безопасность зданий и сооружений".

Таблица 4.12 Предел огнестойкости строительных конструкций.

Степень огнестой-кости здания

Предел огнестойкости строительных конструкций, не менее

Несущие элементы здания

Наружные ненесу-щие стены

Перекрытия междуэтажные,

(в т. ч. чердачные и над подвалами)

Элементы бесчердачных покрытий

Лестничные клетки

Настилы

(в том числе с утепли-телем)

Фермы, балки, прого-ны

Внутренние стены

Мерши и площадки лестниц

III

R 15

RЕ 15

RЕI 15

RЕ 15

RЕ 15

RЕI 45

R З0

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

потери несущей способности (R);

потери целостности (Е);

потери теплоизолирующей способности (I).

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

Таблица 4.13 Конструктивные характеристики зданий в зависимости от их степени огнестойкости.

Степень огнестойкости

Конструктивные характеристики

III

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

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

Здание, где расположено рассматриваемое помещение, является лечебным учреждением (амбулаторно-поликлиническим), поэтому тип СОУЭ определяется, исходя из значения нормативного показателя, а именно посещений в смену. В соответствии с НПБ 104-03 "Проектирование систем оповещения людей о пожаре в зданиях и сооружениях" в этом здании установлена СОУЭ типа 3. Обоснование в таблице 4.14.

Таблица 4.14 Тип СОУЭ для зданий

Группа зданий, комплексов и сооружений (наименование нормативного показателя)

Значение нормативного показателя

Тип СОУЭ

Лечебные учреждения:

амбулаторно-поликлинические учреждения (посещения в смену, чел.)

90 и более

3

СОУЭ типа 3 обладает следующими характеристиками:

Способы оповещения.

Звуковой (сирена, тонированный сигнал и др.).

Речевой (передача специальных текстов).

Световой:

световые мигающие указатели;

световые оповещатели "Выход";

статические указатели направления движения.

Разделение здания на зоны пожарного оповещения

Обратная связь зон оповещения с помещением пожарного поста диспетчерской.

Для обеспечения эвакуации предусмотрено:

2 эвакуационных выхода (на каждом этаже здания) шириной 1,2 м, и соответствующее конструктивное исполнение эвакуационных путей;

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

В таблице 4.15 представлены нормы на ширину эвакуационного выхода.

Таблица 4.15 Ширина эвакуационного выхода.

Категория наиболее пожароопасного помещения, выходящего в коридор

Степень огнестойкости здания

Класс конструктивной пожарной опасности здания

Количество людей на 1 м ширины эвакуационного выхода (двери) из коридора, чел.

В3

III

С0

183

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

Таблица 4.16 Нормы эвакуации

Объем помещения, тыс. м3

Категория помещения

Степень огнестой-кости зданий

Класс конструктивной пожарной опасности зданий

Расстояние, м, при плотности людского потока в общем проходе, чел/м

до 1

св.1 до 3

св.3 до 5

80 и более

В3

III

С0

240

140

100

Организационно-технические мероприятия должны включать:

организацию пожарной охраны;

организацию обучения работающих правилам пожарной безопасности на производстве;

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

В соответствии с ППБ 01-03 "Правила пожарной безопасности РФ" предъявляются следующие требования к работникам, помещениям и зданиям:

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

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

определены и оборудованы места для курения;

определен порядок обесточивания электрооборудования в случае пожара и по окончании рабочего дня;

регламентированы:

порядок проведения временных огневых и других пожароопасных работ;

действия работников при обнаружении пожара;

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

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

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

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

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

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

4.9 Организация рабочего места

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

В соответствии с СанПиН 2.2.2/2.4.1340-03 "Гигиенические требования к персональным электронно-вычислительным машинам и организации работы" и ГОСТ 12.2.032-78 "Рабочее место при выполнении работ сидя. Общие эргономические требования" рабочее место должно соответствовать:

при размещении рабочих мест с ПЭВМ расстояние между рабочими столами с видеомониторами (в направлении тыла поверхности одного видеомонитора и экрана другого видеомонитора), должно быть не менее 2,0 м, а расстояние между боковыми поверхностями видеомониторов - не менее 1,2 м. Фактическое расстояние межу видеомониторами 1,3 м;

площадь на одно рабочее место пользователей ПЭВМ с ВДТ на базе электроннолучевой трубки (ЭЛТ) должна составлять не менее 6 м2, в помещениях культурно-развлекательных учреждений и с ВДТ на базе плоских дискретных экранов (жидкокристаллические, плазменные) - 4,5 м2.

при использовании ПЭВМ с ВДТ на базе ЭЛТ (без вспомогательных устройств - принтер, сканер и др.), отвечающих требованиям международных стандартов безопасности компьютеров, с продолжительностью работы менее 4-х часов в в день допускается минимальная площадь 4,5 м2 на одно рабочее место пользователя (взрослого и учащегося высшего профессионального образования).

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

экран видеомонитора должен находиться от глаз пользователя на расстоянии 600 - 700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов;

спинка стула должна быть изогнутой формы, повторяющей анатомический изгиб позвоночника в поясничном отделе, ее длина - 0,3 м, угол наклона - 10-30 градусов, стол расположен на расстоянии 0,65 м от стула. В рассматриваемом помещении используются стулья с возможностями вращения во круг оси, регулировки высоты сидения и угла наклона спинки.

Длительность рабочего дня составляет 9 часов с 48 минутным перерывом на обед и регламентированным перерывом 15 минут через каждый час.

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

Общие требования к организации рабочих мест пользователей ПЭВМ:

при размещении рабочих мест с ПЭВМ расстояние между рабочими столами с видеомониторами (в направлении тыла поверхности одного видеомонитора и экрана другого видеомонитора), должно быть не менее 2,0 м, а расстояние между боковыми поверхностями видеомониторов не менее 1,2 м.

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

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

экран видеомонитора должен находиться от глаз пользователя на расстоянии 600-700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов.

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

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

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

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

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

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

высота рабочей поверхности стола для взрослых пользователей должна регулироваться в пределах 680-800 мм, при отсутствии такой возможности высота рабочей поверхности стола должна составлять 725 мм.

модульными размерами рабочей поверхности стола для ПЭВМ, на основании которых должны рассчитываться конструктивные размеры, следует считать: ширину 800, 1000, 1200 и 1400 мм; глубину 800 и 1000 мм при нерегулируемой его высоте, равной 725 мм.

рабочий стол должен иметь пространство для ног высотой не менее 600 мм, шириной - не менее 500 мм, глубиной на уровне колен - не менее 450 мм и на уровне вытянутых ног - не менее 650 мм.

Конструкция рабочего стула должна обеспечивать:

ширину и глубину поверхности сиденья не менее 400 мм;

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

регулировку высоты поверхности сиденья в пределах 400 - 550 мм и углам наклона вперед до 15 град., и назад до 5 град.;

высоту опорной поверхности спинки 300 ± 20 мм, ширину - не менее 380 мм и радиус кривизны горизонтальной плоскости - 400 мм;

угол наклона спинки в вертикальной плоскости в пределах ± 30 градусов;

регулировку расстояния спинки от переднего края сиденья в пределах 260 - 400 мм;

стационарные или съемные подлокотники длиной не менее 250 мм и шириной 50 - 70 мм;

регулировка подлокотников по высоте над сиденьем в пределах 230 ± 30 мм и внутреннего расстояния между подлокотниками в пределах 350 - 500 мм.

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

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

4.10 Расчетная часть

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

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

В помещении в светлое время суток используется естественное и искусственное освещение, в темное время суток - общее равномерное искусственное освещение.

При общем искусственном освещении: освещенность - 400 лк.

Согласно СанПиН 2.2.2.542-96 для освещения помещений с ВДТ и ПЭВМ следует применять светильники серии ЛПО. Группа светильников - 8.

Для искусственного освещения будем использовать светильники типа ЛПО 01-2х400/Д-01 по 2 лампы ЛБ 40 в каждом.

Определим количество светильников необходимое для освещения.

Световой поток лампы (ФЛ) в светильниках с люминесцентными лампами и при расположении светильников в ряд определяют по формуле:

(4.3)

где:

ЕН - нормированная освещенность, лк;

S - площадь освещаемого помещения, м2;

k - коэффициент запаса;

Z - коэффициент минимальной освещенности;

NP - количество рядов;

n1 - количество светильников в ряду;

n2 - количество ламп в светильнике;

- коэффициент использования светового потока;

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

Индекс помещения определяется по формуле:

(4.4)

где:

А и Б соответственно длина и ширина помещения, м;

НР - высота подвеса светильников, м.

Рабочее помещение имеет следующие размеры:

ширина - 6 м;

длинна - 6 м;

высота подвеса - 3,2 м

Определим индекс помещения:

(4.5)

Согласно СанПиН 2.2.2.542-96 для внутренней отделки интерьера помещений с ВДТ и ПЭВМ должны использоваться диффузно-отражающие материалы с коэффициентом отражения:

для потолка - 0,7;

для стен - 0,5;

для пола - 0,3.

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

= 38%;

Световой поток лампы ЛБ 40 равен 3120 лк. Коэффициент минимальной освещенности для люминесцентных ламп Z = 1,1. Согласно требованиям к освещению на рабочих местах, оборудованных ПЭВМ, коэффициент запаса (Кз) для осветительных установок общего освещения должен приниматься равным 1,4.

Определим количество светильников:

(4.6)

Таким образом, для обеспечения нормированной освещенности необходимо иметь 5 светильников типа ЛПО 01-2х400/Д-01 по 2 лампы типа ЛБ40 в каждом.

Заключение

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

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

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

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

1. Ковязин А., Востриков С., Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase / Firebird / Yaffil. - СПб.: Питер, 2007. - 496 с.: ил.

2. Дэйт К., Введение в системы баз данных. - К.: Вильямс, 2000. - 512 с.

3. Хелен Борри, Firebird: руководство разработчика баз данных. - СПб.: БХВ-Петербург, 2007. - 1104 с.

4. Хомоненко А., Гофман В., Мещеряков Е., Никифоров В., Delphi 7/Под общ. Ред.А.Д. Хомоненко. - СПб.: БХВ-Петербург, 2008. - 1216 с.: ил.

5. Гольцман В., MySQL 5.0. Библиотека программиста. - СПб.: Питер, 2010. - 256 с.: ил.

6. СТП 1-У-НГТУ-2004. Общие требования к оформлению пояснительных записок дипломных и курсовых проектов. - Н. Новгород, 2004. - 21 с.

Приложения

Приложение А

Часть кода программы

Otch_ved. pas - форма "Формирование ведомости"

unit Otch_ved;

interface

uses

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

Dialogs, ToolWin, ComCtrls, StdCtrls, ExtCtrls, CheckLst, Mask, DB,

IBCustomDataSet, IBQuery, FR_DSet, FR_DBSet, FR_Class, Grids, DBGrids,

Menus;

type

TFormVed = class (TForm)

GroupBox1: TGroupBox;

IstFnBox: TCheckListBox;

StatusBar1: TStatusBar;

GroupBox2: TGroupBox;

GrupBox: TCheckListBox;

Panel1: TPanel;

Label1: TLabel;

DTPicker1: TDateTimePicker;

Label2: TLabel;

DTPicker2: TDateTimePicker;

ToolBar1: TToolBar;

ToolButton1: TToolButton;

ToolButton2: TToolButton;

ToolButton3: TToolButton;

ToolButton4: TToolButton;

GroupBox3: TGroupBox;

Label3: TLabel;

FromPos: TMaskEdit;

Label4: TLabel;

ToPos: TMaskEdit;

IBQry1: TIBQuery;

VedGrid: TStringGrid;

ToolButton9: TToolButton;

ToolButton6: TToolButton;

ToolButton7: TToolButton;

Label5: TLabel;

Edit_poisk: TEdit;

ToolButton8: TToolButton;

frReport1: TfrReport;

frDBDataSet1: TfrDBDataSet;

R1: TCheckBox;

R2: TCheckBox;

PopupMenu1: TPopupMenu;

N2: TMenuItem;

procedure TBExit (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure ChBoxClick (Sender: TObject);

procedure TBVedom (Sender: TObject);

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

procedure FormCanResize (Sender: TObject; var NewWidth,

NewHeight: Integer; var Resize: Boolean);

procedure TBPrint (Sender: TObject);

procedure VedGridDrawCell (Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure VedGridSelectCell (Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure TBOststkiDannie (Sender: TObject);

procedure TBSumm (Sender: TObject);

procedure TBPoisk (Sender: TObject);

procedure StatusBar1DrawPanel (StatusBar: TStatusBar;

Panel: TStatusPanel; const Rect: TRect);

procedure BoxDblClick (Sender: TObject);

private

QryText: string;

TabNam1, TabNam2, TabNam3: String;

mIstFin, mGrup, mRec: Array of Integer;

Date1, Date2: TDateTime;

RowN, Flag, IFFlag, GrupFl: Integer;

public

{ Public declarations }

end;

var

FormVed: TFormVed;

implementation

uses main, p_karta, VedOst1;

{$R *. dfm}

procedure TFormVed. FormCreate (Sender: TObject);

var I: Integer;

begin

Date1: =StrToDate ('01.01. '+IntToStr (MF. nastr_god));

Date2: =Now; Flag: =1;

DTPicker1. DateTime: =Date1;

DTPicker2. DateTime: =Date2;

QryText: = 'Select * From dicISTFIN Order by NameOfIstFinansir';

MF. OpenQry (QryText, MF. IBQuery1);

IstFnBox. Items. Clear; SetLength (mIstFin, 0); i: =0; IFFlag: =1;

while not MF. IBQuery1. Eof do

begin

IstFnBox. Items. Add (MF. IBQuery1. FieldByName ('NameOfIstFinansir'). asString);

Inc (i); SetLength (mIstFin, i);

mIstFin [i-1]: = MF. IBQuery1 ['ISTFINANSIRID'];

IstFnBox. Checked [i-1]: =True;

MF. IBQuery1. Next;

end;

QryText: = 'Select * From dicGruppa Order by NameOfGPKU';

MF. OpenQry (QryText, MF. IBQuery1);

GrupBox. Items. Clear; SetLength (mGrup, 0); i: =0; GrupFl: =1;

while not MF. IBQuery1. Eof do

begin

GrupBox. Items. Add (MF. IBQuery1. FieldByName ('NameOfGPKU'). asString);

Inc (i); SetLength (mGrup, i);

mGrup [i-1]: = MF. IBQuery1 ['GRUPPAPKUID'];

GrupBox. Checked [I-1]: =true;

MF. IBQuery1. Next;

end;

TabNam1: =MF.compN+'_ved1';

MF. IBTable1. Active: =False;

MF. IBTable1. TableName: =TabNam1;

TabNam2: =MF.compN+'_ved2';

MF. IBTable2. Active: =False;

MF. IBTable2. TableName: =TabNam2;

TabNam3: =MF.compN+'_ved3';

MF. IBTable3. Active: =False;

MF. IBTable3. TableName: =TabNam3;

If MF. exec_Tran. InTransaction then MF. exec_Tran.commit;

MF. exec_Tran. StartTransaction;

TRY

begin

If MF. IBTable1. Exists then

QryText: ='DELETE FROM '+TabNam1

else

QryText: ='CREATE TABLE '+TabNam1+

' (NomenklID int, SeriaID int, SumOst Numeric (11,3), SumPrih Numeric (11,3), '+

'SumRash Numeric (11,3), IstFinansirID int, PrihCenNDS Numeric (11,3)) ';

MF. ExecQry (QryText, MF. ExQuery2);

If MF. IBTable2. Exists then

QryText: ='DELETE FROM '+TabNam2

else

QryText: ='CREATE TABLE '+TabNam2+

' (NomenklID int, SeriaID int, SumOst Numeric (11,3), SumPrih Numeric (11,3), '+

'SumRash Numeric (11,3), IstFinansirID int, PrihCenNDS Numeric (11,3)) '; //

MF. ExecQry (QryText, MF. ExQuery2);

end;

MF. exec_Tran.commit;

EXCEPT

MF. exec_Tran. Rollback;

END;

VedGrid. Cells [0, 0]: ='№';

VedGrid. Cells [1, 0]: ='Наименование';

VedGrid. Cells [2, 0]: ='Цена,';

VedGrid. Cells [3, 0]: ='Остаток';

VedGrid. Cells [4, 0]: ='Приход';

VedGrid. Cells [5, 0]: ='Расход';

VedGrid. Cells [6, 0]: ='Остаток';

end;

procedure TFormVed. TBExit (Sender: TObject);

begin

SetLength (mIstFin, 0); SetLength (mGrup, 0);

Close

end;

procedure TFormVed. ChBoxClick (Sender: TObject);

var CLBox: TCheckListBox;

begin

CLBox: =IstFnBox;

If (Sender as TCheckBox). Name='CheckBox1' then CLBox: =IstFnBox

Else If (Sender as TCheckBox). Name='CheckBox2' then CLBox: =GrupBox;

If (Sender as TCheckBox). Checked then

CLBox. Enabled: =False

Else

CLBox. Enabled: =True;

end;

procedure TFormVed. TBVedom (Sender: TObject);

var D1, D2, OrderTxt, IFList, GPList, W1, W2, Pf, Fn, Gr: String;

I, F, T: Integer;

S1, S2, S3, S4: Real;

Sf1, Sf2, Sf3, Sf4: Real;

Sg1, Sg2, Sg3, Sg4: Real;

SS1, SS2, SS3, SS4: Real;

begin

If DTPicker1. DateTime > DTPicker2. DateTime then

begin

Application. MessageBox ('Первая дата больше второй! ', 'Ошибка!!! ', MB_OK);

exit;

end;

D1: =MF. MD (DateToStr (DTPicker1. DateTime));

D2: =MF. MD (DateToStr (DTPicker2. DateTime));

Flag: =0;

If MF. exec_Tran. InTransaction then MF. exec_Tran.commit;

MF. exec_Tran. StartTransaction;

TRY

begin

QryText: ='DELETE FROM '+TabNam1;

MF. ExecQry (QryText, MF. ExQuery2);

QryText: ='DELETE FROM '+TabNam2;

MF. ExecQry (QryText, MF. ExQuery2);

end;

MF. exec_Tran.commit;

EXCEPT

MF. exec_Tran. Rollback;

END;

If MF. exec_Tran. InTransaction then MF. exec_Tran.commit;

MF. exec_Tran. StartTransaction;

TRY

begin

QryText: ='Insert Into '+TabNam1+

' (NomenklID, SeriaID, SumOst, IstFinansirID, PrihCenNDS) '+

'Select NomenklID, SeriaID, Sum (OstCount) as SumOst, IstFinansirID, PrihCenNDS '+

'From OstatkiDoc O, OststkiDannie Os '+

'Where O. YearOfOst='+InttoStr (MF. nastr_god) +' and O. Ostid=Os. Ostid '+

'Group by NomenklID, SeriaID, IstFinansirID, PrihCenNDS';

MF. ExecQry (QryText, MF. ExQuery2);

QryText: ='Insert Into '+TabNam1+

' (NomenklID, SeriaID, SumPrih, IstFinansirID, PrihCenNDS) '+

'Select NomenklID, SeriaID, Sum (PrihFaktCount) as SumPrih, IstFinansirID, PrihCenNDS '+

'From PrixodDannie P2, PrixDoc PD2 '+

'Where P2. PrihID=PD2. PrihID and '+

'PD2. DatePrih between '+D1+' and '+D2+' '+

'Group by NomenklID, SeriaID, IstFinansirID, PrihCenNDS';

MF. ExecQry (QryText, MF. ExQuery2);

QryText: ='Insert Into '+TabNam1+

' (NomenklID, SeriaID, SumRash, IstFinansirID, PrihCenNDS) '+

'Select NomenklID, SeriaID, Sum (RasxCount) as SumRash, IstFinansirID, PrihCenNDS '+

'From RashodDannie R1, RashodDoc RD1 '+

'Where R1. RashID=RD1. RashID and '+

'RD1. DateRash between '+D1+' and '+D2+' '+

'Group by NomenklID, SeriaID, IstFinansirID, PrihCenNDS';

MF. ExecQry (QryText, MF. ExQuery2);

end;

MF. exec_Tran.commit;

EXCEPT

MF. exec_Tran. Rollback;

END;

QryText: ='Insert Into '+TabNam2+

' (NomenklID, SeriaID, SumOst, SumPrih, SumRash, IstFinansirID, PrihCenNDS) '+

'Select NomenklID, SeriaID, Sum (COALESCE (SumOst, 0)) as SumOst, Sum (COALESCE (SumPrih, 0)) as SumPrih, '+

'Sum (COALESCE (SumRash, 0)) as SumRash, IstFinansirID, PrihCenNDS '+

'From '+TabNam1+' '+

'Group by NomenklID, SeriaID, IstFinansirID, PrihCenNDS';

MF. ExecQryTr (QryText, MF. ExQuery2, MF. exec_Tran);

IFList: =''; GPList: =''; W1: =''; W2: ='';

IFList: =' (0';

For I: =0 To Length (mIstFin) - 1 Do

begin

If IstFnBox. Checked [I] then

IFList: =IFList+', '+IntToStr (mIstFin [I]);

end;

IFList: =IFList+') ';

W1: ='and IstFinansirID in '+IFList; // Where

GPList: =' (0';

For I: =0 To Length (mGrup) - 1 Do

begin

If GrupBox. Checked [I] then

GPList: =GPList+', '+IntToStr (mGrup [I]);

end;

GPList: =GPList+') ';

W2: =' and DP. GRUPPAPKUID in '+GPList;

If Trim (FromPos. Text) ='' then F: =0 Else F: =StrToInt (FromPos. Text);

If Trim (ToPos. Text) ='' then T: =0 Else T: =StrToInt (ToPos. Text);

QryText: ='Select distinct N. NOMENKLID, N. NumOfNomenkl, (Middle (N. NumOfNomenkl, '+IntToStr (F) +', '+IntToStr (T) +')) as Nom, N. NMNKLName, '+

'SrokDeistvSertif, NumOfSertif, SrokG, S. SeriaID, SeriaNom, NameOfKontr, '+

'IstFinansirID, NameOfIstFinansir, GRUPPAPKUID, GPLUName, EdIzmID, PrihCenNDS, '+

' (COALESCE (SumOst, 0)) as SumOst, (COALESCE (SumPrih, 0)) as SumPrih, '+

' (COALESCE (SumRash, 0)) as SumRash, '+

' (COALESCE (SumOst, 0) + COALESCE (SumPrih, 0) - COALESCE (SumRash, 0)) as SumOst2 '+

'From DicFarmPrep DP '+

'Inner join Nomenklat N on DP. FarmPrepID=N. FarmPrepID '+

'left join dicGruppa DG on DP. GRUPPAPKUID=DG. GRUPPAPKUID '+

'left join Seria S on N. NomenklID=S. NomenklID '+

'left join DicEdIzmereniya E on N. EIZID=E. EIZID '+

'left join DicKontragent K on S. Proizvid=K. kagid '+

'left join '+TabNam2+' T on (N. NomenklID=T. NomenklID and S. SeriaID=T. SeriaID) '+

'left join dicistfin DI on T. IstFinansirID=DI. IstFinansirID '+

'Where (COALESCE (SumOst, 0) <>0 or COALESCE (SumPrih, 0) <>0 or COALESCE (SumRash, 0) <>0 or '+

' (COALESCE (SumOst, 0) + COALESCE (SumPrih, 0) - COALESCE (SumRash, 0)) <>0) '+W1+W2+' ';

OrderTxt: ='Order BY ';

If R1. checked then OrderTxt: =OrderTxt+'NameOfIstFinansir, ';

If R2. checked then OrderTxt: =OrderTxt+'GPLUName, ';

OrderTxt: =OrderTxt+'Nom, NmnklName, SeriaNom';

MF. OpenQry (QryText+OrderTxt, IBQry1); // WhereTxt+

IBQry1. First; VedGrid. RowCount: =2; I: =1;

Fn: =''; Gr: =''; // Для хранения предыдущего значения ист. фин-я и группы

S1: =0; S2: =0; S3: =0; S4: =0; Sf1: =0; Sf2: =0; Sf3: =0; Sf4: =0;

Sg1: =0; Sg2: =0; Sg3: =0; Sg4: =0; SS1: =0; SS2: =0; SS3: =0; SS4: =0;

SetLength (mRec, 0); // отражает номер записи запроса в строке грида

VedGrid. Cells [0, 1]: ='';

VedGrid. Cells [1, 1]: ='';

VedGrid. Cells [2, 1]: ='';

VedGrid. Cells [3, 1]: ='';

VedGrid. Cells [4, 1]: ='';

VedGrid. Cells [5, 1]: ='';

VedGrid. Cells [6, 1]: ='';

While not IBQry1. Eof do

begin

If I>1 then VedGrid. RowCount: =VedGrid. RowCount+1;

If (I>1) and

( (VedGrid. Cells [0, I-1] <>IBQry1. FieldByName ('Nom'). asString) or

( (Fn<>IBQry1. FieldByName ('NameOfIstFinansir'). asString) and (R1. checked)) or

( (Gr<>IBQry1. FieldByName ('GPLUName'). asString) and (R2. checked))) then

Begin

VedGrid. RowCount: =VedGrid. RowCount+1; I: =I+1;

VedGrid. Cells [0, I-1]: ='';

VedGrid. Cells [1, I-1]: ='Итого по "'+VedGrid. Cells [0, I-2] +'"';

VedGrid. Cells [2, I-1]: ='';

VedGrid. Cells [3, I-1]: =FloatToStr (S1); // 'Ост. на нач. ';

VedGrid. Cells [4, I-1]: =FloatToStr (S2); // 'Приход';

VedGrid. Cells [5, I-1]: =FloatToStr (S3); // 'Расход';

VedGrid. Cells [6, i-1]: =FloatToStr (S4); // 'Ост. на кон. ';

S1: =0; S2: =0; S3: =0; S4: =0;

If (Gr<>IBQry1. FieldByName ('GPLUName'). asString) and (R2. checked) then

begin

VedGrid. RowCount: =VedGrid. RowCount+1; I: =I+1;

VedGrid. Cells [0, I-1]: ='';

VedGrid. Cells [1, I-1]: ='Группа "'+Gr+'"';

VedGrid. Cells [2, I-1]: ='';

VedGrid. Cells [3, I-1]: =FloatToStr (Sg1); // 'Ост. на нач. ';

VedGrid. Cells [4, I-1]: =FloatToStr (Sg2); // 'Приход';

VedGrid. Cells [5, I-1]: =FloatToStr (Sg3); // 'Расход';

VedGrid. Cells [6, i-1]: =FloatToStr (Sg4); // 'Ост. на кон. ';

Sg1: =0; Sg2: =0; Sg3: =0; Sg4: =0; S1: =0; S2: =0; S3: =0; S4: =0;

end;

If (Fn<>IBQry1. FieldByName ('NameOfIstFinansir'). asString) and (R1. checked) then

begin

VedGrid. RowCount: =VedGrid. RowCount+1; I: =I+1;

VedGrid. Cells [0, I-1]: ='';

VedGrid. Cells [1, I-1]: ='Финанс. "'+Fn+'"';

VedGrid. Cells [2, I-1]: ='';

VedGrid. Cells [3, I-1]: =FloatToStr (Sf1); // 'Ост. на нач. ';

VedGrid. Cells [4, I-1]: =FloatToStr (Sf2); // 'Приход';

VedGrid. Cells [5, I-1]: =FloatToStr (Sf3); // 'Расход';

VedGrid. Cells [6, i-1]: =FloatToStr (Sf4); // 'Ост. на кон. ';

Sf1: =0; Sf2: =0; Sf3: =0; Sf4: =0;

S1: =0; S2: =0; S3: =0; S4: =0;

end;

end;

VedGrid. Cells [0, I]: =IBQry1. FieldByName ('Nom'). asString; // Copy (IBQry1. FieldByName ('NumOfNomenkl'). asString, F, T);

VedGrid. Cells [1, I]: =IBQry1. FieldByName ('NMNKLName'). asString; // 'Наименование';

VedGrid. Cells [2, I]: =IBQry1. FieldByName ('PrihCenNDS'). asString; // 'Цена, руб. ';

VedGrid. Cells [3, I]: =IBQry1. FieldByName ('SumOst'). asString; // 'Ост. на нач. ';

VedGrid. Cells [4, I]: =IBQry1. FieldByName ('SumPrih'). asString; // 'Приход';

VedGrid. Cells [5, I]: =IBQry1. FieldByName ('SumRash'). asString; // 'Расход';

VedGrid. Cells [6, i]: =IBQry1. FieldByName ('SumOst2'). asString; // 'Ост. на кон. ';

SetLength (mRec, I+1); mRec [I]: =IBQry1. RecNo; // J;

Fn: =IBQry1. FieldByName ('NameOfIstFinansir'). asString;

Gr: =IBQry1. FieldByName ('GPLUName'). asString;

S1: =S1+IBQry1. FieldByName ('SumOst'). asFloat;

S2: =S2+IBQry1. FieldByName ('SumPrih'). asFloat;

S3: =S3+IBQry1. FieldByName ('SumRash'). asFloat;

S4: =S4+IBQry1. FieldByName ('SumOst2'). asFloat;

Sf1: =Sf1+IBQry1. FieldByName ('SumOst'). asFloat;

Sf2: =Sf2+IBQry1. FieldByName ('SumPrih'). asFloat;

Sf3: =Sf3+IBQry1. FieldByName ('SumRash'). asFloat;

Sf4: =Sf4+IBQry1. FieldByName ('SumOst2'). asFloat;

Sg1: =Sg1+IBQry1. FieldByName ('SumOst'). asFloat;

Sg2: =Sg2+IBQry1. FieldByName ('SumPrih'). asFloat;

Sg3: =Sg3+IBQry1. FieldByName ('SumRash'). asFloat;

Sg4: =Sg4+IBQry1. FieldByName ('SumOst2'). asFloat;

SS1: =SS1+IBQry1. FieldByName ('SumOst'). asFloat;

SS2: =SS2+IBQry1. FieldByName ('SumPrih'). asFloat;

SS3: =SS3+IBQry1. FieldByName ('SumRash'). asFloat;

SS4: =SS4+IBQry1. FieldByName ('SumOst2'). asFloat;

IBQry1. Next; I: =I+1; // J: =J+1;

end;

VedGrid. RowCount: =VedGrid. RowCount+1;

VedGrid. Cells [0, VedGrid. RowCount-1]: ='';

VedGrid. Cells [1, VedGrid. RowCount-1]: ='Итого по "'+VedGrid. Cells [0, I-1] +'": ';

VedGrid. Cells [2, VedGrid. RowCount-1]: ='';

VedGrid. Cells [3, VedGrid. RowCount-1]: =FloatToStr (S1); // 'Ост. на нач. ';

VedGrid. Cells [4, VedGrid. RowCount-1]: =FloatToStr (S2); // 'Приход';

VedGrid. Cells [5, VedGrid. RowCount-1]: =FloatToStr (S3); // 'Расход';

VedGrid. Cells [6, VedGrid. RowCount-1]: =FloatToStr (S4); // 'Ост. на кон. ';

If R2. checked then

begin

VedGrid. RowCount: =VedGrid. RowCount+1;

VedGrid. Cells [0, VedGrid. RowCount-1]: ='';

VedGrid. Cells [1, VedGrid. RowCount-1]: ='Группа: '+Gr;

VedGrid. Cells [2, VedGrid. RowCount-1]: ='';

VedGrid. Cells [3, VedGrid. RowCount-1]: =FloatToStr (Sg1); // 'Ост. на нач. ';

VedGrid. Cells [4, VedGrid. RowCount-1]: =FloatToStr (Sg2); // 'Приход';

VedGrid. Cells [5, VedGrid. RowCount-1]: =FloatToStr (Sg3); // 'Расход';

VedGrid. Cells [6, VedGrid. RowCount-1]: =FloatToStr (Sg4); // 'Ост. на кон. ';

end;

If R1. checked then

begin

VedGrid. RowCount: =VedGrid. RowCount+1;

VedGrid. Cells [0, VedGrid. RowCount-1]: ='';

VedGrid. Cells [1, VedGrid. RowCount-1]: ='Финанс.: '+Fn;

VedGrid. Cells [2, VedGrid. RowCount-1]: ='';

VedGrid. Cells [3, VedGrid. RowCount-1]: =FloatToStr (Sf1); // 'Ост. на нач. ';

VedGrid. Cells [4, VedGrid. RowCount-1]: =FloatToStr (Sf2); // 'Приход';

VedGrid. Cells [5, VedGrid. RowCount-1]: =FloatToStr (Sf3); // 'Расход';

VedGrid. Cells [6, VedGrid. RowCount-1]: =FloatToStr (Sf4); // 'Ост. на кон. ';

end;

VedGrid. RowCount: =VedGrid. RowCount+1;

VedGrid. Cells [0, VedGrid. RowCount-1]: ='';

VedGrid. Cells [1, VedGrid. RowCount-1]: ='Всего: ';

VedGrid. Cells [2, VedGrid. RowCount-1]: ='';

VedGrid. Cells [3, VedGrid. RowCount-1]: =FloatToStr (SS1); // 'Ост. на нач. ';

VedGrid. Cells [4, VedGrid. RowCount-1]: =FloatToStr (SS2); // 'Приход';

VedGrid. Cells [5, VedGrid. RowCount-1]: =FloatToStr (SS3); // 'Расход';

VedGrid. Cells [6, VedGrid. RowCount-1]: =FloatToStr (SS4); // 'Ост. на кон. ';

If IBQry1. RecordCount<>0 then

begin

ToolButton6. Enabled: =True;

ToolButton7. Enabled: =True;

ToolButton8. Enabled: =True;

ToolButton9. Enabled: =True;

Edit_poisk. Enabled: =True;

end

Else

begin

ToolButton6. Enabled: =False;

ToolButton7. Enabled: =False;

ToolButton8. Enabled: =False;

ToolButton9. Enabled: =False;

Edit_poisk. Enabled: =False;

end;

Flag: =1; RowN: =1;

IBQry1. First;

StatusBar1. Repaint;

end;

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

begin

If MF. read_Tran. InTransaction then MF. read_Tran.commit;

If MF. exec_Tran. InTransaction then MF. exec_Tran.commit;

MF. exec_Tran. StartTransaction;

TRY

begin

QryText: ='Drop table '+TabNam1;

MF. ExecQry (QryText, MF. ExQuery2);

QryText: ='Drop table '+TabNam2;

MF. ExecQry (QryText, MF. ExQuery2);

{ QryText: ='Drop table '+TabNam3;

MF. ExecQry (QryText, MF. ExQuery2); }

end;

MF. exec_Tran.commit;

EXCEPT

MF. exec_Tran. Rollback;

END;

SetLength (mIstFin, 0); SetLength (mGrup, 0); SetLength (mRec, 0);

end;

procedure TFormVed. FormCanResize (Sender: TObject; var NewWidth,

NewHeight: Integer; var Resize: Boolean);

var ii: Integer;

begin

VedGrid. Height: =NewHeight-255;

VedGrid. Width: =NewWidth-27; ii: =25;

VedGrid. ColWidths [0]: =Round ( (VedGrid. Width-ii) * 0.06);

VedGrid. ColWidths [1]: =Round ( (VedGrid. Width-ii) * 0.35);

VedGrid. ColWidths [2]: =Round ( (VedGrid. Width-ii) * 0.10);

VedGrid. ColWidths [3]: =Round ( (VedGrid. Width-ii) * 0.12);

VedGrid. ColWidths [4]: =Round ( (VedGrid. Width-ii) * 0.12);

VedGrid. ColWidths [5]: =Round ( (VedGrid. Width-ii) * 0.12);

VedGrid. ColWidths [6]: =Round ( (VedGrid. Width-ii) * 0.12);

end;

procedure TFormVed. TBPrint (Sender: TObject);

begin

frReport1. Clear;

If ( (Sender as TMenuItem). Name) = 'N1' then

begin

frReport1. LoadFromFile ('Vedomost. frf');

With frReport1. Dictionary do begin

Variables ['D1']: = MF. MS (DateToStr (DTPicker1. Date));

Variables ['D2']: = MF. MS (DateToStr (DTPicker2. Date));

Variables ['S1']: = MF. MS (FromPos. Text);

Variables ['L2']: = MF. MS (ToPos. Text);

end;

end

Else

If ( (Sender as TMenuItem). Name) = 'N2' then

begin

If RowN=-1 then exit;

frReport1. LoadFromFile ('Stellag_Kart. frf');

With frReport1. Dictionary do begin

Variables ['Name']: = MF. MS (IBQry1. FieldByName ('NMNKLName'). asString+' '+

IBQry1. FieldByName ('NameOfKontr'). asString);

Variables ['EIZ']: = MF. MS (IBQry1. FieldByName ('EdIzmID'). asString);

Variables ['Coun']: = MF. MS (IBQry1. FieldByName ('SumOst2'). asString);

Variables ['Cena']: = MF. MS (IBQry1. FieldByName ('PrihCenNDS'). asString);

Variables ['Seria']: = MF. MS (IBQry1. FieldByName ('SeriaNom'). asString);

Variables ['SrokG']: = MF. MS (IBQry1. FieldByName ('SrokG'). asString);

end;

end;

frReport1. ShowReport;

end;

procedure TFormVed. VedGridDrawCell (Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

var ll: Integer;

TheRect: TRect;

begin

if ARow = 0 then

begin

ll: = (VedGrid. ColWidths [ACol] - Canvas. TextWidth (VedGrid. Cells [ACol,0])) div 2 - 3;

VedGrid. Canvas. Font. Color: =clMaroon;

VedGrid. Canvas. Font. Style: = [fsBold];

VedGrid. RowHeights [0]: =40;

TheRect: =Rect; TheRect. Top: =Rect. Top+15;

If ACol=0 then

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+7, '№');

If ACol=1 then

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+7, 'Наименование');

If ACol=2 then

begin

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+2, 'Цена,');

VedGrid. Canvas. TextRect (TheRect, TheRect. Left+ll, TheRect. Top+2, ' руб. ');

end;

If ACol=3 then

begin

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+2, 'Остаток');

VedGrid. Canvas. TextRect (TheRect, TheRect. Left+ll, TheRect. Top+2, ' на нач. ');

end;

If ACol=4 then

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+7, 'Приход');

If ACol=5 then

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+7, 'Расход');

If ACol=6 then

begin

VedGrid. Canvas. TextRect (Rect, Rect. Left+ll, Rect. Top+2, 'Остаток');

VedGrid. Canvas. TextRect (TheRect, TheRect. Left+ll, TheRect. Top+2, ' на кон. ');

end;

end;

If Copy (VedGrid. Cells [1, ARow], 0,8) ='Итого по' Then

begin

VedGrid. Canvas. Font. Style: = [fsBold];

VedGrid. Canvas. Font. Color: =clNavy;

VedGrid. Canvas. TextRect (Rect, Rect. Left+2, Rect. Top+2, VedGrid. Cells [ACol, ARow]);

end;

If Copy (VedGrid. Cells [1, ARow], 0,6) ='Финанс' Then

begin

VedGrid. Canvas. Font. Style: = [fsBold];

VedGrid. Canvas. Font. Color: =clPurple;

VedGrid. Canvas. TextRect (Rect, Rect. Left+2, Rect. Top+2, VedGrid. Cells [ACol, ARow]);

end;

If Copy (VedGrid. Cells [1, ARow], 0,6) ='Группа' Then

begin

VedGrid. Canvas. Font. Style: = [fsBold];

VedGrid. Canvas. Font. Color: =clGreen;

VedGrid. Canvas. TextRect (Rect, Rect. Left+2, Rect. Top+2, VedGrid. Cells [ACol, ARow]);

end;

If Copy (VedGrid. Cells [1, ARow], 0,5) ='Всего' Then

begin

VedGrid. Canvas. Font. Style: = [fsBold];

VedGrid. Canvas. Font. Color: =clMaroon;

VedGrid. Canvas. TextRect (Rect, Rect. Left+2, Rect. Top+2, VedGrid. Cells [ACol, ARow]);

end;

end;

procedure TFormVed. VedGridSelectCell (Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

begin

If (ARow>Length (mRec)) or (Flag=0) then exit;

If VedGrid. Cells [0, ARow] ='' then RowN: =-1

Else RowN: =ARow;

StatusBar1. Repaint;

end;

procedure TFormVed. TBOststkiDannie (Sender: TObject);

begin

MF. VedOstShow: =1;

Application. CreateForm (TVedOst, VedOst);

if (not VedOst. Visible) then VedOst. ShowModal;

end;

procedure TFormVed. TBSumm (Sender: TObject);

var TxtMess, TekOst, D1, D2: String;

RR: Real;

begin

If IBQry1. RecordCount=0 then exit; RR: =0;

If DTPicker2. Date=now () then TekOst: =VedGrid. Cells [6, VedGrid. RowCount-1]

Else

Begin

D1: =MF. MD (DateToStr (DTPicker2. Date));

D2: =MF. MD (DateToStr (now ()));

RR: =StrToFloat (VedGrid. Cells [6, VedGrid. RowCount-1]);

QryText: ='Select Sum (PrihFaktCount) as SumPrih '+

'From PrixodDannie P2, PrixDoc PD2 '+

'Where P2. PrihID=PD2. PrihID and '+

'PD2. DatePrih between '+D1+' and '+D2+' '+

'Group by NomenklID, SeriaID, IstFinansirID, PrihCenNDS';

MF. OpenQry (QryText, MF. IBQuery1);

RR: =RR+MF. IBQuery1. FieldByName ('SumPrih'). asFloat;

QryText: ='Select Sum (RasxCount) as SumRash '+

'From RashodDannie R1, RashodDoc RD1 '+

'Where R1. RashID=RD1. RashID and '+

'RD1. DateRash between '+D1+' and '+D2+' '+

'Group by NomenklID, SeriaID';

MF. OpenQry (QryText, MF. IBQuery1);

RR: =RR-MF. IBQuery1. FieldByName ('SumRash'). asFloat;

end;

TxtMess: ='Данные за период с '+DateToStr (DTPicker1. Date) +' по '+DateToStr (DTPicker2. Date) +#10#13+

'С '+FromPos. Text+' поз. '+ToPos. Text+' симв. '+#10#13+

'_________________________________Сумма, руб. '+#10#13+

'Остаток на начало периода_________'+VedGrid. Cells [3, VedGrid. RowCount-1] +#10#13+

'Приход___________________________' +VedGrid. Cells [4, VedGrid. RowCount-1] +#10#13+

'Расход___________________________' +VedGrid. Cells [5, VedGrid. RowCount-1] +#10#13+

'Остаток на конец периода__________'+VedGrid. Cells [6, VedGrid. RowCount-1] +#10#13+

'Текущий остаток__________________' +FloatToStr (RR);

MessageDlgPos (TxtMess, mtInformation, [mbOK], 0, 200, 200)

end;

procedure TFormVed. TBPoisk (Sender: TObject);

var myRect: TGridRect;

I: Integer;

begin

If not IBQry1. Locate ('NMNKLName', Edit_poisk. Text, [loPartialKey]) then

begin

IBQry1. First;

ShowMessage ('Значение не найдено');

exit;

end;

for I: =0 To Length (mRec) do

If mRec [I] =IBQry1. RecNo then break;

myRect. Left: = 0; myRect. Top: = I;

myRect. Right: = 6; myRect. Bottom: = I;

VedGrid. Selection: =myRect;

VedGrid. TopRow: =I;

end;

procedure TFormVed. StatusBar1DrawPanel (StatusBar: TStatusBar;

Panel: TStatusPanel; const Rect: TRect);

begin

If not IBQry1. Active then exit;

StatusBar1. Canvas. Font. Color: = clMaroon;

StatusBar1. Canvas. Font. Size: = 8;

StatusBar1. Canvas. Font. Style: = [fsBold];

If RowN=-1 then // VedGrid. Cells [0, ARow] =''

begin

if Panel = StatusBar. Panels [0] then

StatusBar1. Canvas. TextOut (Rect. Left, Rect. Top, 'Номенкл. №')

Else

if Panel = StatusBar. Panels [1] then

StatusBar1. Canvas. TextOut (Rect. Left, Rect. Top, 'Источник фин. ')

Else

if Panel = StatusBar. Panels [2] then

StatusBar1. Canvas. TextOut (Rect. Left, Rect. Top, 'Поставщик')

Else

if Panel = StatusBar. Panels [3] then

StatusBar1. Canvas. TextOut (Rect. Left, Rect. Top, 'Серия')

Else

if Panel = StatusBar. Panels [4] then

StatusBar1. Canvas. TextOut (Rect. Left, Rect. Top, 'Срок д. серт')

Else

if Panel = StatusBar. Panels [5] then


Подобные документы

  • Назначение базы данных для обеспечения работы автобусного парка. Основные возможности админпанели. Выполняемые базой данных и приложением функции. Инфологическое моделирование данных. Описание разработанного web-приложения. Проектирование базы данных.

    курсовая работа [2,2 M], добавлен 01.02.2013

  • Основные свойства времени и способы его представления. Временная логика предикатов А. Тейза. Учет временного фактора при разработке баз данных. Разработка концепции базы данных на основе реляционной системы управления. Требования к программному продукту.

    дипломная работа [2,8 M], добавлен 02.10.2016

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

    реферат [588,6 K], добавлен 03.06.2011

  • Разработка базы данных для информационной поддержки деятельности аптеки с целью автоматизированного ведения данных о лекарствах аптеки. Проектирование схемы базы данных с помощью средства разработки структуры базы данных Microsoft SQL Server 2008.

    курсовая работа [3,6 M], добавлен 18.06.2012

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

    курсовая работа [1,1 M], добавлен 19.10.2010

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

    курсовая работа [1,0 M], добавлен 18.08.2009

  • Создание информационно-аналитической системы (базы данных) "Реализация кондитерских изделий". Использование методов сортировка, добавление абонентов, удаление, изменение, поиск данных, фильтрация, диапазон. Среда разработки - язык программирования Delphi.

    курсовая работа [761,7 K], добавлен 10.04.2011

  • Анализ существующих разработок и выбор стратегии автоматизации делопроизводства взаимоотношении поставщиков лекарственных препаратов с аптекой. Разработка проекта базы данных аптеки "Ригла". Обоснование экономической эффективности разработки базы данных.

    дипломная работа [3,0 M], добавлен 19.09.2013

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

    курсовая работа [2,9 M], добавлен 24.03.2023

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

    курсовая работа [2,1 M], добавлен 14.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.