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 + '\BagetReport. rav')
Then
// подключаем файл с отчётами
RvProject1. ProjectFile: =GetCurrentDir + '\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