📄 sfc_enter_mounitmnrequest.pas
字号:
unit Sfc_Enter_MoUnitMnRequest;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Base_Entry_Body, Db, DBCtrls, StdCtrls, ActnList, AdODB, Grids, DBGridEh,
ExtCtrls, ComCtrls, ToolWin, ExtPrintReport, ExtEdit, Mask,dbgrids, jpeg, variants;
Type
TFrm_Sfc_Enter_MoUnitMnRequest = Class(TFrm_Base_Entry_Body)
Extpr: TExtPrintReport;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label12: TLabel;
cmbbx_WhCode: TComboBox;
cmbbx_WhPositionCode: TComboBox;
medt_Date: TMaskEdit;
Extedt_Billno: TExtEdit;
Extedt_memo: TExtEdit;
cmbbx_WhEmployee: TComboBox;
Label7: TLabel;
cmbbx_Shift: TComboBox;
Panel1: TPanel;
Label13: TLabel;
DBText2: TDBText;
Panel2: TPanel;
DBText1: TDBText;
Label8: TLabel;
Label15: TLabel;
Edt_Dept: TExtEdit;
CheckBox1: TCheckBox;
Label9: TLabel;
Button1: TButton;
Button2: TButton;
procedure DBGridEhKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure AdoQry_BodyBeforePost(DataSet: TDataSet);
procedure DBGridEhColExit(Sender: TObject);
procedure Act_autoExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Act_PreviewExecute(Sender: TObject);
procedure Act_PrintExecute(Sender:TObject);
procedure FormActivate(Sender: TObject);
procedure cmbbx_WhCodeExit(Sender: TObject);
procedure Act_NewExecute(Sender: TObject);
procedure DBGridEhExit(Sender: TObject);
procedure Extedt_BillnoChange(Sender: TObject);
procedure medt_DateChange(Sender: TObject);
procedure DataSourceDataChange(Sender: TObject; Field: TField);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cmbbx_WhCodeChange(Sender: TObject);
procedure cmbbx_WhPositionCodeChange(Sender: TObject);
procedure Act_SaveExecute(Sender: TObject);
procedure DateCheck(Sender: TObject);
procedure DBGridEhGetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure cmbbx_WhEmployeeExit(Sender: TObject);
procedure AdoQry_BodyAfterInsert(DataSet: TDataSet);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure cmbbx_WhEmployeeChange(Sender: TObject);
procedure cmbbx_ShiftChange(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure AdoQry_BodyBeforeEdit(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
IsAfterPrint : Boolean;
procedure checkcoCurrentqty;
procedure InitCmbbx_WhPositionCode(whCode:string);
procedure InitCmbbx_WhEmployee(whCode:string);
procedure showdbgrid;
procedure initprint;
{ Private declarations }
public
tmp_Status:string;
procedure SetStatus(CurrentStatus:String;var AnswerStatus,EnableControls:String); Override;//设置各种状态下那些控件Enable
procedure InitControls; Override;//初始化Form上所有控件
procedure SaveData; Override;
{ Public declarations }
end;
var
Frm_Sfc_Enter_MoUnitMnRequest: TFrm_Sfc_Enter_MoUnitMnRequest;
implementation
uses Sys_Global, Sfc_Enter_MoUnitMnRequestH,Inv_Global, Sfc_MnOut_NotSave_P;
{$R *.DFM}
procedure TFrm_Sfc_Enter_MoUnitMnRequest.InitCmbbx_WhPositionCode(whCode:string);
begin
//初始化货位,根据当前传入的仓库号码,选出不是待检货位及不是拉式货位的货位
with AdoQry_tmp do
begin
Close;
sql.clear;
sql.Add('select WhPositionCode,WhPositionName '+
' from WhPosition '+
' where whCode='''+whCode+''''+
' and WhPositionType<>1 '+
' and BackFlushWhP=0 '+
' Order by WhPositionCode ');
open;
cmbbx_WhPositionCode.clear;
if not Eof then
begin
First;
while not Eof do
begin
cmbbx_WhPositionCode.Items.Add(fieldbyname('WhPositionCode').asstring+' '+fieldbyname('WhPositionName').asstring);
Next;
end;
end;
end;
cmbbx_WhPositionCode.Itemindex:=0;
end;
procedure TFrm_Sfc_Enter_MoUnitMnRequest.InitCmbbx_WhEmployee(whCode:string);
begin
//初始化仓管员,从物料主文件中选出当前仓库的缺省仓管员,可以为空
with AdoQry_tmp do
begin
Close;
sql.clear;
sql.Add('select distinct i.wh_EmployeeCode,e.EmployeeName '+
' from Item i,Employee e '+
' where whCode='''+whCode+''''+
' and i.wh_EmployeeCode is not null '+
' and i.wh_EmployeeCode=e.EmployeeCode '+
' Order by i.wh_EmployeeCode');
open;
cmbbx_WhEmployee.clear;
cmbbx_WhEmployee.Items.Add('');
if not Eof then
begin
First;
while not Eof do
begin
cmbbx_WhEmployee.Items.Add(fieldbyname('wh_EmployeeCode').asstring+' '+fieldbyname('EmployeeName').asstring);
Next;
end;
cmbbx_WhEmployee.Itemindex := 0;
end;
end;
end;
procedure TFrm_Sfc_Enter_MoUnitMnRequest.Showdbgrid;
var
sqltext,tmp_WhEmployee,tmp_DeptCode,tmpfields,oncheckpositionCode:string;
begin
//取待检货位的代码
with AdoQry_tmp do
begin
Close;
sql.text:='select WhPositionCode from WhPosition where WhPositionType=1 '+
'and whCode='+QuotedStr(getCode(cmbbx_WhCode.text));
open;
oncheckpositionCode:=fieldbyname('WhPositionCode').asstring;
end;
//取数据显示于DBGRID
//根据仓库代码,货位代码决定选出数据表中的英文字段名,用于下面的SQL语名组合
tmpfields:=getInvfield(AdoQry_tmp,getCode(cmbbx_WhCode.text),getCode(cmbbx_WhPositionCode.text),'CurrentInv');
//如果仓库管理员为空或不为空情况下的SQL语名中仓管员条件组合
if cmbbx_WhEmployee.text<>'' then
tmp_WhEmployee:=' and i.wh_EmployeeCode='''+getCode(cmbbx_WhEmployee.text)+''''
else
tmp_WhEmployee:='';
Try
ExecuteSql(AdoQry_Tmp,'Drop Table #MnItemList',1);
except
end;
SqlText :='Create table #MnItemList '
+'( IsTotal Int null, '
+' ItemListId Int Null, '
+' MoNo varchAr(20) null, '
+' MoLineNo Int Null, '
+' ItemCode varchAr(16) NUll, '
+' Ite_ItemCode varchAr(16) null, '
+' ItemName varchAr(200) Null, '
+' UomName varchAr(10) null, '
+' OnHandInv decimal(20,8) null, '
+' MoCtrlQty decimal(20,8) null, '
+' MoRealQty decimal(20,8) null, '
+' MoRequestQty decimal(20,8) null, '
+' ThisRequestQty decimal(20,8) null, '
+' BatchNo varchAr(30) null, '
+' BomRemArk varchAr(200) null , '
+' BillLineRemArk varchAr(200) null ) '
+' Insert Into #MnItemList '
+' select 0 as IsTotal,MnItemList.ItemListId,MnItemList.MoNo, '
+' MnItemList.MoLineNo, '
+' MnItemList.ItemCode, '
+' MnItemList.Ite_ItemCode, '
+' Item.ItemName, '
+' Uom.UomName, '
+' IsNull(CurrentInv.'+TmpFields+',0.0) as OnHandInv,'
+' MnItemList.MoCtrlQty, '
+' MnItemList.MoRealQty, '
+' MnItemList.MoRequestQty, '
+' 0.0 as ThisRequestQty, '
+' '' '' as BatchNo, '
+' '''' as BomRemArk, '
+' convert(varchAr(1000),'''') as BillLineRemArk '
// +' Into #MnItemList '
+' from MnItemList '
+' Join Item on MnItemList.ItemCode=Item.ItemCode '
+IifString(Cmbbx_WhEmployee.Text='' ,'','and Item.Wh_EmployeeCode='+QuotedStr(GetCode(Cmbbx_WhEmployee.Text)))
+' Join CurrentInv on Item.ItemCode=CurrentInv.ItemCode '
+' and CurrentInv.WhCode='+QuotedStr(GetCode(Cmbbx_WhCode.Text))
+' and CurrentInv.WhPositionCode='+QuotedStr(GetCode(Cmbbx_WhPositionCode.Text))
+' left Join Uom On Item.UomCode=Uom.UomCode '
+' where AlterNative=0 '
+' and MoNo+Convert(varchAr(20),MoLineNo) In ( Select MoNo+Convert(varchAr(20),MoLineNo) '
+' from #TmPMoLine Where CheckFlag=1 and DeptCode='+QuotedStr(GetCode(Edt_Dept.Text))+') '
+' union '
+' select 0 as IsTotal,MnItemList.ItemListId,MnItemList.MoNo, '
+' MnItemList.MoLineNo, '
+' MnItemList.ItemCode, '
+' MnItemList.Ite_ItemCode, '
+' Item.ItemName, '
+' Uom.UomName, '
+' 0.0 as OnHandInv,'
+' MnItemList.MoCtrlQty, '
+' MnItemList.MoRealQty, '
+' MnItemList.MoRequestQty, '
+' 0.0 as ThisRequestQty, '
+' '' '' as BatchNo, '
+' '''' as BomRemArk, '
+' convert(varchAr(1000),'''') as BillLIneRemArk '
// +' Into #MnItemList '
+' from MnItemList '
+' Join Item on MnItemList.ItemCode=Item.ItemCode and Item.WhCode='+QuotedStr(GetCode(Cmbbx_WhCode.Text))
+IifString(Cmbbx_WhEmployee.Text='' ,'','and Item.Wh_EmployeeCode='+QuotedStr(GetCode(Cmbbx_WhEmployee.Text)))
+' left Join Uom On Item.UomCode=Uom.UomCode '
+' where AlterNative=0 '
+' and Not Exists(select * from CurrentInv '
+' where MnItemList.ItemCode=CurrentInv.ItemCode '
+' and CurrentInv.WhCode='+QuotedStr(GetCode(Cmbbx_WhCode.Text))
+' and CurrentInv.WhPositionCode='+QuotedStr(GetCode(Cmbbx_WhPositionCode.Text))
+' ) '
+' and MoNo+Convert(varchAr(20),MoLineNo) In ( Select MoNo+Convert(varchAr(20),MoLineNo) '
+' from #TmPMoLine Where CheckFlag=1 and DeptCode='+QuotedStr(GetCode(Edt_Dept.Text))+') ' ;
ExecuteSql(AdoQry_tmp,SqlText,1);
SqlText := ' Insert #MnItemList '
+' select 1 as IsTotal,0 as ItemListId,'''' as MoNo,'
+' 0 as MoLineNo, '
+' ItemCode, '
+' '' '' as Ite_ItemCode, '
+' ItemName, '
+' UomName , '
+' OnHandInv, '
+' Sum(MoCtrlQty) as MoCtrlQty, '
+' sum(MoRealQty) as MoRealQty, '
+' Sum(MoRequestQty) as MoRequestQty,'
+' Sum(ThisRequestQty) as ThisRequestQty, '
+' '''' as BatchNo, '
+' '''' as BomRemArk, '
+' convert(varchAr(1000),'''') as BillLineRemArk '
+' From #MnItemList '
+' Group By ItemCode,ItemName,UomName,OnHandInv ';
ExecuteSql(AdoQry_Tmp,SqlText,1);
Executesql(AdoQry_Body,'select * from #MnItemList where IsTotal=1',0);
end;
procedure TFrm_Sfc_Enter_MoUnitMnRequest.InitControls;
var SqlText : String;
begin//初始化Form上的控件
inherited;
//说明:用tmp_Status变量控制这个窗体, =notChange 为窗体刚进入
//是 =Change cmbbx_WhPositionCode 改变的状态,要根据货位的改变而刷新GRID
with dbgrideh do
begin
options:=options+[dgEditing]-[dgRowselect];
end;
pnl_Hint.Visible :=False;
//控制保存后界面不变SHOWFLAG是基类的参数
if (showflag=True) and (status<>'Add') then
exit;
Edt_Dept.Text := Frm_Sfc_Enter_MoUnitMnRequestH.tmp_DeptCode;
Edt_Dept.Enabled := False;
medt_Date.text:=DateToStr(Date);
//DBGRID只允许请领数量,批次号,备注可以更改
if status='ReadOnly' then
begin
cmbbx_WhCode.Enabled:=True;
cmbbx_WhPositionCode.Enabled:=True ;
cmbbx_WhEmployee.Enabled :=True;
medt_Date.Enabled:=True;
dbgrideh.ReadOnly :=True;
Button1.Enabled := True;
Button2.Enabled := True;
dbgrideh.Columns[7].ReadOnly:=True;
dbgrideh.Columns[8].ReadOnly:=True;
dbgrideh.Columns[9].ReadOnly:=True;
Act_auto.Enabled :=False;
act_New.Enabled:=False;
end
else
begin
Act_auto.Enabled :=True;
dbgrideh.ReadOnly :=False;
dbgrideh.Columns[0].ReadOnly:=True;
dbgrideh.columns[1].ReadOnly:=True;
dbgrideh.Columns[2].ReadOnly:=True;
dbgrideh.Columns[3].ReadOnly:=True;
dbgrideh.Columns[4].ReadOnly:=True;
dbgrideh.Columns[5].ReadOnly:=True;
dbgrideh.Columns[6].ReadOnly:=True;
dbgrideh.columns[7].ReadOnly:=False;
dbgrideh.Columns[8].ReadOnly:=False;
dbgrideh.Columns[9].ReadOnly:=False;
// dbgrideh.Columns[10].ReadOnly:=False;
end;
// initUsablewhcmbx(AdoQry_tmp,userCode,cmbbx_WhCode,True);
SQlText := ' select WhAccessCtrl.WHCode,WHName '
+' from WHAccessCtrl '
+' join Warehouse on WhAccessCtrl.WhCode=Warehouse.WhCode '
+' where WhAccessCtrl.EmployeeCode='+QuotedSTr(userCode)
+' and ( WhAccessCtrl.WhCode In (select WhCode from CurrentInv '
+' where ItemCode in(select distinct ItemCode from MnItemList '
+' where MoNo+Convert(varchAr(20),MoLineNo) In ( Select distinct MoNo+Convert(varchAr(20),MoLineNo) '
+' from #TmPMoLine Where CheckFlag=1) '
+' ) ) '
+' or WhAccessCtrl.WhCode in (select WhCode from Item where ItemCode in( select distinct ItemCode from MnItemList '
+' where MoNo+Convert(varchAr(20),MoLineNo) In ( Select distinct MoNo+Convert(varchAr(20),MoLineNo) '
+' from #TmPMoLine Where CheckFlag=1 )) '
+' )) '
+ ' Order by WhAccessCtrl.WHCode ';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -