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

📄 pm_enter_closepo.pas

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

Interface

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

Type
  TFrm_Pm_Enter_ClosePo = Class(TFrm_Base_Check)
    AdoQry_HeadPONO: TStringField;
    AdoQry_HeadPOLINENo: TIntegerField;
    AdoQry_HeadItemCode: TStringField;
    AdoQry_HeadPOLineDATE: TDateTimeField;
    AdoQry_HeadPOQTY: TFloatField;
    AdoQry_HeadPONoFinishQty: TFloatField;
    AdoQry_HeadPOREFERENCEDPRICE: TIntegerField;
    AdoQry_HeadPOLINESTATUS: TIntegerField;
    AdoQry_HeadPoNoTaxPrice: TFloatField;
    AdoQry_HeadPONoTaxAmount: TBCDField;
    AdoQry_HeadPoTaxPrice: TFloatField;
    AdoQry_HeadPoTaxAmount: TBCDField;
    AdoQry_HeadPOStArtWorkDate: TDateTimeField;
    AdoQry_HeadVendorCode: TStringField;
    AdoQry_HeadVendorName: TStringField;
    AdoQry_HeadItemName: TStringField;
    AdoQry_HeadPoDate: TDateTimeField;
    AdoQry_HeadEmployeeCode: TStringField;
    AdoQry_HeadEmployeeName: TStringField;
    AdoQry_HeadUomName: TStringField;
    AdoQry_HeadEmployeeFlag: TStringField;
    AdoQry_HeadItemFlag: TStringField;
    AdoQry_HeadVendorFlag: TStringField;
    Label2: TLabel;
    Label3: TLabel;
    DBText2: TDBText;
    DBText3: TDBText;
    AdoQry_HeadPoLineCheck: TIntegerField;
    AdoQry_HeadCloseRemArk: TStringField;
    Label1: TLabel;
    DBText1: TDBText;
    procedure Act_CancelCheckExecute(Sender: TObject);
    procedure Act_CheckExecute(Sender: TObject);
    procedure DBGridEhDblClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBGridEhTitleClick(Column: TColumnEh);
    procedure AdoQry_HeadBeforeInsert(DataSet: TDataSet);
  private
    Flag:Boolean;
    Function SavePoLineHistory:Boolean;//保存历史记录
    procedure CloseRecord; //关闭
    procedure OpenRecord; //打开
    { Private declarations }
  public
    procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
    { Public declarations }
  end;

var
  Frm_Pm_Enter_ClosePo: TFrm_Pm_Enter_ClosePo;

implementation

uses Sys_Global;

{$R *.DFM}
procedure TFrm_Pm_Enter_ClosePo.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
begin
  Application.ProcessMessages;
  Inherited;
  SelectFromSql:=' Select Distinct PoLine.*,Po.*,Vendor.VendorName,Item.ItemName,Employee.EmployeeName,Uom.UomName,'
                +' Employee.EmployeeCode+'''+' '+'''+Employee.EmployeeName As EmployeeFlag,'
                +' Item.ItemCode+'''+' '+'''+Item.ItemName As ItemFlag, '
                +' Vendor.VendorCode+'''+' '+'''+Vendor.VendorName As VendorFlag '
                +' From PoLine '
                +' Join Po On Po.PoNo=PoLine.PoNo '
                +' Join Item On PoLine.ItemCode=Item.ItemCode '
                +' And (PoLine.POLineStatus=6 Or PoLine.PoLineStatus=7)  '
                +' Left Join Vendor On Po.VendorCode=Vendor.VendorCode '
                +' Left Join Buyer On Po.EmployeeCode=Buyer.EmployeeCode '
                +' Left Join Employee On Employee.EmployeeCode=Buyer.EmployeeCode'
                +' Join Uom On Uom.UomCode=Item.UomCode ';
  ConditionUserDefine:=' (Po.PoNo Not In(Select PoNo From Po Where PoSpecial=1))';
  Condition:= ' PoLine.POLineStatus=6';
  OrderByFields:='EmployeeCode,PoNo,';
  GetData;
  Flag:=False;
end;

Function TFrm_Pm_Enter_ClosePo.SavePoLineHistory:Boolean;
var
  SqlText:String;
begin
  Try
    SqlText:='Insert PoLineHistory '
            +' (PoNo,PoLineNo,ItemCode,POLineDate,PoStArtWorkDate,POQty,POTaxPrice,POTaxAmount,PONoTaxPrice,'
            +' PONoTaxAmount,PONoFinishQty,POReferencedPrice,POLineStatus,PolChgEmployeeCode,PolChgTime,PolChgType)'
            +'Values('
            +''''+AdoQry_Head.fieldbyname('PoNo').AsString+''''+','
            +''''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+''''+','
            +''''+AdoQry_Head.fieldbyname('ItemCode').AsString+''''+','
            +''''+DatetimeToStr(AdoQry_Head.fieldbyname('PoLineDate').AsDateTime)+''''+','
            +''''+DatetimeToStr(AdoQry_Head.fieldbyname('PoStArtWorkDate').AsDateTime)+''''+','
            +''''+FloatToStr(AdoQry_Head.fieldbyname('PoQty').AsFloat)+''''+','
            +''''+FloatToStr(AdoQry_Head.fieldbyname('POTaxPrice').AsFloat)+''''+','
            +''''+FloatToStr(AdoQry_Head.fieldbyname('POTaxAmount').AsFloat)+''''+','
            +''''+FloatToStr(AdoQry_Head.fieldbyname('PONoTaxPrice').AsFloat)+''''+','
            +''''+FloatToStr(AdoQry_Head.fieldbyname('PONoTaxAmount').AsFloat)+''''+','
            +''''+FloatToStr(AdoQry_Head.fieldbyname('PONoFinishQty').AsFloat)+''''+','
            +''''+IntToStr(AdoQry_Head.fieldbyname('POReferencedPrice').AsInteger)+''''+','
            +''''+IntToStr(AdoQry_Head.fieldbyname('POLineStatus').AsInteger)+''''+','
            +''''+UserCode+''''+','
            +'GetDate(),'
            +''''+'更改行状态'+''''+')';
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:=SqlText;
    AdoQry_Tmp.ExecSQL;
    Result:=True;
  Except
    Result:=False;
  end;
end;

procedure TFrm_Pm_Enter_ClosePo.OpenRecord;
var
  SqlText,BookMArk:String;
  I:Integer;
begin
  BookMArk:=AdoQry_Head.BookmArk;
  AdoQry_Head.First;
  DbConnect.beginTrans;
  I:=1;
  Try
    While Not AdoQry_Head.Eof Do
      If (AdoQry_Head.fieldbyname('PoLineCheck').AsInteger=1)
        And (AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=7) Then
       begin
         SqlText:=' Select * From PoLine '
              +' Where PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
              +' And PoLineNo='''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+'''';
 //             +' And PoLineStatus=7';
         AdoQry_Tmp.Close;
         AdoQry_Tmp.SQL.Text:=SqlText;
         AdoQry_Tmp.Open;
         If AdoQry_Tmp.Eof Then
         begin
            If DbConnect.InTransaction Then
              DbConnect.RollBackTrans;
             DispInfo('选定的第'+IntToStr(I)+'条采购订单记录已被删除,请刷新!',3);
             Abort;
         end
         else
         begin
           if AdoQry_Tmp.fieldbyname('PoLineStatus').asfloat<>7 then
             begin
               If DbConnect.InTransaction Then
                 DbConnect.RollBackTrans;
                 DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
                 Abort;
             end;
         end;

        { If AdoQry_Tmp.Eof Then
         begin
           If DbConnect.InTransaction Then
             DbConnect.RollBackTrans;
           DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
           Abort;
         end;}
         SavePoLineHistory;
         SqlText:=' Update PoLine '
                 +' set PoLineStatus=6,'
                 +' CloseRemArk='''+AdoQry_Head.fieldbyname('CloseRemArk').AsString+''''
                 +' Where PoLine.PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
                 +' And PoLine.PoLineNo='''+AdoQry_Head.fieldbyname('PoLineNo').AsString+''''
                 +' And PoLine.PoLineStatus=7';
         AdoQry_Tmp.Close;
         AdoQry_Tmp.SQL.Text:=SqlText;
         AdoQry_Tmp.ExecSQL;
         AdoQry_Head.Edit;
         AdoQry_Head.fieldbyname('PoLineStatus').AsInteger:=6;
         AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=0;
         AdoQry_Head.Post;
         I:=I+1;
         AdoQry_Head.Next;
       end
       Else
       begin
         I:=I+1;
         AdoQry_Head.Next;
       end;
    DbConnect.CommitTrans;
  Except
    If DbConnect.InTransaction Then
      DbConnect.RollBackTrans;
      DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
      AdoQry_Head.BookmArk:=BookMArk;
      Abort;
  end;
  AdoQry_Head.BookMArk:=BookmArk;
  Flag:=Not Flag;
end;


procedure TFrm_Pm_Enter_ClosePo.CloseRecord;
var
  SqlText,BookMArk:String;
  I:Integer;
begin
  BookMArk:=AdoQry_Head.BookmArk;
  AdoQry_Head.First;
  DbConnect.beginTrans;
  I:=1;
  Try
    While Not AdoQry_Head.Eof Do
      If (AdoQry_Head.fieldbyname('PoLineCheck').AsInteger=1)
        And (AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=6) Then
       begin
         SqlText:=' Select * From PoLine '
              +' Where PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
              +' And PoLineNo='''+IntToStr(AdoQry_Head.fieldbyname('PoLineNo').AsInteger)+''''
              +' And PoLineStatus=6';
         AdoQry_Tmp.Close;
         AdoQry_Tmp.SQL.Text:=SqlText;
         AdoQry_Tmp.Open;
         If AdoQry_Tmp.Eof Then
         begin
            If DbConnect.InTransaction Then
              DbConnect.RollBackTrans;
           DispInfo('选定的第'+IntToStr(I)+'条采购订单记录行状态已被其它用户修改,请刷新!',3);
           exit;
         end
         else
          begin
            if AdoQry_tmp.fieldbyname('poinqty').asfloat>0 then
              begin
               If DbConnect.InTransaction Then
                 DbConnect.RollBackTrans;
               DispInfo('选定的第'+IntToStr(I)+'条采购订单有待检库存,不能关闭!',3);
               exit;
              end
          end;
         SavePoLineHistory;
         SqlText:=' Update PoLine '
                 +' set PoLineStatus=7,'
                 +' CloseRemArk='''+AdoQry_Head.fieldbyname('CloseRemArk').AsString+''''
                 +' Where PoLine.PoNo='''+AdoQry_Head.fieldbyname('PoNo').AsString+''''
                 +' And PoLine.PoLineNo='''+AdoQry_Head.fieldbyname('PoLineNo').AsString+''''
                 +' And PoLine.PoLineStatus=6';
         AdoQry_Tmp.Close;
         AdoQry_Tmp.SQL.Text:=SqlText;
         AdoQry_Tmp.ExecSQL;
         AdoQry_Head.Edit;
         AdoQry_Head.fieldbyname('PoLineStatus').AsInteger:=7;
         AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=0;
         AdoQry_Head.Post;
         I:=I+1;
         AdoQry_Head.Next;
       end
       Else
       begin
         I:=I+1;
         AdoQry_Head.Next;
       end;
    DbConnect.CommitTrans;
  Except
    If DbConnect.InTransaction Then
      DbConnect.RollBackTrans;
      DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
      AdoQry_Head.BookmArk:=BookMArk;
      Abort;
    end;
  AdoQry_Head.BookMArk:=BookmArk;
  Flag:=Not Flag;
end;

procedure TFrm_Pm_Enter_ClosePo.Act_CancelCheckExecute(Sender: TObject);
begin
  inherited;
  If AdoQry_Head.RecordCount=0 Then
    Exit;
  IF DispInfo('确认真的要打开此记录吗',2)='y' Then
    OpenRecord;
end;

procedure TFrm_Pm_Enter_ClosePo.Act_CheckExecute(Sender: TObject);
begin
  inherited;
  If AdoQry_Head.RecordCount=0 Then
    Exit;
  IF DispInfo('确认关闭选定的采购记录码?',2)='y' Then
    CloseRecord;
end;

procedure TFrm_Pm_Enter_ClosePo.DBGridEhDblClick(Sender: TObject);
begin
  inherited;
 IF AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=6 Then
 begin
   Frm_Pm_Enter_ClosePo.Act_CheckExecute(Act_Check);
   Abort;
 end;
 IF AdoQry_Head.fieldbyname('PoLineStatus').AsInteger=7 Then
 begin
   Frm_Pm_Enter_ClosePo.Act_CancelCheckExecute(Act_CancelCheck);
   Abort;
 end;
end;

procedure TFrm_Pm_Enter_ClosePo.FormDestroy(Sender: TObject);
begin
  inherited;
  Frm_Pm_Enter_ClosePo:=Nil;
end;

procedure TFrm_Pm_Enter_ClosePo.DBGridEhTitleClick(Column: TColumnEh);
var
  BookMArk:String;
begin
  inherited;
  If Trim(Column.Title.Caption)<>'标记' Then
    Abort;
  If AdoQry_Head.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Head.BookmArk;
  If Not Flag Then
  begin
    AdoQry_Head.First;
    While Not AdoQry_Head.Eof Do
    begin
      AdoQry_Head.Edit;
      AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=1;
      AdoQry_Head.Post;
      AdoQry_Head.Next;
    end;
  end
  Else
  begin
    AdoQry_Head.First;
    While Not AdoQry_Head.Eof Do
    begin
      AdoQry_Head.Edit;
      AdoQry_Head.fieldbyname('PoLineCheck').AsInteger:=0;
      AdoQry_Head.Post;
      AdoQry_Head.Next;
    end;
  end;
  AdoQry_Head.BookmArk:=BookMArk;
  Flag:=Not Flag;
end;

procedure TFrm_Pm_Enter_ClosePo.AdoQry_HeadBeforeInsert(DataSet: TDataSet);
begin
  inherited;
  Abort;
end;

end.

⌨️ 快捷键说明

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