📄 sy_ck_jyp.pas
字号:
ce_KC.Value := VL_TheoryKC - GetFPSL_Total; {显示的理论库存=理论库存 - 分配数量 }
end;
end;
{-------------------------------------------------------------------------------}
{新制定出库计划单}
procedure TFrm_SY_CK_JYP.bbtn_AddClick(Sender: TObject);
var
l_ModalResult: Integer;
begin
with TFrm_SY_CK_JYP_Add.Create(Application) do
try
l_ModalResult := ShowModal;
if l_ModalResult = mrOK then
begin
Add_CKJHD(qry_PP, qry_DWFP);
GetGG(qry_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
self.rg_Round.ItemIndex := rg_Round.ItemIndex;
Self.rg_Round_Style.ItemIndex := rg_Round_Style.ItemIndex;
self.rg_Round.OnClick(self.rg_Round);
end;
finally
Free;
end;
if l_ModalResult <> mrOK then
Exit;
VL_CKJHDH := ''; {新增}
SetState(True); {设置界面可修改状态}
{凑包凑版YJ}
SetRounding;
end;
{-------------------------------------------------------------------------------}
{新制定出库计划单,基本信息的读入}
procedure TFrm_SY_CK_JYP.Add_CKJHD(A_Source_PP, A_Source_KF: TQuery);
begin
{增加零枚票出库计划单表TYS_JYCKJHDB}
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('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_JYCKJHDPPB}
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('PPDM').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_JYP.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_JYCKJHDPPB}
with qry_tmp do
begin
Close;
SQL.Text := 'Delete from TYS_JYCKJHDPPB where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
ExecSQL;
end;
{删除零枚票出库计划单表TYS_JYCKJHDB}
with qry_tmp do
begin
Close;
SQL.Text := 'Delete from TYS_JYCKJHDB 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_JYP.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_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
SetState(True); {修改分配计划单}
end;
{-------------------------------------------------------------------------------}
{添加出库单位}
procedure TFrm_SY_CK_JYP.bbtn_AddDWClick(Sender: TObject);
var
l_lst_DWDM: TstringList;
l_dbgPlace: TBookMark;
l_PPDM: String;
begin
if qry_Detail.IsEmpty then {为空时不能添加单位}
begin
Application.MessageBox('出库计划分配单为空时不能添加单位!', '提示', 48 + mb_ok);
Exit;
end;
l_PPDM := qry_Detail.FieldByName('PPDM').AsString;
{取计划单中的单位代码}
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_JYP_DW.Create(Application) do
try
ShowDWInfo(l_lst_DWDM); {查询计划中不存在的单位的基本信息}
if ShowModal = mrOK then
AddDW(dbg_DW, l_PPDM); {新添加的单位}
finally
Free;
l_lst_DWDM.Free;
end;
end;
{-------------------------------------------------------------------------------}
{新添加的单位}
procedure TFrm_SY_CK_JYP.AddDW(A_dbg: TDBGrid; a_PPDM: String);
var
l_KFDM, l_KFMC, l_PPDM, l_PPMC, l_JJ, l_XJ, l_JSJ, l_ZK: string; {增加折扣显示}
I: Integer;
l_SQL: String;
begin
{取得该票品的折扣}
with qry_Tmp do
begin
Close;
SQL.Text := 'Select a.ZK ' +
' from TYS_JYPPKC a, TGS_KFRYDZB c, TGS_KFB d ' +
' where d.KFDM = a.KFDM and c.KFDM = d.KFDM ' +
' and c.YGDM =' + QuotedStr(VG_UserID) + ' and a.PPDM=' + QuotedStr(a_PPDM);
Open;
l_ZK := FieldByName('ZK').AsString;
Close;
end;
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').AsString;
l_XJ := qry_Detail.FieldByName('XJ').AsString;
l_JSJ := qry_Detail.FieldByName('JSJ').AsString;
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').AsString := l_JJ;
qry_Detail.FieldByName('XJ').AsString := l_XJ;
qry_Detail.FieldByName('JSJ').AsString := l_JSJ;
qry_Detail.FieldByName('FPSL').AsInteger := 0;
qry_Detail.FieldByName('ZK').AsString := l_ZK;
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').AsString := l_JJ;
qry_Detail.FieldByName('XJ').AsString := l_XJ;
qry_Detail.FieldByName('JSJ').AsString := l_JSJ;
qry_Detail.FieldByName('ZK').AsString := l_ZK;
qry_Detail.FieldByName('FPSL').AsInteger := 0;
qry_Detail.Post;
end;
qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
end;
{-------------------------------------------------------------------------------}
{删除出库单位}
procedure TFrm_SY_CK_JYP.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;
CE_KC.Value := CE_KC.Value + qry_Detail.FieldByName('FPSL').AsInteger; {更新库存}
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_JYP.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_JYP.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').AsFloat = 0))
and ((FieldByName('ZK').AsString = '') or (FieldByName('ZK').AsFloat = 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_JYP.Save_Info;
begin
{零枚票出库计划单表TYS_JYCKJHDB}{CKJHDH, CKXZ, ZBR, PZR, ZDRQ, BZ, ZT}
if Trim(VL_CKJHDH) = '' then {新增} {}
begin
VL_CKJHDH := Create_DH('g_jypfpd', 'JN', '', ''); {调用存储过程,生成单号}
with qry_tmp do
begin
Close;
SQL.Text := 'insert into TYS_JYCKJHDB (CKJHDH, CKXZ, ZBR, PZR, ZDRQ, ZT) values(' +
QuotedStr(VL_CKJHDH) + ', ' + QuotedStr('10') + ', ' +
QuotedStr(VG_USERName) + ', ' + QuotedStr('') + ', ' +
' Trunc(sysdate, ''DD'') , ' + QuotedStr('0') +
')';
ExecSQL;
end;
end
else {修改} {}
begin
with qry_tmp do
begin
Close;
SQL.Text := 'update TYS_JYCKJHDB set ' +
' ZBR = ' + QuotedStr(VG_USERName) + ', ' +
' ZDRQ = Trunc(sysdate, ''DD''), ' +
' ZT = ' + QuotedStr('0') +
' where CKJHDH = ' + QuotedStr(VL_CKJHDH);
ExecSQL;
end;
end;
{零枚票出库计划单票品表TYS_JYCKJHDPPB}{删除后,重新添加票品}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -