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

📄 inv500_02.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
  begin
    ShowMsg('UMS10000445');  //必须先输入正确的仓库编号
    edtWhs.SetFocus;
    Abort;
  end;
  AWhsNo:=qryInv100.FieldByName('I100_001').AsInteger;

  ACustNo:=0;
  if edtCust.Enabled then
  begin
    ADataSet:=qryOrd150;
    case cbObjTyp.ItemIndex of
      1:ADataSet:=qryOrd150;
      2:ADataSet:=qryHrm150;
      3:ADataSet:=qryHrm100;
    end;
    if not ADataSet.Locate('FCode',edtCust.Text,[]) then
    begin
      ShowMsg('UMS10000610');  //输入的对象编号无效
      edtCust.SetFocus;
      Abort;
    end;
    ACustNo:=qryOrd150.FieldByName('FNo').AsInteger;
  end;

  qryInv550.Locate('I550_003',cbType.Text,[]);
  ATypeNo:=qryInv550.FieldByName('I550_001').AsInteger;
  //影响类型(0=期初数量,1=入库数量,2=出库数量,3=调整数量,4=库存转仓)
  AInOut:=qryInv550.FieldByName('I550_004').AsInteger;
  //相关单据(0=手工输入,1=采购定单,2=销售定单,3=车间定单,4=出入仓单)
  AOrder:=qryInv550.FieldByName('I550_005').AsInteger;

  case AOrder of
    0:if AInOut=2 then AType:='INV501' else AType:='INV150';  //0=手工输入
    1:AType:='PUR510';      //1=采购定单
    2:AType:='ORD510';      //2=销售定单
    3:AType:='SFC500';      //3=车间定单
    4:AType:='INV500';      //4=出入仓单
  end;

  HwSelDataAForm:=THwSelDataAForm.Create(Application);
  HwSelDataAForm.OpenData(AType,AWhsNo,ACustNo,ATypeNo);
  if HwSelDataAForm.ShowModal=1 then
  begin
    ABusy:=True;
    adsInv500B.Last;
    with HwSelDataAForm do
    begin
      adsInv150.DisableControls;
      adsInv150.First;
      while adsInv150.Locate('FSel',-1,[]) do
      begin
        adsInv500B.Append;
        adsInv500B.FieldByName('FItemNo').Value:=adsInv150.FieldByName('FItemNo').AsInteger;
        adsInv500B.FieldByName('FItemID').Value:=adsInv150.FieldByName('FItemID').AsString;
        adsInv500B.FieldByName('FItemName').Value:=adsInv150.FieldByName('FItemName').AsString;
        adsInv500B.FieldByName('FItemSpec').Value:=adsInv150.FieldByName('FItemSpec').AsString;
        adsInv500B.FieldByName('FUnitNo').Value:=adsInv150.FieldByName('FUnitNo').AsInteger;
        adsInv500B.FieldByName('FUnitID').Value:=adsInv150.FieldByName('FUnitID').AsString;
        adsInv500B.FieldByName('FUnitName').Value:=adsInv150.FieldByName('FUnitName').AsString;
        if adsInv150.FindField('FUnitRate')<>nil then
          adsInv500B.FieldByName('FUnitRate').Value:=adsInv150.FieldByName('FUnitRate').AsString;
        if adsInv150.FindField('FLocID')<>nil then
        begin
          adsInv500B.FieldByName('FLocNo').Value:=adsInv150.FieldByName('FLocNo').AsInteger;
          adsInv500B.FieldByName('FLocID').Value:=adsInv150.FieldByName('FLocID').AsString;
          adsInv500B.FieldByName('FLocName').Value:=adsInv150.FieldByName('FLocName').AsString;
        end;

        adsInv500B.FieldByName('FQty').Value:=1;
        adsInv500B.FieldByName('FOrdQty').Value:=0;
        if AType<>'INV150' then
        begin
          adsInv500B.FieldByName('FPrice').Value:=adsInv150.FieldByName('FPrice').AsFloat;
          adsInv500B.FieldByName('FAmount').Value:=adsInv150.FieldByName('FPrice').AsFloat;
        end;
        if AOrder<>0 then  //0=手工输入
        begin
          AQty:=0;
          //采购定单、销售定单、借出借入退货时,应收发数量=已收发数量
          case AOrder of
            0:AQty:=0;  //0=手工输入
            1:  //1=采购定单
              begin
                case AInOut of
                  1:AQty:=adsInv150.FieldByName('FBanlance').AsFloat;
                  2:AQty:=adsInv150.FieldByName('FFinish').AsFloat;
                end;
              end;
            2:  //2=销售定单
              begin
                case AInOut of
                  1:AQty:=adsInv150.FieldByName('FFinish').AsFloat;
                  2:AQty:=adsInv150.FieldByName('FBanlance').AsFloat;
                end;
              end;
            3:  //3=车间定单
              begin
                case AInOut of
                  1:AQty:=adsInv150.FieldByName('FBanlance').AsFloat;
                  2:AQty:=adsInv150.FieldByName('FFinish').AsFloat;
                end;
              end;
            4:  //4=出入仓单
              begin
                case AInOut of
                  1:AQty:=adsInv150.FieldByName('FBanlance').AsFloat;
                  2:AQty:=adsInv150.FieldByName('FFinish').AsFloat;
                end;
              end;
          end;
          adsInv500B.FieldByName('FOrdQty').Value:=AQty;
          adsInv500B.FieldByName('FFromOrder').Value:=adsInv150.FieldByName('FCode').AsString;          //来源单号
          adsInv500B.FieldByName('FFromLine').Value:=adsInv150.FieldByName('FNo').AsInteger;            //来源行号
        end;
        adsInv500B.Post;

        adsInv150.Edit;
        adsInv150.FieldByName('FSel').Value:=0;
        adsInv150.Post;
      end;
      adsInv150.EnableControls;
    end;
    ABusy:=False;
  end;
end;

procedure TInv500_02Form.edtLocCustomDlg(Sender: TObject);
begin
  inherited;
//库位编号
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryInv110,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    if qryInv110.IsEmpty then Exit;
    if not (adsInv500B.State in [dsInsert,dsEdit]) then
      if adsInv500B.IsEmpty then adsInv500B.Append else adsInv500B.Edit;
    adsInv500B.FieldByName('FLocNo').Value:=qryInv110.FieldByName('I110_001').AsInteger;
    adsInv500B.FieldByName('FLocID').Value:=qryInv110.FieldByName('I110_003').AsString;
    adsInv500B.FieldByName('FLocName').Value:=qryInv110.FieldByName('I110_004').AsString;
  end;
end;

procedure TInv500_02Form.edtUnitCustomDlg(Sender: TObject);
begin
  inherited;
//计量单位
  HwSelDataForm:=THwSelDataForm.Create(Application);
  HwSelDataForm.OpenSelData(qryInv140,nil);
  if HwSelDataForm.ShowModal=1 then
  begin
    if qryInv140.IsEmpty then Exit;
    if not (adsInv500B.State in [dsInsert,dsEdit]) then
      if adsInv500B.IsEmpty then adsInv500B.Append else adsInv500B.Edit;
    adsInv500B.FieldByName('FUnitNo').Value:=qryInv140.FieldByName('I140_001').AsInteger;
    adsInv500B.FieldByName('FUnitID').Value:=qryInv140.FieldByName('I140_002').AsString;
    adsInv500B.FieldByName('FUnitName').Value:=qryInv140.FieldByName('I140_003').AsString;
  end;
end;

procedure TInv500_02Form.ADOQuery1I500A_016GetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  inherited;
  if ADOQuery1.IsEmpty then Exit;
  if Sender.AsBoolean then Text:=APost[1] else Text:=APost[0];
end;

procedure TInv500_02Form.adsInv500BNewRecord(DataSet: TDataSet);
begin
  inherited;
  ALastNo:=ALastNo+1;
  adsInv500BFNo.Value:=ALastNo;
  adsInv500BFUnitRate.Value:=1;
  adsInv500BFQty.Value:=1;
  adsInv500BFPrice.Value:=0;
  adsInv500BFAmount.Value:=0;
end;

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

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

procedure TInv500_02Form.adsInv500BBeforePost(DataSet: TDataSet);
begin
  inherited;
//数据有效性检验
  CheckItem;
  CheckUnit;
  CheckLoc;
  CheckQty;
end;

procedure TInv500_02Form.wwDBGrid1ColExit(Sender: TObject);
begin
  inherited;
