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

📄 mrp_enter_neweditpassmo1.pas

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

Interface

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

Type
  TFrm_Mrp_Enter_NewEditPassMo1 = 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;
    btn_uPMrp: TButton;
    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);
    procedure btn_uPMrpClick(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
    Ordernoandlineno:string;
    nowmono:string;
    nowMoLineno:integer;
    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_NewEditPassMo1: TFrm_Mrp_Enter_NewEditPassMo1;
  isBackflush:integer; ishaveInv:integer; strWHName:string;
  tmpCode:string;
implementation

uses Sys_Global, Mrp_Enter_MoParent,Mrp_Global,
Mrp_Enter_NewMoSsParent,Mrp_Enter_PassMo_D,Mrp_Qry_NewUpRightMrp_D;



{$R *.DFM}
procedure TFrm_Mrp_Enter_NewEditPassMo1.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:=' MoLine.MoNo+convert(varchAr,MoLine.MoLineno) In('+Ordernoandlineno+' )';
 OrderByFields:='ItemCode,MoLinedate';
 GetData;
 AdoQry_Head.Locate('mono;MoLineno',varArrayof([nowmono,nowMoLineno]),[lopArtialkey]);

 Flag:=False;
end;

procedure TFrm_Mrp_Enter_NewEditPassMo1.FormDestroy(Sender: TObject);
begin
  inherited;
  Frm_Mrp_Enter_NewEditPassMo1:=Nil;
end;

procedure TFrm_Mrp_Enter_NewEditPassMo1.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;

          operationmopo(AdoQry_tmp,
                    AdoQry_Head.fieldbyname('ItemCode').asstring,
                    'mo',
                    2,
                    AdoQry_Head.fieldbyname('mono').asstring,
                  //  Trim(edt_Mono.text),
                    AdoQry_Head.fieldbyname('MoLineno').asinteger,
                    6,
                    0,
                    AdoQry_Head.fieldbyname('moqty').asfloat,
                    AdoQry_Head.fieldbyname('MoNoFinishqty').asfloat,
                    AdoQry_Head.fieldbyname('mostArtworkdate').asstring,
                    AdoQry_Head.fieldbyname('MoLinedate').asstring,
                    getPmCode(dbconnect,AdoQry_Head.fieldbyname('ItemCode').asstring),
                    AdoQry_Head.fieldbyname('DeptCode').asstring);

          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_NewEditPassMo1.Act_CancelCheckExecute(Sender: TObject);
var
  SqlText,BookMArk:String;
  I:Integer;

⌨️ 快捷键说明

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