acp500_02.pas.svn-base

来自「一个用Delphi开发的ERP软件」· SVN-BASE 代码 · 共 910 行 · 第 1/3 页

SVN-BASE
910
字号
  while not qryAcp500B.Eof do
  begin
    adsAcp500B.Append;
    adsAcp500B.FieldByName('FItemID').Value:=qryAcp500B.FieldByName('I150_002').Value;       //产品编号
    adsAcp500B.FieldByName('FItemName').Value:=qryAcp500B.FieldByName('I150_003').Value;     //产品名称
    adsAcp500B.FieldByName('FItemSpec').Value:=qryAcp500B.FieldByName('I150_004').Value;     //规格型号
    adsAcp500B.FieldByName('FUnitName').Value:=qryAcp500B.FieldByName('I140_003').Value;     //单位名称
    adsAcp500B.FieldByName('FOrderQty').Value:=qryAcp500B.FieldByName('P510B_005').Value;     //销售数量
    adsAcp500B.FieldByName('FOrderAmount').Value:=qryAcp500B.FieldByName('P510B_007').Value*(1-ARate);  //销售金额
    adsAcp500B.FieldByName('FOrderPrice').Value:=adsAcp500B.FieldByName('FOrderAmount').Value/adsAcp500B.FieldByName('FOrderQty').Value;   //销售单价
    adsAcp500B.FieldByName('FQty').Value:=qryAcp500B.FieldByName('A500B_005').Value;          //折扣数量
    adsAcp500B.FieldByName('FRate').Value:=qryAcp500B.FieldByName('A500B_006').Value;         //折扣比率
    adsAcp500B.FieldByName('FAmount').Value:=qryAcp500B.FieldByName('A500B_007').Value;       //折扣金额
    adsAcp500B.FieldByName('FDisAmt').Value:=qryAcp500B.FieldByName('P510B_025').Value;       //已折扣额
    adsAcp500B.FieldByName('FAcpQty').Value:=adsAcp500B.FieldByName('FOrderQty').Value-adsAcp500B.FieldByName('FQty').Value;             //应收数量
    adsAcp500B.FieldByName('FAcpAmt').Value:=adsAcp500B.FieldByName('FOrderAmount').Value-adsAcp500B.FieldByName('FAmount').Value;       //应收金额
    adsAcp500B.FieldByName('FRemark').Value:=qryAcp500B.FieldByName('A500B_008').Value;       //备注说明
    adsAcp500B.FieldByName('FItemNo').Value:=qryAcp500B.FieldByName('P510B_003').Value;       //料品编号
    adsAcp500B.FieldByName('FOrder').Value:=qryAcp500B.FieldByName('A500B_003').Value;        //来源单号
    adsAcp500B.FieldByName('FLineNo').Value:=qryAcp500B.FieldByName('A500B_002').Value;       //来源行号
    cbDisType.ItemIndex:=qryAcp500B.FieldByName('A500B_009').Value;                           //折扣类型
    adsAcp500B.FieldByName('FDisType').Value:=cbDisType.Value;                                //折扣类型
    adsAcp500B.Post;
    ALastNo:=qryAcp500B.FieldByName('A500B_002').AsInteger;
    qryAcp500B.Next;
  end;
  adsAcp500B.EnableControls;
  AIsChanged:=True;
  wwDBGrid1UpdateFooter(wwDBGrid1);
  SetDBGridA;
end;

//添加销售折扣的明细
procedure TAcp500_02Form.AddDetailData;
var
  ARate:double;
