SAP-ABAP 收入成本毛利表

&---------------------------------------------------------------------
*& Report ZCORP005
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zcorp005 MESSAGE-ID 00.

TABLES:vbrp,vbrk,mldocccs_extract,vbap,ckmlhd,cosp.

SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS : s_bukrs FOR vbrp-bukrs_ana OBLIGATORY NO-EXTENSION NO INTERVALS." 公司代码、WERKS
SELECT-OPTIONS : s_werks FOR vbrp-werks." 工厂、WERKS
SELECT-OPTIONS : s_aubel FOR vbrp-aubel ." 销售凭证
SELECT-OPTIONS : s_aupos FOR vbrp-aupos ." 销售凭证行项目
SELECT-OPTIONS : s_zprono FOR vbap-zprono." 项目号
SELECT-OPTIONS : s_jahr FOR cosp-gjahr." 会计年度
SELECT-OPTIONS : s_perbl FOR cosp-perbl." 记帐期间
SELECT-OPTIONS : s_matnr FOR ckmlhd-matnr ." 物料 ckmlhd-matnr
SELECT-OPTIONS : s_kunag FOR vbrp-kunag_ana." 售达方 s_JAHRPER
SELECT-OPTIONS : s_jah FOR mldocccs_extract-jahrper NO-DISPLAY."
SELECTION-SCREEN:END OF BLOCK b1.

DATA: BEGIN OF ls_data,
sel TYPE c,
bukrs TYPE vbrp-bukrs_ana, " CHAR 4 公司代码
butxt TYPE t001-butxt, " CHAR 4 公司代码描述
fkdat_ana TYPE vbrp-fkdat_ana, " DATS 8 开票日期
aubel TYPE vbrp-aubel, " CHAR 10 销售凭证
aupos TYPE vbrp-aupos, " CHAR 6 销售凭证行项目
zprono TYPE vbap-zprono , "CHAR 10 项目号 是否赠机(行项目类别)?
kunag_ana TYPE vbrp-kunag_ana, " CHAR 10 售达方
kunrg_ana TYPE vbrp-kunrg_ana, " CHAR 10 付款方
kunwe_ana TYPE vbrp-kunwe_ana, " CHAR 10 送达方
kunre_ana TYPE vbrp-kunre_ana , "CHAR 10 受票方
mwsbp TYPE vbrp-mwsbp, "税额
vbeln TYPE vbrp-vbeln,
posnr TYPE vbrp-posnr,
vgbel TYPE vbrp-vgbel,
vgpos TYPE vbrp-vgpos,
werks TYPE vbap-werks,
name1 TYPE kna1-name1, " CURR 35 售达方描述
zkunag TYPE kna1-zkunag , "CHAR 10 所属母公司
zkunag_name1 TYPE kna1-name1, " CURR 35 所属的母公司描述
matkl TYPE t023t-matkl, " CHAR 9 产品类别
wgbez TYPE t023t-wgbez, " CHAR 20 产品类别描述

  •    MATKL  TYPE T023T-MATKL ,"CHAR  9 产品型号
    
  •    WGBEZ TYPE  T023T-WGBEZ," CHAR  20  产品型号描述
      bklas        TYPE  mbew-bklas, "  CHAR  4 产品系列
      bkbez        TYPE t025t-bkbez, " CKAR  25  产品系列描述
    
  •    MATKL TYPE  T023T-MATKL ,"CKAR  9 产品型号
    
  •    WGBEZ TYPE  T023T-WGBEZ," CHAR  20  产品型号描述
      matnr        TYPE vbrp-matnr, "  CHAR  40  物料号
      maktx        TYPE makt-maktx, "  CHAR  40  物料描述
      netwr        TYPE vbrp-netwr, "  CURR  15.2  原账面确认收入
      netwr1       TYPE vbrp-netwr, "(VBRP-NETWR)+(VBRP-MWSBP) " CURR  15.2  合同金额(含税)
      tot1         TYPE mldocccs_extract-tot , " CURR  23.2  原材料
      tot2         TYPE  mldocccs_extract-tot, "  CURR  23.2  半成品
      tot3         TYPE mldocccs_extract-tot, "  CURR  23.2  产成品
      tot4         TYPE  mldocccs_extract-tot, "  CURR  23.2  其他辅料
      tot5         TYPE  mldocccs_extract-tot, "  CURR  23.2  委外发出材料
      tot6         TYPE mldocccs_extract-tot  , "CURR  23.2  委外加工费
      tot7         TYPE  mldocccs_extract-tot  , "CURR  23.2  委外-结转
      tot8         TYPE  mldocccs_extract-tot, "  CURR  23.2  人工工时(费用)
      tot9         TYPE mldocccs_extract-tot, "  CURR  23.2  机器工时(费用)
      tot10        TYPE mldocccs_extract-tot, "  CURR  23.2  制造费用工时(费用)
      aufnr        TYPE coas-aufnr, "内部订单
      wtg001       TYPE  cosp-wtg001 , "CURR  15.2  原材料
      wtg002       TYPE   cosp-wtg002 , "CURR  15.2  人工工时(费用)
      wtg003       TYPE  cosp-wtg003 , "CURR  15.2  机器工时(费用)
      wtg004       TYPE  cosp-wtg004 , "CURR  15.2  研发费用工时(费用)
      wavwr        TYPE   vbrp-wavwr  , "CURR  23.2  主营业务成本(销售订单成本)
      dmbtr        TYPE   bseg-dmbtr  , "CURR  23.2  主营业务成本(销售订单后发出商品转主营业务成本)
      dmbtr1       TYPE  bseg-dmbtr , "  CURR  23.2  主营业务成本(发出商品内部订单结转到主营业务成本)
      dmbtr2       TYPE  bseg-dmbtr   , "CURR  23.2  运输费用
      dmbtr3       TYPE  bseg-dmbtr   , "CURR  23.2  主营业务成本合计
      dmbtr4       TYPE  bseg-dmbtr    , "CURR  23.2  毛利
      dmbtr4_str   TYPE  string    , "CURR  23.2  毛利
      gross(6)     TYPE   p DECIMALS 4         , "毛利率
      gross_str    TYPE string,
      bstdk        TYPE vbak-bstdk, "  DATS  8 合同日期
      wadat_ist    TYPE   likp-wadat_ist  , "DATS  8 实际发货日期
      zwaprd       TYPE  vbap-zwaprd  , "NUMC  4 质保期(月)
      zday         TYPE num     , "  验收周期(天)
      zsource1     TYPE vbak-zsource1, " CHAR  2 订单取得方式
      zsource2     TYPE   vbak-zsource2 , "CHAR  15  代理商名称
      zattr1       TYPE   vbak-zattr1 , "CHAR  2 应用领域
      land1        TYPE t001-land1  , "CHAR  3 地区
      dmbtr6       TYPE   bseg-dmbtr, "  CHAR  23.2  已回款金额
      dmbtr6_str   TYPE string,
      dmbtr7       TYPE  bseg-dmbtr, " TYPE (VBRP-NETWR)+(VBRP-MWSBP)-已回款金额," CHAR  23.2  未回款金额
      dmbtr7_str   TYPE string,
      zterm        TYPE   vbrk-zterm, "  CHAR  4 付款条件
    
    END OF ls_data.
    

DATA lt_data LIKE TABLE OF ls_data WITH HEADER LINE .
DATA lt_vbrp LIKE TABLE OF ls_data WITH HEADER LINE .

DATA lt_cosp_b_row LIKE TABLE OF ls_data WITH HEADER LINE .

DATA : BEGIN OF lt_cosp_b_sum OCCURS 0,
kdauf TYPE coas-kdauf,
kdpos TYPE coas-kdpos,

     wtg001 TYPE cosp-wtg001,
     wtg002 TYPE cosp-wtg002,
     wtg003 TYPE cosp-wtg003,
     wtg004 TYPE cosp-wtg004,
     wtg005 TYPE cosp-wtg005,
     wtg006 TYPE cosp-wtg006,
     wtg007 TYPE cosp-wtg007,
     wtg008 TYPE cosp-wtg008,
     wtg009 TYPE cosp-wtg009,
     wtg010 TYPE cosp-wtg010,
     wtg011 TYPE cosp-wtg011,
     wtg012 TYPE cosp-wtg012,
     wtg013 TYPE cosp-wtg013,
     wtg014 TYPE cosp-wtg014,
     wtg015 TYPE cosp-wtg015,
     wtg016 TYPE cosp-wtg016,
     wtgxx  TYPE cosp-wtg001,
     zcpzt  TYPE ztco004-zcpzt, "产品状态 生产阶段 发出商品阶段
     zfylx  TYPE ztco004-zfylx, "费用类型 原材料 人工工时等
   END OF  lt_cosp_b_sum.

*DATA lt_cosp LIKE TABLE OF lt_cosp_b_sum WITH HEADER LINE.
DATA lt_cosp2 LIKE TABLE OF lt_cosp_b_sum WITH HEADER LINE.
DATA lt_cosp2_sum LIKE TABLE OF lt_cosp_b_sum WITH HEADER LINE.

DATA:BEGIN OF lt_bseg_mov OCCURS 0,
vbel2 TYPE bseg-vbel2,
posn2 TYPE bseg-posn2,
shkzg TYPE bseg-shkzg, " 借贷标识
dmbtr TYPE bseg-dmbtr,
END OF lt_bseg_mov.
DATA lt_bseg LIKE TABLE OF lt_bseg_mov WITH HEADER LINE.
*DATA lt_bseg_aufnr LIKE TABLE OF lt_bseg_mov WITH HEADER LINE.
*DATA lt_bseg_unaufnr LIKE TABLE OF lt_bseg_mov WITH HEADER LINE.

DATA lt_bseg_mov1 LIKE TABLE OF lt_bseg_mov .
DATA lt_bseg_mov2 LIKE TABLE OF lt_bseg_mov .

DATA : BEGIN OF lt_wtgfield OCCURS 0,
wtg00(6) TYPE c,
perbl TYPE cosp-perbl,
END OF lt_wtgfield.
FIELD-SYMBOLS .

DATA: BEGIN OF lt_acdoca1 OCCURS 0,
kdauf TYPE acdoca-kdauf,
kdpos TYPE acdoca-kdpos,
wsl TYPE acdoca-wsl,
racct TYPE acdoca-racct,
END OF lt_acdoca1.
DATA lt_acdoca2 LIKE TABLE OF lt_acdoca1 WITH HEADER LINE.
DATA lt_acdoca2_mov LIKE TABLE OF lt_acdoca1 WITH HEADER LINE.
DATA lt_acdoca1_mov LIKE TABLE OF lt_acdoca1 WITH HEADER LINE.

DATA gross_mid(6) TYPE p DECIMALS 2.

****ALV参数定义:
“ALV
DATA: gt_fcat TYPE lvc_t_fcat, " 主屏幕
gs_layo TYPE lvc_s_layo,
gv_title TYPE lvc_title,
gs_variant TYPE disvariant,
gt_event TYPE slis_t_event.
DATA stylelin TYPE lvc_s_styl.
DATA gt_fcat1 TYPE slis_t_fieldcat_alv .” 子屏幕
DATA ls_fcat1 LIKE LINE OF gt_fcat1.
DATA: gs_stable TYPE lvc_s_stbl. "ALV刷新

RANGES: r_fkdat FOR vbrp-fkdat_ana.

START-OF-SELECTION .
AUTHORITY-CHECK OBJECT ‘F_BKPF_BUK’ ID ‘BUKRS’ FIELD s_bukrs-low
ID ‘ACTVT’ DUMMY.
IF sy-subrc <> 0.
MESSAGE e889 WITH ‘没有公司代码权限’.
ENDIF.

PERFORM perbl_wtg. " 构建 WTG*与期间的关系
PERFORM get_data. " 取主数逻辑 组装数据 主营业务数据
PERFORM get_data_wtg00." 组装数据,获取发出商品阶段数据并组装
PERFORM get_data_tot. " 组装数据,获取生产阶段数据并组装
PERFORM frm_deal_data.“最后处理
PERFORM frm_alv.” 报表展示以及功能实现
&---------------------------------------------------------------------
*& Form get_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM get_data .

"VBRP-BUKRS_ANA、VBRP-AUPOS AUBEL、VBRP-AUPOS、VBAP-ZPRONO查询以下数据:

SELECT
a~bukrs_ana AS bukrs,
a~fkdat_ana,
a~aubel,
a~aupos,
c~zprono,
a~kunag_ana,
a~kunrg_ana,
a~kunwe_ana,
a~kunre_ana,
a~matnr,
a~netwr,
a~mwsbp,
a~wavwr,
a~vbeln,
a~posnr,
a~vgbel,
a~vgpos,
b~bstdk,
b~zsource1,
b~zsource2,

  • b~zattr1,
    d~zterm,
    c~zwaprd,
    c~werks,
    t~butxt,
    t~land1
    FROM vbrp AS a
    INNER JOIN vbak AS b ON a~aubel = b~vbeln
    INNER JOIN vbap AS c ON a~aubel = c~vbeln AND a~aupos = c~posnr
    INNER JOIN vbrk AS d ON a~vbeln = d~vbeln
    LEFT JOIN t001 AS t ON a~bukrs_ana = t~bukrs
    WHERE a~bukrs_ana IN @s_bukrs AND a~werks IN @s_werks AND a~aupos IN @s_aupos
    AND a~aubel IN @s_aubel AND c~zprono IN @s_zprono
    AND a~kunag_ana IN @s_kunag
  • AND A~fkdat_ana IN @r_fkdat
    AND d~sfakn = ‘’
    AND a~vbeln NOT IN ( SELECT sfakn AS vbeln FROM vbrk ) "开票冲销标识: VBRK-SFAKN不为空的条目以及这个字段的号码取查询VBRK-VBELN的开票凭证一起删除;如下图实例:这两张凭证都删除掉;
    INTO CORRESPONDING FIELDS OF TABLE @lt_vbrp.

IF s_jahr[] IS NOT INITIAL.
DELETE lt_vbrp WHERE fkdat_ana(4) NOT IN s_jahr.
ENDIF.
IF s_perbl[] IS NOT INITIAL.
DELETE lt_vbrp WHERE fkdat_ana+4(2) NOT IN s_perbl.
ENDIF.

IF lt_vbrp[] IS NOT INITIAL .
**6 根据VBRP-VGBEL = LIKP-VBELN,取LIKP-WADAT_IST 实际货物移动日期;
SELECT
vbeln,
wadat_ist
FROM likp
FOR ALL ENTRIES IN @lt_vbrp WHERE vbeln = @lt_vbrp-vgbel
INTO TABLE @DATA(lt_likp).

**7、根据VBRP-MATNR = MBEW-MATNR,取MBEW-BKLAS; 评估类

SELECT
  matnr,
  mbew~bklas,
  bkbez
  FROM mbew
  INNER JOIN t025t ON mbew~bklas = t025t~bklas AND spras = @sy-langu
  FOR ALL ENTRIES IN @lt_vbrp WHERE matnr = @lt_vbrp-matnr
  INTO TABLE @DATA(lt_mbew).

**9、根据VBRP-MATNR = MARA-MATNR,取MARA-MATKL;物料组
"VBRP-MATNR = MAKT-MATNR,where MAKT-SPRAS = ‘ZH’,取KAKT-MAKTX;
SELECT
mara~matnr,
makt~maktx,
mara~matkl,
t023t~wgbez60 AS wgbez
FROM mara
LEFT JOIN t023t ON mara~matkl = t023t~matkl AND spras = @sy-langu
LEFT JOIN makt ON mara~matnr = makt~matnr AND makt~spras = @sy-langu
FOR ALL ENTRIES IN @lt_vbrp WHERE mara~matnr = @lt_vbrp-matnr
INTO TABLE @DATA(lt_mara)…

**12、根据VBRP-KUNAG_ANA = KNA1-KUNNR OR VBRP-KUNRG_ANA = KNA1-KUNNR
**OR VBRP-KUNWE_ANA = KNA1-KUNNR OR VBRP-KUNRE_ANA = KNA1-KUNNR,各自取描述:KNA1-NAME1;

SELECT
  kunnr,
  name1,
  katr1,
  zkunag
  FROM
  kna1
   FOR ALL ENTRIES IN @lt_vbrp  WHERE  kunnr = @lt_vbrp-kunag_ana
  INTO TABLE @DATA(lt_kna1).

"主营业务成本(销售订单后发出商品转主营业务成本) 分配字段为空
SELECT
 a~rldnr,
 a~rbukrs,
 a~gjahr,
 a~belnr,
 a~docln,
 a~kdauf AS vbel2,
 a~kdpos AS posn2,
 a~hsl AS dmbtr
 FROM acdoca AS a
 FOR ALL ENTRIES IN @lt_vbrp
 WHERE a~blart = 'SA' AND a~kdauf = @lt_vbrp-aubel  AND a~kdpos = @lt_vbrp-aupos
 AND a~gkont LIKE '1406%' AND a~racct IN ('6401010300','6401010100','6401010200')
 AND NOT EXISTS ( SELECT mandt FROM coas AS b WHERE b~aufnr = a~zuonr )
 INTO TABLE @DATA(lt_bseg_unaufnr).

REFRESH:lt_bseg_mov.
LOOP AT lt_bseg_unaufnr INTO DATA(ls_bseg_unaufnr).
  CLEAR:lt_bseg_mov.
  MOVE-CORRESPONDING ls_bseg_unaufnr TO lt_bseg_mov.
  COLLECT lt_bseg_mov.
ENDLOOP.

"主营业务成本(发出商品内部订单结转到主营业务成本) 内部订单填写分配字段
SELECT
 a~rldnr,
 a~rbukrs,
 a~gjahr,
 a~belnr,
 a~docln,
 a~kdauf AS vbel2,
 a~kdpos AS posn2,
 a~hsl AS dmbtr
 FROM acdoca AS a
 JOIN coas AS b ON a~zuonr = b~aufnr AND a~zzxmbm = b~aufex
 FOR ALL ENTRIES IN @lt_vbrp
 WHERE a~blart = 'SA' AND a~kdauf = @lt_vbrp-aubel  AND a~kdpos = @lt_vbrp-aupos
 AND a~gkont LIKE '1406%' AND a~racct IN ('6401010300','6401010100','6401010200')
 INTO TABLE @DATA(lt_bseg_aufnr).

REFRESH:lt_bseg_mov1.
LOOP AT lt_bseg_aufnr INTO DATA(ls_bseg_aufnr).
  CLEAR:lt_bseg_mov.
  MOVE-CORRESPONDING ls_bseg_aufnr TO lt_bseg_mov.
  COLLECT lt_bseg_mov INTO lt_bseg_mov1.
ENDLOOP.


"运输费用
" 取1410*的对方科目的金额汇总
SELECT
 a~rldnr,
 a~rbukrs,
 a~gjahr,
 a~belnr,
 a~docln,
 a~kdauf AS vbel2,
 a~kdpos AS posn2,
 a~hsl AS dmbtr
 FROM acdoca AS a
 FOR ALL ENTRIES IN @lt_vbrp
 WHERE a~blart = 'SA' AND a~kdauf = @lt_vbrp-aubel  AND a~kdpos = @lt_vbrp-aupos
 AND a~gkont LIKE '1410%' AND a~racct IN ('6401010300','6401010100','6401010200')
 INTO TABLE @DATA(lt_bseg).
REFRESH: lt_bseg_mov2.
LOOP AT lt_bseg INTO DATA(ls_bseg).
  CLEAR:lt_bseg_mov.
  MOVE-CORRESPONDING ls_bseg TO lt_bseg_mov.
  COLLECT lt_bseg_mov INTO lt_bseg_mov2.
ENDLOOP.



SELECT
kdauf,
kdpos,
wsl ,
racct
FROM
acdoca
 FOR ALL ENTRIES IN @lt_vbrp WHERE kdauf = @lt_vbrp-aubel  AND kdpos = @lt_vbrp-aupos
AND racct IN ('1423010000  ','1423020000  ','1122010100','1122010200','2204010000','2204020000') AND blart = 'DZ'
INTO CORRESPONDING FIELDS OF TABLE @lt_acdoca1 .

LOOP AT lt_acdoca1.
  COLLECT lt_acdoca1  INTO lt_acdoca1_mov.
ENDLOOP.

** "客户预收款
** SELECT
** KDAUF,
** KDPOS,
** WSL ,
** RACCT
** from
** ACDOCA
** FOR ALL ENTRIES IN @lt_vbrp where KDAUF = @lt_vbrp-aubel and KDPOS = @lt_vbrp-aupos
** and RACCT in ('2203010000 ','2203020000 ')
** into CORRESPONDING FIELDS OF TABLE @lt_acdoca1 .
**
** LOOP AT lt_acdoca1.
** COLLECT lt_acdoca1 INTO lt_acdoca1_mov.
** ENDLOOP.
**
** " 客户收款
** SELECT
** KDAUF,
** KDPOS,
** WSL,
** RACCT
** from
** ACDOCA
** FOR ALL ENTRIES IN @lt_vbrp where KDAUF = @lt_vbrp-aubel and KDPOS = @lt_vbrp-aupos
** and RACCT in ('2203010000 ','2203020000 ')
** into CORRESPONDING FIELDS OF TABLE @lt_acdoca2.
**
** LOOP AT lt_acdoca2.
** COLLECT lt_acdoca2 INTO lt_acdoca2_mov.
** ENDLOOP.

ENDIF.

LOOP AT lt_vbrp . " 组装基本数据

READ TABLE lt_likp ASSIGNING FIELD-SYMBOL(<lt_likp>) WITH KEY vbeln = lt_vbrp-vgbel.
IF sy-subrc = 0.
  lt_vbrp-wadat_ist = <lt_likp>-wadat_ist.
ENDIF.

READ TABLE lt_mbew ASSIGNING FIELD-SYMBOL(<lt_mbew>) WITH KEY matnr = lt_vbrp-matnr.
IF sy-subrc = 0.
  lt_vbrp-bklas = <lt_mbew>-bklas.
  lt_vbrp-bkbez = <lt_mbew>-bkbez.
ENDIF.

READ TABLE lt_mara ASSIGNING FIELD-SYMBOL(<lt_mara>) WITH KEY matnr = lt_vbrp-matnr.
IF sy-subrc = 0.
  lt_vbrp-maktx = <lt_mara>-maktx.
  lt_vbrp-matkl = <lt_mara>-matkl.
  lt_vbrp-wgbez = <lt_mara>-wgbez.
ENDIF.

READ TABLE lt_kna1 ASSIGNING FIELD-SYMBOL(<lt_kna1>) WITH KEY kunnr = lt_vbrp-kunag_ana.
IF sy-subrc = 0.
  lt_vbrp-name1 = <lt_kna1>-name1.
  lt_vbrp-zkunag_name1 = <lt_kna1>-name1.
  lt_vbrp-zkunag = <lt_kna1>-zkunag.
  lt_vbrp-zattr1 = <lt_kna1>-katr1.
ENDIF.

lt_vbrp-netwr1 = lt_vbrp-netwr + lt_vbrp-mwsbp.   " 合同金额(含税)= (VBRP-NETWR)+(VBRP-MWSBP);

"主营业务成本(销售订单后发出商品转主营业务成本)(无内部订单)
READ TABLE lt_bseg_mov ASSIGNING FIELD-SYMBOL(<lt_bseg_mov>) WITH  KEY vbel2 = lt_vbrp-aubel posn2 = lt_vbrp-aupos.
IF sy-subrc = 0.
  lt_vbrp-dmbtr  = <lt_bseg_mov>-dmbtr.
ENDIF.

"主营业务成本(发出商品内部订单结转到主营业务成本)(有内部订单)
READ TABLE lt_bseg_mov1 ASSIGNING <lt_bseg_mov> WITH  KEY vbel2 = lt_vbrp-aubel posn2 = lt_vbrp-aupos.
IF sy-subrc = 0.
  lt_vbrp-dmbtr1  = <lt_bseg_mov>-dmbtr.
ENDIF.

"运输费用=从合同履约成本科目(1410*)转到主营业务成本时 "取1410* 对方科目的S(和)-H(和) 的值
READ TABLE lt_bseg_mov2 ASSIGNING <lt_bseg_mov> WITH  KEY vbel2 = lt_vbrp-aubel posn2 = lt_vbrp-aupos.
IF sy-subrc = 0.
  lt_vbrp-dmbtr2  = <lt_bseg_mov>-dmbtr.
ENDIF.
  • 此处还未计算完成,需要计算完成后再计算主营业务成本

  • lt_vbrp-dmbtr3 = lt_vbrp-wavwr + lt_vbrp-dmbtr + lt_vbrp-dmbtr1 + lt_vbrp-dmbtr2."主营业务成本合计

  • lt_vbrp-dmbtr4 = lt_vbrp-netwr - lt_vbrp-dmbtr3 . "毛利

  • PERFORM put_sign_front USING lt_vbrp-dmbtr4 lt_vbrp-dmbtr4_str.

  • IF lt_vbrp-netwr <> 0.

  •  lt_vbrp-gross = lt_vbrp-dmbtr4 / lt_vbrp-netwr." 毛利率
    
  •  gross_mid = lt_vbrp-gross * 100.
    
  •  lt_vbrp-gross_str = gross_mid  &&  '%'.
    
  •  " lt_vbrp-gross = gross_str.
    
  • ENDIF.

  • READ TABLE lt_acdoca1_mov WITH KEY KDAUF = lt_vbrp-aubel KDPOS = lt_vbrp-aupos.

  • IF sy-subrc = 0.

  • IF lt_acdoca1_mov-wsl > 0 . "客户预收款:借方+贷方之后取贷方负数余额,如果借方+贷方余额在借方,则收款金额为零

  • lt_acdoca1_mov-wsl = 0.

  • ENDIF.

  • READ TABLE lt_acdoca2_mov WITH KEY KDAUF = lt_vbrp-aubel KDPOS = lt_vbrp-aupos.

  • IF sy-subrc = 0.

  • IF lt_acdoca2_mov-wsl > 0 . "客户收款:借方+贷方之后取贷方负数余额,如果借方+贷方余额在借方,则收款金额为零

  • lt_acdoca2_mov-wsl = 0.

  • ENDIF.
    
  • lt_vbrp-dmbtr6 = lt_acdoca1_mov-wsl + lt_vbrp-netwr1 - lt_acdoca2_mov-wsl ."已回收金额 = 客户预收款+ 合同金额-客户收款

  • ENDIF.

    READ TABLE lt_acdoca1_mov WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos.
    IF sy-subrc = 0.
    lt_vbrp-dmbtr6 = lt_acdoca1_mov-wsl."已回收金额
    PERFORM put_sign_front USING lt_vbrp-dmbtr6 lt_vbrp-dmbtr6_str.
    ENDIF.
    lt_vbrp-dmbtr7 = lt_vbrp-netwr1 - lt_vbrp-dmbtr6.
    PERFORM put_sign_front USING lt_vbrp-dmbtr7 lt_vbrp-dmbtr7_str.

  • READ TABLE lt_acdoca2_mov WITH KEY KDAUF = lt_vbrp-aubel KDPOS = lt_vbrp-aupos.

  • IF sy-subrc = 0.

  • IF lt_acdoca2_mov-wsl > 0 . "客户收款:借方+贷方之后取贷方负数余额,如果借方+贷方余额在借方,则收款金额为零

  • lt_acdoca2_mov-wsl = 0.

  • ENDIF.
    
  • lt_vbrp-dmbtr6 = lt_acdoca1_mov-wsl + lt_vbrp-netwr1 - lt_acdoca2_mov-wsl ."已回收金额 = 客户预收款+ 合同金额-客户收款

  • ENDIF.

  • ENDIF.

    "dmbtr6 "已回收金额

  • CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4

  •                                 OTHERS = 8.
    
  • IF lt_vbrp-NETWR <> 0.

  • lt_vbrp-gross = lt_vbrp-dmbtr4 / lt_vbrp-NETWR." 毛利率

  • ENDIF.

  • ENDCATCH.

  • IF sy-subrc <> 0. " 捕捉溢出

  • RETURN.
    
  • ENDIF.

    MODIFY lt_vbrp.
    ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_alv
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_alv .
PERFORM frm_set_alv_parameter.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = gs_layo
it_fieldcat_lvc = gt_fcat
TABLES
t_outtab = lt_vbrp[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.

  • Implement suitable error handling here
    ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form perbl_wtg
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
& <-- p2 text
&---------------------------------------------------------------------
FORM perbl_wtg .
*** 构建 WTG
与期间的关系
DATA wtg00(6) TYPE c.
DATA wtgx TYPE perbl VALUE 001.
DO 16 TIMES.

wtg00 = 'WTG' && wtgx ."lt_wtgfield-perbl.

lt_wtgfield-wtg00 = wtg00 .
lt_wtgfield-perbl = lt_wtgfield-perbl + 1.
IF sy-index > 12 .
  lt_wtgfield-perbl = 012.
ENDIF.
wtgx = wtgx + 1.
APPEND lt_wtgfield.

ENDDO.
ENDFORM.

&---------------------------------------------------------------------
*& Form get_data_wtg00
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM get_data_wtg00 .
*** 根据销售订单与行项目取数
IF lt_vbrp[] IS NOT INITIAL.

SELECT
  a~kdauf,
  a~kdpos,
  a~aufnr,
  b~lednr,
  b~objnr,
  b~gjahr,
  b~wrttp,
  b~versn,
  b~kstar,
  b~hrkft,
  b~vrgng,
  b~vbund,
  b~pargb,
  b~beknz,
  b~twaer,

" a~aufex,
" a~objnr,
" b~kstar,
b~wtg001,
b~wtg002,
b~wtg003,
b~wtg004,
b~wtg005,
b~wtg006,
b~wtg007,
b~wtg008,
b~wtg009,
b~wtg010,
b~wtg011,
b~wtg012,
b~wtg013,
b~wtg014,
b~wtg015,
b~wtg016,
c~zcpzt,"产品状态 生产阶段 发出商品阶段
c~zfylx"费用类型 原材料 人工工时等
FROM coas AS a
INNER JOIN cosp AS b
ON a~objnr = b~objnr AND b~wrttp = ‘04’
AND b~versn = ‘000’
AND b~beknz = ‘A’

  •  AND ( b~beknz = 'H' OR b~beknz = 'S')
    INNER JOIN ztco004 AS c
    ON c~saknr = b~kstar AND zcpzt = 'B'"IN ('','B' )" --------------- 缺少生成阶段待提供
    INTO TABLE @DATA(lt_cosp)
    FOR ALL ENTRIES IN @lt_vbrp
    WHERE a~kdauf = @lt_vbrp-aubel
    AND a~kdpos =  @lt_vbrp-aupos
    AND b~gjahr IN @s_jahr
    AND b~perbl IN @s_perbl.
    

**** 根据项目号

  • SELECT

  •  a~kdauf,
    
  •  a~kdpos,
    
  •   a~aufex, " 项目号
    
  •  a~objnr,
    
  • " b~kstar, "科目

  •   b~wtg001,
    
  •   b~wtg002,
    
  •   b~wtg003,
    
  •   b~wtg004,
    
  •   b~wtg005,
    
  •   b~wtg006,
    
  •   b~wtg007,
    
  •   b~wtg008,
    
  •   b~wtg009,
    
  •   b~wtg010,
    
  •   b~wtg011,
    
  •   b~wtg012,
    
  •   b~wtg013,
    
  •   b~wtg014,
    
  •   b~wtg015,
    
  •   b~wtg016,
    
  •  c~zcpzt,"产品状态 生产阶段 发出商品阶段
    
  •  c~zfylx"费用类型 原材料 人工工时等
    
  •  FROM coas AS a
    
  •  INNER JOIN cosp AS b
    
  •  ON a~objnr = b~objnr AND  b~wrttp = '04'
    
  •   AND b~versn = '000'  AND ( b~beknz = 'H' OR b~beknz = 'S')
    
  •  INNER JOIN ztco004 AS c
    
  •  ON c~saknr = b~kstar AND zcpzt = 'B' "IN ('A','B' )" --------------- 缺少生成阶段待提供 暂定A
    
  •  INTO CORRESPONDING FIELDS OF TABLE @lt_cosp2
    
  •  WHERE  b~gjahr IN @s_jahr.
    

    ENDIF.

    DELETE lt_wtgfield WHERE perbl NOT IN s_perbl.
    SORT lt_wtgfield BY perbl.

    DATA(table_num) = lines( lt_wtgfield ).
    DATA name_field1 TYPE c LENGTH 6.
    DATA num TYPE cosp-perbl.
    DATA(lt_cosp_b) = lt_cosp[].
    DATA lv_wtg LIKE cosp-wtg001.

  • delete lt_cosp_b WHERE zcpzt = ‘B’. "lt_cosp_b 发出商品阶段

  • delete lt_cosp WHERE zcpzt = ‘A’. "lt_cosp 生产商品阶段

    " 根据销售订单 行项目 产品状态 费用类型 纵向发出商品阶段汇总各个wtg
    LOOP AT lt_cosp_b ASSIGNING FIELD-SYMBOL(<lt_cosp_b>).
    CLEAR:lt_cosp_b_sum.
    MOVE-CORRESPONDING <lt_cosp_b> TO lt_cosp_b_sum.
    COLLECT lt_cosp_b_sum.
    ENDLOOP.

    READ TABLE lt_wtgfield INDEX 1.

    LOOP AT lt_cosp_b_sum.
    " 汇总横向比如 期间 010-012 则汇总wgt010*wgt011 *wgt012 wgt013 wgt014 wgt015 wgt016
    num = lt_wtgfield-perbl.

    DO table_num TIMES.

    name_field1 = 'WTG' && num.
    
    ASSIGN COMPONENT name_field1 OF STRUCTURE lt_cosp_b_sum  TO <fs>.
    
    lt_cosp_b_sum-wtgxx = lt_cosp_b_sum-wtgxx + <fs>.
    num = num + 1.
    

    ENDDO.

    MODIFY lt_cosp_b_sum.
    ENDLOOP.

  • LOOP AT lt_cosp2 ASSIGNING FIELD-SYMBOL(<lt_cosp2>)." 根据项目号 产品状态 费用类型 纵向发出商品阶段汇总各个wtg

  • COLLECT <lt_cosp2> INTO lt_cosp2_sum.

  • ENDLOOP.

  • LOOP AT lt_cosp2_sum.

  • " 汇总横向比如 期间 010-012 则汇总wgt010*wgt011 *wgt012 wgt013 wgt014 wgt015 wgt016

  • num = lt_wtgfield-perbl.

  • DO table_num TIMES.

  •  name_field1 = 'WTG' && num.
    
  •  ASSIGN COMPONENT name_field1 OF STRUCTURE lt_cosp2_sum  TO <fs>.
    
  •  lt_cosp2_sum-wtgxx = lt_cosp2_sum-wtgxx + <fs>.
    
  •  num = num + 1.
    
  • ENDDO.

  • ENDLOOP.

  • SORT lt_cosp2_sum BY aufex.
    SORT lt_cosp_b_sum BY kdauf kdpos.

LOOP AT lt_vbrp . " 组装数据
"zcpzt = ‘B’ 为发出商品阶段
READ TABLE lt_cosp INTO DATA(ls_cosp) WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos.
IF sy-subrc = 0.
lt_vbrp-aufnr = ls_cosp-aufnr.
ENDIF.
READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos zcpzt = ‘B’ zfylx = 01 BINARY SEARCH . " 原材料 根据销售订单
IF sy-subrc = 0.
lt_vbrp-wtg001 = lt_cosp_b_sum-wtgxx.
ENDIF.

  • READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘B’ zfylx = 01 BINARY SEARCH . " 原材料 根据项目号
  • IF sy-subrc = 0.
  •  IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx  . " 如果两者不一致,则以项目为准
    
  •    lt_vbrp-wtg001 = lt_cosp2_sum-wtgxx .
    
  •  ENDIF.
    
  • ENDIF.
READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel  kdpos = lt_vbrp-aupos zcpzt = 'B' zfylx = 02 BINARY SEARCH . " 人工工时(费用) 根据销售订单
IF sy-subrc = 0.
  lt_vbrp-wtg002 = lt_cosp_b_sum-wtgxx.
ENDIF.
  • READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘B’ zfylx = 02 BINARY SEARCH . " 人工工时(费用)根据项目号
  • IF sy-subrc = 0.
  •  IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx  . " 如果两者不一致,则以项目为准
    
  •    lt_vbrp-wtg002 = lt_cosp2_sum-wtgxx .
    
  •  ENDIF.
    
  • ENDIF.
READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel  kdpos = lt_vbrp-aupos zcpzt = 'B' zfylx = 03 BINARY SEARCH . " 机器工时(费用)) 根据销售订单
IF sy-subrc = 0.
  lt_vbrp-wtg003 = lt_cosp_b_sum-wtgxx.
ENDIF.
  • READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘B’ zfylx = 03 BINARY SEARCH . " 机器工时(费用)根据项目号
  • IF sy-subrc = 0.
  •  IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx  . " 如果两者不一致,则以项目为准
    
  •    lt_vbrp-wtg003 = lt_cosp2_sum-wtgxx .
    
  •  ENDIF.
    
  • ENDIF.
READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel  kdpos = lt_vbrp-aupos zcpzt = 'B' zfylx = 04 BINARY SEARCH . " 制造费用工时(费用) 根据销售订单
IF sy-subrc = 0.
  lt_vbrp-wtg004 = lt_cosp_b_sum-wtgxx.
ENDIF.
  • READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘B’ zfylx = 04 BINARY SEARCH . " 制造费用工时(费用)根据项目号
  • IF sy-subrc = 0.
  •  IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx  . " 如果两者不一致,则以项目为准
    
  •    lt_vbrp-wtg004 = lt_cosp2_sum-wtgxx .
    
  •  ENDIF.
    
  • ENDIF.
  • "zcpzt = ‘A’ 为生产商品阶段
  • READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos zcpzt = ‘A’ zfylx = 01 BINARY SEARCH . " 原材料 根据销售订单
  • IF sy-subrc = 0.
  •  lt_vbrp-wtg001 = lt_cosp_b_sum-wtgxx.
    
  • ENDIF.

** READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘A’ zfylx = 01 BINARY SEARCH . " 原材料 根据项目号
** IF sy-subrc = 0.
** IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx . " 如果两者不一致,则以项目为准
** lt_vbrp-wtg001 = lt_cosp2_sum-wtgxx .
** ENDIF.
** ENDIF.
*

  • READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos zcpzt = ‘A’ zfylx = 02 BINARY SEARCH . " 人工工时(费用) 根据销售订单
  • IF sy-subrc = 0.
  •  lt_vbrp-wtg002 = lt_cosp_b_sum-wtgxx.
    
  • ENDIF.

** READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘A’ zfylx = 02 BINARY SEARCH . " 人工工时(费用)根据项目号
** IF sy-subrc = 0.
** IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx . " 如果两者不一致,则以项目为准
** lt_vbrp-wtg002 = lt_cosp2_sum-wtgxx .
** ENDIF.
** ENDIF.
*

  • READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos zcpzt = ‘A’ zfylx = 03 BINARY SEARCH . " 机器工时(费用)) 根据销售订单
  • IF sy-subrc = 0.
  •  lt_vbrp-wtg003 = lt_cosp_b_sum-wtgxx.
    
  • ENDIF.

** READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘A’ zfylx = 03 BINARY SEARCH . " 机器工时(费用)根据项目号
** IF sy-subrc = 0.
** IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx . " 如果两者不一致,则以项目为准
** lt_vbrp-wtg003 = lt_cosp2_sum-wtgxx .
** ENDIF.
** ENDIF.
*

  • READ TABLE lt_cosp_b_sum WITH KEY kdauf = lt_vbrp-aubel kdpos = lt_vbrp-aupos zcpzt = ‘A’ zfylx = 04 BINARY SEARCH . " 制造费用工时(费用) 根据销售订单
  • IF sy-subrc = 0.
  •  lt_vbrp-wtg004 = lt_cosp_b_sum-wtgxx.
    
  • ENDIF.

** READ TABLE lt_cosp2_sum WITH KEY aufex = lt_vbrp-zprono zcpzt = ‘A’ zfylx = 04 BINARY SEARCH . " 制造费用工时(费用)根据项目号
** IF sy-subrc = 0.
** IF lt_cosp_b_sum-wtgxx <> lt_cosp2_sum-wtgxx . " 如果两者不一致,则以项目为准
** lt_vbrp-wtg004 = lt_cosp2_sum-wtgxx .
** ENDIF.
** ENDIF.
MODIFY lt_vbrp.
ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form get_data_tot
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM get_data_tot .
DATA fname(6) TYPE c.

*关系:T001k.BWKEY = T001W.BWKEY
*

  •    T001k.BUKRS = T001.BUKRS
    

**以下获取生产阶段数据
SELECT COUNT(
)
FROM t001 AS a
INNER JOIN t001k AS b ON a~bukrs = b~bukrs
INNER JOIN t001w AS c ON b~bwkey = c~bwkey
WHERE a~bukrs IN @s_bukrs AND c~werks IN @s_werks
.

IF sy-subrc = 0.
SELECT
COUNT(*)
FROM tck07
WHERE werks = ‘++++’ OR werks IN @s_werks .
ENDIF.

IF sy-subrc = 0.
SELECT
c~vbeln,
c~posnr,
m~jahrper,
SUM( m~tot ) AS tot,
t2~elemt
FROM ckmlhd AS c
INNER JOIN mldocccs_extract AS m ON m~kalnr = c~kalnr
INNER JOIN tckh3 AS t2 ON t2~elehk = ‘Z1’ AND m~element = t2~elemt
"FOR ALL ENTRIES IN @lt_vbrp WHERE vbeln = @lt_vbrp-aubel and posnr = @lt_vbrp-aupos
WHERE c~bwkey IN @s_werks AND m~elesmhk = ‘Z1’
AND c~matnr IN @s_matnr AND c~vbeln IN @s_aubel AND c~posnr IN @s_aupos
GROUP BY vbeln ,posnr ,m~jahrper, elemt
INTO TABLE @DATA(lt_totl) .

IF s_jahr IS NOT INITIAL.
  DELETE lt_totl WHERE jahrper(4) NOT IN s_jahr.
ENDIF.
IF s_perbl IS NOT INITIAL.
  DELETE lt_totl WHERE jahrper+4(3) NOT IN s_perbl.
ENDIF.
DATA: ls_totl LIKE LINE OF lt_totl,
      lt_tot  LIKE TABLE OF ls_totl.
LOOP AT lt_totl INTO ls_totl.
  CLEAR: ls_totl-jahrper.
  COLLECT ls_totl INTO lt_tot.
ENDLOOP.
SORT lt_tot BY vbeln posnr elemt.

ENDIF.

SELECT
a~elemt,
b~txele
FROM tckh3 AS a
INNER JOIN tckh1 AS b ON a~elehk = b~elehk AND a~elemt = b~elemt AND spras = @sy-langu
WHERE a~elehk = ‘Z1’
INTO TABLE @DATA(lt_tckh3).

SORT lt_tckh3 BY elemt.

**** 以下获取主营业务成本
**
**SELECT
** VBEL2,
** POSN2,
** DMBTR,
** "SUM( DMBTR ) as DMBTR,
** HKONT
** from bseg
** FOR ALL ENTRIES IN @lt_vbrp WHERE VBEL2 = @lt_vbrp-aubel and POSN2 = @lt_vbrp-aupos
** and HKONT LIKE ‘1406%’
** INTO TABLE @DATA(lt_bseg) .

LOOP AT lt_vbrp . "组装数据
LOOP AT lt_tckh3 ASSIGNING FIELD-SYMBOL(<lt_tckh3>) . " 计算生产阶段数据
fname = ‘TOT’ && sy-tabix.
READ TABLE lt_tot ASSIGNING FIELD-SYMBOL(<lt_tot>) WITH KEY vbeln = lt_vbrp-aubel posnr = lt_vbrp-aupos elemt = <lt_tckh3>-elemt BINARY SEARCH.
IF sy-subrc = 0.

    ASSIGN COMPONENT fname OF STRUCTURE lt_vbrp TO FIELD-SYMBOL(<lt_vbrp_fname>).
    IF sy-subrc = 0.
      <lt_vbrp_fname> = <lt_tot>-tot.
    ENDIF.
  ENDIF.

ENDLOOP.

MODIFY lt_vbrp.

ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_set_alv_parameter
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_set_alv_parameter .
DATA: ls_fcat TYPE lvc_s_fcat. "字段目录结构

DEFINE app_fcat.
CLEAR: ls_fcat.
ls_fcat-fieldname = &1. "字段名
ls_fcat-coltext = &2. "标题
ls_fcat-scrtext_s = &2. "短标签
ls_fcat-scrtext_m = &2. "中标签
ls_fcat-scrtext_l = &2. "长标签
ls_fcat-seltext = &2. "选择文本
ls_fcat-ref_table = &3. "参考表
ls_fcat-ref_field = &4. "参考字段
ls_fcat-cfieldname = &5. "金额单位字段
ls_fcat-qfieldname = &6. "数量单位字段
ls_fcat-outputlen = &7. "输出长度
IF ls_fcat-fieldname = ‘SEL’.
ls_fcat-checkbox = ‘X’.
ls_fcat-edit = ‘X’.
ENDIF.
APPEND ls_fcat TO gt_fcat.

END-OF-DEFINITION.

app_fcat ‘BUKRS’ ‘公司代码’ ‘’ ‘’ ‘’ ‘’ ‘10’.
app_fcat ‘BUTXT’ ‘公司代码描述’ ‘’ ‘’ ‘’ ‘’ ‘10’.
app_fcat ‘FKDAT_ANA’ ‘开票日期’ ‘’ ‘’ ‘’ ‘’ ‘10’.
app_fcat ‘AUBEL’ ‘销售凭证’ ‘VBAK’ ‘VBELN’ ‘’ ‘’ ‘10’.
app_fcat ‘AUPOS’ ‘销售凭证行项目’ ‘’ ‘’ ‘’ ‘’ ‘10’.
app_fcat ‘ZPRONO’ ‘项目号’ ‘’ ‘’ ‘’ ‘’ ‘10’.
app_fcat ‘KUNAG_ANA’ ‘售达方’ ‘KNA1’ ‘KUNNR’ ‘’ ‘’ ‘10’.
app_fcat ‘KUNRG_ANA’ ‘付款方’ ‘KNA1’ ‘KUNNR’ ‘’ ‘’ ‘10’.
app_fcat ‘KUNWE_ANA’ ‘送达方’ ‘KNA1’ ‘KUNNR’ ‘’ ‘’ ‘10’.
app_fcat ‘KUNRE_ANA’ ‘受票方’ ‘KNA1’ ‘KUNNR’ ‘’ ‘’ ‘10’.
app_fcat ‘MWSBP’ ‘税额’ ‘’ ‘’ ‘’ ‘’ ‘10’.
app_fcat ‘VBELN’ ‘开票凭证’ ‘VBRK’ ‘VBELN’ ‘’ ‘’ ‘10’.
app_fcat ‘POSNR’ ‘开票凭证项目’ ‘’ ‘’ ‘’ ‘’ ‘10’.

  •      APP_FCAT  'VGBEL'
    
  •      APP_FCAT  'VGPOS'
    
  •      APP_FCAT  'WERKS'
    

    app_fcat ‘NAME1’ ‘售达方描述’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZKUNAG’ ‘所属母公司’ ‘KNA1’ ‘KUNNR’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZKUNAG_NAME1’ ‘所属的母公司描述’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘MATKL’ ‘产品类别’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WGBEZ’ ‘产品类别描述’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘BKLAS’ ‘产品系列’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘BKBEZ’ ‘产品系列描述’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘MATNR’ ‘物料号’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘MAKTX’ ‘物料描述’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘NETWR’ ‘原账面确认收入’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘NETWR1’ ‘合同金额(含税)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT1’ ‘原材料’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT2’ ‘半成品’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT3’ ‘产成品’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT4’ ‘其他辅料’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT5’ ‘委外发出材料’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT6’ ‘委外加工费’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT7’ ‘委外-结转’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT8’ ‘生产阶段-人工工时(费用)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT9’ ‘生产阶段-机器工时(费用)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘TOT10’ ‘生产阶段-制造费用工时(费用)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘AUFNR’ ‘内部订单号’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WTG001’ ‘发出商品-原材料’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WTG002’ ‘发出商品-人工工时(费用)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WTG003’ ‘发出商品-机器工时(费用)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WTG004’ ‘发出商品-研发费用工时(费用)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WAVWR’ ‘主营业务成本(销售订单成本)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR’ ‘主营业务成本(销售订单后发出商品转主营业务成本)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR1’ ‘主营业务成本(发出商品内部订单结转到主营业务成本)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR2’ ‘运输费用’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR3’ ‘主营业务成本合计’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR4_STR’ ‘毛利’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘GROSS_STR’ ‘毛利率’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘BSTDK’ ‘合同日期’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘WADAT_IST’ ‘实际发货日期’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZWAPRD’ ‘质保期(月)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZDAY’ ‘验收周期(天)’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZSOURCE1’ ‘订单取得方式’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZSOURCE2’ ‘代理商名称’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZATTR1’ ‘应用领域’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘LAND1’ ‘地区’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR6_STR’ ‘已回款金额’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘DMBTR7_STR’ ‘未回款金额’ ‘’ ‘’ ‘’ ‘’ ‘10’.
    app_fcat ‘ZTERM’ ‘付款条件’ ‘’ ‘’ ‘’ ‘’ ‘10’.

    gs_layo-cwidth_opt = ‘X’. "Colwidth optimize
    gs_layo-zebra = ‘X’. "斑马线

ENDFORM.
&---------------------------------------------------------------------
*& Form put_sign_front
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM put_sign_front USING in_dmbtr TYPE dmbtr out_dmbtr TYPE string.

TABLES : bseg.
DATA : e_dmbtr TYPE string.
e_dmbtr = in_dmbtr.
CALL FUNCTION ‘CLOI_PUT_SIGN_IN_FRONT’
CHANGING
value = e_dmbtr.
out_dmbtr = e_dmbtr.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_deal_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_deal_data .
LOOP AT lt_vbrp.

lt_vbrp-dmbtr3 = "lt_vbrp-wtg001 + lt_vbrp-wtg002 + lt_vbrp-wtg003 + lt_vbrp-wtg004 +
                 lt_vbrp-wavwr + lt_vbrp-dmbtr + lt_vbrp-dmbtr1 + lt_vbrp-dmbtr2."主营业务成本合计
lt_vbrp-dmbtr4 = lt_vbrp-netwr - lt_vbrp-dmbtr3 . "毛利
PERFORM put_sign_front USING lt_vbrp-dmbtr4 lt_vbrp-dmbtr4_str.
IF lt_vbrp-netwr <> 0.
  lt_vbrp-gross = lt_vbrp-dmbtr4 / lt_vbrp-netwr." 毛利率
  gross_mid = lt_vbrp-gross * 100.
  lt_vbrp-gross_str = gross_mid  &&  '%'.
  " lt_vbrp-gross = gross_str.
ENDIF.

lt_vbrp-zday = lt_vbrp-fkdat_ana - lt_vbrp-wadat_ist."验收周期(天)=开票日期-实际发货日期

MODIFY lt_vbrp.

ENDLOOP.

ENDFORM.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值