Разработка автоматизированной системы заполнения первичной документации предприятия
Понятие автоматизированной системы (АС). Обзор литературы, введение в базы данных. Назначение разработки, составные части программы. Программная и эксплуатационная документация, технико-экономическое обоснование проекта, характеристика программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 27.04.2009 |
Размер файла | 759,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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'); //Определяем адрес функции}
Teach_V.Value := Ins_Str(fld_s,Teach_V.Value,SFI[i]);
//Смещаем указатель на символьную длинну имени поля * на количество вставленных
//наименований поля, с учетом непустого значения следующей ячейки
if SFI[i+1] <> -1 Then SFI[i+1] := SFI[i+1] + Length(fld_s)* i;
//FreeLibrary(HLib); //Освобождаем библиотеку
end;
str_f := Teach_V.Value;
For i := 1 To 255 Do
SFI[i] := -1;
Num_a := 1;
For i := 1 To Length(Teach_V.Value) Do
begin
ULK := str_f[i] + str_f[i+1] + str_f[i+2] + str_f[i+3] + str_f[i+4] + str_f[i+5];
If ULK = 'Like "' Then
begin
SFI[Num_a] := i;
Num_a := Num_a + 1;
end;
end;
For i := 1 To Num_a Do
If SFI[i] <> -1 Then
begin
Teach_V.Value := Ins_Str(' ',Teach_V.Value,SFI[i]);
If SFI[i+1] <> -1 Then SFI[i+1] := SFI[i+1] + i;
end;
ToE := Length(Teach_V.Value);
end; //If QTVaalues.Value <> ''
If Selnull.Value = True Then
begin
ToE := Length(Teach_V.Value);
If ToE = 0 Then Empt_U := ''
Else Empt_U := ' Or ';
Teach_V.Value := Teach_V.Value + Empt_U + '(' + Teach_F.Value + ' IS NULL)';
end;
end;
procedure TDB_Data.Q_TeachAfterScroll(DataSet: TDataSet);
begin
{With FQuery Do
begin
If DOQAS = True Then
If DB_Data.DT.Value = 0 Then DBGrid1.Columns[1].ButtonStyle := cbsAuto
Else DBGrid1.Columns[1].ButtonStyle := cbsEllipsis;
end;}
end;
procedure TDB_Data.QTValuesChange(Sender: TField);
begin
If (QTValues.Value = '') And (Selnull.Value = True) Then
If Application.MessageBox('Удалить условие выборки пустых значений указанного столбца?',PChar(Application.Title),mb_IconQuestion+mb_YesNo) = idYes Then
Selnull.Value := False;
end;
procedure CH_Date(FLD: TWideStringField);
var sa_date, YNow, ISDate, Ydt : string;
NumP, i: integer;
begin
With DB_Data Do
Begin
NumP := StrToInt(FQuery.PC1.ActivePage.GetNamePath[Length(FQuery.PC1.ActivePage.GetNamePath)]); If (Teach_F.Value = 'TDate') And ((NumP = 2)Or(NumP = 4)) And (FLD.Value <> '') Thenbegin
For i := 1 To Length(FLD.Value) Do
If FLD.Value[i] = '.' Then sa_date := Sa_date + '/'
Else sa_date := sa_date + FLD.Value[i];
If FLD.Value[1] = '(' Then i := 2
Else i := 1;
If FLD.Value[i] <> '#' Then sa_date := '#' + sa_date;
If FLD.Value[Length(FLD.Value)] = ')' Then i := Length(FLD.Value) - 1
Else i := Length(FLD.Value);
If FLD.Value[i] <> '#' Then sa_date := sa_date + '#';
For i := 8 To Length(sa_date)-1 Do YNow := YNow + FLD.Value[i];
Case Length(YNow) Of
1 : ISDate := '200';
2 : ISDate := '20';
End;
If (Length(YNow) < 4) Then sa_date := DB_Data.Ins_Str(ISDate,sa_date,8);
For i := 8 To Length(sa_date) Do Ydt := Ydt + sa_date[i];
sa_date := sa_date[1]+sa_date[5]+sa_date[6]+sa_date[4]+sa_date[2]+sa_date[3]+sa_date[7]+Ydt;
FLD.Value := sa_date;
end
end;
end;
procedure TDB_Data.Q_TeachBeforePost(DataSet: TDataSet);
var NumP : integer;
begin
Lng.Value := ToE;
NumP := StrToInt(FQuery.PC1.ActivePage.GetNamePath[Length(FQuery.PC1.ActivePage.GetNamePath)]);
If NumP = 2 Then CH_Date(QTValues);
CH_Date(NewData);
end;
procedure TDB_Data.FDateSetText(Sender: TField; const Text: String);
var RD1 : TDateTime;
begin
//Проверяем правильность введенной даты
Try
FDate.Value := StrToDate(Text);
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.Q_RepCalcFields(DataSet: TDataSet);
begin
If Q_Rep.RecNo > 0 Then Q_RepNumpp.Value := Q_Rep.RecNo
Else Q_RepNumpp.Value := 1;
end;
procedure TDB_Data.Q_Rep2CalcFields(DataSet: TDataSet);
begin
If Q_Rep2.RecNo > 0 Then Q_Rep2Numpp.Value := Q_Rep2.RecNo
Else Q_Rep2Numpp.Value := 1;
end;
procedure TDB_Data.QOUAfterOpen(DataSet: TDataSet);
var i : integer;
begin
//ShowMessage(IntToStr(DataSet.Fields.Count));
DataSet.FieldByName('id').Index := 12;
For i := 0 To DataSet.Fields.Count-1 Do
If (Active_Tab.Fields[i].FieldKind <> fkCalculated) Then
DataSet.Fields[i].DisplayLabel := Active_Tab.Fields[i].DisplayLabel;
end;
end.
ПРИЛОЖЕНИЕ 2
«Экранные формы программы»
1. Главная форма и форма накладных
2. Форма запросов
3. Форма печати
4.Форма редактора списков
5.Форма фильтрации и поиска данных
ПРИЛОЖЕНИЕ 3
«Результаты тестирования программы»
№п/п |
Название испытания |
Цель |
Объект |
Значение |
Результат |
|
1 |
Проверка контроля ввода значений |
Проверка корректности работы пользовательского интерфейса |
Ввод значения в поле «№ Накладной» таблицы накладных |
-126 (Недопустимое значение) |
Программа выдает сообщение об ошибке при переходе к другому полю или попытке сохранить запись, так же программа возвращает корректное значение поля. |
|
2 |
----#---- |
----#---- |
----#---- |
1 (допустимое, но не уникальное значение) |
При попытке сохранить запись с неуникальным значением индекса программа выдает сообщение об ошибке, отменяет действие и возвращает корректное значение поля |
|
3 |
----#---- |
----#---- |
----#---- |
10 (допустимое значение) |
Программа сохраняет запись в таблице, при отсутствии других ошибок |
|
4 |
Проверка правильности ввода условия запроса |
Проверка контроля правильности ввода условий запроса |
Значение, введенное в таблицу условий |
Недопустимое значение (содержание лишней кавычки, ошибочный тип данных) |
Программа проверяет каждую строку условия и в случае ошибки останавливает процесс выполнения запроса и, указывая на строку с ошибкой, выдает сообщение об ошибке. |
|
5 |
----#---- |
----#---- |
----#---- |
Допустимое значение (условие с корректным синтаксисом) |
Программа считывает введенные условия, формирует текст запроса и выполняет его. При невозможности выполнить запрос по другим причинам, программа выдает соответствующее сообщение об ошибке |
Подобные документы
Разработка информационного обеспечения автоматизированной системы. Структурная схема и алгоритм программы. Проектные решения по программному обеспечению автоматизированной системы. Программа ведения учетно-отчетной документации пофидерного анализа.
дипломная работа [662,2 K], добавлен 06.06.2010Использование информационной системы отдела кадров предприятия для уменьшения времени выполнения функций, автоматического создания документации, проставления дат и табельных номеров, простоты поиска. Интерфейс программы и структура базы данных приложения.
курсовая работа [254,7 K], добавлен 25.03.2011Описание бизнес-процесса, исходной и результатной информации. Разработка базы данных, алгоритм решения задачи. Программная документация на изделие. Экспериментальное исследование программного продукта и его экономическое обоснование, расчет прибыли.
дипломная работа [1,8 M], добавлен 11.01.2012Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.
дипломная работа [3,6 M], добавлен 16.11.2011Обзор и обоснование выбора системы управления обучением. Структура автоматизированной обучающей системы. Описание процессов проектирование базы. Общие сведения о процессах полимеризации. Получение каучуков методом стереоспецифической полимеризации.
курсовая работа [2,9 M], добавлен 19.06.2015Проектирование базы данных для автоматизированной системы "Склад". Разработка концептуальной модели (ER-диаграмма). Преобразование в реляционную модель и ее нормализация. Разработка запросов к базе данных на языке SQL. Скрипт для создания базы данных.
курсовая работа [161,8 K], добавлен 07.10.2013Анализ существующих разработок и выбор стратегии автоматизации делопроизводства взаимоотношении поставщиков лекарственных препаратов с аптекой. Разработка проекта базы данных аптеки "Ригла". Обоснование экономической эффективности разработки базы данных.
дипломная работа [3,0 M], добавлен 19.09.2013Обзор медицинских информационных систем. Анализ и моделирование автоматизированной системы "Регистратура". Требования к составу и параметрам вычислительной системы. Обоснование выбора системы управления базами данных. Разработка инструкции пользователя.
дипломная работа [1,2 M], добавлен 14.10.2012Разработка программы автоматизации подбора запчастей для ремонта автомобилей. Структурные единицы сообщений. Концептуальная модель системы. Алгоритм работы автоматизированной системы. Физическая модель данных. Описание пользовательского интерфейса.
дипломная работа [2,1 M], добавлен 20.06.2013Постановка задачи разработки автоматизированной системы управления в органах социальной защиты населения. Организация учета и распределения денежных средств. Логическая и физическая структуры базы данных. Методология работы с автоматизированной системой.
дипломная работа [1,9 M], добавлен 24.03.2010