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

📄 dl110.pas

📁 利用delhpi 开发的一个关于零售业进销管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit DL110;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  MasterDetail, Menus, Db, DBTables, Grids, DBGrids, Buttons, ExtCtrls,
  StdCtrls, Mask, DBCtrls;

type
  TfmDL110 = class(TfmMasterDetail)
    qyMasterCompanyID: TStringField;
    qyMasterDeliveryID: TStringField;
    qyMasterDeliveryDate: TStringField;
    qyMasterCustomerID: TStringField;
    qyMasterCustomerAttribName: TStringField;
    qyMasterWarehouseID: TStringField;
    qyMasterWarehouseName: TStringField;
    qyMasterSalesManID: TStringField;
    qyMasterChineseName: TStringField;
    qyMasterDeliveryProperty: TStringField;
    qyMasterInvoiceType: TStringField;
    qyMasterInvoiceNo: TStringField;
    qyMasterCustomerOrderNo: TStringField;
    qyMasterSubTotal: TBCDField;
    qyMasterValueAddTax: TBCDField;
    qyMasterAmount: TBCDField;
    qyMasterSales: TBCDField;
    qyMasterTax: TBCDField;
    qyMasterReceived: 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;
    ED5: TDBEdit;
    DBEdit6: TDBEdit;
    Label7: TLabel;
    ED4: TDBEdit;
    DBEdit8: TDBEdit;
    sbWarehouseID: TSpeedButton;
    sbSalesManID: TSpeedButton;
    sbCustomerID: TSpeedButton;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    EDC: TDBEdit;
    EDD: TDBEdit;
    DBEdit13: TDBEdit;
    DBEdit14: TDBEdit;
    DBEdit15: TDBEdit;
    qyDetailCompanyID: TStringField;
    qyDetailDeliveryItem: TStringField;
    qyDetailProductID: TStringField;
    qyDetailProductName: TStringField;
    qyDetailSalesQuantity: TBCDField;
    qyDetailSalesUnitPrice: TBCDField;
    qyDetailSalesAmount: TBCDField;
    qyDetailSalesAnalystAmount: TBCDField;
    sbDeliveryDate: TSpeedButton;
    qyMasterDeliveryAddressID: TStringField;
    qyMasterAddressDescription: TStringField;
    Label4: TLabel;
    ED3: TDBEdit;
    DBEdit5: TDBEdit;
    sbDeliveryAddressID: TSpeedButton;
    qyDetailDeliveryID: TStringField;
    qyTemp2: TQuery;
    qyTemp1: TQuery;
    qyCustomerAddress: TQuery;
    StringField3: TStringField;
    StringField4: TStringField;
    edProductID: TDBEdit;
    rgDeliveryProperty: TDBRadioGroup;
    rgInvoiceType: TDBRadioGroup;
    qyMasterAccountReceivable: 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 sbDeliveryDateClick(Sender: TObject);
    procedure qyDetailSalesQuantityValidate(Sender: TField);
    procedure qyDetailSalesUnitPriceValidate(Sender: TField);
    procedure dsMasterStateChange(Sender: TObject);
    procedure qyMasterCustomerIDValidate(Sender: TField);
    procedure qyMasterDeliveryAddressIDValidate(Sender: TField);
    procedure qyMasterSalesManIDValidate(Sender: TField);
    procedure qyMasterWarehouseIDValidate(Sender: TField);
    procedure qyDetailProductIDValidate(Sender: TField);
    procedure gdDetailEditButtonClick(Sender: TObject);
    procedure sbSalesManIDClick(Sender: TObject);
    procedure sbCustomerIDClick(Sender: TObject);
    procedure sbDeliveryAddressIDClick(Sender: TObject);
    procedure qyCustomerAddressBeforeOpen(DataSet: TDataSet);
    procedure sbWarehouseIDClick(Sender: TObject);
    procedure qyDetailAfterInsert(DataSet: TDataSet);
    procedure qyDetailUpdateRecord(DataSet: TDataSet;
      UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    procedure qyMasterUpdateRecord(DataSet: TDataSet;
      UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    procedure sbSelectClick(Sender: TObject);
    procedure sbReportClick(Sender: TObject);
  private
    { Private declarations }
    procedure CalcSalesAmount;
    procedure UpdateSalesAnalyst(DeliveryDate, CustomerID, ProductID,
              DeliveryProperty: String; SalesQuantity, SalesAmount: Extended);
    procedure UpdateCustomerInventory(CustomerID, ProductID: String;
              Quantity: Extended);
  public
    { Public declarations }
    AStartPeriodDate, AEndPeriodDate : String;
    AStartCustomerID, AEndCustomerID : String;
    AStartSalesManID, AEndSalesManID : String;
    AStartWarehouseID, AEndWarehouseID : String;
    AProperty1, AProperty2, AProperty3, AProperty4 : String;
    ReData : Boolean;
    procedure OpenDB; override;
    procedure CalcAmount; override;
    procedure GetPrevValue; override;
  end;

var
  fmDL110: TfmDL110;

implementation

uses Main, DataModule, PublicFunction, CheckData, ChinaCalendar, GetData,
  BaseSearch, DL110Select, Loading, DL110Report;

var
  sPrevDeliveryDate, sPrevCustomerID, sPrevWarehouseID, sPrevDeliveryProperty : String;

{$R *.DFM}

{ TfmDL110 }

procedure TfmDL110.FormCreate(Sender: TObject);
begin

  AStartPeriodDate := sStartPeriodDate;
  AEndPeriodDate := sEndPeriodDate;
  AStartCustomerID := '00000000';
  AEndCustomerID := 'ZZZZZZZZ';
  AStartSalesManID := '0000';
  AEndSalesManID := 'ZZZZ';
  AStartWarehouseID := '0000';
  AEndWarehouseID := 'ZZZZ';
  AProperty1 := '1';
  AProperty2 := '2';
  AProperty3 := '3';
  AProperty4 := '4';
  ReData := False;
  inherited;

  sPrevDeliveryDate := '';
  sPrevCustomerID := '';
  sPrevWarehouseID := '';
  sPrevDeliveryProperty := '';

end;

procedure TfmDL110.OpenDB;
begin
  qyMaster.Close;
  OrderBySQL := 'M.DeliveryID';
  qyMaster.SQL.Text := SQLText;
  qyMaster.Open;
  ItemFieldName := 'DeliveryItem';
  DataDate := 'DeliveryDate';

end;

procedure TfmDL110.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('SalesAmount').AsFloat;
      qyDetail.Next;
    end;
    qyMaster.FieldByName('SubTotal').AsFloat := fSubTotal;
    if qyMaster.FieldByName('InvoiceType').AsString = '3' then
      qyMaster.FieldByName('ValueAddTax').AsFloat :=
               RealToInt(qyMaster.FieldByName('SubTotal').AsFloat * 0.05)
    else
      qyMaster.FieldByName('ValueAddTax').AsFloat := 0;
    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 TfmDL110.qyMasterBeforeOpen(DataSet: TDataSet);
begin
  inherited;

  with qyMaster do
  begin
    ParamByName('StartPeriodDate').AsString := AStartPeriodDate;
    ParamByName('EndPeriodDate').AsString := AEndPeriodDate;
    ParamByName('StartCustomerID').AsString := AStartCustomerID;
    ParamByName('EndCustomerID').AsString := AEndCustomerID;
    ParamByName('StartSalesManID').AsString := AStartSalesManID;
    ParamByName('EndSalesManID').AsString := AEndSalesManID;
    ParamByName('StartWarehouseID').AsString := AStartWarehouseID;
    ParamByName('EndWarehouseID').AsString := AEndWarehouseID;
    ParamByName('Property1').AsString := AProperty1;
    ParamByName('Property2').AsString := AProperty2;
    ParamByName('Property3').AsString := AProperty3;
    ParamByName('Property4').AsString := AProperty4;
  end;
end;

procedure TfmDL110.qyMasterNewRecord(DataSet: TDataSet);
begin
  inherited;

  with qyMaster do
  begin
    FieldByName('DeliveryID').AsString := Space(12);
    FieldByName('DeliveryDate').AsString := Today;
    FieldByName('CustomerID').AsString := Space(8);
    FieldByName('DeliveryAddressID').AsString := Space(2);
    FieldByName('WarehouseID').AsString := Space(2);
    FieldByName('SalesManID').AsString := Space(4);
    FieldByName('DeliveryProperty').AsString := '1';
    FieldByName('InvoiceType').AsString := '3';
    FieldByName('InvoiceNo').AsString := Space(8);
    FieldbyName('CustomerOrderNo').AsString := Space(15);
    FieldByName('SubTotal').AsFloat := 0;
    FieldByName('ValueAddTax').AsFloat := 0;
    FieldByName('Amount').AsFloat := 0;
    FieldByName('Sales').AsFloat := 0;
    FieldByName('Tax').AsFloat := 0;
    FieldByName('AccountReceivable').AsFloat := 0;
    FieldByName('Received').AsFloat := 0;
  end;
end;

procedure TfmDL110.qyMasterBeforePost(DataSet: TDataSet);
begin
  inherited;

  if qyMaster.State = dsInsert then
  begin
    if not CheckDate(qyMaster.FieldByName('DeliveryDate').AsString) then
    begin
      ED1.SetFocus;
      Abort;
    end;
    if not CheckCustomerID(qyMaster.FieldByName('CustomerID').AsString) then
    begin
      ED2.SetFocus;
      Abort;
    end;
  end;
  if not CheckAddressID(qyMaster.FieldByName('CustomerID').AsString,
                        qyMaster.FieldByName('DeliveryAddressID').AsString) then
  begin
    ED3.SetFocus;
    Abort;
  end;
  if not CheckSalesManID(qyMaster.FieldByName('SalesManID').AsString) then
  begin
    ED4.SetFocus;
    Abort;
  end;
  if not CheckWarehouseID(qyMaster.FieldByName('WarehouseID').AsString) then
  begin
    ED5.SetFocus;
    Abort;
  end;
  if qyMaster.State = dsInsert then
    qyMaster.FieldByName('DeliveryID').AsString :=
             IDGen('DL', qyMaster.FieldByName('DeliveryDate').AsString,
                   'DeliveryID', 'DeliveryMaster');
  if qyMaster.FieldByName('InvoiceType').AsString = '3' then
  begin
    qyMaster.FieldByName('Sales').AsFloat := qyMaster.FieldByName('SubTotal').AsFloat;
    qyMaster.FieldByName('Tax').AsFloat := qyMaster.FieldByName('ValueAddTax').AsFloat;
  end
  else
  begin
    qyMaster.FieldByName('Sales').AsFloat := qyMaster.FieldByName('Amount').AsFloat / 1.05;
    qyMaster.FieldByName('Tax').AsFloat := qyMaster.FieldByName('Amount').AsFloat -
                                           qyMaster.FieldByName('Sales').AsFloat;
  end;
  if (qyMaster.FieldByName('DeliveryProperty').AsString = '1') then
    qyMaster.FieldByName('AccountReceivable').AsFloat :=
             qyMaster.FieldByName('Amount').AsFloat
  else
    if (qyMaster.FieldByName('DeliveryProperty').AsString = '2') then
      qyMaster.FieldByName('AccountReceivable').AsFloat :=
               qyMaster.FieldByName('Amount').AsFloat * -1
    else
      qyMaster.FieldByName('AccountReceivable').AsFloat := 0;
end;

procedure TfmDL110.qyDetailBeforeOpen(DataSet: TDataSet);
begin
  inherited;

  qyDetail.ParamByName('DeliveryID').AsString := qyMaster.FieldByName('DeliveryID').AsString;
end;

procedure TfmDL110.qyDetailNewRecord(DataSet: TDataSet);
begin
  inherited;

  with qyDetail do
  begin
    FieldByName('DeliveryID').AsString := qyMaster.FieldByName('DeliveryID').AsString;
    FieldByName('DeliveryItem').AsString := Space(3);
    FieldByName('ProductID').AsString := Space(10);
    FieldByName('SalesQuantity').AsFloat := 0;
    FieldByName('SalesUnitPrice').AsFloat := 0;
    FieldByName('SalesAmount').AsFloat := 0;
    FieldByName('SalesAnalystAmount').AsFloat := 0;
  end;
end;

procedure TfmDL110.qyDetailBeforePost(DataSet: TDataSet);
begin
  inherited;

  if not CheckProductID(qyDetail.FieldByName('ProductID').AsString) then
  begin
    gdDetail.SelectedField := qyDetailProductID;
    Abort;
  end;
  CalcSalesAmount;
  if qyMaster.FieldByName('InvoiceType').AsString = '3' then
    qyDetail.FieldByName('SalesAnalystAmount').AsFloat :=
             qyDetail.FieldByName('SalesAmount').AsFloat
  else
    qyDetail.FieldByName('SalesAnalystAmount').AsFloat :=
             RealToInt(qyDetail.FieldByName('SalesAmount').AsFloat / 1.05);
  if qyDetail.State = dsInsert then
    qyDetail.FieldByName('DeliveryItem').AsString :=
             ITGen(qyMaster.FieldByName('DeliveryID').AsString,
                   'DeliveryItem', 'DeliveryID', 'DeliveryDetail');             
end;

procedure TfmDL110.sbDeliveryDateClick(Sender: TObject);
begin
  inherited;
  MyCalendar(ED1);
end;

procedure TfmDL110.qyDetailSalesQuantityValidate(Sender: TField);
begin
  inherited;
  CalcSalesAmount;
end;

procedure TfmDL110.qyDetailSalesUnitPriceValidate(Sender: TField);
begin
  inherited;
  CalcSalesAmount;
end;

procedure TfmDL110.CalcSalesAmount;
begin
  qyDetail.FieldByName('SalesAmount').AsFloat :=
           qyDetail.FieldByName('SalesQuantity').AsFloat *
           qyDetail.FieldByName('SalesUnitPrice').AsFloat;
end;

procedure TfmDL110.dsMasterStateChange(Sender: TObject);
begin
  inherited;
  ED2.ReadOnly := (qyMaster.State <> dsInsert);
  ED5.ReadOnly := (qyMaster.State <> dsInsert);
  rgDeliveryProperty.ReadOnly := (qyMaster.State <> dsInsert);
  rgInvoiceType.ReadOnly := (qyMaster.State <> dsInsert);
  sbCustomerID.Enabled := (qyMaster.State = dsInsert);
  sbDeliveryAddressID.Enabled := (qyMaster.State in [dsInsert, dsEdit]);
  sbSalesManID.Enabled := (qyMaster.State in [dsInsert, dsEdit]);
  sbWarehouseID.Enabled := (qyMaster.State = dsInsert);
end;

procedure TfmDL110.UpdateSalesAnalyst(DeliveryDate, CustomerID,
  ProductID, DeliveryProperty: String; SalesQuantity, SalesAmount: Extended);
begin
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT CustomerID ');
    SQL.Add('FROM SalesAnalyst ');
    SQL.Add('WHERE CompanyID = :CompanyID ');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -