📄 sy_ck_lmp.pas
字号:
{*******************************************************}
{ }
{ 零枚出库计划单制定模块 }
{ }
{ 中软金马公司版权所有。2002.06 }
{ }
{ 编制:侯华敏 }
{ }
{ }
{*******************************************************}
(*==============================================================================
本模块在省级零枚票管理模块 计划管理部分的出库计划单制定/单品种多去向出库计划单制定 菜单调用
涉及数据表部分说明:
1、 出库性质:'10'-分配出库;
2、 零枚票出库计划单表TYS_TXPCKJHDB中的ZT:0-未处理,2-已签批,
1-已处理 (TK_TXFHD 中的HDR 为空时-未复核【计算理论库存时需要减去】,TK_TXFHD 中的HDR 不为空时-已经复核 )
【TK_TXFHD中的YJDH 为TYS_TXPCKJHDB的出库计划单号】
3、 计算理论库存=零枚票品库存TYS_TXPPKC中的库存-TYS_TXPCKJHDB表中的处理状态为(0,2) 的分配数量
-TK_TXFHD 中未复核的计划单;
4、纪_计内_分配计划(封片)TY_JJNFPJH_FP中的邮资类代码为套或者图代码的前三位,即票品类别
5、主要涉及的表:
a、读取数据: 零枚票品库存TYS_TXPPKC,纪_计内_分配计划(零枚)TY_JJNFPJH_LM【普通邮票、零枚】,
纪_计内_分配计划(封片)TY_JJNFPJH_FP【封片简】
b、 写入数据:零枚票出库计划单表TYS_TXPCKJHDB
零枚票出库计划单票品表TYS_TXCKJHDPPB
程序说明:
1、提供普通邮票、封片简、零枚的分配出库计划单制定;
2、进入本模块时,默认查询出一周内的计划分配单,并且可以查看明细;对未签批的
计划单可以修改、删除、签批;对于已经签批的计划单可以取消签批;对于已经处理的计划,
不可以进行任何操作;
3、新增计划单时,调用SY_CK_LMP_Add模块,返回票品的代码。名称、售价、计算价、折扣、
及库房、分配数量等;
4、对出库总金额、结算总金额进行计算得出;
5、可以添加、删除同一计划分配单的分配单位,对于新添加的分配单位,分配数量默认为0;
6、保存前首先判断是否可以出库【分配数量是否大于理论库存、输入数量是否为0】,
7、对未签批的计划单可以进行签批,更新zt为2,批准人;
8、对已经签批还未处理的计划单可以取消签批,并且进行修改、删除等处理;
9、折扣和结算价互斥,其中必定有一个为0或者为空;
侯华敏 2002.06.
修改记录
修改,进价销价结算价结算总金额出库总金额,小数点后保留3位 by jhshao 2003.05.07
===============================================================================*)
unit SY_CK_LMP;
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_LMP = 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_PZR: TDBEdit;
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_DetailJJ: TFloatField;
qry_DetailXJ: 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;
lbl_BZGG: TLabel;
fcb_BZGG: TFieldComboBox;
Edit1: TEdit;
Label11: TLabel;
DBEdit2: TDBEdit;
Label2: TLabel;
DBEdit1: TDBEdit;
Label9: TLabel;
DBEdit3: TDBEdit;
Label12: TLabel;
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_DetailJJGetText(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);
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_Type, 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); {新添加的单位}
procedure ShowList(A_ShowModal: Boolean; A_CKJHDH: string); {查询条件模块的调用,并且是否显示窗体}
function GetFPSL_Total: Integer; {取计划单中的分配总数}
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_SY_CK_LMP: TFrm_SY_CK_LMP;
implementation
{$R *.DFM}
uses
Datas,
pub,
SY_CK_LMP_Add,
SY_CK_LMP_DW,
SY_CK_LMP_Sele,
SY_CK_LMP_Print;
var
VL_Ban_GG: Integer; {取得该票品的版的规格} {}
VL_CKJH: PRec_CKJH; {计划单——查询条件} {}
VL_CKJHDH: string; {用来判断新增或者修改} {}
VL_TheoryKC, VL_FPSL_Modify: Integer; {不包括正在新增或者修改的分配数量的理论库存、修改时未修改前的分配数量} {}
{TFrm_SY_CK_LMP}
{-------------------------------------------------------------------------------}
{初始化}
procedure TFrm_SY_CK_LMP.FormCreate(Sender: TObject);
var
l_SysDate: TDate;
begin
l_sysDate := GetSysDate; {取服务器日期}
{初始状态设置}
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_LMP.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;
end;
{-------------------------------------------------------------------------------}
{出库计划单的明细更新}
procedure TFrm_SY_CK_LMP.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_TXCKJHDPPB 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;
end;
{-------------------------------------------------------------------------------}
{不允许删除}
procedure TFrm_SY_CK_LMP.qry_DetailBeforeDelete(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{只允许程序插入数据}
procedure TFrm_SY_CK_LMP.qry_DetailBeforeInsert(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{保存原有的分配数量}
procedure TFrm_SY_CK_LMP.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_LMP.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.00', StrToFloat(Text));
except
end;
end;
{-------------------------------------------------------------------------------}
{面值,售价,出库总金额,计算总金额以元显示}
procedure TFrm_SY_CK_LMP.qry_DetailJJGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
{出库计划单进价销价,小数点后保留3位 by jhshao 2003.05.07}
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_LMP.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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -