📄 mrp_enter_editpassmo.pas
字号:
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 + -