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
WithDB_Datado
//Определяем номер ячейки с фокусом и заполняем списки
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
//Определяем правильность номера накладной
IfNum.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
//Проверяем правильность введенной суммы
IfSum.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 + '. Сохранитьизменения?' ),