//数据有效性检验
  if wwDBGrid1.GetActiveField.FieldName='FItemID' then
  begin
    CheckItem;
  end else
  if wwDBGrid1.GetActiveField.FieldName='FUnitID' then
  begin
    CheckUnit;
  end else
  if wwDBGrid1.GetActiveField.FieldName='FLocID' then
  begin
    CheckLoc;
  end else
  if wwDBGrid1.GetActiveField.FieldName='FQty' then
  begin
    CheckQty;
  end;
end;

procedure TInv500_02Form.CheckItem;
begin
  if not ActSave.Enabled then Exit;
  if not (adsInv500B.State in [dsInsert,dsEdit]) then adsInv500B.Edit;
  if qryInv150.Locate('I150_002',adsInv500BFItemID.Value,[]) then
  begin
    adsInv500BFItemNo.AsInteger:=qryInv150.FieldByName('I150_001').AsInteger;
    adsInv500BFItemID.AsString:=qryInv150.FieldByName('I150_002').AsString;
    adsInv500BFItemName.AsString:=qryInv150.FieldByName('I150_003').AsString;
    adsInv500BFItemSpec.AsString:=qryInv150.FieldByName('I150_004').AsString;
    adsInv500BFUnitNo.AsInteger:=qryInv150.FieldByName('I140_001').AsInteger;
    adsInv500BFUnitID.AsString:=qryInv150.FieldByName('I140_002').AsString;
    adsInv500BFUnitName.AsString:=qryInv150.FieldByName('I140_003').AsString;
  end else
  begin
    ShowMsg('UMS10000267');  //输入的产品编号无效
    wwDBGrid1.SetActiveField('FItemID');
    Abort;
  end;
end;

procedure TInv500_02Form.CheckUnit;
begin
  if not ActSave.Enabled then Exit;
  if not qryInv150.Locate('I150_002',adsInv500BFItemID.Value,[]) then
  begin
    ShowMsg('UMS10000422');  //必须先输入正确的产品编号
    wwDBGrid1.SetActiveField('FItemID');
    Abort;
  end;
  if not (adsInv500B.State in [dsInsert,dsEdit]) then adsInv500B.Edit;
  if qryInv140.Locate('I140_002',adsInv500BFUnitID.AsString,[]) then
  begin
    adsInv500BFUnitNo.AsInteger:=qryInv140.FieldByName('I140_001').AsInteger;
    adsInv500BFUnitID.AsString:=qryInv140.FieldByName('I140_002').AsString;
    adsInv500BFUnitName.AsString:=qryInv140.FieldByName('I140_003').AsString;
  end else
  begin
    ShowMsg('UMS10000411');  //输入的计量单位无效
    wwDBGrid1.SetActiveField('FUnitID');
    Abort;
  end;
end;

procedure TInv500_02Form.CheckLoc;
begin
  if not ActSave.Enabled then Exit;
  if ABusy then Exit;
  if qryInv110.IsEmpty then
  begin
    if not (adsInv500B.State in [dsInsert,dsEdit]) then adsInv500B.Edit;
    adsInv500BFLocNo.AsString:='';
    adsInv500BFLocID.AsString:='';
    adsInv500BFLocName.AsString:='';
    Exit;
  end;
  if not (adsInv500B.State in [dsInsert,dsEdit]) then adsInv500B.Edit;
  if qryInv110.Locate('I110_003',adsInv500BFLocID.AsString,[]) then
  begin
    adsInv500BFLocNo.AsInteger:=qryInv110.FieldByName('I110_001').AsInteger;
    adsInv500BFLocID.AsString:=qryInv110.FieldByName('I110_003').AsString;
    adsInv500BFLocName.AsString:=qryInv110.FieldByName('I110_004').AsString;
  end else
  begin
    ShowMsg('UMS10000625');  //输入的库位编号无效
    wwDBGrid1.SetActiveField('FLocID');
    Abort;
  end;
end;

procedure TInv500_02Form.CheckQty;
begin
  if not ActSave.Enabled then Exit;
  if adsInv500B.FieldByName('FOrdQty').AsFloat=0 then Exit;
  if adsInv500B.FieldByName('FOrdQty').AsFloat<adsInv500B.FieldByName('FQty').AsFloat then
  begin
    ShowMsg('UMS10000626');  //输入的进出数量不能大于应收发量
    wwDBGrid1.SetActiveField('FQty');
    Abort;
  end;
end;

procedure TInv500_02Form.ActPrintExecute(Sender: TObject);
begin
  SYSDM.frDBDataSet2.DataSet:=adsInv500B;
  inherited;

end;

end.

⌨️ 快捷键说明

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