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

📄 mrp_enter_editpassmo.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit Mrp_Enter_EditPassMo;

Interface

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

Type
  TFrm_Mrp_Enter_EditPassMo = Class(TFrm_Base_Check)
    AdoQry_HeadMONO: TStringField;
    AdoQry_HeadMoLineNO: TIntegerField;
    AdoQry_HeadItemCode: TStringField;
    AdoQry_HeadMOQTY: TFloatField;
    AdoQry_HeadMoLineDATE: TDateTimeField;
    AdoQry_HeadMoNoFinishQTY: TFloatField;
    AdoQry_HeadMoLineSTATUS: TIntegerField;
    AdoQry_HeadMOStArtWorkDate: TDateTimeField;
    AdoQry_HeadDeptCode: TStringField;
    AdoQry_HeadDeptName: TStringField;
    AdoQry_HeadItemName: TStringField;
    AdoQry_HeadMODATE: TDateTimeField;
    AdoQry_HeadUomName: TStringField;
    AdoQry_HeadItemFlag: TStringField;
    AdoQry_HeadDeptFlag: TStringField;
    Label1: TLabel;
    DBText1: TDBText;
    AdoQry_HeadMoLinecheck: TIntegerField;
    AdoQry_HeadSSQty: TFloatField;
    Label2: TLabel;
    DBText2: TDBText;
    AdoQry_HeadByProduct: TIntegerField;
    AdoQry_HeadMoRealInQty: TFloatField;
    AdoQry_HeadMoInQty: TFloatField;
    AdoQry_HeadCloseRemArk: TStringField;
    AdoQry_HeadBilllineremArk: TStringField;
    AdoQry_HeadParentMoLineNo: TIntegerField;
    AdoQry_HeadMONO_1: TStringField;
    AdoQry_HeadMORemArk: TStringField;
    AdoQry_HeadMOSpecial: TIntegerField;
    AdoQry_HeadSaleType: TStringField;
    AdoQry_HeadStandardFlag: TIntegerField;
    DBText3: TDBText;
    Label3: TLabel;
    AdoQry_HeadPla_EmployeeCode: TStringField;
    AdoQry_Headplaflag: TStringField;
    AdoQry_HeadBackFlush: TIntegerField;
    procedure FormDestroy(Sender: TObject);
    procedure Act_CheckExecute(Sender: TObject);
    procedure Act_CancelCheckExecute(Sender: TObject);
    procedure DBGridEhDblClick(Sender: TObject);
    procedure DBGridEhTitleClick(Column: TColumnEh);
    procedure AdoQry_HeadBeforeInsert(DataSet: TDataSet);
    procedure Act_LookExecute(Sender: TObject);
    procedure Act_DeleteExecute(Sender: TObject);
    procedure AdoQry_HeadBeforeEdit(DataSet: TDataSet);
    procedure FormCreate(Sender: TObject);
    procedure Act_ModifyExecute(Sender: TObject);
  private
    Flag:Boolean;
    procedure PassbyProduct;
    procedure PassMoLine(mono:string;MoLineno:integer);
    procedure PassbyProductMoLine(mono:string;MoLineno:integer);
    procedure savebyProducthistory(mono:string;MoLineno:integer);
    { Private declarations }
  public
    procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
    function getPmCode(ItemCode:string):integer;
    function getQclt(ItemCode:string):string;{ Public declarations }
    function existsnoPassmo(mono:string;MoLineno:integer):boolean;
    function checkCurrentonhandInv(mono:string;MoLineno:integer;var haveInv:integer;var strWhName:string):boolean;
    function getDeptCode(mono:string):string;
    function getDeptName(DeptCode:string):string;
    function createstallmoveBill(mono:string;MoLineno:integer;BatchCtrl:integer):boolean;
    function beenProducted(mono:string;MoLineno:integer):boolean;
    function beendilivered(mono:string;MoLineno:integer):boolean;
    function beenbuildBill(mono:string;MoLineno:integer):boolean;
    function getBatchCtrl(ItemCode:string):integer;
    procedure updateMoLine(mono:string;MoLineno:integer);
    procedure deletemnList(mono:string;MoLineno:integer);
    function getstatus(mono:string;MoLineno:integer):integer;
  end;

var
  Frm_Mrp_Enter_EditPassMo: TFrm_Mrp_Enter_EditPassMo;
  isBackflush:integer; ishaveInv:integer; strWHName:string;
  tmpCode:string;
implementation

uses Sys_Global, Mrp_Enter_MoParent, Mrp_Enter_MoSsParent,Mrp_Enter_PassMo_D;



{$R *.DFM}
procedure TFrm_Mrp_Enter_EditPassMo.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
begin
  Application.ProcessMessages;
  Inherited;
  SelectFromSql:='Select MoLine.*,Mo.*,Dept.DeptName,Item.ItemName,Uom.UomName,'
                +' Item.ItemCode+'''+' '+'''+Item.ItemName As ItemFlag,'
                +' Item.Pla_EmployeeCode+'' ''+Employee.EmployeeName  as plaflag,'
                +' Item.Pla_EmployeeCode, '
                +' Dept.DeptCode+'''+' '+'''+Dept.DeptName As DeptFlag '
                +' From MoLine '
                +' Join Mo On MoLine.MoNo=Mo.MoNo '
                +' Join Item On MoLine.ItemCode=Item.ItemCode '
                +' left join Employee on Item.Pla_EmployeeCode=Employee.EmployeeCode '
                +' left Join Dept On Mo.DeptCode=Dept.DeptCode '
                +' left Join Uom On Item.UomCode=Uom.UomCode ' ;
  condition:='MoLinestatus=5';
 conditionuserDefine:='  (MoLineStatus=6 or MoLinestatus=5)'+' and Mo.MoNo not In( Select MoNo From Mo Where MoSpecial=1)';
 OrderByFields:='MoDate,MoNo';
 GetData;
 Flag:=False;
end;

procedure TFrm_Mrp_Enter_EditPassMo.FormDestroy(Sender: TObject);
begin
  inherited;
  Frm_Mrp_Enter_EditPassMo:=Nil;
end;

procedure TFrm_Mrp_Enter_EditPassMo.Act_CheckExecute(Sender: TObject);
var
  BookMArk:String;
  tmPmono:string;
  tmPMoLineno:integer;
  i:integer;
begin
  inherited;
  i:=0;
  isBackflush:=0;
  tmPmono:='zzzzzzzzzzzzzzzzzzzzzzz';
  tmPMoLineno:=9999999;
  ishaveInv:=0;
  strwhName:='strwhName';
  If AdoQry_Head.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Head.BookmArk;
  If DispInfo('确认批准选定生产订单吗?',2)='y' Then
  begin
    Try
      AdoQry_Head.First;
      While Not AdoQry_Head.Eof Do
       begin
       i:=i+1;
        if (AdoQry_Head.fieldbyname('MoLinecheck').asinteger=0) then
          begin
            if AdoQry_Head.fieldbyname('byProduct').asinteger=1 then
                if  (AdoQry_Head.fieldbyname('mono').asstring=tmPmono)
                  and (AdoQry_Head.fieldbyname('ParentMoLineno').asinteger=tmPMoLineno)
              then
                PassbyProduct;
            AdoQry_Head.next;
            continue;
          end;
        If (AdoQry_Head.fieldbyname('MoLineCheck').AsInteger=1) And (AdoQry_Head.fieldbyname('MoLineStatus').AsInteger=5) Then
        begin
          dbconnect.beginTrans;
          tmPmono:=AdoQry_Head.fieldbyname('mono').asstring;
          tmPMoLineno:=AdoQry_Head.fieldbyname('MoLineno').asinteger;
          if not existsnoPassmo(tmPmono,tmPMoLineno) then  //判断真实数据库中是否存在相应的未批准的订单行
          begin
            If DbConnect.InTransaction Then
              DbConnect.RollBackTrans;
            DispInfo('选定的第'+IntToStr(i)+'条生产订单行状态已被其它用户修改,请刷新!',3);
            Abort;
          end;
          if isBackflush=1 then
           begin
            if not   checkCurrentonhandInv(tmPmono,tmPMoLineno,ishaveInv,strwhName) then
              begin
               if ishaveInv=0 then
                 begin
                    If DbConnect.InTransaction Then
                        DbConnect.RollBackTrans;
                    DispInfo(AdoQry_Head.fieldbyname('ItemCode').asstring+'物料下的子项'+tmpCode+'在含'+getDeptName(getDeptCode(tmPmono))+'车间的拉式领料货位的仓库不够库存,不能批准下达!',1);
                    exit;                                                      
                 end;
              { if strwhName<>'strwhName' then
                 begin
                    If DbConnect.InTransaction Then
                        DbConnect.RollBackTrans;
                    DispInfo(strwhName+'没有'+getDeptName(getDeptCode(tmPmono))+'可用拉式领料货位!',1);
                    exit;
                 end;   }
              end;
           if not  createstallmoveBill(TmPmono,tmPMoLineno,getBatchCtrl(AdoQry_Head.fieldbyname('ItemCode').asstring))then
               begin
                    If DbConnect.InTransaction Then
                        DbConnect.RollBackTrans;
                    DispInfo('建立货位移动单出错!',1);
                    exit;
               end;
           end;

          saveMoLineHistory(dbconnect,AdoQry_Head.fieldbyname('mono').asstring,AdoQry_Head.fieldbyname('MoLineno').asinteger,userCode,3);
          //保存本单历史操作信息
          PassMoLine(tmPmono,tmPMoLineno);
          //批准本单
        If ((AdoQry_Head.fieldbyname('Standardflag').asinteger=1) and (AdoQry_Head.fieldbyname('byProduct').asinteger<>1)) Then
         begin
          deletemnList(AdoQry_Head.fieldbyname('mono').asstring,AdoQry_Head.fieldbyname('MoLineno').asinteger);
          If Not (AutoBuildOrder(DbConnect,AdoQry_Head.fieldbyname('mono').asstring,Trim(AdoQry_Head.fieldbyname('ItemCode').AsString),
           IntToStr(AdoQry_Head.fieldbyname('MoLineNo').AsInteger),'Add','Mo',AdoQry_Head.fieldbyname('MoQty').AsFloat)) Then //自动产生领料单
            Abort;       //自动产生生产领料单
         end;
          savebyProducthistory(tmPmono,tmPMoLineno);
          //保存本单之副产品历史操作信息
          PassbyProductMoLine(tmPmono,tmPMoLineno);
          //批准本单之副产品
          AdoQry_Head.Edit;
          AdoQry_Head.fieldbyname('MoLineStatus').AsInteger:=6;
          AdoQry_Head.fieldbyname('MoLineCheck').AsInteger:=0;
          AdoQry_Head.Post;
          DbConnect.CommitTrans;
        end;
          AdoQry_Head.Next;
       end;
    Except
      If DbConnect.InTransaction Then
        DbConnect.RollBackTrans;
      DispInfo('更改数据时发生错误,数据未更改,请重试!',1);
      AdoQry_Head.BookMArk:=BookmArk;
      Abort;
    end;
  end;
 // AdoQry_Head.ReQuery;
  AdoQry_Head.BookMArk:=BookmArk;
  Flag:=Not Flag;
end;

procedure TFrm_Mrp_Enter_EditPassMo.Act_CancelCheckExecute(Sender: TObject);
var
  SqlText,BookMArk:String;
  I:Integer;
    tmPmono:string;
  tmPMoLineno:integer;
  tmpbeforeedit:Tdatasetnotifyevent;

begin
  inherited;
   If AdoQry_Head.RecordCount=0 Then
    Abort;
  BookMArk:=AdoQry_Head.BookmArk;
  If DispInfo('确认取消批准选定生产订单吗?',2)='y' Then
  begin
    I:=1;
    Try
      AdoQry_Head.First;
      While Not AdoQry_Head.Eof Do
      begin
        DbConnect.beginTrans;
       { If AdoQry_Head.fieldbyname('MoNoFinishQTY').AsFloat<AdoQry_Head.fieldbyname('MOQTY').AsFloat Then
        begin
          AdoQry_Head.Next;
          I:=I+1;
          Continue;

⌨️ 快捷键说明

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