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

📄 ca020.pas

📁 电子充值系统:全球通的充值卡通过POS机传到销售点.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit CA020;

interface

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

type
  TfmCA020 = class(TfmMasterDetail)
    Label1: TLabel;
    DBEdit1: TDBEdit;
    Label2: TLabel;
    Label3: TLabel;
    ED2: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit8: TDBEdit;
    sbPayCode: TSpeedButton;
    Label13: TLabel;
    DBEdit13: TDBEdit;
    Label4: TLabel;
    qyTemp2: TQuery;
    qyTemp1: TQuery;
    edProductID: TDBEdit;
    qyMasterOUTCODE: TFloatField;
    qyMasterPAYCODE: TFloatField;
    qyMasterSALECODE: TStringField;
    qyMasterSALENAME: TStringField;
    qyMasterCREATEMAN: TStringField;
    qyMasterCREATEDATE: TDateTimeField;
    qyDetailID: TFloatField;
    qyDetailOUTCODE: TFloatField;
    qyDetailCARDTYPE: TStringField;
    qyDetailCARDPARVALUE: TFloatField;
    qyDetailCARDQUANTITY: TFloatField;
    qyDetailAMOUNT: TFloatField;
    sbOutCode: TSpeedButton;
    qyPay: TQuery;
    qyPayPAYCODE: TFloatField;
    qyMasterPAYMONEY: TFloatField;
    qyPayPAYMONEY: TFloatField;
    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 dsMasterStateChange(Sender: TObject);
    procedure gdDetailEditButtonClick(Sender: TObject);
    procedure sbPayCodeClick(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 qyDetailCARDPARVALUEValidate(Sender: TField);
    procedure qyDetailCARDQUANTITYValidate(Sender: TField);
    procedure qyDetailAMOUNTValidate(Sender: TField);
    procedure sbOutCodeClick(Sender: TObject);
    procedure qyPayBeforeOpen(DataSet: TDataSet);
    procedure qyDetailAfterPost(DataSet: TDataSet);
    procedure qyDetailAfterDelete(DataSet: TDataSet);
    procedure ED2Exit(Sender: TObject);
    procedure ED1Exit(Sender: TObject);
    procedure qyMasterAfterPost(DataSet: TDataSet);
    procedure qyDetailCARDTYPEChange(Sender: TField);
  private
    { Private declarations }
    procedure CalcSalesAmount;
    procedure InsertIntoSaleCardStock(fPayCode: Extended);
    procedure UpdatePayCite(fPayCode: 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;
    procedure CheckCardQuantity;
  end;

var
  fmCA020: TfmCA020;

implementation

uses Main, DataModule, PublicFunction, CheckData, ChinaCalendar,
  GetData,ChinaCalculator,
  BaseSearch,  Loading;

var
  sPrevDeliveryDate, sPrevCustomerID, sPrevWarehouseID, sPrevDeliveryProperty : String;
  rPrevPayCode : real;
  sSaleCode : string;
  MaxItem:string='';
{$R *.DFM}

{ TfmDL110 }

procedure TfmCA020.FormCreate(Sender: TObject);
begin
  inherited;
  //卡种
  gdDetail.Columns[2].PickList.Clear;
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select CardType from Pwpt_CardType where bused = ''1'' ');
    SQL.Add('group by CardType order by CardType');
    Open;
  end;
  while  not qyTemp.Eof do
  begin
    gdDetail.Columns[2].PickList.Add(qyTemp.fieldbyname('CardType').AsString);
    qyTemp.Next;
  end;
  
 // if gdDetail.Columns[2].PickList.Count > 0 then CB1.ItemIndex := 0;
end;

procedure TfmCA020.OpenDB;
begin
  qyMaster.Close;
  OrderBySQL := 'M.OutCode';
  qyMaster.SQL.Text := SQLText;
  qyMaster.Open;
  //ItemFieldName := 'ID';
end;

procedure TfmCA020.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('Amount').AsFloat;
      qyDetail.Next;
    end;
    DBEdit13.Text := floattostr(fSubTotal);
  finally
    qyDetail.EnableControls;
    if PrevBookmark <> nil then
    begin
      qyDetail.GotoBookmark(PrevBookmark);
      qyDetail.FreeBookmark(PrevBookmark);
    end;
  end;
end;

procedure TfmCA020.CheckCardQuantity;
var
  PrevBookmark : TBookmark;
  fNotSaleCardQuantity : real;
begin
  PrevBookmark := qyDetail.GetBookmark;
  try
    qyDetail.DisableControls;
    qyDetail.First;
    while not qyDetail.Eof do
    begin
  {   with qyTemp do
      begin
        Close;
        Sql.Clear;
        Sql.add('select count(*) as CardQuantity From pwpt_cardstock ');
        Sql.add('where CardType = :CardType and cardparvalue = :cardparvalue and bout =''0'' ');
        ParamByName('cardtype').AsString := qyDetail.fieldbyname('cardtype').AsString;
        ParamByName('cardparvalue').AsFloat := qyDetail.fieldbyname('cardparvalue').AsFloat;
        Open;
      end;
      }
      fNotSaleCardQuantity := GetNotSaleCardQuantuty( qyDetail.fieldbyname('cardtype').AsString,qyDetail.fieldbyname('cardparvalue').AsFloat );
      if fNotSaleCardQuantity < qyDetail.FieldByName('CardQuantity').AsFloat then
      begin
        MyWarning('卡库存不足!面值'
           + floattostr( qyDetail.fieldbyname('cardparvalue').AsFloat)
           + '元的' + qyDetail.fieldbyname('cardtype').AsString
           + '只有' + floattostr(fNotSaleCardQuantity)+'张');
        abort;
      end;
      qyDetail.Next;
    end;
  finally
    qyDetail.EnableControls;
    if PrevBookmark <> nil then
    begin
      qyDetail.GotoBookmark(PrevBookmark);
      qyDetail.FreeBookmark(PrevBookmark);
    end;
  end;
end;

procedure TfmCA020.qyMasterBeforeOpen(DataSet: TDataSet);
begin
  inherited;
  with qyMaster do
  begin
//    ParamByName('Property3').AsString := AProperty3;
  end;
end;

procedure TfmCA020.qyMasterNewRecord(DataSet: TDataSet);
begin
  inherited;
  with qyMaster do
  begin
    FieldByName('OutCode').AsFloat := GetMaxOutCode();
    FieldByName('PayCode').AsFloat := 0;
    FieldByName('SaleCode').AsString := Space(8);
    FieldByName('PayMoney').AsFloat := 0;
  end;
end;

procedure TfmCA020.qyMasterBeforePost(DataSet: TDataSet);
begin
  inherited;
  if not CheckSaleCode(qyMaster.FieldByName('SaleCode').AsString) then
  begin
    ED1.SetFocus;
    Abort;
  end;

  if qyMaster.FieldByName('PayCode').isnull then
  begin
    NullWarning('缴费编号');
    ED2.SetFocus;
    Abort;
  end;

  if not CheckPayCode(qyMaster.FieldByName('PayCode').Asfloat,
  qyMaster.FieldByName('SaleCode').AsString) then
  begin
    ED2.SetFocus;
    Abort;
  end;

  CalcAmount;

  if floattostr(qyMaster.FieldByName('PayMoney').AsFloat) <> DBEdit13.Text then
  begin
    MyWarning('缴费金额与卡总金额不符!');
    Abort;
  end;

  CheckCardQuantity;

  qyMaster.FieldByName('CreateMan').AsString := sAdmCode;
  qyMaster.FieldByName('CreateDate').AsDateTime := GetSysDate();

  if qyMaster.State = dsInsert then
  begin
    qyMaster.FieldByName('OutCode').AsFloat := GetMaxOutCode();
  end;
  WriteOperatorLog('[卡出库][Pwpt_CardOutMaster]['+qyMaster.fieldbyname('OutCode').asstring+']');
end;

procedure TfmCA020.qyDetailBeforeOpen(DataSet: TDataSet);
begin
  inherited;
  qyDetail.ParamByName('OutCode').AsString := qyMaster.FieldByName('OutCode').AsString;
end;

procedure TfmCA020.qyDetailNewRecord(DataSet: TDataSet);

⌨️ 快捷键说明

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