📄 ss_txpkccsh.pas
字号:
{*******************************************************}
{ }
{ 零枚票库存初始化 }
{ }
{ 中软金马公司版权所有。2002.12前 }
{ }
{ 编制:中软金马邮资票品项目开发组 }
{ }
{ }
{*******************************************************}
(*
本模块在省级系统管理模块里面调用。
*)
unit SS_TXPKCCSH;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, SqlStrings, Db, DBTables, RxQuery, RXCtrls,
StdCtrls, Buttons, ExtCtrls, ModiPanel, Grids, DBGrids, RXDBCtrl, DBCtrls, ClipBrd,
FieldComboBox, ComCtrls, EHGrids, DBGridEh, DBGridEhExport;
type
Tfrm_TXPKCCSH = class(TForm)
pnl_Init: TPanel;
Panel2: TPanel;
Label2: TLabel;
Label3: TLabel;
edt_Locate: TEdit;
RxLbl_Title: TRxLabel;
DWMC: TLabel;
ds_init: TDataSource;
pnl_Title: TPanel;
pnl_Bottom: TPanel;
bbtn_Cancel: TBitBtn;
bbtn_Save: TBitBtn;
bbtn_Edit: TBitBtn;
bbtn_Find: TBitBtn;
bbtn_Exit: TBitBtn;
bbtn_Replace: TBitBtn;
qry_init: TQuery;
upSQL_Init: TUpdateSQL;
qry_Tmp: TQuery;
fcb_KF: TFieldComboBox;
pnl_Hint: TPanel;
lbl_Search: TLabel;
bbtn_Print: TBitBtn;
pgb_State: TProgressBar;
lbl_State: TLabel;
qry_initZH: TStringField;
qry_initTMC: TStringField;
qry_initSL: TFloatField;
qry_initZK: TFloatField;
qry_initJSJ: TFloatField;
qry_initKWH: TStringField;
qry_initTDM: TStringField;
qry_initTEMP: TFloatField;
qry_initFXRQ: TDateTimeField;
sp_Init: TStoredProc;
qry_initMZJE: TFloatField;
qry_initSJJE: TFloatField;
rxdb_Init: TDBGridEh;
qry_initJJ: TFloatField;
qry_initXJ: TFloatField;
qry_initPPDM: TStringField;
bbtn_Add: TBitBtn;
qry_initTPMZ: TFloatField;
qry_initTPSJ: TFloatField;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure bbtn_CancelClick(Sender: TObject);
procedure bbtn_FindClick(Sender: TObject);
procedure qry_initSLChange(Sender: TField);
procedure rxdb_Init1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure bbtn_EditClick(Sender: TObject);
procedure bbtn_SaveClick(Sender: TObject);
procedure qry_initZKChange(Sender: TField);
procedure qry_initJSJChange(Sender: TField);
procedure qry_initKWHChange(Sender: TField);
procedure bbtn_ReplaceClick(Sender: TObject);
procedure edt_LocateKeyPress(Sender: TObject; var Key: Char);
procedure qry_initBeforeInsert(DataSet: TDataSet);
procedure qry_initBeforeDelete(DataSet: TDataSet);
procedure FormShow(Sender: TObject);
procedure qry_initGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure qry_initSetText(Sender: TField; const Text: string);
procedure bbtn_PrintClick(Sender: TObject);
procedure fcb_KFChange(Sender: TObject);
procedure rxdb_InitDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
procedure rxdb_InitGetFooterParams(Sender: TObject; DataCol,
Row: Integer; Column: TColumnEh; AFont: TFont;
var Background: TColor; var Alignment: TAlignment;
State: TGridDrawState; var Text: string);
procedure qry_initXJChange(Sender: TField);
procedure bbtn_AddClick(Sender: TObject);
procedure qry_initJJChange(Sender: TField);
private
{ Private declarations }
function Init_Public_Data: Boolean; {初始化公共数据}
function Judge_Modify: Boolean; {判断是否能够进入修改状态,即初始化日期是否设定,以及是否进入已经结束}
function Show_Data: Boolean; {显示初始化数据}
procedure Add_Init_Data; {新增同一票品的不同进价}
procedure Set_Data; {批量设置进价等}
procedure Set_ZK(Value: Double); {批量设置折扣}
procedure Set_JSJ(Value: Double; AGDZ: boolean = true); {批量设置结算价,固定值(true)or进价(false)}
procedure Set_JJ1(Value: Double; Over_Write: Boolean); {批量设置进价,依据折扣计算}
procedure Set_JJ2(Value: Double; Over_Write: Boolean); {批量设置进价,直接赋值}
procedure Set_XJ(Over_Write: Boolean); {批量设置销价}
function Save_Init_Data: Boolean; {保存初始化数据}
function Test_JJ: Boolean; {判断进价是否存在相同的}
function Test_XJ: Boolean; {测试销价,是否在其他库房中存在不同进价}
function Update_Record: Boolean; {向数据库中插入不为0的数据}
function Delete_Record: Boolean; {从数据库中删除为0的记录}
function Call_StoreProc: Boolean; {调用存储过程,更新其他表,本步骤不加在事务内,同时出错不显式提示}
procedure Cancel_Init_Data; {取消保存初始化数据,恢复原来的状态}
procedure Set_State(State: Integer); {设置界面控件状态}
procedure DisJE(AType: Integer); {设置金额显示,0-进价金额;1-销价金额;2-面值金额}
public
{ Public declarations }
end;
function Show_TXPKCCSH: Boolean;
var
frm_TXPKCCSH: Tfrm_TXPKCCSH;
Edit_State: Integer; {指出当前处于的状态,0:浏览,1:修改}
Find_SQL: string;
implementation
{$R *.DFM}
{集邮票、零枚票、集邮品、市场购入票 库存初始化模块,使用外连接进行数据读取,使用Query最后保存数据
调用四个查询模块进行票品代码的查询,使用四个批量设置模块进行进价、销价、折扣、结算价等的处理
涉及数据库表:
集邮票品库存(记帐员)(TYS_JYPPKC)
集邮品品库存(记帐员)(TYS_YPPKC)
零枚票品库存(TYS_TXPPKC)
购入票品库存(记帐员)(TYS_GRPPKC)
系统基本信息表(邮资票品信息表)(TB_YZPPXXB)
杂表(TGS_ZB)
石玉琢 2001.09.26补}
uses
Pub,SS_TXP_Init_PLSR, SS_TXP_Init_Search;
function Show_TXPKCCSH: Boolean;
begin
with Tfrm_TXPKCCSH.Create(Application) do
try
if Init_Public_Data then
ShowModal;
finally
free;
end;
Result := True;
end;
{判断是否能够进入修改状态,即初始化日期是否设定,以及是否进入已经结束}
function Tfrm_TXPKCCSH.Judge_Modify: Boolean;
begin
with qry_Tmp do
begin
Close;
SQL.Text := 'Select ZFXZ from TGS_ZB where DM=''txp_csh_n''';
Open;
if Trim(FieldByName('ZFXZ').AsString) = '' then
begin
CHQMsgBox('初始化日期没有设定!请进行初始化日期设定,然后才能够进行库存初始化!');
Result := False;
Exit;
end;
Close;
SQL.Text := 'Select ZFXZ from TGS_ZB where DM=''txp_csh_y''';
Open;
if Trim(FieldByName('ZFXZ').AsString) = '' then
begin
CHQMsgBox('初始化日期没有设定!请进行初始化日期设定,然后才能够进行库存初始化!');
Result := False;
Exit;
end;
Close;
SQL.Text := 'Select ZFXZ from TGS_ZB where DM=''txp_csh_js''';
Open;
if (UpperCase(Trim(FieldByName('ZFXZ').AsString)) = 'YY') or
(UpperCase(Trim(FieldByName('ZFXZ').AsString)) = 'Y') then
begin
CHQMsgBox('初始化已经完成,现在只能进行查看!');
Result := False;
Exit;
end;
end;
Result := True;
end;
{-------------------------------------------------------------------------------}
{初始化公共数据}
function Tfrm_TXPKCCSH.Init_Public_Data: Boolean;
begin
{添加库房}
with qry_Tmp do
begin
Close;
SQL.Text := 'select a.KFDM,a.KFMC from TGS_KFB a,TGS_KFRYDZB b where a.KFDM=b.KFDM and b.YGDM=''' + VG_UserID + ''' order by a.KFDM';
Open;
if IsEmpty then
begin
CHQMsgBox('当前用户没有操作库房的权限!');
Result := False;
Exit;
end;
fcb_KF.ClearAll;
while not eof do
begin
fcb_KF.Items.Add(FieldByName('KFMC').AsString);
fcb_KF.FieldItems.Add(FieldByName('KFDM').AsString);
Next;
end;
fcb_KF.ItemIndex := 0
end;
Result := True;
end;
{设置界面控件状态}
procedure Tfrm_TXPKCCSH.Set_State(State: Integer);
begin
Edit_State := State;
case State of
0: {浏览} {}
begin
fcb_KF.Enabled := True;
rxdb_Init.ReadOnly := True;
bbtn_Find.Enabled := True;
bbtn_Edit.Enabled := True;
bbtn_Replace.Enabled := False;
bbtn_Add.Enabled := False;
bbtn_Save.Enabled := False;
bbtn_Cancel.Enabled := False;
end;
1: {修改} {}
begin
fcb_KF.Enabled := False;
rxdb_Init.ReadOnly := False;
bbtn_Find.Enabled := False;
bbtn_Edit.Enabled := False;
bbtn_Replace.Enabled := True;
bbtn_Add.Enabled := True;
bbtn_Save.Enabled := True;
bbtn_Cancel.Enabled := True;
end;
2: {只能看,不能进入任何修改状态} {}
begin
fcb_KF.Enabled := True;
rxdb_Init.ReadOnly := True;
bbtn_Find.Enabled := True;
bbtn_Edit.Enabled := False;
bbtn_Replace.Enabled := False;
bbtn_Add.Enabled := False;
bbtn_Save.Enabled := False;
bbtn_Cancel.Enabled := False;
end;
end;
end;
{-------------------------------------------------------------------------------}
{显示初始化数据}
{其中PPDM读出用来判断以前在数据库中是否存在该记录,Temp用来判断是否修改,决定是否保存}
function Tfrm_TXPKCCSH.Show_Data: Boolean;
var
l_kfdm: string;
begin
l_kfdm := fcb_KF.FieldString;
with qry_init do
begin
Close;
SQL.Text := 'select b.ZH, b.TMC, b.TPMZ, b.TPSJ, a.JJ, a.XJ, a.TS, a.ZK, a.JSJ, a.KWH, b.TDM, 0 Temp, a.PPDM, b.FXRQ, '#13#10 +
'a.JJ*a.TS JJJE,a.XJ*a.TS XJJE from (Select KFDM,PPDM,JJ,XJ,TS,ZK,JSJ,KWH from TYS_TXPPKC where KFDM = ''' + l_kfdm + ''') a, TB_YZPPXXB b'#13#10 +
'where a.PPDM(+) = b.TDM ' + Find_SQL + ' order by b.TDM';
Open;
end;
Result := True;
end;
{-------------------------------------------------------------------------------}
{绘制DBGrid颜色,当库存大于0,则改变颜色}
procedure Tfrm_TXPKCCSH.rxdb_Init1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
end;
{==========================输入时实时控制输入选项===============================}
{屏蔽DBGrid自动增加记录的功能}
procedure Tfrm_TXPKCCSH.qry_initBeforeInsert(DataSet: TDataSet);
begin
Abort;
end;
{屏蔽DBGrid自动删除记录的功能}
procedure Tfrm_TXPKCCSH.qry_initBeforeDelete(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{库存改变的时候,如果大于0,则设置当前行为空色}
procedure Tfrm_TXPKCCSH.qry_initSLChange(Sender: TField);
var
Old_Value: Integer;
begin
if qry_initSL.AsInteger < 0 then
begin
CHQMsgBox('库存数量不能为负!');
Old_Value := 0;
if qry_init.FieldByName('TDM').AsString <> '' then
try
Old_Value := qry_initSL.OldValue;
except
end;
qry_initSL.AsInteger := Old_Value;
Abort;
end;
qry_init.FieldByName('TEMP').AsInteger := 1;
Qry_init.FieldByName('JJJE').AsFloat := Qry_init.FieldByName('JJ').AsFloat * Qry_init.FieldByName('TS').AsFloat;
Qry_init.FieldByName('XJJE').AsFloat := Qry_init.FieldByName('XJ').AsFloat * Qry_init.FieldByName('TS').AsFloat;
end;
{-------------------------------------------------------------------------------}
{折扣}
procedure Tfrm_TXPKCCSH.qry_initZKChange(Sender: TField);
var
Old_Value: Double;
begin
{判断折扣是否合法}
if (qry_initZK.AsFloat < 0) or (qry_initZK.AsFloat > 100) then
begin
CHQMsgBox('折扣必须在0~100之间!');
Old_Value := 0;
if qry_init.FieldByName('PPDM').AsString <> '' then
try
Old_Value := qry_initZK.OldValue;
except
end;
qry_initZK.OnChange := nil;
qry_initZK.AsFloat := Old_Value;
qry_initZK.OnChange := qry_initZKChange;
Abort;
end;
qry_initJSJ.OnChange := nil;
qry_init.FieldByName('JSJ').AsFloat := 0;
qry_initJSJ.OnChange := qry_initJSJChange;
qry_init.FieldByName('TEMP').AsInteger := 1;
end;
{-------------------------------------------------------------------------------}
{结算价}
procedure Tfrm_TXPKCCSH.qry_initJSJChange(Sender: TField);
var
Old_Value: Double;
begin
{判断结算价是否合法}
if qry_initJSJ.AsFloat < 0 then
begin
CHQMsgBox('结算价不能为负!');
Old_Value := 0;
if qry_init.FieldByName('PPDM').AsString <> '' then
try
Old_Value := qry_initJSJ.OldValue;
except
end;
qry_initJSJ.OnChange := nil;
qry_initJSJ.AsFloat := Old_Value;
qry_initJSJ.OnChange := qry_initJSJChange;
Abort;
end;
qry_initZK.OnChange := nil;
qry_init.FieldByName('ZK').AsFloat := 0;
qry_initZK.OnChange := qry_initZKChange;
qry_init.FieldByName('TEMP').AsInteger := 1;
end;
{-------------------------------------------------------------------------------}
{显示面值、售价、进价、销价、结算价}
procedure Tfrm_TXPKCCSH.qry_initGetText(Sender: TField;
var Text: string; DisplayText: Boolean);
begin
try
Sender.AsFloat;
if not Sender.IsNull then
if Sender.Name = 'qry_initJJ' then
Text := FormatFloat('#,##0.0000##', Sender.AsFloat / 100)
else
Text := FormatFloat('#,##0.00##', Sender.AsFloat / 100);
except
end;
end;
{保存进价、销价、结算价}
procedure Tfrm_TXPKCCSH.qry_initSetText(Sender: TField;
const Text: string);
begin
Sender.AsFloat := strToFloat(Text) * 100;
end;
{-------------------------------------------------------------------------------}
{库位号}
procedure Tfrm_TXPKCCSH.qry_initKWHChange(Sender: TField);
begin
qry_init.FieldByName('TEMP').AsInteger := 1;
end;
{-------------------------------------------------------------------------------}
{新增同一票品的不同进价}
procedure Tfrm_TXPKCCSH.Add_Init_Data;
var
l_ZH, l_TMC, l_KWH, l_TDM: string;
l_TPMZ, l_TPSJ, l_XJ, l_ZK, l_JSJ: Double;
// l_JJ,l_TS,
Before_Insert: TDataSetNotifyEvent;
begin
with qry_Init do
begin
l_ZH := FieldByName('ZH').AsString;
l_TMC := FieldByName('TMC').AsString;
l_KWH := FieldByName('KWH').AsString;
l_TDM := FieldByName('TDM').AsString;
l_TPMZ := FieldByName('TPMZ').AsFloat;
l_TPSJ := FieldByName('TPSJ').AsFloat;
// l_JJ := FieldByName('JJ').AsInteger;
l_XJ := FieldByName('XJ').AsFloat;
// l_TS := FieldByName('TS').AsInteger;
l_ZK := FieldByName('ZK').AsFloat;
l_JSJ := FieldByName('JSJ').AsFloat;
DisableControls;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -