?? sy_ck_lmp.pas
字號:
Post;
end;
except
Application.MessageBox('所輸入的折扣必須合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
Abort;
end;
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
end;
{-------------------------------------------------------------------------------}
{計算價輸入時的合法性判斷,以及和折扣的互斥}
procedure TFrm_SY_CK_LMP.qry_DetailJSJSetText(Sender: TField;
const Text: String);
var
l_Text: string;
l_SetTextEvent: TFieldSetTextEvent;
begin
l_SetTextEvent := qry_DetailJSJ.OnSetText;
qry_DetailJSJ.OnSetText := nil; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
l_Text := Text;
if Trim(Text) = '' then
begin
Sender.AsString := Text;
qry_DetailJSJ.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
Exit;
end
else {和折扣的互斥}
qry_Detail.FieldByName('ZK').AsString := '0';
try
if (StrToFloat(l_Text) >= 1000) or (StrToFloat(l_Text) <= 0) then
Abort; {觸發(fā)abort異常}
Sender.AsFloat := StrToFloat(Text);
with qry_Detail do
begin
Edit;
{用結(jié)算價計算出結(jié)算金額}
if (FieldByName('JSJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
FieldByName('JSJE').AsFloat := FieldByName('JSJ').AsFloat * FieldByName('FPSL').AsInteger;
Post;
end;
except
Application.MessageBox('所輸入的結(jié)算價必須合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailJSJ.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
Abort;
end;
qry_DetailJSJ.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
end;
{-------------------------------------------------------------------------------}
{結(jié)算價以元顯示}
procedure TFrm_SY_CK_LMP.qry_DetailJSJGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
{刪除,結(jié)算價結(jié)算總金額出庫總金額都調(diào)用進價的顯示,保留小數(shù)點后3位 by jhshao 2003.05.09}
(* if Trim(Sender.AsString) = '' then
Exit;
try
if DisplayText then {顯示狀態(tài)}
begin
if Sender.AsString <> '' then
Text := FormatFloat('¥#,##0.00', Sender.AsFloat);
end
else {輸入狀態(tài)}
Text := FormatFloat('#0.##', Sender.AsFloat)
except
end;
*)
end;
{-------------------------------------------------------------------------------}
{輸入數(shù)據(jù)后,進行湊整操作}
procedure TFrm_SY_CK_LMP.qry_DetailFPSLSetText(Sender: TField;
const Text: String);
var
l_Dest: Integer;
L_Text: string;
l_SetTextEvent: TFieldSetTextEvent;
begin
l_SetTextEvent := qry_DetailFPSL.OnSetText;
qry_DetailFPSL.OnSetText := nil; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
l_Text := Text;
if Trim(Text) = '' then
begin
Sender.AsString := Text;
qry_DetailFPSL.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
Exit;
end;
try
if (StrToFloat(Text) >= 10000000) or (StrToFloat(Text) <= 0) then
Abort; {觸發(fā)abort異常}
except
Application.MessageBox('所輸入的分配數(shù)量必須合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailFPSL.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
Abort;
Exit;
end;
try
Sender.AsInteger := Trunc(StrToFloat(l_Text)); {分配數(shù)量只能為自然數(shù)}
{顯示出修改后的理論庫存}
ce_KC.Value := VL_TheoryKC - GetFPSL_Total; {顯示的理論庫存=理論庫存 - 分配數(shù)量 }
l_Dest := 0;
case rg_Round.ItemIndex of
0: {湊包} {}
l_Dest := StrToInt(fcb_BZGG.FieldString);
1: {湊版} {}
l_Dest := VL_Ban_GG;
2: {不用湊整數(shù)} {}
Exit;
end;
qry_Detail.Edit;
qry_Detail.FieldByName('FPSL').AsInteger :=
GetRoundNumber(Trunc(StrToFloat(l_Text)), l_Dest, rg_Round_Style.ItemIndex); {返回湊整后的數(shù)據(jù)}
qry_Detail.Post;
finally
qry_DetailFPSL.OnSetText := l_SetTextEvent; {防止用鼠標點擊其他記錄時遞歸調(diào)用}
end;
end;
{-------------------------------------------------------------------------------}
{判斷是否湊包、湊版,以及計算出庫總金額、結(jié)算金額}
procedure TFrm_SY_CK_LMP.qry_DetailFPSLValidate(Sender: TField);
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;
{用結(jié)算價計算出結(jié)算金額}
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;
{用折扣計算出結(jié)算金額}
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_SY_CK_LMP.dbg_ListDblClick(Sender: TObject);
begin
pgc_LM.ActivePageIndex := 1;
end;
{-------------------------------------------------------------------------------}
{根據(jù)計劃的不同狀態(tài)繪制DBGrid的顏色}
procedure TFrm_SY_CK_LMP.dbg_ListDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
dbg_List.Canvas.Brush.Color := lbl_Color_0.Color;
try
if not qry_List.IsEmpty then
case qry_List.FieldByName('ZT').AsInteger of
0: dbg_List.Canvas.Brush.Color := lbl_Color_0.Color; {正常}
1, 3: dbg_List.Canvas.Brush.Color := lbl_Color_1.Color; {已經(jīng)處理}
2: dbg_List.Canvas.Brush.Color := lbl_Color_2.Color; {已經(jīng)簽批}
end;
except
end;
if gdSelected in State then
begin
dbg_List.Canvas.Brush.Color := clNavy;
dbg_List.Canvas.Font.Color := clWhite;
end;
dbg_List.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
{-------------------------------------------------------------------------------}
{查詢出庫計劃單}
procedure TFrm_SY_CK_LMP.bbtn_SearchClick(Sender: TObject);
begin
ShowList(True, ''); {查詢條件模塊的調(diào)用,并且是否顯示窗體}
end;
{-------------------------------------------------------------------------------}
{查詢條件模塊的調(diào)用,并且是否顯示窗體}
procedure TFrm_SY_CK_LMP.ShowList(A_ShowModal: Boolean; A_CKJHDH: string);
var
l_ModalResult: Integer;
begin
l_ModalResult := mrOk;
{初始化時打開模塊時默認調(diào)出一周以內(nèi)的施工單}
with TFrm_SY_CK_LMP_Sele.Create(Application) do
try
Show_Condition(VL_CKJH); {查詢條件}
if A_ShowModal then
l_ModalResult := ShowModal
else
bbtn_OKClick(nil);
finally
Free;
end;
{如果需要進行查詢,則根據(jù)查詢條件取出查詢結(jié)果}
if l_ModalResult = mrOK then
with qry_List do
begin
Close;
SQL.Text := VL_CKJH^.sql;
Open;
if IsEmpty then
qry_listAfterScroll(nil);
if A_CKJHDH <> '' then
Locate('CKJHDH', A_CKJHDH, []);
end;
end;
{-------------------------------------------------------------------------------}
{簽批該計劃分配單}
procedure TFrm_SY_CK_LMP.bbtn_QPClick(Sender: TObject);
begin
if qry_list.IsEmpty then
Exit;
if bbtn_Save.Enabled then
begin
Application.MessageBox(Pchar('該計劃分配單正在編輯狀態(tài),不能簽批!'), '提示', 48 + mb_ok);
Exit;
end;
if not (qry_List.FieldByName('ZT').AsString = '0') then
begin
Application.MessageBox(Pchar('該計劃分配單已經(jīng)簽批,不能再次簽批!'), '提示', 48 + mb_ok);
Exit;
end;
{詢問}
if Application.MessageBox('是否要簽批該出庫計劃單?', '詢問', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
Exit;
try
Data.DM.StartTransaction;
{零枚票出庫計劃單表TYS_TXPCKJHDB 的ZT為2-已簽批}
with qry_tmp do
begin
Close;
SQL.Text := 'update TYS_TXPCKJHDB set ZT=''2'', PZR=' + QuotedStr(VG_UserName) +
' 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('簽批出庫計劃單時發(fā)生錯誤!'), '提示', 48 + mb_ok);
Exit;
end;
ShowList(False, qry_List.FieldByName('CKJHDH').AsString); {查詢條件模塊的調(diào)用,并且是否顯示窗體}
end;
{-------------------------------------------------------------------------------}
{取消已經(jīng)簽批該計劃分配單}
procedure TFrm_SY_CK_LMP.bbtn_CancelQPClick(Sender: TObject);
begin
if qry_list.IsEmpty then
Exit;
if bbtn_Save.Enabled then
begin
Application.MessageBox(Pchar('該計劃分配單正在編輯狀態(tài),不能取消簽批!'), '提示', 48 + mb_ok);
Exit;
end;
if not (qry_List.FieldByName('ZT').AsString = '2') then
begin
Application.MessageBox(Pchar('該計劃分配單未簽批或者已經(jīng)處理,不能取消簽批!'), '提示', 48 + mb_ok);
Exit;
end;
{詢問}
if Application.MessageBox('是否要取消已經(jīng)簽批該出庫計劃單?', '詢問', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
Exit;
try
Data.DM.StartTransaction;
{零枚票出庫計劃單表TYS_TXPCKJHDB 的ZT為0-未簽批}
with qry_tmp do
begin
Close;
SQL.Text := 'update TYS_TXPCKJHDB set ZT=''0'', PZR=' + QuotedStr('') +
' 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('取消簽批出庫計劃單時發(fā)生錯誤!'), '提示', 48 + mb_ok);
Exit;
end;
ShowList(False, qry_List.FieldByName('CKJHDH').AsString); {查詢條件模塊的調(diào)用,并且是否顯示窗體}
end;
{-------------------------------------------------------------------------------}
{打印模塊}
procedure TFrm_SY_CK_LMP.bbtn_PrintClick(Sender: TObject);
var
L_ModalResult: Integer;
l_ModalPrint: Boolean; {是否套打}
begin
if qry_list.IsEmpty then
Exit;
L_ModalResult := Application.MessageBox('打印出庫計劃單時是否進行套打?', '詢問', MB_ICONQUESTION + MB_YESNOCANCEL + MB_DEFBUTTON3);
if L_ModalResult = ID_Cancel then
Exit;
l_ModalPrint := l_ModalResult = mrYES;
with TFrm_SY_CK_LMP_Print.Create(Application) do
try
SetParams(qry_List.FieldByName('CKJHDH').AsString, l_ModalPrint);
{取得報表總頁數(shù)}
qr_Print.Prepare;
SetParams(qry_List.FieldByName('CKJHDH').AsString, l_ModalPrint, qr_Print.QRPrinter.PageCount);
qr_Print.PreviewModal;
finally
Free;
end;
end;
{-------------------------------------------------------------------------------}
{是否應(yīng)用所有單位導(dǎo)致分配數(shù)量的變化}
procedure TFrm_SY_CK_LMP.chk_RoundClick(Sender: TObject);
begin
rg_RoundClick(nil);
end;
{-------------------------------------------------------------------------------}
{湊包湊版的選擇、湊整類型的選擇,和包裝規(guī)格的變化導(dǎo)致分配數(shù)量的變化}
procedure TFrm_SY_CK_LMP.rg_RoundClick(Sender: TObject);
var
l_SingleDest: Integer;
begin
l_SingleDest := 0;
case rg_Round.ItemIndex of
0: {湊包} {}
begin
lbl_BZGG.Visible := True;
fcb_BZGG.Visible := True;
rg_Round_Style.Visible := True;
if fcb_BZGG.Items.Count = 0 then
begin
Application.MessageBox('包裝規(guī)格可能不完整,無法按包進行湊整!', '提示', MB_OK + MB_IconInformation);
rg_Round.ItemIndex := 2; {默認為不湊}
Exit;
end;
l_SingleDest := StrToInt(fcb_BZGG.FieldString);
end;
1: {湊版} {}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -