📄 ckjh_jjw.pas
字号:
begin
{计算出库总金额}
with qry_Detail do
begin
Edit;
if (FieldByName('XJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
FieldByName('CKZJE').AsFloat := FieldByName('XJ').AsFloat * FieldByName('FPSL').AsInteger;
{用结算价计算出结算金额}
if (FieldByName('ZK').AsString = '0') or (FieldByName('ZK').AsString = '') then
if (FieldByName('JSJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
FieldByName('JSJE').AsFloat := FieldByName('JSJ').AsFloat * FieldByName('FPSL').AsInteger;
{用折扣计算出结算金额}
if (FieldByName('JSJ').AsString = '0') or (FieldByName('JSJ').AsString = '') then
if (FieldByName('ZK').AsString <> '') and (FieldByName('FPSL').AsString <> '')
and (FieldByName('XJ').AsString <> '') then
FieldByName('JSJE').AsFloat := (FieldByName('ZK').AsFloat / 100) * FieldByName('FPSL').AsInteger
* FieldByName('XJ').AsFloat;
end;
end;
{-------------------------------------------------------------------------------}
{保存数据}
procedure TFrm_CKJH_JJW.bbtn_SaveClick(Sender: TObject);
var
l_Caption: String;
l_TmpDH: 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;
except
if Data.DM.InTransaction then
Data.DM.Rollback;
Application.MessageBox(Pchar('制定出库计划单时发生错误!'), '提示', 48 + mb_ok);
qry_Detail.EnableControls;
Exit;
end;
qry_Detail.EnableControls;
Set_State(False); {设置界面可修改状态}
{涮洗界面缺}
l_TmpDH := VL_CKJHDH;
bbtn_Search.Click;
qry_List.Locate('CKJHDH', l_TmpDH, []);
end;
{-------------------------------------------------------------------------------}
{取消}
procedure TFrm_CKJH_JJW.bbtn_CancelClick(Sender: TObject);
begin
{询问}
if Application.MessageBox('是否要取消对出库计划单的修改?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
Exit;
qry_Detail.CancelUpdates;
qry_List.CancelUpdates;
qry_Detail.CommitUpdates;
qry_List.CommitUpdates;
{※※※顺序不可以更换※※※}
Set_State(False); {设置界面可修改状态}
qry_List.AfterScroll(nil); {刷新数据}
if VL_CKJHDH = '' then {新增时}
pgc_JY.ActivePageIndex := 0;
end;
{-------------------------------------------------------------------------------}
{判断是否可以出库 判断库存缺}
function TFrm_CKJH_JJW.Can_CK(var A_Caption: string): boolean;
var
l_dbgPlace: TBookMark;
l_Index: Integer;
begin
Result := False;
if qry_Detail.IsEmpty then
begin
A_Caption := '计划分配单不能为空!';
Exit;
end;
{取计划单中的分配总数}
with qry_Detail do
try
AfterScroll := nil;
l_dbgPlace := GetBookMark;
First;
while not Eof do
begin
if Trim(FieldByName('FPSL').AsString) = '' then
A_Caption := '"' + FieldByName('PPMC').AsString + '"的分配数量不能为空!'
else if FieldByName('FPSL').AsInteger <= 0 then
A_Caption := '"' + FieldByName('PPMC').AsString + '"的分配数量必须合法!';
if ((FieldByName('JSJ').AsString = '') or (FieldByName('JSJ').IsNull))
and ((FieldByName('ZK').AsString = '') or (FieldByName('ZK').IsNull)) then
A_Caption := '"' + FieldByName('PPMC').AsString + '"的结算价和折扣必须合法!';
{判断库存是否足够}
l_Index := VL_PPDMList.IndexOf(FieldByName('PPDM').AsString);
if l_Index > -1 then
if StrToFloat(VL_PPKCList[l_Index]) < FieldByName('FPSL').AsFloat then
A_Caption := '"' + FieldByName('PPMC').AsString + '"的的库存不够!';
Next;
end;
GotoBookMark(l_dbgPlace);
finally
FreeBookMark(l_dbgPlace);
AfterScroll := qry_DetailAfterScroll;
end;
if Trim(A_Caption) <> '' then {分配数量不能为空!}
Exit;
Result := True;
end;
{-------------------------------------------------------------------------------}
{保存}
procedure TFrm_CKJH_JJW.Save_Info;
begin
{出库计划单表TYS_JYCKJHDB}{CKJHDH, CKXZ, ZBR, PZR, ZDRQ, BZ, ZT}
if Trim(VL_CKJHDH) = '' then {新增} {}
begin
VL_CKJHDH := Create_DH('g_jypfpd', 'JW', '', ''); {调用存储过程,生成单号}
with qry_tmp do
begin
Close;
SQL.Text := 'insert into TYS_JYCKJHDB (CKJHDH, CKXZ, ZBR, PZR, ZDRQ, ZT) values(' +
QuotedStr(VL_CKJHDH) + ', ' + QuotedStr(qry_List.FieldByName('CKXZ').AsString) + ', ' +
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}{删除后,重新添加票品}
with qry_tmp do
begin
Close;
SQL.Text := 'delete TYS_JYCKJHDPPB where CKJHDH = ' + QuotedStr(VL_CKJHDH);
ExecSQL;
end;
with qry_Detail do
begin
DisableControls;
First;
while not Eof do
begin
qry_tmp.Close;
qry_tmp.SQL.Text := 'insert into TYS_JYCKJHDPPB (CKJHDH, DWDM, PPDM, KFDM, PPMC, JJ , XJ, ZK, JSJ, FPSL,DWMC)values( ' +
QuotedStr(VL_CKJHDH) + ', ' +
QuotedStr(FieldByName('DWDM').AsString) + ', ' +
QuotedStr(FieldByName('PPDM').AsString) + ', ' +
QuotedStr(FieldByName('KFDM').AsString) + ', ' +
QuotedStr(FieldByName('PPMC').AsString) + ', ' +
QuotedStr(FloatToStr(FieldByName('JJ').AsFloat * 100)) + ', ' +
QuotedStr(FloatToStr(FieldByName('XJ').AsFloat * 100)) + ', ' +
QuotedStr(FieldByName('ZK').AsString) + ', ' +
QuotedStr(FloatToStr(FieldByName('JSJ').AsFloat * 100)) + ', ' +
QuotedStr(FieldByName('FPSL').AsString) + ',' +
// QuotedStr(FieldByName('DWMC').AsString) +
QuotedStr(qry_List.FieldByName('DWJC').AsString) +
' )';
qry_tmp.ExecSQL;
Next;
end;
EnableControls;
end;
{如果是有源头的,则置其状态}
if VL_QLDH <> '' then
with qry_Tmp do
begin
Close;
SQL.Text := 'update TY_JJWXQB set ZT =1 where QLDH =' + QuotedStr(VL_QLDH);
ExecSQL;
end;
end;
{-------------------------------------------------------------------------------}
{生产单号}
function TFrm_CKJH_JJW.Create_DH(A_BILLID, A_SORTCODE, A_DEPARTMENT,
A_CYEAR: string): string;
begin
with sp_DH do
begin
ParamByName('BILLID').AsString := a_BILLID;
ParamByName('SORTCODE').AsString := a_SORTCODE;
ParamByName('DEPARTMENT').AsString := a_DEPARTMENT;
ParamByName('CYEAR').AsString := a_CYEAR;
ExecProc;
Result := Params[0].AsString;
end;
end;
{-------------------------------------------------------------------------------}
{删除分配单}
procedure TFrm_CKJH_JJW.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;
bbtn_Search.Click;
qry_List.Locate('CKJHDH', VL_CKJHDH, []);
end;
{-------------------------------------------------------------------------------}
{修改}
procedure TFrm_CKJH_JJW.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); {取得凑整的规格}
Set_State(True); {修改分配计划单}
end;
{-------------------------------------------------------------------------------}
{添加票品}
procedure TFrm_CKJH_JJW.bbtn_AddPPClick(Sender: TObject);
var
l_Mark: TBookMark;
l_PPDMList: TStringList;
begin
{取得已经选择的票品代码}
l_PPDMList := TStringList.Create;
if not qry_Detail.IsEmpty then
try
qry_Detail.AfterScroll := nil;
qry_Detail.DisableControls;
l_Mark := qry_Detail.GetBookmark;
qry_Detail.First;
while not qry_Detail.Eof do
begin
// l_PPDMList.Add(qry_Detail.FieldByName('PPDM').AsString);
l_PPDMList.Add('PPDM=' + QuotedStr(qry_Detail.FieldByName('PPDM').AsString) + ' and KFDM=' + QuotedStr(qry_Detail.FieldByName('KFDM').AsString) + ' and JJ=' + FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100));
qry_Detail.Next;
end;
finally
qry_Detail.GotoBookmark(l_Mark);
qry_Detail.FreeBookmark(l_Mark);
qry_Detail.EnableControls;
qry_Detail.AfterScroll := qry_DetailAfterScroll;
end;
{打开窗口供用户选择}
with TFrm_CKJH_JJW_AddPP2.Create(Application) do
try
qry_Detail.BeforeInsert := nil;
qry_Detail.AfterScroll := nil;
Set_TJ(l_PPDMList);
if ShowModal = mrOk then
Add_WYTSJ(qry_List.FieldByName('DWDM').AsString, qry_SelPP, dbg_PP);
finally
free;
qry_Detail.AfterScroll := qry_DetailAfterScroll;
qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
end;
l_PPDMList.Free;
qry_Detail.AfterScroll(nil);
end;
{-------------------------------------------------------------------------------}
{删除票品}
procedure TFrm_CKJH_JJW.bbtn_DeletePPClick(Sender: TObject);
var
l_dbgPlace: TBookMark;
l_Index: Integer;
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;
l_Index := VL_PPDMList.IndexOf(qry_Detail.Fieldbyname('PPDM').AsString);
if l_Index > -1 then
begin
VL_PPDMList.Delete(l_Index);
VL_PPKCList.Delete(l_Index);
end;
qry_Detail.Delete;
l_dbgPlace := GetBookMark;
dbgEh_Detail.SumList.Active := False; {刷新删除时的合计数据更新}
dbgEh_Detail.SumList.Active := True;
GotoBookMark(l_dbgPlace);
FreeBookMark(l_dbgPlace);
end;
end;
{-------------------------------------------------------------------------------}
{添加五原头数据}
procedure TFrm_CKJH_JJW.Add_WYTSJ(a_DWDM: String; a_Query: TQuery; a_DbGrid: TDBGrid);
begin
with a_Query do
begin
First;
while not Eof do
begin
if a_DbGrid.SelectedRows.CurrentRowSelected then
begin
VL_PPDMList.Add(FieldbyName('PPDM').AsString);
VL_PPKCList.Add(FLoatToStr(PS_GetSYTS(FieldByName('KFDM').AsString, FieldByName('PPDM').AsString, FieldByName('JJ').AsFloat)));
qry_Detail.Append;
VL_CanPost := False;
qry_Detail.FieldByName('DWDM').AsString := a_DWDM;
if rg_Round.ItemIndex < 2 then {如果需要凑包 得到包装规格}
GetGG(FieldbyName('PPDM').AsString);
qry_Detail.FieldByName('KFDM').AsString := FieldByName('KFDM').AsString;
qry_Detail.FieldByName('KFMC').AsString := FieldByName('KFMC').AsString;
qry_Detail.FieldByName('PPDM').AsString := FieldbyName('PPDM').AsString;
qry_Detail.FieldByName('PPMC').AsString := FieldByName('PPMC').AsString;
if FieldbyName('JJ').AsString <> '' then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -