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

📄 mrp_enter_newmo.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Mrp_Enter_NewMo;
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, linkedit, jpeg;

Type
  TFrm_Mrp_Enter_NewMo = 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;
    Label7: TLabel;
    Lbl_ItemFlag: TLabel;
    Label9: TLabel;
    DBText1: TDBText;
    Label10: TLabel;
    DBText2: TDBText;
    Edt_DeptName: TEdit;
    Label11: TLabel;
    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_SysParamCode: TLinkEdit;
    Cmbx_StandardFlag: TComboBox;
    edt_DeptCode: TLinkEdit;
    Label6: TLabel;
    edt_rno: TEdit;
    AdoQry_BodyRemArk: TStringField;
    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);
    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;
    procedure saveoperation;
    { Public declarations }
  end;

var
  Frm_Mrp_Enter_NewMo: TFrm_Mrp_Enter_NewMo;
  deletedMoLine:string;

implementation

uses  Mrp_Enter_Mo_D, Sys_Global, Mrp_Enter_Mo_P, 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_NewMo.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;
      MEdt_Modate.Text:=Formatdatetime('yyyy.mm.dd',fieldbyname('modate').asdatetime);
      edt_rno.Text:=fieldbyname('referenceno').asstring;
      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
      Act_InsertLine.Enabled := True;
      MEdt_Modate.Text:=Formatdatetime('yyyy.mm.dd',Date);
      edt_rno.Text:='';
      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_NewMo.SetStatus(CurrentStatus: String;
  var AnswerStatus, EnableControls: String); //用来叛断哪些控件可用
begin
  inherited;
  if Currentstatus='Add' then
  begin
    AnswerStatus:='Add';
    EnableControls:='Edt_MoNo,Edt_DeptCode,Medt_Modate,Edt_MoRemArk,Edt_SysParamCode,Cmbx_StandardFlag,edt_rno,';
  end
  Else If Pos('Edit',CurrentStatus)>0 Then
  begin
    AnswerStatus:='PArtEdit';
    EnableControls:='Edt_DeptCode,Medt_Modate,Edt_MoRemArk,Edt_SysParamCode,edt_rno,'
  end;
end;

procedure TFrm_Mrp_Enter_NewMo.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('0 否');
  Cmbx_StandardFlag.Items.Add('1 是');
  deletedMoLine:=quotedstr('yyyyyyyy');
  
end;


procedure TFrm_Mrp_Enter_NewMo.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);
//      if edt_Mono.Text='' then abort;
      Application.ProcessMessages;
      SqlText:='Insert Mo '
              +' (MoNo,DeptCode,MoDate,MoReMArk,MOSpecial,referenceno,SaleType,StandardFlag)'
              +'  Values('
              +''''+Trim(Edt_MoNo.Text)+''','
              +''''+Trim(Edt_DeptCode.Text)+''','
              +''''+Trim(MEdt_MoDate.Text)+''','
              +''''+Trim(Edt_MoReMArk.Text)+''','
              +'0,'
              +quotedstr(Trim(edt_rno.text))+','
              +''''+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);

        operationmopo(AdoQry_tmp,
                    AdoQry_Body.fieldbyname('ItemCode').asstring,
                    'mo',
                    1,
                    Trim(edt_Mono.text),
                    AdoQry_Body.fieldbyname('MoLineno').asinteger,
                    5,
                    0,
                    AdoQry_Body.fieldbyname('moqty').asfloat,
                    AdoQry_Body.fieldbyname('MoNoFinishqty').asfloat,
                    AdoQry_Body.fieldbyname('mostArtworkdate').asstring,
                    AdoQry_Body.fieldbyname('MoLinedate').asstring,
                    getPmCode(dbconnect,AdoQry_Body.fieldbyname('ItemCode').asstring),
                    Trim(edt_DeptCode.text));


        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,Trim(edt_Mono.text),userCode,1);
      SqlText:='Update Mo '
              +' Set MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''','
              +' DeptCode= '''+Trim(Edt_DeptCode.Text)+''','
              +' referenceno='+quotedstr(Trim(edt_rno.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
        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 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+''','
                  +' remArk='+quotedstr(AdoQry_Body.fieldbyname('remArk').asstring)+','
                  +' MoLineDate='''+DateTimeToStr(AdoQry_Body.fieldbyname('MoLineDate').AsDateTime)+''','
                  +' mostArtworkdate='''+DateTimeToStr(AdoQry_Body.fieldbyname('MoStArtWorkDate').AsDateTime)+''','
                  +iifstring(AdoQry_Body.fieldbyname('MoLinestatus').asinteger=6,' ',' MoQty='''+FloatToStr(AdoQry_Body.fieldbyname('MoQty').AsFloat)+''',')
                  +iifstring(AdoQry_Body.fieldbyname('MoLinestatus').asinteger=6,' ',' MoNoFinishQty='''+FloatToStr(AdoQry_Body.fieldbyname('MoNoFinishQty').AsFloat)+''',')
                  +' MoLineStatus='''+IntToStr(AdoQry_Body.fieldbyname('MoLineStatus').AsInteger)+''''
                  +' Where MoNo='''+AdoQry_Head.fieldbyname('MoNo').AsString+''''
                  +' And MoLineNo='''+AdoQry_Body.fieldbyname('MoLineNO').AsString+'''';
          AdoQry_Tmp.Close;
          AdoQry_Tmp.SQL.Text:=SqlText;
          AdoQry_Tmp.ExecSQL;
          operationmopo(AdoQry_tmp,
                      AdoQry_Body.fieldbyname('ItemCode').asstring,
                      'mo',
                      IIfInteger(AdoQry_Body.fieldbyname('MoLineCheck').AsInteger = 1,1,2),
                      Trim(edt_Mono.text),
                      AdoQry_Body.fieldbyname('MoLineno').asinteger,
                      AdoQry_Body.fieldbyname('MoLinestatus').asinteger,
                      0,
                      AdoQry_Body.fieldbyname('moqty').asfloat,
                      AdoQry_Body.fieldbyname('MoNoFinishqty').asfloat,
                      AdoQry_Body.fieldbyname('mostArtworkdate').asstring,
                      AdoQry_Body.fieldbyname('MoLinedate').asstring,

⌨️ 快捷键说明

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