FILL_MANAGE_ITEM
做了个数据比对
来源表、目标表,数据比对,数据输出
来源表:
MID_FYFX_HZPROP:
fill_dim_unit:全部数据
fill_manage_item:部分数据
目标表:
FILL_MANAGE_ITEM
来源表和目标表做数据比对
最终结果输出到:
SQL SERVER FR 已存在表:FILL_MANAGE_ITEM
MID_FYFX_DETAIL
数据同步节点
-- create view v_fy_gl as
/*
费用的时间范围在b临时表中的a表中限制;
a、b划分采取三种不同规则归集所属事业部的数据范围,两个uion all连接的三段sql分别按照三种规则对各自数据进行处理;
按照isnull(辅助帐金额,分录表金额) as amountsum,最终应当sum(amountsum);
FYcount字段标记了既有财务科目又有费用形态的费用,费用分析表只统计FYcount=1的科目;
GLcount字段标记了非香港、杭州研究院的费用,按事业部和集团汇总时只统计GLcount=1的费用
*/
with AA as (--杭州公司需要分摊的成本中心
select
org.fid,
org.fnumber,
org.fname_l2
from EAS_T_ORG_BaseUnit org
left join ODS_ORANZATION ods on org.fnumber = ods.id collate Chinese_PRC_CS_AI
where ods.id like '04%'
and (ods.unit = '' or ods.unit is null)
)
,B as (--区分不同规则的数据范围,同时把能取的字段取出来,并合并可以合并的辅助账
select
A.FID billid,
b.fid entryid,
case
when CBL.TYPE = 1 --费用科目编码在无部门清单中,且为股份公司
then '11'
when CBL.TYPE = 2 and B.FCOMPANYID <> 'XY4AAAAAALnM567U' --费用科目编码在无部门清单中,为事业部费用,且费用发生公司非杭州:按公司对应事业部
then '12'
when CBL.TYPE = 2 and B.FCOMPANYID = 'XY4AAAAAALnM567U' --费用科目编码在无部门清单中,为事业部费用,且费用发生公司为杭州:需分摊
then '2'
when list.fid is not null --成本中心为杭州公司需要分摊的部门
then '2'
else '3' end prtype,
K.FNUMBER as SUBJECT_CODE,
-- CBL.TYPE,
D.FCOSTORGID costorgid,
-- list.fid,
A.FBookedDate as BookedDate/*AS 记账日期*/,
a.fnumber as billnumber,
B.FCOMPANYID AS comp/*公司*/,
A.FBizStatus as BizStatus,
a.FCREATORID as CREATORID, /*制单人id*/
u.fname_l2 as creatorname, /*制单人名称*/
b.FDESCRIPTION as DESCRIPTION, /*摘要*/
b.FORIGINALAMOUNT as AMOUNT_FENLU /*分录金额*/,
SUM(c.FORIGINALAMOUNT) AS AMOUNT_FUZHU /*辅助账金额*/,
isnull(SUM(c.FORIGINALAMOUNT),b.FORIGINALAMOUNT) AMOUNTSUM,
case when B.FCOMPANYID in ('XY4AAABg7NnM567U') then 0 else 1 end GLcount
from
(
select
A.FID,
A.FNumber as billnumber /*AS 单据编号*/,
A.FBookedDate,
A.FNumber,
A.FBizStatus,
a.FCONTROLUNITID,
A.FBookedDate as BookedDate/*AS 记账日期*/,
a.FCREATORID
from eas_T_GL_Voucher a
where left(CONVERT(VARCHAR(10),A.FBookedDate,120),4) >= '2021'
and a.FPERIODID <> 'XY4AAACOSSuCOIxM'
-- AND left(A.FBookedDate,7) = '2022-08'
-- AND a.fnumber = '0031'
) a
LEFT JOIN eas_T_GL_VoucherEntry b on a.fid = b.FBILLID collate Chinese_PRC_CS_AI
LEFT JOIN [dbo].[EAS_T_BD_ACCOUNTVIEW] k on B.FAccountID = k.FID collate Chinese_PRC_CS_AI
LEFT JOIN FILL_FY_COSTBELONG CBL ON K.FNUMBER = CBL.SUBJECTCODE
LEFT JOIN eas_t_gl_voucherassistrecord c on a.fid = c.FBILLID collate Chinese_PRC_CS_AI and b.fid = c.fentryid collate Chinese_PRC_CS_AI
LEFT JOIN [dbo].[EAS_T_BD_ASSISTANTHG] d on c.FASSGRPID = d.FID collate Chinese_PRC_CS_AI
left join AA list on D.FCOSTORGID = list.fid
LEFT JOIN EAS_T_PM_USER U ON a.FCREATORID = U.FID
WHERE b.FENTRYDC='1'
-- and c.FORIGINALAMOUNT is null
GROUP BY
A.FID ,
b.fid ,
case
when CBL.TYPE = 1 --费用科目编码在无部门清单中,且为股份公司
then '11'
when CBL.TYPE = 2 and B.FCOMPANYID <> 'XY4AAAAAALnM567U' --费用科目编码在无部门清单中,为事业部费用,且费用发生公司非杭州:按公司对应事业部
then '12'
when CBL.TYPE = 2 and B.FCOMPANYID = 'XY4AAAAAALnM567U' --费用科目编码在无部门清单中,为事业部费用,且费用发生公司为杭州:需分摊
then '2'
when list.fid is not null --成本中心为杭州公司需要分摊的部门
then '2'
else '3' end ,
K.FNUMBER ,
-- CBL.TYPE,
D.FCOSTORGID ,
-- list.fid,
A.FBookedDate ,
a.fnumber ,
B.FCOMPANYID ,
A.FBizStatus,
b.FORIGINALAMOUNT ,
a.FCREATORID,
u.fname_l2,
b.FDESCRIPTION, /*摘要*/
case when B.FCOMPANYID in ('XY4AAABg7NnM567U','XY4AAAACAkHM567U') then 0 else 1 end
)
,C AS(
-- 费用科目编码在无部门清单中做处理,prtype in ('11','12')
select
'无归属部门费用' AS STATYPE,
b.billid,
b.entryid,
b.comp/*公司*/,
b.COSTORGID as costorg/*成本中心*/,
b.BookedDate /*AS 记账日期*/,
b.billnumber /*AS 单据编号*/,
b.BizStatus /*AS 状态*/,
B.CREATORID, /*制单人id*/
B.creatorname, /*制单人名称*/
b.DESCRIPTION, /*摘要*/
b.AMOUNT_FENLU /*分录金额*/,
b.AMOUNT_FUZHU /*辅助账金额*/,
B.AMOUNTSUM,
null as hz_prop,
b.SUBJECT_CODE,
CW.SUBJECT_NAME,
CW.C_SUBJECT_NAME /*AS 财务科目*/,
CW.COST_CODE /*AS 代码*/,
CW.COST_NAME /*AS 费用项目*/,
CW.STATEMENT_NAME /*AS 管理损益表费用项目*/,
CW.BEHAVIOR_NAME /*AS 费用性态*/,
CW.MANAGE_QIZHONG, /*管理损益表用其中成本*/
CW.MANAGE_ITEM, /*管理损益表明细项目(除三类性态)*/
CW.XISHU, /*明细项目正负标记*/
case when CW.BEHAVIOR_NAME is not null and CW.C_SUBJECT_NAME is not null and b.comp <> 'XY4AAABg7NnM567U' then 1 else 0 end as FYcount, /*费用分析表统计标志*/
b.GLcount,
null as costorgnumber,
CASE WHEN b.prtype = '11'
then '股份公司'
when b.prtype = '12'
then (select unit from FILL_DIM_UNIT where fid = b.comp)
END SHIYEBU /*AS 所属事业部*/,
null as FNAME, /*AS 成本中心名称*/
null as COLLID,/*归集成本中心ID*/
null as COLLNAME/*归集成本中心名称*/
from
(select * from b where prtype in ('11','12') ) b
left JOIN [dbo].[ODS_CHART_ACCOUNTS] CW ON b.SUBJECT_CODE=CW.SUBJECT_CODE collate Chinese_PRC_CS_AI
union all
-- 杭州公司需要按收入比例分摊到对应事业部的费用,prtype = '2'
select
'杭州公司需分摊费用' AS STATYPE,
b.billid,
b.entryid,
b.comp/*公司*/,
b.COSTORGID as costorg/*成本中心*/,
b.BookedDate /*AS 记账日期*/,
b.billnumber /*AS 单据编号*/,
b.BizStatus /*AS 状态*/,
B.CREATORID, /*制单人id*/
B.creatorname, /*制单人名称*/
b.DESCRIPTION, /*摘要*/
b.AMOUNT_FENLU /*分录金额*/,
b.AMOUNT_FUZHU /*辅助账金额*/,
B.AMOUNTSUM*P.PROP AMOUNTSUM,
P.PROP as hz_prop,
b.SUBJECT_CODE,
CW.SUBJECT_NAME,
CW.C_SUBJECT_NAME /*AS 财务科目*/,
CW.COST_CODE /*AS 代码*/,
CW.COST_NAME /*AS 费用项目*/,
CW.STATEMENT_NAME /*AS 管理损益表费用项目*/,
CW.BEHAVIOR_NAME /*AS 费用性态*/,
CW.MANAGE_QIZHONG, /*管理损益表用其中成本*/
CW.MANAGE_ITEM, /*管理损益表明细项目(除三类性态)*/
CW.XISHU, /*明细项目正负标记*/
case when CW.BEHAVIOR_NAME is not null and CW.C_SUBJECT_NAME is not null and b.comp <> 'XY4AAABg7NnM567U' then 1 else 0 end as FYcount,
b.GLcount,
CB.FNUMBER as costorgnumber,
P.UNIT as SHIYEBU,
O.FNAME, /*AS 成本中心名称*/
O.COLLID,/*归集成本中心ID*/
O.COLLNAME/*归集成本中心名称*/
from
(select * from b where prtype = '2' ) b
left JOIN [dbo].[ODS_CHART_ACCOUNTS] CW ON b.SUBJECT_CODE=CW.SUBJECT_CODE collate Chinese_PRC_CS_AI
LEFT JOIN [dbo].[EAS_T_ORG_BaseUnit] CB ON b.COSTORGID = CB.FID collate Chinese_PRC_CS_AI
LEFT JOIN [dbo].[ODS_ORANZATION] O ON CB.FNUMBER=O.ID collate Chinese_PRC_CS_AI
LEFT JOIN MID_FYFX_HZPROP P ON CONVERT(VARCHAR(7),BOOKEDDATE,120) = P.YM
union all
-- 正常所属事业部处理方式,prtype='3'
select
'按成本中心归属费用' AS STATYPE,
b.billid,
b.entryid,
b.comp/*公司*/,
b.COSTORGID as costorg/*成本中心*/,
b.BookedDate /*AS 记账日期*/,
b.billnumber /*AS 单据编号*/,
b.BizStatus /*AS 状态*/,
B.CREATORID, /*制单人id*/
B.creatorname, /*制单人名称*/
b.DESCRIPTION, /*摘要*/
b.AMOUNT_FENLU /*分录金额*/,
b.AMOUNT_FUZHU /*辅助账金额*/,
B.AMOUNTSUM,
null as hz_prop,
b.SUBJECT_CODE,
CW.SUBJECT_NAME,
CW.C_SUBJECT_NAME /*AS 财务科目*/,
CW.COST_CODE /*AS 代码*/,
CW.COST_NAME /*AS 费用项目*/,
CW.STATEMENT_NAME /*AS 管理损益表费用项目*/,
CW.BEHAVIOR_NAME /*AS 费用性态*/,
CW.MANAGE_QIZHONG, /*管理损益表用其中成本*/
CW.MANAGE_ITEM, /*管理损益表明细项目(除三类性态)*/
CW.XISHU, /*明细项目正负标记*/
case when CW.BEHAVIOR_NAME is not null and CW.C_SUBJECT_NAME is not null and b.comp <> 'XY4AAABg7NnM567U' then 1 else 0 end as FYcount,
b.GLcount,
CB.FNUMBER as costorgnumber,
O.UNIT as SHIYEBU,
O.FNAME, /*AS 成本中心名称*/
O.COLLID,/*归集成本中心ID*/
O.COLLNAME/*归集成本中心名称*/
from
(select * from b where prtype = '3' ) b
left JOIN [dbo].[ODS_CHART_ACCOUNTS] CW ON b.SUBJECT_CODE=CW.SUBJECT_CODE collate Chinese_PRC_CS_AI
LEFT JOIN [dbo].[EAS_T_ORG_BaseUnit] CB ON b.COSTORGID = CB.FID collate Chinese_PRC_CS_AI
/*处理进仓费无成本中心的历史清单*/
LEFT JOIN LIST_FY_COSTORG_HIS H ON B.BILLID = H.BILLID collate Chinese_PRC_CS_AI AND B.ENTRYID = H.ENTRYID collate Chinese_PRC_CS_AI
LEFT JOIN [dbo].[ODS_ORANZATION] O ON ISNULL(CB.FNUMBER,H.COSTORGNUMBER) = O.ID collate Chinese_PRC_CS_AI
)
SELECT *,
case when COLLID LIKE '04%' or(COLLID is null and comp = 'XY4AAAAAALnM567U') then '外贸' else '内贸' end as TRADETYPE, --归集成本中心以04开头,或者归集成本中心为空且公司是杭州公司的,定义为外贸,其余为内贸
case when SHIYEBU = '股份公司' then SHIYEBU WHEN SHIYEBU IS NULL THEN NULL--事业部为股份公司或九江,显示事业部名称
else concat(SHIYEBU,case when COLLID LIKE '04%' or(COLLID is null and comp = 'XY4AAAAAALnM567U') then '外贸' else case when SHIYEBU = '九江' then '' else '内贸' end end ) end as SYBTRADETYPE --其余的事业部,将内外贸拼接上去,但九江内贸写为九江
FROM C
写入到已存在表:MID_FYFX_DETAIL
写入的数据,即上面SQL处理后的数据:
22.mp4
EAS_T_ORG_BaseUnit:23.mp4 从EAS拿过来的全量表
ODS_ORANZATION:不知道哪里的表
最后一个字段:detype
eas_T_GL_Voucher:24.mp4 (EAS拿过来的全量表)
ODS_CHART_ACCOUNTS:
EAS_T_ORG_BaseUnit: (EAS拿过来的全量表)
ODS_ORANZATION:
MID_FYFX_HZPROP:(杭州公司费用分摊系数计算)
LIST_FY_COSTORG_HIS:
25.mp4
DW_FYFX_DETAIL
SQL脚本:
update DW_FYFX_DETAIL_ALTER
set shiyebu = b.unit,
collid = b.collid,
collname = b.collname,
fname = b.fname
from ODS_ORANZATION b
where costorgnumber = b.id
and b.unit is not null
and len(b.unit) > 0
and CONVERT ( VARCHAR ( 10 ), bookedDate, 120 ) >= '${MONTH}' ;
update DW_FYFX_DETAIL_ALTER
set SUBJECT_NAME = b.SUBJECT_NAME,
C_SUBJECT_NAME = b.C_SUBJECT_NAME,
COST_CODE = b.COST_CODE,
COST_NAME = b.COST_NAME,
STATEMENT_NAME = b.STATEMENT_NAME,
BEHAVIOR_NAME = b.BEHAVIOR_NAME,
MANAGE_ITEM = b.MANAGE_ITEM,
MANAGE_QIZHONG = b.MANAGE_QIZHONG,
xishu = b.xishu
from ODS_CHART_ACCOUNTS b
where DW_FYFX_DETAIL_ALTER.SUBJECT_CODE = b.SUBJECT_CODE
and CONVERT ( VARCHAR ( 10 ), bookedDate, 120 ) >= '${MONTH}' ;
--0222新增贸易类型和事业部贸易类型字段,修改逻辑与MID_FYFX_DETAIL任务一致
update DW_FYFX_DETAIL_ALTER set TRADETYPE = case when COLLID LIKE '04%' or(COLLID is null and comp = 'XY4AAAAAALnM567U') then '外贸' else '内贸' end
where CONVERT ( VARCHAR ( 10 ), bookedDate, 120 ) >= '${MONTH}' ;
update DW_FYFX_DETAIL_ALTER set SYBTRADETYPE = case when SHIYEBU = '股份公司' then SHIYEBU WHEN SHIYEBU IS NULL THEN NULL--事业部为股份公司或九江,显示事业部名称
else concat(SHIYEBU,case when COLLID LIKE '04%' or(COLLID is null and comp = 'XY4AAAAAALnM567U') then '外贸' else case when SHIYEBU = '九江' then '' else '内贸' end end ) end
where CONVERT ( VARCHAR ( 10 ), bookedDate, 120 ) >= '${MONTH}' ;
DW_FYFX_DETAIL_ALTER :
ODS_ORANZATION
ODS_CHART_ACCOUNTS
26.mp4
SQL脚本:
delete from DW_FYFX_DETAIL where convert(varchar(7),bookedDate,120) >= '${MONTH}'
DW_FYFX_DETAIL:
和下面的一起录了 27.mp4
数据同步节点:
SELECT
a.STATYPE,
a.billid,
a.entryid,
a.comp,
a.costorg,
a.BookedDate,
a.billnumber,
a.BizStatus,
a.CREATORID,
a.creatorname,
a.DESCRIPTION,
a.AMOUNT_FENLU,
a.AMOUNT_FUZHU,
a.AMOUNTSUM*(-1) as AMOUNTSUM,
a.hz_prop,
b.SUBJECT_CODE,
b.SUBJECT_NAME,
concat(a.C_SUBJECT_NAME,'抵减') C_SUBJECT_NAME,
b.COST_CODE,
b.COST_NAME,
b.STATEMENT_NAME,
b.BEHAVIOR_NAME,
a.FYcount,
a.GLcount,
a.costorgnumber,
a.SHIYEBU,
a.FNAME,
a.COLLID,
a.COLLNAME,
b.MANAGE_QIZHONG,
b.MANAGE_ITEM,
b.XISHU,
a.TRADETYPE,--0222新增
a.SYBTRADETYPE--0222新增
FROM
MID_FYFX_DETAIL a
left join (select * from ODS_CHART_ACCOUNTS where SUBJECT_CODE = '5101.03') b on 1=1
right join ODS_CHART_ACCOUNTS c on a.SUBJECT_CODE = c.SUBJECT_CODE
WHERE
a.SUBJECT_CODE LIKE '4102%'
and CONVERT (VARCHAR(10),a.BookedDate,120) >= '${MONTH}'
union all
SELECT
a.STATYPE,
a.billid,
a.entryid,
a.comp,
a.costorg,
a.BookedDate,
a.billnumber,
a.BizStatus,
a.CREATORID,
a.creatorname,
a.DESCRIPTION,
a.AMOUNT_FENLU,
a.AMOUNT_FUZHU,
a.AMOUNTSUM*(-1) as AMOUNTSUM,
1 as hz_prop,
b.SUBJECT_CODE,
b.SUBJECT_NAME,
concat(a.C_SUBJECT_NAME,'抵减') C_SUBJECT_NAME,
b.COST_CODE,
b.COST_NAME,
b.STATEMENT_NAME,
b.BEHAVIOR_NAME,
a.FYcount,
a.GLcount,
a.costorgnumber,
a.SHIYEBU,
a.FNAME,
a.COLLID,
a.COLLNAME,
b.MANAGE_QIZHONG,
b.MANAGE_ITEM,
b.XISHU ,
a.TRADETYPE,--0222新增
a.SYBTRADETYPE--0222新增
FROM
DW_FYFX_DETAIL_ALTER a
left join (select * from ODS_CHART_ACCOUNTS where SUBJECT_CODE = '5101.03') b on 1=1
right join ODS_CHART_ACCOUNTS c on a.SUBJECT_CODE = c.SUBJECT_CODE
WHERE
a.SUBJECT_CODE LIKE '4102%'
and CONVERT (VARCHAR(10),a.BookedDate,120) >= '${MONTH}'
union all
SELECT
a.STATYPE,
a.billid,
a.entryid,
a.comp,
a.costorg,
a.BookedDate,
a.billnumber,
a.BizStatus,
a.CREATORID,
a.creatorname,
a.DESCRIPTION,
a.AMOUNT_FENLU,
a.AMOUNT_FUZHU,
a.AMOUNTSUM,
a.hz_prop,
a.SUBJECT_CODE,
a.SUBJECT_NAME,
a.C_SUBJECT_NAME,
a.COST_CODE,
a.COST_NAME,
a.STATEMENT_NAME,
a.BEHAVIOR_NAME,
a.FYcount,
a.GLcount,
a.costorgnumber,
a.SHIYEBU,
a.FNAME,
a.COLLID,
a.COLLNAME,
a.MANAGE_QIZHONG,
a.MANAGE_ITEM,
a.XISHU ,
a.TRADETYPE,--0222新增
a.SYBTRADETYPE--0222新增
FROM
MID_FYFX_DETAIL a
where CONVERT (VARCHAR(10),a.BookedDate,120) >= '${MONTH}'
UNION ALL
SELECT
a.STATYPE,
a.billid,
a.entryid,
a.comp,
a.costorg,
a.BookedDate,
a.billnumber,
a.BizStatus,
a.CREATORID,
a.creatorname,
a.DESCRIPTION,
a.AMOUNT_FENLU,
a.AMOUNT_FUZHU,
a.AMOUNTSUM,
null as hz_prop,
a.SUBJECT_CODE,
a.SUBJECT_NAME,
a.C_SUBJECT_NAME,
a.COST_CODE,
a.COST_NAME,
a.STATEMENT_NAME,
a.BEHAVIOR_NAME,
a.FYcount,
a.GLcount,
a.costorgnumber,
a.SHIYEBU,
a.FNAME,
a.COLLID,
a.COLLNAME,
a.MANAGE_QIZHONG,
a.MANAGE_ITEM,
a.XISHU ,
a.TRADETYPE,--0222新增
a.SYBTRADETYPE--0222新增
FROM
DW_FYFX_DETAIL_ALTER a
where CONVERT (VARCHAR(10),a.BookedDate,120) >= '${MONTH}'
MID_FYFX_DETAIL
ODS_CHART_ACCOUNTS
ODS_CHART_ACCOUNTS
DW_FYFX_DETAIL_ALTER
数据去向写入到:
SQL SERVER FR DW_FYFX_DETAIL(已存在表)
写入方式报错了,没法看
至此,费用付分析结束
损益表牵制处理
先不看