📄 sy_jyprkdbl.pas
字号:
{*******************************************************}
{ }
{ 入库依据单补录 }
{ }
{ 中软金马公司版权所有。2002.12前 }
{ }
{ 编制:中软金马邮资票品项目开发组 }
{ }
{ }
{*******************************************************}
(*
省级集邮品管理,地市集邮票管理
*)
{
[与零枚票对照]
表对照
A 零枚票发货单 -> 集邮票品发货单
B 零枚出库票品 -> 集邮出库票品
C 袋数重量表 -> 集邮袋数重量表
D 包号版号表(出库单) -> 集邮包号版号(出库单)
字段对照
B
图代码 -> 票品代码
售价 -> 销价
面值 -
原价 +
进价 +
D
进价 +
有关表:
集邮票品发货单、集邮出库票品、集邮袋数重量表、集邮包号版号(出库单)
数据来源:
出库单计划号:集邮票品发货单依据单号的GROUP BY
发货单号: 集邮票品发货单的发货单号
发货单主信息:集邮票品发货单
发货单详细信息:集邮出库票品
包袋:集邮袋数重量表
包号版本号:集邮包号版号(出库单)
功能:
算法:
1.输入的库房号必须在库房表中存在
2.对起始版号、终止版本号数据修改时要较验,即不能重复
3.当修改完成保存数据时,需要作如下操作:
A. 装票日期、封装袋数、出库日期、库管员、备注保存到集邮票品发货单中
修改集邮票品发货单的在途状态为'1'
B. 记录库存数据
零枚票品库存
票品代码:集邮出库票品.票品代码
库房代码:集邮出库票品.库房号
原价:集邮出库票品.原价
进价:集邮出库票品.进价
销价:集邮出库票品.销价
库位号:集邮出库票品.库位号
票品类别:通过票品代码判断(?)
IF 出库性质 = '待销毁出库' THEN
待销毁库存 = 待销毁库存 - 集邮出库票品.数量
ELSE IF 出库性质 = '预付出库' THEN
预付库存 = 预付库存 - 集邮出库票品.数量
ELSE 库存总枚数 = 库存总枚数 + 集邮出库票品.数量
变更标志:NULL(?)
备注:NULL
包号版号表(库存)
起始版号:包号版号表(出库单).起始版本号
终止版号: 包号版号表(出库单).终止版本号
C. 记帐
集邮票总帐表
集邮票总分户帐表 (集邮票总分户帐明细表)
集邮票明细分类帐
集邮票进发存明细帐表
集邮票明细分类帐(库管员)
集邮票品库存(库管)
集邮票品库存(业务部)
更新有关表:
集邮票品发货单、集邮出库票品、集邮袋数重量表、集邮包号版号(出库单)
备注:
对操作员要较验权限,不能浏览其它库房的入库单
修改记录:
1。一张单子的总结算金额自动计算 by jhshao 2003.05.07
}
unit SY_JYPRKDBL;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
FORMBASE, ExtCtrls, ModiPanel, StdCtrls, Mask, DBCtrls, Grids, DBGrids,
CurrEdit, RXDBCtrl, ToolEdit, ComCtrls, Buttons, DBTables, Db,
RxQuery, RXCtrls;
type
Pdwdm = ^Tdwdm;
Tdwdm = record
dwdm: string;
dwmc: string;
end;
Prkxz = ^Trkxz;
Trkxz = record
rkxzdm: string;
rkxzmc: string;
end;
Tfrm_JYPRKDBL = class(TFFormBase)
ModiPanel1: TModiPanel;
Panel1: TPanel;
DBG_fhd: TDBGrid;
Pnl_edit: TPanel;
Label3: TLabel;
Label5: TLabel;
DS_fhd: TDataSource;
DS_fhpp: TDataSource;
DBG_fhpp: TDBGrid;
Label4: TLabel;
Qry_fhpp: TQuery;
Panel4: TPanel;
XttxTitle: TRxLabel;
DWMC: TLabel;
Label1: TLabel;
Label2: TLabel;
DBM_bz: TDBMemo;
Qry_fhd: TQuery;
USQL_fhd: TUpdateSQL;
USQL_fhpp: TUpdateSQL;
DBDE_kdrq: TDBDateEdit;
DBEdt_fhdh: TDBEdit;
DBEdt_zbr: TDBEdit;
DBEdt_jsje: TDBEdit;
Qry_fhppFHDH: TStringField;
Qry_fhppTDM: TStringField;
Qry_fhppSL: TFloatField;
Qry_fhppSJ: TFloatField;
Qry_fhppZK: TFloatField;
Qry_fhppJSJ: TFloatField;
Qry_fhppZH: TStringField;
Qry_fhppTJC: TStringField;
Label6: TLabel;
Label7: TLabel;
DBLCBo_dw: TDBLookupComboBox;
DBLCBo_ckxz: TDBLookupComboBox;
Qry_dw: TQuery;
DS_dw: TDataSource;
DS_ckxz: TDataSource;
Qry_ckxz: TQuery;
Qry_fhppJSJE: TFloatField;
Qry_fhdFHDH: TStringField;
Qry_fhdDWDM: TStringField;
Qry_fhdDWMC: TStringField;
Qry_fhdCKXZ: TStringField;
Qry_fhdQXDW: TStringField;
Qry_fhdKDRQ: TDateTimeField;
Qry_fhdZTZT: TStringField;
Qry_fhdZBR: TStringField;
Qry_fhdJSJE: TFloatField;
Qry_fhdBZ: TStringField;
Qry_fhdCZBZ: TStringField;
procedure ModiPanel1BtnClick(Index: TBtnVisible);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Qry_fhppSJGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure Qry_fhppSJSetText(Sender: TField; const Text: string);
procedure Qry_fhppZKChange(Sender: TField);
procedure Qry_fhppJSJEChange(Sender: TField);
private
{ Private declarations }
FDtState: TDataState;
procedure Save;
procedure SetState(Value: TdataState);
procedure DoDelFHD;
{新增,遍历Qry_fhpp计算整个单子的结算金额 by jhshao 2003.05.09}
function GetJSJE_Total: double;
public
{ Public declarations }
recordcount: integer;
zh: array of string;
mc: array of string;
tdm: array of string;
mz: array of double;
sj: array of double;
queding: boolean;
editpd: boolean;
insertmode: boolean;
save1: boolean;
rkdh: string;
Saved: Boolean;
end;
function Show_JYPRKDBL: Boolean;
var
frm_JYPRKDBL: Tfrm_JYPRKDBL;
implementation
uses datas, pub, SHOW_JYP, SJ_RKDDY;
{$R *.DFM}
function Show_JYPRKDBL: Boolean;
begin
Application.CreateForm(Tfrm_JYPRKDBL, frm_JYPRKDBL);
with frm_JYPRKDBL do
try
if CheckRight(frm_JYPRKDBL, [Modipanel1]) then
result := ShowModal = MB_OK;
finally
Free;
end;
end;
procedure Tfrm_JYPRKDBL.SetState(Value: TdataState);
var
i: integer;
procedure SetControls(Value: Boolean);
begin
DBG_fhd.Enabled := Value;
DBG_fhpp.ReadOnly := Value;
DBLCBo_dw.ReadOnly := Value;
DBLCBo_ckxz.ReadOnly := Value;
DBEdt_fhdh.ReadOnly := Value;
DBDE_kdrq.ReadOnly := Value;
DBEdt_jsje.ReadOnly := Value;
DBEdt_zbr.ReadOnly := Value;
DBM_bz.ReadOnly := Value;
end;
begin
FDtState := Value;
ModiPanel1.ChangeMode(FDtState = dtBrowse);
SetControls(FDtState = dtBrowse);
for i := 2 to 5 do
if Value = dtBrowse then
DBG_fhpp.Columns[i].Color := cl3DLight
else
DBG_fhpp.Columns[i].Color := clInfoBK;
end;
procedure Tfrm_JYPRKDBL.DoDelFHD;
begin
try
data.DM.StartTransaction;
with Qry_fhpp do
begin
DataSource := nil;
DisableConstraints;
while not IsEmpty do
Delete;
EnableConstraints;
end;
Qry_fhpp.ApplyUpdates;
Qry_fhd.Delete;
Qry_fhd.ApplyUpdates;
data.DM.Commit;
except
data.DM.Rollback;
raise Exception.Create('数据保存错误');
exit;
end;
Qry_fhd.CommitUpdates;
Qry_fhpp.CommitUpdates;
Qry_fhpp.DataSource := DS_fhd;
Qry_fhpp.EnableConstraints;
SetState(dtBrowse);
end;
procedure Tfrm_JYPRKDBL.Save;
function DoRefreshFHDH: boolean;
begin
Result := true;
AssignSQLstr(data.Qry_Static, 'select FHDH from TK_JYFHD where FHDH=''' + DBEdt_fhdh.Text + '''');
data.Qry_Static.Open;
if not data.Qry_Static.IsEmpty then
begin
Result := false;
CHQMsgBox('该发货单号已存在!');
DBEdt_fhdh.SetFocus;
exit;
end;
with Qry_fhpp do
begin
disablecontrols;
first;
while not Eof do
begin
edit;
FieldByName('FHDH').AsString := Qry_fhd.FieldByName('FHDH').AsString;
if (FieldByName('SL').AsFloat = 0) or (FieldByName('SJ').AsFloat = 0)
or not ((FieldByName('ZK').AsFloat = 0) xor (FieldByName('JSJ').AsFloat = 0)) then
begin
Result := false;
EnableControls;
CHQMsgBox('请设置发货单票品的数量及价格!');
exit;
end;
Next;
end;
EnableControls;
end;
end;
begin
if Qry_fhd.FieldByName('FHDH').IsNull or Qry_fhd.FieldByName('DWDM').IsNull then
begin
CHQMsgBox('发货单号和来源单位不能为空!');
exit;
end;
if Qry_fhpp.FieldByName('FHDH').AsString = #9 then
if not DoRefreshFHDH then
exit;
try
data.DM.StartTransaction;
Qry_fhd.FieldByName('DWMC').AsString := DBLCBo_dw.Text;
Qry_fhd.FieldByName('CZBZ').AsString := '1';
Qry_fhd.FieldByName('ZTZT').AsString := '1';
Qry_fhd.ApplyUpdates;
Qry_fhpp.ApplyUpdates;
data.DM.Commit;
except
data.DM.Rollback;
exit;
end;
Qry_fhd.CommitUpdates;
Qry_fhpp.CommitUpdates;
if Qry_fhpp.DataSource = nil then
Qry_fhpp.DataSource := DS_fhd;
SetState(dtBrowse);
end;
procedure Tfrm_JYPRKDBL.ModiPanel1BtnClick(Index: TBtnVisible);
var
i: integer;
begin
inherited;
case index of
bnAdd:
begin
queding := false;
ExeSY_RKDBL_XZPP;
if queding then
begin
Qry_fhd.Append;
Qry_fhd.FieldByName('QXDW').AsString := VG_UnitID;
insertmode := true;
for i := 0 to recordcount - 1 do
begin
Qry_fhpp.Append;
Qry_fhpp.FieldByName('FHDH').asstring := #9;
Qry_fhpp.FieldByName('TDM').asstring := tdm[i];
Qry_fhpp.FieldByName('TJC').AsString := mc[i];
Qry_fhpp.FieldByName('ZH').AsString := zh[i];
Qry_fhpp.FieldByName('SJ').AsFloat := sj[i];
{新增,用于一张单子的总结算金额自动计算,有遍历计算故要设置Qry_fhpp为编辑状态 by jhshao 2003.05.09}
Qry_fhpp.Edit;
Qry_fhpp.post;
end;
insertmode := false;
SetState(dtEdit);
Qry_fhpp.DataSource := nil;
end
else
SetState(dtBrowse);
end;
bnDelete:
begin
if Qry_fhd.IsEmpty then
begin
CHQMsgBox('没有可删除的数据!');
exit;
end;
if CHQMsgBox('确定要删除记录吗?', 2) = IDYES then
begin
DoDelFHD;
end;
end;
bnEdit:
begin
if Qry_fhd.IsEmpty then
begin
CHQMsgBox('没有可修改的数据!');
exit;
end;
SetState(dtEdit);
DBEdt_fhdh.ReadOnly := true;
Qry_fhpp.DataSource := nil;
Qry_fhd.Edit;
Qry_fhpp.Edit;
end;
bnSave:
Save;
bnCancel:
if CHQMsgBox('取消编辑, 确定吗?', 2) = IDYES then
try
Qry_fhd.CancelUpdates;
Qry_fhpp.CancelUpdates;
Qry_fhpp.EnableControls;
Qry_fhpp.DataSource := DS_fhd;
finally
SetState(dtBrowse);
end;
bnClose:
Close;
end;
end;
procedure Tfrm_JYPRKDBL.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited;
Action := caFree;
if (FDtstate in [dtInsert, dtEdit]) then
case CHQMsgBox('数据已经编辑,需要保存吗?', 3) of
IDYES:
if not Saved then Action := caNone;
IDCANCEL: Action := caNone;
end;
end;
procedure Tfrm_JYPRKDBL.FormCreate(Sender: TObject);
begin
inherited;
XttxTitle.Caption := '入库依据单补录';
DWMC.Caption := '使用单位:' + VG_UnitName;
Qry_fhd.Open;
Qry_fhpp.Open;
Qry_dw.Open;
Qry_ckxz.Open;
SetState(dtBrowse);
end;
procedure Tfrm_JYPRKDBL.Qry_fhppSJGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
inherited;
CurrGetText(Sender, Text, DisplayText);
end;
procedure Tfrm_JYPRKDBL.Qry_fhppSJSetText(Sender: TField;
const Text: string);
begin
inherited;
CurrSetText(Sender, Text);
end;
procedure Tfrm_JYPRKDBL.Qry_fhppZKChange(Sender: TField);
begin
inherited;
with Qry_fhpp do
begin
if Sender.FieldName = 'JSJ' then
begin
if Sender.AsFloat <> 0 then
FieldByName('ZK').AsFloat := 0;
end;
if Sender.FieldName = 'ZK' then
begin
if Sender.AsFloat <> 0 then
FieldByName('JSJ').AsFloat := 0;
end;
Edit;
FieldByName('JSJE').AsFloat := FieldByName('SL').AsFloat * (FieldByName('SJ').AsFloat * FieldByName('ZK').AsFloat / 100 + FieldByName('JSJ').AsFloat);
end;
end;
{新增,遍历Qry_fhpp计算整个单子的结算金额 by jhshao 2003.05.09}
function Tfrm_JYPRKDBL.GetJSJE_Total: double;
var
l_jsje: double;
l_dbgPlace: TBookMark;
begin
l_jsje := 0;
{取计划单中的分配总数}
with Qry_fhpp do
begin
DisableControls;
l_dbgPlace := GetBookMark;
First;
while not Eof do
begin
l_jsje := l_jsje + FieldByName('JSJE').AsFloat;
Next;
end;
EnableControls;
GotoBookMark(l_dbgPlace);
FreeBookMark(l_dbgPlace);
end;
Result := l_jsje;
end;
procedure Tfrm_JYPRKDBL.Qry_fhppJSJEChange(Sender: TField);
begin
{新增,调用GetJSJE_Total计算整个单子的结算金额 by jhshao 2003.05.09}
inherited;
try
Qry_fhd.FieldByName('JSJE').AsFloat := GetJSJE_Total;
finally
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -