⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pr110.pas

📁 一套融入了系统营销管理思想的管理软件产品
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -