智慧报表连接数据

*&---------------------------------------------------------------------*
*
*  機能ID:               DZHT010
*  プログラムID:         ZDZHT_LBX010_DEMO14
*  プログラム名:         可编辑ALV
*
*&---------------------------------------------------------------------*
*  更新記録
*  更新日     V.R.  更新者        更新内容
*  ---------- ----  ------------  -------------------------------------*
REPORT ZDZHT_LBX_DEMO15.

*&---------------------------------------------------------------------*
*& TYPES定義
*&---------------------------------------------------------------------*
TYPES:
  BEGIN OF TYP_ITEM,
    SGTXT TYPE ACDOCA-SGTXT, " 项目文本
    RACCT TYPE ACDOCA-RACCT, " 会计年度
    HSL_S TYPE CHAR50,       " 借方
    HSL_H TYPE CHAR50,       " 贷方
  END OF TYP_ITEM,
  TYP_T_ITEM TYPE STANDARD TABLE OF TYP_ITEM,
  BEGIN OF TYP_ALV,
    BUKRS TYPE   BKPF-BUKRS,                    "公司代码
    GJAHR TYPE   BKPF-GJAHR,                    "会计年度
    MONAT TYPE   BKPF-MONAT,                    "期间
    BUDAT TYPE   BKPF-BUDAT,                    "过账日期
    BELNR TYPE   BKPF-BELNR,                    "会计凭证号码
    BLART TYPE   BKPF-BLART,                    "凭证类型
    XBLNR TYPE   BKPF-XBLNR,                    "参考
    BKTXT TYPE   BKPF-BKTXT,                    "凭证抬头文本
    STBLG TYPE   BKPF-STBLG,                    "冲销凭证号
    PPNAM TYPE   BKPF-PPNAM,                    "预制此凭证的用户名
    USNAM TYPE   BKPF-USNAM,                    "用户名
    ZCK   TYPE   CHAR01,                        "复选框
  END OF TYP_ALV,
  TYP_T_ALV TYPE STANDARD TABLE OF TYP_ALV.







*&---------------------------------------------------------------------*
*& DATA定義
*&---------------------------------------------------------------------*
* 选择屏幕用
DATA:
  GV_USNAM TYPE BKPF-USNAM,
  GV_PPNAM TYPE BKPF-PPNAM,
  GV_BLART TYPE BKPF-BLART,
  GV_BELNR TYPE BKPF-BELNR,
  GV_BUDAT TYPE BKPF-BUDAT,
  GV_MONAT TYPE BKPF-MONAT.
*ALV
DATA:
  GT_ALV      TYPE TYP_T_ALV,
  GS_LAYOUT   TYPE LVC_S_LAYO,
  GS_INFO     TYPE ACDOCA,
  GT_FIELDCAT TYPE LVC_T_FCAT.

* 打印用
DATA:
  GT_ITEM    TYPE TYP_T_ITEM.

*&---------------------------------------------------------------------*
*  选择屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
  P_BUKRS TYPE BKPF-BUKRS OBLIGATORY,            "公司代码
  P_GJAHR TYPE BKPF-GJAHR OBLIGATORY.            " 会计年度
SELECT-OPTIONS:
  S_MONAT FOR GV_MONAT OBLIGATORY,               " 会计期间
  S_BUDAT FOR GV_BUDAT,                          " 过账日期
  S_BELNR FOR GV_BELNR,                          " 会计凭证号
  S_BLART FOR GV_BLART,                          " 凭证类型
  S_PPNAM FOR GV_PPNAM,                          " 预制人
  S_USNAM FOR GV_USNAM.                          " 过账人
SELECTION-SCREEN END OF BLOCK B1.

*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* 主处理 查找数据
  PERFORM F_MAIN.
*输出alv的数据
  PERFORM OUT_ALV.

*&---------------------------------------------------------------------*
*& Form F_MAIN
*&---------------------------------------------------------------------*
*& 主处理
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F_MAIN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM F_MAIN .
  DATA:
    LS_ALV   TYPE TYP_ALV,
    LR_POPER TYPE RANGE OF POPER,             "定义一个ranag表
    LS_POPER LIKE LINE OF LR_POPER.


* 获取会计核算凭证标题
  SELECT
    BUKRS,                                      "公司代码
    GJAHR,                                      "会计年度
    MONAT,                                      "期间
    BUDAT,                                      "过账日期
    BELNR,                                      "会计凭证号码
    BLART,                                      "凭证类型
    XBLNR,                                      "参考
    BKTXT,                                      "凭证抬头文本
    STBLG,                                      "冲销凭证号
    PPNAM,                                      "预制此凭证的用户名
    USNAM                                       "用户名
    INTO TABLE @DATA(LT_BKPF)
    FROM BKPF
    WHERE BUKRS = @P_BUKRS
      AND GJAHR = @P_GJAHR
      AND MONAT IN @S_MONAT
      AND BUDAT IN @S_BUDAT
      AND BELNR IN @S_BELNR
      AND BLART IN @S_BLART
      AND PPNAM IN @S_PPNAM
      AND USNAM IN @S_USNAM.

*ALV数据编辑
  LOOP AT LT_BKPF INTO DATA(LS_BKPF).
    MOVE-CORRESPONDING LS_BKPF TO LS_ALV.
    APPEND LS_BKPF TO GT_ALV.
    CLEAR LS_ALV.

  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form OUT_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM OUT_ALV .
*编辑  FIELDCAT
  PERFORM FRM_SET_FIELDCAT:
  USING '1' '1'  'ZCK'   '复选框',                  "公司代码
  USING '1' '2'  'BUKRS' '公司代码',                "会计年度
  USING '1' '3'  'GJAHR' '会计年度',                "期间
  USING '1' '4'  'MONAT' '期间',                   "过账日期
  USING '1' '5'  'BUDAT' '过账日期',               "会计凭证号码
  USING '1' '6'  'BELNR' '会计凭证号码',           "凭证类型
  USING '1' '7'  'BLART' '凭证类型',               "参考
  USING '1' '8'  'XBLNR' '参考',                   "凭证抬头文本
  USING '1' '9'  'BKTXT' '凭证抬头文本',           "冲销凭证号
  USING '1' '10' 'STBLG' '冲销凭证号',             "预制此凭证的用户名
  USING '1' '11' 'PPNAM' '预制此凭证的用户名' ,    "用户名
  USING '1' '12' 'USNAM' '用户名'.                 "复选框

* 编辑LAYOUT
  PERFORM FRM_SET_LAYOUT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING " 传入
      I_CALLBACK_PROGRAM       = SY-CPROG    " 当前程序
      IS_LAYOUT_LVC            = GS_LAYOUT   " alv样式
      IT_FIELDCAT_LVC          = GT_FIELDCAT "alv字段设置
      I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS_SET' "设置gui状态
      I_CALLBACK_USER_COMMAND  = 'FRM_USER_COMMAND' "响应功能
*    IMPORTING "传出
    TABLES " 传入/传出
      T_OUTTAB                 = GT_ALV " ALV数据
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

  IF SY-SUBRC <> 0.
*   Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&      --> P_
*&      --> P_
*&      --> P_
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT
  USING P_ROW TYPE LVC_ROWPOS
        P_COL TYPE LVC_COLPOS
        P_FIELDNAME TYPE LVC_FNAME
        P_TEXT TYPE CHAR40.
  DATA:
        LS_FIELDCAT TYPE LVC_S_FCAT.

  LS_FIELDCAT-ROW_POS = P_ROW.
  LS_FIELDCAT-COL_POS = P_COL.
  LS_FIELDCAT-FIELDNAME = P_FIELDNAME.
  LS_FIELDCAT-COLTEXT   = P_TEXT."描述
  LS_FIELDCAT-SCRTEXT_L = P_TEXT.
  LS_FIELDCAT-SCRTEXT_M = P_TEXT.
  LS_FIELDCAT-SCRTEXT_S = P_TEXT.

* 复选框
  IF P_FIELDNAME = 'ZCK'.
    LS_FIELDCAT-CHECKBOX = ABAP_TRUE."复选框
    LS_FIELDCAT-EDIT      = ABAP_TRUE."可编辑
  ENDIF.

  APPEND LS_FIELDCAT TO GT_FIELDCAT.
  CLEAR LS_FIELDCAT.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
* 编辑layout
  GS_LAYOUT-ZEBRA      = 'X'. " 斑马线
  GS_LAYOUT-NO_ROWMARK = 'X'. " 禁用行选择
  GS_LAYOUT-CWIDTH_OPT = 'X'. " 优化列宽度
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_STATUS_SET
*&---------------------------------------------------------------------*
*& 设定GUI状态
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM FRM_STATUS_SET USING EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'TF_001'." 设置gui状态
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& 功能处理
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING LV_UCOMM LIKE SY-UCOMM  " 获取功能码
                            SELFIELD TYPE SLIS_SELFIELD. " 光标位置信息
* 将更新后的数据传到alv所对应的内表
  DATA:LR_GRID TYPE REF TO CL_GUI_ALV_GRID.

* 获取ALV获取全局数据
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LR_GRID.

* 检查被更改的数据
  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.

  CASE LV_UCOMM.
    WHEN 'ZPRT'.
      PERFORM FRM_PRINT.
    WHEN 'ZBACK'.
      LEAVE TO SCREEN 0." 返回选择屏幕
    WHEN 'ZCANEL' OR 'ZDEXT'.
      LEAVE PROGRAM. " 退出程序
    WHEN OTHERS.
  ENDCASE.



ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_PRINT .

  DATA:
    LV_BUDAT   TYPE CHAR15, " 年月日
    LV_BUTXT   TYPE T001-BUTXT, " 公司代码或公司的名称
    LS_RETURN  TYPE SSFCRESCL,  " 表格打印结束时返回值
    LS_ITEM    TYPE TYP_ITEM,
    LV_FNAM    TYPE RS38L_FNAM, " 功能模块的名称
    LS_JOBOUT  TYPE SSFCRESOP,  " 表格打印开始时返回值
    LS_OUTPUT  TYPE SSFCOMPOP,  " 打印参数选项
    LS_CONTROL TYPE SSFCTRLOP.  " 打印控制
* 获取单位名称
  SELECT SINGLE BUTXT
    INTO LV_BUTXT
    FROM T001
    WHERE BUKRS = P_BUKRS.
*--------------------ssf open-----------------*
* smartforms 打印参数设置
  LS_OUTPUT-TDDEST   = 'LP01'.
  LS_OUTPUT-TDIEXIT  = 'X'.
  LS_OUTPUT-TDIMMED  = 'X'.
  LS_OUTPUT-TDDELETE = 'X'.
  LS_OUTPUT-TDNOPREV = ''.

  LS_CONTROL-PREVIEW   = 'X'. " 打印预览
  LS_CONTROL-NO_DIALOG = ' '.
  LS_CONTROL-NO_OPEN   = 'X'.
  LS_CONTROL-NO_CLOSE  = 'X'.

  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
      USER_SETTINGS      = ''
      OUTPUT_OPTIONS     = LS_OUTPUT
      CONTROL_PARAMETERS = LS_CONTROL
    IMPORTING
      JOB_OUTPUT_OPTIONS = LS_JOBOUT
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.

  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

* 获取功能块的名称
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME            = 'ZDZHT_SM_LBX002'  " 表单名
    IMPORTING
      FM_NAME             = LV_FNAM
    EXCEPTIONS
      NO_FORM             = 1
      NO_FOUNCTION_MODULE = 2
      OTHERS              = 3.
*报系统消息
  IF  SY-SUBRC <>  0 .
    MESSAGE ID  SY-MSGID  TYPE  SY-MSGTY  NUMBER  SY-MSGNO
          WITH  SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
  ENDIF .
*数据处理
  READ TABLE GT_ALV INTO DATA(LS_ALV)
  WITH KEY ZCK = 'X'.

  GS_INFO-BELNR = LS_ALV-BELNR.    "会计凭证号码

  SELECT A~SGTXT,
         A~RACCT,
         A~BSCHL,
         A~HSL,
         B~SHKZG
    INTO TABLE @DATA(LT_ACDOCA)
    FROM ACDOCA AS A
    INNER JOIN TBSL AS B ON A~BSCHL = B~BSCHL
    WHERE
       BELNR  = @LS_ALV-BELNR
      AND RBUKRS = @LS_ALV-BUKRS
      AND GJAHR  = @LS_ALV-GJAHR
      AND POPER  = @LS_ALV-MONAT.

  LOOP AT LT_ACDOCA INTO DATA(LS_ACDOCA).
    LS_ITEM-SGTXT = LS_ACDOCA-SGTXT.    " 项目文本
    LS_ITEM-RACCT = LS_ACDOCA-RACCT.    " 科目号
    IF LS_ACDOCA-SHKZG = 'S'.
      LS_ITEM-HSL_S = LS_ACDOCA-HSL.
    ENDIF.
    IF LS_ACDOCA-SHKZG = 'H'..
      LS_ITEM-HSL_H = LS_ACDOCA-HSL * -1.
    ENDIF.
    COLLECT LS_ITEM INTO GT_ITEM.
    CLEAR LS_ITEM.

  ENDLOOP.


* 启动smartforms
  CALL FUNCTION LV_FNAM
    EXPORTING
      CONTROL_PARAMETERS = LS_CONTROL
      OUTPUT_OPTIONS     = LS_OUTPUT
      USER_SETTINGS      = ''
      IV_BUTXT           = LV_BUTXT
      IV_BUDAT           = LV_BUDAT
      GT_ITEM            = GT_ITEM
    EXCEPTIONS
      FORMATTING_ERROR   = 1
      INTERNAL_ERROR     = 2
      SEND_ERROR         = 3
      USER_CANCELED      = 4
      OTHERS             = 5.

  IF  SY-SUBRC <> 0.
*     error handling
    MESSAGE ID  SY-MSGID  TYPE  SY-MSGTY  NUMBER  SY-MSGNO
            WITH  SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
  ENDIF .

*-----------------ssf close-------------------*
  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      JOB_OUTPUT_INFO  = LS_RETURN
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
ENDFORM.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值