5.以表格型主细表为模板定制模块:会计科目管理

来源:互联网 发布:centos snmp 是否开启 编辑:程序博客网 时间:2024/06/06 10:53


1.业务需求:实现对会计科目的一个维护模块,该模块涉及到两个表,科目类别表和科目信息表的逻辑结构和物理结构如下:

创建表的SQL分别为:

create table JC_SubjectType (
   SubjectTypeID        varchar(50)          not null,
   SubjectTypeCode      varchar(50)          null,
   SubjectTypeName      varchar(50)          null,
   SubjectTypeShortName varchar(50)          null,
   OrderID              int                  null,
   UsedStatus           int                  null,
   Creator              varchar(50)          null,
   CreateTime           datetime             null,
   LastModifyTime       datetime             null,
   Remark               varchar(1000)        null,
   constraint PK_JC_SUBJECTTYPE primary key (SubjectTypeID)
)
go

create table JC_Subject (
   SubjectID            varchar(50)          not null,
   SubjectTypeID        varchar(50)          not null,
   SubjectCode          varchar(50)          null,
   SubjectName          varchar(50)          null,
   SubjectShortName     varchar(50)          null,
   UnitID               int                  null,
   InOutProperty        int                  null,
   RecordStatus         int                  null,
   OrderID              int                  null,
   UsedStatus           int                  null,
   Creator              varchar(50)          null,
   CreateTime           datetime             null,
   LastModifyTime       datetime             null,
   Remark               varchar(1000)        null,
   constraint PK_JC_SUBJECT primary key (SubjectID)
)
go

2.打开模块构件,新增一个模块,模块构件的属性设置界面如下:

3.打开界面元素构件,选中会计科目管理模块,新增一个界面元素,界面元素名为科目类别,界面元素的属性设置如下:

其中查询SQL为:

select ceiling(count(*)/10.0) from
SMSDB.dbo.JC_SubjectType
;

select TOP 10 * from (select ROW_NUMBER() OVER(ORDER BY x.OrderID) as RowNumber_,
x.*,
case when x.UsedStatus=1 then '已启用' when x.UsedStatus=0 then '未启用'
when x.UsedStatus=2 then '已禁用' end XUsedStatus
from SMSDB.dbo.JC_SubjectType x
) as a_
 where a_.RowNumber_>@pageNo_ ;

select TOP 1 RowNumber_ from  (
select ROW_NUMBER() OVER(ORDER BY x.OrderID) as RowNumber_,
x.SubjectTypeID
from SMSDB.dbo.JC_SubjectType x)a_
where a_.SubjectTypeID=@SubjectTypeID_

查询SQL中共有三个SQL查询语句,之间用分号分开,第一个SQL用于计算页数;第二个SQL用于查询出某页的数据,参数@pageNo_必需要有,表示某页的开始行号,由系统自动把下页开始行号值传入SQL,从而实现翻页的功能,函数ROW_NUMBER() OVER(ORDER BY x.OrderID)表示以x.OrderID字段进行排序来生成行号,该函数也必须有,因为用SQL进行翻页性能最好。第三个SQL用于计算主键SubjectTypeID@SubjectTypeID_值时的行号,用于新增或修改时进行行定位,刷新数据后选中行定位到当前新增行或当前修改行。

在第一个界面元素之下新增第二个界面元素,界面元素名为科目信息,为第一个界面元素(科目类别)的明细,界面元素的属性设置如下:


其中查询SQL为:

select ceiling(count(*)/10.0) from
SMSDB.dbo.JC_Subject x
where x.SubjectTypeID=@SubjectTypeID_
;

select TOP 10 * from (
select ROW_NUMBER() OVER(ORDER BY x.CreateTime) as RowNumber_,
x.*,
case when x.UnitID=1 then '元' when x.UnitID=2 then '万元' end XUnitID,
case when x.InOutProperty=1 then '借' when x.InOutProperty=2 then '贷' end XInOutProperty,
case when x.UsedStatus=0 then '未启用' when x.UsedStatus=1 then '已启用' when x.UsedStatus=2 then '已禁用' end XUsedStatus
from SMSDB.dbo.JC_Subject x
where x.SubjectTypeID=@SubjectTypeID_
) as a_
 where a_.RowNumber_>@pageNo_ ;

select TOP 1 RowNumber_ from  (
select ROW_NUMBER() OVER(ORDER BY x.CreateTime) as RowNumber_,
x.SubjectID
from SMSDB.dbo.JC_Subject x
where x.SubjectTypeID=@SubjectTypeID_)a_
where a_.SubjectID=@SubjectID_

查询SQL中共有三个SQL查询语句,之间用分号分开,第一个SQL用于计算页数;第二个SQL用于查询出某页的数据,参数@pageNo_必需要有,表示某页的开始行号,由系统自动把下页开始行号值传入SQL,从而实现翻页的功能,函数ROW_NUMBER() OVER(ORDER BY x.CreateTime)表示以x.CreateTime字段进行排序来生成行号,该函数也必须有,因为用SQL进行翻页性能最好。第三个SQL用于计算主键SubjectID@SubjectID_值时的行号,用于新增或修改时进行行定位,刷新数据后选中行定位到当前新增行或当前修改行。

4.打开操作构件,选中会计科目管理模块中的科目类别界面元素,新增新增、修改、删除、保存、取消、启用、禁用操作,这些操作的属性设置如下:

     新增属性设置如下图:

修改属性设置如下图:
修改操作的点击前要进行验证,js验证脚本为:
var id=getFv('M', 'XUsedStatus');
if(id=="已启用")
{
confirm("修改该数据可能会对其他数据产生影响,确定要修改吗?");
}
删除属性设置如下图:

删除前要进行客户端验证,点击前执行脚本为:
var id=getFv('M', 'XUsedStatus');
if(id=="已启用")
{
    alert('该数据已经启用,不能删除!');
    false;
}
else if(id=='已禁用')
{
confirm("该信息已禁用,删除可能会对其他数据产生影响,确认要删除该条信息吗?");
 }
else
{
confirm("确认要删除该条信息吗?");
}
保存属性设置如下图:

取消属性设置如下图:
启用属性设置如下图:
启用前要进行客户端验证,js验证要本为:
var id=getFv('M', 'XUsedStatus');
if(id=="已启用")
{
    alert('该数据已启用,不要重复操作!');
    false;
}
else
{
confirm("启用后将不能删除,确认要启用该记录信息吗?");
}
禁用属性设置如下图:
禁用前要进行客户端验证,js验证要本为:
var id=getFv('M', 'XUsedStatus');
if(id=="未启用")
{
    alert('该数据未启用,不能执行禁用操作!');
    false;
}else if(id=="已禁用")
{
 alert('该数据已禁用,不要重复操作!');
    false;
}
else if(id=="已启用")
{
confirm("禁用后,会导致数据不可用,确定要禁用记录吗?");
}
选中会计科目管理模块中的科目信息界面元素,新增新增、修改、删除、保存、取消、查询、启用、禁用、导出Excel操作,这些操作的属性设置如下:
     新增属性设置如下图:

修改属性设置如下图:
修改前的js验证脚本为:
var id=getFv('D', 'XUsedStatus');
if(id=='已启用')
{
 alert("已启用,不能进行修改操作!");
false;
}
删除属性设置如下图:
删除前的js验证脚本为:
var id=getFv('D', 'XUsedStatus');
if(id=="已启用")
{
    alert('该数据已经启用,不能删除!');
    false;
}
else if(id=='已禁用')
{
confirm("该信息已禁用,删除可能会对其他数据产生影响,确认要删除该条信息吗?");
 }
else
{
confirm("确认要删除该条信息吗?");
}
保存属性设置如下图:
取消属性设置如下图:

查询属性设置如下图:

启用属性设置如下图:
启用前的js脚本验证为:
var id=getFv('D', 'XUsedStatus');
if(id=="已启用")
{
    alert('该数据已启用,不要重复操作!');
    false;
}
else
{
confirm("启用后将不能删除,确认要启用该记录信息吗?");
}
禁用属性设置如下图:
禁用前的js脚本验证代码为:
var id=getFv('D', 'XUsedStatus');
if(id=="未启用")
{
    alert('该数据未启用,不能执行禁用操作!');
    false;
}else if(id=="已禁用")
{
 alert('该数据已禁用,不要重复操作!');
    false;
}
else if(id=="已启用")
{
confirm("禁用后,会导致数据不可用,确定要禁用记录吗?");
}
5.打开界面元查询参数构件,选中会计科目管理模块的科目类别界面元素,新增参数@SubjectTypeID_,属性设置如下:

选中会计科目管理模块的科目信息界面元素,新增参数@SubjectID_和@SubjectTypeID_,属性设置如下:


其中参数@SubjectTypeID_是与主界面元素的主表科目类型相关联的参数。
6.打开字段构件,选中会计科目管理模块中的科目类别界面元素,新增的字段属性设置如下:
CreateTime:创建时间,为日期类型,不显示到界面;
Creator:创建者,字符串类型,不显示到界面;
LastModifyTime:最后修改日期,为日期类型,不显示到界面;
SubjectTypeID:科目类型ID,字符串类型,不显示到界面;
UsedStatus:使用状态,整数类型,不显示到界面;
RowNumber_:序号,整数类型,固定显示;
SubjectTypeCode:科目类别编码,字符串类型,非空,字段显示顺序为2,字段字节长度为25输入。
SubjectTypeName(科目类别名称)字段属性设置如下:
SubjectTypeShortName(科目类别简称)字段属性设置如下:
OrderID(排序编号)字段属性设置如下:
XUsedStatus(启用状态)字段属性设置如下:
Remark(备注)字段属性设置如下:
打开字段构件,选中会计科目管理模块中的科目信息界面元素,新增的字段属性设置如下:
CreateTime字段属性设置如下:
Creator字段属性设置如下:
InOutProperty字段属性设置如下:
LastModifyTime字段属性设置如下:
OrderID字段属性设置如下:
RecordStatus字段属性设置如下:
SubjectID字段属性设置如下:
SubjectTypeID字段属性设置如下:
SupplierID字段属性设置如下:
UnitID字段属性设置如下:
UsedStatus字段属性设置如下:
RowNumber_字段属性设置如下:

SubjectCode字段属性设置如下:
SubjectName字段属性设置如下:
SubjectShortName字段属性设置如下:
XUnitID字段属性设置如下:
XInOutProperty字段属性设置如下:
XUsedStatus字段属性设置如下:
Remark字段属性设置如下:
7.打开操作SQL构件,选中会计科目管理模块中的科目类别界面元素的删除操作,属性设置如下图:
其中执行SQL为:
if exists(select 1 from SMSDB.dbo.JC_Subject whereSubjectTypeID=@SubjectTypeID_)
begin
 set @Out_='明细表有数据,不能删除!'
 return
end
delete from SMSDB.dbo.JC_SubjectType where SubjectTypeID=@SubjectTypeID_


@Out_为服务端SQL验证参数,验证提示信息会以弹出框的形式显示。
选中保存操作,其中新增状态的属性设置如下图:
新增状态的执行SQL为:
if exists(
 select 1 from SMSDB.dbo.JC_SubjectType where SubjectTypeCode=@SubjectTypeCode_ or SubjectTypeName=@SubjectTypeName_)
begin
 set @Out_='会计科目类别名称/会计科目类别编码已存在,不能重复录入!'
 return
end
Insert into SMSDB.dbo.JC_SubjectType
( CreateTime,Creator,LastModifyTime,OrderID,Remark,SubjectTypeCode,SubjectTypeID,SubjectTypeName,UsedStatus,SubjectTypeShortName )
values
( getdate(),@Creator_,getdate(),@OrderID_,@Remark_,@SubjectTypeCode_,@SubjectTypeID_,@SubjectTypeName_,0,@SubjectTypeShortName_)
--按OrderID排序的基础表,当用户不输入序号或想要插入到中间位置序号的自动处理
--当用户不输入序号时,默认序号为最大值;当用户想要插入到中间时,用户输入的数字后的序号会自动排序;
--作为解决系统在排序数字相同时默认排序问题,这里用到了LastModifyTime字段,所以要确保每次修改都要
--更新LastModifyTime字段
--排序
update SMSDB.dbo.JC_SubjectType
set OrderID=(
 select case when max(OrderID)+1 is null then 1
 else max(OrderID)+1 end
 from SMSDB.dbo.JC_SubjectType)
where OrderID is null
declare @ii int
declare @j int
declare @SubjectTypeID varchar(50)
set @ii=1
select @j=count(*)from SMSDB.dbo.JC_SubjectType
while(@ii<=@j)
begin
 select @SubjectTypeID=SubjectTypeID from(
  select row_number()over(order by orderID,LastModifyTime desc)as r,SubjectTypeID from SMSDB.dbo.JC_SubjectType
  )a_ where a_.r=@ii
-- --为了数据库在orderid相同时,默认排序对结果的影响,这里在更新前,先把占用即将用的序号空出来
-- update SMSDB.dbo.JC_SubjectType
-- set OrderID=@ii+1
-- where OrderID=@ii
 update SMSDB.dbo.JC_SubjectType
 set OrderID=@ii
 where SubjectTypeID=@SubjectTypeID
 set @ii=@ii+1
end
执行SQL功能日志描述为:
新增编号为@SubjectID_的会计科目信息
当生成日志时@SubjectID_会替换为具体的值
其中修改状态的属性设置如下图:
修改状态的执行SQL为:
if exists(
 select 1 from  SMSDB.dbo.JC_SubjectType
 where (SubjectTypeCode=@SubjectTypeCode_ orSubjectTypeName=@SubjectTypeName_) and SubjectTypeID<>@SubjectTypeID_)
begin
 set @Out_='会计科目类别名称/会计科目类别编码已存在,不能重复录入!'
 return
end
Update SMSDB.dbo.JC_SubjectType
set
 LastModifyTime=getdate(),
 OrderID=@OrderID_,
 Remark=@Remark_,
 SubjectTypeCode=@SubjectTypeCode_,
 SubjectTypeName=@SubjectTypeName_,
 SubjectTypeShortName=@SubjectTypeShortName_
where
 SubjectTypeID=@SubjectTypeID_
--按OrderID排序的基础表,当用户不输入序号或想要插入到中间位置序号的自动处理
--当用户不输入序号时,默认序号为最大值;当用户想要插入到中间时,用户输入的数字后的序号会自动排序;
--作为解决系统在排序数字相同时默认排序问题,这里用到了LastModifyTime字段,所以要确保每次修改都要
--更新LastModifyTime字段
--排序
update SMSDB.dbo.JC_SubjectType
set OrderID=(
 select case when max(OrderID)+1 is null then 1
 else max(OrderID)+1 end
 from SMSDB.dbo.JC_SubjectType)
where OrderID is null
declare @ii int
declare @j int
declare @SubjectTypeID varchar(50)
set @ii=1
select @j=count(*)from SMSDB.dbo.JC_SubjectType
while(@ii<=@j)
begin
 select @SubjectTypeID=SubjectTypeID from(
  select row_number()over(order by orderID,LastModifyTime desc)as r,SubjectTypeID from SMSDB.dbo.JC_SubjectType
  )a_ where a_.r=@ii
-- --为了数据库在orderid相同时,默认排序对结果的影响,这里在更新前,先把占用即将用的序号空出来
-- update SMSDB.dbo.JC_SubjectType
-- set OrderID=@ii+1
-- where OrderID=@ii
 update SMSDB.dbo.JC_SubjectType
 set OrderID=@ii
 where SubjectTypeID=@SubjectTypeID
 set @ii=@ii+1
end
执行SQL功能日志描述为:
修改编号为@SubjectID_的会计科目信息
当生成日志时@SubjectID_会替换为具体的值
选中启用操作,浏览状态的属性设置如下图:
浏览状态的执行SQL为:
update SMSDB.dbo.JC_SubjectType set UsedStatus=1 where SubjectTypeID=@SubjectTypeID_
选中禁用操作,浏览状态的属性设置如下图:
浏览状态的执行SQL为:
update SMSDB.dbo.JC_SubjectType set UsedStatus=2 where SubjectTypeID=@SubjectTypeID_

打开操作SQL构件,选中会计科目管理模块中的科目信息界面元素的删除操作,属性设置如下图:
其中执行SQL为:
delete from SMSDB.dbo.JC_Subject where SubjectID=@SubjectID_
选中保存操作,其中新增状态的属性设置如下图:
新增状态执行SQL为:
if exists(
 select 1 from  SMSDB.dbo.JC_Subject
 where (SubjectCode=@SubjectCode_ orSubjectName=@SubjectName_) andSubjectTypeID=@SubjectTypeID_)
begin
 set @Out_='会计科目名称/会计科目编码已存在,不能重复录入!'
 return
end
Insert into SMSDB.dbo.JC_Subject
( CreateTime,Creator,LastModifyTime,OrderID,Remark,SubjectCode,SubjectTypeID,SubjectName,
UsedStatus,SubjectShortName,RecordStatus,SubjectID,UnitID,InOutProperty)
values
( getdate(),@Creator_,getdate(),1,@Remark_,@SubjectCode_,@SubjectTypeID_,@SubjectName_,
0,@SubjectShortName_,1,@SubjectID_,@UnitID_,@InOutProperty_)
执行SQL功能日志描述为:
新增编号为@SubjectID_的会计科目信息
当生成日志时@SubjectID_会替换为具体的值
修改状态的属性设置如下图:
修改状态执行SQL为:
if exists(
 select 1 from  SMSDB.dbo.JC_Subject
 where (SubjectCode=@SubjectCode_ orSubjectName=@SubjectName_)
 and SubjectTypeID=@SubjectTypeID_ and SubjectID<>@SubjectID_)
begin
 set @Out_='会计科目名称/会计科目编码已存在,不能重复录入!'
 return
end
Update SMSDB.dbo.JC_Subject
set
 LastModifyTime=getdate(),
 Remark=@Remark_,
 SubjectCode=@SubjectCode_,
 SubjectName=@SubjectName_,
 SubjectShortName=@SubjectShortName_,
 UnitID=@UnitID_,
 InOutProperty=@InOutProperty_
where
 SubjectID=@SubjectID_
执行SQL功能日志描述为:
修改编号为@SubjectID_的会计科目信息
当生成日志时@SubjectID_会替换为具体的值
启用操作的属性设置如下图:
执行SQL为:
update SMSDB.dbo.JC_SubjectType set UsedStatus=1 where SubjectTypeID=@SubjectTypeID_
执行SQL功能日志描述为:
启用了编号为@SubjectTypeID_的会计科目类别信息
当生成日志时@SubjectTypeID_会替换为具体的值
禁用操作的属性设置如下图:
执行SQL为:
update SMSDB.dbo.JC_SubjectType set UsedStatus=2 where SubjectTypeID=@SubjectTypeID_
执行SQL功能日志描述为:
禁用了编号为@SubjectTypeID_会计科目类别信息
当生成日志时@SubjectTypeID_会替换为具体的值
到此为止,该模块定制完成,定制出来的模块可以对会计科目信息进行新增、修改和删除、启用、禁用等操作了。模块界面如下图:

0 0
原创粉丝点击