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

📄 pm_vendoritemassign_d.pas

📁 一个MRPII系统源代码版本
💻 PAS
字号:
unit Pm_VendorItemAssign_D;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Detail, StdCtrls, Db, AdODB, ExtCtrls, ExtEdit, Grids, DBGridEh;

Type
  TFrm_Pm_VendorItemAssign_D = Class(TFrm_Base_Detail)
    Label2: TLabel;
    ExtEdt_ItemCode: TExtEdit;
    lbl_ItemName: TLabel;
    Label3: TLabel;
    AdoQry_Vendor: TAdoQuery;
    DataSource1: TDataSource;
    DBGridEh1: TDBGridEh;
    btn_Del: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btn_okClick(Sender: TObject);
    procedure DBGridEh1ColExit(Sender: TObject);
    procedure DBGridEh1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure AdoQry_VendorBeforePost(DataSet: TDataSet);
    procedure btn_DelClick(Sender: TObject);
    procedure AdoQry_VendorAfterDelete(DataSet: TDataSet);
    procedure AdoQry_VendorAfterEdit(DataSet: TDataSet);
    procedure InOutItemCodeCheck(Sender: TObject);
  private
    LockFlag:Integer;
    ispost:boolean;
    oldValue:string;
    procedure InitControls; Override;
    procedure SaveData; Override;
    function checkdbgrd(fieldNames:string):boolean;
    procedure checkfullAssignrate;
    function getVendorCode:string;
    procedure checkVendorCode;
    procedure showdbgrid;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Frm_Pm_VendorItemAssign_D: TFrm_Pm_VendorItemAssign_D;

implementation

uses Sys_Global, Sys_QuickPick;
{$R *.DFM}

function TFrm_Pm_VendorItemAssign_D.getVendorCode:string;
begin
  Frm_Sys_QuickPick:=TFrm_Sys_QuickPick.Create(Application);
  Frm_Sys_QuickPick.InitFrom(AdoQry_tmp.Connection,'Vendor','VendorCode'+','+
    'VendorName','供应商代码'+','+'供应商名称',AdoQry_Vendor.fieldbyname('VendorCode').asstring,'VendorUsable=1');
  if Frm_Sys_QuickPick.ShowModal=mrOk then
  begin
    Result:=Frm_Sys_QuickPick.quickpickQry.fieldbyname('VendorCode').AsString;
  end
  else
    Result:='';
  Frm_Sys_QuickPick.Release;
end;

procedure TFrm_Pm_VendorItemAssign_D.checkfullAssignrate;
var
  Assignrate:real;
  saveplace:tBookmArk;
begin
  with AdoQry_Vendor do
  begin
    saveplace:=getBookmArk;
    disablecontrols;
    First;
    while not eof do
    begin
      Assignrate:=Assignrate+fieldbyname('Assignrate').asfloat;
      next;
    end;
    enablecontrols;
    gotoBookmArk(saveplace);
    freeBookmArk(saveplace);
  end;
  if Assignrate<>100.0 then
  begin
    DispInfo('总的分配比例必须等于100%!',1);
    abort;
  end;
end;

function TFrm_Pm_VendorItemAssign_D.checkdbgrd(fieldNames:string):boolean;
var
  myindex : integer;
begin
  Result:=True;  //通过有效有检验
  //录入时检验
  if (pos(' VendorCode ',fieldNames)<>0)  then
  begin
    Result:=True;
    with AdoQry_tmp do
    begin
      Close;
      sql.clear;
      sql.Add('select VendorCode,VendorName from Vendor ');
      sql.Add(' where VendorCode='''+AdoQry_Vendor.fieldbyname('VendorCode').asstring+'''');
      open;
      if eof then
      begin
        Result:=False;
        DispInfo('供应商代码不正确',1);
      end
      else
      begin
        AdoQry_Vendor.edit;
        AdoQry_Vendor.fieldbyname('VendorName').asstring:=fieldbyname('VendorName').asstring;
      end;
    end;
  end;
end;

procedure TFrm_Pm_VendorItemAssign_D.Showdbgrid;
begin
  if Extedt_ItemCode.text<>'' then
  with AdoQry_Vendor do
  begin
    Close;
    sql.clear;
    sql.Add('select s.VendorCode,'+
                  ' v.VendorName,'+
                  ' s.Assignrate'+
            ' from VendorItemAssign s '+
            ' left join Vendor v on s.VendorCode=v.VendorCode '+
            '  where s.ItemCode='''+Extedt_ItemCode.text+'''');
    open;
  end;
end;

procedure TFrm_Pm_VendorItemAssign_D.InitControls;
begin
  inherited;
  with AdoQry_Maintain do
  begin
    ExtEdt_ItemCode.Text:=fieldbyname('ItemCode').AsString;
    lbl_ItemName.Caption:=fieldbyname('ItemName').AsString;
  end;

  AdoQry_Vendor.Connection :=AdoQry_tmp.Connection;
  showdbgrid;
end;

procedure TFrm_Pm_VendorItemAssign_D.SaveData;
var
  sqltext:string;
  saveplace:tBookmArk;
begin

  with AdoQry_Vendor do
  begin

    saveplace:=getBookmArk;
    First;
    disablecontrols;
    sqltext:='';

    while not eof do
    begin
      ExecuteSql(AdoQry_Tmp,'select * from PcLine'
                           +' join Pc on PcLIne.PcNo=Pc.PcNo '
                           +'   and Pc.VendorCode='+QuotedStr(fieldbyname('VendorCode').AsString)
                           +' where ItemCode='+QuotedStr(Trim(ExtEdt_ItemCode.Text))
                           ,0);
      If AdoQry_Tmp.RecordCount=0 then 
      begin
        If  DispInfo('在采购价格单中无供应商'+QuotedStr(fieldbyname('VendorCode').AsString
                                                   +' '+fieldbyname('VendorName').AsString)
                     +'物料'+QuotedStr(Extedt_ItemCode.Text+' '+lbl_ItemName.Caption)+'的记录!是否继续保存?',
                 2)<>'y' then 
        begin
          ModalResult := MrNone;
          abort;
        end;
      end;                           
      if  fieldbyname('VendorCode').asstring<>'' then
      begin
        sqltext:=sqltext+
          ' Insert VendorItemAssign '+
          '       (VendorCode,'+
                  'ItemCode,'+
                  'Assignrate) '+
          'ValueS ('''+fieldbyname('VendorCode').asstring+''','+
                  ''''+Extedt_ItemCode.text+''','+
                  fieldbyname('Assignrate').asstring+')';
      end;
      next;
    end;
    gotoBookmArk(saveplace);
    freeBookmArk(saveplace);

    sqltext:=' delete from VendorItemAssign '+
              ' where ItemCode='''+Extedt_ItemCode.text+''''+sqltext;
    enablecontrols;
  end;

  with AdoQry_Tmp do
  begin
    Close;
    SQL.clear;
    sql.Add(sqltext);
    ExecSQL;
    btn_ok.Enabled :=False;
    DispInfo('保存成功!',3);
  end;
  Inherited;
end;

procedure TFrm_Pm_VendorItemAssign_D.FormCreate(Sender: TObject);
begin
  inherited;
  SetFocus_Control:=ExtEdt_ItemCode;
  oldValue:='';
end;

procedure TFrm_Pm_VendorItemAssign_D.btn_okClick(Sender: TObject);
begin
  
  checkVendorCode;
  checkfullAssignrate;
  savedata;
  //inherited;
end;

procedure TFrm_Pm_VendorItemAssign_D.DBGridEh1ColExit(Sender: TObject);
begin
  inherited;
    if (AdoQry_Vendor.state in [dsedit,dsinsert]) and (not checkdbgrd(' '+dbgrideh1.selectedfield.fieldName+' ')) then
       abort;
end;

procedure TFrm_Pm_VendorItemAssign_D.DBGridEh1KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
  if (key=vk_f9) and
     (AdoQry_Vendor.state in [dsedit,dsinsert]) and
     (dbgrideh1.selectedfield.fieldName='VendorCode') then
      AdoQry_Vendor.fieldbyname('VendorCode').asstring:=getVendorCode;
  if (key=vk_Delete) then
     btn_Del.Click;

end;

procedure TFrm_Pm_VendorItemAssign_D.checkVendorCode;
var
   tmp_VendorCode:string;
   a,M:integer;
   SavePlace: TBookmArk;
   B:Array of string;
begin
  if (AdoQry_Vendor.state in [dsinsert,dsedit]) then
     AdoQry_Vendor.post;

  with AdoQry_Vendor do
  begin
    SavePlace := GetBookmArk;
    disablecontrols;
    M:=recordCount;
    setlength(B,M);
    First;
    M:=M-1;
    while not eof do
    begin
      B[M]:=fieldbyname('VendorCode').asstring;
      M:=M-1;
      next;
    end;
    gotoBookmArk(saveplace);
    freeBookmArk(saveplace);
    enablecontrols;
  end;

  with AdoQry_Vendor do
  begin

    tmp_VendorCode:=fieldbyname('VendorCode').asstring;
    SavePlace := GetBookmArk;
    First;
    disablecontrols;
    while not eof do
    begin
      a:=0;
      for M:=0 to recordCount-1 do
      begin
        if fieldbyname('VendorCode').asstring=B[M] then
           a:=a+1;
      end;
      if a>1 then
      begin
        DispInfo(fieldbyname('VendorCode').asstring+'代码重复!',1);
        GotoBookmArk(SavePlace);
        FreeBookmArk(SavePlace);
        enablecontrols;
        abort;
      end;
      next;
    end;
    GotoBookmArk(SavePlace);
    FreeBookmArk(SavePlace);
    enablecontrols;
  end;
end;

procedure TFrm_Pm_VendorItemAssign_D.AdoQry_VendorBeforePost(
  DataSet: TDataSet);
begin
  inherited;
   btn_ok.Enabled :=True;

   if  AdoQry_Vendor.fieldbyname('Assignrate').asstring='' then
       AdoQry_Vendor.fieldbyname('Assignrate').asstring:='0'
   else
   begin
     if  AdoQry_Vendor.fieldbyname('VendorCode').asstring='' then
     begin
       DispInfo('供应商代码不正确',1);
       abort;
     end;
   end;
end;

procedure TFrm_Pm_VendorItemAssign_D.btn_DelClick(Sender: TObject);
begin
  inherited;
  if not AdoQry_Vendor.eof then
  begin
    if DispInfo('确定要删除些供应商比例?',2)='y' then
    begin
      AdoQry_Vendor.delete;
    end;
  end;

end;

procedure TFrm_Pm_VendorItemAssign_D.AdoQry_VendorAfterDelete(
  DataSet: TDataSet);
begin
  inherited;
  btn_ok.Enabled :=True;
end;

procedure TFrm_Pm_VendorItemAssign_D.AdoQry_VendorAfterEdit(
  DataSet: TDataSet);
begin
  inherited;
  btn_ok.Enabled :=True;
end;

procedure TFrm_Pm_VendorItemAssign_D.InOutItemCodeCheck(Sender: TObject);
begin
  inherited;
   if oldValue<>Extedt_ItemCode.text then
      showdbgrid;
   oldValue:=Extedt_ItemCode.text;
end;

end.

⌨️ 快捷键说明

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