// //税款计算(现金流)
// //2018年5月11日修改,去除之前的送数逻辑,新增BADI计算相关科目
// *SELECT(%010804ZH%, "ID", "TIME", "[PLAN] = Y")
// *SELECT(%010804ZH1%, "ID", "TIME", "[PLAN] = S")

// //计算分期分产品,管理口径的1.1.1.1、预缴增值税基数 A01030402,1.1.1、预缴增值税 A01030401010101以及分期分产品(普通、非普通、其他)
// //的1.1.1.1、预缴土地增值税基数 A01030404,1.1、预缴土地增值税 A01030403010101
// //清数开始
// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030402,A01030401010101  //1.1.1.1、预缴增值税基数,1.1.1、预缴增值税
// *XDIM_MEMBERSET PRODUCT = BAS(P01)
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101  //管理
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030402,A01030401010101
//  *WHEN P_ENTITY.LEVEL
//      *IS <>"L5.1"
//      *REC(EXPRESSION=0)
//  *ENDWHEN
// *ENDWHEN 

// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030404,A01030403010101  //1.1.1.1、预缴土地增值税基数、1.1、预缴土地增值税
// *XDIM_MEMBERSET PRODUCT = BAS(P01)
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD01020301,AD01020302,AD01020303  //普通,非普通,其他
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030404,A01030403010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L6","L7"
//      *REC(EXPRESSION=0)
//  *ENDWHEN
// *ENDWHEN 
// *COMMIT
// //清数结束
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET PRODUCT = BAS(P01)
// *XDIM_MEMBERSET TIME = BAS(PTIME_TOTAL)
// *XDIM_MEMBERSET P_ACCOUNT =A010104,A010105 
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *START_BADI SKJS_XJL
//  QUERY = OFF
//  WRITE = ON
// *END_BADI

// //计算项目.INP,不区分产品,管理口径的1.1.1.1、预缴增值税基数 A01030402,1.1.1、预缴增值税 A01030401010101
// //将分期分产品的数据写到项目.INP,不区分产品上
// //清数开始
// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030402,A01030401010101  //1.1.1.1、预缴增值税基数,1.1.1、预缴增值税
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101  //管理
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030402,A01030401010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L5.1"
//      *REC(EXPRESSION=0)
//  *ENDWHEN
// *ENDWHEN 
// *COMMIT
// //清数结束
// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030402,A01030401010101  //1.1.1.1、预缴增值税基数,1.1.1、预缴增值税
// *XDIM_MEMBERSET PRODUCT = BAS(P01)
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101  //管理
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030402,A01030401010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L6","L7"
//      *REC(EXPRESSION=%VALUE%,PRODUCT = WO_PRODUCT,P_ENTITY = P_ENTITY.MAPPINGT)
//  *ENDWHEN
// *ENDWHEN 

// //计算项目.INP,不区分产品,普通/非普通/其他口径的1.1.1.1、预缴土地增值税基数 A01030404,1.1、预缴土地增值税 A01030403010101,上月实际手录
// //将分期分产品的数据写到项目.INP,不区分产品上
// //清数开始
// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030404,A01030403010101  //1.1.1.1、预缴土地增值税基数、1.1、预缴土地增值税
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD01020301,AD01020302,AD01020303  //普通,非普通,其他
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030404,A01030403010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L5.1"
//      *REC(EXPRESSION=0)
//  *ENDWHEN
// *ENDWHEN 
// *COMMIT
// //清数结束
// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030404,A01030403010101  //1.1.1.1、预缴土地增值税基数、1.1、预缴土地增值税
// *XDIM_MEMBERSET PRODUCT = BAS(P01)
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD01020301,AD01020302,AD01020303  //普通,非普通,其他
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030404,A01030403010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L6","L7"
//  *WHEN P_ENTITY.MAPPINGT
//  *IS <> ""
//      *REC(EXPRESSION=%VALUE%,PRODUCT = WO_PRODUCT,P_ENTITY = P_ENTITY.MAPPINGT)  //普通,非普通,其他
//  *ENDWHEN
//  *ENDWHEN
// *ENDWHEN 
// *COMMIT

// //计算项目.INP,不区分产品,管理口径的1.1.1.1、预缴土地增值税基数 A01030404,1.1、预缴土地增值税 A01030403010101,上月实际计算
// //清数开始
// *XDIM_MEMBERSET TIME = %010804ZH1%,%010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030404,A01030403010101  //1.1.1.1、预缴土地增值税基数、1.1、预缴土地增值税
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101  //管理
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030404,A01030403010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L5.1"
//      *REC(EXPRESSION=0)
//  *ENDWHEN
// *ENDWHEN 
// *COMMIT
// //清数结束
// *XDIM_MEMBERSET TIME = %010804ZH1%,%010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET P_ACCOUNT = A01030404,A01030403010101  //1.1.1.1、预缴土地增值税基数、1.1、预缴土地增值税
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD01020301,AD01020302,AD01020303  //普通,非普通,其他
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A01030404,A01030403010101
//  *WHEN P_ENTITY.LEVEL
//      *IS "L5.1"
//  *REC(EXPRESSION=%VALUE%,ADDITION=AD010101)  //管理
//  *ENDWHEN
// *ENDWHEN 
// *COMMIT

// //计算预缴附加税
// //“预缴增值税小计”*《税率表》“附加税率”
// //清数开始
// // *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// // *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// // *XDIM_MEMBERSET TIME = BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
// // *XDIM_ADDMEMBERSET TIME = %010804ZH%,3010.01
// // *XDIM_MEMBERSET P_ACCOUNT = A01030401020101
// // *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// // *XDIM_MEMBERSET AUDITTRAIL = INPUT
// // *XDIM_MEMBERSET ADDITION = AD010101
// // *XDIM_MEMBERSET ITEM = WO_ITEM
// // *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// // *XDIM_MEMBERSET RESERVE = WO_RESERVE
// // *WHEN P_ACCOUNT
// //  *IS *
// //  *REC(EXPRESSION = 0)
// // *ENDWHEN 
// // *COMMIT 
// //清数结束
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET TIME = BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
// *XDIM_ADDMEMBERSET TIME = %010804ZH%,3010.01
// *XDIM_MEMBERSET P_ACCOUNT = BAS(A010304010101)      //预缴增值税小计
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS BAS(A010304010101)
//  *REC(EXPRESSION = %VALUE%*([P_ACCOUNT].[A01050504],[TIME].[WO_TIME],[ADDITION].[WO_ADDITION]),P_ACCOUNT=A01030401020101)
// *ENDWHEN 

