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

📄 inv_mninaudit.pas

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

unit    Inv_MnInAudit;
{ 注释:
    Param1 为 'SP' 时是半成品入库,'FP'的时候是成品.
    Param2 为生产订单号。
    Param3 为部门代码
    Param4 为班别代码
    Param5 为仓库代码
    Param6 为单据类型ID
}

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Entry_Body, Db, ActnList, AdODB, Grids, DBGridEh, ExtCtrls,dbgrids,
  ComCtrls, ToolWin, Base_Outer, Menus, ExtPrintReport, StdCtrls, Mask,
  Base_Check_Body,Math, DBCtrls, jpeg;

Type
  TFrm_Inv_MnInAudit = Class(TFrm_Base_Check_Body)
    Label3: TLabel;
    Label1: TLabel;
    Label4: TLabel;
    Label2: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edt_BillNo: TEdit;
    Label7: TLabel;
    Edt_Memo: TEdit;
    AdoQry_Tmp2: TAdoQuery;
    Edt_Date: TMaskEdit;
    Lbl_MoNo: TLabel;
    LbL_MoFinishShift: TLabel;
    Label8: TLabel;
    Lbl_Dept: TLabel;
    Label9: TLabel;
    AdoQry_BodyMONO: TStringField;
    AdoQry_BodyMoLineNo: TIntegerField;
    AdoQry_BodyItemCode: TStringField;
    AdoQry_BodyItemName: TStringField;
    AdoQry_BodyUomName: TStringField;
    AdoQry_BodyMOQty: TFloatField;
    AdoQry_BodyMoRealInQty: TFloatField;
    AdoQry_BodyInvBillSfcQty: TFloatField;
    AdoQry_BodyInvBillQty: TFloatField;
    Lbl_WhCodeName: TLabel;
    Lbl_Position: TLabel;
    AdoQry_BodyInvBillLineNo: TStringField;
    DBText1: TDBText;
    AdoQry_BodyBilllineremArk: TStringField;
    AdoQry_BodyBackFlush: TIntegerField;
    procedure DBGridEhKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Act_autoExecute(Sender: TObject);
    procedure Edt_DateExit(Sender: TObject);
    procedure AdoQry_BodyAfterInsert(DataSet: TDataSet);
    procedure AdoQry_BodyBeforePost(DataSet: TDataSet);
    procedure Act_CheckExecute(Sender: TObject);
    procedure Act_PreviewExecute(Sender: TObject);
    procedure Act_PrintExecute(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGridEhGetCellParams(Sender: TObject; Column: TColumnEh;
      AFont: TFont; var Background: TColor; State: TGridDrawState);
  private
    Overqtydeny_Percent:real;
    Product :boolean;
    FPosition :String;
    FShiftType :String;
    FMoNo :String;
    FDeptCode :String;
    FWhCode :String;
    FBillTypeCode :String;
    FInvBillId :String;
    //Function CurrentInvCheck(ItemCode,whCode,WhPosition:string;qty:real):Boolean;
    procedure  setstrol;
    { Private declarations }
    //是否核销主计划;
    Function ISCancelMps:boolean;
    //核销主计划;
    procedure CancelMps(InvBillID,InvBillLineNo:string;ItemCode:string;Qty:double);
    Function ISStockItem(ItemCode:string):boolean;    //是否库存件;
    Function ISMudiFather(ItemCode:string):boolean;   // 是有否多父项;
    Function FindFatherCode(ItemCode:string):string;  //找父项物料代码;
    Function ISPirsSale(ItemCode:string):boolean;     //是否特销件;
    Function GetRealInQty(ItemCode:string;Billqty:string):double;  //得到真实的入库数量;
  public
    procedure InitControls;Override;
    procedure SetUserParam(Param1,Param2,Param3,Param4,Param5,Param6:String);Override;
    procedure SetFormParam(FrmParam1,FrmParam2,FrmParam3,FrmParam4,FrmParam5,FrmParam6:String);Override;
    procedure InitForm(AdOConnection:TAdOConnection;FormStatus:String;
      AdoQuery:TAdoQuery);Override;
    { Public declarations }
  end;

var
  Frm_Inv_MnInAudit: TFrm_Inv_MnInAudit;

implementation

uses Sys_Global, Inv_MnInAudit_C ,Inv_Global;

{$R *.DFM}

{ TFrm_Inv_MnInAudit }

procedure TFrm_Inv_MnInAudit.InitForm(AdOConnection: TAdOConnection;
  FormStatus:String;AdoQuery:TAdoQuery);
begin
  inherited;
  //Param2就是上级窗体传入的MONO
  with DBGridEh do
  begin
    options:=options+[dgEditing]-[dgRowselect];
  end;
  Tlbtn_CancelCheck.Action:=Act_Auto;
  Act_Auto.Hint:='获取最佳领用数量';
  Lbl_MoNo.Caption:=FMoNo;
  Edt_Date.text:=DateToStr(Date());
  Lbl_MoFinishShift.Caption:=FShiftType;
  AdoQry_Tmp2.Connection:=AdoConnection;
  Lbl_WhCodeName.Caption:=Param5;   //FWhCode为GetCode(Param5),不包含名称
  Lbl_Position.Caption:=Param1;     //FPosition 为GETCode(Param1),不包含名称

  Lbl_Dept.Caption:=FDeptCode;
end;

procedure TFrm_Inv_MnInAudit.DBGridEhKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  inherited;
  if key=vk_return then keybd_event(Vk_tab,Vk_tab,0,0);
end;

procedure TFrm_Inv_MnInAudit.Act_autoExecute(Sender: TObject);
var
  M:integer;
  Current,a,b:real;
  TmpField:string;
begin
  inherited;
  If  AdoQry_Head.fieldbyname('OverPlan').AsInteger=1 then   //是超计划
  begin
    with AdoQry_Body do
    begin
      AdoQry_Body.First;
      for M:=0 to recordCount-1 do
      begin
        if fieldbyname('InvBillSfcQty').asfloat>0 then
        begin
          edit;
          fieldbyname('InvBillQty').asfloat:=
          fieldbyname('InvBillSfcqty').asfloat;
        end;
        AdoQry_Body.next;
      end;
    end;
  end
  Else
  begin
    with AdoQry_Body do
    begin
      AdoQry_Body.First;
      for M:=0 to recordCount-1 do
      begin
        a:=fieldbyname('MOQty').asFLoat;
        b:=fieldbyname('MoRealInQty').asFloat;
        If a>b then
        begin
          If fieldbyname('InvBillSfcQty').ASFloat>0 then
          begin
            edit;
            fieldbyname('InvBillQty').asfloat:=
            Min(fieldbyname('InvBillSfcQty').asfloat,
            (round(fieldbyname('MOQty').asfloat*(1+Overqtydeny_Percent/100))-fieldbyname('MoRealInQty').asfloat));
          end
          else
          begin
            edit;
            TmpField:=GetInvField(AdoQry_Tmp,getCode(Lbl_WhCodeName.Caption),getCode(Lbl_Position.Caption),'CurrentInv');
            AdoQry_Tmp.Close;
            AdoQry_Tmp.SQL.text:='select '+TmpField+
                                  ' as CInv '+
                                  ' from  CurrentInv '+
                                  'where ItemCode='''+fieldbyname('ItemCode').asstring+''' and '+
                                  '      whCode='''+Lbl_WhCodeName.Caption+'''';
            AdoQry_Tmp.open;
            Current:=min(AdoQry_Tmp.fieldbyname('cInv').asfloat,fieldbyname('MoRealInQty').asfloat);
            fieldbyname('InvBillqty').asfloat:= - min(Current,abs(fieldbyname('InvBillSfcQty').asfloat));
          end;
          AdoQry_Body.next;
        end
        else
        AdoQry_Body.next;
      end;
    end;
  end;
  AdoQry_Body.First;
end;

procedure TFrm_Inv_MnInAudit.Edt_DateExit(Sender: TObject);
begin
  inherited;
  if not WHClsPeriodCheck(AdoQry_Tmp,FWHCode,Copy(Edt_Date.Text,1,7)) then
  begin
    Edt_Date.SetFocus;
    Abort;
  end;
end;


procedure TFrm_Inv_MnInAudit.InitControls;
var
  I:integer;
begin
  inherited;
  with DBGridEh do
  begin
    options:=options+[dgEditing]-[dgRowselect];
  end;
  With AdoQry_Body do
  begin
    Close;
    Sql.clear;
    Sql.Add('select IL.MONO,IL.MoLineNo,IL.ItemCode,IL.InvBillLineNo,   '+
            '       Item.ItemName,Uom.UomName,         '+
            '       MoLine.MOQty,MoLine.MoRealInQty,   '+
            '       MoLine.BackFlush,'+
            '       IL.InvBillSfcQty,IL.InvBillQty,IL.BilllineremArk'+
            '  From InvInBillLine IL                   '+
            '  Join MoLine                             '+
            '    On (MoLine.MoNo=IL.MoNo)              '+
            '       and (MoLine.MoLineNo=IL.MoLineNo)  '+
            '       and (IL.MoNo='''+FMoNo+''')'+
            '       and (IL.InvBillId='+FInvBillId+')'+
            '  Join Item                               '+
            '    On Item.ItemCode=IL.ItemCode          '+
            '  Join Uom                                '+
            '   On Uom.UomCode=Item.UomCode            ');
     Open;
  end;

  With AdoQry_Tmp do
  begin
    Close;
    Sql.clear;
    Sql.Add('Select InvBillNo From InvInBill where InvBillId='+FInvBillId);
    Open;
    Edt_BillNo.Text:=fieldbyname('InvBillNo').AsString;
//得到备注字段
    Close;
    sql.text:='select InvBillRemArk from InvInBill where InvBillId='+FInvBillid;
    open;
    Edt_Memo.Text:=fieldbyname('InvBillRemArk').asString;
//得到Mrp中的百分率
    Close;
    sql.text:='select MrpParamValueN '+
              '  from MrpParam '+
              ' where MrpParamCode=''Overqtydeny_Percent'' ';
    open;
    Overqtydeny_Percent:=fieldbyname('MrpParamValueN').asfloat;
  end;
  setstrol;
  With AdoQry_Body do
  begin
    First;
    for i:=0 to recordCount-1 do
    begin
      if fieldbyname('InvBillSfcQty').asfloat<0 then
      begin
        act_auto.Enabled:=False;
        First;
        exit;
      end;
      next;
    end;
    First;
  end;
end;


procedure TFrm_Inv_MnInAudit.SetUserParam(Param1, Param2, Param3, Param4,
  Param5, Param6: String);
begin
  inherited;
  FPosition:=GetCode(Param1);
  FMoNo:=Param2;
  FDeptCode:=Param3;
  FShiftType:=Param4;
  FWhCode:=GetCode(Param5);
  FBillTypeCode:=Param6;
end;



procedure TFrm_Inv_MnInAudit.AdoQry_BodyAfterInsert(DataSet: TDataSet);
begin
  inherited;
  AdoQry_Body.Cancel;
end;

procedure TFrm_Inv_MnInAudit.AdoQry_BodyBeforePost(DataSet: TDataSet);
var
  a1,a2:real;
begin
  inherited;
  if AdoQry_Body.fieldbyname('InvBillQty').asstring='' then
  begin
    AdoQry_Body.fieldbyname('InvBillQty').asstring:='0';
    Abort;
  end;
  if AdoQry_Body.fieldbyname('BackFlush').asinteger=0 then
  begin
    if not InvQtyCheck(False,
                       AdoQry_Body,AdoQry_Tmp,
                       getCode(Lbl_WhCodeName.Caption),
                       getCode(Lbl_Position.Caption),
                       AdoQry_Body.fieldbyname('ItemCode').asstring,
                       'InvBillQty',AdoQry_Body.fieldbyname('InvBillQty').AsFloat,True)then
    begin
      Abort;
    end;
    a1:=AdoQry_Body.fieldbyname('InvBillQty').AsFloat+AdoQry_Body.fieldbyname('MoRealInQty').AsFloat;
    a2:=round(AdoQry_Body.fieldbyname('MoQty').AsFloat*(1+Overqtydeny_Percent/100));
    IF (AdoQry_Head.fieldbyname('OverPlan').AsInteger=0) and
       (a1>a2) then

⌨️ 快捷键说明

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