?? 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 + -