会计科目使用说明
# 1、目的
会计科目是财务基础资料,因为做了版本化的功能,有一些自己实现的业务逻辑,所以在其他业务系统或者二开单据使用上有一些需要注意的点,在此进行说明。如果要了解会计科目基本业务请参考【[会计科目](https://vip.kingdee.com/article/73447498840506880?productLineId=2&isKnowledge=2 "会计科目")】
# 2、基本介绍
会计科目版本化操作会产生不同的数据记录,每条科目记录存在开始日期和失效日期两个字段,不同科目使用版本主要就是根据这两个日期进行过滤。一般基础资料会记录最新版本的记录,而业务单据上会根据业务日期选择对应版本的科目。
# 3、使用场景
针对会计科目使用中可能遇到的问题和需要注意的点进行说明。
## 3.1、使用基础资料控件
添加基础资料控件,基础资料类型绑定【会计科目】,如果是在单据上使用,需要根据单据上某个业务日期去过滤对应版本的科目的话,则需要在代码中beforeF7时增加对应期间可用版本科目和科目表的过滤,怎么查找对应版本科目在【3.3】小节说明。科目是按科目表隔离,在系统可能存在多个科目表的情况下必须要加科目表过滤,不然在打开科目F7时会出现如下图问题,左树科目类型重复。注意科目表过滤条件需要单独加,不要跟其他过滤条件and一起。
```java
BasedataEdit basedata = this.getView().getControl("account");
basedata.addBeforeF7SelectListener({evt->{
//设置科目表过滤
long tableId = 10000L;
ListShowParameter param = (ListShowParameter) evt.getFormShowParameter();
List<QFilter> filters = param.getListFilterParameter().getQFilters();
filters.add(new QFilter("accounttable", "=", tableId));
});
```
![8.webp](/download/010020c767a4f87940e5aadf2994a5e47c2b.webp)
在使用基础资料或者多选基础资料绑定会计科目时,默认查询都是最新版本的科目,也就是结束日期等于2999-12-31的这条记录,如果想自定义过滤条件,不按2999-12-31过滤,那么需要在打开会计科目列表时传递自定义参数【**acct_filter**】,使用示例如下
```java
BasedataEdit basedata = this.getView().getControl("account");
basedata.addBeforeF7SelectListener({evt->{
//设置自定义科目日期过滤
long tableId = 10000L;
ListShowParameter param = (ListShowParameter) evt.getFormShowParameter();
List<QFilter> filters = param.getListFilterParameter().getQFilters();
param.getCustomParams().put("acct_filter", "true");
filters.add(new QFilter("startdate", "<=", "2022-01-31"));
filters.add(new QFilter("enddate", ">=", "2022-01-31"));
});
```
## 3.2、使用科目控件
基于财务比较常用,已经对会计科目封装成了一个业务字段可以直接使用。在设计器业务字段直接拉出来就可以使用。在单据中科目单选场景下推荐使用科目控件。下面对科目控件关键控件属性进行说明。
![9.webp](/download/01008df2e87cacf64401816e1438480d9dca.webp)
|属性|说明|备注|
|-|-|-|
| 显示长名称 | 打开开关,在显示属性配置有名称的情况下,则会把名称显示成长名称 | |
| 多版本 | 打开开关情况下,则会在科目进行版本化的时候自动进行替换,将该基础资料上的科目替换成最新版本的数据 |一般单据不打开这个参数,需要保持最新版本的基础资料可以打开|
| 科目使用期间 | 配置科目对应可以使用的期间字段,则可以自动根据该字段找到可用版本的科目 | 需配置期间字段,不配置则查询最新版本科目 |
|科目表| 配置科目表基础资料,会根据配置的科目表过滤,否则需要自己代码处理| 代码处理参考3.1部分|
## 3.3、代码查找对应版本科目
在很多开发场景中需要根据科目编码找到对应日期可用版本的科目,则需要按照特定的几个查询条件进行查询,示例如下
```java
//假设查询科目1001对应的id 期间period:2021年5期
long orgId = 100000L;
long acctTableId = 1L;
// 财务用期间定义,也可以直接取单据对应记账日期或者业务日期进行过滤
Date enddate = period.getDate("enddate");
//当前组织可用的科目
QFilter forgId = BaseDataServiceHelper.getBaseDataFilter("bd_accountview", orgId);
//科目表过滤
QFilter faccttableId = new QFilter("accounttable", QCP.equals, acctTableId);
//科目编码
QFilter facct = new QFilter("number", QCP.equals, "1001");
//科目生效日期过滤
QFilter fdate = new QFilter("startdate", QCP.less_equals, enddate)
.and(new QFilter("enddate", QCP.large_equals, enddate));
//查询对应日期可用科目版本id
QueryServiceHelper.queryDataSet("", "bd_accountview", "id", new QFilter[]{forgId, faccttableId, facct, fdate}, null);
```
如果知道当前科目数据masterid,也可以使用masterid进行查找,示例如下
```java
//假设查询科目1001对应的id 期间period:2021年5期
long orgId = 100000L;
long masterid = 1L;
// 财务用期间定义,也可以直接取单据对应记账日期或者业务日期进行过滤
Date enddate = period.getDate("enddate");
//当前组织可用的科目
QFilter forgId = BaseDataServiceHelper.getBaseDataFilter("bd_accountview", orgId);
//科目masterid
QFilter fmasterid = new QFilter("masterid", QCP.equals, masterid);
//科目生效日期过滤
QFilter fdate = new QFilter("startdate", QCP.less_equals, enddate)
.and(new QFilter("enddate", QCP.large_equals, enddate));
//查询对应日期可用科目版本id
QueryServiceHelper.queryDataSet("", "bd_accountview", "id", new QFilter[]{forgId, faccttableId, facct, fdate}, null);
```
会计科目使用说明
# 1、目的会计科目是财务基础资料,因为做了版本化的功能,有一些自己实现的业务逻辑,所以在其他业务系统或者二开单据使用上有一些需要注...
点击下载文档
本文2024-09-22 22:56:08发表“云星瀚知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-xinghan-129799.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章