📄 sy_ck_jyp.pas
字号:
{*******************************************************}
{ }
{ 集邮出库计划单制定模块 }
{ }
{ 中软金马公司版权所有。2002.06 }
{ }
{ 编制:杨俊 }
{ }
{ }
{*******************************************************}
(*
省级集邮票 ,地市集邮票管理
修改记录: 将零枚票的单品种多去向模块移至集邮品中,按照其思路方式,改成对集邮票
处理。
将当前模块从用户当前使用的版本的源代码,复制到syz规范话过的省级程序源代码中
杨俊 2003.5.8
===============================================================================*)
unit SY_CK_JYP;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, RXCtrls, ToolEdit, CurrEdit, Mask, DBCtrls,
EHGrids, DBGridEh, FieldComboBox, Spin, ComCtrls, Db, DBTables, Grids,
DBGrids;
type
TFrm_SY_CK_JYP = class(TForm)
XttxTitle: TRxLabel;
Panel3: TPanel;
bbtn_Close: TBitBtn;
bbtn_Print: TBitBtn;
bbtn_QP: TBitBtn;
pgc_LM: TPageControl;
tbs_List: TTabSheet;
tbs_Detail: TTabSheet;
dbgEh_Detail: TDBGridEh;
Panel4: TPanel;
Label5: TLabel;
Label8: TLabel;
Label6: TLabel;
Label7: TLabel;
DBE_ZBR: TDBEdit;
DBE_ZDRQ: TDBEdit;
CE_KC: TCurrencyEdit;
dbg_List: TDBGridEh;
bbtn_Search: TBitBtn;
qry_List: TQuery;
ds_List: TDataSource;
qry_Detail: TQuery;
ds_Detail: TDataSource;
usql_Detail: TUpdateSQL;
usql_List: TUpdateSQL;
sp_DH: TStoredProc;
qry_Tmp: TQuery;
qry_DetailCKJHDH: TStringField;
qry_DetailDWDM: TStringField;
qry_DetailPPDM: TStringField;
qry_DetailKFDM: TStringField;
qry_DetailPPMC: TStringField;
qry_DetailMZ: TFloatField;
qry_DetailSJ: TFloatField;
qry_DetailZK: TFloatField;
qry_DetailJSJ: TFloatField;
qry_DetailFPSL: TFloatField;
qry_DetailFPSL_OLD: TFloatField;
qry_DetailSDATE: TDateTimeField;
qry_DetailDWMC: TStringField;
qry_DetailKFMC: TStringField;
qry_DetailJSJE: TFloatField;
qry_DetailCKZJE: TFloatField;
lbl_color_0: TLabel;
lbl_color_2: TLabel;
lbl_color_1: TLabel;
Label10: TLabel;
Label13: TLabel;
Label14: TLabel;
bbtn_CancelQP: TBitBtn;
Bevel2: TBevel;
dbnv_List: TDBNavigator;
Panel1: TPanel;
bbtn_Add: TBitBtn;
bbtn_Del: TBitBtn;
bbtn_Modify: TBitBtn;
bbtn_AddDW: TBitBtn;
bbtn_DeleteDW: TBitBtn;
bbtn_Save: TBitBtn;
bbtn_Cancel: TBitBtn;
Panel2: TPanel;
rg_Round: TRadioGroup;
chk_Round: TCheckBox;
rg_Round_Style: TRadioGroup;
Edit1: TEdit;
Label11: TLabel;
DBEdit2: TDBEdit;
Label2: TLabel;
DBEdit1: TDBEdit;
Label9: TLabel;
DBEdit3: TDBEdit;
Label12: TLabel;
pgc_SeleInfo: TPageControl;
tbs_SeleBGG: TTabSheet;
lbl_BZGG: TLabel;
cb_BZGG: TComboBox;
tbs_SeleMBMS: TTabSheet;
Label1: TLabel;
cb_BGG: TComboBox;
tbs_BCB: TTabSheet;
edt_PZR: TEdit;
procedure bbtn_AddClick(Sender: TObject);
procedure bbtn_AddDWClick(Sender: TObject);
procedure bbtn_SearchClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure rg_RoundClick(Sender: TObject);
procedure dbg_ListDblClick(Sender: TObject);
procedure bbtn_CancelClick(Sender: TObject);
procedure qry_ListAfterScroll(DataSet: TDataSet);
procedure qry_DetailBeforeDelete(DataSet: TDataSet);
procedure qry_DetailBeforeInsert(DataSet: TDataSet);
procedure bbtn_SaveClick(Sender: TObject);
procedure bbtn_ModifyClick(Sender: TObject);
procedure bbtn_DelClick(Sender: TObject);
procedure bbtn_QPClick(Sender: TObject);
procedure bbtn_DeleteDWClick(Sender: TObject);
procedure qry_DetailBeforePost(DataSet: TDataSet);
procedure qry_DetailFPSLValidate(Sender: TField);
procedure qry_DetailFPSLSetText(Sender: TField; const Text: String);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure dbg_ListDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure qry_DetailMZGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
procedure bbtn_CancelQPClick(Sender: TObject);
procedure bbtn_PrintClick(Sender: TObject);
procedure qry_DetailZKSetText(Sender: TField; const Text: String);
procedure qry_DetailJSJSetText(Sender: TField; const Text: String);
procedure chk_RoundClick(Sender: TObject);
procedure dbgEh_DetailGetFooterParams(Sender: TObject; DataCol,
Row: Integer; Column: TColumnEh; AFont: TFont;
var Background: TColor; var Alignment: TAlignment;
State: TGridDrawState; var Text: String);
procedure qry_DetailJSJGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
procedure cb_BGGChange(Sender: TObject);
procedure cb_BZGGChange(Sender: TObject);
procedure qry_DetailFPSLGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
private
procedure SetState(A_Enabled: boolean); {设置界面可修改状态}
procedure Add_CKJHD(A_Source_PP, A_Source_KF: TQuery); {新制定出库计划单,基本信息的读入}
function Create_DH(A_BILLID, A_SORTCODE, A_DEPARTMENT,
A_CYEAR: string): string; {调用存储过程,生成单号}
procedure Save_Info; {保存出库信息}
function ShowTheoryKC(A_PPDM, A_JJ: string): Integer; {取理论库存}
procedure GetGG(A_PPDM: string); {取得凑整的规格}
procedure SetRounding; {凑包凑版调用}
procedure SetRoundSL(A_Round, A_Round_Style, A_SingleDest: Integer); {分配数量的凑整处理}
function GetRoundNumber(A_source, A_SingleDest,
A_type: Integer): Integer; {返回凑整后的数据}
function Can_CK(var A_Caption: string): boolean; {是否可以出库}
procedure AddDW(A_dbg: TDBGrid; a_PPDM: String); {新添加的单位}
procedure ShowList(A_ShowModal: Boolean; A_CKJHDH: string); {查询条件模块的调用,并且是否显示窗体}
function GetFPSL_Total: Integer; {取计划单中的分配总数}
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_SY_CK_JYP: TFrm_SY_CK_JYP;
implementation
{$R *.DFM}
uses
Datas, pub, SY_CK_JYP_Add,
SY_CK_JYP_DW,
SY_CK_JYP_Sele,
SY_CK_JYP_Print;
var
VL_Ban_GG: Integer; {取得该票品的版的规格} {}
VL_CKJH: PRec_CKJH; {计划单——查询条件} {}
VL_CKJHDH: string; {用来判断新增或者修改} {}
VL_TheoryKC, VL_FPSL_Modify: Integer; {不包括正在新增或者修改的分配数量的理论库存、修改时未修改前的分配数量} {}
{TFrm_SY_CK_JYP}
VL_MBMS: TStringList; {每包枚数}
{-------------------------------------------------------------------------------}
{初始化}
procedure TFrm_SY_CK_JYP.FormCreate(Sender: TObject);
var
l_SysDate: TDate;
begin
l_sysDate := GetSysDate; {取服务器日期}
VL_MBMS := TStringlist.Create;
{初始状态设置}
pgc_LM.ActivePageIndex := 0;
rg_RoundClick(nil);
SetState(False); {设置界面可修改状态}
{查询本周的计划分配单}
New(VL_CKJH);
with VL_CKJH^ do
begin
JHDH.Checked := False; {计划单号模糊查询}
JHDH.Text := '';
RQ.Checked := True; {起止日期}
RQ.FromDate := l_SysDate - 7;
RQ.ToDate := l_SysDate;
SQL := ''
end;
ShowList(False, ''); {查询条件模块的调用,并且是否显示窗体}
end;
{-------------------------------------------------------------------------------}
{释放资源}
procedure TFrm_SY_CK_JYP.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
{询问}
if bbtn_Save.Enabled then
if Application.MessageBox('正在对出库计划单进行修改,是否取消修改并且退出?', '询问', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
begin
Action := caNone;
Exit;
end;
Dispose(VL_CKJH);
qry_Detail.Close;
qry_List.Close;
VL_MBMS.Clear;
end;
{-------------------------------------------------------------------------------}
{出库计划单的明细更新}
procedure TFrm_SY_CK_JYP.qry_ListAfterScroll(DataSet: TDataSet);
begin
(* 签批和取消签批在权限控制中处理
{是否可以进行签批}
if qry_List.FieldByName('ZT').AsString = '0' then
bbtn_QP.Enabled := True
else
bbtn_QP.Enabled := False;
{是否可以进行取消签批}
if qry_List.FieldByName('ZT').AsString = '2' then
bbtn_CancelQP.Enabled := True
else
bbtn_CancelQP.Enabled := False;
*)
{打开明细信息}
with qry_Detail do
begin
Close;
SQL.Text := ' select a.CKJHDH, a.DWDM, a.PPDM, a.KFDM, a.PPMC, a.JJ /100 JJ, a.XJ/100 XJ, a.ZK, ' +
' decode(a.JSJ,null, (a.ZK/100) * a.XJ* a.FPSL , 0, (a.ZK/100) * a.XJ* a.FPSL ,a.JSJ* a.FPSL)/100 JSJE, ' +
' a.XJ* a.FPSL/100 CKZJE, a.JSJ/100 JSJ, a.FPSL, a.FPSL FPSL_OLD , ' +
' a.SDATE, b.DWJC DWMC, c.KFMC from TYS_JYCKJHDPPB a, TGS_GXDWSJB b, TGS_KFB c ' +
' where a.DWDM = b.DWDM and c.KFDM = a.KFDM ' +
' and a.CKJHDH = ' + QuotedStr(qry_List.FieldByName('CKJHDH').AsString) +
' order by b.PXM ';
Open;
end;
{理论库存}
ce_KC.Value := ShowTheoryKC(qry_Detail.FieldByName('PPDM').AsString, FloatToStr(qry_Detail.FieldByName('JJ').AsFloat * 100)); {不包括正在新增或者修改的分配数量的理论库存}
VL_FPSL_Modify := GetFPSL_Total; {修改时未修改前的分配数量}
VL_TheoryKC := Trunc(ce_KC.Value) + VL_FPSL_Modify;
{批准人}
edt_PZR.Text := qry_List.FieldByName('PZR').AsString;
end;
{-------------------------------------------------------------------------------}
{不允许删除}
procedure TFrm_SY_CK_JYP.qry_DetailBeforeDelete(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{只允许程序插入数据}
procedure TFrm_SY_CK_JYP.qry_DetailBeforeInsert(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{保存原有的分配数量}
procedure TFrm_SY_CK_JYP.qry_DetailBeforePost(DataSet: TDataSet);
begin
qry_Detail.Edit;
qry_Detail.FieldByName('FPSL_OLD').AsString := qry_Detail.FieldByName('FPSL').AsString;
{※※※※切不可用post语句※※※}
end;
{-------------------------------------------------------------------------------}
{出库总金额和结算金额以元显示}
procedure TFrm_SY_CK_JYP.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_SY_CK_JYP.qry_DetailMZGetText(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_SY_CK_JYP.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;
{-------------------------------------------------------------------------------}
{折扣输入时的合法性判断,以及和结算价的互斥}
procedure TFrm_SY_CK_JYP.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;
Post;
end;
except
Application.MessageBox('所输入的折扣必须合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
Abort;
end;
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
end;
{-------------------------------------------------------------------------------}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -