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

📄 mrp_enter_mo.pas

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

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Entry_Body, Db, ActnList, AdODB, Grids, DBGridEh, StdCtrls,
  ExtCtrls, ComCtrls, ToolWin, Mask, ExtEdit,QuickRpt, DBCtrls,
  ExtPrintReport, jpeg;

Type
  TFrm_Mrp_Enter_Mo = 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;
    Edt_DeptCode: TExtEdit;
    Lbl_DeptName: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edt_SysParamValuec: TEdit;
    Lbl_SaleType: TLabel;
    Edt_SysParamCode: TExtEdit;
    Label7: TLabel;
    Lbl_ItemFlag: TLabel;
    Label9: TLabel;
    DBText1: TDBText;
    Label10: TLabel;
    DBText2: TDBText;
    Label8: TLabel;
    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;
    procedure FormCreate(Sender: TObject);
    procedure Act_SaveExecute(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 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);
  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_Mo: TFrm_Mrp_Enter_Mo;
  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_Mo.InitControls;
var
   SqlText:string;
begin
  If Status<>'Add' then
  begin
    CurrentFormStatus:='PArtEdit';
    SetFocus_Control:=Edt_DeptCode;
  end
  Else
  begin
    CurrentFormStatus:='Add';
    SetFocus_Control:=Edt_DeptCode;
  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
      Edt_MoNo.Text:=fieldbyname('MoNo').AsString;
      MEdt_Modate.Text:=Formatdatetime('yyyy.mm.dd',fieldbyname('modate').asdatetime);
      Edt_SysParamCode.Text:=fieldbyname('SysParamCode').AsString;
      Edt_SysParamValuec.Text:=fieldbyname('SysParamValuec').AsString;
      Cmbx_StandardFlag.ItemIndex:=fieldbyname('StandardFlag').AsInteger;
      Edt_MoReMArk.Text:=fieldbyname('MoRemArk').AsString;
    end
    Else
    begin
      Edt_MoNo.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_Mo.SetStatus(CurrentStatus: String;
  var AnswerStatus, EnableControls: String); //用来叛断哪些控件可用
begin
  inherited;
  if Currentstatus='Add' then
  begin
    AnswerStatus:='Add';
    EnableControls:='Edt_DeptCode,Medt_Modate,Edt_MoRemArk,Edt_SysParamCode,Cmbx_StandardFlag,';
  end
  Else If Pos('Edit',CurrentStatus)>0 Then
  begin
    AnswerStatus:='PArtEdit';
    EnableControls:='Edt_DeptCode,Medt_Modate,Edt_MoRemArk,Edt_SysParamCode,'
  end;
end;

procedure TFrm_Mrp_Enter_Mo.FormCreate(Sender: TObject);
begin
  inherited;
  ExtendCaption:=False;
  //Frm_Entry_Detail:=TFrm_Mrp_Enter_Mo_D.Create(Self);
  Frm_Mrp_Enter_Mo_D:=TFrm_Mrp_Enter_Mo_D.Create(Self);
  Frm_Mrp_Enter_Mo_D.permitBackflush:=1;
  Frm_Entry_Detail:=Frm_Mrp_Enter_Mo_D;
  Cmbx_StandardFlag.clear;
  Cmbx_StandardFlag.Items.Add('否');
  Cmbx_StandardFlag.Items.Add('是');
  deletedMoLine:=quotedstr('yyyyyyyy');
end;


procedure TFrm_Mrp_Enter_Mo.SaveData;
var
  SqlText,MoNo:String;
begin
  inherited;
  If AdoQry_Body.RecordCount=0 Then
  begin
    DispInfo('没有行数据,不能保存!',1);
    Abort;
  end;
  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);
      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 edt_Mono.Text='' then abort;
      Application.ProcessMessages;
      SqlText:='Insert Mo '
              +' (MoNo,DeptCode,MoDate,MoReMArk,MOSpecial,SaleType,StandardFlag)'
              +'  Values('
              +''''+Trim(Edt_MoNo.Text)+''','
              +''''+Trim(Edt_DeptCode.Text)+''','
              +''''+Trim(MEdt_MoDate.Text)+''','
              +''''+Trim(Edt_MoReMArk.Text)+''','
              +'0,'
              +''''+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,MoLineDate,MoStArtWorkDate,MOQty,MoNoFinishQty,MoLineStatus,byProduct,ParentMoLineno,Backflush)'
                +'Values('
                +''''+Trim(Edt_MoNo.Text)+''','
                +''''+IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger)+''','
                +''''+AdoQry_Body.fieldbyname('ItemCode').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 //自动产生领料单
            Abort;       //自动产生生产领料单
        AdoQry_Body.Next;
      end;
    end;
    If CurrentFormStatus='PArtEdit' Then
    begin
      savemohistory(dbconnect,Trim(edt_Mono.text),userCode,1);
      SqlText:='Update Mo '
              +' Set MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''','
              +' DeptCode= '''+Trim(Edt_DeptCode.Text)+''','
              +' MoDate= '''+MEdt_MoDate.Text+''','
              +' MoReMArk= '''+Trim(Edt_MoRemArk.Text)+''','
              +' SaleType= '''+Trim(Edt_SysParamCode.Text)+''','
              +' StandardFlag='''+IntToStr(cmbx_StandardFlag.Itemindex)+''''
              +' 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
        saveMoLineHistory(dbconnect,Trim(edt_Mono.text),AdoQry_Body.fieldbyname('MoLineno').asinteger,userCode,1);
        SqlText:=' UpDate MoLine '
                +' set Backflush='+inttostr(AdoQry_Body.fieldbyname('Backflush').asinteger)+','
                +' MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''','
                +' MoLineNo='''+IntToStr(AdoQry_Body.fieldbyname('MoLineNo').AsInteger)+''','
                +' ItemCode='''+AdoQry_Body.fieldbyname('ItemCode').AsString+''','
                +' MoLineDate='''+DateTimeToStr(AdoQry_Body.fieldbyname('MoLineDate').AsDateTime)+''','
                +' mostArtworkdate='''+DateTimeToStr(AdoQry_Body.fieldbyname('MoStArtWorkDate').AsDateTime)+''','
                +' MoQty='''+FloatToStr(AdoQry_Body.fieldbyname('MoQty').AsFloat)+''','
                +' MoNoFinishQty='''+FloatToStr(AdoQry_Body.fieldbyname('MoNoFinishQty').AsFloat)+''','
                +' MoLineStatus='''+IntToStr(AdoQry_Body.fieldbyname('MoLineStatus').AsInteger)+''''
                +' Where MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''''

⌨️ 快捷键说明

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