Смекни!
smekni.com

Автоматизация предприятия (стр. 7 из 13)

IF (in_zamen_type = 1)

THEN

SELECT SUM (mz_kol)

INTO summ_kol

FROM materials_zamen

WHERE mz_mat_id = in_mat_id AND mz_type = 1 AND mz_kat_id = in_kat_id;

summ_kol := summ_kol + in_old_kol;

IF (summ_kol > in_max_kol)

THEN

raise_application_error

(-20001,

'Общее количество материалов при проведении частичных замен превышает максимальное количество.'

);

END IF;

END IF;

INSERT INTO materials_zamen

(mz_id, mz_kat_id, mz_mat_id, mz_new_mat_id, mz_kol,

mz_max_kol, mz_new_kol, mz_type

)

VALUES (out_id, in_kat_id, in_mat_id, in_new_mat_id, in_old_kol,

in_max_kol, in_new_kol, in_zamen_type

);

END materials_zamen_create;

Процедураудалениязамены:

CREATE OR REPLACE PROCEDURE "MATERIALS_ZAMEN_DELETE" (

in_mz_id IN materials_zamen.mz_id%TYPE

)

/*удалениезаменыматериала*/

IS

BEGIN

DELETE FROM materials_zamen

WHERE mz_id = in_mz_id;

END materials_zamen_delete;

2.4.4. Структуратаблицы «закупок»

«Таблица закупок» содержит информацию о заменах (табл.4).

Табл.4

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

MC_MAT_ID : Идентификатор материала

MC_MZ_ID : Идентификатор замены материала

MC_POST_ID : Идентификатор контрагента

MC_NAME : Наименование контрагента

MC_COUNT : Количество на закупку

MC_COST : Цена

MC_EDIZM : Еденица измерения

MC_KAT_ID : Каталог

Процедура добавления контрагента в таблицу закупок:

CREATE OR REPLACE PROCEDURE "MATERIALS_CONTRAGENT_CREATE" (

in_mc_kat_id IN materials_contragent.mc_kat_id%TYPE, in_mc_mat_id IN materials_contragent.mc_mat_id%TYPE, in_mc_mz_id IN materials_contragent.mc_kat_id%TYPE, in_mc_post_id IN materials_contragent.mc_post_id%TYPE, in_mc_name IN materials_contragent.mc_name%TYPE, in_mc_count IN materials_contragent.mc_kat_id%TYPE, in_mc_cost IN materials_contragent.mc_cost%TYPE, in_mc_edizm IN materials_contragent.mc_edizm%TYPE, out_id OUT materials_contragent.mc_id%TYPE

)

/*добавление записи по материалу к версии расчета*/

IS

BEGIN

SELECT seq_materials_contragent_mc_id.NEXTVAL

INTO out_id

FROM DUAL;

INSERT INTO materials_contragent

(mc_id, mc_mat_id, mc_mz_id, mc_post_id, mc_name,

mc_count, mc_cost, mc_edizm, mc_kat_id

)

VALUES (out_id, in_mc_mat_id, in_mc_mz_id, in_mc_post_id, in_mc_name,

in_mc_count, in_mc_cost, in_mc_edizm, in_mc_kat_id

);

ENDmaterials_contragent_create;

Процедура удаления контрагента в таблицу закупок:

CREATE OR REPLACE PROCEDURE "MATERIALS_CONTRAGENT_DELETE" (

in_mc_id IN materials_zamen.mz_id%TYPE

)

/*удалениеконтрагента*/

IS

BEGIN

DELETE FROM materials_contragent

WHERE mc_id = in_mc_id;

END materials_CONTRAGENT_delete;

2.5. Разработкамодулей

2.5.1. Модуль Mat_Zamen.pas

Модуль Mat_Zamen.pas, представленный на рис.3, является главным модулем проекта, так как он содержит описание действий происходящих при загрузке программы, а также описание формы MainForm.

На форме расположены три таблицы TDBGridEh. Это таблицы материалов, замен и контрагентов, а также закладки и меню TMenuItem. На форме присутствуют компоненты TСlientDataSet, TdataSource.

Компонент TClientDataSet используется в клиентской части многозвенного распределенного приложения.

Компонент обеспечивает выполнение следующих основных функций:

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

• представление набора данных при помощи локального буфера и поддержка основных операций, унаследованных от класса TDataSet;

• объединение записей набора данных при помощи агрегатных функций для получения суммарных данных;

• локальное сохранение набора данных в файле и последующее восстановление набора данных из файла;

• представление набора данных в формате XML [6].

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

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

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

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

1. Связать набор данных и компонент TDataSource. Для этого используется свойство DataSet компонента TDataSource, доступное через Инспектор объектов. Это указатель на экземпляр компонента доступа к данным.

В списке этого свойства в Инспекторе объектов перечислены все доступные компоненты наборов данных.

2. Переименовать компонент. Это не обязательное действие. Тем не менее желательно присваивать компонентам осмысленные имена, соответствующие названиям связанных наборов данных [7].

Компонент меню, представленный на рис. 4, выполняет следущие процедуры:

· Ввод / удаление контрагента;

· Ввод / удаление замены;

· Печать отчета

Рис. 4. Главное меню

Процедуры ввода (TFRep_Mats.N5Click) и удаления (TFRep_Mats.N14Click) контрагентов.

procedure TFRep_Mats.N5Click(Sender: TObject);

begin

IF not assigned(scM4_ContrAgents) then

initscM4_ContrAgents(SharedConnection.ParentConnection);

ContrAgentsGet_Sprav(Self, IM4ContrAgentsDisp(IDispatch(scM4_ContrAgents.AppServer)),

(Screen.DesktopHeight div 2) - (height div 2),

(Screen.DesktopWidth div 2) - (width div 2),

'', '', '',

ContrAgent_Name,

ContrAgent_Code);

if (DBGEh_Mats.Focused = True) and (ContrAgent_Name <> '') Then

Mat_Contr_Add(Application, SharedConnection, Kat_Id, CDS_Mats.FieldByName('MD_MR_ID').AsInteger,

0, 0, ContrAgent_Code, ContrAgent_Name)

else if (DBGEh_Zamen.Focused = True) and (ContrAgent_Name <> '') then

Mat_Contr_Add(Application, SharedConnection, Kat_Id, CDS_Zamen.FieldByName('MZ_MAT_ID').AsInteger,

CDS_Zamen.FieldByName('MZ_ID').AsInteger, 1, ContrAgent_Code, ContrAgent_Name);

Contr_Refresh;

end;

procedure TFRep_Mats.N14Click(Sender: TObject);

begin

V.Mat_Zamen_Contr_Del(CDS_Contr.FieldByName('MC_ID').AsInteger);

Contr_Refresh;

end;

Процедуры ввода и удаления замен:

procedure TFRep_Mats.N13Click(Sender: TObject);

begin

Enter_Zamen(Application, SharedConnection,

Kat_Id,

CDS_Mats.FieldByName('MD_MR_ID').AsInteger,

CDS_Mats.FieldByName('GM_ID').AsInteger,

CDS_Mats.FieldByName('MAT_OKP').AsInteger,

CDS_Mats.FieldByName('MR_NAME').AsString,

CDS_Mats.FieldByName('POTREB').AsString,

CDS_Mats.FieldByName('GM_NAME').AsString);

Zamen_Refresh;

end;

procedure TFRep_Mats.N15Click(Sender: TObject);

begin

V.Mat_Zamen_Delete(CDS_Zamen.FieldByName('mz_id').AsInteger);

Zamen_Refresh;

Contr_Refresh;

end;

Печатьотчета

procedure TFRep_Mats.N8Click(Sender: TObject);

begin

Mat_Zamen_Rep(Application, SharedConnection, Kat_Id, 1, Kat_ZCO_NAME, Kat_Name);

end;

2.5.2. Модуль Mat_Zamen_New.pas

Наформумодуля Mat_Zamen_New вынесеныследующиекомпоненты: TDBGridEh, TbitBtn, TdataSource, TclientDataSet, Tedit, TradioGroup (рис.5).

Рис.5. Модуль Mat_Zamen_New

TDBGridEh – таблица в которую заносятся данные , TbitBtn – кнопки ввода замены и отмены, TdataSource и TclientDataSet – для соединения с базой данных, Tedit – строки с материалами, TradioGroup – выбор полной или частичной замены.

Процедура выбора типа замены:

rocedure TFNew_Zamen.RGClick(Sender: TObject);

begin

if RG.ItemIndex = 1 then

begin

DBN_OldKol.Enabled := True;

end

else if RG.ItemIndex = 0 then

begin

DBN_OldKol.Enabled := False;

DBN_OldKol.Value := Old_Kol;

end;

Zamen_Type := RG.ItemIndex;

end;

Процедуравводазамены:

procedure TFNew_Zamen.BitBtn1Click(Sender: TObject);

var Old, Max, New : WideString;

begin

Old := FloatToStr(DBN_OldKol.Value);

Max := FloatToStr(Max_Kol);

New := FloatToStr(DBN_NewKol.Value);

V.Mat_Zamen_Create(Kat_Id,

Mat_Id,

CDS_Mats.FieldByName('MATERIAL_ID').AsInteger,

Old,

Max,

New,

Zamen_Type);

Close;end;

2.5.2. Модуль Mat_Zamen_CNTR_Add.pas

Наформе (рис. 6) находятсяследующиекомпоненты: Tedit, TDBNumberEditEh, TspeedButton, TclientDataSet, TdataSource, TcomboBox.

Tedit – наименованиеконтрагента, TDBNumberEditEh – количествозакупаемогоматериалаицена, TcomboBox – выпадающееменювыбораеденицизмерения, TspeedButton – рабочиекнопки , TclientDataSet и TdataSource – связьсбазойданных.

Рис.6. Модуль Mat_Zamen_CNTR_Add

2.5.2. Модуль формирования очета

На форму (Рис.7 ) вынесена таблица, меню и компоненты связи с базой данных.

После заполнения таблицы, выбрав из меню строку «печать отчета» появится окно компонента FastReport (Рис.8). Этот компонент отвечает за печать отчета.

Рис.7. Таблица закупок

Рис.8. Отчет FastReport

3.1. Требования к аппаратному и программному обеспечению

- Требования к аппаратному обеспечению:

- Процессор Pentium 800 МГц;

- Объем оперативной памяти 128 Мбайт;

- Объем жесткого диска не менее 5 Гбайт;

- Монитор SVGA, клавиатура и манипулятор мышь.

- Требования к программному обеспечению:

- программа должна работать под управлением операционной системы Microsoft Windows 98/ME/2000/XP.

3.2. Установка подсистемы

Вычислительная среда поставляется на диске CD-R, емкостью 700 Мб. Установка производится в несколько этапов:

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

- Вставить компакт-диск с программой в CD-ROM;

- Скопировать каталог K_T_Base и все его содержимое на жесткий диск, с которого предполагается производить запуск программы, в каталог C:&bsol; K_T_Base;