ABAP-成本报表案例

   1 ********************************************************************
   2 * 事务代码:                                                        *
   3 * 程序名称:ZCOR_013                                                *
   4 * 程序目的:生产成本明细表                                       *
   5 * 使用变式:                                                        *
   6 * 设 计 人:DONGDONG                                                 *
   7 *(修改日志)-------------------------------------------------------- *
   8 * 日志号   修改人     修改时间     修改说明              传输号码     *
   9 *  ----    ------    ------    -----------           -----------
  10 *  001     DONGDONG    20210224     新建                DEVK906724
  11 ********************************************************************
  12 REPORT zcor_013.
  13 ************************************************************************
  14 * TABLES
  15 ************************************************************************
  16 TABLES: mara,mseg,zv_dd_line.
  17 TABLES: sscrfields.
  18 TYPE-POOLS: slis,vrm. "声明类型池,使slis_t_specialcol_alv所在的包被包含进来
  19 ************************************************************************
  20 * 类型定义
  21 ************************************************************************
  22 TYPES: BEGIN OF ty_alv,
  23          bukrs      TYPE mseg-bukrs, "公司
  24          werks      TYPE mseg-werks, "工厂
  25          budat_mkpf TYPE mseg-budat_mkpf, "过账日期
  26          "bwart      TYPE mseg-bwart, "移动类型
  27          matnr      TYPE mseg-matnr, "物料
  28          groes      TYPE mara-groes, "物料的大小量纲
  29          maktx      TYPE makt-maktx, "物料描述
  30          mtart      TYPE mara-mtart, "物料类型
  31          shkzg      TYPE mseg-shkzg, "借贷标识
  32          mblnr      TYPE mseg-mblnr, "物料凭证
  33          mjahr      TYPE mseg-mjahr, "物料凭证年度
  34          zeile      TYPE mseg-zeile, "物料凭证行
  35          smbln      TYPE mseg-smbln, "被冲销凭证
  36          sjahr      TYPE mseg-sjahr, "被冲销凭证年度
  37          smblp      TYPE mseg-smblp, "被冲销凭证行
  38          aufnr      TYPE mseg-aufnr, "生产订单号
  39          kostl      TYPE mseg-kostl, "成本中心
  40          verid_nd   TYPE zv_dd_line-verid_nd, "生产版本
  41          text1      TYPE zv_dd_line-text1, "生产版本描述
  42          dmbtr      TYPE mseg-dmbtr, "金额
  43          waers      TYPE mseg-waers, "货币单位
  44          menge      TYPE mseg-menge, "库存单位数量
  45          meins      TYPE mseg-meins, "库存单位
  46 
  47        END OF ty_alv.
  48 
  49 TYPES: BEGIN OF ty_show,
  50          bukrs      TYPE mseg-bukrs, "公司
  51          werks      TYPE mseg-werks, "工厂
  52          budat_mkpf TYPE mseg-budat_mkpf, "过账日期
  53          matnr      TYPE mseg-matnr, "物料
  54          groes      TYPE mara-groes, "物料的大小量纲
  55          maktx      TYPE makt-maktx, "物料描述
  56          mtart      TYPE mara-mtart, "物料类型
  57          aufnr      TYPE mseg-aufnr, "生产订单号
  58          kostl      TYPE mseg-kostl, "成本中心
  59          verid_nd   TYPE zv_dd_line-verid_nd, "生产版本
  60          text1      TYPE zv_dd_line-text1, "生产版本描述
  61          dmbtr      TYPE mseg-dmbtr, "金额
  62          waers      TYPE mseg-waers, "货币单位
  63          menge      TYPE mseg-menge, "库存单位数量
  64          meins      TYPE mseg-meins, "库存单位
  65 
  66        END OF ty_show.
  67 
  68 TYPES: BEGIN OF ty_final,
  69          bukrs    TYPE mseg-bukrs, "公司
  70          werks    TYPE mseg-werks, "工厂
  71          year     TYPE gjahr,
  72          month    TYPE co_perio, "会计期间
  73          "budat_mkpf TYPE mseg-budat_mkpf, "过账日期
  74          matnr    TYPE mseg-matnr, "物料
  75          groes    TYPE mara-groes, "物料的大小量纲
  76          width    TYPE mara-groes, "厚度
  77          maktx    TYPE makt-maktx, "物料描述
  78          "mtart      TYPE mara-mtart, "物料类型
  79          aufnr    TYPE mseg-aufnr, "生产订单号
  80          kostl    TYPE mseg-kostl, "成本中心
  81          verid_nd TYPE zv_dd_line-verid_nd, "生产版本
  82          text1    TYPE zv_dd_line-text1, "生产版本描述
  83          dmbtr    TYPE mseg-dmbtr, "金额
  84          waers    TYPE mseg-waers, "货币单位
  85          menge    TYPE mseg-menge, "库存单位数量
  86          meins    TYPE mseg-meins, "库存单位
  87          menge_zx TYPE p DECIMALS 4, "重箱
  88 
  89          yl001mg  TYPE mseg-menge, "原料1数量
  90          yl001ms  TYPE mseg-meins, "原料1数量单位
  91          yl001dr  TYPE mseg-dmbtr, "原料1金额
  92          yl001ws  TYPE mseg-waers, "原料1金额单位
  93 
  94          yl002mg  TYPE mseg-menge, "原料1数量
  95          yl002ms  TYPE mseg-meins, "原料1数量单位
  96          yl002dr  TYPE mseg-dmbtr, "原料1金额
  97          yl002ws  TYPE mseg-waers, "原料1金额单位
  98 
  99          yl003mg  TYPE mseg-menge, "原料1数量
 100          yl003ms  TYPE mseg-meins, "原料1数量单位
 101          yl003dr  TYPE mseg-dmbtr, "原料1金额
 102          yl003ws  TYPE mseg-waers, "原料1金额单位
 103 
 104          yl004mg  TYPE mseg-menge, "原料1数量
 105          yl004ms  TYPE mseg-meins, "原料1数量单位
 106          yl004dr  TYPE mseg-dmbtr, "原料1金额
 107          yl004ws  TYPE mseg-waers, "原料1金额单位
 108 
 109          yl005mg  TYPE mseg-menge, "原料1数量
 110          yl005ms  TYPE mseg-meins, "原料1数量单位
 111          yl005dr  TYPE mseg-dmbtr, "原料1金额
 112          yl005ws  TYPE mseg-waers, "原料1金额单位
 113 
 114          yl006mg  TYPE mseg-menge, "原料1数量
 115          yl006ms  TYPE mseg-meins, "原料1数量单位
 116          yl006dr  TYPE mseg-dmbtr, "原料1金额
 117          yl006ws  TYPE mseg-waers, "原料1金额单位
 118 
 119          yl007mg  TYPE mseg-menge, "原料1数量
 120          yl007ms  TYPE mseg-meins, "原料1数量单位
 121          yl007dr  TYPE mseg-dmbtr, "原料1金额
 122          yl007ws  TYPE mseg-waers, "原料1金额单位
 123 
 124          yl008mg  TYPE mseg-menge, "原料1数量
 125          yl008ms  TYPE mseg-meins, "原料1数量单位
 126          yl008dr  TYPE mseg-dmbtr, "原料1金额
 127          yl008ws  TYPE mseg-waers, "原料1金额单位
 128 
 129          yl009mg  TYPE mseg-menge, "原料1数量
 130          yl009ms  TYPE mseg-meins, "原料1数量单位
 131          yl009dr  TYPE mseg-dmbtr, "原料1金额
 132          yl009ws  TYPE mseg-waers, "原料1金额单位
 133 
 134          yl010mg  TYPE mseg-menge, "原料1数量
 135          yl010ms  TYPE mseg-meins, "原料1数量单位
 136          yl010dr  TYPE mseg-dmbtr, "原料1金额
 137          yl010ws  TYPE mseg-waers, "原料1金额单位
 138 
 139          rl001mg  TYPE mseg-menge, "燃料1数量
 140          rl001ms  TYPE mseg-meins, "燃料1数量单位
 141          rl001dr  TYPE mseg-dmbtr, "燃料1金额
 142          rl001ws  TYPE mseg-waers, "燃料1金额单位
 143 
 144          rl002mg  TYPE mseg-menge, "燃料1数量
 145          rl002ms  TYPE mseg-meins, "燃料1数量单位
 146          rl002dr  TYPE mseg-dmbtr, "燃料1金额
 147          rl002ws  TYPE mseg-waers, "燃料1金额单位
 148 
 149          rl003mg  TYPE mseg-menge, "燃料1数量
 150          rl003ms  TYPE mseg-meins, "燃料1数量单位
 151          rl003dr  TYPE mseg-dmbtr, "燃料1金额
 152          rl003ws  TYPE mseg-waers, "燃料1金额单位
 153 
 154          rl004mg  TYPE mseg-menge, "燃料1数量
 155          rl004ms  TYPE mseg-meins, "燃料1数量单位
 156          rl004dr  TYPE mseg-dmbtr, "燃料1金额
 157          rl004ws  TYPE mseg-waers, "燃料1金额单位
 158 
 159          cb001mg  TYPE mseg-menge, "成本要素1数量
 160          cb001ms  TYPE mseg-meins, "成本要素1数量单位
 161          cb001dr  TYPE mseg-dmbtr, "成本要素1金额
 162          cb001ws  TYPE mseg-waers, "成本要素1金额单位
 163 
 164          cb002mg  TYPE mseg-menge, "成本要素1数量
 165          cb002ms  TYPE mseg-meins, "成本要素1数量单位
 166          cb002dr  TYPE mseg-dmbtr, "成本要素1金额
 167          cb002ws  TYPE mseg-waers, "成本要素1金额单位
 168 
 169          cb003mg  TYPE mseg-menge, "成本要素1数量
 170          cb003ms  TYPE mseg-meins, "成本要素1数量单位
 171          cb003dr  TYPE mseg-dmbtr, "成本要素1金额
 172          cb003ws  TYPE mseg-waers, "成本要素1金额单位
 173 
 174          cb004mg  TYPE mseg-menge, "成本要素1数量
 175          cb004ms  TYPE mseg-meins, "成本要素1数量单位
 176          cb004dr  TYPE mseg-dmbtr, "成本要素1金额
 177          cb004ws  TYPE mseg-waers, "成本要素1金额单位
 178 
 179          cb005mg  TYPE mseg-menge, "成本要素1数量
 180          cb005ms  TYPE mseg-meins, "成本要素1数量单位
 181          cb005dr  TYPE mseg-dmbtr, "成本要素1金额
 182          cb005ws  TYPE mseg-waers, "成本要素1金额单位
 183 
 184          cb006mg  TYPE mseg-menge, "成本要素1数量
 185          cb006ms  TYPE mseg-meins, "成本要素1数量单位
 186          cb006dr  TYPE mseg-dmbtr, "成本要素1金额
 187          cb006ws  TYPE mseg-waers, "成本要素1金额单位
 188 
 189          cb007mg  TYPE mseg-menge, "成本要素1数量
 190          cb007ms  TYPE mseg-meins, "成本要素1数量单位
 191          cb007dr  TYPE mseg-dmbtr, "成本要素1金额
 192          cb007ws  TYPE mseg-waers, "成本要素1金额单位
 193 
 194          cb008mg  TYPE mseg-menge, "成本要素1数量
 195          cb008ms  TYPE mseg-meins, "成本要素1数量单位
 196          cb008dr  TYPE mseg-dmbtr, "成本要素1金额
 197          cb008ws  TYPE mseg-waers, "成本要素1金额单位
 198 
 199          cb009mg  TYPE mseg-menge, "成本要素1数量
 200          cb009ms  TYPE mseg-meins, "成本要素1数量单位
 201          cb009dr  TYPE mseg-dmbtr, "成本要素1金额
 202          cb009ws  TYPE mseg-waers, "成本要素1金额单位
 203 
 204          cb010mg  TYPE mseg-menge, "成本要素1数量
 205          cb010ms  TYPE mseg-meins, "成本要素1数量单位
 206          cb010dr  TYPE mseg-dmbtr, "成本要素1金额
 207          cb010ws  TYPE mseg-waers, "成本要素1金额单位
 208 
 209          cb011mg  TYPE mseg-menge, "成本要素1数量
 210          cb011ms  TYPE mseg-meins, "成本要素1数量单位
 211          cb011dr  TYPE mseg-dmbtr, "成本要素1金额
 212          cb011ws  TYPE mseg-waers, "成本要素1金额单位
 213 
 214          cb012mg  TYPE mseg-menge, "成本要素1数量
 215          cb012ms  TYPE mseg-meins, "成本要素1数量单位
 216          cb012dr  TYPE mseg-dmbtr, "成本要素1金额
 217          cb012ws  TYPE mseg-waers, "成本要素1金额单位
 218 
 219          cb013mg  TYPE mseg-menge, "成本要素1数量
 220          cb013ms  TYPE mseg-meins, "成本要素1数量单位
 221          cb013dr  TYPE mseg-dmbtr, "成本要素1金额
 222          cb013ws  TYPE mseg-waers, "成本要素1金额单位
 223 
 224          cb014mg  TYPE mseg-menge, "成本要素1数量
 225          cb014ms  TYPE mseg-meins, "成本要素1数量单位
 226          cb014dr  TYPE mseg-dmbtr, "成本要素1金额
 227          cb014ws  TYPE mseg-waers, "成本要素1金额单位
 228 
 229          cb015mg  TYPE mseg-menge, "成本要素1数量
 230          cb015ms  TYPE mseg-meins, "成本要素1数量单位
 231          cb015dr  TYPE mseg-dmbtr, "成本要素1金额
 232          cb015ws  TYPE mseg-waers, "成本要素1金额单位
 233 
 234        END OF ty_final.
 235 
 236 
 237 TYPES:BEGIN OF ty_all,
 238         budat_mkpf TYPE mseg-budat_mkpf. "过账日期
 239     INCLUDE TYPE ty_final.
 240 TYPES:END OF ty_all.
 241 
 242 
 243 TYPES: BEGIN OF ty_cp,
 244          bukrs      TYPE mseg-bukrs, "公司
 245          werks      TYPE mseg-werks, "工厂
 246          budat_mkpf TYPE mseg-budat_mkpf, "过账日期
 247          kostl      TYPE mseg-kostl, "成本中心
 248          menge      TYPE mseg-menge, "库存单位数量
 249          meins      TYPE mseg-meins, "库存单位
 250 
 251        END OF ty_cp.
 252 
 253 TYPES:BEGIN OF ty_cb_sum,
 254         bukrs  TYPE coep-bukrs, "公司
 255         "werks  TYPE coep-werks, "工厂
 256         aufnr  TYPE coep-aufnr, "订单
 257         matnr  TYPE coep-matnr, "物料
 258         gkoar  TYPE coep-gkoar, "冲销科目类型()
 259         gjahr  TYPE coep-gjahr, "财年
 260         perio  TYPE coep-perio, "期间
 261         wtgbtr TYPE coep-wtgbtr, "业务货币值
 262         twaer  TYPE coep-twaer, "交易货币
 263         megbtr TYPE coep-megbtr, "总计数量
 264         meinh  TYPE coep-meinh, "计量单位
 265         kstar  TYPE coep-kstar, "成本要素
 266         paccas TYPE coep-paccas, "合作伙伴科目分配
 267       END OF ty_cb_sum."成本要素结构
 268 
 269 TYPES:BEGIN OF ty_cb,
 270         belnr TYPE coep-belnr, "凭证编号
 271         buzei TYPE coep-buzei. "过账行
 272     INCLUDE TYPE: ty_cb_sum.
 273 
 274 TYPES:END OF ty_cb.
 275 
 276 ************************************************************************
 277 * 内表&工作区声明
 278 ************************************************************************
 279 DATA: gt_alv   TYPE TABLE OF ty_alv, "原料和成品的投入产出
 280       gt_alv1  TYPE TABLE OF ty_alv, "燃料的消耗
 281       gs_alv   TYPE ty_alv,
 282       gt_show  TYPE TABLE OF ty_show,
 283       gt_show1 TYPE TABLE OF ty_show,
 284       gs_show  TYPE ty_show.
 285 
 286 DATA: gt_cp TYPE TABLE OF ty_cp,
 287       gs_cp TYPE ty_cp.
 288 
 289 DATA: gt_all TYPE TABLE OF ty_all,
 290       gs_all TYPE ty_all.
 291 
 292 DATA: gt_cb     TYPE TABLE OF ty_cb,
 293       gs_cb     TYPE ty_cb,
 294       gt_cb_sum TYPE TABLE OF ty_cb_sum,
 295       gs_cb_sum TYPE ty_cb_sum.
 296 
 297 DATA: gt_final TYPE TABLE OF ty_final,
 298       gs_final TYPE ty_final.
 299 
 300 DATA: hs_show TYPE HASHED TABLE OF ty_show WITH UNIQUE KEY bukrs werks budat_mkpf kostl  mtart matnr groes maktx aufnr verid_nd text1 waers meins
 301                                            WITH HEADER LINE.
 302 DATA: hs_show1 TYPE HASHED TABLE OF ty_show WITH UNIQUE KEY bukrs werks budat_mkpf kostl  mtart matnr groes maktx  aufnr verid_nd text1 waers meins
 303                                            WITH HEADER LINE.
 304 DATA: hs_cp TYPE HASHED TABLE OF ty_cp WITH UNIQUE KEY bukrs werks budat_mkpf kostl  meins
 305                                            WITH HEADER LINE.
 306 DATA: hs_cb TYPE HASHED TABLE OF ty_cb_sum WITH UNIQUE KEY bukrs  aufnr matnr gkoar gjahr perio  twaer meinh kstar paccas "belnr buzei
 307                                            WITH HEADER LINE.
 308 DATA:hs_final TYPE HASHED TABLE OF ty_final WITH UNIQUE KEY bukrs werks year month  kostl  matnr groes
 309                                                             width maktx  aufnr verid_nd text1 waers meins
 310                                                             yl001ms yl001ws yl002ms yl002ws yl003ms yl003ws
 311                                                             yl004ms yl004ws yl005ms yl005ws yl006ms yl006ws
 312                                                             yl007ms yl007ws yl008ms yl008ws yl009ms yl009ws
 313                                                             yl010ms yl010ws rl001ms rl001ws rl002ms rl002ws
 314                                                             rl003ms rl003ws rl004ms rl004ws
 315                                                             cb001ms cb001ws cb002ms cb002ws cb003ms cb003ws
 316                                                             cb004ms cb004ws cb005ms cb005ws cb006ms cb006ws
 317                                                             cb007ms cb007ws cb008ms cb008ws cb009ms cb009ws
 318                                                             cb010ms cb010ws cb011ms cb011ws cb012ms cb012ws
 319                                                             cb013ms cb013ws cb014ms cb014ws cb015ms cb015ws
 320 
 321                                                             WITH HEADER LINE.
 322 
 323 DATA: gs_variant TYPE disvariant.
 324 
 325 *&---定义ALV显示的字段列及其描述等属性
 326 DATA: gt_fcat   TYPE lvc_t_fcat,
 327       gs_fcat   TYPE lvc_s_fcat,
 328       gt_fcat_d TYPE lvc_t_fcat,
 329       gs_fcat_d TYPE lvc_s_fcat,
 330       gs_layout TYPE lvc_s_layo.
 331 DATA: gs_grid_settings TYPE lvc_s_glay.
 332 DATA: gt_raw_data TYPE truxs_t_text_data.
 333 
 334 
 335 ************************************************************************
 336 * 全局变量声明
 337 ************************************************************************
 338 DATA:yl001 TYPE matnr VALUE '000000101201000001', "高铁石英砂
 339      yl002 TYPE matnr VALUE '000000101201000002', "低铁石英砂
 340      yl003 TYPE matnr VALUE '000000101301000001', " 石灰石
 341      yl004 TYPE matnr VALUE '000000101401000001', "
 342      yl005 TYPE matnr VALUE '000000101501000001', "元明粉
 343      yl006 TYPE matnr VALUE '000000101601000001', "高铁白云
 344      yl007 TYPE matnr VALUE '000000101601000002', "低铁白云
 345      yl008 TYPE matnr VALUE '000000101701000001', "长石
 346      yl009 TYPE matnr VALUE '000000101801000001', " 外购碎玻璃
 347      yl010 TYPE matnr VALUE '000000101901000001', " 外购煤粉
 348      rl001 TYPE matnr VALUE '000000110501000080', "调和油
 349      rl002 TYPE matnr VALUE '000000140101000004', "石油沥青
 350      rl003 TYPE matnr VALUE '000000140102000001', "天然气
 351      rl004 TYPE matnr VALUE '000000140103000001'. "块煤
 352 ************************************************************************
 353 * 宏声明
 354 ************************************************************************
 355 DATA:lv_txt TYPE maktx.
 356 DEFINE   m_fill_fieldcat.
 357   CLEAR gs_fcat.
 358   gs_fcat-fieldname  = &1.
 359   gs_fcat-coltext    = &2.
 360   gs_fcat-no_zero    = &3.
 361   gs_fcat-outputlen  = &4.
 362   gs_fcat-key        = &5.
 363   gs_fcat-fix_column = &6.
 364   gs_fcat-edit       = &7.
 365 
 366   CLEAR:lv_txt.
 367   SELECT SINGLE maktx
 368         INTO lv_txt
 369         FROM makt
 370         WHERE matnr = gs_fcat-coltext
 371         AND  spras  = sy-langu.
 372 
 373   CASE  gs_fcat-fieldname+5(2).
 374     WHEN 'MG'.
 375       gs_fcat-coltext = lv_txt && '(数量)'.
 376     WHEN 'MS'.
 377       gs_fcat-coltext = lv_txt && '(数量单位)'.
 378     WHEN 'DR'.
 379       gs_fcat-coltext = lv_txt && '(金额)'.
 380     WHEN 'WS'.
 381       gs_fcat-coltext = lv_txt && '(金额单位)'.
 382     WHEN OTHERS.
 383   ENDCASE.
 384   IF gs_fcat-fieldname+0(2) EQ 'CB' AND lv_txt IS NOT INITIAL.
 385        gs_fcat-coltext = '成本要素-' &&  gs_fcat-coltext.
 386   ELSEIF gs_fcat-fieldname+0(2) EQ 'CB' AND lv_txt IS INITIAL..
 387     gs_fcat-coltext    = &2 && gs_fcat-coltext.
 388   ENDIF.
 389   APPEND gs_fcat TO gt_fcat.
 390 END-OF-DEFINITION.
 391 ************************************************************************
 392 * 选择屏幕参数
 393 ************************************************************************
 394 SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
 395 
 396 PARAMETERS: p_werks TYPE marc-werks OBLIGATORY DEFAULT '1000',
 397             p_gjahr TYPE mseg-gjahr OBLIGATORY DEFAULT sy-datum+0(4),
 398             p_monat TYPE bkpf-monat OBLIGATORY DEFAULT sy-datum+4(2).
 399 
 400 SELECT-OPTIONS: s_mat FOR zv_dd_line-matnr.
 401 SELECTION-SCREEN END OF BLOCK bk1.
 402 
 403 SELECTION-SCREEN BEGIN OF BLOCK list WITH FRAME TITLE TEXT-002.
 404 PARAMETERS: pa_bwber LIKE rfpdo3-allgbwbe NO-DISPLAY.
 405 PARAMETERS: pa_vari TYPE slis_vari,
 406             pa_nmax LIKE itemset-nmax.
 407 SELECTION-SCREEN END OF BLOCK list.
 408 *... end of selection screen layout.
 409 ************************************************************************
 410 *& 初始化处理
 411 ************************************************************************
 412 INITIALIZATION.
 413 *&---------------------------------------------------------------------*
 414 *& at selection-screen output/选择屏幕前                                *
 415 *&---------------------------------------------------------------------*
 416 AT SELECTION-SCREEN OUTPUT.
 417 ************************************************************************
 418 *& 选择屏幕控制
 419 ************************************************************************
 420 AT SELECTION-SCREEN.
 421 
 422 AT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_vari.
 423   PERFORM alv_variant_f4 CHANGING pa_vari.
 424 ************************************************************************
 425 * EVENT START OF SELECTION
 426 ************************************************************************
 427 START-OF-SELECTION.
 428   PERFORM frm_get_data.
 429 ************************************************************************
 430 *EVENT END OF SELECTION
 431 ************************************************************************
 432 END-OF-SELECTION.
 433   PERFORM frm_create_fieldcat.
 434   PERFORM frm_layout_init.
 435   PERFORM frm_display_alv.
 436 *&---------------------------------------------------------------------*
 437 *& Form FRM_GET_DATA
 438 *&---------------------------------------------------------------------*
 439 *& text
 440 *&---------------------------------------------------------------------*
 441 *& -->  p1        text
 442 *& <--  p2        text
 443 *&---------------------------------------------------------------------*
 444 FORM frm_get_data .
 445   DATA: lr_budat TYPE RANGE OF budat WITH HEADER LINE.
 446 
 447   DATA: lv_jahrper TYPE mldoc-jahrper,
 448         lv_poper   TYPE ckmlprkeph-poper.
 449 
 450   DATA: lt_data TYPE TABLE OF ty_alv,
 451         ls_data TYPE ty_alv.
 452 
 453   DATA:lv_groes_1 TYPE mara-groes, "
 454        lv_groes_2 TYPE mara-groes, "
 455        lv_groes_3 TYPE mara-groes. "
 456 
 457   DATA:lv_rc    TYPE sy-subrc,
 458        lv_coeff TYPE bstmg.
 459 
 460   CLEAR lr_budat.
 461   lr_budat-sign = 'I'.
 462   lr_budat-option = 'BT'.
 463   lr_budat-low = p_gjahr && p_monat && '01'.
 464   CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'            "获取当前月的最后一天
 465     EXPORTING
 466       i_date = lr_budat-low
 467     IMPORTING
 468       e_date = lr_budat-high.
 469   APPEND lr_budat.
 470 
 471   REFRESH gt_alv.
 472 
 473 **第一步取出成品入库和原料投料信息
 474   SELECT
 475     a~bukrs
 476     a~werks
 477     a~budat_mkpf
 478     "a~bwart
 479     a~matnr
 480     c~groes
 481     d~maktx
 482     c~mtart
 483     a~shkzg
 484     a~mblnr
 485     a~mjahr
 486     a~zeile
 487     a~smbln
 488     a~sjahr
 489     a~smblp
 490     a~aufnr
 491     a~kostl
 492     b~verid_nd
 493     b~text1
 494     a~dmbtr
 495     a~waers
 496     a~menge
 497     a~meins
 498   INTO CORRESPONDING FIELDS OF TABLE gt_alv
 499   FROM mseg AS a
 500   INNER JOIN zv_dd_line AS b
 501   ON a~aufnr = b~aufnr
 502   INNER JOIN mara AS c
 503   ON a~matnr = c~matnr
 504   INNER JOIN makt AS d
 505   ON c~matnr = d~matnr
 506   WHERE a~werks EQ p_werks
 507   AND   a~gjahr EQ p_gjahr
 508   AND   a~budat_mkpf IN lr_budat
 509   AND   b~matnr IN s_mat
 510   AND   d~spras = sy-langu.
 511 
 512 **取成本中心与生产版本对应关系
 513   SELECT
 514     *
 515    INTO TABLE @DATA(lt_co007)
 516    FROM ztco10007_1.
 517   SORT lt_co007 BY verid kostl.
 518 
 519   SORT gt_alv BY mjahr mblnr zeile.
 520 
 521   LOOP AT gt_alv INTO gs_alv.
 522     IF gs_alv-smbln IS NOT INITIAL."将冲销物料凭证和被冲销物料凭证过滤掉
 523       READ TABLE gt_alv INTO DATA(ls_alv) WITH KEY mjahr = gs_alv-sjahr
 524                                                        mblnr = gs_alv-smbln
 525                                                        zeile = gs_alv-smblp BINARY SEARCH.
 526       IF sy-subrc EQ 0.
 527         DELETE TABLE gt_alv FROM ls_alv.
 528         DELETE TABLE gt_alv FROM gs_alv.
 529         CONTINUE.
 530       ENDIF.
 531     ELSE."给每一行赋值对应成本中心
 532       READ TABLE lt_co007 INTO DATA(lv_co007) WITH KEY verid = gs_alv-verid_nd BINARY SEARCH.
 533       "kostl+9(1) = gs_alv-verid_nd+3(1).
 534       IF sy-subrc EQ 0.
 535         gs_alv-kostl = lv_co007-kostl.
 536       ENDIF.
 537 
 538       IF gs_alv-shkzg EQ 'H'.
 539         gs_alv-menge = gs_alv-menge * -1.
 540         gs_alv-dmbtr = gs_alv-dmbtr * -1.
 541       ENDIF.
 542     ENDIF.
 543     MODIFY gt_alv FROM gs_alv.
 544   ENDLOOP.
 545 
 546 **第二步取出燃料每日的消耗量
 547   IF gt_alv IS NOT INITIAL.
 548     SELECT
 549     a~bukrs
 550     a~werks
 551     a~budat_mkpf
 552     "a~bwart
 553     a~matnr
 554     c~mtart
 555     a~shkzg
 556     a~mblnr
 557     a~mjahr
 558     a~zeile
 559     a~smbln
 560     a~sjahr
 561     a~smblp
 562     a~aufnr
 563     a~kostl
 564     b~verid AS verid_nd
 565 
 566     a~dmbtr
 567     a~waers
 568     a~menge
 569     a~meins
 570   INTO CORRESPONDING FIELDS OF TABLE gt_alv1
 571   FROM mseg AS a
 572   INNER JOIN mara AS c
 573   ON a~matnr = c~matnr
 574   INNER JOIN ztco10007 AS b
 575   ON a~kostl = b~kostl
 576   FOR ALL ENTRIES IN gt_alv
 577   WHERE a~budat_mkpf IN lr_budat
 578    AND  a~matnr IN ( rl001,rl002,rl003,rl004  )
 579    AND  a~werks EQ p_werks
 580   AND   a~gjahr EQ p_gjahr
 581   AND   a~kostl = gt_alv-kostl
 582    .
 583 
 584     SORT gt_alv1 BY mjahr mblnr zeile.
 585     CLEAR:gs_alv,ls_alv.
 586     LOOP AT gt_alv1 INTO gs_alv.
 587       IF gs_alv-smbln IS NOT INITIAL."将冲销物料凭证和被冲销物料凭证过滤掉
 588         READ TABLE gt_alv1 INTO ls_alv WITH KEY mjahr = gs_alv-sjahr
 589                                                          mblnr = gs_alv-smbln
 590                                                          zeile = gs_alv-smblp BINARY SEARCH.
 591         IF sy-subrc EQ 0.
 592           DELETE TABLE gt_alv1 FROM ls_alv.
 593           DELETE TABLE gt_alv1 FROM gs_alv.
 594           CONTINUE.
 595         ENDIF.
 596       ENDIF.
 597       IF gs_alv-shkzg EQ 'H'.
 598         gs_alv-menge = gs_alv-menge * -1.
 599         gs_alv-dmbtr = gs_alv-dmbtr * -1.
 600       ENDIF.
 601 
 602       MODIFY gt_alv1 FROM gs_alv.
 603     ENDLOOP.
 604 
 605 
 606   ENDIF.
 607 
 608 **按相应条件进行金额和数量汇总
 609   MOVE-CORRESPONDING gt_alv TO gt_show."原料和成品数据
 610   MOVE-CORRESPONDING gt_alv1 TO gt_show1."燃料消耗数据
 611   SORT gt_show BY bukrs werks aufnr budat_mkpf  kostl  mtart matnr   verid_nd .
 612   SORT gt_show1 BY bukrs werks aufnr budat_mkpf kostl mtart matnr   verid_nd  .
 613 
 614 **汇总原料和成品的金额和数量
 615   CLEAR gs_show.
 616   LOOP AT gt_show INTO gs_show.
 617     COLLECT gs_show INTO hs_show.
 618   ENDLOOP.
 619 
 620 **汇总燃料消耗数据
 621   CLEAR gs_show.
 622   LOOP AT gt_show1 INTO gs_show.
 623     COLLECT gs_show INTO hs_show1.
 624   ENDLOOP.
 625 
 626 **将汇总后的数据重新赋值到原来内表中
 627   REFRESH:gt_show ,gt_show1.
 628   gt_show[] = hs_show[]."汇总后的成品和原料
 629   gt_show1[] = hs_show1[]."汇总后的燃料数据
 630 
 631 **取出每日成品产量和原料量
 632   DATA:lt_cp TYPE TABLE OF ty_show,
 633        lt_yl TYPE TABLE OF ty_show,
 634        lt_rl TYPE TABLE OF ty_show.
 635   LOOP AT gt_show INTO gs_show.
 636     CASE gs_show-mtart.
 637       WHEN 'Z004'."成品
 638         APPEND gs_show TO lt_cp.
 639         MOVE-CORRESPONDING gs_show TO hs_cp.
 640         COLLECT hs_cp.
 641       WHEN OTHERS."原料
 642         APPEND gs_show TO lt_yl.
 643     ENDCASE.
 644   ENDLOOP.
 645 
 646   MOVE-CORRESPONDING gt_show1 TO lt_rl.
 647   gt_cp[] = hs_cp[]."按天按公司、工厂、成本中心汇总成品片数总量用来分摊燃料消耗量
 648 
 649 **成本要素核算、工时、燃动力等实际消耗
 650   IF gt_show IS NOT  INITIAL.
 651 
 652     SELECT
 653       bukrs
 654       "werks
 655       aufnr
 656       gkoar
 657       matnr
 658       belnr
 659       buzei
 660       gjahr
 661       perio
 662       wtgbtr
 663       twaer
 664       megbtr
 665       meinh
 666       kstar
 667       paccas
 668       INTO CORRESPONDING FIELDS OF TABLE gt_cb
 669       FROM coep
 670       FOR ALL ENTRIES IN gt_show
 671       WHERE aufnr = gt_show-aufnr
 672       AND  gjahr = p_gjahr
 673       AND  perio = p_monat
 674       AND  bukrs = p_werks.
 675   ENDIF.
 676 
 677   SORT gt_cb BY gjahr perio bukrs  aufnr gkoar matnr paccas kstar  belnr buzei.
 678 
 679   LOOP AT gt_cb INTO gs_cb.
 680     MOVE-CORRESPONDING gs_cb TO hs_cb.
 681     COLLECT hs_cb.
 682   ENDLOOP.
 683 
 684   gt_cb_sum[] = hs_cb[].
 685   SORT gt_cb_sum BY gjahr perio bukrs  aufnr gkoar matnr paccas kstar."实际核算的成本要素
 686 
 687   SORT gt_cp BY bukrs werks budat_mkpf kostl."
 688   SORT lt_cp BY bukrs werks budat_mkpf kostl aufnr matnr."成品
 689   SORT lt_yl BY bukrs werks budat_mkpf kostl aufnr matnr."原料
 690   SORT lt_rl BY bukrs werks budat_mkpf kostl aufnr matnr."燃料
 691 
 692 
 693 **整理数据
 694   LOOP AT lt_cp INTO gs_show.
 695     MOVE-CORRESPONDING gs_show TO gs_all.
 696     gs_all-year = gs_all-budat_mkpf+0(4).
 697     gs_all-month = gs_all-budat_mkpf+4(2).
 698 **高铁石英砂
 699     READ TABLE lt_yl INTO DATA(ls_yl) WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 700                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl001 BINARY SEARCH.
 701     IF sy-subrc EQ 0.
 702       gs_all-yl001mg = ls_yl-menge.
 703       gs_all-yl001ms = ls_yl-meins.
 704       gs_all-yl001dr = ls_yl-dmbtr.
 705       gs_all-yl001ws = ls_yl-waers.
 706     ENDIF.
 707     CLEAR:ls_yl.
 708 **低铁石英砂
 709     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 710                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl002  BINARY SEARCH.
 711     IF sy-subrc EQ 0.
 712       gs_all-yl002mg = ls_yl-menge.
 713       gs_all-yl002ms = ls_yl-meins.
 714       gs_all-yl002dr = ls_yl-dmbtr.
 715       gs_all-yl002ws = ls_yl-waers.
 716     ENDIF.
 717     CLEAR:ls_yl.
 718 **石灰石
 719     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 720                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl003  BINARY SEARCH.
 721     IF sy-subrc EQ 0.
 722       gs_all-yl003mg = ls_yl-menge.
 723       gs_all-yl003ms = ls_yl-meins.
 724       gs_all-yl003dr = ls_yl-dmbtr.
 725       gs_all-yl003ws = ls_yl-waers.
 726     ENDIF.
 727     CLEAR:ls_yl.
 728 **碱
 729     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 730                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl004 BINARY SEARCH.
 731     IF sy-subrc EQ 0.
 732       gs_all-yl004mg = ls_yl-menge.
 733       gs_all-yl004ms = ls_yl-meins.
 734       gs_all-yl004dr = ls_yl-dmbtr.
 735       gs_all-yl004ws = ls_yl-waers.
 736     ENDIF.
 737     CLEAR:ls_yl.
 738 **元明粉
 739     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 740                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl005 BINARY SEARCH.
 741     IF sy-subrc EQ 0.
 742       gs_all-yl005mg = ls_yl-menge.
 743       gs_all-yl005ms = ls_yl-meins.
 744       gs_all-yl005dr = ls_yl-dmbtr.
 745       gs_all-yl005ws = ls_yl-waers.
 746     ENDIF.
 747     CLEAR:ls_yl.
 748 **高铁白云
 749     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 750                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl006 BINARY SEARCH.
 751     IF sy-subrc EQ 0.
 752       gs_all-yl006mg = ls_yl-menge.
 753       gs_all-yl006ms = ls_yl-meins.
 754       gs_all-yl006dr = ls_yl-dmbtr.
 755       gs_all-yl006ws = ls_yl-waers.
 756     ENDIF.
 757     CLEAR:ls_yl.
 758 **低铁白云
 759     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 760                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl007 BINARY SEARCH.
 761     IF sy-subrc EQ 0.
 762       gs_all-yl007mg = ls_yl-menge.
 763       gs_all-yl007ms = ls_yl-meins.
 764       gs_all-yl007dr = ls_yl-dmbtr.
 765       gs_all-yl007ws = ls_yl-waers.
 766     ENDIF.
 767     CLEAR:ls_yl.
 768 **长石
 769     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 770                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl008 BINARY SEARCH.
 771     IF sy-subrc EQ 0.
 772       gs_all-yl008mg = ls_yl-menge.
 773       gs_all-yl008ms = ls_yl-meins.
 774       gs_all-yl008dr = ls_yl-dmbtr.
 775       gs_all-yl008ws = ls_yl-waers.
 776     ENDIF.
 777     CLEAR:ls_yl.
 778 **外购碎玻璃
 779     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 780                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl009 BINARY SEARCH.
 781     IF sy-subrc EQ 0.
 782       gs_all-yl009mg = ls_yl-menge.
 783       gs_all-yl009ms = ls_yl-meins.
 784       gs_all-yl009dr = ls_yl-dmbtr.
 785       gs_all-yl009ws = ls_yl-waers.
 786     ENDIF.
 787     CLEAR:ls_yl.
 788 **外购煤粉
 789     READ TABLE lt_yl INTO ls_yl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 790                                                kostl = gs_show-kostl aufnr = gs_show-aufnr matnr = yl010 BINARY SEARCH.
 791     IF sy-subrc EQ 0.
 792       gs_all-yl010mg = ls_yl-menge.
 793       gs_all-yl010ms = ls_yl-meins.
 794       gs_all-yl010dr = ls_yl-dmbtr.
 795       gs_all-yl010ws = ls_yl-waers.
 796     ENDIF.
 797     CLEAR:ls_yl.
 798 
 799 **找到当前成品总数以分摊燃料消耗
 800     READ TABLE gt_cp INTO DATA(ls_c) WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 801                                               kostl = gs_show-kostl BINARY SEARCH.
 802     IF sy-subrc EQ 0.
 803 **调和油   110501000080
 804       READ TABLE lt_rl INTO DATA(ls_rl) WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 805                                                  kostl = gs_show-kostl matnr = rl001 BINARY SEARCH.
 806       IF sy-subrc EQ 0.
 807         gs_all-rl001mg = gs_show-menge / ls_c-menge * ls_rl-menge.
 808         gs_all-rl001ms = ls_rl-meins.
 809         gs_all-rl001dr = gs_show-menge / ls_c-menge * ls_rl-dmbtr.
 810         gs_all-rl001ws = ls_rl-waers.
 811       ENDIF.
 812       CLEAR:ls_rl.
 813 **石油沥青  140101000004
 814       READ TABLE lt_rl INTO ls_rl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 815                                                  kostl = gs_show-kostl matnr = rl002 BINARY SEARCH.
 816       IF sy-subrc EQ 0.
 817         gs_all-rl002mg = gs_show-menge / ls_c-menge * ls_rl-menge.
 818         gs_all-rl002ms = ls_rl-meins.
 819         gs_all-rl002dr = gs_show-menge / ls_c-menge * ls_rl-dmbtr.
 820         gs_all-rl002ws = ls_rl-waers.
 821       ENDIF.
 822       CLEAR:ls_rl.
 823 **天然气  140102000001
 824       READ TABLE lt_rl INTO ls_rl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 825                                                  kostl = gs_show-kostl matnr = rl003 BINARY SEARCH.
 826       IF sy-subrc EQ 0.
 827         gs_all-rl003mg = gs_show-menge / ls_c-menge * ls_rl-menge.
 828         gs_all-rl003ms = ls_rl-meins.
 829         gs_all-rl003dr = gs_show-menge / ls_c-menge * ls_rl-dmbtr.
 830         gs_all-rl003ws = ls_rl-waers.
 831       ENDIF.
 832       CLEAR:ls_rl.
 833 **块煤      140103000001
 834       READ TABLE lt_rl INTO ls_rl WITH KEY bukrs = gs_show-bukrs werks = gs_show-werks budat_mkpf = gs_show-budat_mkpf
 835                                                  kostl = gs_show-kostl matnr = rl004 BINARY SEARCH.
 836       IF sy-subrc EQ 0.
 837         gs_all-rl004mg = gs_show-menge / ls_c-menge * ls_rl-menge.
 838         gs_all-rl004ms = ls_rl-meins.
 839         gs_all-rl004dr = gs_show-menge / ls_c-menge * ls_rl-dmbtr.
 840         gs_all-rl004ws = ls_rl-waers.
 841       ENDIF.
 842       CLEAR:ls_rl.
 843     ENDIF.
 844 
 845 **取出成品厚度及计算重箱数
 846     CLEAR:lv_groes_1,
 847             lv_groes_2,
 848             lv_groes_3.
 849 
 850     SPLIT gs_all-groes
 851            AT 'X'
 852          INTO lv_groes_1
 853               lv_groes_2
 854               lv_groes_3.
 855     IF lv_groes_3 <> 0.
 856       gs_all-width   = lv_groes_3 && 'mm'.
 857       CLEAR:lv_rc,lv_coeff.
 858       PERFORM frm_check_number(zsdr_003) USING lv_groes_3 CHANGING lv_rc.
 859 
 860       IF lv_rc = 0 AND lv_groes_3 NE 0.
 861         lv_coeff = 20 / lv_groes_3.
 862 
 863         gs_all-menge_zx = gs_all-menge * lv_groes_1 * lv_groes_2 / lv_coeff.
 864       ENDIF.
 865 
 866     ENDIF.
 867 
 868 
 869 
 870     APPEND gs_all TO gt_all.
 871 
 872     MOVE-CORRESPONDING gs_all TO hs_final.
 873     COLLECT hs_final.
 874 
 875     CLEAR gs_all.
 876   ENDLOOP.
 877 
 878   gt_final[] = hs_final[].
 879 
 880   LOOP AT gt_final INTO gs_final.
 881 **取出实际核算成本要素数据
 882     CLEAR:gs_cb_sum.
 883 *9000000001  人工作业及附加 成本要素
 884     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 885                                                  aufnr = gs_final-aufnr gkoar = '' matnr = ''  kstar = '9000000001' BINARY SEARCH.
 886     IF sy-subrc EQ 0.
 887       gs_final-cb001mg = gs_cb_sum-megbtr.
 888       gs_final-cb001ms = gs_cb_sum-meinh.
 889       gs_final-cb001dr = gs_cb_sum-wtgbtr.
 890       gs_final-cb001ws = gs_cb_sum-twaer.
 891 
 892     ENDIF.
 893     CLEAR:gs_cb_sum.
 894 *9000000002  制造费用 成本要素
 895     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 896                                                  aufnr = gs_final-aufnr gkoar = '' matnr = ''  kstar = '9000000002' BINARY SEARCH.
 897     IF sy-subrc EQ 0.
 898       gs_final-cb002mg = gs_cb_sum-megbtr.
 899       gs_final-cb002ms = gs_cb_sum-meinh.
 900       gs_final-cb002dr = gs_cb_sum-wtgbtr.
 901       gs_final-cb002ws = gs_cb_sum-twaer.
 902 
 903     ENDIF.
 904     CLEAR:gs_cb_sum.
 905 *9000000003  折旧费用 成本要素
 906     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 907                                                  aufnr = gs_final-aufnr gkoar = '' matnr = ''  kstar = '9000000003' BINARY SEARCH.
 908     IF sy-subrc EQ 0.
 909       gs_final-cb003mg = gs_cb_sum-megbtr.
 910       gs_final-cb003ms = gs_cb_sum-meinh.
 911       gs_final-cb003dr = gs_cb_sum-wtgbtr.
 912       gs_final-cb003ws = gs_cb_sum-twaer.
 913 
 914     ENDIF.
 915     CLEAR:gs_cb_sum.
 916 *9000000004  能源动力 成本要素
 917     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 918                                                  aufnr = gs_final-aufnr gkoar = '' matnr = ''  kstar = '9000000004' BINARY SEARCH.
 919     IF sy-subrc EQ 0.
 920       gs_final-cb004mg = gs_cb_sum-megbtr.
 921       gs_final-cb004ms = gs_cb_sum-meinh.
 922       gs_final-cb004dr = gs_cb_sum-wtgbtr.
 923       gs_final-cb004ws = gs_cb_sum-twaer.
 924 
 925     ENDIF.
 926     CLEAR:gs_cb_sum.
 927 *9000000005  其他制造费用 成本要素
 928     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 929                                                  aufnr = gs_final-aufnr gkoar = '' matnr = ''  kstar = '9000000005' BINARY SEARCH.
 930     IF sy-subrc EQ 0.
 931       gs_final-cb005mg = gs_cb_sum-megbtr.
 932       gs_final-cb005ms = gs_cb_sum-meinh.
 933       gs_final-cb005dr = gs_cb_sum-wtgbtr.
 934       gs_final-cb005ws = gs_cb_sum-twaer.
 935 
 936     ENDIF.
 937     CLEAR:gs_cb_sum.
 938 *高铁石英砂 实际核算成本
 939     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 940                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl001  kstar = '5001010100' BINARY SEARCH.
 941     IF sy-subrc EQ 0.
 942       gs_final-cb006mg = gs_cb_sum-megbtr.
 943       gs_final-cb006ms = gs_cb_sum-meinh.
 944       gs_final-cb006dr = gs_cb_sum-wtgbtr.
 945       gs_final-cb006ws = gs_cb_sum-twaer.
 946 
 947     ENDIF.
 948     CLEAR:gs_cb_sum.
 949 *低铁石英砂 实际核算成本
 950     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 951                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl002  kstar = '5001010100' BINARY SEARCH.
 952     IF sy-subrc EQ 0.
 953       gs_final-cb007mg = gs_cb_sum-megbtr.
 954       gs_final-cb007ms = gs_cb_sum-meinh.
 955       gs_final-cb007dr = gs_cb_sum-wtgbtr.
 956       gs_final-cb007ws = gs_cb_sum-twaer.
 957 
 958     ENDIF.
 959     CLEAR:gs_cb_sum.
 960 *石灰石 实际核算成本
 961     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 962                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl003  kstar = '5001010100' BINARY SEARCH.
 963     IF sy-subrc EQ 0.
 964       gs_final-cb008mg = gs_cb_sum-megbtr.
 965       gs_final-cb008ms = gs_cb_sum-meinh.
 966       gs_final-cb008dr = gs_cb_sum-wtgbtr.
 967       gs_final-cb008ws = gs_cb_sum-twaer.
 968 
 969     ENDIF.
 970     CLEAR:gs_cb_sum.
 971 *碱 实际核算成本
 972     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 973                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl004  kstar = '5001010100' BINARY SEARCH.
 974     IF sy-subrc EQ 0.
 975       gs_final-cb009mg = gs_cb_sum-megbtr.
 976       gs_final-cb009ms = gs_cb_sum-meinh.
 977       gs_final-cb009dr = gs_cb_sum-wtgbtr.
 978       gs_final-cb009ws = gs_cb_sum-twaer.
 979 
 980     ENDIF.
 981     CLEAR:gs_cb_sum.
 982 *元明粉实际核算成本
 983     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 984                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl005  kstar = '5001010100' BINARY SEARCH.
 985     IF sy-subrc EQ 0.
 986       gs_final-cb010mg = gs_cb_sum-megbtr.
 987       gs_final-cb010ms = gs_cb_sum-meinh.
 988       gs_final-cb010dr = gs_cb_sum-wtgbtr.
 989       gs_final-cb010ws = gs_cb_sum-twaer.
 990     ENDIF.
 991     CLEAR:gs_cb_sum.
 992 *高铁白云 实际核算成本
 993     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
 994                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl006  kstar = '5001010100' BINARY SEARCH.
 995     IF sy-subrc EQ 0.
 996       gs_final-cb011mg = gs_cb_sum-megbtr.
 997       gs_final-cb011ms = gs_cb_sum-meinh.
 998       gs_final-cb011dr = gs_cb_sum-wtgbtr.
 999       gs_final-cb011ws = gs_cb_sum-twaer.
1000     ENDIF.
1001     CLEAR:gs_cb_sum.
1002 *低铁白云 实际核算成本
1003     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
1004                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl007  kstar = '5001010100' BINARY SEARCH.
1005     IF sy-subrc EQ 0.
1006       gs_final-cb012mg = gs_cb_sum-megbtr.
1007       gs_final-cb012ms = gs_cb_sum-meinh.
1008       gs_final-cb012dr = gs_cb_sum-wtgbtr.
1009       gs_final-cb012ws = gs_cb_sum-twaer.
1010     ENDIF.
1011     CLEAR:gs_cb_sum.
1012 *长石 实际核算成本
1013     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
1014                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl008  kstar = '5001010100' BINARY SEARCH.
1015     IF sy-subrc EQ 0.
1016       gs_final-cb013mg = gs_cb_sum-megbtr.
1017       gs_final-cb013ms = gs_cb_sum-meinh.
1018       gs_final-cb013dr = gs_cb_sum-wtgbtr.
1019       gs_final-cb013ws = gs_cb_sum-twaer.
1020     ENDIF.
1021     CLEAR:gs_cb_sum.
1022 *外购碎玻璃实际核算成本
1023     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
1024                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl009  kstar = '5001010100' BINARY SEARCH.
1025     IF sy-subrc EQ 0.
1026       gs_final-cb014mg = gs_cb_sum-megbtr.
1027       gs_final-cb014ms = gs_cb_sum-meinh.
1028       gs_final-cb014dr = gs_cb_sum-wtgbtr.
1029       gs_final-cb014ws = gs_cb_sum-twaer.
1030     ENDIF.
1031     CLEAR:gs_cb_sum.
1032 *外购煤粉 实际核算成本
1033     READ TABLE gt_cb_sum INTO gs_cb_sum WITH KEY gjahr = gs_final-year  perio = gs_final-month  bukrs = gs_final-bukrs
1034                                                  aufnr = gs_final-aufnr gkoar = 'M' matnr = yl010  kstar = '5001010100' BINARY SEARCH.
1035     IF sy-subrc EQ 0.
1036       gs_final-cb015mg = gs_cb_sum-megbtr.
1037       gs_final-cb015ms = gs_cb_sum-meinh.
1038       gs_final-cb015dr = gs_cb_sum-wtgbtr.
1039       gs_final-cb015ws = gs_cb_sum-twaer.
1040     ENDIF.
1041 
1042     MODIFY gt_final FROM gs_final.
1043 
1044     CLEAR:gs_final.
1045 
1046   ENDLOOP.
1047 
1048 
1049 
1050 
1051 
1052 ENDFORM.
1053 *&---------------------------------------------------------------------*
1054 *&      FORM  FRM_CREATE_FIELDCAT
1055 *&---------------------------------------------------------------------*
1056 *
1057 *----------------------------------------------------------------------*
1058 FORM frm_create_fieldcat .
1059 
1060 
1061   m_fill_fieldcat:
1062      'BUKRS'       '公司'              '' 4   '' '' '',
1063      'WERKS'       '工厂'             '' 4   '' '' '',
1064      'YEAR'        '年度'              '' 4   '' '' '',
1065      'MONTH'       '期间'             '' 3   '' '' '',
1066      'MATNR'       '成品物料号'             '' 3   '' '' '',
1067      'MAKTX'       '成品物料描述'             '' 3   '' '' '',
1068      'GROES'       '大小量纲'             '' 3   '' '' '',
1069      'WIDTH'       '成品厚度'             '' 3   '' '' '',
1070      "'BUDAT_MKPF'  '过账日期'         '' 10   '' '' '',
1071      'AUFNR'       '订单号'         '' 10   '' '' '',
1072      'KOSTL'       '成本中心'         '' 10   '' '' '',
1073      'VERID_ND'    '生产线'         '' 10   '' '' '',
1074      'TEXT1'    '生产线描述'         '' 10   '' '' '',
1075      'DMBTR'    '成品金额'         '' 10   '' '' '',
1076      'WAERS'    '成品金额单位'         '' 10   '' '' '',
1077      'MENGE'    '成品数量'         '' 10   '' '' '',
1078      'MEINS'    '成品数量单位'         '' 10   '' '' '',
1079      'MENGE_ZX'    '成品重箱数'         '' 10   '' '' '',
1080      'YL001MG '   yl001         '' 10   '' '' '',
1081      'YL001MS'    yl001         '' 10   '' '' '',
1082      'YL001DR'    yl001         '' 10   '' '' '',
1083      'YL001WS'    yl001         '' 10   '' '' '',
1084 
1085      'YL002MG '   yl002         '' 10   '' '' '',
1086      'YL002MS'    yl002         '' 10   '' '' '',
1087      'YL002DR'    yl002         '' 10   '' '' '',
1088      'YL002WS'    yl002         '' 10   '' '' '',
1089 
1090      'YL003MG '   yl003         '' 10   '' '' '',
1091      'YL003MS'    yl003         '' 10   '' '' '',
1092      'YL003DR'    yl003         '' 10   '' '' '',
1093      'YL003WS'    yl003         '' 10   '' '' '',
1094 
1095      'YL004MG '   yl004         '' 10   '' '' '',
1096      'YL004MS'    yl004         '' 10   '' '' '',
1097      'YL004DR'    yl004         '' 10   '' '' '',
1098      'YL004WS'    yl004         '' 10   '' '' '',
1099 
1100      'YL005MG '   yl005         '' 10   '' '' '',
1101      'YL005MS'    yl005        '' 10   '' '' '',
1102      'YL005DR'    yl005         '' 10   '' '' '',
1103      'YL005WS'    yl005         '' 10   '' '' '',
1104 
1105      'YL006MG '   yl006         '' 10   '' '' '',
1106      'YL006MS'    yl006         '' 10   '' '' '',
1107      'YL006DR'    yl006         '' 10   '' '' '',
1108      'YL006WS'    yl006         '' 10   '' '' '',
1109 
1110      'YL007MG '   yl007         '' 10   '' '' '',
1111      'YL007MS'    yl007         '' 10   '' '' '',
1112      'YL007DR'    yl007         '' 10   '' '' '',
1113      'YL007WS'    yl007         '' 10   '' '' '',
1114 
1115      'YL008MG '   yl008         '' 10   '' '' '',
1116      'YL008MS'    yl008         '' 10   '' '' '',
1117      'YL008DR'    yl008         '' 10   '' '' '',
1118      'YL008WS'    yl008         '' 10   '' '' '',
1119 
1120      'YL009MG '   yl009         '' 10   '' '' '',
1121      'YL009MS'    yl009         '' 10   '' '' '',
1122      'YL009DR'    yl009         '' 10   '' '' '',
1123      'YL009WS'    yl009         '' 10   '' '' '',
1124 
1125      'YL010MG '   yl010         '' 10   '' '' '',
1126      'YL010MS'    yl010         '' 10   '' '' '',
1127      'YL010DR'    yl010         '' 10   '' '' '',
1128      'YL010WS'    yl010         '' 10   '' '' '',
1129 
1130      'RL001MG '   rl003         '' 10   '' '' '',
1131      'RL001MS'    rl003         '' 10   '' '' '',
1132      'RL001DR'    rl003         '' 10   '' '' '',
1133      'RL001WS'    rl003         '' 10   '' '' '',
1134 
1135      'RL002MG '   rl002         '' 10   '' '' '',
1136      'RL002MS'    rl002         '' 10   '' '' '',
1137      'RL002DR'    rl002         '' 10   '' '' '',
1138      'RL002WS'    rl002         '' 10   '' '' '',
1139 
1140      'RL003MG '   rl003         '' 10   '' '' '',
1141      'RL003MS'    rl003         '' 10   '' '' '',
1142      'RL003DR'    rl003         '' 10   '' '' '',
1143      'RL003WS'    rl003         '' 10   '' '' '',
1144 
1145      'RL004MG '   rl004         '' 10   '' '' '',
1146      'RL004MS'    rl004         '' 10   '' '' '',
1147      'RL004DR'    rl004         '' 10   '' '' '',
1148      'RL004WS'    rl004         '' 10   '' '' '',
1149 
1150      'CB001MG '  '人工作业及附加'         '' 10   '' '' '',
1151      'CB001MS'   '人工作业及附加'         '' 10   '' '' '',
1152      'CB001DR'   '人工作业及附加'         '' 10   '' '' '',
1153      'CB001WS'   '人工作业及附加'        '' 10   '' '' '',
1154 
1155      'CB002MG '  '制造费用'         '' 10   '' '' '',
1156      'CB002MS'   '制造费用'         '' 10   '' '' '',
1157      'CB002DR'   '制造费用'         '' 10   '' '' '',
1158      'CB002WS'   '制造费用'        '' 10   '' '' '',
1159 
1160      'CB003MG '  '折旧费用'         '' 10   '' '' '',
1161      'CB003MS'   '折旧费用'         '' 10   '' '' '',
1162      'CB003DR'   '折旧费用'         '' 10   '' '' '',
1163      'CB003WS'   '折旧费用'        '' 10   '' '' '',
1164 
1165      'CB004MG '  '能源动力'         '' 10   '' '' '',
1166      'CB004MS'   '能源动力'         '' 10   '' '' '',
1167      'CB004DR'   '能源动力'         '' 10   '' '' '',
1168      'CB004WS'   '能源动力'        '' 10   '' '' '',
1169 
1170      'CB005MG '  '其他制造费用'         '' 10   '' '' '',
1171      'CB005MS'   '其他制造费用'         '' 10   '' '' '',
1172      'CB005DR'   '其他制造费用'         '' 10   '' '' '',
1173      'CB005WS'   '其他制造费用'        '' 10   '' '' '',
1174 
1175      'CB006MG '   yl001         '' 10   '' '' '',
1176      'CB006MS'    yl001         '' 10   '' '' '',
1177      'CB006DR'    yl001         '' 10   '' '' '',
1178      'CB006WS'    yl001         '' 10   '' '' '',
1179 
1180      'CB007MG '   yl002         '' 10   '' '' '',
1181      'CB007MS'    yl002         '' 10   '' '' '',
1182      'CB007DR'    yl002         '' 10   '' '' '',
1183      'CB007WS'    yl002         '' 10   '' '' '',
1184 
1185      'CB008MG '   yl003         '' 10   '' '' '',
1186      'CB008MS'    yl003         '' 10   '' '' '',
1187      'CB008DR'    yl003         '' 10   '' '' '',
1188      'CB008WS'    yl003         '' 10   '' '' '',
1189 
1190      'CB009MG '   yl004         '' 10   '' '' '',
1191      'CB009MS'    yl004         '' 10   '' '' '',
1192      'CB009DR'    yl004         '' 10   '' '' '',
1193      'CB009WS'    yl004         '' 10   '' '' '',
1194 
1195      'CB010MG '   yl005         '' 10   '' '' '',
1196      'CB010MS'    yl005        '' 10   '' '' '',
1197      'CB010DR'    yl005         '' 10   '' '' '',
1198      'CB010WS'    yl005         '' 10   '' '' '',
1199 
1200      'CB011MG '   yl006         '' 10   '' '' '',
1201      'CB011MS'    yl006         '' 10   '' '' '',
1202      'CB011DR'    yl006         '' 10   '' '' '',
1203      'CB011WS'    yl006         '' 10   '' '' '',
1204 
1205      'CB012MG '   yl007         '' 10   '' '' '',
1206      'CB012MS'    yl007         '' 10   '' '' '',
1207      'CB012DR'    yl007         '' 10   '' '' '',
1208      'CB012WS'    yl007         '' 10   '' '' '',
1209 
1210      'CB013MG '   yl008         '' 10   '' '' '',
1211      'CB013MS'    yl008         '' 10   '' '' '',
1212      'CB013DR'    yl008         '' 10   '' '' '',
1213      'CB013WS'    yl008         '' 10   '' '' '',
1214 
1215      'CB014MG '   yl009         '' 10   '' '' '',
1216      'CB014MS'    yl009         '' 10   '' '' '',
1217      'CB014DR'    yl009         '' 10   '' '' '',
1218      'CB014WS'    yl009         '' 10   '' '' '',
1219 
1220      'CB015MG '   yl010         '' 10   '' '' '',
1221      'CB015MS'    yl010         '' 10   '' '' '',
1222      'CB015DR'    yl010         '' 10   '' '' '',
1223      'CB015WS'    yl010         '' 10   '' '' ''.
1224 
1225 
1226   LOOP AT gt_fcat INTO gs_fcat.
1227     IF gs_fcat-fieldname = 'MEINS'.
1228       gs_fcat-ref_field = 'MEINS'.
1229       gs_fcat-ref_table = 'MARA'.
1230     ENDIF.
1231 
1232     IF gs_fcat-fieldname = 'MATNR'.
1233       gs_fcat-ref_field = 'MATNR'.
1234       gs_fcat-ref_table = 'MARA'.
1235     ENDIF.
1236 
1237     MODIFY gt_fcat FROM gs_fcat.
1238     CLEAR gs_fcat.
1239   ENDLOOP.
1240 ENDFORM. " FRM_CR
1241 *&---------------------------------------------------------------------*
1242 *&      FORM  LAYOUT_INIT
1243 *&---------------------------------------------------------------------*
1244 *       TEXT
1245 *----------------------------------------------------------------------*
1246 FORM frm_layout_init .
1247   gs_layout-zebra      = 'X'.
1248   gs_layout-cwidth_opt = 'X'.
1249 *  GS_LAYOUT-BOX_FNAME  = 'CBOX'.
1250   gs_layout-sel_mode   = 'A'.
1251 
1252   gs_variant-report   = sy-repid.
1253   gs_variant-username = sy-uname.
1254   gs_variant-variant  = pa_vari.
1255 ENDFORM. "LAYOUT_INIT
1256 *&---------------------------------------------------------------------*
1257 *&      FORM  FRM_DISPLAY_BY_ALV
1258 *&---------------------------------------------------------------------*
1259 *       TEXT
1260 *----------------------------------------------------------------------*
1261 FORM frm_display_alv .
1262   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
1263     EXPORTING
1264       i_callback_program = sy-repid
1265       is_layout_lvc      = gs_layout
1266 *     I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
1267 *     I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
1268       it_fieldcat_lvc    = gt_fcat
1269       i_save             = 'A' "变式是否可以保存
1270       i_grid_settings    = gs_grid_settings
1271       is_variant         = gs_variant
1272     TABLES
1273       t_outtab           = gt_final
1274     EXCEPTIONS
1275       program_error      = 1
1276       OTHERS             = 2.
1277   IF sy-subrc <> 0.
1278     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
1279     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
1280   ENDIF.
1281 ENDFORM. " FRM_DISPLAY_BY_ALV
1282 *&---------------------------------------------------------------------*
1283 *& Form ALV_VARIANT_F4
1284 *&---------------------------------------------------------------------*
1285 *& text
1286 *&---------------------------------------------------------------------*
1287 *&      <-- PA_VARI
1288 *&---------------------------------------------------------------------*
1289 FORM alv_variant_f4  CHANGING p_pa_vari.
1290   DATA: rs_variant LIKE disvariant.
1291   DATA nof4 TYPE c.
1292 
1293   CLEAR nof4.
1294   LOOP AT SCREEN.
1295     IF screen-name = 'PA_VARI'.
1296       IF screen-input = 0.
1297         nof4 = 'X'.
1298       ENDIF.
1299     ENDIF.
1300   ENDLOOP.
1301 
1302   rs_variant-report   = sy-repid.
1303   rs_variant-username = sy-uname.
1304   CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
1305     EXPORTING
1306       is_variant = rs_variant
1307       i_save     = 'A'
1308     IMPORTING
1309       es_variant = rs_variant
1310     EXCEPTIONS
1311       OTHERS     = 1.
1312   IF sy-subrc = 0 AND nof4 EQ space.
1313     pa_vari = rs_variant-variant.
1314   ENDIF.
1315 ENDFORM.
原文地址:https://www.cnblogs.com/eagle-dtq/p/14482634.html