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

📄 ar110.pas

📁 一套融入了系统营销管理思想的管理软件产品
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    gdDetail.SelectedField := qyDetailDeliveryID;
    Abort;
  end;
  if fTempAccountReceivable = fTempReceived then
  begin
    MyWarning('出货单单号' +
              qyDetail.FieldByName('DeliveryID').AsString + ']' + #10#13 +
              '已经冲销完毕,请重新输入');
    gdDetail.SelectedField := qyDetailDeliveryID;
    Abort;
  end;
  if qyDetail.FieldByName('Balance').AsFloat = 0 then
  begin
    MyWarning('本次冲款不可为0,请重新输入');
    gdDetail.SelectedField := qyDetailBalance;
    Abort;
  end;
  fReceived := qyDetail.FieldByName('Received').AsFloat +
               qyDetail.FieldByName('Balance').AsFloat -
               fPrevBalance;
  if ((fTempAccountReceivable < 0) and (fReceived < fTempAccountReceivable)) or
     ((fTempAccountReceivable > 0) and (fReceived > fTempAccountReceivable)) then
  begin
    MyWarning('本次冲款金额不可大于未冲销余额,请重新输入');
    gdDetail.SelectedField := qyDetailBalance;
    Abort;
  end;
  qyDetail.FieldByName('Received').AsFloat := fReceived;
end;

procedure TfmAR110.qyDetailCalcFields(DataSet: TDataSet);
begin
  inherited;

  qyDetail.FieldByName('UnReceived').AsFloat :=
           qyDetail.FieldByName('AccountReceivable').AsFloat -
           qyDetail.FieldByName('Received').AsFloat;
end;

procedure TfmAR110.qyMasterCustomerIDValidate(Sender: TField);
begin
  inherited;
  qyMaster.FieldByName('CustomerAttribName').AsString :=
           GetCustomerAttribName(qyMaster.FieldByName('CustomerID').AsString);
end;

procedure TfmAR110.sbReceiveDateClick(Sender: TObject);
begin
  inherited;
  MyCalendar(ED1);
end;

procedure TfmAR110.sbCustomerIDClick(Sender: TObject);
begin
  inherited;
  SearchData(ED2, DM.qyCustomerMaster);
end;

procedure TfmAR110.dsMasterStateChange(Sender: TObject);
begin
  inherited;
  ED2.ReadOnly := (qyMaster.State <> dsInsert);
  sbReceiveDate.Enabled := (qyMaster.State = dsInsert);
  sbCustomerID.Enabled := (qyMaster.State = dsInsert);
end;

procedure TfmAR110.gdDetailEditButtonClick(Sender: TObject);
begin
  inherited;
  if (gdDetail.SelectedField.FieldName = 'DeliveryID') and
     (qyDetail.State in [dsInsert, dsEdit]) then
    qyDetail.FieldByName('DeliveryID').AsString := SearchData(edDeliveryID, qyDeliveryMaster);
end;

procedure TfmAR110.qyDeliveryMasterBeforeOpen(DataSet: TDataSet);
begin
  inherited;
  with qyDeliveryMaster do
  begin
    ParamByName('CompanyID').AsString := sCompanyID;
    ParamByName('CustomerID').AsString := qyMaster.FieldByName('CustomerID').AsString;
  end;
end;

procedure TfmAR110.qyMasterUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
var
  fOldAdvance, fNewAdvance : Extended;
  fOldTotalBalance, fNewTotalBalance : Extended;
  sCustomerID : String;
begin
  inherited;
  fNewAdvance := 0;
  fOldAdvance := 0;
  fNewTotalBalance := 0;
  fOldTotalBalance := 0;
  sCustomerID := '';
  case UpdateKind of
    ukInsert :
      begin
        fNewAdvance := DataSet.FieldByName('Advance').NewValue;
        fOldAdvance := 0;
        fNewTotalBalance := DataSet.FieldByName('TotalBalance').NewValue;
        fOldTotalBalance := 0;
        sCustomerID := DataSet.FieldByName('CustomerID').NewValue;
      end;
    ukModify :
      begin
        fNewAdvance := DataSet.FieldByName('Advance').NewValue;
        fOldAdvance := DataSet.FieldByName('Advance').OldValue;
        fNewTotalBalance := DataSet.FieldByName('TotalBalance').NewValue;
        fOldTotalBalance := DataSet.FieldByName('TotalBalance').OldValue;
        sCustomerID := DataSet.FieldByName('CustomerID').OldValue;
      end;
    ukDelete :
      begin
        fNewAdvance := DataSet.FieldByName('Advance').OldValue;
        fOldAdvance := DataSet.FieldByName('Advance').OldValue;
        fNewTotalBalance := DataSet.FieldByName('TotalBalance').OldValue;
        fOldTotalBalance := DataSet.FieldByName('TotalBalance').OldValue;
        sCustomerID := DataSet.FieldByName('CustomerID').OldValue;
      end;
  end;
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE CustomerMaster SET Advance = Advance + :Advance, ');
    SQL.Add('CreditBalance = CreditBalance + :CreditBalance ');
    SQL.Add('WHERE CompanyID = :CompanyID AND CustomerID = :CustomerID ');
    ParamByName('CompanyID').AsString := sCompanyID;
    ParamByName('CustomerID').AsString := sCustomerID;
    ParamByName('Advance').AsFloat := fNewAdvance - fOldAdvance;
    ParamByName('CreditBalance').AsFloat := fNewTotalBalance - fOldTotalBalance;
    ExecSQL;
  end;
end;

procedure TfmAR110.qyDetailUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
  procedure UpdateDeliveryMasterReceived(DeliveryID: String; Received: Extended);
  begin
    with qyTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE DeliveryMaster SET Received = Received + :Received ');
      SQL.Add('WHERE CompanyID = :CompanyID AND DeliveryID = :DeliveryID ');
      ParamByName('CompanyID').AsString := sCompanyID;
      ParamByName('DeliveryID').AsString := DeliveryID;
      ParamByName('Received').AsFloat := Received;
      ExecSQL;
    end;
  end;
var
  fOldBalance, fNewBalance : Extended;
  fOldDeliveryID, fNewDeliveryID : String;
begin
  inherited;
  fNewBalance := 0;
  fOldBalance := 0;
  fNewDeliveryID := '';
  fOldDeliveryID := '';
  case UpdateKind of
    ukInsert :
      begin
        fNewBalance := DataSet.FieldByName('Balance').NewValue;
        fOldBalance := 0;
        fNewDeliveryID := DataSet.FieldByName('DeliveryID').NewValue;
        fOldDeliveryID := DataSet.FieldByName('DeliveryID').NewValue;
      end;
    ukModify :
      begin
        fNewBalance := DataSet.FieldByName('Balance').NewValue;
        fOldBalance := DataSet.FieldByName('Balance').OldValue;
        fNewDeliveryID := DataSet.FieldByName('DeliveryID').NewValue;
        fOldDeliveryID := DataSet.FieldByName('DeliveryID').OldValue;
      end;
    ukDelete :
      begin
        fNewBalance := 0;
        fOldBalance := DataSet.FieldByName('Balance').OldValue;
        fNewDeliveryID := DataSet.FieldByName('DeliveryID').OldValue;
        fOldDeliveryID := DataSet.FieldByName('DeliveryID').OldValue;
      end;
  end;
  UpdateDeliveryMasterReceived(fOldDeliveryID, fOldBalance * -1);
  UpdateDeliveryMasterReceived(fNewDeliveryID, fNewBalance);
end;

procedure TfmAR110.qyDetailDeliveryIDValidate(Sender: TField);
begin
  inherited;
  GetDeliveryInformation;
  qyDetail.FieldByName('Received').AsFloat := fTempReceived;
  qyDetail.FieldByName('AccountReceivable').AsFloat := fTempAccountReceivable;
  qyDetail.FieldByName('Balance').AsFloat := fTempAccountReceivable - fTempReceived;
end;

procedure TfmAR110.GetDeliveryInformation;
begin
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT DeliveryID, AccountReceivable, Received ');
    SQL.Add('FROM DeliveryMaster ');
    SQL.Add('WHERE CompanyID = :CompanyID AND DeliveryID = :DeliveryID ');
    SQL.Add('AND CustomerID = :CustomerID ');
    SQL.Add('AND (DeliveryProperty IN (''1'', ''2'')) ');
    ParamByName('CompanyID').AsString := sCompanyID;
    ParamByName('DeliveryID').AsString := qyDetail.FieldByName('DeliveryID').AsString;
    ParamByName('CustomerID').AsString := qyMaster.FieldByName('CustomerID').AsString;
    Open;
  end;
  fTempAccountReceivable := qyTemp.FieldByName('AccountReceivable').AsFloat;
  fTempReceived := qyTemp.FieldByName('Received').AsFloat;
  sTempDeliveryID := qyTemp.FieldByName('DeliveryID').AsString;
end;

procedure TfmAR110.qyDetailBeforeInsert(DataSet: TDataSet);
begin
  inherited;
  fPrevBalance := 0;
end;

procedure TfmAR110.qyDetailBeforeEdit(DataSet: TDataSet);
begin
  inherited;
  fPrevBalance := qyDetail.FieldByName('Balance').AsFloat;
end;

procedure TfmAR110.sbSelectClick(Sender: TObject);
begin
  inherited;
  ReData := False;
  qyMaster.DisableControls;
  try
    fmAR110Select := TfmAR110Select.Create(Application);
    fmAR110Select.ShowModal;
    if ReData then begin
      try
        fmLoading := TfmLoading.Create(Application);
        fmLoading.Show;
        fmLoading.Update;
        qyMaster.Close;
        qyMaster.Open;
      finally
        fmLoading.Hide;
        fmLoading.Free;
      end;
    end;
  finally
    qyMaster.EnableControls;
    fmAR110Select.Free;
  end;
end;

end.

⌨️ 快捷键说明

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