Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Автоматизация предприятия.rtf
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
27.03 Mб
Скачать

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

);

END materials_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;