📄 inv_mninaudit.pas
字号:
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 + -