Защита рабочих от поражения электрическим током




 

При работе с персональным компьютером запрещается пользоваться неисправными розетками, соединительными проводами с поврежденной электроизоляцией, а также подключать компьютер в незаземленную электросеть.

Во время работы нельзя открывать системный блок компьютеров, а также любые работающие периферийные устройства. Не рекомендуется также подключать и/или отключать периферийные устройства от работающих ПЭВМ. Кроме того, рекомендуется использовать устройства, контролирующие изменения напряжения на входе в компьютер и другие устройства.


ЗАКЛЮЧЕНИЕ

 

В процессе работы над данным дипломным проектом мне пришлось столунуться с рядом достаточно сложных проблем, для решения которых пришлось пополнить некоторые теоретические знания и практические знания, как по общей теории баз данных, так и реализации приложений баз данных в среде визуального программирования Delphi. Именно на данную систему программирования и пал мой выбор после получения технического задания, содержащего все требования к функциональным характеристикам программы. Данный выбор не случаен. Borland Delphi 7.0 является, по-моему грлубочайшему убеждению одной из самых лучших (если не самой лучшей) системой по написанию приложений баз данных. Эта система имеет широкие возможности по реализации СУБД самой различной конфигурации и архитектуры, что в сочетании с гибгим и достаточно структурированным язком программирования Object Pascal дает Delphi огромное преимущество в сравнении с другими подобными системами.

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

Однако, в итоге, после завершения работы над программой, она стала удовлетворять всем требованиям заказчика.

Программа занимает на диске до 15-ти мегабайт. В оперативной памяти программа вместе со всеми загруженными библиотеками DLL занимает 11 килобайт. Так как программа использует технологии баз данных, то это увиличивает требования к свободной оперативной памяти компьютера и минимальным объемом, при котором программа работает с приемлимым быстродействием, составляет 32 мегабайта.

Программа предназначена для автоматизации заполнения первичной документации, хранения информации об этой документации в базе данных, а так же для обработки этой информации. Программа, как отмечалось выше, удовлетворяет всем требованиям заказчика и при ее использовании заметно снижается трудоемкость и время заполнения необходимой документации. Более того, как показано в главе 4 написание данной программы является рентабельным проектом, а значит, приносит реальную прибыль предпритию, использующею ее и окупается за 1,6 года.

В завершении хочется отметить, что данный проект (программа «D-Art Aurora v.1.0») не будет заброшен и разработка новых версий не заставит себя ждать, возможности программы будут расширены, но основной принцип всех моих программ, «Максимум пользы, при минимуме сложности», останется неизменным.


СПИСОК ЛИТЕРАТУРЫ

 

1. Робинсон С. – Microsoft Access 2000: учебный курс – СПб.: Питер, 2002.

2. Валерий Фаронов – Delphi 6: учебный курс – СПб.: Питер, 2002.

3. Валерий Фаронов – Программирование баз данных в Delphi 6: учебный курс – СПб.: Питер, 2002.

4. Валерий Фаронов – Профессиональная работа в Delphi 6. Библиотека программиста. – СПб.: Питер, 2002

5. Елманова Н. – Delphi 6 и технология COM. – СПб.: Питер, 2002

6. Базы данных: Учебник для высших учебных заведений /Под ред. проф. А.Д. Хомоненко. – СПб.: КОРОНА принт, 2000


ПРИЛОЖЕНИЕ 1

 

«Листинг программы D-Art Aurora v.1.0»

 

(ПРОЕКТ AURORA.DPR)

{D-Art® Aurora® v.1.0. © D-Art Software Corporation - 2003-2004.

All Copyrights are protected. Only personal use.

Not legal sale - is forbidden! }

 

Program Aurora;

 

 

uses

Forms,

SysUtils,

Controls,

Av_General in 'Av_General.pas' {General},

Av_Data in 'Av_Data.pas' {P_Data: TDataModule},

Sub_Program in 'Sub_Program.pas',

Load in 'Load.pas' {LoadF},

Av_Nuclls in 'Av_Nuclls.pas' {Nucll},

Av_DBData in 'Av_DBData.pas' {DB_Data: TDataModule},

Calend in 'Calend.pas' {Calen},

Av_ListRed in 'Av_ListRed.pas' {ListRed},

Av_ManyW in 'Av_ManyW.pas' {Many_List},

Av_Querys in 'Av_Querys.pas' {FQuery},

Av_Find in 'Av_Find.pas' {FFind},

Av_QLibrary in 'Av_QLibrary.pas' {QLib},

Av_ActionNow in 'Av_ActionNow.pas' {AN},

Av_FSort in 'Av_FSort.pas' {FSort},

Av_Print in 'Av_Print.pas' {FPrint},

Registry,

Av_Reports in 'Av_Reports.pas' {FReport},

Av_Pwrd in 'Av_Pwrd.pas' {FPwrd},

Av_ClearT in 'Av_ClearT.pas' {Form1},

Av_Exp in 'Av_Exp.pas' {FExp},

Av_Help in 'Av_Help.pas' {FHelp};

 

var

Aurora_Reg: TRegistry;

 

{$R *.res}

 

begin

{-----------------Начальные значения переменных------------}

First_load:= True; //Устанавливает запуск программы (=>Av_General)

Can_RS:= False; //Запрещает менять размеры рабочего окна (=>Av_Nuclls)

//Set_Top:= True; //Разрешаем мнять местоположение рабочего окна (=>Av_Nuclls)

TAMode:= am_None; //Устанавливаем состаяние НД(N_Gen) - НД не менялся (=>Av_Nuclls)

//i:= 1; //Счетчик массива номеров записей для удаления (=>Av_Nucll)

SV_Click:= False;

CH_F:= False;

CH_F2:= False;

Del_Q:= 0;

//NumNewF:= 0;

//ShowMEssage(Prog_Dir);

{-----------------Начальные значения (конец)---------------}

 

 

Application.Title:= 'D-Art: Aurora v.1.0';

Application.CreateForm(TGeneral, General);

Application.CreateForm(TLoadF, LoadF);

Application.CreateForm(TP_Data, P_Data);

Application.CreateForm(TDB_Data, DB_Data);

Application.CreateForm(TCalen, Calen);

Application.CreateForm(TListRed, ListRed);

Application.CreateForm(TMany_List, Many_List);

Application.CreateForm(TFFind, FFind);

Application.CreateForm(TQLib, QLib);

Application.CreateForm(TAN, AN);

Application.CreateForm(TFSort, FSort);

Application.CreateForm(TFPrint, FPrint);

Application.CreateForm(TFPwrd, FPwrd);

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TFExp, FExp);

Application.CreateForm(TFHelp, FHelp);

Application.Initialize;

 

{-----------------Реестр Windows---------------------------}

Aurora_Reg:= TRegistry.Create;

//Считываем значения из системного реестра

With Aurora_Reg Do

begin

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

If not ValueExists('Work_dir') Then

WriteString('Work_dir',ExtractFileDir(ExpandFileName('Aurora.exe')) + '\D_bc\');

If not ValueExists('Prog_dir') Then

WriteString('Prog_dir',ExtractFileDir(ExpandFileName('Aurora.exe')) + '\');

If not ValueExists('NDS') Then

WriteFloat('NDS',0.18);

If not ValueExists('NSP') Then

WriteFloat('NSP',0.05);

If not ValueExists('Ent_name') Then

WriteString('Ent_name','(Нет данных)');

If not ValueExists('Sort_nuclls') Then

WriteString('Sort_nuclls','Num ASC');

 

Nds_v:= ReadFloat('NDS');

Nsp_v:= ReadFloat('NSP');

Work_dir:= ReadString('Work_dir');

Prog_dir:= ReadString('Prog_dir');

Name_E:= ReadString('Ent_name');

 

//Определяем установлен ли пароль

If not ValueExists('PassWord') Then WriteString('PassWord','')

Else

begin

rpw:= ReadString('PassWord');

If rpw <> '' Then

If FPwrd.ShowModal = mrCancel Then Application.Terminate;

end;

end;

{-----------------Реестр Windows (конец)-------------------}

Application.Run;

end.

 

 

(МОДУЛЬ AV_NUCLLS.PAS)

unit Av_Nuclls;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, ToolWin, ExtCtrls, StdCtrls, Mask, DBCtrls,

Grids, DBGrids, Buttons, ADODB, DB, Registry;

 

type

TNucll = class(TForm)

Redactor: TGroupBox;

E_Num: TDBEdit;

E_Sum: TDBEdit;

Tools: TControlBar;

Navig: TToolBar;

Grid: TDBGrid;

E_Date: TDBEdit;

DBEdit6: TDBEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Date_B: TButton;

Label8: TLabel;

Work_B: TButton;

Client_B: TButton;

FioO_B: TButton;

StatO_B: TButton;

Label9: TLabel;

StatP_B: TButton;

B_NSP: TDBCheckBox;

B_Sile: TDBCheckBox;

B_Many: TDBCheckBox;

Label10: TLabel;

Bevel2: TBevel;

DBEdit3: TDBEdit;

Label11: TLabel;

DBEdit4: TDBEdit;

Label12: TLabel;

E_FioP: TDBEdit;

Save: TToolButton;

Add: TToolButton;

Del: TToolButton;

Edit: TToolButton;

Next: TToolButton;

Prior: TToolButton;

ToolButton7: TToolButton;

View: TToolButton;

Help: TToolButton;

ToolButton10: TToolButton;

L_Work: TDBComboBox;

L_Client: TDBComboBox;

L_FioO: TDBComboBox;

L_StatO: TDBComboBox;

L_StatP: TDBComboBox;

Work_A: TBitBtn;

Client_A: TBitBtn;

FioO_A: TBitBtn;

StatO_A: TBitBtn;

StatP_A: TBitBtn;

Lst_Many: TButton;

Ap_Button: TToolBar;

Red_LST: TToolButton;

ToolButton2: TToolButton;

MB_LST: TToolButton;

MoveBy_P: TToolButton;

ToolButton9: TToolButton;

ToolButton11: TToolButton;

ToolButton12: TToolButton;

ToolButton13: TToolButton;

ToolButton14: TToolButton;

ToolButton4: TToolButton;

MoveBy_N: TToolButton;

ToolButton3: TToolButton;

Bevel1: TBevel;

procedure FormResize(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormActivate(Sender: TObject);

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

procedure Date_BClick(Sender: TObject);

procedure Work_BClick(Sender: TObject);

procedure EditClick(Sender: TObject);

procedure SaveClick(Sender: TObject);

procedure AddClick(Sender: TObject);

procedure DelClick(Sender: TObject);

procedure PriorClick(Sender: TObject);

procedure NextClick(Sender: TObject);

procedure B_ManyClick(Sender: TObject);

procedure Lst_ManyClick(Sender: TObject);

procedure Work_AClick(Sender: TObject);

procedure Client_BClick(Sender: TObject);

procedure Client_AClick(Sender: TObject);

procedure FioO_BClick(Sender: TObject);

procedure FioO_AClick(Sender: TObject);

procedure StatO_AClick(Sender: TObject);

procedure StatO_BClick(Sender: TObject);

procedure StatP_BClick(Sender: TObject);

procedure StatP_AClick(Sender: TObject);

procedure Red_LSTClick(Sender: TObject);

procedure MoveBy_PClick(Sender: TObject);

procedure MoveBy_NClick(Sender: TObject);

procedure E_NumEnter(Sender: TObject);

procedure E_NumExit(Sender: TObject);

procedure GridExit(Sender: TObject);

procedure GridEnter(Sender: TObject);

procedure MB_LSTMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure GridDblClick(Sender: TObject);

procedure HelpClick(Sender: TObject);

procedure E_SumEnter(Sender: TObject);

procedure E_DateEnter(Sender: TObject);

procedure E_DateExit(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Nucll: TNucll;

Can_RS: boolean;{Определяет нужно менять размеры рабочего окна}

TAMode{Определяет различные состояния набора данных N_Gen (=>Av_DBData)}: byte;

CH_F, CH_F2, NoATL, SV_Click, No_Adding, InGRD, Exec, CL_Click, SMM: boolean;

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: Aurora v.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;

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

If TAMode <> am_None Then

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;

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

Case View_Mode of

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

var Old_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;

If M_Mode <> mrNone Then

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

begin

With DB_Data do Sub_Program.A_LST(T_StatP,SP_List,L_StatP.Text,L_StatP,3);

end;

 

procedure TNucll.Red_LSTClick(Sender: TObject);

begin

With DB_Data do

//Определяем номер ячейки с фокусом и заполняем списки

Case Grid.Columns.Grid.SelectedIndex of

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

4: Sub_Program.Show_ListRed(0,True);

5: Sub_Program.Show_ListRed(2,True);

6: Sub_Program.Show_ListRed(1,True);

8: Sub_Program.Show_ListRed(3,True);

Else Sub_Program.Show_ListRed(0,True);

End;

end;

 

procedure TNucll.MoveBy_PClick(Sender: TObject);

begin

Sub_Program.MBR(1);

end;

 

procedure TNucll.MoveBy_NClick(Sender: TObject);

begin

Sub_Program.MBR(2);

end;

 

procedure TNucll.E_NumEnter(Sender: TObject);

begin

NoATL:= True;

{If error_save = False Then Field_val:= E_Num.Text

Else error_save:= False;

 

Nucll.Caption:= Field_Val

//Num_Ins:= StrToInt(E_Num.Text);}

end;

 

procedure TNucll.E_NumExit(Sender: TObject);

begin

NoATL:= False;

//ReFresh_Tab(E_Num.Text);

end;

 

procedure TNucll.GridExit(Sender: TObject);

begin

Sub_Program.Colum_Adress; //Проверяем расположение столбцов

InGRD:= False;

end;

 

procedure TNucll.GridEnter(Sender: TObject);

begin

{ If Grid.Columns.Grid.SelectedIndex = 0 Then

Num_Ins:= Grid.Columns.Grid.SelectedField.Value;

Sub_Program.Colum_Adress;

Then Grid.Columns.Grid.SelectedIndex of

CN[6] CN[7],CN[8],CN[9],CN[10],CN[11]: Field_val:= Grid.Columns.Grid.SelectedField.Value;}

InGRD:= True;

Field_val:= Grid.Columns.Grid.SelectedField.Value;

end;

 

procedure TNucll.MB_LSTMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Nucll.FocusControl(Ap_Button);

end;

 

procedure TNucll.GridDblClick(Sender: TObject);

begin

Try

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

DB_Data.N_Gen.Edit;

Right_num:= DB_Data.Num.Value;

Nucll.FocusControl(Grid.Columns.Grid);

Except

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

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

Abort;

End;

end;

 

procedure TNucll.HelpClick(Sender: TObject);

begin

//Отменяем сделанные изменения

If TAMode = am_Add Then SV_Click:= True

Else SV_Click:= False;

CL_Click:= True;

DB_DAta.N_Gen.CancelBatch;

DB_Data.N_MIO.CancelBatch;

DB_Data.N_MIO.Requery;

 

If TAMode <> am_None Then DB_Data.N_Gen.Edit;

end;

 

procedure TNucll.E_SumEnter(Sender: TObject);

begin

NoATL:= True;

Field_Val:= E_Sum.Text;

end;

 

procedure TNucll.E_DateEnter(Sender: TObject);

begin

NoATL:= True;

Field_Val:= E_Date.Text;

end;

 

procedure TNucll.E_DateExit(Sender: TObject);

begin

//DB_Data.FDateSetText(DB_Data.FDate,E_Date.Text);

NoATL:= False; end; end.

 

//ПРОЕКТ "AURORA"

//Модуль данных - объекты для работы с БД

unit Av_DBData;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, ToolWin, ExtCtrls, DB, ADODB, DBGrids;

 

type

TStr_UP = Function(S: PChar): PChar; stdcall;

//TInsstr = Function(SubS, S: PChar; Index: integer): PChar; stdcall;

TSS = Set of Char;

TDB_Data = class(TDataModule)

Nuclls: TADOConnection;

N_Gen: TADOTable;

N_MIO: TADOTable;

DS_Gen: TDataSource;

Num: TIntegerField;

Client: TWideStringField;

Fio_P: TWideStringField;

Stat_P: TWideStringField;

Fio_O: TWideStringField;

Stat_O: TWideStringField;

NDS_Sum: TCurrencyField;

Lists: TADOConnection;

DS_Work: TDataSource;

T_Client: TADOTable;

DS_Client: TDataSource;

Without_NDS: TCurrencyField;

End_Sum: TCurrencyField;

T_FioO: TADOTable;

DS_FioO: TDataSource;

T_StatO: TADOTable;

DS_StatO: TDataSource;

T_StatP: TADOTable;

DS_StatP: TDataSource;

T_Work: TADOTable;

W_List: TWideStringField;

FO_List: TWideStringField;

SO_List: TWideStringField;

SP_List: TWideStringField;

NSP: TWideStringField;

Sile: TWideStringField;

Many: TWideStringField;

Max_Num: TADOQuery;

MN: TIntegerField;

DS_MIO: TDataSource;

M_Values: TWideStringField;

M_SW: TBCDField;

C_List: TWideStringField;

AllSum: TFloatField;

Sectabs: TADOQuery;

Primtabs: TADOQuery;

Id: TAutoIncField;

N_MIOMInc: TAutoIncField;

M_id: TIntegerField;

Querys: TADOConnection;

Q_Teach: TADOTable;

DS_Teach: TDataSource;

Q_Teachinc: TAutoIncField;

Fields: TWideStringField;

Teach_F: TWideStringField;

Id_tab: TWideStringField;

Del_Query: TADOQuery;

QOU: TADOQuery;

DS_QOU: TDataSource;

Teach_V: TStringField;

DT: TWordField;

Selnull: TBooleanField;

NewData: TWideStringField;

Lng: TIntegerField;

QTValues: TWideStringField;

Ed_Query: TADOQuery;

Sum: TBCDField;

Work: TWideStringField;

FDate: TDateTimeField;

Teach_USL: TMemoField;

Mnds: TCurrencyField;

MWnds: TCurrencyField;

Lk_use: TBooleanField;

str_date: TStringField;

Q_Rep: TADOQuery;

QRep_DS: TDataSource;

M_count: TIntegerField;

Q_RepExpr1000: TBCDField;

Q_RepTWork: TWideStringField;

Q_RepNumpp: TIntegerField;

Q_RepExpr1002: TBCDField;

Q_Rep2: TADOQuery;

DS_QR2: TDataSource;

Q_Rep2Expr1000: TBCDField;

Q_Rep2TWork: TWideStringField;

Q_Rep2Expr1002: TIntegerField;

Q_Rep2Numpp: TIntegerField;

Del_ALLT: TADOQuery;

procedure N_GenCalcFields(DataSet: TDataSet);

procedure NumValidate(Sender: TField);

procedure N_GenBeforeScroll(DataSet: TDataSet);

procedure N_GenAfterPost(DataSet: TDataSet);

procedure N_GenAfterEdit(DataSet: TDataSet);

procedure FDateValidate(Sender: TField);

procedure N_GenPostError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

procedure N_GenNewRecord(DataSet: TDataSet);

procedure N_GenAfterInsert(DataSet: TDataSet);

procedure NSPValidate(Sender: TField);

procedure SileValidate(Sender: TField);

procedure ManyValidate(Sender: TField);

procedure SumValidate(Sender: TField);

procedure N_MIONewRecord(DataSet: TDataSet);

procedure N_GenBeforePost(DataSet: TDataSet);

procedure N_GenBeforeEdit(DataSet: TDataSet);

procedure N_GenAfterDelete(DataSet: TDataSet);

procedure N_GenBeforeDelete(DataSet: TDataSet);

procedure N_GenDeleteError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

procedure N_GenEditError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

procedure T_WorkBeforePost(DataSet: TDataSet);

procedure N_GenAfterScroll(DataSet: TDataSet);

procedure N_MIOAfterInsert(DataSet: TDataSet);

procedure N_MIOPostError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

procedure N_MIOAfterPost(DataSet: TDataSet);

procedure N_MIOAfterScroll(DataSet: TDataSet);

procedure N_MIOCalcFields(DataSet: TDataSet);

procedure N_MIOBeforePost(DataSet: TDataSet);

procedure Q_TeachCalcFields(DataSet: TDataSet);

procedure Q_TeachAfterScroll(DataSet: TDataSet);

procedure QTValuesChange(Sender: TField);

procedure Q_TeachBeforePost(DataSet: TDataSet);

procedure FDateSetText(Sender: TField; const Text: String);

Function Ins_Str(SubS, S: string; Index: integer): string;

procedure Q_RepCalcFields(DataSet: TDataSet);

procedure Q_Rep2CalcFields(DataSet: TDataSet);

procedure QOUAfterOpen(DataSet: TDataSet);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

DB_Data: TDB_Data;

Nds_v, Nsp_v: real;

RD: TDateTime;

SV_Qes: integer;

//Old_Val: Array[1..12] of Variant;

Str_UP: TStr_UP;

Txt_UP: String;

No_SV, DoPR, error_save, DOQAS, UB_MIO: boolean;

 

implementation

 

uses Av_Nuclls, Av_General, Sub_Program, Calend, Av_Data, Av_ListRed,

Av_ManyW, Av_Querys, Av_QLibrary;

 

{$R *.dfm}

 

procedure TDB_Data.N_GenCalcFields(DataSet: TDataSet);

begin

NDS_Sum.Value:= Sum.Value - (Sum.Value*100)/(100 + 100 * Nds_v); //Сумма НДС

Without_NDS.Value:= Sum.Value - NDS_Sum.Value; //Сумма без НДС

If NSP.Value = 'Да' Then

End_Sum.Value:= Sum.Value + (Sum.Value * Nsp_v) //Итоговая сумма

Else

End_Sum.Value:= Sum.Value;

//Формируем текстовое представление даты

If FDate.AsString <> '' Then str_date.Value:= Sub_Program.D_STR(FDate.AsString);

end;

 

procedure TDB_Data.NumValidate(Sender: TField);

begin

//Определяем правильность номера накладной

If Num.Value <= 0 Then

begin

Nucll.E_Num.Text:= Right_num;

Nucll.Grid.Columns.Grid.SelectedField.Value:= Right_num;

Application.MessageBox('Неверное значение! Номер накладной введен неправильно.','D-Art: Aurora',mb_Ok + mb_IconHand);

Abort;

end;

end;

 

procedure NoAccess;

begin

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

Nucll.Grid.Options:= [dgTitles,dgIndicator,dgColumnResize,dgColLines,

dgRowLines,dgTabs,dgRowSelect,dgAlwaysShowSelection,

dgCancelOnExit];

end;

 

procedure TDB_Data.N_GenBeforeScroll(DataSet: TDataSet);

begin

//Записываем технические данные

If TAMode <> am_None Then N_GenBeforePost(N_Gen);

{begin

 

N_Gen.Edit; //Перводим таблицу в режим редактирования

RD:= StrToDate(FDate.Value); //Преобразуем дату в правильный формат

FDate.Value:= DateToStr(RD);

Sub_Program.Date_Val; //Вычисляем значения дня, месяца и года

Real_Sum.Value:= End_Sum.Value;

N_Gen.Post; //Сохраняем изменения в таблице}

 

NoAccess;

Deactive_Ed; //Показываем сохранение

//end;}

CH_F:= False; //Можно снимать флажок мно-ва работ

CH_F2:= False; //Можно устанавливать флажок

Screen.Cursor:= crDefault;

end;

 

procedure TDB_Data.N_GenAfterPost(DataSet: TDataSet);

begin

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

NoAccess;

Deactive_Ed;

CH_F:= False; //Можно снимать флажок мно-ва работ

CH_F2:= False; //Можно устанавливать флажок}

Screen.Cursor:= crDefault;

If SV_Click = False Then

begin

Try

N_Gen.UpdateBatch;

Sub_Program.Write_Stat(N_Gen,Primtabs,GEneral.Gen_Stat);

Except

error_save:= true;

Screen.Cursor:= crDefault;

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

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

 

DB_Data.N_Gen.Edit;

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;

end;

CL_Click:= False;

SV_Click:= False;

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

end;

 

procedure TDB_Data.N_GenAfterEdit(DataSet: TDataSet);

begin

TAMode:= am_Edit; //Фиксируем режим редактирования

SV_Click:= False;

Nucll.Grid.Options:= [dgEditing,dgAlwaysShowEditor,dgTitles,dgIndicator,dgColumnResize,

dgColLines,dgRowLines,dgTabs,dgAlwaysShowSelection,dgCancelOnExit];

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

Active_Ed;

Screen.Cursor:= crDefault;

end;

 

procedure TDB_Data.FDateValidate(Sender: TField);

var RD1: TDateTime;

begin

Try

RD1:= Sender.Value;

Except

Nucll.E_Date.Text:= Field_val;

If InGRD = True Then Nucll.Grid.Columns.Grid.SelectedField.Value:= Field_val;

Application.MessageBox('Не верное значение даты выписки! Воспользуйтесь календарем для ввода даты.',

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

Abort;

End;

end;

 

procedure TDB_Data.N_GenPostError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

begin

{Screen.Cursor:= crDefault;

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

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

SV_Click:= False;

Abort;

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

Case View_Mode of

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

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

End; //Case}

end;

 

procedure TDB_Data.N_GenNewRecord(DataSet: TDataSet);

begin

Num.Value:= MN.Value + 1; //Увиличиваем номер на 1 и вставляем в таблицу

FDate.Value:= Date; //Вставляем текущую дату

Sum.Value:= 0.00; //Вставляем начальную сумму

NSP.Value:= 'Нет'; //НСП

Many.Value:= 'Нет'; //Множественность записей

Sile.Value:= 'Нет'; //Отметка об уплате

Num_Ins:= DB_Data.Num.Value;

end;

 

procedure TDB_Data.N_GenAfterInsert(DataSet: TDataSet);

begin

TAMode:= am_Add; //Фиксируем режим добавления

Nucll.Grid.Options:= [dgEditing,dgAlwaysShowEditor,dgTitles,dgIndicator,dgColumnResize,

dgColLines,dgRowLines,dgTabs,dgAlwaysShowSelection,dgCancelOnExit];

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

Active_Ed;

Screen.Cursor:= crDefault;

end;

 

procedure TDB_Data.NSPValidate(Sender: TField);

begin

//Проверяем правильность значений логических полей

Sub_Program.Bool_ValiDate(NSP);

end;

 

procedure TDB_Data.SileValidate(Sender: TField);

begin

Sub_Program.Bool_ValiDate(Sile);

end;

 

procedure TDB_Data.ManyValidate(Sender: TField);

begin

Sub_Program.Bool_ValiDate(Many);

end;

 

procedure TDB_Data.SumValidate(Sender: TField);

begin

//Проверяем правильность введенной суммы

If Sum.Value < 0 Then

begin

Nucll.E_Sum.Text:= Field_val;

If InGRD = True Then Nucll.Grid.Columns.Grid.SelectedField.Value:= Field_val;Application.MessageBox('Не верное значение! Сумма накладной не может быть отрицательной.',

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

Abort;

end;

end;

 

procedure TDB_Data.N_MIONewRecord(DataSet: TDataSet);

begin

M_id.Value:= Id.Value; //Указываем номер нокладной (реальной записи)

M_Count.Value:= 1;

M_Values.Value:= 'Товар '+IntToStr(Num.Value);

M_SW.Value:= 0;

end;

 

procedure TDB_Data.N_GenBeforePost(DataSet: TDataSet);

begin

//ShowMessage('POST!');

If SV_Click = False Then

begin

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

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

Case SV_Qes of

idOk: SSh;

idCancel: Abort; //Отменяем сохранение

End; //Case

end //If SV_Click = False

Else Sub_Program.SSh;

end;

 

procedure TDB_Data.N_GenBeforeEdit(DataSet: TDataSet);

begin

Screen.Cursor:= crHourGlass;

end;

 

procedure TDB_Data.N_GenAfterDelete(DataSet: TDataSet);

begin

Screen.Cursor:= crDefault;

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

end;

 

procedure TDB_Data.N_GenBeforeDelete(DataSet: TDataSet);

begin

Screen.Cursor:= crHourGlass;

DB_Data.N_MIO.First;

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

end;

 

procedure TDB_Data.N_GenDeleteError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

begin

Screen.Cursor:= crDefault;

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 TDB_Data.N_GenEditError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

begin

Screen.Cursor:= crDefault;

end;

 

procedure TDB_Data.T_WorkBeforePost(DataSet: TDataSet);

begin

RL_Ctrl:= rl_None;

If DOQAS = True Then

QLib.CB1.Text:= DataSet.Fields[0].AsString;

Listred.List_Grid.Options:= [dgTitles,dgIndicator,dgRowSelect,

dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit] //FocusControl(List_Grid);

 

end;

 

procedure TDB_Data.N_GenAfterScroll(DataSet: TDataSet);

begin

Cancel_Cls:= False;

GEneral.Gen_Stat.Panels[2].Text:= 'Текущая запись: ' + IntToStr(N_Gen.RecNo);

end;

 

procedure TDB_Data.N_MIOAfterInsert(DataSet: TDataSet);

begin

No_Adding:= False;

end;

 

procedure TDB_Data.N_MIOPostError(DataSet: TDataSet; E: EDatabaseError;

var Action: TDataAction);

begin

//Ошибка при сохранении

Application.MessageBox('Не удается сохранить изменения!','D-Art: Aurora',mb_IconStop + mb_Ok);

Abort;

MS_Click:= False;

end;

 

procedure TDB_Data.N_MIOAfterPost(DataSet: TDataSet);

begin

M_Mode:= mr_None;

N_MIO.UpdateBatch;

Many_List.All_ManySum;

end;

 

procedure TDB_Data.N_MIOAfterScroll(DataSet: TDataSet);

begin

M_Mode:= mr_None;

end;

 

procedure TDB_Data.N_MIOCalcFields(DataSet: TDataSet);

begin

AllSum.Value:= M_SW.Value * M_Count.Value; //Формируем значение вычисляемого поля

Mnds.Value:= AllSum.Value - (AllSum.Value * 100)/(100 + 100 * Nds_v); //Сумма НДС

MWnds.Value:= AllSum.Value - Mnds.Value; //Сумма без НДС

end;

 

procedure TDB_Data.N_MIOBeforePost(DataSet: TDataSet);

begin

//Many_List.Edit1.Text:= FloatToStr(StrToFloat(MAny_List.Edit1.Text)+M_SW.Value);

end;

 

//Функция вставки подстроки в строку

Function TDB_Data.Ins_Str(SubS, S: string; Index: integer): string;

var Res_Str, Site_Str, Site_Chr, Rs, Ls: string;

j: byte;

begin

Ls:= '';

Rs:= '';

Site_Str:= S;

Site_Chr:= SubS;

 

If Index <= 1 Then

Res_Str:= Site_Chr + Site_Str

Else

begin

For j:= 1 to Index - 1 do

Ls:= Ls + Site_Str[j];

For j:= Index to Length(Site_Str) do

Rs:= Rs + Site_Str[j];

 

Res_Str:= Ls + Site_Chr +Rs;

end;

Ins_Str:= Res_Str;

end;

 

procedure TDB_Data.Q_TeachCalcFields(DataSet: TDataSet);

var ORW, ANDW, LKW, str_f, fld_s, U1, U2, U2p, ULK,

U1_n, U2_n, U2p_n, Empt_U: string;

i, Num_a: integer;

HLib: THandle; //Дискрептор DLL

SFI: Array[1..255] of integer; //Позиции для вставки наименований полей

Kav_USL: Boolean;

 

begin

if QTValues.Value <> '' Then

begin

Kav_USL:= False; //Обнуляем все значения переменных

Teach_V.Value:= '';

str_f:= QTValues.Value;

i:= 0;

While i <> Length(QTValues.Value) Do

begin

i:= i + 1;

If str_f[i] = '"' Then //Определяем часть строки условия как значение поля

Case Kav_USL of

True: Kav_USL:= False;

False: Kav_USL:= True;

End;

//Проверяем вхождение слов связи условий (И, ИЛИ) в условие запроса

ORW:= str_f[i-1] + str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3];

ANDW:= str_f[i-1] + str_f[i] + str_f[i+1];

 

If i = 1 Then LKW:= str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3]

Else LKW:= str_f[i-1] + str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3];

 

 

HLib:= LoadLibrary(PChar(Prog_Dir + 'String_DLL.dll')); //Загружаем DLL в память

If HLib <> 0 Then

begin

Str_UP:= GetProcAddress(HLib,'RS_UP'); //Определяем адрес функции

ORW:= StrPas(Str_UP(PChar(ORW))); //Преобразуем регистр

ANDW:= StrPas(Str_UP(PChar(ANDW)));

LKW:= StrPas(Str_UP(PChar(LKW)));

FreeLibrary(HLib);

//ShowMessage('*' + ORW + '*');

end;

 

//Меняем русские условия на английские

If Kav_USL = False Then

begin

If (ORW <> ' ИЛИ ') And (ANDW <> ' И ') And (LKW <> ' КАК ') And (LKW <> 'КАК ') Then

Teach_V.Value:= Teach_V.Value + str_f[i]

Else

begin

If ORW = ' ИЛИ ' Then

begin

i:= i + 2;

Teach_V.Value:= Teach_V.Value + 'Or';

end;

If ANDW = ' И ' Then

Teach_V.Value:= Teach_V.Value + 'And';

end;

If (LKW = ' КАК ') Or (LKW = 'КАК ') Then

begin

i:= i + 2;

Teach_V.Value:= Teach_V.Value + 'Like';

end;

end

Else Teach_V.Value:= Teach_V.Value + str_f[i];

end; //While

 

//Подставляем наименование поля

For i:= 1 To 255 Do

SFI[i]:= -1;

 

Num_a:= 1;

 

str_f:= Teach_V.Value;

For i:= 1 To Length(str_f) Do

begin

//Проверяем вхождение условий запроса (=, <>, >, < и т.д.)

 

U1:= str_f[i] + str_f[i+1];

U2:= str_f[i] + str_f[i+1] + str_f[i+2];

U2p:= str_f[i-1] + str_f[i] + str_f[i+1];

ULK:= str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3] + str_f[i+4] + str_f[i+5];

 

U1_n:= str_f[i];

U2_n:= str_f[i] + str_f[i+1];

U2p_n:= str_f[i-1] + str_f[i];

//Выясняем позиции для вставки наименования поля

If (((DT.Value=1)Or(DT.Value=2)) And ((((U1='="')Or(U1='>"')Or(U1='<"'))And((U2p<>'<>"')And(U2p<>'>="')And(U2p<>'<="')))Or(U2='<>"')Or(U2='>="')Or(U2='<="')Or(ULK='Like "'))) Or (((DT.Value=0)Or(DT.Value=2)) And ((((U1_n='=')Or(U1_n='>')Or(U1_n='<'))And((U2p_n<>'<>')And(U2p_n<>'>=')And(U2p_n<>'<=')))Or(U2_n='<>')Or(U2_n='>=')Or(U2_n='<=')Or(ULK='Like "'))) Then

begin

SFI[Num_a]:= i;

Num_a:= Num_a + 1;

end;

end; //For

 

fld_s:= Teach_F.Value;

//tch_s:= Teach_V.Value;

//Вставляем наименование поля

For i:= 1 To Num_a Do

If SFI[i] <> -1 Then

begin

//ShowMessage(IntToStr(SFI[i]));

{HLib:= LoadLibrary('String_Dll.dll'); //Загрузка бибилиотеки

Ins_Str:= GetProcAddress(HLib,'INS_STR'); //Определяем адрес функции}

T



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-02-15 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: