📄 pr110.pas
字号:
unit PR110;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
MasterDetail, Menus, Db, DBTables, Grids, DBGrids, Buttons, ExtCtrls,
StdCtrls, Mask, DBCtrls;
type
TfmPR110 = class(TfmMasterDetail)
qyMasterSupplierAttribName: TStringField;
qyMasterWarehouseName: TStringField;
qyMasterCompanyID: TStringField;
qyMasterWarehouseID: TStringField;
qyMasterPurchaseID: TStringField;
qyMasterPurchaseDate: TStringField;
qyMasterSupplierID: TStringField;
qyMasterPurchaseProperty: TStringField;
qyMasterInvoiceNo: TStringField;
qyMasterSubTotal: TBCDField;
qyMasterValueAddTax: TBCDField;
qyMasterAmount: TBCDField;
qyMasterPaid: TBCDField;
qyMasterCreateMan: TStringField;
qyMasterCreateDate: TStringField;
qyMasterCreateTime: TStringField;
qyMasterModifyMan: TStringField;
qyMasterModifyDate: TStringField;
qyMasterModifyTime: TStringField;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
Label3: TLabel;
ED2: TDBEdit;
DBEdit4: TDBEdit;
Label5: TLabel;
ED3: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
Panel5: TPanel;
Label8: TLabel;
ED8: TDBEdit;
Label9: TLabel;
DBEdit9: TDBEdit;
Label10: TLabel;
DBEdit10: TDBEdit;
Label11: TLabel;
DBEdit11: TDBEdit;
sbSupplierID: TSpeedButton;
sbPurchaseDate: TSpeedButton;
sbWarehouseID: TSpeedButton;
rgPurchaseProperty: TDBRadioGroup;
qyDetailProductName: TStringField;
qyDetailCompanyID: TStringField;
qyDetailPurchaseID: TStringField;
qyDetailPurchaseItem: TStringField;
qyDetailProductID: TStringField;
qyDetailPurchaseQuantity: TBCDField;
qyDetailPurchaseUnitPrice: TBCDField;
qyDetailPurchaseAmount: TBCDField;
qyTemp2: TQuery;
qyTemp1: TQuery;
edProductID: TDBEdit;
qyMasterAccountPayable: TBCDField;
procedure FormCreate(Sender: TObject);
procedure qyMasterBeforeOpen(DataSet: TDataSet);
procedure qyMasterNewRecord(DataSet: TDataSet);
procedure qyMasterBeforePost(DataSet: TDataSet);
procedure qyDetailBeforeOpen(DataSet: TDataSet);
procedure qyDetailNewRecord(DataSet: TDataSet);
procedure qyDetailBeforePost(DataSet: TDataSet);
procedure sbPurchaseDateClick(Sender: TObject);
procedure sbSupplierIDClick(Sender: TObject);
procedure sbWarehouseIDClick(Sender: TObject);
procedure qyDetailPurchaseQuantityValidate(Sender: TField);
procedure qyDetailPurchaseUnitPriceValidate(Sender: TField);
procedure qyDetailUpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
procedure qyMasterSupplierIDValidate(Sender: TField);
procedure qyMasterWarehouseIDValidate(Sender: TField);
procedure qyDetailProductIDValidate(Sender: TField);
procedure gdDetailEditButtonClick(Sender: TObject);
procedure qyDetailAfterInsert(DataSet: TDataSet);
procedure dsMasterStateChange(Sender: TObject);
procedure qyMasterUpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
procedure sbSelectClick(Sender: TObject);
procedure sbReportClick(Sender: TObject);
private
{ Private declarations }
procedure CalcPurchaseAmount;
procedure UpdatePurchaseAnalyst(PurchaseDate, SupplierID, ProductID,
PurchaseProperty: String; PurchaseQuantity, PurchaseAmount: Extended);
procedure UpdateSupplierInventory(SupplierID, ProductID: String;
Quantity: Extended);
public
{ Public declarations }
AStartPeriodDate, AEndPeriodDate : String;
AStartSupplierID, AEndSupplierID : String;
AStartWarehouseID, AEndWarehouseID : String;
AProperty5, AProperty6, AProperty7, AProperty8 : String;
ReData : Boolean;
procedure OpenDB; override;
procedure CalcAmount; override;
procedure GetPrevValue; override;
end;
var
fmPR110: TfmPR110;
implementation
uses Main, DataModule, PublicFunction, CheckData, ChinaCalendar, BaseSearch,
GetData, PR110Select, Loading, PR110Report;
var
sPrevPurchaseDate, sPrevSupplierID, sPrevWarehouseID, sPrevPurchaseProperty : String;
{$R *.DFM}
{ TfmPR110 }
procedure TfmPR110.FormCreate(Sender: TObject);
begin
AStartPeriodDate := sStartPeriodDate;
AEndPeriodDate := sEndPeriodDate;
AStartSupplierID := '00000000';
AEndSupplierID := 'ZZZZZZZZ';
AStartWarehouseID := '00';
AEndWarehouseID := 'ZZ';
AProperty5 := '5';
AProperty6 := '6';
AProperty7 := '7';
AProperty8 := '8';
ReData := True;
inherited;
sPrevPurchaseDate := '';
sPrevSupplierID := '';
sPrevWarehouseID := '';
sPrevPurchaseProperty := '';
end;
procedure TfmPR110.OpenDB;
begin
qyMaster.Close;
OrderBySQL := 'M.PurchaseID';
qyMaster.SQL.Text := SQLText;
qyMaster.Open;
ItemFieldName := 'PurchaseItem';
DataDate := 'PurchaseDate';
end;
procedure TfmPR110.CalcAmount;
var
fSubTotal : Extended;
PrevBookmark : TBookmark;
begin
fSubTotal := 0;
PrevBookmark := qyDetail.GetBookmark;
try
qyDetail.DisableControls;
qyDetail.First;
while not qyDetail.Eof do
begin
fSubTotal := fSubTotal + qyDetail.FieldByName('PurchaseAmount').AsFloat;
qyDetail.Next;
end;
qyMaster.FieldByName('SubTotal').AsFloat := fSubTotal;
qyMaster.FieldByName('ValueAddTax').AsFloat :=
RealToInt(qyMaster.FieldByName('SubTotal').AsFloat * 0.05);
qyMaster.FieldByName('Amount').AsFloat :=
qyMaster.FieldByName('SubTotal').AsFloat +
qyMaster.FieldByName('ValueAddTax').AsFloat;
finally
qyDetail.EnableControls;
if PrevBookmark <> nil then
begin
qyDetail.GotoBookmark(PrevBookmark);
qyDetail.FreeBookmark(PrevBookmark);
end;
end;
end;
procedure TfmPR110.qyMasterBeforeOpen(DataSet: TDataSet);
begin
inherited;
with qyMaster do
begin
ParamByName('StartPeriodDate').AsString := AStartPeriodDate;
ParamByName('EndPeriodDate').AsString := AEndPeriodDate;
ParamByName('StartSupplierID').AsString := AStartSupplierID;
ParamByName('EndSupplierID').AsString := AEndSupplierID;
ParamByName('StartWarehouseID').AsString := AStartWarehouseID;
ParamByName('EndWarehouseID').AsString := AEndWarehouseID;
ParamByName('Property1').AsString := AProperty5;
ParamByName('Property2').AsString := AProperty6;
ParamByName('Property3').AsString := AProperty7;
ParamByName('Property4').AsString := AProperty8;
end;
end;
procedure TfmPR110.qyMasterNewRecord(DataSet: TDataSet);
begin
inherited;
with qyMaster do
begin
FieldByName('PurchaseID').AsString := Space(10);
FieldByName('PurchaseDate').AsString := Today;
FieldByName('SupplierID').AsString := Space(8);
FieldByName('WarehouseID').AsString := Space(2);
FieldByName('PurchaseProperty').AsString := '5';
FieldByName('InvoiceNo').AsString := Space(8);
FieldByName('SubTotal').AsFloat := 0;
FieldByName('ValueAddTax').AsFloat := 0;
FieldByName('Amount').AsFloat := 0;
FieldByName('AccountPayable').AsFloat := 0;
FieldByName('Paid').AsFloat := 0;
end;
end;
procedure TfmPR110.qyMasterBeforePost(DataSet: TDataSet);
begin
inherited;
if qyMaster.State = dsInsert then
begin
if not CheckDate(qyMaster.FieldByName('PurchaseDate').AsString) then
begin
ED1.SetFocus;
Abort;
end;
if not CheckSupplierID(qyMaster.FieldByName('SupplierID').AsString) then
begin
ED2.SetFocus;
Abort;
end;
if not CheckWarehouseID(qyMaster.FieldByName('WarehouseID').AsString) then
begin
ED3.SetFocus;
Abort;
end;
qyMaster.FieldByName('PurchaseID').AsString :=
IDGen('PR', qyMaster.FieldByName('PurchaseDate').AsString,
'PurchaseID', 'PurchaseMaster');
end;
if (qyMaster.FieldByName('PurchaseProperty').AsString = '5') then
qyMaster.FieldByName('AccountPayable').AsFloat :=
qyMaster.FieldByName('Amount').AsFloat
else
if (qyMaster.FieldByName('PurchaseProperty').AsString = '6') then
qyMaster.FieldByName('AccountPayable').AsFloat :=
qyMaster.FieldByName('Amount').AsFloat * -1
else
qyMaster.FieldByName('AccountPayable').AsFloat := 0;
end;
procedure TfmPR110.qyDetailBeforeOpen(DataSet: TDataSet);
begin
inherited;
qyDetail.ParamByName('PurchaseID').AsString := qyMaster.FieldByName('PurchaseID').AsString;
end;
procedure TfmPR110.qyDetailNewRecord(DataSet: TDataSet);
begin
inherited;
with qyDetail do
begin
FieldByName('PurchaseID').AsString := qyMaster.FieldByName('PurchaseID').AsString;
FieldByName('PurchaseItem').AsString := Space(3);
FieldByName('ProductID').AsString := Space(10);
FieldByName('PurchaseQuantity').AsFloat := 0;
FieldByName('PurchaseUnitPrice').AsFloat := 0;
FieldByName('PurchaseAmount').AsFloat := 0;
end;
end;
procedure TfmPR110.qyDetailBeforePost(DataSet: TDataSet);
begin
inherited;
if not CheckProductID(qyDetail.FieldByName('ProductID').AsString) then
begin
gdDetail.SelectedField := qyDetailProductID;
Abort;
end;
CalcPurchaseAmount;
if qyDetail.State = dsInsert then
qyDetail.FieldByName('PurchaseItem').AsString :=
ITGen(qyMaster.FieldByName('PurchaseID').AsString,
'PurchaseItem', 'PurchaseID', 'PurchaseDetail');
end;
procedure TfmPR110.sbPurchaseDateClick(Sender: TObject);
begin
inherited;
MyCalendar(ED1);
end;
procedure TfmPR110.sbSupplierIDClick(Sender: TObject);
begin
inherited;
qyMaster.FieldByName('SupplierID').AsString := SearchData(ED2, DM.qySupplier);
end;
procedure TfmPR110.sbWarehouseIDClick(Sender: TObject);
begin
inherited;
qyMaster.FieldByName('WarehouseID').AsString := SearchData(ED3, DM.qyWarehouse);
end;
procedure TfmPR110.CalcPurchaseAmount;
begin
qyDetail.FieldByName('PurchaseAmount').AsFloat :=
qyDetail.FieldByName('PurchaseQuantity').AsFloat *
qyDetail.FieldByName('PurchaseUnitPrice').AsFloat;
end;
procedure TfmPR110.qyDetailPurchaseQuantityValidate(Sender: TField);
begin
inherited;
CalcPurchaseAmount;
end;
procedure TfmPR110.qyDetailPurchaseUnitPriceValidate(Sender: TField);
begin
inherited;
CalcPurchaseAmount;
end;
procedure TfmPR110.qyDetailUpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
var
fNewPurchaseQuantity, fOldPurchaseQuantity : Extended;
fNewPurchaseAmount, fOldPurchaseAmount : Extended;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -