📄 mrp_enter_freemo.pas
字号:
unit Mrp_Enter_FreeMo;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Body, Db, ActnList, AdODB, Grids, DBGridEh, StdCtrls,
ExtCtrls, ComCtrls, ToolWin, Mask, ExtEdit, DBCtrls, ExtPrintReport,
linkedit, jpeg;
Type
TFrm_Mrp_Enter_FreeMo = Class(TFrm_Base_Entry_Body)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edt_MoNo: TEdit;
Medt_Modate: TMaskEdit;
AdoQry_BodyMONO: TStringField;
AdoQry_BodyMoLineNO: TIntegerField;
AdoQry_BodyItemCode: TStringField;
AdoQry_BodyMOQTY: TFloatField;
AdoQry_BodyMoLineDATE: TDateTimeField;
AdoQry_BodyMoNoFinishQTY: TFloatField;
AdoQry_BodyMoLineSTATUS: TIntegerField;
AdoQry_BodyItemName: TStringField;
Label4: TLabel;
Edt_MoRemArk: TEdit;
AdoQry_BodyMOStArtWorkDate: TDateTimeField;
AdoQry_BodyUomName: TStringField;
Lbl_DeptName: TLabel;
Label5: TLabel;
Edt_SysParamValuec: TEdit;
Lbl_SaleType: TLabel;
AdoQry_Temp: TAdoQuery;
Label7: TLabel;
Lbl_ItemFlag: TLabel;
Label9: TLabel;
Label10: TLabel;
DBText1: TDBText;
DBText2: TDBText;
Edt_DeptName: TEdit;
Label11: TLabel;
Cmbx_StandardFlag: TComboBox;
AdoQry_BodyByProduct: TIntegerField;
AdoQry_BodyParentMoLineNo: TIntegerField;
AdoQry_BodyMoRealInQty: TFloatField;
AdoQry_BodyMoInQty: TFloatField;
AdoQry_BodyMoLineCheck: TIntegerField;
AdoQry_BodySSQty: TFloatField;
AdoQry_BodyCloseRemArk: TStringField;
AdoQry_BodyBilllineremArk: TStringField;
AdoQry_BodyBackFlush: TIntegerField;
edt_DeptCode: TLinkEdit;
edt_SysParamCode: TLinkEdit;
Label6: TLabel;
edt_rno: TEdit;
AdoQry_BodyRemArk: TStringField;
procedure FormCreate(Sender: TObject);
procedure Act_SaveExecute(Sender: TObject);
procedure Act_DeleteLineExecute(Sender: TObject);
procedure Edt_SysParamCodeExit(Sender: TObject);
procedure Edt_SysParamCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Act_PreviewExecute(Sender: TObject);
procedure Act_PrintExecute(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Edt_DeptCodeExit(Sender: TObject);
procedure DataSourceDataChange(Sender: TObject; Field: TField);
procedure Act_ExcelExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Act_ModifyExecute(Sender: TObject);
procedure edt_SysParamCodeButtonClick(Sender: TObject);
procedure Act_InsertLineExecute(Sender: TObject);
private
CurrentFormStatus:String;//当前窗体状态
{ Private declarations }
public
procedure SetStatus(CurrentStatus:String;var AnswerStatus,EnableControls:String); Override;
procedure InitControls; Override;
procedure SaveData; Override;
procedure deletebyProduct(MoLineno:integer);
function getstatus(mono:string;MoLineno:integer):integer;
procedure deleteMoLine;
{ Public declarations }
end;
var
Frm_Mrp_Enter_FreeMo: TFrm_Mrp_Enter_FreeMo;
deletedMoLine:string;
implementation
uses Mrp_Enter_Mo_D, Sys_Global, Mrp_Enter_Mo_P;
{$R *.DFM}
function checksymbol(Source:string;disptext:string):boolean; //检查输入中是否有单引号
var
i:integer;
s:string;
begin
s:=Trim(Source);
for i:=1 to length(s) do
if s[i]='''' then
begin
DispInfo(disptext+'中不能使用单引号!',1);
Result:=False;
exit;
end;
Result:=True;
end;
procedure TFrm_Mrp_Enter_FreeMo.InitControls;
var
SqlText:string;
begin
If Status<>'Add' then
begin
CurrentFormStatus:='PArtEdit';
SetFocus_Control:=Edt_DeptCode;
end
Else
begin
CurrentFormStatus:='Add';
SetFocus_Control:=medt_Modate;
if CheckAllTypeOrderNoSet(DbConnect,6) then
begin
Edt_MoNo.Text := GetAllTypeOrderNo(DbConnect,6);
end
else begin
Edt_MoNo.Text := '';
SetFocus_Control := Edt_MoNo;
end;
end;
If Status='Query' Then
begin
Caption:='独立生产订单明细';
Pnl_Title.Caption:='独立生产订单明细';
end;
inherited;
if Status='PArtEdit' then
Act_DeleteLine.Enabled:=True;
Application.ProcessMessages;
With AdoQry_Head do
begin
Edt_DeptCode.Text:=fieldbyname('DeptCode').asstring;
Lbl_DeptName.Caption:=fieldbyname('DeptName').AsString;
Edt_DeptName.Text:=fieldbyname('DeptName').AsString;
if Status<>'Add' then
begin
Act_InsertLine.Enabled := True;
if Status='ReadOnly' then
Act_InsertLine.Enabled := False;
Edt_MoNo.Text:=fieldbyname('MoNo').AsString;
edt_rno.Text:=fieldbyname('referenceno').asstring;
MEdt_Modate.Text:=Formatdatetime('yyyy.mm.dd',fieldbyname('modate').asdatetime);
Edt_SysParamCode.Text:=fieldbyname('SysParamCode').AsString;
Edt_SysParamValuec.Text:=fieldbyname('SysParamValuec').AsString;
Edt_MoReMArk.Text:=fieldbyname('MoRemArk').AsString;
Cmbx_StandardFlag.ItemIndex:=fieldbyname('StandardFlag').AsInteger;
end
Else
begin
Act_InsertLine.Enabled := True;
edt_rno.Text:='';
MEdt_Modate.Text:=Formatdatetime('yyyy.mm.dd',date);
Edt_SysParamCode.Text:=fieldbyname('SysParamCode').AsString;
Edt_SysParamValuec.Text:=fieldbyname('SysParamValuec').AsString;
Cmbx_StandardFlag.ItemIndex:=1;
Edt_MoReMArk.Text:=fieldbyname('MoRemArk').AsString;
end;
end;
AdoQry_Body.Close;
if UpperCase(Status)=UpperCase('Add') then
SqlText:='Select Top 0 MoLine.*,Item.ItemCode,ItemName,Uom.UomName '
+' From MoLine '
+' Join Item On MoLine.ItemCode=Item.ItemCode '
+' Left Join Uom On Item.UomCode=Uom.UomCode '
Else
SqlText:='Select MoLine.*,Item.ItemCode,ItemName,Uom.UomName '
+' From MoLine '
+' Join Item On MoLine.ItemCode=Item.ItemCode '
+' And MoLine.MoNo='+''''+Trim(AdoQry_Head.fieldbyname('Mono').AsString)+''''
+' Left Join Uom On Item.UomCode=Uom.UomCode '
+' Order By MoLine.MoLineNo ';
AdoQry_Body.Close;
AdoQry_Body.SQL.Text:=SqlText;
AdoQry_Body.Open;
Edt_DeptName.Enabled:=False;
Edt_SysParamValuec.Enabled:=False;
end;
procedure TFrm_Mrp_Enter_FreeMo.SetStatus(CurrentStatus: String;
var AnswerStatus, EnableControls: String); //用来叛断哪些控件可用
begin
inherited;
If (Currentstatus='Add') Then
begin
AnswerStatus:='Add';
EnableControls:='Edt_MoNo,edt_DeptCode,Medt_Modate,edt_rno,Edt_SysParamCode,Edt_MoRemArk,Cmbx_StandardFlag,';
end
Else If Pos('Edit',CurrentStatus)>0 Then
begin
AnswerStatus:='PArtEdit';
EnableControls:='edt_DeptCode,Medt_Modate,edt_rno,Edt_SysParamCode,Edt_MoRemArk,'
end;
end;
procedure TFrm_Mrp_Enter_FreeMo.FormCreate(Sender: TObject);
begin
inherited;
ExtendCaption:=False;
Frm_Mrp_Enter_Mo_D:=TFrm_Mrp_Enter_Mo_D.Create(Self);
Frm_Entry_Detail:=Frm_Mrp_Enter_Mo_D;
Cmbx_StandardFlag.clear;
Cmbx_StandardFlag.Items.Add('0 否');
Cmbx_StandardFlag.Items.Add('1 是');
deletedMoLine:=quotedstr('yyyyyyyy');
end;
procedure TFrm_Mrp_Enter_FreeMo.SaveData;
var
SqlText,MoNo:String;
begin
inherited;
If AdoQry_Body.RecordCount=0 Then
begin
DispInfo('没有行数据,不能保存!',1);
Abort;
end;
AdoQry_Body.DisableControls;
AdoQry_Body.First;
While Not AdoQry_Body.Eof Do
begin
If (AdoQry_Body.fieldbyname('MoQty').AsFloat<=0) And (Status='Add') Then
begin
DispInfo('第'+IntToStr(AdoQry_Body.RecNo)+'行数据约定交货量必须大于0,请修改!',1);
AdoQry_Body.EnableControls;
Abort;
end;
AdoQry_Body.Next;
end; //校验数据
DbConnect.beginTrans;
Try
AdoQry_Tmp.Close;
If CurrentFormStatus='Add' Then
begin
// MoNO:='M'+Trim(Copy(FormatDateTime('yyyy.mm.dd',Now),3,2))+Trim(Copy(FormatDateTime('yyyy.mm.dd',Now),6,2));
// Edt_MoNo.Text:=GetNo(DbConnect,MoNo,'Mo');
if CheckAllTypeOrderNoSet(DbConnect,6) then
Edt_MoNo.Text := GetAllTypeOrderNo(DbConnect,6);
Application.ProcessMessages;
SqlText:='Insert Mo '
+' (MoNo,DeptCode,MoDate,referenceno,MoReMArk,MOSpecial,SaleType,StandardFlag)'
+' Values('
+''''+Trim(Edt_MoNo.Text)+''','
+''''+Trim(Edt_DeptCode.Text)+''','
+''''+Trim(MEdt_MoDate.Text)+''','
+quotedstr(Trim(edt_rno.text))+','
+''''+Trim(Edt_MoReMArk.Text)+''','
+'1,'
+''''+Trim(Edt_SysParamCode.Text)+''','
+''''+IntToStr(Cmbx_StandardFlag.ItemIndex)+''')';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL; // Insert Mo Table
savemohistory(dbconnect,Trim(edt_Mono.text),userCode,0);
AdoQry_Body.First;
While Not AdoQry_Body.Eof Do
begin
SqlText:='Insert MoLine '
+' (MoNo,MoLineNo,ItemCode,remArk,MoLineDate,MoStArtWorkDate,MOQty,MoNoFinishQty,MoLineStatus,byProduct,ParentMoLineno,Backflush)'
+'Values('
+''''+Trim(Edt_MoNo.Text)+''','
+''''+IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger)+''','
+''''+AdoQry_Body.fieldbyname('ItemCode').AsString+''','
+quotedstr(AdoQry_Body.fieldbyname('remArk').asstring)+','
+''''+DatetimeToStr(AdoQry_Body.fieldbyname('MoLineDate').AsDateTime)+''','
+''''+DatetimeToStr(AdoQry_Body.fieldbyname('MoStArtWorkDate').AsDateTime)+''','
+''''+FloatToStr(AdoQry_Body.fieldbyname('MoQty').AsFloat)+''','
+''''+FloatToStr(AdoQry_Body.fieldbyname('MoQty').AsFloat)+''','
+''''+IntToStr(AdoQry_Body.fieldbyname('MoLineStatus').AsInteger)+''''+','
+inttostr(AdoQry_Body.fieldbyname('byProduct').asinteger)+','
+inttostr(AdoQry_Body.fieldbyname('ParentMoLineno').asinteger)+','
+inttostr(AdoQry_Body.fieldbyname('Backflush').asinteger)
+')';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
saveMoLineHistory(dbconnect,Trim(edt_Mono.text),AdoQry_Body.fieldbyname('MoLineno').asinteger,userCode,0);
If Cmbx_StandardFlag.ItemIndex=1 Then
if AdoQry_Body.fieldbyname('byProduct').asinteger<>1 then
{ If Not (AutoBuildOrder(DbConnect,Trim(Edt_MoNo.Text),Trim(AdoQry_Body.fieldbyname('ItemCode').AsString),
IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger),'Add','Mo',AdoQry_Body.fieldbyname('MoQty').AsFloat)) Then //自动产生领料单
}
If Not (NewAutoBuildOrder(DbConnect,Trim(Edt_MoNo.Text),
IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger),Trim(AdoQry_Body.fieldbyname('ItemCode').AsString),AdoQry_Body.fieldbyname('MoQty').AsFloat)) Then //自动产生领料单
begin
AdoQry_Body.EnableControls;
Abort;
end;
AdoQry_Body.Next;
end;
end;
If CurrentFormStatus='PArtEdit' Then
begin
savemohistory(dbconnect,AdoQry_Head.fieldbyname('MoNo').AsString,userCode,1);
SqlText:='Update Mo '
+' Set MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''','
+' DeptCode='''+Trim(Edt_DeptCode.Text)+''','
+' MoDate= '''+MEdt_MoDate.Text+''','
+' referenceno='+quotedstr(Trim(edt_rno.text))+','
+' MoReMArk= '''+Trim(Edt_MoRemArk.Text)+''','
+' SaleType= '''+Trim(Edt_SysParamCode.Text)+''''
+' Where MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+'''';
AdoQry_Tmp.Close;
AdoQry_Tmp.SQL.Text:=SqlText;
AdoQry_Tmp.ExecSQL;
AdoQry_Body.First;
While Not AdoQry_Body.Eof Do
begin
if (AdoQry_Body.fieldbyname('MoLinestatus').asinteger=5) or (AdoQry_Body.fieldbyname('MoLinestatus').asinteger=6) then
begin
saveMoLineHistory(dbconnect,Trim(edt_Mono.text),AdoQry_Body.fieldbyname('MoLineno').asinteger,userCode,1);
If AdoQry_Body.fieldbyname('MoLineCheck').AsInteger = 1 then
SqlText:='Insert MoLine '
+' (MoNo,MoLineNo,ItemCode,remArk,MoLineDate,MoStArtWorkDate,MOQty,MoNoFinishQty,MoLineStatus,byProduct,ParentMoLineno,Backflush)'
+'Values('
+''''+Trim(Edt_MoNo.Text)+''','
+''''+IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger)+''','
+''''+AdoQry_Body.fieldbyname('ItemCode').AsString+''','
+quotedstr(AdoQry_Body.fieldbyname('remArk').asstring)+','
+''''+DatetimeToStr(AdoQry_Body.fieldbyname('MoLineDate').AsDateTime)+''','
+''''+DatetimeToStr(AdoQry_Body.fieldbyname('MoStArtWorkDate').AsDateTime)+''','
+''''+FloatToStr(AdoQry_Body.fieldbyname('MoQty').AsFloat)+''','
+''''+FloatToStr(AdoQry_Body.fieldbyname('MoQty').AsFloat)+''','
+''''+IntToStr(AdoQry_Body.fieldbyname('MoLineStatus').AsInteger)+''''+','
+inttostr(AdoQry_Body.fieldbyname('byProduct').asinteger)+','
+inttostr(AdoQry_Body.fieldbyname('ParentMoLineno').asinteger)+','
+inttostr(AdoQry_Body.fieldbyname('Backflush').asinteger)
+')'
else
SqlText:=' UpDate MoLine '
+' Set MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''','
+' Backflush='+inttostr(AdoQry_Body.fieldbyname('Backflush').asinteger)+','
+' MoLineStatus='''+IntToStr(AdoQry_Body.fieldbyname('MoLineStatus').AsInteger)+''''+','
+' MoLineNo='''+IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger)+''','
+' ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+''','
+' remArk='+quotedstr(AdoQry_Body.fieldbyname('remArk').asstring)+','
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -