📄 sy_ck_lmp.pas
字号:
begin
lbl_BZGG.Visible := False;
fcb_BZGG.Visible := False;
rg_Round_Style.Visible := True;
l_SingleDest := VL_Ban_GG;
end;
2: {不用凑整数} {}
begin
lbl_BZGG.Visible := False;
fcb_BZGG.Visible := False;
rg_Round_Style.Visible := False;
end;
end;
if not qry_Detail.IsEmpty then
begin
if chk_Round.Checked then {所有单位}
SetRounding {凑包凑版调用} {}
else {仅对当前单位适用}
with qry_Detail do
begin
BeforePost := nil;
Edit;
if rg_Round.ItemIndex = 2 then {不凑} {}
FieldByName('FPSL').AsInteger := FieldByName('FPSL_OLD').AsInteger
else
FieldByName('FPSL').AsInteger :=
GetRoundNumber(FieldByName('FPSL_OLD').AsInteger, l_SingleDest, rg_Round_Style.ItemIndex); {返回凑整后的数据}
Post;
BeforePost := qry_DetailBeforePost;
end;
{显示出修改后的理论库存}
ce_KC.Value := VL_TheoryKC - GetFPSL_Total; {显示的理论库存=理论库存 - 分配数量 }
end;
end;
{-------------------------------------------------------------------------------}
{新制定出库计划单}
procedure TFrm_SY_CK_LMP.bbtn_AddClick(Sender: TObject);
var
l_ModalResult: Integer;
begin
with TFrm_SY_CK_LMP_Add.Create(Application) do
try
l_ModalResult := ShowModal;
if l_ModalResult = mrOK then
Add_CKJHD(qry_PP, qry_DWFP);
finally
Free;
end;
if l_ModalResult <> mrOK then
Exit;
VL_CKJHDH := ''; {新增}
GetGG(qry_List.FieldByName('TYPE').AsString, qry_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
SetState(True); {设置界面可修改状态}
end;
{-------------------------------------------------------------------------------}
{新制定出库计划单,基本信息的读入}
procedure TFrm_SY_CK_LMP.Add_CKJHD(A_Source_PP, A_Source_KF: TQuery);
begin
{增加零枚票出库计划单表TYS_TXPCKJHDB}
with qry_List do
begin
Append;
FieldByName('ZH').AsString := A_Source_PP.FieldByName('ZH').AsString;
FieldByName('PPMC').AsString := A_Source_PP.FieldByName('PPMC').AsString;
FieldByName('TYPE').AsString := A_Source_PP.FieldByName('TYPE').AsString;
FieldByName('CKXZ').AsString := '10'; {出库性质}
FieldByName('CKXZMC').AsString := '分配出库'; {出库性质}
FieldByName('ZBR').AsString := VG_USERName; {调用公共模块}
FieldByName('ZDRQ').AsDateTime := GetSysDate; {调用公共模块}
FieldByName('ZT').AsString := '0';
Post;
end;
qry_Detail.BeforeInsert := nil;
{零枚票出库计划单票品表TYS_TXCKJHDPPB}
with A_Source_KF do
begin
First;
while not Eof do
begin
qry_Detail.Append;
qry_Detail.FieldByName('DWDM').AsString := FieldByName('DWDM').AsString;
qry_Detail.FieldByName('DWMC').AsString := FieldByName('DWMC').AsString;
qry_Detail.FieldByName('KFDM').AsString := A_Source_PP.FieldByName('KFDM').AsString;
qry_Detail.FieldByName('KFMC').AsString := A_Source_PP.FieldByName('KFMC').AsString;
qry_Detail.FieldByName('PPDM').AsString := A_Source_PP.FieldByName('TUDM').AsString;
qry_Detail.FieldByName('PPMC').AsString := A_Source_PP.FieldByName('PPMC').AsString;
qry_Detail.FieldByName('ZK').AsString := A_Source_PP.FieldByName('ZK').AsString;
if Trim(A_Source_PP.FieldByName('JJ').AsString) <> '' then
qry_Detail.FieldByName('JJ').AsFloat := A_Source_PP.FieldByName('JJ').AsFloat / 100;
if Trim(A_Source_PP.FieldByName('XJ').AsString) <> '' then
qry_Detail.FieldByName('XJ').AsFloat := A_Source_PP.FieldByName('XJ').AsFloat / 100;
if Trim(A_Source_PP.FieldByName('JSJ').AsString) <> '' then
qry_Detail.FieldByName('JSJ').AsFloat := A_Source_PP.FieldByName('JSJ').AsFloat / 100;
qry_Detail.FieldByName('FPSL').AsString := FieldByName('SL').AsString;
qry_Detail.Post;
Next;
end;
end;
qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
{理论库存}
VL_TheoryKC := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100)); {不包括正在新增或者修改的分配数量的理论库存}
ce_KC.Value := VL_TheoryKC - GetFPSL_Total; {显示的理论库存=理论库存 - 新增加的分配数量 }
end;
{-------------------------------------------------------------------------------}
{删除计划单}
procedure TFrm_SY_CK_LMP.bbtn_DelClick(Sender: TObject);
begin
if qry_Detail.IsEmpty then
Exit;
if not (qry_List.FieldByName('ZT').AsString = '0') then
begin
Application.MessageBox(Pchar('该计划分配单已经签批,不能删除!'), '提示', 48 + mb_ok);
Exit;
end;
{询问}
if Application.MessageBox('是否要删除该出库计划单?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
Exit;
try
Data.DM.StartTransaction;
{删除零枚票出库计划单票品表TYS_TXCKJHDPPB}
with qry_tmp do
begin
Close;
SQL.Text := 'Delete from TYS_TXCKJHDPPB where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
ExecSQL;
end;
{删除零枚票出库计划单表TYS_TXPCKJHDB}
with qry_tmp do
begin
Close;
SQL.Text := 'Delete from TYS_TXPCKJHDB where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
ExecSQL;
end;
Data.DM.Commit;
except
if Data.DM.InTransaction then
Data.DM.Rollback;
Application.MessageBox(Pchar('删除出库计划单时发生错误!'), '提示', 48 + mb_ok);
Exit;
end;
qry_List.Next;
ShowList(False, qry_List.FieldByName('CKJHDH').AsString); {查询条件模块的调用,并且是否显示窗体}
end;
{-------------------------------------------------------------------------------}
{修改计划单}
procedure TFrm_SY_CK_LMP.bbtn_ModifyClick(Sender: TObject);
begin
if qry_Detail.IsEmpty then
Exit;
if not (qry_List.FieldByName('ZT').AsString = '0') then
begin
Application.MessageBox(Pchar('该计划分配单已经签批,不能修改!'), '提示', 48 + mb_ok);
Exit;
end;
VL_CKJHDH := qry_Detail.FieldByName('CKJHDH').AsString; {修改}
GetGG(qry_List.FieldByName('TYPE').AsString, qry_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
SetState(True); {修改分配计划单}
end;
{-------------------------------------------------------------------------------}
{添加出库单位}
procedure TFrm_SY_CK_LMP.bbtn_AddDWClick(Sender: TObject);
var
l_lst_DWDM: TstringList;
l_dbgPlace: TBookMark;
begin
if qry_Detail.IsEmpty then {为空时不能添加单位}
begin
Application.MessageBox('出库计划分配单为空时不能添加单位!', '提示', 48 + mb_ok);
Exit;
end;
{取计划单中的单位代码}
l_lst_DWDM := TStringList.Create;
with qry_Detail do
begin
DisableControls;
l_dbgPlace := GetBookMark;
First;
while not Eof do
begin
l_lst_DWDM.Add(FieldByName('DWDM').AsString);
Next;
end;
EnableControls;
GotoBookMark(l_dbgPlace);
FreeBookMark(l_dbgPlace);
end;
with TFrm_SY_CK_LMP_DW.Create(Application) do
try
ShowDWInfo(l_lst_DWDM); {查询计划中不存在的单位的基本信息}
if ShowModal = mrOK then
AddDW(dbg_DW); {新添加的单位}
finally
Free;
l_lst_DWDM.Free;
end;
end;
{-------------------------------------------------------------------------------}
{新添加的单位}
procedure TFrm_SY_CK_LMP.AddDW(A_dbg: TDBGrid);
var
l_KFDM, l_KFMC, l_PPDM, l_PPMC: string;
l_JJ, l_XJ, l_JSJ: double;
I: Integer;
begin
l_KFDM := qry_Detail.FieldByName('KFDM').AsString;
l_KFMC := qry_Detail.FieldByName('KFMC').AsString;
l_PPDM := qry_Detail.FieldByName('PPDM').AsString;
l_PPMC := qry_Detail.FieldByName('PPMC').AsString;
l_JJ := qry_Detail.FieldByName('JJ').AsFloat;
l_XJ := qry_Detail.FieldByName('XJ').AsFloat;
l_JSJ := qry_Detail.FieldByName('JSJ').AsFloat;
qry_Detail.BeforeInsert := nil;
if A_DBG.SelectedRows.Count = 0 then {不是选中多行状态,取当前记录}
begin
qry_Detail.Append;
qry_Detail.FieldByName('DWDM').AsString := A_DBG.DataSource.DataSet.FieldByName('DWDM').AsString;
qry_Detail.FieldByName('DWMC').AsString := A_DBG.DataSource.DataSet.FieldByName('DWJC').AsString;
qry_Detail.FieldByName('KFDM').AsString := l_KFDM;
qry_Detail.FieldByName('KFMC').AsString := l_KFMC;
qry_Detail.FieldByName('PPDM').AsString := l_PPDM;
qry_Detail.FieldByName('PPMC').AsString := l_PPMC;
qry_Detail.FieldByName('JJ').AsFloat := l_JJ;
qry_Detail.FieldByName('XJ').AsFloat := l_XJ;
qry_Detail.FieldByName('JSJ').AsFloat := l_JSJ;
qry_Detail.FieldByName('FPSL').AsInteger := 0;
qry_Detail.Post;
end
else {选中多行状态} {}
for i := 0 to A_DBG.SelectedRows.Count - 1 do
begin
A_DBG.DataSource.DataSet.GotoBookmark(pointer(A_DBG.SelectedRows.Items[i]));
qry_Detail.Append;
qry_Detail.FieldByName('DWDM').AsString := A_DBG.DataSource.DataSet.FieldByName('DWDM').AsString;
qry_Detail.FieldByName('DWMC').AsString := A_DBG.DataSource.DataSet.FieldByName('DWJC').AsString;
qry_Detail.FieldByName('KFDM').AsString := l_KFDM;
qry_Detail.FieldByName('KFMC').AsString := l_KFMC;
qry_Detail.FieldByName('PPDM').AsString := l_PPDM;
qry_Detail.FieldByName('PPMC').AsString := l_PPMC;
qry_Detail.FieldByName('JJ').AsFloat := l_JJ;
qry_Detail.FieldByName('XJ').AsFloat := l_XJ;
qry_Detail.FieldByName('JSJ').AsFloat := l_JSJ;
qry_Detail.FieldByName('FPSL').AsInteger := 0;
qry_Detail.Post;
end;
qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
end;
{-------------------------------------------------------------------------------}
{删除出库单位}
procedure TFrm_SY_CK_LMP.bbtn_DeleteDWClick(Sender: TObject);
var
l_dbgPlace: TBookMark;
begin
if qry_Detail.IsEmpty then {为空时不能删除单位}
Exit;
{询问}
if Application.MessageBox('是否要删除该出库计划单中的所选择的单位?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
Exit;
with qry_Detail do
begin
qry_Detail.BeforeDelete := nil;
qry_Detail.Delete;
l_dbgPlace := GetBookMark;
dbgEh_Detail.SumList.Active := False; {刷新删除时的合计数据更新}
dbgEh_Detail.SumList.Active := True;
GotoBookMark(l_dbgPlace);
FreeBookMark(l_dbgPlace);
qry_Detail.BeforeDelete := qry_DetailBeforeDelete;
end;
end;
{-------------------------------------------------------------------------------}
{保存数据}
procedure TFrm_SY_CK_LMP.bbtn_SaveClick(Sender: TObject);
var
l_Caption: string;
begin
if not Can_CK(l_Caption) then
begin
Application.MessageBox(Pchar(l_Caption), '提示', 48 + mb_ok);
Exit;
end;
try
Data.DM.StartTransaction;
Save_Info; {保存出库信息}
Data.DM.Commit;
(* 签批和取消签批在权限控制中处理
bbtn_CancelQP.Enabled := False;
*)
except
if Data.DM.InTransaction then
Data.DM.Rollback;
Application.MessageBox(Pchar('制定出库计划单时发生错误!'), '提示', 48 + mb_ok);
Exit;
end;
qry_Detail.EnableControls;
SetState(False); {设置界面可修改状态}
ShowList(False, VL_CKJHDH); {查询条件模块的调用,并且是否显示窗体}
end;
{-------------------------------------------------------------------------------}
{是否可以出库}
function TFrm_SY_CK_LMP.Can_CK(var A_Caption: string): boolean;
var
l_dbgPlace: TBookMark;
l_SL: Integer;
begin
Result := False;
l_SL := 0;
if qry_Detail.IsEmpty then
begin
A_Caption := '计划分配单不能为空!';
Exit;
end;
{取计划单中的分配总数}
with qry_Detail do
begin
DisableControls;
l_dbgPlace := GetBookMark;
First;
while not Eof do
begin
if Trim(FieldByName('FPSL').AsString) = '' then
A_Caption := '"' + FieldByName('DWMC').AsString + '"的分配数量不能为空!'
else if FieldByName('FPSL').AsInteger <= 0 then
A_Caption := '"' + FieldByName('DWMC').AsString + '"的分配数量必须合法!';
l_SL := l_SL + FieldByName('FPSL').AsInteger;
if ((FieldByName('JSJ').AsString = '') or (FieldByName('JSJ').AsInteger = 0))
and ((FieldByName('ZK').AsString = '') or (FieldByName('ZK').AsInteger = 0)) then
A_Caption := '"' + FieldByName('DWMC').AsString + '"的结算价和折扣必须合法!';
Next;
end;
EnableControls;
GotoBookMark(l_dbgPlace);
FreeBookMark(l_dbgPlace);
end;
if Trim(A_Caption) <> '' then {分配数量不能为空!}
Exit;
{刷新理论库存??????}
if VL_CKJHDH = '' then {新增}
ce_KC.Value := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100)) - l_SL {理论库存 - 新增的分配数量}
else {修改}
ce_KC.Value := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100))
+ VL_FPSL_Modify - l_SL; {理论库存 + 分配数量的改变量}
A_Caption := '出库数量超出理论库存,不能出库!';
Result := ce_KC.Value >= 0;
end;
{-------------------------------------------------------------------------------}
{保存出库信息}
procedure TFrm_SY_CK_LMP.Save_Info;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -