Start routine
====================
CHECK SOURCE_PACKAGE IS NOT INITIAL.
DELETE SOURCE_PACKAGE WHERE /BIC/ZP0SSTUS NE '01'. "删除单据类型=00CLEAR L_DAY. CLEAR L_LASTDAY.
LOOP AT SOURCE_PACKAGE ASSIGNING <SOURCE_FIELDS>. "取营业日期区间
IF L_DAY IS INITIAL.
L_DAY = <SOURCE_FIELDS>-/BIC/ZBUSDE.
L_LASTDAY = <SOURCE_FIELDS>-/BIC/ZBUSDE.
ENDIF.
IF L_DAY > <SOURCE_FIELDS>-/BIC/ZBUSDE.
L_DAY = <SOURCE_FIELDS>-/BIC/ZBUSDE.
ENDIF.
IF L_LASTDAY < <SOURCE_FIELDS>-/BIC/ZBUSDE.
L_LASTDAY = <SOURCE_FIELDS>-/BIC/ZBUSDE.
ENDIF.
ENDLOOP.
DELETE from /BIC/AZCELT02800 WHERE CALDAY >= L_DAY "删除目标数据
AND CALDAY <= L_LASTDAY.
DATA: L_FIRSTDAY TYPE D.
CONCATENATE L_DAY+0(6) '01' INTO L_FIRSTDAY. "月第一天
DATA: LT_RECORD1 TYPE STANDARD TABLE OF S_RECORD WITH NON-UNIQUE DEFAULT
KEY.
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE LT_RECORD1
FROM /BIC/AZCELT00200
WHERE /BIC/ZSTORE NE '' AND /BIC/Z_SFTG = 'N' AND MATL_TYPE NE 'A100'
AND /BIC/ZBUSDE < L_DAY AND /BIC/ZBUSDE >= L_FIRSTDAY.
LOOP AT LT_RECORD1 INTO LS_RECORD. "取source到月初的记录
COLLECT LS_RECORD INTO LT_RECORD.
ENDLOOP.
DATA: L_MON_END TYPE D.
CALL FUNCTION 'ZBKK_GET_MONTH_LASTDAY'
EXPORTING I_DATE = L_LASTDAY
IMPORTING E_DATE = L_MON_END.
SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_RJH FROM /BIC/AZIELT04900
WHERE CALDAY >= L_FIRSTDAY AND CALDAY <= L_MON_END.
LOOP AT LT_RJH INTO LS_RJH.
CLEAR LS_RJH-CALDAY.
COLLECT LS_RJH INTO LT_RJH1.
ENDLOOP.
SORT LT_RJH BY CALDAY /BIC/ZSTORE. SORT LT_RJH1 BY CALMONTH /BIC/ZSTORE."取日计划金额和月计划金额
DATA: L_MATL_TYPE TYPE /BI0/OIMATL_TYPE.
DATA: LS_SOURCE TYPE _ty_s_SC_1.
DATA: L_TABIX TYPE SY-TABIX.
LOOP AT SOURCE_PACKAGE INTO LS_SOURCE.
"排除道具类物料(MATL_TYPE = 'A100');其他源数据按POS单号汇总
L_TABIX = SY-TABIX.
CLEAR L_MATL_TYPE.
SELECT SINGLE MATL_TYPE INTO L_MATL_TYPE FROM /BIC/PZMATERIAL
WHERE /BIC/ZMATERIAL = LS_SOURCE-/BIC/ZMATERIAL
AND OBJVERS = 'A'.
IF L_MATL_TYPE = 'A100'.
DELETE SOURCE_PACKAGE INDEX L_TABIX.
ELSE.
MOVE-CORRESPONDING LS_SOURCE TO LS_RECORD.
COLLECT LS_RECORD INTO LT_RECORD.
ENDIF.
ENDLOOP.
==================
“ZDTLFTAMT实收金额 ZDTLqty 零售数量
”ZRTRLAMT 终端零售总额; ZRTRLAMT 南通成本价总额
“ZJXJYAMT积压金额(经销价)
==================
LOOP AT LT_RECORD INTO LS_RECORD. "排除数量为0的POS单号;
L_TABIX = SY-TABIX.
IF LS_RECORD-/BIC/ZDTLQTY = 0.
* DELETE LT_RECORD INDEX L_TABIX.
LS_RECORD-/BIC/ZNTJAMT = LS_RECORD-/BIC/ZNTJAMT * 117 / 100."因实收集积
ELSEIF LS_RECORD-/BIC/ZDTLQTY > 0. "正常销售客单数计1
LS_RECORD-COUNT = 1.
LS_RECORD-/BIC/ZNTJAMT = LS_RECORD-/BIC/ZNTJAMT * 117 / 100.
ELSE. "退货:客单数计-1
LS_RECORD-COUNT = -1.
LS_RECORD-/BIC/ZNTJAMT = LS_RECORD-/BIC/ZNTJAMT * 117 / 100.
ENDIF.
MODIFY LT_RECORD FROM LS_RECORD.
ENDLOOP.
SORT LT_RECORD BY /BIC/ZSTORE /BIC/ZBUSDE /BIC/ZPOSSANO.
======================
”以上求客单数
==========
*** 20150922 生成试错店数据,哪怕当日没有销售
DATA: LT_SCD TYPE STANDARD TABLE OF /BIC/AZCSTORE00 WITH NON-UNIQUE
DEFAULT KEY.
DATA: LS_SCD TYPE /BIC/AZCSTORE00.
SELECT * INTO TABLE LT_SCD
FROM /BIC/AZCSTORE00 [DSO ZCSTORE ]
WHERE /BIC/ZDPBZ = '1' AND /BIC/ZSYB NE ''.
DATA: I TYPE I. I = L_LASTDAY - L_DAY.
WHILE I >= 0.
LOOP AT LT_SCD INTO LS_SCD.
CLEAR LS_SOURCE.
MOVE-CORRESPONDING LS_SCD TO LS_SOURCE.
LS_SOURCE-/BIC/ZBUSDE = L_LASTDAY - I.
LS_SOURCE-/BIC/ZBRAND = LS_SCD-DIVISION.
SELECT SINGLE /BIC/ZSTORE_JH INTO LS_SOURCE-/BIC/ZSTORE_JH FROM
/BIC/AZSTOREJH00 WHERE /BIC/ZSTORE = LS_SOURCE-/BIC/ZSTORE. [集合店]
APPEND LS_SOURCE TO SOURCE_PACKAGE.
ENDLOOP.
I = I - 1.
ENDWHILE.
*** 20150922 生成试错店数据,哪怕当日没有销售 end
++++++++++++++++++++++++++++++
END ROUTINE
++++++++++++++++++++++++++++++
CHECK RESULT_PACKAGE IS NOT INITIAL.
REFRESH: LT_STORE,LT_DIVISION.
SELECT /BIC/ZSTORE /BIC/ZPROVINCE /BIC/ZDPBZ 【试错店标志】
INTO TABLE LT_STORE
from /BIC/AZCSTORE00
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE /BIC/ZSTORE = RESULT_PACKAGE-/BIC/ZSTORE.
SORT LT_STORE BY /BIC/ZSTORE.
DELETE ADJACENT DUPLICATES FROM LT_STORE COMPARING /BIC/ZSTORE.
SELECT DIVISION TXTSH
INTO TABLE LT_DIVISION
from /BI0/TDIVISION
FOR ALL ENTRIES IN RESULT_PACKAGE
WHERE DIVISION = RESULT_PACKAGE-/BIC/ZBRAND.
SORT LT_DIVISION BY DIVISION.
DELETE ADJACENT DUPLICATES FROM LT_DIVISION COMPARING DIVISION.
LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>.
CLEAR: LS_STORE, LS_DIVISION. "取门店省份
READ TABLE LT_STORE INTO LS_STORE WITH KEY /BIC/ZSTORE =
<RESULT_FIELDS>-/BIC/ZSTORE BINARY SEARCH.
IF SY-SUBRC = 0.
<RESULT_FIELDS>-/BIC/ZPROVINCE = LS_STORE-/BIC/ZPROVINCE.
<RESULT_FIELDS>-/BIC/ZDPBZ = LS_STORE-/BIC/ZDPBZ.
ENDIF. "取品牌名称
READ TABLE LT_DIVISION INTO LS_DIVISION WITH KEY DIVISION =
<RESULT_FIELDS>-/BIC/ZBRAND BINARY SEARCH.
IF SY-SUBRC = 0.
<RESULT_FIELDS>-/BIC/ZKBRD_NM = LS_DIVISION-TXTSH.
ENDIF.
ENDLOOP.
==========================================================================
DATA: L_COUNT TYPE I. DATA: L_ZDTLFTAMT TYPE /BIC/OIZDTLFTAMT.
DATA: L_ZDTLQTY TYPE /BIC/OIZDTLQTY.DATA: L_ZNTJAMT TYPE /BIC/OIZNTJAMT.
DATA: L_ZYLJJE TYPE /BIC/OIZYLJJE.【月累计金额】
DATA: L_ZRTRLAMT TYPE /BIC/OIZRTRLAMT.【终端零售总额(即按终端零售单价计算得的总金额)】
DATA: L_ZZJXJ_AMT TYPE /BIC/OIZZJXJ_AMT. 【ZZJXJ_AMT】
LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>.
CLEAR L_COUNT. CLEAR L_ZNTJAMT. CLEAR L_ZZJXJ_AMT.
CLEAR L_ZDTLQTY. CLEAR L_ZDTLFTAMT. CLEAR L_ZRTRLAMT. CLEAR L_ZYLJJE.
LOOP AT LT_RECORD INTO LS_RECORD WHERE /BIC/ZSTORE =
<RESULT_FIELDS>-/BIC/ZSTORE.
IF LS_RECORD-/BIC/ZBUSDE = <RESULT_FIELDS>-CALDAY.
L_COUNT = L_COUNT + LS_RECORD-COUNT. "本日本店客单数
L_ZNTJAMT = L_ZNTJAMT + LS_RECORD-/BIC/ZNTJAMT.
L_ZDTLQTY = L_ZDTLQTY + LS_RECORD-/BIC/ZDTLQTY.
L_ZDTLFTAMT = L_ZDTLFTAMT + LS_RECORD-/BIC/ZDTLFTAMT.
L_ZRTRLAMT = L_ZRTRLAMT + LS_RECORD-/BIC/ZRTRLAMT.
L_ZZJXJ_AMT = L_ZZJXJ_AMT + LS_RECORD-/BIC/ZZJXJ_AMT.
ENDIF.
IF LS_RECORD-/BIC/ZBUSDE+0(6) = <RESULT_FIELDS>-CALDAY+0(6)
AND LS_RECORD-/BIC/ZBUSDE <= <RESULT_FIELDS>-CALDAY.
L_ZYLJJE = L_ZYLJJE + LS_RECORD-/BIC/ZDTLFTAMT. "月累计金额
ENDIF.
ENDLOOP.
<RESULT_FIELDS>-/BIC/ZKDS = L_COUNT. 【客单数】
<RESULT_FIELDS>-/BIC/ZYLJJE = L_ZYLJJE.【月累计金额】
IF L_COUNT NE 0.
<RESULT_FIELDS>-/BIC/ZKDJ = L_ZDTLFTAMT / L_COUNT. 【客单价】
<RESULT_FIELDS>-/BIC/ZLDL = L_ZDTLQTY / L_COUNT . 【连带率】=零售数量/客单数
CALL FUNCTION 'ROUND' "四舍五入
EXPORTING
DECIMALS = 0
INPUT = <RESULT_FIELDS>-/BIC/ZLDL
IMPORTING OUTPUT = <RESULT_FIELDS>-/BIC/ZLDL.
ENDIF.
IF L_ZRTRLAMT NE 0.
<RESULT_FIELDS>-/BIC/ZZK = L_ZDTLFTAMT / L_ZRTRLAMT. 【折扣】=实收金额/终端零售金额
ENDIF.
IF L_ZDTLFTAMT NE 0 .
<RESULT_FIELDS>-/BIC/ZMLL = ( L_ZDTLFTAMT - L_ZNTJAMT ) /
L_ZDTLFTAMT.【毛利率】
<RESULT_FIELDS>-/BIC/ZJXJMLL = ( L_ZDTLFTAMT - L_ZZJXJ_AMT ) /
L_ZDTLFTAMT. 【经销价毛利率】
ENDIF.
IF L_ZZJXJ_AMT NE 0 .
ENDIF.
<RESULT_FIELDS>-/BIC/ZNTJAMT = L_ZNTJAMT.
<RESULT_FIELDS>-/BIC/ZML = L_ZDTLFTAMT - L_ZNTJAMT. 【毛利】
READ TABLE LT_RJH INTO LS_RJH "取日计划金额
WITH KEY CALDAY = <RESULT_FIELDS>-CALDAY
/BIC/ZSTORE = <RESULT_FIELDS>-/BIC/ZSTORE BINARY SEARCH.
IF SY-SUBRC = 0 AND LS_RJH-/BIC/ZJHJE NE 0.
<RESULT_FIELDS>-/BIC/ZJHJE = LS_RJH-/BIC/ZJHJE. 【计划金额】
<RESULT_FIELDS>-/BIC/ZRDCL = <RESULT_FIELDS>-/BIC/ZDTLFTAMT /
LS_RJH-/BIC/ZJHJE. 【日达成率】
ENDIF.
READ TABLE LT_RJH1 INTO LS_RJH "取月计划金额
WITH KEY CALMONTH = <RESULT_FIELDS>-CALDAY+0(6)
/BIC/ZSTORE = <RESULT_FIELDS>-/BIC/ZSTORE BINARY SEARCH.
IF SY-SUBRC = 0 AND LS_RJH-/BIC/ZJHJE NE 0.
<RESULT_FIELDS>-/BIC/ZYJHJE = LS_RJH-/BIC/ZJHJE.
<RESULT_FIELDS>-/BIC/ZYDCJD = <RESULT_FIELDS>-/BIC/ZYLJJE /
LS_RJH-/BIC/ZJHJE.【月达成进度】
ENDIF.
"事业部描述
SELECT SINGLE TXTSH INTO <RESULT_FIELDS>-/BIC/ZSYBMS FROM /BIC/TZSYB
WHERE /BIC/ZSYB = <RESULT_FIELDS>-/BIC/ZSYB AND LANGU = '1'.
if <RESULT_FIELDS>-/BIC/ZSTORE_JH is not INITIAL.
"集合店事业部
select single /BIC/ZSYBJH into <RESULT_FIELDS>-/BIC/ZSYBJH from
/BIC/PZSTORE_JH where /BIC/ZSTORE_JH =
<RESULT_FIELDS>-/BIC/ZSTORE_JH.
"取集合店名称
select single txtlg into <RESULT_FIELDS>-/BIC/ZST_JHMS from
/BIC/TZSTORE_JH
where /BIC/ZSTORE_JH = <RESULT_FIELDS>-/BIC/ZSTORE_JH AND LANGU
= '1'.
"集合店事业部描述
SELECT SINGLE TXTSH INTO <RESULT_FIELDS>-/BIC/ZSYBJHMS FROM
/BIC/TZSYB
WHERE /BIC/ZSYB = <RESULT_FIELDS>-/BIC/ZSYBJH AND LANGU = '1'.
endif.
ENDLOOP.
" 删除月累计为0
DELETE RESULT_PACKAGE WHERE /BIC/ZYLJJE = 0 AND /BIC/ZYJHJE = 0 AND
/BIC/ZDTLFTAMT = 0 AND /BIC/ZDTLQTY = 0.
*$*$ end of routine - insert your code only before this line *-*
ENDMETHOD. "end