📄 ckjh_jjw.pas
字号:
qry_Detail.FieldByName('JJ').AsFloat := FieldByName('JJ').AsFloat / 100;
qry_Detail.FieldByName('ZK').AsString := FieldByName('ZK').AsString;
if Trim(FieldByName('XJ').AsString) <> '' then
qry_Detail.FieldByName('XJ').AsFloat := FieldByName('XJ').AsFloat / 100;
if Trim(FieldByName('JSJ').AsString) <> '' then
qry_Detail.FieldByName('JSJ').AsFloat := FieldByName('JSJ').AsFloat / 100;
qry_Detail.FieldByName('FPSL_Old').AsFloat := 0;
qry_Detail.FieldByName('FPSL').AsFloat := 0;
if qry_Detail.State in [dsEdit, dsInsert] then
qry_Detail.Post;
VL_CanPost := True;
end;
Next;
end;
end;
end;
{-------------------------------------------------------------------------------}
{取得该明细中所有票品的的库存,并且显示}
procedure TFrm_CKJH_JJW.pgc_JYChange(Sender: TObject);
begin
if pgc_JY.ActivePageIndex = 0 then
Exit;
Get_PPKCInfo; {得到库存信息}
qry_Detail.AfterScroll(nil);
end;
{-------------------------------------------------------------------------------}
{双击显示详细信息}
procedure TFrm_CKJH_JJW.dbg_ListDblClick(Sender: TObject);
begin
pgc_JY.ActivePageIndex := 1;
Get_PPKCInfo; {得到库存信息}
qry_Detail.AfterScroll(nil);
end;
{-------------------------------------------------------------------------------}
{得到当前票品库存信息}
procedure TFrm_CKJH_JJW.Get_PPKCInfo;
var
l_Mark: TBookMark;
begin
{}
if qry_Detail.IsEmpty then
Exit;
if VL_PPDMList.Count > 0 then
Exit;
with qry_Detail do
try
AfterScroll := nil;
DisableControls;
l_Mark := GetBookmark;
First;
while not Eof do
begin
VL_PPDMList.Add(FieldByName('PPDM').AsString);
VL_PPKCList.Add(FloatToStr(PS_GetSYTS(FieldByName('KFDM').AsString, FieldByName('PPDM').AsString, FieldByName('JJ').AsFloat * 100, qry_Detail.FieldByName('CKJHDH').AsString)));
Next;
end;
finally
GotoBookmark(l_Mark);
FreeBookmark(l_Mark);
EnableControls;
AfterScroll := qry_DetailAfterScroll;
end;
end;
{-------------------------------------------------------------------------------}
{签批该计划分配单}
procedure TFrm_CKJH_JJW.bbtn_QPClick(Sender: TObject);
var
l_Tmp: String;
begin
if qry_list.IsEmpty then
Exit;
{YJ}
if edt_PZR.Text = '' then
begin
Application.MessageBox('没有输入签批人,无法继续!', '提示', MB_OK + MB_ICONINFORMATION);
Exit;
end;
if bbtn_Save.Enabled then
begin
Application.MessageBox(Pchar('该计划分配单正在编辑状态,不能签批!'), '提示', 48 + mb_ok);
Exit;
end;
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
{集邮票出库计划单表TYS_TXPCKJHDB 的ZT为2-已签批}
{集邮票出库计划单表TYS_JYPCKJHDB 的ZT为2-已签批}
with qry_tmp do
begin
Close;
SQL.Text := 'update TYS_JYCKJHDB set ZT=''2'', PZR=' + QuotedStr(edt_PZR.Text) +
' where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
ExecSQL;
end;
except
Application.MessageBox(Pchar('签批出库计划单时发生错误!'), '提示', 48 + mb_ok);
Exit;
end;
{刷新}
l_Tmp := VL_CKJHDH;
bbtn_Search.Click;
qry_List.Locate('CKJHDH', l_Tmp, []);
end;
{-------------------------------------------------------------------------------}
{取消签批}
procedure TFrm_CKJH_JJW.bbtn_CancelQPClick(Sender: TObject);
var
l_Tmp: String;
begin
if qry_list.IsEmpty then
Exit;
if bbtn_Save.Enabled then
begin
Application.MessageBox(Pchar('该计划分配单正在编辑状态,不能取消签批!'), '提示', 48 + mb_ok);
Exit;
end;
if not (qry_List.FieldByName('ZT').AsString = '2') then
begin
Application.MessageBox(Pchar('该计划分配单未签批或者已经处理,不能取消签批!'), '提示', 48 + mb_ok);
Exit;
end;
{询问}
if Application.MessageBox('是否要取消已经签批该计划单?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
Exit;
try
{集邮票出库计划单表TYS_JYPCKJHDB 的ZT为0-未签批}
with qry_tmp do
begin
Close;
SQL.Text := 'update TYS_JYCKJHDB set ZT=''0'', PZR=' + QuotedStr('') +
' where CKJHDH =' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString);
ExecSQL;
end;
except
Application.MessageBox(Pchar('取消签批出库计划单时发生错误!'), '提示', 48 + mb_ok);
Exit;
end;
{刷新}
l_Tmp := VL_CKJHDH;
bbtn_Search.Click;
qry_List.Locate('CKJHDH', l_Tmp, []);
end;
{-------------------------------------------------------------------------------}
{把原来的打印抄过来了,算法很奇怪...}
procedure TFrm_CKJH_JJW.bbtn_PrintClick(Sender: TObject);
var
StrSQL: string;
begin
if qry_List.IsEmpty then
Exit;
if VL_CKJHDH = '' then
begin
Application.MessageBox('请选择分配单号!', '提示', mb_Ok + MB_ICONINFORMATION);
Exit;
end;
Application.CreateForm(TFrm_RichEdit, Frm_RichEdit);
Application.CreateForm(TCKJHDCX_RPT, CKJHDCX_RPT);
with CKJHDCX_RPT, Frm_RichEdit do
try
StrSQL := 'select ROWNUM, A.CKJHDH, A.CKXZ, A.ZBR, A.PZR,A.ZDRQ, A.BZ ,B.DWMC, B.PPMC,C.ZH,B.XJ/100 XJ, DECODE(B.ZK,0,B.JSJ/100,B.ZK) ZK, B.JSJ/100 JSJ,';
StrSQL := StrSQL + ' B.FPSL,decode(JSJ,0,B.ZK*B.XJ*B.FPSL/10000, B.JSJ*B.FPSL/100) JE FROM TYS_JYCKJHDB A,TYS_JYCKJHDPPB B,TB_YZPPXXB C where A.CKJHDH = B.CKJHDH and B.PPDM=C.TDM AND A.CKJHDH =''' + VL_CKJHDH + '''';
Qry_Print.SQL.Text := StrSQL;
Qry_Print.Open;
QRLabel12.Caption := '集邮票';
QRLabel20.Caption := FormatDateTime('yyyy"年"mm"月"dd"日"', StrToDate(Qry_Print.fieldByName('zdrq').AsString));
if CHQMsgBox('是否采用套打?', 2) = IDYES then
Tao_Print_Flag := True
else
Tao_Print_Flag := False;
DetailLines := 0;
Prepare;
try
QRLabel19.Caption := IntToStr(QRPrinter.PageCount);
finally
QRPrinter.Free;
end;
QRPrinter := nil;
Preview;
finally
CKJHDCX_RPT.Destroy;
Frm_RichEdit.Destroy;
end;
end;
{-------------------------------------------------------------------------------}
{对不同状态的分配但,以不同的颜色显示}
procedure TFrm_CKJH_JJW.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; {已经处理}
2: dbg_List.Canvas.Brush.Color := lbl_Color_2.Color; {已经签批}
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_CKJH_JJW.qry_DetailZKSetText(Sender: TField;
const Text: String);
var
l_SetTextEvent: TFieldSetTextEvent;
begin
l_SetTextEvent := qry_DetailZK.OnSetText;
qry_DetailZK.OnSetText := nil; {防止用鼠标点击其他记录时递归调用}
if Trim(Text) = '' then
begin
Sender.AsString := Text;
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
Exit;
end
else {结算价的互斥}
qry_Detail.FieldByName('JSJ').AsString := '0';
try
if (StrToFloat(Text) >= 1000) or (StrToFloat(Text) < 0) then
Abort; {触发abort异常}
Sender.AsString := Text;
{用折扣计算出结算金额}
with qry_Detail do
begin
Edit;
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;
if VL_CanPost then
Post;
end;
except
Application.MessageBox('所输入的折扣必须合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
Abort;
end;
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
end;
procedure TFrm_CKJH_JJW.qry_DetailJSJSetText(Sender: TField;
const Text: String);
var
l_Text: string;
l_SetTextEvent: TFieldSetTextEvent;
begin
l_SetTextEvent := qry_DetailJSJ.OnSetText;
qry_DetailJSJ.OnSetText := nil; {防止用鼠标点击其他记录时递归调用}
l_Text := Text;
if Trim(Text) = '' then
begin
Sender.AsString := Text;
qry_DetailJSJ.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
Exit;
end
else {和折扣的互斥}
qry_Detail.FieldByName('ZK').AsString := '0';
try
if (StrToFloat(l_Text) >= 1000) or (StrToFloat(l_Text) < 0) then
Abort; {触发abort异常}
Sender.AsFloat := StrToFloat(Text);
with qry_Detail do
begin
Edit;
{用结算价计算出结算金额}
if (FieldByName('JSJ').AsString <> '') and (FieldByName('FPSL').AsString <> '') then
FieldByName('JSJE').AsFloat := FieldByName('JSJ').AsFloat * FieldByName('FPSL').AsInteger;
if VL_CanPost then
Post;
end;
except
Application.MessageBox('所输入的结算价必须合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailJSJ.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
Abort;
end;
qry_DetailJSJ.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
end;
procedure TFrm_CKJH_JJW.dbgEh_DetailGetFooterParams(Sender: TObject;
DataCol, Row: Integer; Column: TColumnEh; AFont: TFont;
var Background: TColor; var Alignment: TAlignment; State: TGridDrawState;
var Text: String);
begin
if Trim(Text) = '' then
Exit;
try
if (DataCol = 7) or (DataCol = 8) then {出库总金额和结算金额以元显示}
Text := FormatFloat('¥#,##0.000', StrToFloat(Text))
else if DataCol = 6 then
Text := FormatFloat('#,##0', StrToFloat(Text));
except
end;
end;
procedure TFrm_CKJH_JJW.qry_DetailJJGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if Trim(Sender.AsString) = '' then
Exit;
try
if DisplayText then {显示状态}
begin
if Sender.AsString <> '' then
Text := FormatFloat('¥#,##0.000', Sender.AsFloat);
end
else {输入状态}
Text := FormatFloat('#0.##', Sender.AsFloat)
except
end;
end;
procedure TFrm_CKJH_JJW.qry_DetailFPSLGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if Trim(Sender.AsString) = '' then
Exit;
try
if DisplayText then {显示状态}
begin
if Sender.AsString <> '' then
Text := FormatFloat('#,##0', Sender.AsFloat);
end
else {输入状态}
Text := FormatFloat('#0.##', Sender.AsFloat)
except
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -