二维码

动态汇总alv与动态tree代码

Twilight发表于 2015-04-14 00:01Twilight 最后回复于 2015-04-14 00:01 [复制链接] 5094 0

Sariel采用动态编程完成的余额发生额通用查询报表,代码规范、质量都是可圈可点{:soso_e179:} ,只可惜没有最终运行的截图,下面分享代码共大家学习一下。
  1. ************************************************************************
  2. *  Report ZZREPORT
  3. ************************************************************************
  4. *
  5. *  作者:            Sariel
  6. *  完成日期:        2013/03/19
  7. *  描述:            余额发生额通用查询
  8. ************************************************************************
  9. *  版本号 日期   作者   修改描述 功能更改说明书
  10. ************************************************************************
  11. *  1.  YYYY/MM/DD author  Read dataset from app. Server @001
  12. ************************************************************************
  13. REPORT ZZREPORT NO STANDARD PAGE HEADING LINE-SIZE 255.

  14. *&---------------------------------------------------------------------*
  15. *& DEFINE TYPE-POOLS
  16. *&---------------------------------------------------------------------*
  17. TYPE-POOLS: SLIS,ABAP.

  18. *&---------------------------------------------------------------------*
  19. *& DEFINE TABLES
  20. *&---------------------------------------------------------------------*
  21. TABLES: FAGLFLEXA.

  22. CLASS CL_GUI_CFW         DEFINITION LOAD.
  23. CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
  24. *----------------------------------------------------------------------*
  25. *       CLASS LCL_EVENT_RECEIVER DEFINITION
  26. *----------------------------------------------------------------------*
  27. *
  28. *----------------------------------------------------------------------*
  29. CLASS LCL_EVENT_RECEIVER DEFINITION.
  30.   PUBLIC SECTION.
  31.     METHODS:
  32.       HANDLE_ITEM_DOUBLE_CLICK
  33.         FOR EVENT ITEM_DOUBLE_CLICK OF CL_GUI_ALV_TREE
  34.           IMPORTING FIELDNAME
  35.                     NODE_KEY.
  36. ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION

  37. *----------------------------------------------------------------------*
  38. *       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
  39. *----------------------------------------------------------------------*
  40. CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  41.   METHOD HANDLE_ITEM_DOUBLE_CLICK.
  42.     CHECK FIELDNAME EQ 'BQJES'
  43.        OR FIELDNAME EQ 'BQJEH'
  44.        OR FIELDNAME EQ 'LJJES'
  45.        OR FIELDNAME EQ 'LJJEH'
  46.        OR FIELDNAME EQ 'BQSLS'
  47.        OR FIELDNAME EQ 'BQSLH'
  48.        OR FIELDNAME EQ 'LJSLS'
  49.        OR FIELDNAME EQ 'LJSLH'.
  50.     PERFORM FRM_GET_ITEMS USING FIELDNAME NODE_KEY.
  51.   ENDMETHOD.                    "HANDLE_ITEM_DOUBLE_CLICK
  52. ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

  53. *&---------------------------------------------------------------------*
  54. *& DEFINE TYPES
  55. *&---------------------------------------------------------------------*
  56. TYPES: BEGIN OF TY_FIELD,
  57.          SEQ      TYPE NUMC2,
  58.          DSP      TYPE NUMC2,      "是否显示
  59.          SUM      TYPE FLAG,       "是否汇总
  60.          FLAG     TYPE CHAR1,      "H:汇总/J:金额/S:数量/T:描述/N:ALV小计字段
  61.          NAME     TYPE FIELDNAME,
  62.          TYPE     TYPE FIELD_TYPE,
  63.          TEXT     TYPE LVC_TXT,
  64.        END OF TY_FIELD.
  65. TYPES: BEGIN OF TY_T001,
  66.          BUKRS    TYPE T001-BUKRS,
  67.          BUTXT    TYPE T001-BUTXT,
  68.        END OF TY_T001.
  69. TYPES: BEGIN OF TY_BNKA,
  70.          BUKRS    TYPE T012-BUKRS,
  71.          HBKID    TYPE T012-HBKID,
  72.          BANKA    TYPE BNKA-BANKA,
  73.        END OF TY_BNKA.
  74. TYPES: BEGIN OF TY_BSEG,
  75.          GJAHR TYPE BSEG-GJAHR,
  76.          BUKRS TYPE BSEG-BUKRS,
  77.          BELNR TYPE BSEG-BELNR,
  78.          BUZEI TYPE BSEG-BUZEI,
  79.          SGTXT TYPE BSEG-SGTXT,
  80.          MATNR TYPE BSEG-MATNR,
  81.          ANLN1 TYPE BSEG-ANLN1,
  82.          ANLN2 TYPE BSEG-ANLN2,
  83.          AUFNR TYPE BSEG-AUFNR,
  84.          KOSTL TYPE BSEG-KOSTL,
  85.        END OF TY_BSEG.
  86. TYPES: BEGIN OF TY_DETA,
  87.          RACCT    TYPE FAGLFLEXA-RACCT,           "总帐帐目
  88.          RACCTT   TYPE SKAT-TXT20,                "科目描述
  89.          RBUKRS   TYPE FAGLFLEXA-RBUKRS,          "公司
  90.          BUTXT    TYPE T001-BUTXT,                "公司名称
  91.          RYEAR    TYPE FAGLFLEXA-RYEAR,           "会计年度
  92.          POPER    TYPE FAGLFLEXA-POPER,           "会计期间
  93.          BELNR    TYPE FAGLFLEXA-BELNR,           "凭证编号
  94.          BUZEI    TYPE FAGLFLEXA-BUZEI,           "行项目
  95.          BLART    TYPE BKPF-BLART,                "凭证日期
  96.          BUDAT    TYPE FAGLFLEXA-BUDAT,           "过账日期
  97.          BLDAT    TYPE BKPF-BLDAT,                "行项目编号
  98.          SGTXT    TYPE BSEG-SGTXT,                "文本
  99.          ZZLIFNR  TYPE FAGLFLEXA-ZZLIFNR,         "供应商
  100.          ZZLIFNRT TYPE LFA1-NAME1,                "供应商描述
  101.          ZZKUNNR  TYPE FAGLFLEXA-ZZKUNNR,         "客户
  102.          ZZKUNNRT TYPE KNA1-NAME1,                "客户描述
  103.          ZZRSTGR  TYPE FAGLFLEXA-ZZRSTGR,         "原因代码
  104.          ZZRSTGRT TYPE T053S-TXT20,               "现金流量文本
  105.          ZZAUFNR  TYPE FAGLFLEXA-ZZAUFNR,         "订单
  106.          ZZAUFNRT TYPE AUFK-KTEXT,                "订单描述
  107.          RCNTR    TYPE FAGLFLEXA-RCNTR,           "成本中心
  108.          RCNTRT   TYPE CSKT-KTEXT,                "成本中心描述
  109.          PRCTR    TYPE FAGLFLEXA-PRCTR,           "利润中心
  110.          PRCTRT   TYPE CEPCT-KTEXT,               "利润中心描述
  111.          ZZHBKID  TYPE FAGLFLEXA-ZZHBKID,         "银行
  112.          ZZHBKIDT TYPE BNKA-BANKA,                "银行描述
  113.          ZZHKTID  TYPE FAGLFLEXA-ZZHKTID,         "账户
  114.          ZZHKTIDT TYPE T012T-TEXT1,               "账户描述
  115.          ZZIVTP   TYPE FAGLFLEXA-ZZIVTP,          "发票类型
  116.          ZZIVTPT  TYPE ZFIT0013-TXT20,            "发票类型描述
  117.          ZZCSTP   TYPE FAGLFLEXA-ZZCSTP,          "费用类型
  118.          ZZCSTPT  TYPE ZFIT0014-TXT50,            "费用类型描述
  119.          ZZSTFCH  TYPE FAGLFLEXA-ZZSTFCH,         "员工性质
  120.          ZZSTFCHT TYPE ZFIT0015-TXT20,            "员工性质描述
  121.          ZZMTRTP  TYPE FAGLFLEXA-ZZMTRTP,         "物料类型
  122.          ZZMTRTPT TYPE ZFIT0016-TXT20,            "物料类型描述
  123.          ZZPJTP   TYPE FAGLFLEXA-ZZPJTP,          "统筹项目
  124.          ZZPJTPT  TYPE ZFIT0017-TXT50,            "统筹项目描述
  125.          MATNR    TYPE BSEG-MATNR,                "物料
  126.          MAKTX    TYPE MAKT-MAKTX,                "物料描述
  127.          HSL      TYPE FAGLFLEXA-HSL,             "本位币金额
  128.          TSL      TYPE FAGLFLEXA-TSL,             "交易货币金额
  129.          RWCUR    TYPE FAGLFLEXA-RWCUR,           "货币
  130.          MSL      TYPE FAGLFLEXA-MSL,             "数量
  131.          RUNIT    TYPE FAGLFLEXA-RUNIT,           "数量单位
  132.          ANLN1    TYPE BSEG-ANLN1,                "资产
  133.          ANLN2    TYPE BSEG-ANLN2,                "次级
  134.          ANLN1T   TYPE ANLT-TXT50,                "资产描述
  135.        END OF TY_DETA.
  136. TYPES: BEGIN OF TY_GRPL.
  137. INCLUDE           TYPE LVC_S_GRPL.
  138. TYPES:   NKEY     TYPE LVC_NKEY.
  139. TYPES: END OF TY_GRPL.

  140. *&---------------------------------------------------------------------*
  141. *& DEFINE DATA
  142. *&---------------------------------------------------------------------*
  143. DATA: GC_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,
  144.       GO_ALV_GRID       TYPE REF TO CL_GUI_ALV_GRID,
  145.       GO_ALV_TREE       TYPE REF TO CL_GUI_ALV_TREE,
  146.       GT_FCAT_TREE      TYPE LVC_T_FCAT,
  147.       GS_FCAT_TREE      TYPE LVC_S_FCAT,
  148.       GV_FCAT_TREE      TYPE FLAG,
  149.       GT_FCAT     TYPE SLIS_T_FIELDCAT_ALV,
  150.       GS_FCAT     TYPE SLIS_FIELDCAT_ALV,
  151.       GT_SORT     TYPE SLIS_T_SORTINFO_ALV,
  152.       GS_SORT     TYPE SLIS_SORTINFO_ALV,
  153.       GO_DATA0    TYPE REF TO DATA,
  154.       GO_DATA1    TYPE REF TO DATA,
  155.       GO_DATA2    TYPE REF TO DATA,
  156.       GO_DATA3    TYPE REF TO DATA,
  157.       GO_DATA4    TYPE REF TO DATA,
  158.       GO_DATA5    TYPE REF TO DATA,
  159.       GO_DATA6    TYPE REF TO DATA,
  160.       GO_DATA7    TYPE REF TO DATA,
  161.       GO_DATA8    TYPE REF TO DATA,
  162.       GO_DATA9    TYPE REF TO DATA,
  163.       GT_GRPL     TYPE LVC_T_GRPL,
  164.       GS_GRPL     TYPE LVC_S_GRPL.
  165. DATA: RT_RACCT    TYPE RANGE OF RACCT,
  166.       RS_RACCT    LIKE LINE OF RT_RACCT.
  167. DATA: GT_FIELD    TYPE STANDARD TABLE OF TY_FIELD,
  168.       GS_FIELD    TYPE TY_FIELD,
  169.       GT_FIELDX   TYPE STANDARD TABLE OF TY_FIELD,
  170.       GS_FIELDX   TYPE TY_FIELD,
  171.       GT_FNHSL    TYPE STANDARD TABLE OF FIELDNAME,
  172.       GS_FNHSL    LIKE LINE OF GT_FNHSL,
  173.       GT_FNMSL    TYPE STANDARD TABLE OF FIELDNAME,
  174.       GS_FNMSL    LIKE LINE OF GT_FNMSL,
  175.       GT_SORTX    TYPE ABAP_SORTORDER_TAB,
  176.       GS_SORTX    TYPE ABAP_SORTORDER,
  177.       GT_0010     TYPE STANDARD TABLE OF ZFIT0010,
  178.       GS_0010     TYPE ZFIT0010,
  179.       GT_BSEG     TYPE STANDARD TABLE OF TY_BSEG,
  180.       GS_BSEG     TYPE TY_BSEG,
  181.       GT_T001     TYPE STANDARD TABLE OF TY_T001,
  182.       GS_T001     TYPE TY_T001,
  183.       GT_SKAT     TYPE STANDARD TABLE OF SKAT,
  184.       GS_SKAT     TYPE SKAT,
  185.       GT_LFA1     TYPE STANDARD TABLE OF LFA1,
  186.       GS_LFA1     TYPE LFA1,
  187.       GT_KNA1     TYPE STANDARD TABLE OF KNA1,
  188.       GS_KNA1     TYPE KNA1,
  189.       GT_T053S    TYPE STANDARD TABLE OF T053S,
  190.       GS_T053S    TYPE T053S,
  191.       GT_CSKT     TYPE STANDARD TABLE OF CSKT,
  192.       GS_CSKT     TYPE CSKT,
  193.       GT_AUFK     TYPE STANDARD TABLE OF AUFK,
  194.       GS_AUFK     TYPE AUFK,
  195.       GT_0013     TYPE STANDARD TABLE OF ZFIT0013,
  196.       GS_0013     TYPE ZFIT0013,
  197.       GT_0014     TYPE STANDARD TABLE OF ZFIT0014,
  198.       GS_0014     TYPE ZFIT0014,
  199.       GT_0015     TYPE STANDARD TABLE OF ZFIT0015,
  200.       GS_0015     TYPE ZFIT0015,
  201.       GT_0016     TYPE STANDARD TABLE OF ZFIT0016,
  202.       GS_0016     TYPE ZFIT0016,
  203.       GT_BNKA     TYPE STANDARD TABLE OF TY_BNKA,
  204.       GS_BNKA     TYPE TY_BNKA,
  205.       GT_T012T    TYPE STANDARD TABLE OF T012T,
  206.       GS_T012T    TYPE T012T,
  207.       GT_0017     TYPE STANDARD TABLE OF ZFIT0017,
  208.       GS_0017     TYPE ZFIT0017,
  209.       GT_TGSBT    TYPE STANDARD TABLE OF TGSBT,
  210.       GS_TGSBT    TYPE TGSBT,
  211.       GT_CEPCT    TYPE STANDARD TABLE OF CEPCT,
  212.       GS_CEPCT    TYPE CEPCT,
  213.       GT_T856T    TYPE STANDARD TABLE OF T856T,
  214.       GS_T856T    TYPE T856T,
  215.       GT_TFKBT    TYPE STANDARD TABLE OF TFKBT,
  216.       GS_TFKBT    TYPE TFKBT,
  217.       GT_TKA01    TYPE STANDARD TABLE OF TKA01,
  218.       GS_TKA01    TYPE TKA01,
  219.       GT_DETA     TYPE STANDARD TABLE OF TY_DETA,
  220.       GS_DETA     TYPE TY_DETA.
  221. DATA: GV_FIELD    TYPE FIELDNAME,
  222.       GV_DESC     TYPE CHAR100.

  223. *&---------------------------------------------------------------------*
  224. *& DEFINE FIELD-SYMBOLS
  225. *&---------------------------------------------------------------------*
  226. FIELD-SYMBOLS: <FS_TEMPT> TYPE STANDARD TABLE,
  227.                <FS_LISTT> TYPE STANDARD TABLE,
  228.                <FS_TABLE> TYPE STANDARD TABLE,
  229.                <FS_TEMPS> TYPE ANY,
  230.                <FS_LISTS> TYPE ANY,
  231.                <FS_DATA>  TYPE ANY.

  232. *&---------------------------------------------------------------------*
  233. *& DEFINE MACRO
  234. *&---------------------------------------------------------------------*
  235. DEFINE MCR_DEF_SCREEN.
  236.   SELECTION-SCREEN BEGIN OF LINE.
  237.   PARAMETERS: &1 TYPE NUMC1.
  238.   SELECTION-SCREEN POSITION 30.
  239.   SELECT-OPTIONS &2 FOR &3.
  240.   SELECTION-SCREEN COMMENT 03(15) &4 FOR FIELD &2.
  241.   SELECTION-SCREEN END OF LINE.
  242. END-OF-DEFINITION.

  243. *&---------------------------------------------------------------------*
  244. *& DEFINE SCREENS
  245. *&---------------------------------------------------------------------*
  246. SELECT-OPTIONS: S_BUKRS FOR FAGLFLEXA-RBUKRS,
  247.                 S_RYEAR FOR FAGLFLEXA-GJAHR NO-EXTENSION NO INTERVALS,
  248.                 S_POPER FOR FAGLFLEXA-POPER NO-EXTENSION,
  249.                 S_RACCT FOR FAGLFLEXA-RACCT.
  250. SELECTION-SCREEN BEGIN OF LINE.
  251. SELECTION-SCREEN COMMENT 01(08) TEXT-S01.
  252. SELECTION-SCREEN POSITION 35.
  253. * 一级
  254. PARAMETERS R_YJ RADIOBUTTON GROUP RB USER-COMMAND RBK.
  255. SELECTION-SCREEN COMMENT 37(04) TEXT-S02 FOR FIELD R_YJ.
  256. * 二级
  257. PARAMETERS R_EJ RADIOBUTTON GROUP RB.
  258. SELECTION-SCREEN COMMENT 44(04) TEXT-S03 FOR FIELD R_EJ.
  259. * 三级
  260. PARAMETERS R_SJ RADIOBUTTON GROUP RB.
  261. SELECTION-SCREEN COMMENT 51(04) TEXT-S04 FOR FIELD R_SJ.
  262. * 末级
  263. PARAMETERS R_MJ RADIOBUTTON GROUP RB.
  264. SELECTION-SCREEN COMMENT 58(04) TEXT-S05 FOR FIELD R_MJ.
  265. * 不显示科目
  266. PARAMETERS R_BX RADIOBUTTON GROUP RB.
  267. SELECTION-SCREEN COMMENT 66(10) TEXT-S06 FOR FIELD R_BX.
  268. SELECTION-SCREEN END OF LINE.
  269. SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-B01.
  270. SELECTION-SCREEN BEGIN OF LINE.
  271. * 显示描述
  272. SELECTION-SCREEN POSITION 1.
  273. PARAMETERS: CK_MS AS CHECKBOX.
  274. SELECTION-SCREEN COMMENT 2(08) TEXT-S08 FOR FIELD CK_MS.
  275. * 显示数量
  276. SELECTION-SCREEN POSITION 33.
  277. PARAMETERS: CK_SL AS CHECKBOX.
  278. SELECTION-SCREEN COMMENT 35(08) TEXT-S07 FOR FIELD CK_SL.
  279. * 显示零值
  280. SELECTION-SCREEN POSITION 65.
  281. PARAMETERS: CK_LZ AS CHECKBOX.
  282. SELECTION-SCREEN COMMENT 68(08) TEXT-S27 FOR FIELD CK_LZ.
  283. SELECTION-SCREEN END OF LINE.
  284. SELECTION-SCREEN END OF BLOCK BL1.
  285. SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-B02.
  286. MCR_DEF_SCREEN: P_A S_LIFNR FAGLFLEXA-ZZLIFNR  TEXT-S09,   "供应商
  287.                 P_B S_KUNNR FAGLFLEXA-ZZKUNNR  TEXT-S10.   "客户
  288. SELECTION-SCREEN BEGIN OF LINE.
  289. PARAMETERS: P_C TYPE NUMC1.
  290. SELECTION-SCREEN POSITION 30.
  291. SELECT-OPTIONS S_RSTGR FOR FAGLFLEXA-ZZRSTGR MATCHCODE OBJECT FOAP_CDITEM_T053R.
  292. SELECTION-SCREEN COMMENT 03(15) TEXT-S11 FOR FIELD S_RSTGR.
  293. SELECTION-SCREEN END OF LINE.                              "付款原因代码
  294. MCR_DEF_SCREEN: P_D S_RCNTR FAGLFLEXA-RCNTR    TEXT-S12.   "成本中心
  295. SELECTION-SCREEN BEGIN OF LINE.
  296. PARAMETERS: P_E TYPE NUMC1.
  297. SELECTION-SCREEN POSITION 30.
  298. SELECT-OPTIONS S_AUFNR FOR FAGLFLEXA-ZZAUFNR MATCHCODE OBJECT ORDE.
  299. SELECTION-SCREEN COMMENT 03(15) TEXT-S13 FOR FIELD S_AUFNR.
  300. SELECTION-SCREEN END OF LINE.                              "订单
  301. MCR_DEF_SCREEN: P_F S_ZCSTP FAGLFLEXA-ZZCSTP   TEXT-S14,   "费用类型
  302.                 P_G S_MTRTP FAGLFLEXA-ZZMTRTP  TEXT-S15,   "物料类型
  303.                 P_H S_ZIVTP FAGLFLEXA-ZZIVTP   TEXT-S16,   "发票类型
  304.                 P_I S_STFCH FAGLFLEXA-ZZSTFCH  TEXT-S17,   "员工性质
  305.                 P_J S_HBKID FAGLFLEXA-ZZHBKID1 TEXT-S18,   "银行
  306.                 P_K S_HKTID FAGLFLEXA-ZZHKTID1 TEXT-S19,   "账户
  307.                 P_L S_ZPJTP FAGLFLEXA-ZZPJTP   TEXT-S20,   "统筹项目
  308.                 P_M S_RBUSA FAGLFLEXA-RBUSA    TEXT-S21,   "业务范围
  309.                 P_N S_PRCTR FAGLFLEXA-PRCTR    TEXT-S22,   "利润中心
  310.                 P_O S_RMVCT FAGLFLEXA-RMVCT    TEXT-S23,   "事务类型
  311.                 P_P S_FAREA FAGLFLEXA-RFAREA   TEXT-S24,   "功能范围
  312.                 P_Q S_KOKRS FAGLFLEXA-KOKRS    TEXT-S25.   "控制范围
  313. SELECTION-SCREEN BEGIN OF LINE.
  314. PARAMETERS: P_X TYPE NUMC1 MODIF ID ACC.
  315. SELECTION-SCREEN POSITION 30.
  316. SELECTION-SCREEN COMMENT 03(08) TEXT-S26 FOR FIELD P_X MODIF ID ACC.
  317. SELECTION-SCREEN END OF LINE.
  318. SELECTION-SCREEN END OF BLOCK BL2.

  319. *----------------------------------------------------------------------*
  320. * INITIALIZATION
  321. *----------------------------------------------------------------------*
  322. INITIALIZATION.
  323.   PERFORM FRM_INIT_PROG.

  324. *----------------------------------------------------------------------*
  325. * AT SELECTION-SCREEN OUTPUT
  326. *----------------------------------------------------------------------*
  327. AT SELECTION-SCREEN OUTPUT.
  328.   PERFORM FRM_SET_SCREEN.

  329. *----------------------------------------------------------------------*
  330. * AT SELECTION-SCREEN
  331. *----------------------------------------------------------------------*
  332. AT SELECTION-SCREEN.
  333.   PERFORM FRM_CHECK_SCREEN.

  334. *&---------------------------------------------------------------------*
  335. * START-OF-SELECTION
  336. *&---------------------------------------------------------------------*
  337. START-OF-SELECTION.
  338.   PERFORM FRM_GET_RACCT.
  339.   PERFORM FRM_GET_FIELD.
  340.   PERFORM FRM_GET_DESC.
  341.   PERFORM FRM_GET_TABLE.
  342.   PERFORM FRM_EDT_DATA.
  343.   PERFORM FRM_DSP_LIST.

  344. *&---------------------------------------------------------------------*
  345. *&      Form  FRM_INIT_PROG
  346. *&---------------------------------------------------------------------*
  347. *       text
  348. *----------------------------------------------------------------------*
  349. FORM FRM_INIT_PROG .
  350.   DATA: LS_RESTRICT TYPE SSCR_RESTRICT,
  351.         LS_OPTLIST  TYPE SSCR_OPT_LIST,
  352.         LS_ASS      TYPE SSCR_ASS.
  353.   S_RYEAR-SIGN   = 'I'.
  354.   S_RYEAR-OPTION = 'EQ'.
  355.   S_RYEAR-LOW = SY-DATUM.
  356.   APPEND S_RYEAR.
  357.   LS_OPTLIST-NAME       = 'RACCT'.
  358.   LS_OPTLIST-OPTIONS-CP = ABAP_TRUE.
  359.   LS_OPTLIST-OPTIONS-EQ = ABAP_TRUE.
  360.   LS_OPTLIST-OPTIONS-BT = ABAP_TRUE.
  361.   APPEND LS_OPTLIST TO LS_RESTRICT-OPT_LIST_TAB.
  362.   LS_ASS-KIND    = 'S'.
  363.   LS_ASS-NAME    = 'S_RACCT'.
  364.   LS_ASS-SG_MAIN = 'I'.
  365.   LS_ASS-SG_ADDY = SPACE.
  366.   LS_ASS-OP_MAIN = 'RACCT'.
  367.   APPEND LS_ASS TO LS_RESTRICT-ASS_TAB.
  368.   CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
  369.     EXPORTING
  370.       RESTRICTION            = LS_RESTRICT
  371.     EXCEPTIONS
  372.       TOO_LATE               = 1St
  373.       REPEATED               = 2
  374.       SELOPT_WITHOUT_OPTIONS = 3
  375.       SELOPT_WITHOUT_SIGNS   = 4
  376.       INVALID_SIGN           = 5
  377.       EMPTY_OPTION_LIST      = 6
  378.       INVALID_KIND           = 7
  379.       REPEATED_KIND_A        = 8
  380.       OTHERS                 = 9.
  381.   IF SY-SUBRC <> 0.
  382.     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  383.           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  384.   ENDIF.
  385. ENDFORM.                    " FRM_INIT_PROG

  386. *&---------------------------------------------------------------------*
  387. *&      Form  FRM_SET_SCREEN
  388. *&---------------------------------------------------------------------*
  389. *       text
  390. *----------------------------------------------------------------------*
  391. FORM FRM_SET_SCREEN .
  392.   LOOP AT SCREEN.
  393.     IF SCREEN-GROUP1 EQ 'ACC'.
  394.       IF R_BX IS NOT INITIAL.
  395.         SCREEN-INPUT = '1'.
  396.       ELSE.
  397.         SCREEN-INPUT = '0'.
  398.         CLEAR P_X.
  399.       ENDIF.
  400.     ENDIF.
  401.     IF SCREEN-NAME EQ 'S_BURKS-LOW'
  402.     OR SCREEN-NAME EQ 'S_RYEAR-LOW'
  403.     OR SCREEN-NAME EQ 'S_POPER-LOW'
  404.     OR SCREEN-NAME EQ 'S_RACCT-LOW'.
  405.       SCREEN-REQUIRED = '2'.
  406.     ENDIF.
  407.     MODIFY SCREEN.
  408.   ENDLOOP.
  409. ENDFORM.                    " FRM_SET_SCREEN

  410. *&---------------------------------------------------------------------*
  411. *&      Form  FRM_CHECK_SCREEN
  412. *&---------------------------------------------------------------------*
  413. *       text
  414. *----------------------------------------------------------------------*
  415. FORM FRM_CHECK_SCREEN .
  416.   DATA: LV_SEQ   TYPE I,
  417.         LV_FIELD TYPE FIELDNAME,
  418.         LT_SEQ   TYPE STANDARD TABLE OF NUMC1,
  419.         LS_SEQ   LIKE LINE OF LT_SEQ.
  420.   FIELD-SYMBOLS: <LF_FIELD> TYPE ANY.
  421.   CHECK SY-UCOMM NE 'RBK'
  422.     AND SY-UCOMM NE SPACE.
  423.   IF S_BUKRS[] IS INITIAL.
  424.     SET CURSOR FIELD 'S_BURKS-LOW'.
  425.     MESSAGE E055(00).
  426. *   填入所有必需的条目字段
  427.   ENDIF.
  428.   IF S_RYEAR[] IS INITIAL.
  429.     SET CURSOR FIELD 'S_RYEAR-LOW'.
  430.     MESSAGE E055(00).
  431. *   填入所有必需的条目字段
  432.   ENDIF.
  433.   IF S_POPER[] IS INITIAL.
  434.     SET CURSOR FIELD 'S_POPER-LOW'.
  435.     MESSAGE E055(00).
  436. *   填入所有必需的条目字段
  437.   ENDIF.
  438.   IF S_RACCT-LOW IS INITIAL.
  439.     SET CURSOR FIELD 'S_RACCT-LOW'.
  440.     MESSAGE E055(00).
  441. *   填入所有必需的条目字段
  442.   ENDIF.
  443.   SELECT COUNT(*)
  444.     FROM ZFIT0010
  445.    WHERE HKONT IN S_RACCT.
  446.   IF SY-SUBRC NE 0.
  447.     MESSAGE '输入科目在科目层级表中未维护' TYPE 'E'.
  448.   ENDIF.
  449. * 判断科目级次是否大于输入的科目级次
  450.   IF R_BX IS INITIAL.
  451.     LOOP AT S_RACCT.
  452.       IF  S_RACCT-LOW  NA '*'
  453.       AND S_RACCT-HIGH NA '*'.
  454.         CASE ABAP_TRUE.
  455.           WHEN R_YJ.
  456.             LV_SEQ = 1.
  457.           WHEN R_EJ.
  458.             LV_SEQ = 2.
  459.           WHEN R_SJ.
  460.             LV_SEQ = 3.
  461.           WHEN R_MJ.
  462.             LV_SEQ = 4.
  463.           WHEN OTHERS.
  464.         ENDCASE.
  465.         SELECT COUNT(*)
  466.           FROM ZFIT0010
  467.          WHERE HKONT IN S_RACCT
  468.            AND KMJC  GT LV_SEQ.
  469.         IF SY-SUBRC EQ 0.
  470.           MESSAGE '输入科目含有低于选择级次的科目' TYPE 'E'.
  471.           LEAVE LIST-PROCESSING.
  472.         ENDIF.
  473.       ENDIF.
  474.     ENDLOOP.
  475.   ENDIF.
  476. * 检查重复输入
  477.   DO.
  478.     LV_SEQ = SY-INDEX - 1.
  479.     IF LV_SEQ GE STRLEN( SY-ABCDE ).
  480.       EXIT.
  481.     ENDIF.
  482.     LV_FIELD = 'P_' && SY-ABCDE+LV_SEQ(1).
  483.     ASSIGN (LV_FIELD) TO <LF_FIELD>.
  484.     IF SY-SUBRC NE 0.
  485.       EXIT.
  486.     ELSE.
  487.       IF <LF_FIELD> NE '0'.
  488.         LS_SEQ = <LF_FIELD>.
  489.         APPEND LS_SEQ TO LT_SEQ.
  490.         CLEAR LS_SEQ.
  491.       ENDIF.
  492.     ENDIF.
  493.   ENDDO.
  494.   CLEAR LV_SEQ.
  495.   DESCRIBE TABLE LT_SEQ LINES LV_SEQ.
  496.   DELETE ADJACENT DUPLICATES FROM LT_SEQ COMPARING ALL FIELDS.
  497.   IF LV_SEQ NE LINES( LT_SEQ ).
  498.     MESSAGE '输入的汇总层次存在重复!请重新输入' TYPE 'E'.
  499.   ENDIF.
  500. ENDFORM.                    " FRM_CHECK_SCREEN

  501. *&---------------------------------------------------------------------*
  502. *&      Form  FRM_GET_RACCT
  503. *&---------------------------------------------------------------------*
  504. *       text
  505. *----------------------------------------------------------------------*
  506. FORM FRM_GET_RACCT .
  507.   DATA: RT_KMJC  TYPE RANGE OF ZKMJC,
  508.         RS_KMJC  LIKE LINE OF RT_KMJC,
  509.         RT_MJBZ  TYPE RANGE OF ZMJBZ,
  510.         RS_MJBZ  LIKE LINE OF RT_MJBZ,
  511.         RT_HKONT TYPE RANGE OF HKONT,
  512.         RS_HKONT LIKE LINE OF RT_HKONT.
  513.   DATA: LV_LOW   TYPE HKONT,
  514.         LV_HIGH  TYPE HKONT.
  515.   DEFINE MCR_SET_RANGE.
  516.     &1-SIGN   = 'I'.
  517.     &1-OPTION = &3.
  518.     &1-LOW    = &4.
  519.     &1-HIGH   = &5.
  520.     APPEND &1 TO &2.
  521.     CLEAR &1.
  522.   END-OF-DEFINITION.
  523. * 期间检查
  524.   IF S_POPER-HIGH IS INITIAL.
  525.     S_POPER-HIGH = S_POPER-LOW.
  526.   ENDIF.
  527.   IF R_BX IS NOT INITIAL.
  528.     RT_RACCT = S_RACCT[].
  529.   ELSE.
  530.     LOOP AT S_RACCT.
  531. *     输入的科目含有“*”的情况
  532.       IF S_RACCT-LOW  CA '*'
  533.       OR S_RACCT-HIGH CA '*'.
  534.         RT_HKONT = S_RACCT[].
  535.         CASE ABAP_TRUE.
  536.           WHEN R_YJ.
  537.             MCR_SET_RANGE RS_KMJC RT_KMJC 'GE' '1' ' '.
  538.           WHEN R_EJ.
  539.             MCR_SET_RANGE RS_KMJC RT_KMJC 'GE' '2' ' '.
  540.           WHEN R_SJ.
  541.             MCR_SET_RANGE RS_KMJC RT_KMJC 'GE' '3' ' '.
  542.           WHEN R_MJ.
  543.             MCR_SET_RANGE RS_MJBZ RT_MJBZ 'EQ' 'Y' ' '.
  544.           WHEN OTHERS.
  545.         ENDCASE.
  546. *     不含“*”的情况
  547.       ELSE.
  548. *       输入科目上限的情况,添加上限范围
  549.         IF S_RACCT-HIGH IS NOT INITIAL.
  550.           CASE ABAP_TRUE.
  551.             WHEN R_YJ.
  552.               LV_LOW  = S_RACCT-LOW+0(4)  && '*'.
  553.               LV_HIGH = S_RACCT-HIGH+0(4) && '*'.
  554.               MCR_SET_RANGE RS_HKONT RT_HKONT 'BT' LV_LOW LV_HIGH.
  555.             WHEN R_EJ.
  556.               LV_LOW  = S_RACCT-LOW+0(6)  && '*'.
  557.               LV_HIGH = S_RACCT-HIGH+0(6) && '*'.
  558.               MCR_SET_RANGE RS_HKONT RT_HKONT 'BT' LV_LOW LV_HIGH.
  559.             WHEN R_SJ.
  560.               LV_LOW  = S_RACCT-LOW+0(8)  && '*'.
  561.               LV_HIGH = S_RACCT-HIGH+0(8) && '*'.
  562.               MCR_SET_RANGE RS_HKONT RT_HKONT 'BT' LV_LOW LV_HIGH.
  563.             WHEN R_MJ.
  564.               RT_HKONT = S_RACCT[].
  565.               MCR_SET_RANGE RS_MJBZ RT_MJBZ 'EQ' 'Y' ' '.
  566.             WHEN OTHERS.
  567.           ENDCASE.
  568.         ELSE.
  569.           CASE ABAP_TRUE.
  570.             WHEN R_YJ.
  571.               LV_LOW = S_RACCT-LOW+0(4) && '*'.
  572.               MCR_SET_RANGE RS_HKONT RT_HKONT 'CP' LV_LOW ' '.
  573.             WHEN R_EJ.
  574.               LV_LOW = S_RACCT-LOW+0(6) && '*'.
  575.               MCR_SET_RANGE RS_HKONT RT_HKONT 'CP' LV_LOW ' '.
  576.             WHEN R_SJ.
  577.               LV_LOW = S_RACCT-LOW+0(8) && '*'.
  578.               MCR_SET_RANGE RS_HKONT RT_HKONT 'CP' LV_LOW ' '.
  579.             WHEN R_MJ.
  580.               RT_HKONT = S_RACCT[].
  581.               MCR_SET_RANGE RS_MJBZ RT_MJBZ 'EQ' 'Y' ' '.
  582.             WHEN OTHERS.
  583.           ENDCASE.
  584.         ENDIF.
  585.       ENDIF.
  586.     ENDLOOP.
  587. *   取得科目范围
  588.     SELECT *
  589.       INTO TABLE GT_0010
  590.       FROM ZFIT0010
  591.      WHERE KTOPL EQ 'SNJT'.
  592.     IF SY-SUBRC EQ 0.
  593.       LOOP AT GT_0010 INTO GS_0010
  594.         WHERE HKONT IN RT_HKONT
  595.           AND KMJC  IN RT_KMJC
  596.           AND MJBZ  IN RT_MJBZ.
  597.         MCR_SET_RANGE RS_RACCT RT_RACCT 'EQ' GS_0010-HKONT ' '.
  598.       ENDLOOP.
  599.       IF SY-SUBRC NE 0.
  600.         MESSAGE '输入的科目范围为空' TYPE 'S' DISPLAY LIKE 'E'.
  601.         LEAVE LIST-PROCESSING.
  602.       ENDIF.
  603.     ENDIF.
  604.   ENDIF.
  605. ENDFORM.                    " FRM_GET_RACCT

  606. *&---------------------------------------------------------------------*
  607. *&      Form  FRM_GET_FIELD
  608. *&---------------------------------------------------------------------*
  609. *       text
  610. *----------------------------------------------------------------------*
  611. FORM FRM_GET_FIELD .
  612.   DATA: LT_COMPONENT TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE,
  613.         LS_COMPONENT TYPE CL_ABAP_STRUCTDESCR=>COMPONENT,
  614.         LR_TYPEDESCR TYPE REF TO CL_ABAP_TYPEDESCR,
  615.         LR_STRDESCR  TYPE REF TO CL_ABAP_STRUCTDESCR,
  616.         LR_TABDESCR  TYPE REF TO CL_ABAP_TABLEDESCR,
  617.         LR_DATA      TYPE REF TO DATA,
  618.         LV_NAME      TYPE FIELDNAME,
  619.         LS_FIELD     TYPE TY_FIELD,
  620.         LV_FIELD     TYPE FIELDNAME,
  621.         LV_SPOS      TYPE I.
  622.   DEFINE MCR_SET_FIELD.
  623.     GS_FIELD-DSP  = &2.
  624.     GS_FIELD-SUM  = &3.
  625.     GS_FIELD-FLAG = &4.
  626.     GS_FIELD-NAME = &5.
  627.     GS_FIELD-TYPE = &6.
  628.     GS_FIELD-TEXT = &7.
  629.     CASE GS_FIELD-FLAG.
  630. *     在值字段名后插入描述字段名
  631.       WHEN 'T'.
  632.         LV_NAME = GS_FIELD-NAME.
  633.         SHIFT LV_NAME RIGHT DELETING TRAILING SPACE.
  634.         SHIFT LV_NAME BY 1 PLACES RIGHT.
  635.         CONDENSE LV_NAME.
  636.         CLEAR LS_FIELD.
  637.         READ TABLE GT_FIELD INTO LS_FIELD
  638.           WITH KEY NAME = LV_NAME.
  639.         IF SY-SUBRC EQ 0.
  640.           GS_FIELD-SEQ = LS_FIELD-SEQ+0(1) && 1.
  641.           INSERT GS_FIELD INTO GT_FIELD INDEX SY-TABIX.
  642.         ENDIF.
  643.       WHEN 'H'.
  644.         GS_FIELD-SEQ = &1 && 0.
  645.         APPEND GS_FIELD TO GT_FIELD.
  646.         IF GS_FIELD-DSP IS NOT INITIAL.
  647.           GS_FIELD-NAME = GS_FIELD-NAME && 'X'.
  648.           GS_FIELD-FLAG = 'N'.
  649.           APPEND GS_FIELD TO GT_FIELD.
  650.         ENDIF.
  651.       WHEN OTHERS.
  652.         GS_FIELD-SEQ = &1 && 0.
  653.         APPEND GS_FIELD TO GT_FIELD.
  654.     ENDCASE.
  655. *   统计计算字段名
  656.     IF GS_FIELD-TEXT IS INITIAL.
  657.       CASE GS_FIELD-NAME+0(3).
  658.         WHEN 'HSL'.
  659.           GS_FNHSL = GS_FIELD-NAME.
  660.           APPEND GS_FNHSL TO GT_FNHSL.
  661.           CLEAR GS_FNHSL.
  662.         WHEN 'MSL'.
  663.           GS_FNMSL = GS_FIELD-NAME.
  664.           APPEND GS_FNMSL TO GT_FNMSL.
  665.           CLEAR GS_FNMSL.
  666.         WHEN OTHERS.
  667.       ENDCASE.
  668.     ENDIF.
  669.     CLEAR: GS_FIELD, LV_NAME.
  670.   END-OF-DEFINITION.
  671. * 只有选择不显示科目才能选择科目做汇总依据
  672. *  MCR_SET_FIELD: ' ' '01' ' ' 'H' 'RBUKRS' 'BUKRS' '公司代码'.
  673.   IF R_BX IS NOT INITIAL.
  674.     MCR_SET_FIELD: P_X P_X  ' ' 'H' 'RACCT' 'RACCT' '科目号码'.
  675.   ELSE.
  676.     MCR_SET_FIELD: ' ' '02' ' ' 'H' 'RACCT' 'RACCT' '科目号码'.
  677.   ENDIF.
  678.   MCR_SET_FIELD: P_A P_A ' ' 'H' 'ZZLIFNR' 'LIFNR'   '供应商',
  679.                  P_B P_B ' ' 'H' 'ZZKUNNR' 'KUNNR'   '客户',
  680.                  P_C P_C ' ' 'H' 'ZZRSTGR' 'RSTGR'   '付款原因代码',
  681.                  P_D P_D ' ' 'H' 'RCNTR'   'KOSTL'   '成本中心',
  682.                  P_E P_E ' ' 'H' 'ZZAUFNR' 'AUFNR'   '订单',
  683.                  P_F P_F ' ' 'H' 'ZZCSTP'  'ZZCSTP'  '费用类型',
  684.                  P_G P_G ' ' 'H' 'ZZMTRTP' 'ZZMTRTP' '物料类型',
  685.                  P_H P_H ' ' 'H' 'ZZIVTP'  'ZZIVTP'  '发票类型',
  686.                  P_I P_I ' ' 'H' 'ZZSTFCH' 'ZZSTFCH' '员工性质',
  687.                  P_J P_J ' ' 'H' 'ZZHBKID' 'HBKID'   '银行',
  688.                  P_K P_K ' ' 'H' 'ZZHKTID' 'HKTID'   '账户',
  689.                  P_L P_L ' ' 'H' 'ZZPJTP'  'ZZPJTP'  '统筹项目',
  690.                  P_M P_M ' ' 'H' 'RBUSA'   'GSBER'   '业务范围',
  691.                  P_N P_N ' ' 'H' 'PRCTR'   'LTEXT'   '利润中心',
  692.                  P_O P_O ' ' 'H' 'RMVCT'   'RMVCT'   '事务类型',
  693.                  P_P P_P ' ' 'H' 'RFAREA'  'FKBER'   '功能范围',
  694.                  P_Q P_Q ' ' 'H' 'KOKRS'   'KOKRS'   '控制范围'.
  695. * 如果点选不显示科目检查必输汇总依据
  696.   IF R_BX IS NOT INITIAL.
  697.     LOOP AT GT_FIELD TRANSPORTING NO FIELDS
  698.       WHERE SEQ IS NOT INITIAL.
  699.       EXIT.
  700.     ENDLOOP.
  701.     IF SY-SUBRC NE 0.
  702.       MESSAGE '请选择汇总依据字段' TYPE 'S' DISPLAY LIKE 'E'.
  703.       LEAVE LIST-PROCESSING.
  704.     ENDIF.
  705.   ENDIF.
  706.   IF CK_MS IS NOT INITIAL.
  707. *   只有选择不显示科目才能选择科目做汇总依据
  708.     IF R_BX IS NOT INITIAL.
  709.       MCR_SET_FIELD: P_X P_X  ' ' 'T' 'RACCTT' 'TXT50_SKAT' '科目号码描述'. "SKAT
  710.     ELSE.
  711.       MCR_SET_FIELD: ' ' '03' ' ' 'T' 'RACCTT' 'TXT50_SKAT' '科目号码描述'. "SKAT
  712.     ENDIF.
  713.     MCR_SET_FIELD: ' ' P_A ' ' 'T' 'ZZLIFNRT'  'NAME1_GP'   '供应商描述',   "LFA1
  714.                    ' ' P_B ' ' 'T' 'ZZKUNNRT'  'NAME1_GP'   '客户描述',     "KNA1
  715.                    ' ' P_C ' ' 'T' 'ZZRSTGRT'  'TXT20_053'  '原因代码描述', "T053S
  716.                    ' ' P_D ' ' 'T' 'RCNTRT'    'KTEXT'      '成本中心描述', "CSKT
  717.                    ' ' P_E ' ' 'T' 'ZZAUFNRT'  'AUFTEXT'    '订单描述',     "AUFK
  718.                    ' ' P_F ' ' 'T' 'ZZCSTPT'   'ZFIE0004'   '费用类型描述', "ZFIT0014
  719.                    ' ' P_G ' ' 'T' 'ZZMTRTPT'  'ZFIE0006'   '物料类型描述', "ZFIT0016
  720.                    ' ' P_H ' ' 'T' 'ZZIVTPT'   'ZFIE0003'   '发票类型描述', "ZFIT0013
  721.                    ' ' P_I ' ' 'T' 'ZZSTFCHT'  'ZFIE0005'   '员工性质描述', "ZFIT0015
  722.                    ' ' P_J ' ' 'T' 'ZZHBKIDT'  'BANKA'      '银行描述',     "BNKA
  723.                    ' ' P_K ' ' 'T' 'ZZHKTIDT'  'FIBL_TXT50' '账户描述',     "T012T
  724.                    ' ' P_L ' ' 'T' 'ZZPJTPT'   'ZFIE0007'   '统筹项目描述', "ZFIT0017
  725.                    ' ' P_M ' ' 'T' 'RBUSAT'    'GTEXT'      '业务范围描述', "TGSBT
  726.                    ' ' P_N ' ' 'T' 'PRCTRT'    'LTEXT'      '利润中心描述', "CEPCT
  727.                    ' ' P_O ' ' 'T' 'RMVCTT'    'RMVCT_TXT'  '事务类型描述', "T856T
  728.                    ' ' P_P ' ' 'T' 'RFAREAT'   'FKBTX'      '功能范围描述', "TFKBT
  729.                    ' ' P_Q ' ' 'T' 'KOKRST'    'BEZEI'      '控制范围描述'. "TKA01
  730.   ENDIF.
  731.   MCR_SET_FIELD: '9' '01' 'X' 'J' 'QCJE'  'HSLXX12' '期初余额',
  732.                  '9' '02' 'X' 'J' 'BQJES' 'HSLXX12' '本期借方发生额',
  733.                  '9' '03' 'X' 'J' 'BQJEH' 'HSLXX12' '本期贷方发生额',
  734.                  '9' '04' 'X' 'J' 'LJJES' 'HSLXX12' '累计借方发生额',
  735.                  '9' '05' 'X' 'J' 'LJJEH' 'HSLXX12' '累计贷方发生额',
  736.                  '9' '06' 'X' 'J' 'QMJE'  'HSLXX12' '期末余额',
  737.                  '9' '07' 'X' 'S' 'QCSL'  'MSLXX12' '期初数量',
  738.                  '9' '08' 'X' 'S' 'BQSLS' 'MSLXX12' '本期借方数量',
  739.                  '9' '09' 'X' 'S' 'BQSLH' 'MSLXX12' '本期贷方数量',
  740.                  '9' '10' 'X' 'S' 'LJSLS' 'MSLXX12' '累计借方数量',
  741.                  '9' '11' 'X' 'S' 'LJSLH' 'MSLXX12' '累计贷方数量',
  742.                  '9' '12' 'X' 'S' 'QMSL'  'MSLXX12' '期末数量',
  743.                  '9' '99' ' ' ' ' 'DRCRK' 'SHKZG'   'X',
  744.                  '9' '99' ' ' ' ' 'HSLVT' 'HSLXX12' '',
  745.                  '9' '99' ' ' ' ' 'HSL01' 'HSLXX12' '',
  746.                  '9' '99' ' ' ' ' 'HSL02' 'HSLXX12' '',
  747.                  '9' '99' ' ' ' ' 'HSL03' 'HSLXX12' '',
  748.                  '9' '99' ' ' ' ' 'HSL04' 'HSLXX12' '',
  749.                  '9' '99' ' ' ' ' 'HSL05' 'HSLXX12' '',
  750.                  '9' '99' ' ' ' ' 'HSL06' 'HSLXX12' '',
  751.                  '9' '99' ' ' ' ' 'HSL07' 'HSLXX12' '',
  752.                  '9' '99' ' ' ' ' 'HSL08' 'HSLXX12' '',
  753.                  '9' '99' ' ' ' ' 'HSL09' 'HSLXX12' '',
  754.                  '9' '99' ' ' ' ' 'HSL10' 'HSLXX12' '',
  755.                  '9' '99' ' ' ' ' 'HSL11' 'HSLXX12' '',
  756.                  '9' '99' ' ' ' ' 'HSL12' 'HSLXX12' '',
  757.                  '9' '99' ' ' ' ' 'HSL13' 'HSLXX12' '',
  758.                  '9' '99' ' ' ' ' 'HSL14' 'HSLXX12' '',
  759.                  '9' '99' ' ' ' ' 'HSL15' 'HSLXX12' '',
  760.                  '9' '99' ' ' ' ' 'HSL16' 'HSLXX12' ''.
  761.   IF CK_SL IS NOT INITIAL.
  762.     MCR_SET_FIELD: '9' '99' ' ' ' ' 'MSLVT' 'MSLXX12' '',
  763.                    '9' '99' ' ' ' ' 'MSL01' 'MSLXX12' '',
  764.                    '9' '99' ' ' ' ' 'MSL02' 'MSLXX12' '',
  765.                    '9' '99' ' ' ' ' 'MSL03' 'MSLXX12' '',
  766.                    '9' '99' ' ' ' ' 'MSL04' 'MSLXX12' '',
  767.                    '9' '99' ' ' ' ' 'MSL05' 'MSLXX12' '',
  768.                    '9' '99' ' ' ' ' 'MSL06' 'MSLXX12' '',
  769.                    '9' '99' ' ' ' ' 'MSL07' 'MSLXX12' '',
  770.                    '9' '99' ' ' ' ' 'MSL08' 'MSLXX12' '',
  771.                    '9' '99' ' ' ' ' 'MSL09' 'MSLXX12' '',
  772.                    '9' '99' ' ' ' ' 'MSL10' 'MSLXX12' '',
  773.                    '9' '99' ' ' ' ' 'MSL11' 'MSLXX12' '',
  774.                    '9' '99' ' ' ' ' 'MSL12' 'MSLXX12' '',
  775.                    '9' '99' ' ' ' ' 'MSL13' 'MSLXX12' '',
  776.                    '9' '99' ' ' ' ' 'MSL14' 'MSLXX12' '',
  777.                    '9' '99' ' ' ' ' 'MSL15' 'MSLXX12' '',
  778.                    '9' '99' ' ' ' ' 'MSL16' 'MSLXX12' ''.
  779.   ENDIF.
  780.   SORT GT_FIELD BY SEQ ASCENDING DSP ASCENDING.
  781.   GT_FIELDX = GT_FIELD.
  782.   DELETE GT_FIELDX WHERE FLAG NE 'N'.
  783. * 设置动态内表
  784.   LOOP AT GT_FIELD INTO GS_FIELD.
  785. *   汇总依据字段排序设置
  786.     CASE  GS_FIELD-FLAG.
  787.       WHEN 'H'.
  788.         IF GS_FIELD-DSP IS NOT INITIAL.
  789.           GS_SORTX-NAME = GS_FIELD-NAME.
  790.           APPEND GS_SORTX TO GT_SORTX.
  791.           CLEAR GS_SORTX.
  792.         ENDIF.
  793.         GV_FIELD = GS_FIELD-NAME.
  794.       WHEN 'N'.
  795.         LV_SPOS = LV_SPOS + 1.
  796.         GS_SORT-SPOS      = LV_SPOS.
  797.         GS_SORT-FIELDNAME = GS_FIELD-NAME.
  798.         GS_SORT-SUBTOT    = ABAP_TRUE.
  799.         GS_SORT-UP        = ABAP_TRUE.
  800.         APPEND GS_SORT TO GT_SORT.
  801.         CLEAR GS_SORT.
  802.       WHEN OTHERS.
  803.     ENDCASE.
  804. *   显示的字段生成动态内表
  805.     IF GS_FIELD-DSP IS NOT INITIAL.
  806.       LR_TYPEDESCR       = CL_ABAP_ELEMDESCR=>DESCRIBE_BY_NAME( GS_FIELD-TYPE ).
  807.       LS_COMPONENT-NAME  = GS_FIELD-NAME.
  808.       LS_COMPONENT-TYPE ?= LR_TYPEDESCR.
  809.       APPEND LS_COMPONENT TO LT_COMPONENT.
  810.       CLEAR LS_COMPONENT.
  811. *     数量是否显示
  812.       CASE GS_FIELD-FLAG.
  813.         WHEN SPACE.
  814.           CLEAR GS_FIELD.
  815.           CONTINUE.
  816.         WHEN 'S'.
  817.           IF CK_SL IS NOT INITIAL.
  818.             PERFORM FRM_GET_FCAT.
  819.           ENDIF.
  820.         WHEN OTHERS.
  821.           PERFORM FRM_GET_FCAT.
  822.       ENDCASE.
  823.     ENDIF.
  824.     CLEAR GS_FIELD.
  825.   ENDLOOP.
  826.   LV_FIELD = GV_FIELD && 'X'.
  827.   GS_SORT-EXPA = ABAP_TRUE.
  828.   MODIFY GT_SORT FROM GS_SORT TRANSPORTING EXPA WHERE FIELDNAME EQ LV_FIELD.
  829.   LR_STRDESCR = CL_ABAP_STRUCTDESCR=>CREATE( P_COMPONENTS = LT_COMPONENT ).
  830.   CREATE DATA LR_DATA TYPE HANDLE LR_STRDESCR.
  831.   ASSIGN LR_DATA->* TO <FS_TEMPS>.
  832.   CREATE DATA LR_DATA TYPE HANDLE LR_STRDESCR.
  833.   ASSIGN LR_DATA->* TO <FS_LISTS>.
  834.   LR_TABDESCR = CL_ABAP_TABLEDESCR=>CREATE( LR_STRDESCR ).
  835.   CREATE DATA LR_DATA TYPE HANDLE LR_TABDESCR.
  836.   ASSIGN LR_DATA->* TO <FS_TEMPT>.
  837.   CREATE DATA LR_DATA TYPE HANDLE LR_TABDESCR.
  838.   ASSIGN LR_DATA->* TO <FS_LISTT>.
  839. ENDFORM.                    " FRM_GET_FIELD

  840. *&---------------------------------------------------------------------*
  841. *&      Form  FRM_GET_DESC
  842. *&---------------------------------------------------------------------*
  843. *       text
  844. *----------------------------------------------------------------------*
  845. FORM FRM_GET_DESC .
  846.   SELECT SAKNR
  847.          TXT20
  848.     INTO CORRESPONDING FIELDS OF TABLE GT_SKAT
  849.     FROM SKAT
  850.    WHERE KTOPL EQ 'SNJT'
  851.      AND SPRAS EQ SY-LANGU.
  852.   IF P_A IS NOT INITIAL.
  853.     SELECT LIFNR
  854.            NAME1
  855.       INTO CORRESPONDING FIELDS OF TABLE GT_LFA1
  856.       FROM LFA1.
  857.   ENDIF.
  858.   IF P_B IS NOT INITIAL.
  859.     SELECT KUNNR
  860.            NAME1
  861.       INTO CORRESPONDING FIELDS OF TABLE GT_KNA1
  862.       FROM KNA1.
  863.   ENDIF.
  864.   IF P_C IS NOT INITIAL.
  865.     SELECT BUKRS
  866.            RSTGR
  867.            TXT20
  868.       INTO CORRESPONDING FIELDS OF TABLE GT_T053S
  869.       FROM T053S
  870.      WHERE SPRAS EQ SY-LANGU
  871.        AND BUKRS IN S_BUKRS.
  872.   ENDIF.
  873.   IF P_D IS NOT INITIAL.
  874.     SELECT KOSTL
  875.            KTEXT
  876.       INTO CORRESPONDING FIELDS OF TABLE GT_CSKT
  877.       FROM CSKT
  878.      WHERE SPRAS EQ SY-LANGU
  879.        AND KOKRS EQ 'SNJT'.
  880.   ENDIF.
  881.   IF P_E IS NOT INITIAL.
  882.     SELECT AUFNR
  883.            KTEXT
  884.       INTO CORRESPONDING FIELDS OF TABLE GT_AUFK
  885.       FROM AUFK.
  886.   ENDIF.
  887.   IF P_F IS NOT INITIAL.
  888.     SELECT ZZCSTP
  889.            TXT50
  890.       INTO CORRESPONDING FIELDS OF TABLE GT_0014
  891.       FROM ZFIT0014.
  892.   ENDIF.
  893.   IF P_G IS NOT INITIAL.
  894.     SELECT ZZMTRTP
  895.            TXT20
  896.       INTO CORRESPONDING FIELDS OF TABLE GT_0016
  897.       FROM ZFIT0016.
  898.   ENDIF.
  899.   IF P_H IS NOT INITIAL.
  900.     SELECT ZZIVTP
  901.            TXT20
  902.       INTO CORRESPONDING FIELDS OF TABLE GT_0013
  903.       FROM ZFIT0013.
  904.   ENDIF.
  905.   IF P_I IS NOT INITIAL.
  906.     SELECT ZZSTFCH
  907.            TXT20
  908.       INTO CORRESPONDING FIELDS OF TABLE GT_0015
  909.       FROM ZFIT0015.
  910.   ENDIF.
  911.   IF P_J IS NOT INITIAL.
  912.     SELECT T012~BUKRS
  913.            T012~HBKID
  914.            BNKA~BANKA
  915.       INTO CORRESPONDING FIELDS OF TABLE GT_BNKA
  916.       FROM BNKA
  917.       JOIN T012 ON BNKA~BANKS EQ T012~BANKS
  918.                AND BNKA~BANKL EQ T012~BANKL
  919.      WHERE T012~BUKRS IN S_BUKRS.
  920.   ENDIF.
  921.   IF P_K IS NOT INITIAL.
  922.     SELECT BUKRS
  923.            HBKID
  924.            HKTID
  925.            TEXT1
  926.       INTO CORRESPONDING FIELDS OF TABLE GT_T012T
  927.       FROM T012T
  928.      WHERE BUKRS IN S_BUKRS
  929.        AND SPRAS EQ SY-LANGU.
  930.   ENDIF.
  931.   IF P_L IS NOT INITIAL.
  932.     SELECT ZZPJTP
  933.            TXT50
  934.       INTO CORRESPONDING FIELDS OF TABLE GT_0017
  935.       FROM ZFIT0017.
  936.   ENDIF.
  937.   IF P_M IS NOT INITIAL.
  938.     SELECT GSBER
  939.            GTEXT
  940.       INTO CORRESPONDING FIELDS OF TABLE GT_TGSBT
  941.       FROM TGSBT
  942.      WHERE SPRAS EQ SY-LANGU.
  943.   ENDIF.
  944.   IF P_N IS NOT INITIAL.
  945.     SELECT PRCTR
  946.            KTEXT
  947.       INTO CORRESPONDING FIELDS OF TABLE GT_CEPCT
  948.       FROM CEPCT
  949.      WHERE SPRAS EQ SY-LANGU
  950.        AND KOKRS EQ 'SNJT'.
  951.   ENDIF.
  952.   IF P_O IS NOT INITIAL.
  953.     SELECT TRTYP
  954.            TXT
  955.       INTO CORRESPONDING FIELDS OF TABLE GT_T856T
  956.       FROM T856T
  957.      WHERE LANGU EQ SY-LANGU.
  958.   ENDIF.
  959.   IF P_P IS NOT INITIAL.
  960.     SELECT FKBER
  961.            FKBTX
  962.       INTO CORRESPONDING FIELDS OF TABLE GT_TFKBT
  963.       FROM TFKBT
  964.      WHERE SPRAS EQ SY-LANGU.
  965.   ENDIF.
  966.   IF P_Q IS NOT INITIAL.
  967.     SELECT KOKRS
  968.            BEZEI
  969.       INTO CORRESPONDING FIELDS OF TABLE GT_TKA01
  970.       FROM TKA01.
  971.   ENDIF.
  972. ENDFORM.                    " FRM_GET_DESC
复制代码

回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表