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

📄 mrp_enter_newautomo1.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit Mrp_Enter_NewAutoMo1;
//
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_NewAutoMo1 = Class(TFrm_Base_Entry_Body)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edt_MoNo: TEdit;
    Medt_Modate: TMaskEdit;
    Label4: TLabel;
    Edt_MoRemArk: TEdit;
    DBGridEh1: TDBGridEh;
    AdoQry_BodyMONO: TStringField;
    AdoQry_BodyMoLineNO: TIntegerField;
    AdoQry_BodyItemCode: TStringField;
    AdoQry_BodyMOQTY: TFloatField;
    AdoQry_BodyMoLineDATE: TDateTimeField;
    AdoQry_BodyMoNoFinishQTY: TFloatField;
    AdoQry_BodyMoLineSTATUS: TIntegerField;
    AdoQry_BodyMOStArtWorkDate: TDateTimeField;
    AdoQry_BodyItemName: TStringField;
    AdoQry_BodyUomName: TStringField;
    AdoQry_Head1: TAdoQuery;
    Label5: TLabel;
    Edt_SysParamValuec: TEdit;
    Lbl_SaleType: TLabel;
    Lbl_DeptName: TLabel;
    AdoQry_Temp: TAdoQuery;
    Label7: TLabel;
    Lbl_ItemFlag: TLabel;
    Label9: TLabel;
    DBText1: TDBText;
    Label10: TLabel;
    DBText2: TDBText;
    Edt_DeptName: TEdit;
    Label11: TLabel;
    Cmbx_StandardFlag: TComboBox;
    AdoQry_BodySsQty: TFloatField;
    AdoQry_BodyLimItOut: TIntegerField;
    AdoQry_BodyByProduct: TIntegerField;
    AdoQry_BodyParentMoLineNo: TIntegerField;
    AdoQry_BodyBackFlush: TIntegerField;
    AdoQry_BodyMoInQty: TFloatField;
    Edt_DeptCode: TLinkEdit;
    Edt_SysParamCode: TLinkEdit;
    Label6: TLabel;
    edt_rno: TEdit;
    AdoQry_BodyRemArk: TStringField;
    procedure Act_SaveExecute(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DateCheck(Sender: TObject);
    procedure Act_DeleteLineExecute(Sender: TObject);
    procedure Edt_SysParamCodeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edt_SysParamCodeExit(Sender: TObject);
    procedure Act_PreviewExecute(Sender: TObject);
    procedure Act_PrintExecute(Sender: TObject);
    procedure Act_QuitExecute(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edt_DeptCodeExit(Sender: TObject);
    procedure DataSourceDataChange(Sender: TObject; Field: TField);
    procedure Act_ExcelExecute(Sender: TObject);
    procedure Act_ModifyExecute(Sender: TObject);
    procedure Edt_SysParamCodeButtonClick(Sender: TObject);
    procedure Act_InsertLineExecute(Sender: TObject);
  private
    { Private declarations }
  public
    flag:integer;
    procedure SetStatus(CurrentStatus:String;var AnswerStatus,EnableControls:String); Override;
    procedure InitControls; Override;
    procedure GetConnect(Ado_Qry:TAdoQuery);
    procedure getbyProduct(ItemCode:string;qty:real;MoLinedate,mostArtdate:string);
    procedure deletebyProduct(MoLineno:integer);
    { Public declarations }
  end;

var
  Frm_Mrp_Enter_NewAutoMo1: TFrm_Mrp_Enter_NewAutoMo1;
  reMainqty:real;
implementation

uses  Sys_Global,Mrp_Enter_MrpInfo,Mrp_Enter_MrpInfo1,Mrp_Enter_MrpInfo2, Mrp_Enter_AutoMo_D, Mrp_Enter_Mo_P,
  Mrp_Qry_DynamicMrpInfo, Mrp_Enter_NewMrpInfo, Mrp_Enter_NewMrpInfo1,
  Mrp_Enter_NewMrpInfo2,Mrp_Global;

{$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_NewAutoMo1.GetConnect(Ado_Qry:TAdoQuery);
var
  SqlText:String;
  BatchNo : String;
  I,j:Integer;
begin
  AdoQry_Tmp.Connection:=Ado_Qry.Connection;
  AdoQry_Body.Connection:=Ado_Qry.Connection;
  DbConnect:=Ado_Qry.Connection;
  AdoQry_Head1.Connection:=DbConnect;
  AdoQry_Head1:=Ado_Qry;
//******************************************************************
  try
   Executesql(AdoQry_tmp,'drop table #MoLine1',1);
  except
  end;
  SqlText:=' CREATE TABLE [#MoLine1] ('
          +' [LimItOut] [int] ,'
          +' [ItemCode] [varchAr] (50) ,'
          +' [ItemName] [varchAr] (80)  , '
          +' [UomName] [varchAr] (20)  , '
	  +' [SSQty] [float]  ,'
	  +' [MOQTY] [float]  ,'
          +' [MoNoFinishQty] [float]  ,'
          +' [MoLineSTATUS] [int]  ,'
	  +' [MoLineDATE] [datetime] ,'
          +' [MOStArtWorkDate] [datetime])  ';
  Executesql(AdoQry_tmp,sqltext,1);
//*****************************************************************  
  
  SqlText:=' Select Top 0 MoLine.*,Item.LimItOut,Item.ItemName,Uom.UomName '
          +' From MoLine '
          +' Join Item On MoLine.ItemCode=Item.ItemCode '
          +' Left Join Uom On Item.UomCode=Uom.UomCode';
  Executesql(AdoQry_Body,sqltext,0);
  Ado_Qry.First;
  I:=1;
  While Not Ado_Qry.Eof Do
  begin
    If Ado_Qry.fieldbyname('SScheck').AsInteger=1  Then
    begin
      If Trim(Ado_Qry.fieldbyname('PeggingNo').AsString)<>'' then 
      BatchNo := Trim(Ado_Qry.fieldbyname('PeggingNo').AsString);
      SqlText:=' Select runlt As Dt '
              +' From Item '
              +' Where ItemCode='+''''+Ado_Qry.fieldbyname('ItemCode').AsString+'''';
      AdoQry_Tmp.Close;
      AdoQry_Tmp.SQL.Text:=SqlText;
      AdoQry_Tmp.Open;
      If AdoQry_Tmp.Eof Then
      begin
        DispInfo('物料代码'+Ado_Qry.fieldbyname('ItemCode').AsString+'不存在,制造提前期为0天!',3);
        J:=0;
      end
      Else
        J:=AdoQry_Tmp.fieldbyname('Dt').AsInteger;
      sqltext:='insert into #MoLine1(limitout,ItemCode,ItemName,UomName,ssqty,'
                                  +' moqty,MoNoFinishqty,MoLinestatus,MoLinedate,mostArtworkdate)'
              +'Values('+inttostr(Ado_Qry.fieldbyname('ssid').asinteger) +','
                        +quotedstr(Ado_Qry.fieldbyname('ItemCode').asstring)+','
                        +quotedstr(Ado_Qry.fieldbyname('ItemName').asstring)+','
                        +quotedstr(Ado_Qry.fieldbyname('UomName').asstring)+','
                        +floattostr(Ado_Qry.fieldbyname('tMpssreMainqty').asfloat)+','
//                        +floattostr(Ado_Qry.fieldbyname('MoInqty').asfloat)+','
                        +floattostr(Ado_Qry.fieldbyname('tMpssreMainqty').asfloat)+','
                        +floattostr(Ado_Qry.fieldbyname('tMpssreMainqty').asfloat)+','
                        +inttostr(5)+','
                        +quotedstr(Ado_Qry.fieldbyname('ssdate').asstring)+','
                        +quotedstr(Ado_Qry.fieldbyname('ssdate').asstring)
                     +')';
      Executesql(AdoQry_tmp,sqltext,1);
      end;
      Ado_Qry.Next;
    end;

    SqlText:='select ItemCode,ItemName,UomName,'
              +' sum(SsQty) as SsQty,sum(MoQty) as MoQty,sum(MoNoFinishQty) MoNoFinishQty,'
              +' min(MoLineDate) as MoLineDate,min(MoStArtWorkDate) as MoStArtWorkDate '
              +' from  #MoLine1 '
              +' group by ItemCode,ItemName,UomName ' ;
    Executesql(AdoQry_tmp,sqltext,0);
    i:=1;
    while not AdoQry_tmp.Eof do
     begin
      AdoQry_Body.Append;
      AdoQry_Body.fieldbyname('MoLineNo').AsInteger:=i;
//      AdoQry_Body.fieldbyname('LimItOut').AsInteger:=AdoQry_tmp.fieldbyname('SsId').AsInteger;
      AdoQry_Body.fieldbyname('ItemCode').AsString:=AdoQry_tmp.fieldbyname('ItemCode').AsString;
      AdoQry_Body.fieldbyname('ItemName').AsString:=AdoQry_tmp.fieldbyname('ItemName').AsString;
      AdoQry_Body.fieldbyname('UomName').AsString:=AdoQry_tmp.fieldbyname('UomName').AsString;
      AdoQry_Body.fieldbyname('SsQty').AsFloat:=AdoQry_tmp.fieldbyname('ssqty').AsFloat;
      AdoQry_Body.fieldbyname('MoInQty').AsFloat:=AdoQry_tmp.fieldbyname('ssQty').AsFloat;
      AdoQry_Body.fieldbyname('MoQty').AsFloat:=AdoQry_tmp.fieldbyname('ssQty').AsFloat;
      AdoQry_Body.fieldbyname('MoNoFinishQty').AsFloat:=AdoQry_tmp.fieldbyname('ssQty').AsFloat;
      AdoQry_Body.fieldbyname('MoLineStatus').AsInteger:=5;
      AdoQry_Body.fieldbyname('MoLineDate').Asstring:=iifstring(AdoQry_tmp.fieldbyname('MoLineDate').AsDateTime<now,formatdatetime('yyyy.mm.dd',now),AdoQry_tmp.fieldbyname('MoLineDate').Asstring);
      AdoQry_Body.fieldbyname('MostArtworkDate').Asstring:=iifstring((AdoQry_tmp.fieldbyname('MoLineDate').AsDateTime-j)<now,formatdatetime('yyyy.mm.dd',now),datetimetostr(AdoQry_tmp.fieldbyname('MoLineDate').Asdatetime-j));
      AdoQry_Body.Post;
      getbyProduct(AdoQry_Body.fieldbyname('ItemCode').AsString,AdoQry_Body.fieldbyname('MoQty').AsFloat,AdoQry_Body.fieldbyname('MoLineDate').Asstring,AdoQry_Body.fieldbyname('MoStArtWorkDate').Asstring);
      i:=i+1;
      AdoQry_tmp.Next;
    end;
  if  CheckAllTypeOrderNoSet(DbConnect,6) then
  begin
    Edt_MoNo.Text := GetAllTypeOrderNo(DbConnect,6);
//    If Medt_MoDate.CanFocus then     Medt_Modate.SetFocus;
  end
  else begin
    Edt_MoNo.Text := BatchNo;
//    If Edt_MoNo.CanFocus then Edt_MoNo.SetFocus;
  end;
  DataSource.DataSet:=AdoQry_Body;
  dataSource.DataSet.First;
end;

procedure TFrm_Mrp_Enter_NewAutoMo1.InitControls;
var
  SQlText:String;
begin
  inherited;
  if Status='Add' Then
  begin
    MEdt_Modate.Text:=Formatdatetime('yyyy.mm.dd',Date);
    Edt_DeptCode.SetFocus;
  end;
  Edt_DeptName.Enabled:=False;
  Edt_SysParamValuec.Enabled:=False;
  Cmbx_StandardFlag.ItemIndex:=1;
  SQlText:=' Select SysParam.SysParamCode,SysParam.SysParamValuec From '
          +' SysParam Where Upper(SubString(SysParamCode,1,8))=Upper('''+'SaleType'+''')';
  AdoQry_Tmp.Close;
  AdoQry_Tmp.SQL.Text:=SQlText;
  AdoQry_Tmp.Open;
  Edt_SysParamCode.Text:=AdoQry_Tmp.fieldbyname('SysParamCode').AsString;
  Edt_SysParamValuec.Text:=AdoQry_Tmp.fieldbyname('SysParamValuec').AsString;
end;


procedure TFrm_Mrp_Enter_NewAutoMo1.Act_SaveExecute(Sender: TObject);
var
  SqlText,MoNo:String;
  I:integer;
  BookmArk:string;
  bodymArk:string;
  mArk:TBookmArk;
  TemPmoqty:double;
begin
 try
  bodymArk:=AdoQry_Body.BookmArk;
  Edt_DeptCode.OnExit(Edt_DeptCode);
  Edt_SysParamCode.OnExit(Edt_SysParamCode);
  If Trim(Edt_MoNo.Text)='' then 
  begin
    DispInfo('请输入订单号!',1);
    if Edt_MoNo.CanFocus then Edt_MoNo.SetFocus;
    abort;
  end;
  If AdoQry_Body.RecordCount=0 Then
  begin
    DispInfo('没有行数据,不能保存!',3);
    Abort;
  end;
  AdoQry_Body.DisableControls;
  AdoQry_Body.First;
  I:=0;
  While Not AdoQry_Body.Eof Do
  begin
    I:=I+1;
{    SqlText:=' Select * '
            +' From Item '
            +' Where (ItemCode='''+Trim(AdoQry_Body.fieldbyname('ItemCode').AsString)+''''
            +' )And (PmCode In (0,3))';
    AdoQry_Tmp.Close;
    AdoQry_Tmp.SQL.Text:=SqlText;
    AdoQry_Tmp.Open;
    If AdoQry_Tmp.Eof Then
    begin
      DispInfo('第'+IntToStr(I)+'行物料代码不是制造物料,不能保存!',1);
      AdoQry_Body.EnableControls;
      Abort;
    end;//在采购合同中不存在时的处理
}    If (AdoQry_Body.fieldbyname('MoQty').AsFloat<=0) And (Status='Add') Then
    begin
      DispInfo('第'+IntToStr(AdoQry_Body.RecNo)+'行数据约定交货量必须大于0,请修改!',1);
      AdoQry_Body.EnableControls;
      Abort;
    end;
    If (AdoQry_Body.fieldbyname('MostArtworkDate').AsDateTime<Date()) Then
    begin
      DispInfo('第'+IntToStr(AdoQry_Body.RecNo)+'行数据约定开工日小于了系统工作日,请修改!',1);
      AdoQry_Body.EnableControls;
      Abort;
    end;
    If (AdoQry_Body.fieldbyname('MoLineDate').AsDateTime<Date()) Then
    begin
      DispInfo('第'+IntToStr(AdoQry_Body.RecNo)+'行数据约定交货日小于了系统工作日,请修改!',1);
      AdoQry_Body.EnableControls;
      Abort;
    end;
        SqlText:=' Select MrpParamValuen '

⌨️ 快捷键说明

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