begin
  ALastNo:=0;
  qryPUR510B.DisableControls;
  adsAcp500B.Close;
  adsAcp500B.CreateDataSet;

  SYSDM.qryQuery.Close;
  SYSDM.qryQuery.SQL.Clear;
  SYSDM.qryQuery.SQL.Add('select P510A_013 from Pur510A where P510A_001='+''''+edtOrder.Text+'''');
  SYSDM.qryQuery.Open;
  ARate:=SYSDM.qryQuery.FieldByName('P510A_013').Value;

  qryPUR510B.Close;
  qryPUR510B.SQL.Clear;
  qryPUR510B.SQL.Add('select P510B_001,B.P510B_002,B.P510B_003,B.P510B_004,B.P510B_005,B.P510B_006,B.P510B_013,B.P510B_025');
  qryPUR510B.SQL.Add(' from PUR510B B');
  qryPUR510B.SQL.Add(' where B.P510B_001='+''''+edtOrder.Text+'''');
  qryPUR510B.SQL.Add(' order by P510B_002');
  qryPUR510B.Open;
  while not qryPUR510B.Eof do
  begin
    adsAcp500B.Append;
    adsAcp500B.FieldByName('FItemID').Value:=qryPUR510B.FieldByName('I150_002').Value;        //产品编号
    adsAcp500B.FieldByName('FItemName').Value:=qryPUR510B.FieldByName('I150_003').Value;      //产品名称
    adsAcp500B.FieldByName('FItemSpec').Value:=qryPUR510B.FieldByName('I150_004').Value;      //规格型号
    adsAcp500B.FieldByName('FUnitName').Value:=qryPUR510B.FieldByName('I140_003').Value;      //单位名称
    adsAcp500B.FieldByName('FOrderQty').Value:=qryPUR510B.FieldByName('P510B_005').Value;     //销售数量
    adsAcp500B.FieldByName('FOrderAmount').Value:=qryPUR510B.FieldByName('P510B_013').Value*(1-ARate);  //销售金额
    adsAcp500B.FieldByName('FOrderPrice').Value:=adsAcp500B.FieldByName('FOrderAmount').Value/adsAcp500B.FieldByName('FOrderQty').Value;   //销售单价
    adsAcp500B.FieldByName('FDisAmt').Value:=qryPUR510B.FieldByName('P510B_025').Value;       //已折扣额
    // 需要计算
    adsAcp500B.FieldByName('FAcpQty').Value:=adsAcp500B.FieldByName('FOrderQty').Value-adsAcp500B.FieldByName('FQty').Value;             //应收数量
    adsAcp500B.FieldByName('FAcpAmt').Value:=adsAcp500B.FieldByName('FOrderAmount').Value-adsAcp500B.FieldByName('FAmount').Value;       //应收金额

    adsAcp500B.FieldByName('FItemNo').Value:=qryPUR510B.FieldByName('P510B_003').Value;         //料品电脑编号
    adsAcp500B.FieldByName('FOrder').Value:=qryPUR510B.FieldByName('P510B_001').Value;          //来源单号
    adsAcp500B.FieldByName('FLineNo').Value:=qryPUR510B.FieldByName('P510B_002').Value;         //来源行号
    adsAcp500B.Post;
    qryPUR510B.Next;
  end;
  adsAcp500B.EnableControls;
  AIsChanged:=True;
  wwDBGrid1UpdateFooter(wwDBGrid1);
  SetDBGridA;
end;

procedure TAcp500_02Form.SetDBGridA;
var
  I:Integer;
begin
  for I:=0 to wwDBGrid1.Selected.Count-1 do
  begin
    wwDBGrid1.Columns[I].ReadOnly:=True;
  end;
  wwDBGrid1.ColumnByName('FDisType').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FRemark').ReadOnly:=False;
  wwDBGrid1.Refresh;
end;

procedure TAcp500_02Form.adsAcp500BNewRecord(DataSet: TDataSet);
begin
  inherited;
  ALastNo:=ALastNo+1;
  adsAcp500B.FieldByName('FNo').Value:=ALastNo;
  adsAcp500B.FieldByName('FQty').Value:=0;
  adsAcp500B.FieldByName('FRate').Value:=0;
  adsAcp500B.FieldByName('FAmount').Value:=0;
  cbDisType.ItemIndex:=0;
end;

procedure TAcp500_02Form.wwDBGrid1ColExit(Sender: TObject);
begin
  inherited;
  if wwDBGrid1.GetActiveField.FieldName='FQty' then
  begin
    SetDisQty;
  end else
  if wwDBGrid1.GetActiveField.FieldName='FRate' then
  begin
    SetDisRate;
  end else
  if wwDBGrid1.GetActiveField.FieldName='FAmount' then
  begin
    SetDisAmount;
  end;

end;

procedure TAcp500_02Form.SetDisQty;
begin
  if not (adsAcp500B.State in [dsInsert,dsEdit]) then Exit;
  wwDBGrid1.ColumnByName('FQty').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FRate').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FAmount').ReadOnly:=False;
  if adsAcp500BFQty.AsFloat<adsAcp500BFOrderQty.AsFloat then
  begin
    adsAcp500BFRate.AsFloat:=adsAcp500BFQty.AsFloat/adsAcp500BFOrderQty.AsFloat;
    adsAcp500BFAmount.AsFloat:=adsAcp500BFQty.AsFloat*adsAcp500BFOrderPrice.AsFloat;
    adsAcp500BFAcpQty.AsFloat:=adsAcp500BFOrderQty.AsFloat-adsAcp500BFQty.AsFloat;
    adsAcp500BFAcpAmt.AsFloat:=(adsAcp500BFAcpQty.AsFloat*adsAcp500BFOrderPrice.AsFloat);
  end else
  begin
     ShowMsg('UMS10000675');      //折扣数量不能大于采购数量,请重新输入
  end;
  wwDBGrid1.ColumnByName('FRate').ReadOnly:=True;
  wwDBGrid1.ColumnByName('FAmount').ReadOnly:=True;
end;

procedure TAcp500_02Form.SetDisRate;
begin
  if not (adsAcp500B.State in [dsInsert,dsEdit]) then Exit;
  wwDBGrid1.ColumnByName('FQty').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FRate').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FAmount').ReadOnly:=False;
  if adsAcp500BFRate.AsFloat<1 then
  begin
    adsAcp500BFQty.AsFloat:=adsAcp500BFRate.AsFloat*adsAcp500BFOrderQty.AsFloat;
    adsAcp500BFAmount.AsFloat:=adsAcp500BFOrderAmount.AsFloat*adsAcp500BFRate.AsFloat;
    adsAcp500BFAcpQty.AsFloat:=adsAcp500BFOrderQty.AsFloat-adsAcp500BFQty.AsFloat;
    adsAcp500BFAcpAmt.AsFloat:=adsAcp500BFOrderAmount.AsFloat*(1-adsAcp500BFRate.AsFloat);
  end else
  begin
     ShowMsg('UMS10000676');      //折扣比率不能大于1,请重新输入
  end;
  wwDBGrid1.ColumnByName('FQty').ReadOnly:=True;
  wwDBGrid1.ColumnByName('FAmount').ReadOnly:=True;
end;

procedure TAcp500_02Form.wwDBGrid1Enter(Sender: TObject);
begin
  inherited;
  OnKeyDown:=nil;
end;

procedure TAcp500_02Form.wwDBGrid1Exit(Sender: TObject);
begin
  inherited;
  OnKeyDown:=AKeyEvent;
end;

procedure TAcp500_02Form.wwDBGrid1UpdateFooter(Sender: TObject);
var
  ASumQty,ALineDisRate,ALineSumAmt,AAcpQty,AAcpAmt:Double;
begin
  inherited;
  if not AIsChanged then Exit;
  ASumQty:=0;
  ALineDisRate:=0;
  ALineSumAmt:=0;
  AAcpQty:=0;
  AAcpAmt:=0;
  ADODataSet1.Clone(adsAcp500B);
  ADODataSet1.DisableControls;
  ADODataSet1.First;
  while not ADODataSet1.Eof do
  begin
    ASumQty:=ASumQty+ADODataSet1.FieldByName('FOrderQty').AsFloat;
    ALineDisRate:=ALineDisRate+StrToFloatA(FloatToStrF(ADODataSet1.FieldByName('FRate').AsFloat,ffNumber,18,2));
    ALineSumAmt:=ALineSumAmt+StrToFloatA(FloatToStrF(ADODataSet1.FieldByName('FQty').AsFloat,ffNumber,18,2));
    AAcpQty:=AAcpQty+StrToFloatA(FloatToStrF(ADODataSet1.FieldByName('FAcpQty').AsFloat,ffNumber,18,2));
    AAcpAmt:=AAcpAmt+StrToFloatA(FloatToStrF(ADODataSet1.FieldByName('FAcpAmt').AsFloat,ffNumber,18,2));
    ADODataSet1.Next;
  end;
  ADODataSet1.EnableControls;
  wwDBGrid1.ColumnByName('FItemID').FooterValue:=GetDBString('COM00004002')+FloatToStrF(adsAcp500B.RecordCount,ffNumber,18,0);  //记录总数
  wwDBGrid1.ColumnByName('FQty').FooterValue:=FloatToStrF(ASumQty,ffNumber,18,2);
  wwDBGrid1.ColumnByName('FRate').FooterValue:=FloatToStrF(ALineDisRate,ffNumber,18,2);
  wwDBGrid1.ColumnByName('FAmount').FooterValue:=FloatToStrF(ALineSumAmt,ffNumber,18,2);
  wwDBGrid1.ColumnByName('FAcpQty').FooterValue:=FloatToStrF(AAcpQty,ffNumber,18,2);
  wwDBGrid1.ColumnByName('FAcpAmt').FooterValue:=FloatToStrF(AAcpAmt,ffNumber,18,2);
end;

procedure TAcp500_02Form.SetDisAmount;
begin
  if not (adsAcp500B.State in [dsInsert,dsEdit]) then Exit;
  wwDBGrid1.ColumnByName('FQty').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FRate').ReadOnly:=False;
  wwDBGrid1.ColumnByName('FAmount').ReadOnly:=False;
  if adsAcp500BFAmount.AsFloat<adsAcp500BFOrderAmount.AsFloat then
  begin
    if adsAcp500BFOrderAmount.Value>0 then
    begin
      adsAcp500BFQty.AsFloat:=adsAcp500BFAmount.AsFloat/adsAcp500BFOrderAmount.Value*adsAcp500BFOrderQty.Value;
      adsAcp500BFRate.AsFloat:=adsAcp500BFAmount.AsFloat/adsAcp500BFOrderAmount.Value;
    end;
    adsAcp500BFAcpQty.AsFloat:=adsAcp500BFOrderQty.AsFloat-adsAcp500BFQty.AsFloat;
    adsAcp500BFAcpAmt.AsFloat:=adsAcp500BFOrderAmount.AsFloat*(1-adsAcp500BFRate.AsFloat);
  end else
  begin
     ShowMsg('UMS10000677');      //折扣金额不能大于采购金额,请重新输入
  end;
  wwDBGrid1.ColumnByName('FQty').ReadOnly:=True;
  wwDBGrid1.ColumnByName('FRate').ReadOnly:=True;
  wwDBGrid1.ColumnByName('FAmount').ReadOnly:=False;
end;

procedure TAcp500_02Form.edtOrderExit(Sender: TObject);
begin
  inherited;
  if trim(edtOrder.Text)='' then Exit;
  if qryPUR510A.Locate('P510A_001',edtOrder.Text,[]) then
  begin
    GetOrderInfo;
  end else
  begin
    ShowMsg('UMS10000678');    //输入的采购单号无效,请重新输入
    edtOrder.SetFocus;
    Abort;
  end;

end;

procedure TAcp500_02Form.cbDisTypeChange(Sender: TObject);
begin
  inherited;
  if cbDisType.ItemIndex=0 then
  begin
    wwDBGrid1.ColumnByName('FQty').ReadOnly:=False;
    wwDBGrid1.ColumnByName('FRate').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FAmount').ReadOnly:=True;
  end;
  if cbDisType.ItemIndex=1 then
  begin
    wwDBGrid1.ColumnByName('FQty').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FRate').ReadOnly:=False;
    wwDBGrid1.ColumnByName('FAmount').ReadOnly:=True;
  end;
  if cbDisType.ItemIndex=2 then
  begin
    wwDBGrid1.ColumnByName('FQty').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FRate').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FAmount').ReadOnly:=False;
  end;
end;

procedure TAcp500_02Form.adsAcp500BAfterScroll(DataSet: TDataSet);
begin
  inherited;
  if cbDisType.ItemIndex=0 then
  begin
    wwDBGrid1.ColumnByName('FQty').ReadOnly:=False;
    wwDBGrid1.ColumnByName('FRate').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FAmount').ReadOnly:=True;
  end;
  if cbDisType.ItemIndex=1 then
  begin
    wwDBGrid1.ColumnByName('FQty').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FRate').ReadOnly:=False;
    wwDBGrid1.ColumnByName('FAmount').ReadOnly:=True;
  end;
  if cbDisType.ItemIndex=2 then
  begin
    wwDBGrid1.ColumnByName('FQty').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FRate').ReadOnly:=True;
    wwDBGrid1.ColumnByName('FAmount').ReadOnly:=False;
  end;
end;

initialization
  RegisterClass(TAcp500_02Form);

finalization
  UnRegisterClass(TAcp500_02Form);

end.

⌨️ 快捷键说明

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