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

📄 pm_enter_purchaseapply.pas

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

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Outer, Menus, ExtPrintReport, Db, ActnList, AdODB, Grids, DBGridEh,
  StdCtrls, ExtCtrls, ComCtrls, ToolWin, jpeg, DBCtrls, Buttons;

Type
  TFrm_Pm_Enter_PurchaseApply = Class(TFrm_Base_Outer)
    AdoQry_MainItemCode: TStringField;
    AdoQry_MainItemName: TStringField;
    AdoQry_MainSSQty: TFloatField;
    AdoQry_MaInPlanQty: TFloatField;
    AdoQry_MainSSReleaseDate: TDateTimeField;
    AdoQry_MaInPlanReleaseDate: TDateTimeField;
    AdoQry_MainIsMultiVendor: TIntegerField;
    AdoQry_MainISRefill: TIntegerField;
    AdoQry_MainIScreatePo: TIntegerField;
    AdoQry_MainRemArk: TStringField;
    AdoQry_MainTmpField: TIntegerField;
    AdoQry_MainCreateEmployeeCode: TStringField;
    AdoQry_MainEdItEmployeeCode: TStringField;
    AdoQry_MainCreateDate: TDateTimeField;
    AdoQry_MainCreateEmployeeName: TStringField;
    AdoQry_MainEdItEmployeeName: TStringField;
    AdoQry_MainEditDate: TDateTimeField;
    AdoQry_MaInPlanDueDate: TDateTimeField;
    Lbl_Status: TLabel;
    AdoQry_MaInvendorCode: TStringField;
    AdoQry_MaInvendorName: TStringField;
    AdoQry_MainIsAssign: TIntegerField;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Lbl_PurchaseNo: TLabel;
    AdoQry_MainPmCode: TIntegerField;
    AdoQry_MainIsActive: TIntegerField;
    AdoQry_MainToDate: TStringField;
    procedure FormDestroy(Sender: TObject);
    procedure Act_NewExecute(Sender: TObject);
    procedure Act_DeleteExecute(Sender: TObject);
    procedure AdoQry_MainAfterPost(DataSet: TDataSet);
    procedure AdoQry_MaInPlanReleaseDateChange(Sender: TField);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGridEhGetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
    procedure DBGridEhTitleClick(Column: TColumnEh);
    procedure AdoQry_MainBeforeEdit(DataSet: TDataSet);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    Flag,EditFlag:boolean;
    RunDate:String;
  public
    { Public declarations }
    procedure initform(AdOConnection:TAdOConnection;ReadOnly:boolean);
    function  SetDeleteSql:String;Override;
  end;

var
  Frm_Pm_Enter_PurchaseApply: TFrm_Pm_Enter_PurchaseApply;

implementation
uses Pm_Enter_PurchaseApply_D,Pm_Enter_PurchaseApply_C,Sys_Global;

{$R *.DFM}
procedure TFrm_Pm_Enter_PurchaseApply.initform(AdOConnection:TAdOConnection;ReadOnly:boolean);
var
  PurchaseNo:string;
begin
  inherited;
  Frm_Pm_Enter_PurchaseApply_C:=TFrm_Pm_Enter_PurchaseApply_C.Create(Application);
  Frm_Pm_Enter_PurchaseApply_C.AdoQry_Tmp.Connection:=DbConnect;
  Flag:=False;
  EditFlag:=False;
  AdoQry_Tmp.Close;
  AdoQry_Tmp.SQL.Text:='select MrpParamValueC as RunDate'+
              ' From MrpParam '+
              ' Where MrpParamCode=''RunMrpDate''';
  AdoQry_Tmp.Open;
  if not AdoQry_Tmp.isempty then
    RunDate:=AdoQry_Tmp.fieldbyname('RunDate').asstring
  else
    RunDate:='Null';
  ExecuteSql(AdoQry_Tmp,' Select MrpParamValueC    '
                    +'  From MrpParam         '
                   +'   Where MrpParamCode=''RunMrpDate'' ',0      );
  Label3.Caption := AdoQry_Tmp.fieldbyname('MrpParamValueC').AsString;
  ExecuteSql(AdoQry_Tmp,'update PurchaseApply set TmpField=0 ',1);
  selectfromsql:='select PurChaseApply.*,Item.ItemName,Employee.EmployeeName as CreateEmployeeName,'+
                 'Emp.EmployeeName as EdItEmployeeName,Vendor.VendorName,Item.PmCode'+
                 ' from PurChaseApply left join Item on Item.ItemCode=PurChaseApply.ItemCode'+
                 ' left join Employee on Employee.EmployeeCode=PurChaseApply.CreateEmployeeCode'+
                 ' left join Employee Emp on Emp.EmployeeCode=PurChaseApply.EdItEmployeeCode'+
                 ' left join Vendor on Vendor.VendorCode=PurChaseApply.VendorCode';
  //当前排序字段
  if not ReadOnly then
    ConditionUserDefine:=' ToDate='''+RunDate+''''
  else
  begin
    Condition:=' ToDate='''+RunDate+'''';
    DBGridEh.Columns.Items[4].ReadOnly:=True;
    DBGridEh.Columns.Items[6].ReadOnly:=True;
    DBGridEh.Columns.Items[0].Visible:=False;
  end;
  OrderByFields:='ItemCode,SSReleaseDate';
  lbl_Order.Caption:='物料代码/系统建议约定交货日';
  GetData;
  if not AdoQry_Main.isempty then
    Lbl_PurchaseNo.Caption:=Trim(Copy(FormatDateTime('yyyy.mm.dd',AdoQry_Main.fieldbyname('Todate').asdatetime),1,4))
                            +Trim(Copy(FormatDateTime('yyyy.mm.dd',AdoQry_Main.fieldbyname('Todate').asdatetime),6,2))
                            +Trim(Copy(FormatDateTime('yyyy.mm.dd',AdoQry_Main.fieldbyname('Todate').asdatetime),9,2));
  Frm_Sys_Detail:=TFrm_Pm_Enter_PurchaseApply_D.Create(Application);
end;

procedure TFrm_Pm_Enter_PurchaseApply.FormDestroy(Sender: TObject);
begin
  inherited;
  if Frm_Pm_Enter_PurchaseApply<>nil then
    Frm_Pm_Enter_PurchaseApply:=nil;
  if Frm_Pm_Enter_PurchaseApply_C<>nil then
    Frm_Pm_Enter_PurchaseApply_C:=nil;
end;

procedure TFrm_Pm_Enter_PurchaseApply.Act_NewExecute(Sender: TObject);
var
  CResult:integer;
  ToDate,ItemCode,SSReleaseDate,DispStr,Statusstr:string;
begin
  CResult:=Frm_Pm_Enter_PurchaseApply_C.ShowModal;
  if CResult=MrOk then
  with Frm_Pm_Enter_PurchaseApply_C.AdoQry_Tmp do
  begin
    AdoQry_Main.DisableControls;
    First;
    while not eof do
    begin
      Statusstr:='正在处理物料"'+fieldbyname('ItemCode').asstring+'"约定日为"'+fieldbyname('SSReleaseDate').asstring+'"的数据!';
      Lbl_Status.Caption:=Statusstr;
      Lbl_Status.Refresh;
      ToDate:=RunDate;
      ItemCode:=Trim(fieldbyname('ItemCode').asstring);
      SSReleaseDate:=Trim(datetostr(fieldbyname('SSReleaseDate').asdatetime));
        {判断当天是否产生过同样的采购申请单}
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:='select ItemCode from PurchaseApply where '+
                           ' ToDate='''+ToDate+''''+
                           ' and ItemCode='''+ItemCode+''''+
                           ' and convert(varchAr,SSReleaseDate,102)='''+SSReleaseDate+'''';
      AdoQry_Tmp.Prepared;
      AdoQry_Tmp.Open;
      if AdoQry_Tmp.IsEmpty then
      begin
        AdoQry_Tmp.Close;
        AdoQry_Tmp.SQL.Text:='insert PurchaseApply('+
                             'ToDate,'+
                             'ItemCode,'+
                             'SSQty,'+
                             'PlanQty,'+
                             'SSReleaseDate,'+
                             'PlanDueDate,'+
                             'PlanReleaseDate,'+
                             'IsMultiVendor,'+
                             'ISRefill,'+
                             'IScreatePo,'+
                             'RemArk,'+
                             'TmpField,'+
                             'CreateEmployeeCode,'+
                             'CreateDate,'+
                             'EdItEmployeeCode,'+
                             'EditDate,'+
                             'VendorCode,'+
                             'IsActive)'+
                             'Values (';
        if RunDate<>'Null' then
          AdoQry_Tmp.SQL.Text:=AdoQry_Tmp.SQL.Text+''''+RunDate+''','
        else
          AdoQry_Tmp.SQL.Text:=AdoQry_Tmp.SQL.Text+'Null,';
        AdoQry_Tmp.SQL.Text:=AdoQry_Tmp.SQL.Text+
                             ''''+fieldbyname('ItemCode').asstring+''','+
                             ''''+fieldbyname('SSQty').asstring+''','+
                             ''''+fieldbyname('PlanQty').asstring+''','+
                             ''''+fieldbyname('SSReleaseDate').asstring+''','+
                             ''''+SlCalendar(DBconnect,fieldbyname('PlanReleaseDate').asstring,fieldbyname('LTDay').asinteger)+''','+
                             ''''+fieldbyname('PlanReleaseDate').asstring+''','+
                             fieldbyname('IsMultiVendor').asstring+','+
                             fieldbyname('ISRefill').asstring+','+
                             fieldbyname('IScreatePo').asstring+','+
                             'Null,'+
                             ''''+fieldbyname('TmpField').asstring+''','+
                             ''''+UserCode+''','+
                             ''''+fieldbyname('Createdate').asstring+''','+
                             'Null,'+
                             'Null,'+
                             ''''+fieldbyname('VendorCode').asstring+''','+
                             '1)';
        AdoQry_Tmp.ExecSQL;
      end
      else
      begin
        //DispStr:='今天已申请物料代码为'+fieldbyname('ItemCode').asstring+#13+'系统建议约定交货日为'+fieldbyname('SSReleaseDate').asstring+'的申请单!';
        //DispInfo(DispStr,3);
      end;
      next;
    end;
    AdoQry_Main.Close;
    AdoQry_Main.Open;
    Lbl_Status.Caption:='';
    Lbl_Status.Refresh;
    AdoQry_Main.EnableControls;
  end;
  //inherited;

end;

function  TFrm_Pm_Enter_PurchaseApply.SetDeleteSql:String;
begin
  Result:='Delete PurChaseApply '
          +' Where ToDate='''+Trim(AdoQry_Main.fieldbyname('ToDate').AsString)+''''+
          ' and ItemCode='''+AdoQry_Main.fieldbyname('ItemCode').Asstring+''''+
          ' and Convert(varchAr,SSReleaseDate,102)='''+Trim(Datetostr(AdoQry_Main.fieldbyname('SSReleaseDate').AsDateTime))+'''';
end;

procedure TFrm_Pm_Enter_PurchaseApply.Act_DeleteExecute(Sender: TObject);
var SqlText : string;
    BookMArk : String;
begin
  If AdoQry_Main.State in [dsedit] then AdoQry_Main.Post;
  BookMArk := AdoQry_Main.BookmArk;
  with AdoQry_Main do
  begin
    First;
    while not eof do
    begin
      if fieldbyname('TmpField').asinteger=1 then
      begin
        SqlText := 'delete from PurchaseApply '
              +' where ToDate='''+Trim(AdoQry_Main.fieldbyname('ToDate').AsString)+''''+
              ' and ItemCode='''+AdoQry_Main.fieldbyname('ItemCode').Asstring+''''+
              ' and Convert(varchAr,SSReleaseDate,102)='''+Trim(Datetostr(AdoQry_Main.fieldbyname('SSReleaseDate').AsDateTime))+'''';
        ExecuteSql(AdoQry_Tmp,SqlText,1);
      end;
      next;
    end;
  end;
  AdoQry_Main.ReQuery;
  try
    if AdoQry_Main.RecordCount>0 then
    AdoQry_Main.BookmArk := BookMArk;
  Except
  end;
  //AdoQry_Main.Delete;
end;

procedure TFrm_Pm_Enter_PurchaseApply.AdoQry_MainAfterPost(
  DataSet: TDataSet);
var SQlText : String;
    PreDate : Integer;
    PlanDueDate :String;
begin
  inherited;
  ExecuteSql(AdoQry_Tmp,'select PreDate=PrepareLT+RunLT+QcLT from Item where Item.ItemCode='''+
                 AdoQry_Main.fieldbyname('ItemCode').asstring+'''',0);
  PreDate:=AdoQry_Tmp.fieldbyname('PreDate').asinteger;
  PlanDueDate:=SlCalendar(Dbconnect,AdoQry_Main.fieldbyname('PlanReleaseDate').AsString,PreDate);

  SqlText:='update PurchaseApply'+
            ' set PlanQty='+AdoQry_Main.fieldbyname('PlanQty').AsString+','+
            'PlanReleaseDate='''+AdoQry_Main.fieldbyname('PlanReleaseDate').AsString+''','+
            'PlanDueDate='''+PlanDueDate+''','+
            'EdItEmployeeCode='''+UserCode+''','+
            'IsActive='+AdoQry_Main.fieldbyname('IsActive').asstring+','+
            ' TmpField='+AdoQry_Main.fieldbyname('TmpField').AsString+','+
            'EditDate='''+datetostr(now)+''''+
            ' where Convert(varchAr,ToDate,102)='''+Trim(DateTostr(AdoQry_Main.fieldbyname('ToDate').asDateTime))+''''+
            ' and ItemCode='''+AdoQry_Main.fieldbyname('ItemCode').asstring+''''+
            ' and Convert(varchAr,SSReleaseDate,102)='''+Trim(DateTostr(AdoQry_Main.fieldbyname('SSReleaseDate').asDateTime))+'''';
  ExecuteSql(AdoQry_Tmp,SqlText,1);
end;

procedure TFrm_Pm_Enter_PurchaseApply.AdoQry_MaInPlanReleaseDateChange(
  Sender: TField);
var SQlText : String;
    PreDate : Integer;
    PlanDueDate :String;
begin
  inherited;
  ExecuteSql(AdoQry_Tmp,'select PreDate=PrepareLT+RunLT+QcLT from Item where Item.ItemCode='''+
                 AdoQry_Main.fieldbyname('ItemCode').asstring+'''',0);
  PreDate:=AdoQry_Tmp.fieldbyname('PreDate').asinteger;
  PlanDueDate:=SlCalendar(dbconnect,AdoQry_Main.fieldbyname('PlanReleaseDate').AsString,PreDate);
  AdoQry_Main.fieldbyname('PlandueDate').AsString := PlanDueDate;
end;

procedure TFrm_Pm_Enter_PurchaseApply.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if AdoQry_Main.State in [dsinsert,dsEdit] then
    AdoQry_Main.Post;
  with AdoQry_Tmp do
  begin
    Close;
    sql.Text:='update PurchaseApply set TmpField=0';
    ExecSQL;
  end;
  inherited;
end;

procedure TFrm_Pm_Enter_PurchaseApply.DBGridEhGetCellParams(
  Sender: TObject; Column: TColumnEh; AFont: TFont; var Background: TColor;
  State: TGridDrawState);
begin
  inherited;
  if AdoQry_Main.fieldbyname('IsActive').AsString='0' Then
    AFont.Color:=ClRed;
end;

procedure TFrm_Pm_Enter_PurchaseApply.DBGridEhTitleClick(
  Column: TColumnEh);
var
  BookMArk:String;
begin
  inherited;
  EditFlag:=True;
  If Trim(Column.Title.Caption)<>'标记' Then
    Abort;
  If AdoQry_Main.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Main.BookmArk;
  AdoQry_Main.DisableControls;
  If Not Flag Then
  begin
    AdoQry_Main.First;
    While Not AdoQry_Main.Eof Do
    begin
      AdoQry_Main.Edit;
      if (AdoQry_Main.fieldbyname('IScreatePo').AsInteger<>1)and(AdoQry_Main.fieldbyname('IsAssign').AsInteger<>1) then
        AdoQry_Main.fieldbyname('TmpField').AsInteger:=1;
    //  AdoQry_Main.Post;
      AdoQry_Main.Next;
    end;
  end
  Else
  begin
    AdoQry_Main.First;
    While Not AdoQry_Main.Eof Do
    begin
      AdoQry_Main.Edit;
      AdoQry_Main.fieldbyname('TmpField').AsInteger:=0;
      AdoQry_Main.Next;
    end;
  end;
  try
    AdoQry_Main.BookmArk:=BookMArk;
  except
  end;
  AdoQry_Main.EnableControls;
  Flag:=Not Flag;
  EditFlag:=False;
end;

procedure TFrm_Pm_Enter_PurchaseApply.AdoQry_MainBeforeEdit(
  DataSet: TDataSet);
begin
  inherited;
  if Not EditFlag then
  begin
    If AdoQry_Main.fieldbyname('IScreatePo').AsInteger=1 then
    begin
      DispInfo('已生成采购订单,不可修改!',3);
      Abort;
    end;
    If AdoQry_Main.fieldbyname('IsAssign').AsInteger=1 then
    begin
      DispInfo('已分配供应商,不可修改!',3);
      Abort;
    end;
  end;
end;

procedure TFrm_Pm_Enter_PurchaseApply.FormShow(Sender: TObject);
begin
  inherited;
  Pnl_Title.Caption:='采购请购单';
end;

end.

⌨️ 快捷键说明

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