// //计算3.小税种(土地使用税+房产税+印花税+车船税+其他)
// //《税款计算(小税种)》(“土地使用税合计”+“房产税合计”+“印花税合计”+“车船税”+其他)
// //清数开始
// // *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// // *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// // *XDIM_MEMBERSET TIME = BAS(PTIME_TOTAL)
// // *XDIM_MEMBERSET P_ACCOUNT = A0103040103
// // *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// // *XDIM_MEMBERSET AUDITTRAIL = INPUT
// // *XDIM_MEMBERSET ADDITION = AD010101
// // *XDIM_MEMBERSET ITEM = WO_ITEM
// // *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// // *XDIM_MEMBERSET RESERVE = WO_RESERVE
// // *WHEN P_ACCOUNT
// //  *IS *
// //  *REC(EXPRESSION = 0)
// // *ENDWHEN 
// // *COMMIT 
// //清数结束
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET TIME = BAS(PTIME_TOTAL)
// *XDIM_MEMBERSET P_ACCOUNT = BAS(A01030301),BAS(A01030303),BAS(A01030305),A01030306,A01030307,A01030309
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS *
//  *REC(EXPRESSION = %VALUE%,P_ACCOUNT=A0103040103)
// *ENDWHEN  

// //计算按纳税义务发生时间补缴增值税对应附加税
// //清数开始
// // *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// // *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// // *XDIM_MEMBERSET TIME = BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
// // *XDIM_ADDMEMBERSET TIME = %010804ZH%,3010.01 
// // *XDIM_MEMBERSET P_ACCOUNT = A010304010202      
// // *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// // *XDIM_MEMBERSET AUDITTRAIL = INPUT
// // *XDIM_MEMBERSET ADDITION = AD010101
// // *XDIM_MEMBERSET ITEM = WO_ITEM
// // *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// // *XDIM_MEMBERSET RESERVE = WO_RESERVE
// // *WHEN P_ACCOUNT
// //  *IS *
// //  *REC(EXPRESSION = 0)
// // *ENDWHEN 
// // *COMMIT 
// //清数结束
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET TIME = BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
// *XDIM_ADDMEMBERSET TIME = %010804ZH%,3010.01 
// *XDIM_MEMBERSET P_ACCOUNT = A010304010102      //按纳税义务发生时间补缴增值税
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS A010304010102
//  *REC(EXPRESSION = %VALUE%*([P_ACCOUNT].[A01050504],[TIME].[WO_TIME],[ADDITION].[WO_ADDITION]),P_ACCOUNT=A010304010202)
// *ENDWHEN  

// //计算上一年一月及以后的1.1.1.1、利润总额,1.1.1.2、预缴企业所得税回款基数,1.1.1.3、预缴企业所得税结转收入基数,1.1.1.4、土增税(现金流口径),1.1.1.5、附加税(现金流口径)
// //1.1.1.6、土增税(利润口径),1.1.1.7、附加税(利润口径),1.1.1、应税利润,1.1.2、当年累计应税利润
// //当前版本及以后年月的1.1、预缴企业所得税
// //清数开始
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET TIME = %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01 
// *XDIM_MEMBERSET P_ACCOUNT = A010304070101 //1.1、预缴企业所得税
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS *
//  *REC(EXPRESSION = 0)
// *ENDWHEN

// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
// *XDIM_MEMBERSET TIME =BAS(2999.TOTAL),BAS(3000.TOTAL),BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
// *XDIM_MEMBERSET P_ACCOUNT = A01030408,A01030409,A01030412,A01030413,A01030414,A01030415,A01030416,A01030417,A01030418
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET ADDITION = AD010101
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *WHEN P_ACCOUNT
//  *IS *
//  *REC(EXPRESSION = 0)
// *ENDWHEN 
// *COMMIT
// //清数结束
// *XDIM_MEMBERSET TIME = BAS(2999.TOTAL),BAS(3000.TOTAL),BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),WO_TIME      //计划时间
// *XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
// *XDIM_MEMBERSET P_ACCOUNT = A010601,A0201010201,A02010101010105,A02010101010101,A010105,A01050506,A01050505,A01030411,A010304070101,A010304070102      //利润总额
// *XDIM_MEMBERSET CATEGORY = %CATEGORY_SET% 
// *XDIM_MEMBERSET AUDITTRAIL = INPUT
// *XDIM_MEMBERSET PRODUCT = WO_PRODUCT,BAS(P01)
// *XDIM_MEMBERSET ADDITION = AD010101,AD010103,WO_ADDITION
// *XDIM_MEMBERSET ITEM = WO_ITEM
// *XDIM_MEMBERSET D_TYPE = WO_D_TYPE
// *XDIM_MEMBERSET RESERVE = WO_RESERVE
// *START_BADI TAX_CF
//  QUERY = ON
//  WRITE = ON
// *END_BADI 

//税款计算(现金流) 20190310 优化by zhoulf
//20190814 modify by yanglf:对于管理口径预缴土增税,新增当年调实期的计算

*SELECT(%010804ZH%, "ID", "TIME", "[PLAN] = Y")
// *SELECT(%010804ZH1%, "ID", "TIME", "[PLAN] = S")
// *SELECT(%010804ZH2%, "ID", "TIME", "[PLAN] = X")
*SELECT(%010804ZH1%, "ID", "TIME", "[ID]>=2985.12 AND [ID]<3001.01 AND [PLAN]<>Y")  //上年及以前实际数


//计算清0;
//分期分产品:1、管理口径的预缴增值税基数,预缴增值税;2、普通、非普通、其他的预缴土地增值税基数、预缴土地增值税;
//项目不区分产品:3、管理口径的预缴增值税基数,预缴增值税;4、普通,非普通,其他的预缴土地增值税基数、预缴土地增值税;5、管理口径的预缴土地增值税基数、预缴土地增值税
//项目不区分产品:6、预缴企业所得税;71.1.1.2-1.1.1.8
*XDIM_MEMBERSET TIME = %010804ZH1%,%010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
*XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_MEMBERSET P_ACCOUNT = A01030402,A01030401010101,A01030404,A01030403010101,A01030402,A01030401010101,A010304070101,A01030408,A01030409,A01030412,A01030413,A01030414,A01030415,A01030416,A01030417,A01030418
*XDIM_MEMBERSET PRODUCT = BAS(P01),WO_PRODUCT
*XDIM_MEMBERSET AUDITTRAIL = INPUT
*XDIM_MEMBERSET ADDITION = AD010101,AD01020301,AD01020302,AD01020303
*XDIM_MEMBERSET ITEM = WO_ITEM
*XDIM_MEMBERSET D_TYPE = WO_D_TYPE
*XDIM_MEMBERSET RESERVE = WO_RESERVE
*WHEN TIME
  *IS %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
  *WHEN PRODUCT
    *IS BAS(P01)
    *WHEN ADDITION
      *IS AD010101
      *WHEN P_ACCOUNT
      *IS A01030402,A01030401010101  //分期分产品:1、管理口径的预缴增值税基数,预缴增值税;
      *WHEN P_ENTITY.LEVEL
         *IS <>"L5.1"
         *REC(FACTOR = 0)
      *ENDWHEN
    *ENDWHEN
      *IS AD01020301,AD01020302,AD01020303   
      *WHEN P_ACCOUNT
      *IS A01030404,A01030403010101   //分期分产品:2、普通、非普通、其他的预缴土地增值税基数、预缴土地增值税;
      *WHEN P_ENTITY.LEVEL
         *IS "L6","L7"
         *REC(FACTOR = 0)
      *ENDWHEN
    *ENDWHEN
  *ENDWHEN 
    *IS WO_PRODUCT
    *WHEN ADDITION
      *IS AD010101
      *WHEN P_ACCOUNT
      *IS A01030402,A01030401010101,A01030401020101  //不区分产品:3、管理口径的预缴增值税基数,预缴增值税、2.1.1、预缴附加税(20190504新增附加税清数);
      *WHEN P_ENTITY.LEVEL
         *IS "L5.1"
         *REC(FACTOR = 0)
      *ENDWHEN   
      *IS A010304070101  //不区分产品:6、预缴企业所得税
      *WHEN P_ENTITY.LEVEL
         *IS "L5.1"
         *REC(FACTOR = 0)
      *ENDWHEN           
    *ENDWHEN
      *IS AD01020301,AD01020302,AD01020303 
      *WHEN P_ACCOUNT
      *IS A01030404,A01030403010101  //不区分产品:4、普通,非普通,其他的预缴土地增值税基数、预缴土地增值税;
      *WHEN P_ENTITY.LEVEL
         *IS "L5.1"
         *REC(FACTOR = 0)
      *ENDWHEN
    *ENDWHEN
  *ENDWHEN          
*ENDWHEN
  *IS %010804ZH1%,%010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01     //计划时间
  *WHEN PRODUCT
    *IS WO_PRODUCT
    *WHEN ADDITION
      *IS AD010101
      *WHEN P_ACCOUNT
      *IS A01030404,A01030403010101  //不区分产品:5、管理口径的预缴土地增值税基数、预缴土地增值税
      *WHEN P_ENTITY.LEVEL
         *IS "L5.1"
         *REC(FACTOR = 0)
      *ENDWHEN
    *ENDWHEN
  *ENDWHEN
*ENDWHEN
  *IS BAS(2999.TOTAL),BAS(3000.TOTAL),BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
  *WHEN PRODUCT
    *IS WO_PRODUCT
    *WHEN ADDITION
      *IS AD010101
      *WHEN P_ACCOUNT  //71.1.1.2-1.1.1.8
      *IS A01030408,A01030409,A01030412,A01030413,A01030414,A01030415,A01030416,A01030417,A01030418 
      *WHEN P_ENTITY.LEVEL
         *IS "L5.1"
         *REC(FACTOR = 0)
      *ENDWHEN
    *ENDWHEN
  *ENDWHEN
*ENDWHEN
*ENDWHEN 

//计算分期分产品,管理口径的预缴增值税基数、预缴增值税以及分期分产品(普通、非普通、其他)预缴土地增值税基数、预缴土地增值税
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
*XDIM_MEMBERSET PRODUCT = BAS(P01)
*XDIM_MEMBERSET TIME = BAS(PTIME_TOTAL)
*XDIM_MEMBERSET P_ACCOUNT =A010104,A010105 
*XDIM_MEMBERSET AUDITTRAIL = INPUT
*XDIM_MEMBERSET ADDITION = AD010101
*XDIM_MEMBERSET ITEM = WO_ITEM
*XDIM_MEMBERSET D_TYPE = WO_D_TYPE
*XDIM_MEMBERSET RESERVE = WO_RESERVE
*START_BADI SKJS_XJL
QUERY = OFF
WRITE = ON
*END_BADI

//1.计算项目.INP,不区分产品,管理口径的预缴增值税基数、预缴增值税,将分期分产品的数据写到项目.INP,不区分产品上;
//2.计算项目.INP,不区分产品,普通/非普通/其他口径的预缴土地增值税基数、预缴土地增值税、上月实际手录,将分期分产品的数据写到项目.INP,不区分产品上;
//3.计算项目.INP,不区分产品,管理口径的预缴土地增值税基数、预缴土地增值税,含第2点手工调实数,上月实际计算
*XDIM_MEMBERSET TIME = %010804ZH1%,%010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01    //全周期
*XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_MEMBERSET P_ACCOUNT = A01030402,A01030401010101,A01030404,A01030403010101  
*XDIM_MEMBERSET PRODUCT = BAS(P01),WO_PRODUCT
*XDIM_MEMBERSET AUDITTRAIL = INPUT
*XDIM_MEMBERSET ADDITION = AD010101,AD01020301,AD01020302,AD01020303
*XDIM_MEMBERSET ITEM = WO_ITEM
*XDIM_MEMBERSET D_TYPE = WO_D_TYPE
*XDIM_MEMBERSET RESERVE = WO_RESERVE
*WHEN TIME
  *IS %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01      //计划时间
  *WHEN PRODUCT
    *IS BAS(P01)
  *WHEN ADDITION
    *IS AD010101
    *WHEN P_ACCOUNT
     *IS A01030402,A01030401010101 //1、管理口径的预缴增值税基数、预缴增值税
    *WHEN P_ENTITY.LEVEL
       *IS "L6","L7"
       *REC(EXPRESSION=%VALUE%,PRODUCT = WO_PRODUCT,P_ENTITY = P_ENTITY.MAPPINGT)
     *ENDWHEN
   *ENDWHEN
    *IS AD01020301,AD01020302,AD01020303
    *WHEN P_ACCOUNT
     *IS A01030404,A01030403010101  //2、普通/非普通/其他口径的预缴土地增值税基数、预缴土地增值税;3、管理口径的预缴土地增值税基数、预缴土地增值税
     *WHEN P_ENTITY.LEVEL
       *IS "L6","L7"
        *REC(EXPRESSION=%VALUE%,PRODUCT = WO_PRODUCT,P_ENTITY = P_ENTITY.MAPPINGT)
        *REC(EXPRESSION=%VALUE%,PRODUCT = WO_PRODUCT,P_ENTITY = P_ENTITY.MAPPINGT,ADDITION=AD010101)        //管理 
     *ENDWHEN
   *ENDWHEN
  *ENDWHEN
  *ENDWHEN
  *IS %010804ZH1%    //加上实际期
  *WHEN PRODUCT
    *IS WO_PRODUCT
  *WHEN ADDITION
    *IS AD01020301,AD01020302,AD01020303  
    *WHEN P_ACCOUNT
     *IS A01030404,A01030403010101  //3、管理口径的预缴土地增值税基数、预缴土地增值税
     *WHEN P_ENTITY.LEVEL
       *IS "L5.1"
        *REC(EXPRESSION=%VALUE%,PRODUCT = WO_PRODUCT,ADDITION=AD010101)        //管理 
     *ENDWHEN
   *ENDWHEN
  *ENDWHEN
  *ENDWHEN   
*ENDWHEN 

//1.计算预缴附加税;2.小税种;3.计算按纳税义务发生时间补缴增值税对应附加税;
*XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_MEMBERSET TIME = BAS(PTIME_TOTAL)
*XDIM_MEMBERSET P_ACCOUNT = BAS(A010304010101),BAS(A01030301),BAS(A01030303),BAS(A01030305),A01030306,A01030307,A01030309,A010304010102
*XDIM_MEMBERSET PRODUCT = WO_PRODUCT
*XDIM_MEMBERSET AUDITTRAIL = INPUT
*XDIM_MEMBERSET ADDITION = AD010101
*XDIM_MEMBERSET ITEM = WO_ITEM
*XDIM_MEMBERSET D_TYPE = WO_D_TYPE
*XDIM_MEMBERSET RESERVE = WO_RESERVE
*WHEN TIME
  *IS %010804ZH%,BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),3010.01
  *WHEN P_ACCOUNT
  *IS BAS(A010304010101)  //1.计算预缴附加税;
  *REC(EXPRESSION = %VALUE%*([P_ACCOUNT].[A01050504],[TIME].[WO_TIME],[ADDITION].[WO_ADDITION]),P_ACCOUNT=A01030401020101)
  *IS A010304010102 //3.计算按纳税义务发生时间补缴增值税对应附加税
  *REC(EXPRESSION = %VALUE%*([P_ACCOUNT].[A01050504],[TIME].[WO_TIME],[ADDITION].[WO_ADDITION]),P_ACCOUNT=A010304010202)
*ENDWHEN
  *IS BAS(PTIME_TOTAL)
  *WHEN P_ACCOUNT   //2.小税种
  *IS BAS(A01030301),BAS(A01030303),BAS(A01030305),A01030306,A01030307,A01030309
  *REC(EXPRESSION = %VALUE%,P_ACCOUNT=A0103040103)
*ENDWHEN
*ENDWHEN 

//计算上一年一月及以后的1.1.1.1、利润总额,1.1.1.2、预缴企业所得税回款基数,1.1.1.3、预缴企业所得税结转收入基数,1.1.1.4、土增税(现金流口径),1.1.1.5、附加税(现金流口径)
//1.1.1.6、土增税(利润口径),1.1.1.7、附加税(利润口径),1.1.1、应税利润,1.1.2、当年累计应税利润
//当前版本及以后年月的1.1、预缴企业所得税
*XDIM_MEMBERSET TIME = BAS(2999.TOTAL),BAS(3000.TOTAL),BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL),WO_TIME      //计划时间
*XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
*XDIM_MEMBERSET P_ACCOUNT = A010601,A0201010201,A02010101010105,A02010101010101,A010105,A01050506,A01050505,A01030411,A010304070101,A010304070102      //利润总额
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET% 
*XDIM_MEMBERSET AUDITTRAIL = INPUT
*XDIM_MEMBERSET PRODUCT = WO_PRODUCT,BAS(P01)
*XDIM_MEMBERSET ADDITION = AD010101,AD010103,WO_ADDITION
*XDIM_MEMBERSET ITEM = WO_ITEM
*XDIM_MEMBERSET D_TYPE = WO_D_TYPE
*XDIM_MEMBERSET RESERVE = WO_RESERVE
*START_BADI TAX_CF
QUERY = ON
WRITE = ON
*END_BADI 
*SELECT(%010803ZH1%, "ID", "TIME", "[PLAN] = 'Y'")

*XDIM_MEMBERSET P_ENTITY = BAS(%P_ENTITY_SET%)
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_MEMBERSET TIME = BAS(3001.TOTAL),BAS(3002.TOTAL),BAS(3003.TOTAL),BAS(3004.TOTAL),BAS(3005.TOTAL),BAS(3006.TOTAL),BAS(3007.TOTAL),BAS(3008.TOTAL),BAS(3009.TOTAL) 
*XDIM_ADDMEMBERSET TIME = %010803ZH1%,3010.01 
*XDIM_MEMBERSET P_ACCOUNT = A01030202,A01030203,A01030204,A01030205 
*XDIM_MEMBERSET PRODUCT = BAS(P01)
*XDIM_MEMBERSET AUDITTRAIL = INPUT
*XDIM_MEMBERSET ADDITION = AD010103       
*XDIM_MEMBERSET ITEM = WO_ITEM
*XDIM_MEMBERSET D_TYPE = WO_D_TYPE
*XDIM_MEMBERSET RESERVE = WO_RESERVE
*WHEN P_ACCOUNT
*IS  A01030202,A01030203
*REC(EXPRESSION =%VALUE%*([P_ACCOUNT].[A01050504],[PRODUCT].[WO_PRODUCT],[TIME].[WO_TIME],[ADDITION].[WO_ADDITION],[AUDITTRAIL].[INPUT_COPY],[D_TYPE].[WO_D_TYPE]),P_ACCOUNT = A0103020101,D_TYPE=WO_D_TYPE)
*IS  A01030204,A01030205
*REC(EXPRESSION =-1*%VALUE%*([P_ACCOUNT].[A01050504],[PRODUCT].[WO_PRODUCT],[TIME].[WO_TIME],[ADDITION].[WO_ADDITION],[AUDITTRAIL].[INPUT_COPY],[D_TYPE].[WO_D_TYPE]),P_ACCOUNT = A0103020101,D_TYPE=WO_D_TYPE)
*ENDWHEN 


METHOD if_uj_custom_logic~execute.

  "//定义常量
  CONSTANTS:
    cns_parent1 TYPE char20 VALUE 'PARENTH1',
    cns_parent2 TYPE char20 VALUE 'PARENTH2'.

  "//定义类型
  TYPES:      BEGIN OF ty_data.
  INCLUDE TYPE zbpcs_0003.
  TYPES:signeddata TYPE /b28/oisdata,
        END OF ty_data.

  TYPES:BEGIN OF ty_dim,
          zdimension TYPE char20,
          zlevel     TYPE char20,
          zvalue     TYPE char32,
          zrange     TYPE char20,
        END OF ty_dim.


  "//定义变量
  DATA:lv_in_entity     TYPE char32,
       lv_in_category   TYPE char32,
       lv_in_time       TYPE char32,
       lv_in_p_account  TYPE char32,
       lv_in_product    TYPE char32,
       lv_in_audittrail TYPE char32,
       lv_in_addition   TYPE char32,
       lv_in_item       TYPE char32,
       lv_in_d_type     TYPE char32,
       lv_in_reserve    TYPE char32.

  "//定义内表
  DATA:
    lt_dim           TYPE TABLE OF ty_dim,
    rt_product       TYPE RANGE OF char32,
    rt_account       TYPE RANGE OF char32,
    rt_account1       TYPE RANGE OF char32,
    rt_account_other TYPE RANGE OF char32,
    rt_entity        TYPE RANGE OF char32,
    rt_audittrail    TYPE RANGE OF char32,
    rt_time   TYPE RANGE OF char32. "Y

  "//定义结果/工作区
  DATA:lt_result TYPE TABLE OF ty_data,
       ls_result TYPE ty_data.
  DATA:et_member TYPE  uja_t_dim_member.

  "//定义工作区
  DATA:ls_data       TYPE ty_data,
       lt_data       TYPE STANDARD TABLE OF ty_data,
       lt_data1      TYPE STANDARD TABLE OF ty_data, "internal table data1
       ls_data1      TYPE ty_data,
       lt_data2      TYPE STANDARD TABLE OF ty_data, "internal table data2
       ls_data2      TYPE ty_data,
       lt_data_a     TYPE STANDARD TABLE OF ty_data, "internal table a
       ls_data_a     TYPE ty_data,
       lt_data_b     TYPE STANDARD TABLE OF ty_data, "internal table b
       lt_data_b_sum TYPE STANDARD TABLE OF ty_data, "internal table b sum
       ls_data_b     TYPE ty_data,
       lt_data_c     TYPE STANDARD TABLE OF ty_data, "internal table c
       ls_data_c     TYPE ty_data,
       ls_member     LIKE LINE OF et_member,
       ls_dim        TYPE ty_dim,
       rs_range      LIKE LINE OF rt_time.
  "//定义类
  DATA: lo_hier TYPE REF TO if_uja_hier,
        lo_dim  TYPE REF TO cl_uja_dim.
  FIELD-SYMBOLS:<fs_range> LIKE rt_entity.
  "//定义宏
  DEFINE add_lt_dim.
    ls_dim-zdimension =  &1.
    ls_dim-zlevel =  &2.
    ls_dim-zvalue =  &3.
    ls_dim-zrange =  &4.
    append ls_dim to lt_dim.
    clear ls_dim.
  END-OF-DEFINITION.

  DEFINE insert_range.
    clear:&1.
    &1-sign =  &3.
    &1-option =  &4.
    &1-dimension =  &5.
    &1-low =  &6.
    &1-high = &7.
    collect &1 into &2.
  END-OF-DEFINITION.


  "//-模型维护 数据
  DATA: lo_dataref  TYPE REF TO data.
  DATA: lt_selections TYPE uj0_t_sel.
  DATA: ls_selections LIKE LINE OF lt_selections.

*&--------------------------------------- Get Input Parameters
  LOOP AT it_param INTO data(ls_param).
    CASE ls_param-hashkey.
      WHEN 'P_ENTITY'.
        lv_in_entity = ls_param-hashvalue.
      WHEN 'CATEGORY'.
        lv_in_category = ls_param-hashvalue.
      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.

  "//取叶子节点
  CLEAR:rt_product,rt_entity,rt_time.
  add_lt_dim  'P_ENTITY'    cns_parent1 lv_in_entity 'RT_ENTITY'. "BAS(%P_ENTITY_SET%)
  add_lt_dim  'PRODUCT '    cns_parent1 'P01'        'RT_PRODUCT'. "BAS(P01)

  LOOP AT lt_dim INTO ls_dim.
    TRY.
        CREATE OBJECT lo_dim
          EXPORTING
            i_appset_id = i_appset_id        "PROVIDE APPSET NAME
            i_dimension = ls_dim-zdimension. "PROVIDE DIMENSION NAME
      CATCH cx_uja_admin_error.
    ENDTRY.

    TRY .
        lo_hier = lo_dim->get_hier_ref( ls_dim-zlevel ).
      CATCH cx_uja_admin_error.
    ENDTRY.


    CHECK lo_hier IS NOT INITIAL.
    CALL METHOD lo_hier->get_children
      EXPORTING
        i_member    = ls_dim-zvalue
        i_level     = 99
        if_self     = abap_true
      IMPORTING
        et_mbr_name = et_member.
    ASSIGN (ls_dim-zrange) TO <fs_range>.

    LOOP AT et_member INTO ls_member.
      rs_range-sign   = 'I'.
      rs_range-option = 'EQ'.
      rs_range-low    = ls_member.
      APPEND rs_range TO  <fs_range>.
    ENDLOOP.

    CLEAR :et_member[],ls_member.
  ENDLOOP.

*TIME筛选逻辑3
  CALL METHOD zbpccl_comm_api=>get_filter_time
    EXPORTING
      iv_type = '3'
    CHANGING
      it_time = rt_time.


  "//从RT_TIME,RT_PRODUCT,RT_ENTITY,RT_AUDITTRAIL筛选数据
  CLEAR:lt_selections,ls_selections.
  "RT_ENTITY
  LOOP AT rt_entity INTO rs_range.
    insert_range ls_selections lt_selections  'I' 'EQ' 'P_ENTITY'   rs_range-low   space.
  ENDLOOP.

  "CATEGORY
  insert_range ls_selections lt_selections    'I' 'EQ' 'CATEGORY'   lv_in_category space.

  "RT_TIME
  LOOP AT rt_time INTO rs_range.
    insert_range ls_selections lt_selections  'I' 'EQ' 'TIME'   rs_range-low   space.
  ENDLOOP.

  "RT_ACCOUNT
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030202'   space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030203'   space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030204'   space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030205'   space.

  "RT_PRODUCT
  LOOP AT rt_product INTO rs_range.
    insert_range ls_selections lt_selections  'I' 'EQ' 'PROCUCT'   rs_range-low   space.
  ENDLOOP.

  "AUDITTRAIL
  insert_range ls_selections lt_selections  'I' 'EQ' 'AUDITTRAIL'   'INPUT'         space.

  "ADDITION
  insert_range ls_selections lt_selections  'I' 'EQ' 'ADDITION'     'AD010103'      space.
  "ITEM
  insert_range ls_selections lt_selections  'I' 'EQ' 'ITEM'         'WO_ITEM'       space.

  "D_TYPE
  insert_range ls_selections lt_selections  'I' 'EQ' 'D_TYPE'       'WO_D_TYPE'     space.

  "RESERVE
  insert_range ls_selections lt_selections  'I' 'EQ' 'RESERVE'      'WO_RESERVE'    space.


  "//取PRODUCT属性数据
  IF rt_product IS NOT INITIAL.
    SELECT /b28/s_ipd6tnw AS product,
           /b28/s_ippv8n1 as barn
      into table @data(lt_product)
      from /b28/pipd6tnw
      where /b28/s_ipd6tnw in @rt_product
      and objvers eq 'A'.
    ENDIF.

    DATA:ls_product LIKE LINE OF lt_product.
    SORT lt_product BY product.


    "//根据维度条件取数
    CLEAR:lt_data.
    CALL METHOD zbpccl_comm_api=>get_model_data
      EXPORTING
        iv_appset_id  = i_appset_id
        iv_appl_id    = i_appl_id
        it_selections = lt_selections
      CHANGING
        it_data       = lt_data.

    lt_data_a = lt_data."主数据

    "//将原模型中P_ACCOUNT、TIME、ADDITION删除,取出数据LT_DATA1
    DELETE lt_selections WHERE  dimension = 'ADDITION' OR
                                dimension = 'P_ACCOUNT' OR
                                dimension = 'PRODUCT' OR
                                dimension = 'AUDITTRAIL' OR
                                dimension = 'D_TYPE' OR
                                dimension = 'TIME' .

    insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'  'A01050504'     space.
    insert_range ls_selections lt_selections  'I' 'EQ' 'PRODUCT'    'WO_PRODUCT'    space.
    insert_range ls_selections lt_selections  'I' 'EQ' 'TIME'       'WO_TIME'       space.
    insert_range ls_selections lt_selections  'I' 'EQ' 'ADDITION'   'WO_ADDITION'   space.
    insert_range ls_selections lt_selections  'I' 'EQ' 'AUDITTRAIL' 'INPUT_COPY'    space.
    insert_range ls_selections lt_selections  'I' 'EQ' 'D_TYPE'     'WO_D_TYPE'     space.


    "//根据维度条件取数LT_DATA1
    CLEAR:lt_data.
    CALL METHOD zbpccl_comm_api=>get_model_data
      EXPORTING
        iv_appset_id  = i_appset_id
        iv_appl_id    = i_appl_id
        it_selections = lt_selections
      CHANGING
        it_data       = lt_data1.

    "进行数据合计
    CLEAR:lt_data_b_sum,ls_data1.
    LOOP AT lt_data1 INTO ls_data1.
      COLLECT ls_data1 INTO lt_data_b_sum.
    ENDLOOP.

    "开始结果赋值
    LOOP AT lt_data_a  INTO ls_data_a .
      READ TABLE lt_data_b_sum INTO ls_data WITH KEY  audittrail = ls_data_a-audittrail
                                            category = ls_data_a-category
                                                item = ls_data_a-item
                                            measures = ls_data_a-measures
                                            p_entity = ls_data_a-p_entity
                                             reserve = ls_data_a-reserve.
      CHECK sy-subrc = 0.
      CLEAR ls_result.
      ls_result-p_account = 'A0103020101'.
      ls_result-d_type = 'WO_D_TYPE'.
      IF ls_data_a-p_account = 'A01030202' OR ls_data_a-p_account = 'A01030203'.
        ls_result-signeddata = ls_data_a-signeddata * ls_data-signeddata.
        COLLECT ls_result INTO lt_result.
      ELSEIF ls_data_a-p_account = 'A01030204' OR ls_data_a-p_account = 'A01030205'.
        ls_result-signeddata = -1 * ls_data_a-signeddata * ls_data-signeddata.
        COLLECT ls_result INTO lt_result.
      ENDIF.
    ENDLOOP .
    ct_data = lt_result.
  ENDMETHOD.                    "if_uj_custom_logic~execute
METHOD if_uj_custom_logic~execute.


  CONSTANTS:
*    cns_n       TYPE c VALUE 'N',
*    cns_p       TYPE c VALUE 'P',
*    cns_cn      TYPE char32 VALUE 'C_CN',
    cns_parent1 TYPE char20 VALUE 'PARENTH1',
    cns_parent2 TYPE char20 VALUE 'PARENTH2'.
*    cns_01      TYPE char3 VALUE '01*',
*    cns_02      TYPE char3 VALUE '02*'.


  TYPES:      BEGIN OF ty_data.
                INCLUDE TYPE zbpcs_0003.
                TYPES:signeddata TYPE /b28/oisdata,
              END OF ty_data.

  TYPES:BEGIN OF ty_dim,
          zdimension TYPE char20,
          zlevel     TYPE char20,
          zvalue     TYPE char32,
          zrange     TYPE char20,
        END OF ty_dim.



  DATA: lv_in_entity   TYPE char32,
        lv_in_category TYPE char32,
        lv_in_time     TYPE char32.
*        lv_in_p_account  TYPE char32,
*        lv_in_product    TYPE char32,
*        lv_in_audittrail TYPE char32,
*        lv_in_addition   TYPE char32,
*        lv_in_item       TYPE char32,
*        lv_in_d_type     TYPE char32,
*        lv_in_reserve    TYPE char32.


  DATA:
    lt_dim         TYPE TABLE OF ty_dim,
    rt_product     TYPE RANGE OF char32,
    rt_account     TYPE RANGE OF char32,
*        rt_account_other TYPE RANGE OF char32,
    rt_entity      TYPE RANGE OF char32,
    rt_audittrail  TYPE RANGE OF char32,
    rt_time        TYPE RANGE OF char32, "YS
    rt_time_logic3 TYPE RANGE OF char32. "Y


  DATA:lt_result TYPE TABLE OF ty_data,
       ls_result TYPE ty_data.
  DATA:et_member TYPE  uja_t_dim_member.


  DATA:ls_data       TYPE ty_data,
       lt_data       TYPE STANDARD TABLE OF ty_data,
       lt_data1      TYPE STANDARD TABLE OF ty_data,
       ls_data1      TYPE ty_data,
       lt_data2      TYPE STANDARD TABLE OF ty_data,
       ls_data2      TYPE ty_data,
       lt_data_a     TYPE STANDARD TABLE OF ty_data,
       ls_data_a     TYPE ty_data,
       lt_data_b     TYPE STANDARD TABLE OF ty_data,
       lt_data_b_sum TYPE STANDARD TABLE OF ty_data,
       ls_data_b     TYPE ty_data,
       lt_data_c     TYPE STANDARD TABLE OF ty_data,
       ls_data_c     TYPE ty_data,
       ls_member     LIKE LINE OF et_member,
       ls_dim        TYPE ty_dim,
       rs_range      LIKE LINE OF rt_time.

  DATA: lo_hier TYPE REF TO if_uja_hier,
        lo_dim  TYPE REF TO cl_uja_dim.
  FIELD-SYMBOLS:<fs_range> LIKE rt_entity.

  DEFINE add_lt_dim.
    ls_dim-zdimension =  &1.
    ls_dim-zlevel =  &2.
    ls_dim-zvalue =  &3.
    ls_dim-zrange =  &4.
    APPEND ls_dim TO lt_dim.
    CLEAR ls_dim.
  END-OF-DEFINITION.

  DEFINE insert_range.
    CLEAR:&1.
    &1-sign =  &3.
    &1-option =  &4.
    &1-dimension =  &5.
    &1-low =  &6.
    &1-high = &7.
    COLLECT &1 INTO &2.
  END-OF-DEFINITION.



  DATA: lo_dataref  TYPE REF TO data.
  DATA: lt_selections TYPE uj0_t_sel.
  DATA: ls_selections LIKE LINE OF lt_selections.

*&--------------------------------------- Get Input Parameters
  LOOP AT it_param INTO DATA(ls_param).
    CASE ls_param-hashkey.
      WHEN 'P_ENTITY'.
        lv_in_entity = ls_param-hashvalue.
      WHEN 'CATEGORY'.
        lv_in_category = ls_param-hashvalue.
      WHEN 'TIME'.
        lv_in_time = ls_param-hashvalue.

      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.

  CLEAR:rt_product,rt_entity,rt_time.
  add_lt_dim  'PRODUCT'     cns_parent1 'P01'           'RT_PRODUCT'.
  add_lt_dim  'P_ENTITY'    cns_parent1 lv_in_entity    'RT_ENTITY'.


  LOOP AT lt_dim INTO ls_dim.
    TRY.
        CREATE OBJECT lo_dim
          EXPORTING
            i_appset_id = i_appset_id    "PROVIDE APPSET NAME
            i_dimension = ls_dim-zdimension.    " PROVIDE DIMENSION NAME
      CATCH cx_uja_admin_error.
    ENDTRY.
    TRY .
        lo_hier = lo_dim->get_hier_ref( ls_dim-zlevel ).
      CATCH cx_uja_admin_error.
    ENDTRY.
    CHECK lo_hier IS NOT INITIAL.
    CALL METHOD lo_hier->get_children
      EXPORTING
        i_member    = ls_dim-zvalue
        i_level     = 99
        if_self     = abap_true
      IMPORTING
        et_mbr_name = et_member.
    ASSIGN (ls_dim-zrange) TO <fs_range>.
    LOOP AT et_member INTO ls_member.
      rs_range-sign   = 'I'.
      rs_range-option = 'EQ'.
      rs_range-low    = ls_member.
      APPEND rs_range TO  <fs_range>.
    ENDLOOP.
    CLEAR :et_member[],ls_member.
  ENDLOOP.

*TIME筛选逻辑1
  CALL METHOD zbpccl_comm_api=>get_filter_time
    EXPORTING
      iv_type = '1'
    CHANGING
      it_time = rt_time.

*TIME筛选逻辑3
  CALL METHOD zbpccl_comm_api=>get_filter_time
    EXPORTING
      iv_type = '3'
    CHANGING
      it_time = rt_time_logic3.


  CLEAR:lt_selections,ls_selections.
  LOOP AT rt_time INTO rs_range.
    insert_range ls_selections lt_selections  'I' 'EQ' 'TIME'      rs_range-low space.
  ENDLOOP.

  insert_range ls_selections lt_selections  'I' 'EQ' 'CATEGORY'  lv_in_category space.

  LOOP AT rt_entity INTO rs_range.
    insert_range ls_selections lt_selections  'I' 'EQ' 'P_ENTITY'  rs_range-low  space.
  ENDLOOP.

  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030402'       space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030401010101' space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030404'       space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'P_ACCOUNT'    'A01030403010101' space.

  LOOP AT rt_product INTO rs_range.
    insert_range ls_selections lt_selections  'I' 'EQ' 'PRODUCT'   rs_range-low  space.
  ENDLOOP.
  insert_range ls_selections lt_selections  'I' 'EQ' 'PRODUCT'      'WO_PRODUCT' space.

  insert_range ls_selections lt_selections  'I' 'EQ' 'AUDITTRAIL'   'INPUT'      space.

  insert_range ls_selections lt_selections  'I' 'EQ' 'ITEM'         'WO_ITEM'    space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'D_TYPE'       'WO_D_TYPE'  space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'RESERVE'      'WO_RESERVE' space.

  insert_range ls_selections lt_selections  'I' 'EQ' 'ADDITION'     'AD010101'   space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'ADDITION'     'AD01020301' space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'ADDITION'     'AD01020302' space.
  insert_range ls_selections lt_selections  'I' 'EQ' 'ADDITION'     'AD01020303' space.


  IF rt_product IS NOT INITIAL.
    SELECT /b28/s_ipd6tnw AS product,
    /b28/s_ippv8n1 AS barn
    INTO TABLE @DATA(lt_product)
          FROM /b28/pipd6tnw
          WHERE /b28/s_ipd6tnw IN @rt_product
          AND objvers EQ 'A'.
  ENDIF.
  DATA:ls_product LIKE LINE OF lt_product.
  SORT lt_product BY product.

  IF rt_entity IS NOT INITIAL.
    SELECT /b28/s_ipdmtib AS p_entity,
    /b28/s_ippun5d AS level,
    /b28/s_ipp5qst AS mappingt
    INTO TABLE @DATA(lt_entity)
          FROM /b28/pipdmtib
          WHERE /b28/s_ipdmtib IN @rt_entity.
  ENDIF.

  CLEAR:lt_data.
  CALL METHOD zbpccl_comm_api=>get_model_data
    EXPORTING
      iv_appset_id  = i_appset_id
      iv_appl_id    = i_appl_id
      it_selections = lt_selections
    CHANGING
      it_data       = lt_data.
  lt_data_a = lt_data.


  LOOP AT lt_data_a  INTO ls_data_a .

    IF ls_data_a-time IN rt_time_logic3.
      IF ls_data_a-product IN rt_product.

        IF ls_data_a-addition = 'AD010101'.
          IF ls_data_a-p_account = 'A01030402' OR ls_data_a-p_account = 'A01030401010101'.
            READ TABLE lt_entity ASSIGNING FIELD-SYMBOL(<lfs_entity>) WITH KEY p_entity = ls_data_a-p_entity.
            IF sy-subrc = 0.
              IF <lfs_entity>-level = 'L6' OR <lfs_entity>-level = 'L7'.
                CLEAR ls_result.
                ls_result = ls_data_a.
                ls_result-product = 'WO_PRODUCT'.
                ls_result-p_entity  = <lfs_entity>-mappingt.
                COLLECT ls_result INTO lt_result.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.

        IF ls_data_a-addition = 'AD01020301' OR ls_data_a-addition = 'AD01020302' OR ls_data_a-addition = 'AD01020303'.
          IF ls_data_a-p_account = 'A01030404' OR ls_data_a-p_account = 'A01030403010101'.
            READ TABLE lt_entity ASSIGNING FIELD-SYMBOL(<lfs_entity>) WITH KEY p_entity = ls_data_a-p_entity.
            IF sy-subrc = 0.
              IF <lfs_entity>-level = 'L6' OR <lfs_entity>-level = 'L7'.
                CLEAR ls_result.
                ls_result = ls_data_a.
                ls_result-product = 'WO_PRODUCT'.
                ls_result-p_entity  = <lfs_entity>-mappingt.
                COLLECT ls_result INTO lt_result.

                CLEAR ls_result.
                ls_result = ls_data_a.
                ls_result-product = 'WO_PRODUCT'.
                ls_result-addition = 'AD010101'.
                ls_result-p_entity  = <lfs_entity>-mappingt.
                COLLECT ls_result INTO lt_result.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.

      ENDIF.
    ENDIF.

*******    ?????这里有问题
    IF ls_data_a-time = lv_in_time.

      IF ls_data_a-product = 'WO_PRODUCT'.
        IF ls_data_a-addition = 'AD01020301' OR ls_data_a-addition = 'AD01020302' OR ls_data_a-addition = 'AD01020303'.
          IF ls_data_a-p_account = 'A01030404' OR ls_data_a-p_account = 'A01030403010101'.
            READ TABLE lt_entity ASSIGNING FIELD-SYMBOL(<lfs_entity>) WITH KEY p_entity = ls_data_a-p_entity.
            IF sy-subrc = 0.
              IF <lfs_entity>-level = 'L5.1'.
                CLEAR ls_result.
                ls_result = ls_data_a.
                ls_result-addition = 'AD010101'.
                COLLECT ls_result INTO lt_result.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
  ENDLOOP .
  ct_data = lt_result.

 

posted on 2021-01-13 15:42  姬如千泷  阅读(823)  评论(0编辑  收藏  举报