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);