Смекни!
smekni.com

Разработка автоматизированной системы заполнения первичной документации предприятия (стр. 16 из 18)

Active_Tab : TADOTable;

FS_Tab, MP_Tab: TCustomADODataSet;

Del_Q : byte;

Field_val, Right_num: Variant;

Tab_Name: String;

Active_Form: TForm;

Const

//Константы состаяний НД N_Gen

am_None = 0;

am_Add = 1;

am_Del = 2;

am_Edit = 3;

am_Scroll = 4;

implementation

uses Av_Data, Av_General, Load, Sub_Program, Av_DBData, Calend, Av_ListRed,

Av_ManyW, Av_Querys;

{$R *.dfm}

procedure TNucll.FormResize(Sender: TObject);

begin

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

B_Sile.Left := B_NSP.Left;

end;

procedure TNucll.FormCreate(Sender: TObject);

begin

//Устанавливаем размеры окна в соответствии с разрешением экрана

Height := General.ClientHeight - General.BTools.Height - General.Gen_Stat.Height - 5;;

Width := Round(Screen.Width * 0.90);

Top := 0;

Nucll.Work_A.Visible := RVB;

Nucll.Work_B.Visible := RVB;

Nucll.Client_A.Visible := RVB;

Nucll.Client_B.Visible := RVB;

Nucll.FioO_A.Visible := RVB;

Nucll.FioO_B.Visible := RVB;

Nucll.StatO_A.Visible := RVB;

Nucll.StatO_B.Visible := RVB;

Nucll.StatP_A.Visible := RVB;

Nucll.StatP_B.Visible := RVB;

end;

procedure TNucll.FormActivate(Sender: TObject);

begin

Top := 0;

//Меняем заголовок программы и окна

Application.Title := 'D-Art: Aurora v.1.0 [Накладная]';

Active_Tab := DB_Data.N_Gen;

FS_Tab := DB_Data.N_Gen;

MP_Tab := DB_Data.N_MIO;

Active_Form := Self;

Tab_Name := '"Накладные"';

DB_Data.Max_Num.SQL.Clear;

DB_Data.Max_Num.SQL.Add('Select Max(Num) From ' + Active_Tab.TableName);

Write_Stat(DB_Data.N_Gen,DB_Data.Primtabs,General.Gen_Stat);

Nucll.FocusControl(Navig);

end;

Procedure OnCls;

var i: byte;

Reg_nuc: TRegistry;

begin

//По закрытию сохраняем все изменения

DB_Data.N_Gen.UpdateBatch;

DB_Data.N_MIO.UpdateBatch;

P_Data.Control1.Enabled := False;

Nucll.Destroy;//WindowHandle;

If Av_General.SC_Win[W_Querys] = False Then Active_Tab := nil;

//Фиксируем закрытие окна в массиве (=>Av_General)

Av_General.SC_Win[W_Nuclls] := False;

//Меняем заголовок программы и окна

Application.Title := 'D-Art: Aurorav.1.0';

For i := 0 To 3 Do

General.Gen_Stat.Panels[i].Text := '';

//Записываем данные в реестр

Reg_nuc := TRegistry.Create;

Reg_nuc.OpenKey('\Software\D-Art Soft\Aurora',True);

Reg_nuc.WriteString('Sort_nuclls',DB_Data.N_Gen.Sort);

Reg_nuc.Destroy;

end;

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

var NS_Mes: integer;

begin

SV_Click := True;

//Проверяем сохранность данных

IfTAMode <> am_NoneThen

begin

NS_Mes := Application.MessageBox(PChar('Не были сохранены изменения в накладной №'+ DB_Data.Num.AsString + '. Сохранить изменения?' ),

'D-Art: Aurora',mb_OkCancel+mb_IconExclamation);

Case NS_Mes of

idOk : begin

{DB_Data.N_Gen.Post;

DB_Data.N_Gen.UpdateBatch;}

Try_SV;

Sub_Program.Op_Change;

Oncls;

Cancel_Cls := False; //Можно закрыть программу

end;

idCancel : begin

Action := caNone;

Cancel_Cls := True; //Нельзя закрывать программу

SV_Click := False;

end;

end; //Case

end

Else OnCls;

end;

procedure TNucll.Date_BClick(Sender: TObject);

begin

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

With Calen,DB_Data do

If ShowModal = mrOk Then

Try

//Пытаемся установить выбранную дату в базу

FDate.Value := MC.Date;

Except

Application.MessageBox('Не удается изменить дату выписки!','D-Art: Aurora',mb_Ok+mb_IconHand);

End;

end;

procedure TNucll.Work_BClick(Sender: TObject);

begin

Sub_Program.Show_ListRed(4,True); //Показываем окно редактора списков с нужным списком

end;

procedure TNucll.EditClick(Sender: TObject);

begin

DB_Data.N_Gen.UpdateBatch;

DB_Data.N_MIO.UpdateBatch;

Try

SV_Click := False;

DB_Data.N_Gen.Edit; //Устанавливаемрежимредактирования

Right_num := DB_Data.Num.Value;

//Выбираем объект для передачи фокуса ввода, согласно режиму отображения (=> Av_Data)

Case View_Mode of

vm_TO : Nucll.FocusControl(Grid); //Передаемтаблице

vm_TR,vm_RO : Nucll.FocusControl(E_Num) //Передаемпервомуполюредактора

End; //Case

SV_Click := False;

Except

Application.MessageBox('Не удается превести запись в режим редактирования.',

'D-Art: Aurora',mb_Ok + mb_IconHand);

Abort;

End;

end;

procedure TNucll.SaveClick(Sender: TObject);

begin

SV_Click := True;

CL_Click := False;

Try_SV; //Процедура

end;

procedure TNucll.AddClick(Sender: TObject);

begin

Nucll.FocusControl(Navig);

DB_Data.N_Gen.UpdateBatch;

DB_Data.N_MIO.UpdateBatch;

//Пытаемся вставить новую запись

Try

SV_Click := False;

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

DB_Data.Max_Num.Active := True;

DB_Data.N_Gen.Insert;

DB_Data.Max_Num.Active := False; //Деактивируемзапрос

Right_num := DB_Data.Num.Value;

//Выбираем объект для передачи фокуса

CaseView_Modeof

vm_TO : Nucll.FocusControl(Nucll.Grid); //Передаемтаблице

vm_TR,vm_RO : Nucll.FocusControl(Nucll.E_Num); //Передаемпервомуполюредактора

End; //Case

SV_Click := False;

Except

Application.MessageBox('Не удается добавить новую запись в таблицу.',

'D-Art: Aurora',mb_Ok + mb_IconHand);

Abort;

End;

end;

procedure TNucll.DelClick(Sender: TObject);

begin

//Сохраняем изменения перед следующим удалением

DB_Data.N_Gen.UpdateBatch;

DB_Data.N_MIO.UpdateBatch;

If Application.MessageBox(PChar('Вы действительно хотите удалить накладную №' + DB_Data.Num.AsString + '?'),

'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2) = idYes Then

Try

DB_Data.N_Gen.Delete; //Пытаемся удалить запись

Except

Application.MessageBox('Не удается удалить запись из таблицы.',

'D-Art: Aurora',mb_Ok + mb_IconHand);

Abort;

End;

end;

procedure TNucll.PriorClick(Sender: TObject);

begin

//Если не начало таблицы перемещаемся на предыдущую запись

If not DB_Data.N_Gen.Bof Then DB_Data.N_Gen.Prior

end;

procedure TNucll.NextClick(Sender: TObject);

begin

//Если не конец таблицы, то перемещаемся на следующую запись

If not DB_Data.N_Gen.Eof Then DB_Data.N_Gen.Next

end;

procedure Cancel_Input;

begin

If Del_Q = idYes Then

begin

CH_F := True;

DB_Data.Many.Value := 'Нет';

While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

end

end; //procedure

procedure TNucll.B_ManyClick(Sender: TObject);

var SM_Res: byte;

begin

If Exec = False Then

begin

Exec := True;

Del_Q := mrYes;

If CL_Click = False Then

begin

If (B_Many.Checked = True) And (TAMode <> am_None) And (CH_F2 = False) Then

If Application.MessageBox('Перед вводом/редактированием списка товаров и услуг на накладную, необходимо сохранить ее. Продолжить?',

'D-Art: Aurora',mb_IconQuestion + mb_YesNo) = mrYes Then

Repeat

CH_F := False; //Можноубратьфлажок

If Del_Q = mrYes Then No_Adding := True; //Поканедобавлялизаписи

SV_Click := True;

DB_Data.Many.Value := 'Да';

Try

DB_Data.N_Gen.Post;

DB_Data.N_Gen.UpdateBatch;

With DB_Data Do Sub_Program.Write_Stat(N_Gen,Primtabs,GEneral.Gen_Stat);

Except

Screen.Cursor := crDefault;

Application.MessageBox('Неудаетсясохранитьизменениявтаблице. Возможно введен неуникальный номер накладной, исправьте его и попробуйте ещё раз.',

'D-Art: Aurora',mb_Ok + mb_IconHand);

DB_Data.N_Gen.Edit;

DB_Data.Many.Value := 'Нет';

Exec := False;

CH_F := True;

DB_Data.Num.Value := Right_Num;

SV_Click := False;

//Выбираем оъект для предачи фокуса ввода

Case View_Mode of

vm_TR,vm_RO : Nucll.FocusControl(Nucll.E_Num); //Предаем фокус ввода первому полю редактора

vm_TO : Nucll.FocusControl(Nucll.Grid); //Предаем фокус ввода сетке

End; //Case

Abort;

End;

SV_Click := False;

DB_Data.N_Gen.Edit;

SM_Res := Many_List.ShowModal; //Показвываемокно

If SM_Res = mrCancel Then

begin

//Закрылинажатиемкнопки Cancel

if No_Adding = False Then

Del_Q := Application.MessageBox(PChar('Прекратитьвводспискатоваровиуслугдлянакладной №'+ DB_Data.Num.AsString +' иудалитьвсезаписи?'),

'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2)

Else Del_Q := idYes;

Cancel_Input;

end;

If (No_Adding = True) And (SM_Res = mrOk) Then

begin

//Не добавили ни одной записи

Del_Q := Application.MessageBox(PChar('Не было добавлено ни одной записи. Прекратить редактирование списка товаров и услуг для накладной №'+DB_Data.Num.Asstring+'?'),

'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2);

Cancel_Input;

if Del_Q = idNo Then SM_Res := mrCancel;

end;

If (No_Adding = False) And (SM_Res = mrOk) Then

begin

if M_Mode <> mrNone Then

begin

DB_Data.N_MIO.Post;

M_Mode := mr_None;

end;

DB_Data.Sum.Value := StrToFloat(Many_List.Edit1.Text);

end;

DB_Data.N_MIO.UpdateBatch;

Until ((SM_Res = mrOk) and (No_Adding = False)) or (Del_Q = idYes)

Else

begin

CH_F := True;

DB_Data.Many.Value := 'Нет';

CH_F2 := False;

end;

end

Else

begin

CH_F := False; //Можноубратьфлажок

CL_Click := False;

end;

//Приснятиифлажка

If (B_Many.Checked = False) And (TAMode <> am_None) And (CH_F = False) And (SMM = False) Then

begin

If CL_Click = False Then

begin

Del_Q := Application.MessageBox(PChar('Удалитьсписоктоваровиуслугдлянакладной №' + DB_Data.Num.AsString + '?'),

'D-Art: Aurora',mb_YesNo+mb_IconExclamation+mb_DefButton2);

If Del_Q = idYes Then

begin

CH_F2 := False;

DB_Data.N_MIO.First;

While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

end

Else

begin

CH_F2 := True;

DB_Data.Many.Value := 'Да';

CH_F := False;

end;

end

Else

begin

CH_F2 := False;

DB_Data.N_MIO.First;

While not DB_Data.N_MIO.Eof do DB_Data.N_MIO.Delete;

CL_Click := False;

end;

end;

Exec := False;

end;

end;

{procedure ReFresh_Tab(NewVal: string);

begin

if View_Mode = vm_TR Then Nucll.Ap_Button.Focused;

//Обновляем номера накладных в таблице С.М.Т.

DB_Data.Fresh_ML.Parameters[0].Value := StrToInt(NewVal); //Новоезначение

DB_Data.Fresh_ML.Parameters[1].Value := Num_Ins; //Староезначение

DB_Data.Fresh_ML.ExecSQL; //Выполняемзапрос

DB_Data.N_MiO.Requery; //Обновляемтаблицу

end;}

procedure TNucll.Lst_ManyClick(Sender: TObject);

varOld_Left : integer;

begin

{ If Application.MessageBox('Перед вводом/редактированием списка товаров и услуг на накладную, необходимо сохранить ее. Продолжить?',

'D-Art: Aurora',mb_IconQuestion + mb_YesNo) = mrYes Then

begin

{DB_Data.N_MIO.Active := False;

DB_Data.N_MIO.MasterFields := '';

DB_Data.N_MIO.Active := True;

SV_Click := True;

Try_SV; //Процедура

{DB_Data.N_MIO.Active := False;

DB_Data.N_MIO.MasterFields := 'Num';

DB_Data.N_MIO.Active := True;

DB_Data.N_Gen.Edit;}

Old_Left := Many_List.Ok_b.Left; //Запоминаемположениекнопки Ok

Many_List.Ok_b.Left := Many_List.Cancel_b.Left; //Меняемположениекнопки Ok}

Many_List.Cancel_b.Visible := False; //ПрячемкнопкуОтмена

//Показываемокно

Many_List.ShowModal;

IfM_Mode <> mrNoneThen

DB_Data.N_MIO.Post; //Сохраняем изменениня в таблице, если этого не сделал пользователь

//DB_Data.N_MIO.UpdateBatch;

DB_Data.Sum.Value := StrToFloat(Many_List.Edit1.Text);

If DB_Data.N_MIO.RecordCount = 0 Then

begin

SMM := True;

CL_Click := False;

DB_Data.Many.Value := 'Нет';

SMM := False;

Try

SV_Click := True;

DB_Data.N_Gen.Post;

DB_Data.N_Gen.UpdateBatch;

SV_Click := False;

Except

End;

DB_Data.N_Gen.Edit;

end;

M_Mode := mr_None; //Фиксируемсохранение

Many_List.Ok_b.Left := Old_Left; //Восстанавливаемположениекнопки Ok

Many_List.Cancel_b.Visible := True; //ПоказываемкнопкуОтмена}

DB_Data.Sum.Value := StrToFloat(Many_List.Edit1.Text);

//end;

end;

procedure TNucll.Work_AClick(Sender: TObject);

begin

If NoATL = False Then

With DB_Data do

If Sub_Program.A_LST(T_Work,W_List,L_Work.Text,L_Work,1) <> False Then

Many_List.Wk_Many.Items.Add(L_Work.Text);

end;

procedure TNucll.Client_BClick(Sender: TObject);

begin

Sub_Program.Show_ListRed(0,True); //Показываем окно редактора списков с нужным списком

end;

procedure TNucll.Client_AClick(Sender: TObject);

begin

With DB_Data do Sub_Program.A_LST(T_Client,C_List,L_Client.Text,L_Client,2);

end;

procedure TNucll.FioO_BClick(Sender: TObject);

begin

Sub_Program.Show_ListRed(2,True); //Показываем окно редактора списков с нужным списком

end;

procedure TNucll.FioO_AClick(Sender: TObject);

begin

With DB_Data do Sub_Program.A_LST(T_FioO,FO_List,L_FioO.Text,L_FioO,4); //Добавляемзаписьвсписок

end;

procedure TNucll.StatO_AClick(Sender: TObject);

begin

With DB_Data do Sub_Program.A_LST(T_StatO,SO_List,L_StatO.Text,L_StatO,5);

end;

procedure TNucll.StatO_BClick(Sender: TObject);

begin

Sub_Program.Show_ListRed(1,True); //Показываем окно редактора списков с нужным списком

end;

procedure TNucll.StatP_BClick(Sender: TObject);

begin

Sub_Program.Show_ListRed(3,True); //Показываем окно редактора списков с нужным списком

end;

procedure TNucll.StatP_AClick(Sender: TObject);