通过阿米巴中的自定义函数实现报表功能 ​原创
金蝶云社区-云社区用户I2h85302
云社区用户I2h85302
7人赞赏了该文章 1,004次浏览 未经作者许可,禁止转载编辑于2020年08月12日 21:04:36

客户需要的报表种类很多,实现方式也很多(例如:简单账表、SQL报表等等),这个介绍一下通过自定义报表结合自定义函数功能实现动态罗列报表的需求


下方是需求及设置方法可供顾问参考(由于上传图片不是很方便,所以上传部分图片可供参考,若需要文档可与我联系)


通过阿米巴报表的功能实现客户需求

一、报表需求

 

       1.png说明:通过各个涉及单据上的客户字段(项目名称)贯穿,获取对应数据

二、实现方法

(一)  定义报表项目

 

 

2.png

 

(二)  定义项目数据类型

 

 

3.png

  

(三)  定义模板样式方案

 

4.png

 

5.png

对于每个报表项目需单独设置报表项目取数公式,以下是各个报表项目的设置方法

 


1、   负责人

a)      获取销售订单-销售员

自定义函数,通过客户编码取销售订单销售员(前置条件:无;参数定义客户)6.png

 

7.png

8.png--代码示例:

select FNAME from V_BD_SALESMAN_L

where

FID in

((SELECT FSALERID FROM T_SAL_ORDER where FCUSTID in (select FCUSTID from T_BD_CUSTOMER where FNumber like @KHBM)))

b)      定义项目取数公式

 

 

公式:GetOrderXSY_Cust("")

 

2、   小组

a)      获取销售订单-部门

自定义函数,通过客户编码取销售订单值部门值(前置条件:无;参数定义客户)

9.png

 


--代码示例:

select FNAME from T_BD_DEPARTMENT_L

where FLOCALEID=2052 and

FDEPTID in

((SELECT FSALEDEPTID FROM T_SAL_ORDER where FCUSTID in (select FCUSTID from T_BD_CUSTOMER where FNumber like @KHBM)))

b)      定义项目取数公式

公式:GetOrderBM_Cust("")

 

3、   产品类型

a)      获取销售订单-物料分组

通过客户编码取销售订单值:物料分组(前置条件:无;参数定义客户)

 

--示例,编码取:通过客户编码取值:物料分组(参数定义客户)

declare @KHBM varchar(50)

set @KHBM='CUST0006'

select FName from T_BD_MATERIALGROUP_L

where

FLOCALEID=2052 and

FID in

 (select tt2.WLFZID from T_SAL_ORDER t1

       inner join T_SAL_ORDERENTRY t2 on t1.FID=T2.FID

       inner join T_BD_CUSTOMER tt1 on t1.FCUSTID=tt1.FCUSTID and tt1.FNUMBER like @KHBM

       inner join T_BD_MATERIAL t3 on t2.FMATERIALID=t3.FMATERIALID

       inner join (select A1.FID,A1.WLFZID,A2.FNUMBER WLFZBM FROM

       (select FID,CASE when FFULLPARENTID='' then convert(varchar(9),Fid) else right(LEFT(FFULLPARENTID,7),6) end WLFZID from T_BD_MATERIALGROUP) A1

       INNER JOIN T_BD_MATERIALGROUP A2 ON A1.WLFZID=A2.FID ) tt2 on t3.FMATERIALGROUP=tt2.FID)

b)      定义项目取数公式

公式:GetOrderWLFZ_Cust("")

 

4、   发货数量

a)      获取销售出库单-发货数量

通过客户编码取销售出库单值:发货数量(前置条件:无;参数定义客户)

 

 

b)      定义项目取数公式

公式:GetStockSalesCKSL_Cust("","Z1002")

 

5、   签收数量

a)      获取应收单-计价数量

通过客户编码取应收单值:计价数量(前置条件:无;参数定义客户)

 

 

b)      定义项目取数公式

公式:GetReceivableJJSL_CUST("","Z1002")

 

6、   收入

a)      获取应收单-不含税金额

通过客户编码取应收单值:不含税金额(前置条件:无;参数定义客户)

 

 

b)      定义项目取数公式

公式:GetReceivableBHSJE_CUST("","Z1003")

7、   生产成本

生产成本=(材料成本+辅材成本)

a)      获取材料成本

通过客户编码+物料分组取销售出库单值:明细信息-总成本

(前置条件:无、参数定义客户+物料分组参数)

 

 

b)      获取辅料成本

通过客户编码+物料分组取其他出库单值:明细信息-总成本

(前置条件:单据类型=费用/辅料出库、参数定义客户+物料分组参数)

 

 

c)      定义项目取数公式

公式:GetReceivableBHSJE_CUST("","Z1003")

8、   运输费1

a)      获取销售出库单-物料总成本

通过客户编码+物料分组取销售出库单值:明细信息-总成本

(前置条件:无;参数定义客户+物料分组参数)

 

 

b)      定义项目取数公式

公式:GetStockSalesYFCB_Cust("","Z1003")

 

9、   项目销售费用小计

公式:=

INDEX(K1:K200,ROW(),1)+INDEX(L1:L200,ROW(),1)+INDEX(M1:M200,ROW(),1)+INDEX(N1:N200,ROW(),1)+INDEX(O1:O200,ROW(),1)+INDEX(Q1:Q200,ROW(),1)

 

10、         业务招待费

a)      定义获取凭证指定科目、客户的借方发生数

 

--示例,取凭证发生数(参数定义科目代码、客户代码)

select sum(FAMOUNT) from T_GL_VOUCHERENTRY AA

       inner join T_BD_FLEXITEMDETAILV BB on aa.FDETAILID=bb.fid           

       left join T_BD_CUSTOMER CC on BB.FFLEX6=CC.FCustid                           

       inner join T_GL_VOUCHER DD on AA.FVOUCHERID=DD.FVOUCHERID      

       inner join T_BD_ACCOUNTBOOK EE on DD.FACCOUNTBOOKID=EE.FBOOKID

       inner join T_BD_ACCOUNT FF on AA.FACCOUNTID=FF.FACCTID               

       where

       FF.FNUMBER like '@KMDM'

       and

       CC.FNUMBER like @KHDM

       and

       AA.FDC=1

 

b)      定义项目取数公式

公式:GetVoucherJFFSS_KM_KH("6601.03","")

 

11、         经营费

公式:GetVoucherJFFSS_KM_KH("6601.02","")

 

12、         运输费2

公式:GetVoucherJFFSS_KM_KH("6601.04","")

 

13、         检测费

公式:GetVoucherJFFSS_KM_KH("6601.05","")

 

14、         其他费用

公式:GetVoucherJFFSS_KM_KH("6601.07","")

 

15、         收款费用

公式:GetVoucherJFFSS_KM_KH("6601.06","")

 

16、         回款提成

公式:GetVoucherJFFSS_KM_KH("6601.08","")

 

17、         销售费用占比收入

公式:

 IF(INDEX(G1:G200,ROW(),1)<>0,INDEX(J1:J200,ROW(),1)/INDEX(G1:G200,ROW(),1),0)

             

18、         回款

a)      定义获取凭证指定科目、客户的借方发生数

 

--示例,取凭证发生数(参数定义科目代码、客户代码)

select sum(FAMOUNT) from T_GL_VOUCHERENTRY AA

       inner join T_BD_FLEXITEMDETAILV BB on aa.FDETAILID=bb.fid           

       left join T_BD_CUSTOMER CC on BB.FFLEX6=CC.FCustid                           

       inner join T_GL_VOUCHER DD on AA.FVOUCHERID=DD.FVOUCHERID      

       inner join T_BD_ACCOUNTBOOK EE on DD.FACCOUNTBOOKID=EE.FBOOKID

       inner join T_BD_ACCOUNT FF on AA.FACCOUNTID=FF.FACCTID               

       where

       FF.FNUMBER like '@KMDM'

       and

       CC.FNUMBER like @KHDM

       and

       AA.FDC=-1

b)      定义项目取数公式

公式:GetVoucherDFFSS_KM_KH("1122","")+GetVoucherDFFSS_KM_KH("2203","")

 

19、         公共销售费用摊销(70%部分产值摊销)

公式:手工填写(表格解除锁定)

 

20、         管理、财务费用摊销(70%部分产值摊销)

公式:手工填写(表格解除锁定)

 

21、         按照人员摊销30%

公式:手工填写(表格解除锁定)

 

22、         人员摊销余下部分按产值摊销到组

公式:手工填写(表格解除锁定)

23、         主营业务税金及附加

公式:GetVoucherDFFSS_KM_KH("6403","")+GetVoucherDFFSS_KM_KH("6801.02","")

24、         净利润

公式:

INDEX(G1:G200,ROW(),1)-INDEX(H1:H200,ROW(),1)-INDEX(I1:I200,ROW(),1)-INDEX(J1:J200,ROW(),1)-INDEX(T1:T200,ROW(),1)-INDEX(U1:U200,ROW(),1)-INDEX(V1:V200,ROW(),1)-INDEX(W1:W200,ROW(),1)-INDEX(X1:X200,ROW(),1)

25、         利润率

公式:

IF(INDEX(G1:G200,ROW(),1)<>0,INDEX(Y1:Y200,ROW(),1)/INDEX(G1:G200,ROW(),1),0)

 

26、         现金利润

公式:

INDEX(S1:S200,ROW(),1)-(INDEX(H1:H200,ROW(),1)+INDEX(I1:I200,ROW(),1)+INDEX(J1:J200,ROW(),1)+INDEX(T1:T200,ROW(),1)+INDEX(U1:U200,ROW(),1)+INDEX(V1:V200,ROW(),1)+INDEX(W1:W200,ROW(),1)+INDEX(X1:X200,ROW(),1))

       

 

(四)  新增个别报表模板

1、   在集团公司下新增报表模板

 

2、   将定义好的模板样式方案进行填充

 

 

注:设置行数为200行(若要增加,需调整报表项目取数公式)

3、   填充完成后对格式设置并保存、提交审核并共享给相关单位即可应用

 

鄙人微信号8862050,欢迎大家交流


赞 7