?? sy_ck_lmp.pas
字號:
{*******************************************************}
{ }
{ 零枚出庫計劃單制定模塊 }
{ }
{ 中軟金馬公司版權(quán)所有。2002.06 }
{ }
{ 編制:侯華敏 }
{ }
{ }
{*******************************************************}
(*==============================================================================
本模塊在省級零枚票管理模塊 計劃管理部分的出庫計劃單制定/單品種多去向出庫計劃單制定 菜單調(diào)用
涉及數(shù)據(jù)表部分說明:
1、 出庫性質(zhì):'10'-分配出庫;
2、 零枚票出庫計劃單表TYS_TXPCKJHDB中的ZT:0-未處理,2-已簽批,
1-已處理 (TK_TXFHD 中的HDR 為空時-未復(fù)核【計算理論庫存時需要減去】,TK_TXFHD 中的HDR 不為空時-已經(jīng)復(fù)核 )
【TK_TXFHD中的YJDH 為TYS_TXPCKJHDB的出庫計劃單號】
3、 計算理論庫存=零枚票品庫存TYS_TXPPKC中的庫存-TYS_TXPCKJHDB表中的處理狀態(tài)為(0,2) 的分配數(shù)量
-TK_TXFHD 中未復(fù)核的計劃單;
4、紀(jì)_計內(nèi)_分配計劃(封片)TY_JJNFPJH_FP中的郵資類代碼為套或者圖代碼的前三位,即票品類別
5、主要涉及的表:
a、讀取數(shù)據(jù): 零枚票品庫存TYS_TXPPKC,紀(jì)_計內(nèi)_分配計劃(零枚)TY_JJNFPJH_LM【普通郵票、零枚】,
紀(jì)_計內(nèi)_分配計劃(封片)TY_JJNFPJH_FP【封片簡】
b、 寫入數(shù)據(jù):零枚票出庫計劃單表TYS_TXPCKJHDB
零枚票出庫計劃單票品表TYS_TXCKJHDPPB
程序說明:
1、提供普通郵票、封片簡、零枚的分配出庫計劃單制定;
2、進(jìn)入本模塊時,默認(rèn)查詢出一周內(nèi)的計劃分配單,并且可以查看明細(xì);對未簽批的
計劃單可以修改、刪除、簽批;對于已經(jīng)簽批的計劃單可以取消簽批;對于已經(jīng)處理的計劃,
不可以進(jìn)行任何操作;
3、新增計劃單時,調(diào)用SY_CK_LMP_Add模塊,返回票品的代碼。名稱、售價、計算價、折扣、
及庫房、分配數(shù)量等;
4、對出庫總金額、結(jié)算總金額進(jìn)行計算得出;
5、可以添加、刪除同一計劃分配單的分配單位,對于新添加的分配單位,分配數(shù)量默認(rèn)為0;
6、保存前首先判斷是否可以出庫【分配數(shù)量是否大于理論庫存、輸入數(shù)量是否為0】,
7、對未簽批的計劃單可以進(jìn)行簽批,更新zt為2,批準(zhǔn)人;
8、對已經(jīng)簽批還未處理的計劃單可以取消簽批,并且進(jìn)行修改、刪除等處理;
9、折扣和結(jié)算價互斥,其中必定有一個為0或者為空;
侯華敏 2002.06.
修改記錄
修改,進(jìn)價銷價結(jié)算價結(jié)算總金額出庫總金額,小數(shù)點(diǎn)后保留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); {設(shè)置界面可修改狀態(tài)}
procedure Add_CKJHD(A_Source_PP, A_Source_KF: TQuery); {新制定出庫計劃單,基本信息的讀入}
function Create_DH(A_BILLID, A_SORTCODE, A_DEPARTMENT,
A_CYEAR: string): string; {調(diào)用存儲過程,生成單號}
procedure Save_Info; {保存出庫信息}
function ShowTheoryKC(A_PPDM, A_JJ: string): Integer; {取理論庫存}
procedure GetGG(A_Type, A_PPDM: string); {取得湊整的規(guī)格}
procedure SetRounding; {湊包湊版調(diào)用}
procedure SetRoundSL(A_Round, A_Round_Style, A_SingleDest: Integer); {分配數(shù)量的湊整處理}
function GetRoundNumber(A_source, A_SingleDest,
A_type: Integer): Integer; {返回湊整后的數(shù)據(jù)}
function Can_CK(var A_Caption: string): boolean; {是否可以出庫}
procedure AddDW(A_dbg: TDBGrid); {新添加的單位}
procedure ShowList(A_ShowModal: Boolean; A_CKJHDH: string); {查詢條件模塊的調(diào)用,并且是否顯示窗體}
function GetFPSL_Total: Integer; {取計劃單中的分配總數(shù)}
{ 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; {取得該票品的版的規(guī)格} {}
VL_CKJH: PRec_CKJH; {計劃單——查詢條件} {}
VL_CKJHDH: string; {用來判斷新增或者修改} {}
VL_TheoryKC, VL_FPSL_Modify: Integer; {不包括正在新增或者修改的分配數(shù)量的理論庫存、修改時未修改前的分配數(shù)量} {}
{TFrm_SY_CK_LMP}
{-------------------------------------------------------------------------------}
{初始化}
procedure TFrm_SY_CK_LMP.FormCreate(Sender: TObject);
var
l_SysDate: TDate;
begin
l_sysDate := GetSysDate; {取服務(wù)器日期}
{初始狀態(tài)設(shè)置}
pgc_LM.ActivePageIndex := 0;
rg_RoundClick(nil);
SetState(False); {設(shè)置界面可修改狀態(tài)}
{查詢本周的計劃分配單}
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, ''); {查詢條件模塊的調(diào)用,并且是否顯示窗體}
end;
{-------------------------------------------------------------------------------}
{釋放資源}
procedure TFrm_SY_CK_LMP.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
{詢問}
if bbtn_Save.Enabled then
if Application.MessageBox('正在對出庫計劃單進(jìn)行修改,是否取消修改并且退出?', '詢問', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = mrNo then
begin
Action := caNone;
Exit;
end;
Dispose(VL_CKJH);
qry_Detail.Close;
qry_List.Close;
end;
{-------------------------------------------------------------------------------}
{出庫計劃單的明細(xì)更新}
procedure TFrm_SY_CK_LMP.qry_ListAfterScroll(DataSet: TDataSet);
begin
(* 簽批和取消簽批在權(quán)限控制中處理
{是否可以進(jìn)行簽批}
if qry_List.FieldByName('ZT').AsString = '0' then
bbtn_QP.Enabled := True
else
bbtn_QP.Enabled := False;
{是否可以進(jìn)行取消簽批}
if qry_List.FieldByName('ZT').AsString = '2' then
bbtn_CancelQP.Enabled := True
else
bbtn_CancelQP.Enabled := False;
*)
{打開明細(xì)信息}
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)); {不包括正在新增或者修改的分配數(shù)量的理論庫存}
VL_FPSL_Modify := GetFPSL_Total; {修改時未修改前的分配數(shù)量}
VL_TheoryKC := Trunc(ce_KC.Value) + VL_FPSL_Modify;
end;
{-------------------------------------------------------------------------------}
{不允許刪除}
procedure TFrm_SY_CK_LMP.qry_DetailBeforeDelete(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{只允許程序插入數(shù)據(jù)}
procedure TFrm_SY_CK_LMP.qry_DetailBeforeInsert(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{保存原有的分配數(shù)量}
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;
{-------------------------------------------------------------------------------}
{出庫總金額和結(jié)算金額以元顯示}
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 {出庫總金額和結(jié)算金額以元顯示}
Text := FormatFloat('¥#,##0.00', StrToFloat(Text));
except
end;
end;
{-------------------------------------------------------------------------------}
{面值,售價,出庫總金額,計算總金額以元顯示}
procedure TFrm_SY_CK_LMP.qry_DetailJJGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
{出庫計劃單進(jìn)價銷價,小數(shù)點(diǎn)后保留3位 by jhshao 2003.05.07}
if Trim(Sender.AsString) = '' then
Exit;
try
if DisplayText then {顯示狀態(tài)}
begin
if Sender.AsString <> '' then
Text := FormatFloat('¥#,##0.000', Sender.AsFloat);
end
else {輸入狀態(tài)}
Text := FormatFloat('#0.###', Sender.AsFloat)
except
end;
end;
{-------------------------------------------------------------------------------}
{折扣輸入時的合法性判斷,以及和結(jié)算價的互斥}
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; {防止用鼠標(biāo)點(diǎn)擊其他記錄時遞歸調(diào)用}
if Trim(Text) = '' then
begin
Sender.AsString := Text;
qry_DetailZK.OnSetText := l_SetTextEvent; {防止用鼠標(biāo)點(diǎn)擊其他記錄時遞歸調(diào)用}
Exit;
end
else {結(jié)算價的互斥}
qry_Detail.FieldByName('JSJ').AsString := '0';
try
if (StrToFloat(Text) >= 1000) or (StrToFloat(Text) <= 0) then
Abort; {觸發(fā)abort異常}
Sender.AsString := Text;
{用折扣計算出結(jié)算金額}
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;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -