Смекни!
smekni.com

Разработка системы автоматизированного учета для багетной мастерской (стр. 26 из 27)

DM1. CheckActionState (DBGridSlave. DataSource, Act_Izd_Add, Act_Izd_Edit, Act_Izd_Del, Act_Izd_Save, Act_Izd_Cancel, DBGridSlave, DBNavigatorSlave);

BitIzd_Add. Enabled: =true;

//

if (Act_Zak_Edit. Enabled=False) and (Act_Zak_Del. Enabled=False)

then

begin

BitAdd. Enabled: =True;

BitSave. Enabled: =False;

BitCan. Enabled: =False;

BitDel. Enabled: =False;

BitEdit. Enabled: =False;

end;

if (Act_Zak_Save. Enabled=False) and (Act_Zak_Cancel. Enabled=False)

then

begin

BitAdd. Enabled: =True;

BitSave. Enabled: =False;

BitCan. Enabled: =False;

BitDel. Enabled: =true;

BitEdit. Enabled: =true;

end;

if (Act_Zak_Save. Enabled=False) and (Act_Zak_Cancel. Enabled=False)

and

(Act_Zak_Edit. Enabled=False) and (Act_Zak_Del. Enabled=False)

then

begin

BitAdd. Enabled: =True;

BitSave. Enabled: =False;

BitCan. Enabled: =False;

BitDel. Enabled: =false;

BitEdit. Enabled: =false;

end;

//

end;

// добавить изделие

procedure TMainForm. Act_Izd_AddExecute (Sender: TObject);

begin

If DBGridSlave. DataSource. DataSet. CanModify

Then DBGridSlave. DataSource. DataSet. Append

Else Application. MessageBox ('Данные нельзя модифицировать! ', 'Модификация данных', MB_OK + MB_ICONINFORMATION);

DM1. CheckActionState (DBGridSlave. DataSource, Act_Izd_Add, Act_Izd_Edit, Act_Izd_Del, Act_Izd_Save, Act_Izd_Cancel, DBGridSlave, DBNavigatorSlave);

DBEditNomerProduct. SetFocus;

//

BitIzd_Add. Enabled: =False;

BitIzd_Edit. Enabled: =False;

BitIzd_Del. Enabled: =False;

BitIzd_Save. Enabled: =True;

BitIzd_Can. Enabled: =True;

//

end;

// редактировать изделие

procedure TMainForm. Act_Izd_EditExecute (Sender: TObject);

begin

If DBGridSlave. DataSource. DataSet. CanModify

Then DBGridSlave. DataSource. DataSet. Edit

Else Application. MessageBox ('Данные нельзя модифицировать! ', 'Модификация данных', MB_OK + MB_ICONINFORMATION);

DM1. CheckActionState (DBGridSlave. DataSource, Act_Izd_Add, Act_Izd_Edit, Act_Izd_Del, Act_Izd_Save, Act_Izd_Cancel, DBGridSlave, DBNavigatorSlave);

DBEditNomerProduct. SetFocus;

//

if (Act_Izd_Edit. Enabled=False) and (Act_Izd_Add. Enabled=False) and (Act_Izd_Del. Enabled=False)

then

begin

BitIzd_Add. Enabled: =false;

BitIzd_Save. Enabled: =true;

BitIzd_Can. Enabled: =true;

BitIzd_Del. Enabled: =false;

BitIzd_Edit. Enabled: =false;

end;

end;

// удалить изделие

procedure TMainForm. Act_Izd_DelExecute (Sender: TObject);

begin

If Application. MessageBox ('Удалить изделие со всеми деталями? ', 'Удаление записи', MB_YESNO + MB_ICONINFORMATION) = IDYES

Then

DBGridSlave. DataSource. DataSet. Delete;

DM1. CheckActionState (DBGridSlave. DataSource, Act_Izd_Add, Act_Izd_Edit, Act_Izd_Del, Act_Izd_Save, Act_Izd_Cancel, DBGridSlave, DBNavigatorSlave);

//

if (Act_Izd_Edit. Enabled=False) and (Act_Izd_Del. Enabled=False) and (Act_Izd_Save. Enabled=False) and (Act_Zak_Cancel. Enabled=False)

then

begin

BitIzd_Add. Enabled: =True;

BitIzd_Save. Enabled: =False;

BitIzd_Can. Enabled: =False;

BitIzd_Del. Enabled: =False;

BitIzd_Edit. Enabled: =False;

end;

//

end;

// сохранить изменения в изделии

procedure TMainForm. Act_Izd_SaveExecute (Sender: TObject);

begin

If (DBEditNomerProduct. Text = '') or (DBEditShirina_product. Text = '') or (DBEditVisota_product. Text = '') or

(DBEditItogoMaterial. Text = '') or (DBEditItogoObrabotka. Text = '') or (DBEditItogoProdukt. Text = '')

Then

Begin

Application. MessageBox ('Вы незаполнили некоторые поля! Заполните, пож-та, все поля! ', 'Незаполненные поля', MB_OK + MB_ICONASTERISK);

DBEditNomerProduct. SetFocus;

Exit

End;

If DBGridSlave. DataSource. DataSet. Modified or

(DBEditNomerProduct. Modified) or (DBEditShirina_product. Modified) or (DBEditVisota_product. Modified) or

(DBEditNaimenDopRabota. Modified) or (DBEditDopRabota. Modified)

Then

DBGridSlave. DataSource. DataSet. Post;

DM1. CheckActionState (DBGridSlave. DataSource, Act_Izd_Add, Act_Izd_Edit, Act_Izd_Del, Act_Izd_Save, Act_Izd_Cancel, DBGridSlave, DBNavigatorSlave);

//

if (Act_Izd_Save. Enabled=False) and (Act_Izd_Cancel. Enabled=False)

then

begin

BitIzd_Add. Enabled: =True;

BitIzd_Save. Enabled: =False;

BitIzd_Can. Enabled: =False;

BitIzd_Del. Enabled: =true;

BitIzd_Edit. Enabled: =true;

end;

end;

// отменить изменения в изделии

procedure TMainForm. Act_Izd_CancelExecute (Sender: TObject);

begin

DBGridSlave. DataSource. DataSet. Cancel;

DM1. CheckActionState (DBGridSlave. DataSource, Act_Izd_Add, Act_Izd_Edit, Act_Izd_Del, Act_Izd_Save, Act_Izd_Cancel, DBGridSlave, DBNavigatorSlave);

//

if (Act_Izd_Edit. Enabled=False) and (Act_Izd_Del. Enabled=False)

then

begin

BitIzd_Add. Enabled: =True;

BitIzd_Save. Enabled: =False;

BitIzd_Can. Enabled: =False;

BitIzd_Del. Enabled: =False;

BitIzd_Edit. Enabled: =False;

end;

if (Act_Izd_Save. Enabled=False) and (Act_Izd_Cancel. Enabled=False)

then

begin

BitIzd_Add. Enabled: =True;

BitIzd_Save. Enabled: =False;

BitIzd_Can. Enabled: =False;

BitIzd_Del. Enabled: =true;

BitIzd_Edit. Enabled: =true;

end;

if (Act_Izd_Save. Enabled=False) and (Act_Izd_Cancel. Enabled=False)

and

(Act_Izd_Edit. Enabled=False) and (Act_Izd_Del. Enabled=False)

then

begin

BitIzd_Add. Enabled: =True;

BitIzd_Save. Enabled: =False;

BitIzd_Can. Enabled: =False;

BitIzd_Del. Enabled: =false;

BitIzd_Edit. Enabled: =false;

end;

//

end;

// определить состав изделия

procedure TMainForm. Act_Izd_SostavExecute (Sender: TObject);

Var

MySostavProductForm: TSostavProductForm;

begin

If DBGridSlave. DataSource. DataSet. RecordCount <> 0 // если таблица не пустая

Then

Begin

MySostavProductForm: =TSostavProductForm. Create (Owner);

MySostavProductForm. ShowModal;

MySostavProductForm. Free;

End

Else

Application. MessageBox ('Добавьте, пож-та, изделие', 'Отсутствие изделия', MB_OK + MB_ICONINFORMATION);

end;

// рассчитать заказ

procedure TMainForm. Act_Zak_RashitatExecute (Sender: TObject);

Var

ItogoBezRaboti,

ItogoSRabotoi: Currency;

i, j: integer;

// рассчитывает стоимость изделия в составе заказа

Procedure RashitatProduct (MyProduct: TAdoQuery);

Var

i: integer;

ItogoMaterial1,ItogoObrabotka1: Currency;

Begin

ItogoMaterial1: =0;

ItogoObrabotka1: =0;

With DM1 Do

// обрабатываем багеты в составе изделия

Begin

ADOQProducts_Bagets. First;

For i: =1 to ADOQProducts_Bagets. RecordCount do

Begin

ItogoMaterial1: =ItogoMaterial1 + ADOQProducts_Bagets. fieldByName ('CItogoZaRashod'). AsCurrency;

ItogoObrabotka1: =ItogoObrabotka1 + ADOQProducts_Bagets. fieldByName ('CObrabotka'). AsCurrency;

ADOQProducts_Bagets. Next;

End;

// обрабатываем разное в составе изделия

ADOQProducts_Raznoe. First;

For i: =1 to ADOQProducts_Raznoe. RecordCount do

Begin

ItogoMaterial1: =ItogoMaterial1 + ADOQProducts_Raznoe. fieldByName ('CItogoZaRashod'). AsCurrency;

ItogoObrabotka1: =ItogoObrabotka1 + ADOQProducts_Raznoe. fieldByName ('CObrabotka'). AsCurrency;

ADOQProducts_Raznoe. Next;

End;

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

ADOQProducts_Kompl. First;

For i: =1 to ADOQProducts_Kompl. RecordCount do

Begin

ItogoMaterial1: =ItogoMaterial1 + ADOQProducts_Kompl. fieldByName ('CItogoZaRashod'). AsCurrency;

ItogoObrabotka1: =ItogoObrabotka1 + ADOQProducts_Kompl. fieldByName ('CObrabotka'). AsCurrency;

ADOQProducts_Kompl. Next;

End;

End;

With DM1 do

Begin

If ADOQProducts. CanModify

Then

ADOQProducts. Edit

Else

Begin

Application. MessageBox ('Данные нельзя модифицировать! ', 'Модификация данных', MB_OK + MB_ICONINFORMATION);

Exit;

End;

// заполняем соответствующие поля

ADOQProducts. FieldByName ('ItogoMaterial'). AsCurrency: =ItogoMaterial1;

ADOQProducts. FieldByName ('ItogoObrabotka'). AsCurrency: =ItogoObrabotka1;

ADOQProducts. FieldByName ('ItogoProdukt'). AsCurrency: =ItogoMaterial1 + ItogoObrabotka1 + ADOQProducts. FieldByName ('DopRabota'). AsCurrency;

If ADOQProducts. Modified

Then

ADOQProducts. Post;

End;

End;

begin

DM1. ADOQZakazi. DisableControls;

DM1. ADOQProducts. DisableControls;

If DM1. ADOQProducts. RecordCount <> 0 // если есть изделия

Then

// обрабатываем все изделия в составе заказа

Begin

DM1. ADOQProducts. First;

For j: =1 to DM1. ADOQProducts. RecordCount Do

Begin

// обновляем информацию

Dm1. ADOQProducts_Bagets. Close;

Dm1. ADOQProducts_Bagets. Open;

Dm1. ADOQProducts_Raznoe. Close;

Dm1. ADOQProducts_Raznoe. Open;

Dm1. ADOQProducts_Kompl. Close;

Dm1. ADOQProducts_Kompl. Open;

RashitatProduct (DM1. ADOQProducts); // рассчитываем изделие

DM1. ADOQProducts. Next;

End;

ItogoBezRaboti: =0;

ItogoSRabotoi: =0;

With DM1 Do

Begin

ADOQProducts. First;

// прогоняем все изделия

For i: =1 to ADOQProducts. RecordCount do

Begin

ItogoBezRaboti: =ItogoBezRaboti + ADOQProducts. fieldByName ('ItogoMaterial'). AsCurrency;

ItogoSRabotoi: =ItogoSRabotoi + ADOQProducts. fieldByName ('ItogoProdukt'). AsCurrency;

ADOQProducts. Next;

End;

End;

With DM1 do

Begin

If ADOQZakazi. CanModify

Then

ADOQZakazi. Edit

Else

Begin

Application. MessageBox ('Данные нельзя модифицировать! ', 'Модификация данных', MB_OK + MB_ICONINFORMATION);

Exit;

End;

// заполняем соответствующие поля

ADOQZakazi. FieldByName ('ItogSRabotoi'). AsCurrency: =ItogoSRabotoi;

ADOQZakazi. FieldByName ('ItogBezRaboti'). AsCurrency: =ItogoBezRaboti;

ADOQZakazi. FieldByName ('Itog_Scidka'). AsCurrency: =ItogoSRabotoi * ADOQZakazi. FieldByName ('LScidka_client'). AsCurrency;

ADOQZakazi. FieldByName ('ItogoKOplate'). AsCurrency: =ItogoSRabotoi - ADOQZakazi. FieldByName ('Itog_Scidka'). AsCurrency;

If ADOQZakazi. Modified

Then

ADOQZakazi. Post;

End;

End

Else

Begin

Application. MessageBox ('Добавьте в заказ изделие', 'Нет изделия', MB_OK + MB_ICONINFORMATION);

DM1. ADOQZakazi. EnableControls;

DM1. ADOQProducts. EnableControls;

Exit;

End;

DM1. ADOQZakazi. EnableControls;

DM1. ADOQProducts. EnableControls;

end;

// отчёт "остатки материалов в мастерской"

procedure TMainForm. Act_R_OstatkiExecute (Sender: TObject);

begin

RvProject1. Open; // открываем проект с отчётами

Try

RvProject1. ExecuteReport ('OstatkiMaterReport') // выполняем отчёт

Finally

RvProject1. Close; // закрываем проект с отчётами

End;

end;

// происходит при создании формы

procedure TMainForm. FormCreate (Sender: TObject);

begin

// если файл с отчётами существует

If FileExists (GetCurrentDir + '&bsol;BagetReport. rav')

Then

// подключаем файл с отчётами

RvProject1. ProjectFile: =GetCurrentDir + '&bsol;BagetReport. rav'

Else

Begin

Application. MessageBox ('Файл с отчётами не найден! Завершаю программу! ', 'Файл отчётов', MB_OK + MB_ICONERROR);

Application. Terminate;

End;

end;

// отчёт "прайс-лист"

procedure TMainForm. Act_R_PriceListExecute (Sender: TObject);

begin

RvProject1. Open;

Try

RvProject1. ExecuteReport ('PriceListReport')

Finally

RvProject1. Close;

End;

end;

// процедура создаёт форму выбора для отчёта начальной и конечной даты

// sCaption - заголовок

// VidForm - вид отчёта (1 - сумма заказов за период, 2 - заказы к дате, 3 - продажи материалов за период)

// isEmpty - поиск не нашёл ни одной записи

procedure TMainForm. CreateSelectDateForm (sCaption: String; VidForm: byte; Var isEmpty: boolean);

Var

MySelectDateForm: TSelectDateForm;

i: integer;

begin

MySelectDateForm: =TSelectDateForm. Create (Owner);

MySelectDateForm. Caption: =sCaption;

// в зависимости от вида подготавливаем форму

case VidForm of

1: Begin

MySelectDateForm. Tag: =1;

End;

2: Begin

MySelectDateForm. Label1. Visible: =False;

MySelectDateForm. DTPickerStart. Visible: =False;

MySelectDateForm. DTPickerStart. Date: =StrToDateTime ('01.01.1900');

MySelectDateForm. Height: =150;

MySelectDateForm. Tag: =2;

End;

3: Begin

MySelectDateForm. Tag: =3;

End;

end;

MySelectDateForm. ShowModal;

If MySelectDateForm. ModalResult = mrOk // если нажали на кнопку "выполнить"

Then

case VidForm of

1: Begin

DMReport. ADOQSummaZakazovReport. Close;

// устанавливаем параметры

DMReport. ADOQSummaZakazovReport. Parameters. ParamByName ('DataPriema'). DataType: =ftDate;

DMReport. ADOQSummaZakazovReport. Parameters. ParamByName ('DataPriema'). Value: =MySelectDateForm. DTPickerStart. Date;

DMReport. ADOQSummaZakazovReport. Parameters. ParamByName ('DataOkonch'). DataType: =ftDate;

DMReport. ADOQSummaZakazovReport. Parameters. ParamByName ('DataOkonch'). Value: =MySelectDateForm. DTPickerEnd. Date;

DMReport. ADOQSummaZakazovReport. Open;

If DMReport. ADOQSummaZakazovReport. RecordCount = 0 // если ничего не нашли

Then

Begin

Application. MessageBox ('Не найдено ни одной записи! Измените условия поиска', 'Поиск', MB_OK + MB_ICONASTERISK);

isEmpty: =True;

End;

End;

2: Begin

DMReport. ADOQZakaziKDate. Close;

// устанавливаем параметры

DMReport. ADOQZakaziKDate. Parameters. ParamByName ('DataOkonch'). DataType: =ftDate;

DMReport. ADOQZakaziKDate. Parameters. ParamByName ('DataOkonch'). Value: =MySelectDateForm. DTPickerEnd. Date;

DMReport. ADOQZakaziKDate. Open;

If DMReport. ADOQZakaziKDate. RecordCount = 0

Then

Begin

Application. MessageBox ('Не найдено ни одной записи! Измените условия поиска', 'Поиск', MB_OK + MB_ICONASTERISK);

isEmpty: =True;

End;

End;

3: Begin

With DMReport. ADOQProdazhiZaPeriodBagets Do

Begin

Close;

// устанавливаем параметры

Parameters. ParamByName ('DataPriema'). DataType: =ftDate;

Parameters. ParamByName ('DataPriema'). Value: =MySelectDateForm. DTPickerStart. Date;

Parameters. ParamByName ('DataOkonch'). DataType: =ftDate;

Parameters. ParamByName ('DataOkonch'). Value: =MySelectDateForm. DTPickerEnd. Date;

Open;

End;

With DMReport. ADOQProdazhiZaPeriodKomplekt Do