zoukankan      html  css  js  c++  java
  • 模拟会计凭证审批 OO ALV(屏幕跳转、定位行数据、审批按钮)

    根据选定的单、多行会计凭证进行审批,双击单个会计凭证跳转会计订单明细。将审批的凭证记录在一张自定义表中

      1 *&---------------------------------------------------------------------*
      2 *& Report  ZFI_SP
      3 *&---------------------------------------------------------------------*
      4 *&参考FB03
      5 *&---------------------------------------------------------------------*
      6 REPORT  zfi_sp.
      7 TYPE-POOLS:slis,icon.
      8 TABLES:t001,bkpf,skat.
      9 DATA: ok_code LIKE sy-ucomm,
     10      save_ok LIKE ok_code.
     11 INCLUDE zfi_sp_alldata.   "会计编号的详细会计科目的数据类型
     12 
     13 DATA gt_fieldcat TYPE slis_t_fieldcat_alv.
     14 DATA gs_fieldcat TYPE slis_fieldcat_alv.  "表字段
     15 DATA gs_layout TYPE slis_layout_alv.  "布局
     16 DATA gt_events TYPE slis_t_event.
     17 DATA gs_event TYPE slis_alv_event.  "事件
     18 TYPES:BEGIN OF ty_type,
     19    sel TYPE c,          "选择按钮列
     20    bukrs TYPE bukrs,
     21    belnr TYPE belnr_d,  "会计凭证编号
     22    gjahr TYPE gjahr,
     23    blart TYPE blart,    "类型`
     24    bldat TYPE    bldat,    "凭证中的凭证日期
     25    budat TYPE budat,   "凭证中的过帐日期
     26    bktxt TYPE bktxt,    "文本
     27    sp TYPE c,
     28  END OF ty_type.
     29 DATA:gt_itab TYPE TABLE OF ty_type WITH HEADER LINE.
     30 DATA:wa_insert TYPE zfi_sp_table,
     31       wa_itab TYPE ty_type.
     32 
     33 DATA:fi_itab TYPE TABLE OF zfi_sp_table WITH HEADER LINE.
     34 
     35 DATA:fieldcat TYPE lvc_t_fcat,    "1001 屏幕数据定义
     36       grid TYPE REF TO cl_gui_alv_grid,
     37       g_container TYPE scrfname VALUE 'CONT1',
     38       g_custom_container TYPE REF TO cl_gui_custom_container.
     39 DATA: gt_fieldcat02 TYPE lvc_t_fcat,
     40       gs_variant02   TYPE disvariant,
     41       gs_layout02   TYPE lvc_s_layo.
     42 
     43 SELECTION-SCREEN BEGIN OF BLOCK blk_001 WITH FRAME TITLE blk_001 .
     44 SELECT-OPTIONS:t_bukrs FOR t001-bukrs OBLIGATORY.
     45 PARAMETERS:b_gjahr LIKE bkpf-gjahr DEFAULT sy-datum(4) OBLIGATORY.
     46 SELECT-OPTIONS:b_belnr FOR bkpf-belnr ,
     47 b_bldat FOR bkpf-bldat,
     48 b_budat FOR bkpf-budat,
     49 b_blart FOR bkpf-blart,
     50 s_txt50 FOR skat-txt50,
     51 b_usnam FOR bkpf-usnam.
     52 PARAMETERS:a_check AS CHECKBOX.
     53 **PARAMETERS:b_check AS CHECKBOX DEFAULT 'X'.
     54 SELECTION-SCREEN END OF BLOCK blk_001.
     55 
     56 AT SELECTION-SCREEN.
     57   "新增公司权限对象检查
     58   PERFORM frm_authority_check.
     59 
     60 START-OF-SELECTION.
     61   IF a_check = ''.
     62     IF b_blart = ''.
     63       SELECT bkpf~bukrs        "公司代码
     64        bkpf~belnr        "凭证编号
     65        bkpf~gjahr        "年度
     66        bkpf~blart        "凭证类型
     67        bkpf~budat        "过帐日期
     68        bkpf~bldat        "凭证日期
     69        bkpf~bktxt       "抬头文本
     70        z~sp              "审批标识
     71   INTO CORRESPONDING FIELDS OF TABLE gt_itab
     72   FROM  bkpf
     73   LEFT JOIN zfi_sp_table AS z ON z~belnr = bkpf~belnr AND z~belnr = bkpf~belnr AND z~bukrs = bkpf~bukrs
     74     WHERE bkpf~bukrs IN t_bukrs        "公司代码
     75      AND  bkpf~belnr IN b_belnr        "凭证编号
     76      AND  bkpf~gjahr = b_gjahr         "会计年度
     77      AND  bkpf~bldat IN b_bldat        "凭证日期
     78      AND  bkpf~budat IN b_budat        "过帐日期
     79      AND  bkpf~blart IN ('SA','AB','AA','RV','DZ','RE','KZ') "凭证类型
     80      AND  bkpf~usnam IN b_usnam.        "制作人
     81     ELSE.
     82       SELECT bkpf~bukrs        "公司代码
     83           bkpf~belnr        "凭证编号
     84           bkpf~gjahr        "年度
     85           bkpf~blart        "凭证类型
     86           bkpf~budat        "过帐日期
     87           bkpf~bldat        "凭证日期
     88           bkpf~bktxt       "抬头文本
     89           z~sp              "审批标识
     90       INTO CORRESPONDING FIELDS OF TABLE gt_itab
     91           FROM  bkpf
     92           LEFT JOIN zfi_sp_table AS z ON z~belnr = bkpf~belnr AND z~belnr = bkpf~belnr AND z~bukrs = bkpf~bukrs
     93           WHERE bkpf~bukrs IN t_bukrs        "公司代码
     94           AND  bkpf~belnr IN b_belnr        "凭证编号
     95           AND  bkpf~gjahr = b_gjahr         "会计年度
     96           AND  bkpf~bldat IN b_bldat        "凭证日期
     97           AND  bkpf~budat IN b_budat        "过帐日期
     98           AND  bkpf~blart IN b_blart        "凭证类型
     99           AND  bkpf~usnam IN b_usnam.        "制作人
    100     ENDIF.
    101 
    102     DELETE gt_itab WHERE sp = 'X'.
    103     PERFORM all_data.
    104     PERFORM set_event.
    105   ELSE.
    106     SELECT * FROM zfi_sp_table INTO CORRESPONDING FIELDS OF TABLE fi_itab
    107        WHERE bukrs IN t_bukrs        "公司代码
    108          AND  belnr IN b_belnr        "凭证编号
    109          AND  gjahr = b_gjahr         "会计年度
    110          AND  zerdt IN b_bldat        "凭证日期
    111          AND  blart IN b_blart        "凭证类型
    112          AND  uname IN b_usnam.        "审核人
    113   ENDIF.
    114 
    115   PERFORM set_layout.
    116   PERFORM set_fieldname.
    117   PERFORM result_alv.
    118 *&---------------------------------------------------------------------*
    119 *&      Form  alv_user_command
    120 *&---------------------------------------------------------------------*
    121 *  定义初始屏幕操作逻辑
    122 *----------------------------------------------------------------------*
    123 *      -->P_UCOMM    text
    124 *      -->P_SELFIELD text
    125 *----------------------------------------------------------------------*
    126 FORM alv_user_command USING p_ucomm TYPE sy-ucomm p_selfield TYPE slis_selfield.
    127   p_selfield-refresh = 'X'.     "控制grid产生新屏幕
    128   CLEAR wa_insert.
    129   CASE p_ucomm.
    130     WHEN  '&IC1'.
    131       READ TABLE gt_itab INDEX p_selfield-tabindex. "定位双击的行号
    132       LOOP AT itab1 WHERE belnr = gt_itab-belnr.
    133         APPEND itab1 TO itab2.
    134       ENDLOOP.
    135       IF itab2[] IS NOT INITIAL.
    136         CALL SCREEN '1001'.
    137       ENDIF.
    138     WHEN 'SP'.                            "多个会计凭证一起审批
    139       LOOP AT gt_itab WHERE sel = 'X'.
    140         CLEAR wa_insert.
    141         MOVE-CORRESPONDING gt_itab TO wa_insert.
    142         wa_insert-zerdt = sy-datum.
    143         wa_insert-uzeit = sy-uzeit.
    144         wa_insert-uname = sy-uname.
    145         wa_insert-sp = 'X'.
    146         INSERT zfi_sp_table FROM wa_insert.
    147         DELETE gt_itab.
    148       ENDLOOP.
    149       p_selfield-refresh = 'X'.   "审批完成刷新
    150   ENDCASE.
    151 ENDFORM.                    "MALV_USER_COMMAND
    152 *&---------------------------------------------------------------------*
    153 *&      Form  alvshow
    154 *&---------------------------------------------------------------------*
    155 *  显示双击选中会计编号的详细会计科目
    156 *  CL_GUI_ALV_GRID->set_table_for_first_display
    157 *----------------------------------------------------------------------*
    158 FORM alvshow.
    159   gs_layout02-no_rowmark = 'X'. "禁用行选择
    160   gs_layout02-cwidth_opt = 'X'. "优化列宽度
    161   gs_layout02-no_toolbar = 'X'. "隐藏工具栏
    162 
    163   gs_variant02-report = sy-repid.
    164 
    165   CREATE OBJECT g_custom_container
    166     EXPORTING
    167       container_name = g_container. "创建容器
    168 
    169   CREATE OBJECT grid
    170     EXPORTING
    171       i_parent = g_custom_container."创建ALV对象
    172 
    173   PERFORM f_grid_build_fieldcat  CHANGING gt_fieldcat02.
    174   SORT itab2 BY hkont DESCENDING.
    175 
    176   CALL METHOD grid->set_table_for_first_display
    177     EXPORTING
    178       is_layout       = gs_layout02
    179       is_variant      = gs_variant02
    180     CHANGING
    181       it_outtab       = itab2[]
    182       it_fieldcatalog = gt_fieldcat02.
    183   CLEAR:gt_fieldcat02,gs_layout02,gs_variant02.
    184 ENDFORM.                    "alvshow
    185 *&---------------------------------------------------------------------*
    186 *&      Form  f_grid_build_fieldcat
    187 *&---------------------------------------------------------------------*
    188 *
    189 *----------------------------------------------------------------------*
    190 *      -->PT_FIELDCAT  text
    191 *----------------------------------------------------------------------*
    192 FORM f_grid_build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat.
    193   DATA ls_fcat TYPE lvc_s_fcat.
    194 
    195   CLEAR ls_fcat.
    196   ls_fcat-fieldname = 'BUKRS'.
    197   ls_fcat-coltext =
    198   ls_fcat-tooltip =
    199   ls_fcat-seltext = '公司'.
    200   ls_fcat-outputlen = 4.
    201   APPEND ls_fcat TO pt_fieldcat.
    202 
    203   CLEAR ls_fcat.
    204   ls_fcat-fieldname = 'BELNR'.
    205   ls_fcat-coltext =
    206 ls_fcat-tooltip =
    207 ls_fcat-seltext = '凭证'.
    208   ls_fcat-outputlen = 10.
    209   APPEND ls_fcat TO pt_fieldcat.
    210 
    211   CLEAR ls_fcat.
    212   ls_fcat-fieldname = 'HKONT'.
    213   ls_fcat-coltext =
    214   ls_fcat-tooltip =
    215   ls_fcat-seltext = '科目'.
    216   ls_fcat-outputlen = 10.
    217   APPEND ls_fcat TO pt_fieldcat.
    218 
    219   CLEAR ls_fcat.
    220   ls_fcat-fieldname = 'SHKZG'.
    221   ls_fcat-coltext =
    222 ls_fcat-tooltip =
    223 ls_fcat-seltext = '借方/贷方标识'.
    224   ls_fcat-outputlen = 1.
    225   APPEND ls_fcat TO pt_fieldcat.
    226 
    227   CLEAR ls_fcat.
    228   ls_fcat-fieldname = 'BUZEI'.
    229   ls_fcat-coltext =
    230 ls_fcat-tooltip =
    231 ls_fcat-seltext = '会计凭证中的行项目数'.
    232   ls_fcat-outputlen = 3.
    233   APPEND ls_fcat TO pt_fieldcat.
    234 
    235   CLEAR ls_fcat.
    236   ls_fcat-fieldname = 'DMBTR'.
    237   ls_fcat-coltext =
    238 ls_fcat-tooltip =
    239 ls_fcat-seltext = '按本位币计的金额本'.
    240   ls_fcat-outputlen = 13.
    241   APPEND ls_fcat TO pt_fieldcat.
    242 
    243   CLEAR ls_fcat.
    244   ls_fcat-fieldname = 'WRBTR'.
    245   ls_fcat-coltext =
    246 ls_fcat-tooltip =
    247 ls_fcat-seltext = '凭证货币金额'.
    248   ls_fcat-outputlen = 13.
    249   APPEND ls_fcat TO pt_fieldcat.
    250 
    251   CLEAR ls_fcat.
    252   ls_fcat-fieldname = 'SGTXT'.
    253   ls_fcat-coltext =
    254 ls_fcat-tooltip =
    255 ls_fcat-seltext = '摘要'.
    256   ls_fcat-outputlen = 50.
    257   APPEND ls_fcat TO pt_fieldcat.
    258 
    259   CLEAR ls_fcat.
    260   ls_fcat-fieldname = 'KUNNR'.
    261   ls_fcat-coltext =
    262 ls_fcat-tooltip =
    263 ls_fcat-seltext = '客户编号'.
    264   ls_fcat-outputlen = 10.
    265   APPEND ls_fcat TO pt_fieldcat.
    266 
    267   CLEAR ls_fcat.
    268   ls_fcat-fieldname = 'LIFNR'.
    269   ls_fcat-coltext =
    270   ls_fcat-tooltip =
    271   ls_fcat-seltext = '供应商或债权人的帐号'.
    272   ls_fcat-outputlen = 8.
    273   APPEND ls_fcat TO pt_fieldcat.
    274 
    275   CLEAR ls_fcat.
    276   ls_fcat-fieldname = 'TXT50'.
    277   ls_fcat-coltext =
    278   ls_fcat-tooltip =
    279   ls_fcat-seltext = '科目名称'.
    280   ls_fcat-outputlen = 50.
    281   APPEND ls_fcat TO pt_fieldcat.
    282 
    283   CLEAR ls_fcat.
    284   ls_fcat-fieldname = 'KOSTL'.
    285   ls_fcat-coltext =
    286   ls_fcat-tooltip =
    287   ls_fcat-seltext = '成本中心'.
    288   ls_fcat-outputlen = 10.
    289   APPEND ls_fcat TO pt_fieldcat.
    290 
    291   CLEAR ls_fcat.
    292   ls_fcat-fieldname = 'FKBER_LONG'.
    293   ls_fcat-coltext =
    294   ls_fcat-tooltip =
    295   ls_fcat-seltext = '功能范围'.
    296   ls_fcat-outputlen = 16.
    297   APPEND ls_fcat TO pt_fieldcat.
    298 
    299   CLEAR ls_fcat.
    300   ls_fcat-fieldname = 'KTEXT'.
    301   ls_fcat-coltext =
    302   ls_fcat-tooltip =
    303   ls_fcat-seltext = '客户名称'.
    304   ls_fcat-outputlen = 35.
    305   APPEND ls_fcat TO pt_fieldcat.
    306 
    307   CLEAR ls_fcat.
    308   ls_fcat-fieldname = 'NAME'.
    309   ls_fcat-coltext =
    310   ls_fcat-tooltip =
    311   ls_fcat-seltext = '供应商名称'.
    312   ls_fcat-outputlen = 35.
    313   APPEND ls_fcat TO pt_fieldcat.
    314 
    315   CLEAR ls_fcat.
    316   ls_fcat-fieldname = 'BLDAT'.
    317   ls_fcat-coltext =
    318   ls_fcat-tooltip =
    319   ls_fcat-seltext = '凭证日期'.
    320   ls_fcat-outputlen = 8.
    321   APPEND ls_fcat TO pt_fieldcat.
    322 
    323   CLEAR ls_fcat.
    324   ls_fcat-fieldname = 'BUDAT'.
    325   ls_fcat-coltext =
    326   ls_fcat-tooltip =
    327   ls_fcat-seltext = '过账日期'.
    328   ls_fcat-outputlen = 8.
    329   APPEND ls_fcat TO pt_fieldcat.
    330 
    331   CLEAR ls_fcat.
    332   ls_fcat-fieldname = 'BLART'.
    333   ls_fcat-coltext =
    334   ls_fcat-tooltip =
    335   ls_fcat-seltext = '类型'.
    336   ls_fcat-outputlen = 2.
    337   APPEND ls_fcat TO pt_fieldcat.
    338 
    339   CLEAR ls_fcat.
    340   ls_fcat-fieldname = 'HWAER'.
    341   ls_fcat-coltext =
    342   ls_fcat-tooltip =
    343   ls_fcat-seltext = '本币'.
    344   ls_fcat-outputlen = 5.
    345   APPEND ls_fcat TO pt_fieldcat.
    346 ENDFORM.                    "F_GRID_BUILD_FIELDCAT
    347 *&---------------------------------------------------------------------*
    348 *&      Form  alv_status_set
    349 *&---------------------------------------------------------------------*
    350 *       text
    351 *----------------------------------------------------------------------*
    352 *      -->PT_EXTAB   text
    353 *----------------------------------------------------------------------*
    354 FORM alv_status_set USING pt_extab TYPE slis_t_extab.
    355   SET PF-STATUS 'COPY_GUI'." OF PROGRAM 'SAPLKKBL'.
    356 ENDFORM.                    "ALV_STATUS_SET
    357 *&---------------------------------------------------------------------*
    358 *&      Form  set_layout
    359 *&---------------------------------------------------------------------*
    360 *       text
    361 *----------------------------------------------------------------------*
    362 FORM set_layout .
    363   gs_layout-zebra = 'X'.
    364   gs_layout-colwidth_optimize = 'X'.
    365   gs_layout-cell_merge = 'X'.         "内容能够复制到剪贴板
    366   IF a_check <> 'X'.  "显示已审批数据不用指定 不然点击按钮会报错
    367     gs_layout-box_fieldname = 'SEL'.    "指定这个字段为【选择块】
    368   ENDIF.
    369 
    370 ENDFORM.                    " SET_LAYOUT
    371 *&---------------------------------------------------------------------*
    372 *&      Form  set_fieldname
    373 *&---------------------------------------------------------------------*
    374 *       text
    375 *----------------------------------------------------------------------*
    376 FORM set_fieldname.
    377   DEFINE setfieldcat.
    378     clear: gs_fieldcat.
    379     gs_fieldcat-col_pos = &1.
    380     gs_fieldcat-fieldname = &2.
    381     gs_fieldcat-seltext_m = &3.
    382     gs_fieldcat-no_zero = 'X'.
    383     append gs_fieldcat to gt_fieldcat.
    384   END-OF-DEFINITION.
    385 
    386   setfieldcat 1 'BUKRS' '工厂'.
    387   setfieldcat 2 'BELNR' '凭证编号'.
    388   setfieldcat 3 'GJAHR' '年度'.
    389   setfieldcat 4 'BLART' '类型'.
    390   IF a_check = 'X'.
    391     setfieldcat 5 'ZERDT' '审批日期'.
    392     setfieldcat 6 'UZEIT' '审批时间'.
    393     setfieldcat 7 'UNAME' '审批人'.
    394     setfieldcat 8 'SP' '审批完成标识'.
    395   ELSE.
    396     setfieldcat 5 'BLDAT' '凭证日期'.
    397     setfieldcat 6 'BUDAT' '过帐日期'.
    398     setfieldcat 7 'BKTXT' '抬头文本'.
    399 *  setfieldcat 8 'SP'    '审批标识'.
    400   ENDIF.
    401 ENDFORM.                    "set_fieldname
    402 *&---------------------------------------------------------------------*
    403 *&      Form  result_alv
    404 *&---------------------------------------------------------------------*
    405 *       text
    406 *----------------------------------------------------------------------*
    407 FORM result_alv .
    408   IF a_check = ''.
    409     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    410       EXPORTING
    411         i_callback_program      = sy-repid
    412         is_layout               = gs_layout
    413         it_fieldcat             = gt_fieldcat
    414         it_events               = gt_events
    415         i_callback_user_command = 'ALV_USER_COMMAND'  "按钮功能(这个功能也能在is_layout中定义)
    416       TABLES
    417         t_outtab                = gt_itab
    418       EXCEPTIONS
    419         program_error           = 1
    420         OTHERS                  = 2.
    421   ELSE.
    422     CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    423       EXPORTING
    424         i_callback_program = sy-repid
    425         is_layout          = gs_layout
    426         it_fieldcat        = gt_fieldcat
    427       TABLES
    428         t_outtab           = fi_itab
    429       EXCEPTIONS
    430         program_error      = 1
    431         OTHERS             = 2.
    432   ENDIF.
    433   CLEAR a_check.
    434 ENDFORM.                    " RESULT_ALV
    435 
    436 *&---------------------------------------------------------------------*
    437 *&      Form  set_event
    438 *&---------------------------------------------------------------------*
    439 *       text
    440 *----------------------------------------------------------------------*
    441 FORM set_event .
    442   CLEAR gs_event.
    443   MOVE 'PF_STATUS_SET' TO gs_event-name."调用PF_STATUS_SET签名的Form,ALV工具栏显示前,可自定义工具条
    444   MOVE 'ALV_STATUS_SET' TO gs_event-form. "工具栏设置
    445   APPEND gs_event TO gt_events.
    446 ENDFORM.                    " SET_EVENT
    447 *&---------------------------------------------------------------------*
    448 *&      Form  all_data
    449 *&---------------------------------------------------------------------*
    450 *       text
    451 *----------------------------------------------------------------------*
    452 FORM all_data.
    453   SELECT SINGLE * FROM t001 WHERE bukrs = t_bukrs.
    454   comtitle = t001-butxt.
    455 
    456   SELECT bukrs        "公司代码
    457          belnr        "凭证编号
    458          blart        "凭证类型
    459          usnam        "用户名
    460          ppnam        "凭证制作人
    461          budat        "过帐日期
    462          bldat        "凭证日期
    463          waers
    464          hwaer        "本位币
    465          kursf        "汇率
    466     INTO CORRESPONDING FIELDS OF  TABLE itab_bkpf
    467     FROM  bkpf
    468     WHERE bukrs IN t_bukrs        "公司代码
    469      AND  belnr IN b_belnr        "凭证编号
    470      AND  gjahr = b_gjahr         "会计年度
    471      AND  bldat IN b_bldat        "凭证日期
    472      AND  budat IN b_budat        "过帐日期
    473      AND  blart IN b_blart        "凭证类型
    474      AND  usnam IN b_usnam.       "制作人
    475 
    476   SORT itab_bkpf BY belnr ASCENDING .
    477 
    478   IF  sy-subrc <> 0.
    479     MESSAGE '输入的凭证编号不存在!' TYPE 'E'.
    480   ENDIF.
    481 
    482   LOOP AT itab_bkpf.
    483     SELECT belnr        "凭证编号
    484            hkont         "总分类帐帐目
    485            shkzg         "借方/贷方标识
    486            dmbtr         "按本位币计的金额
    487            wrbtr         "凭证货币金额
    488            sgtxt         "项目文本
    489            kunnr         "客户编号1
    490            lifnr         "供应商或债权人的帐号
    491            zuonr         "分配编号
    492            buzei         "会计凭证中的行项目数
    493            kostl         "成本中心
    494            fkber_long    "功能范围
    495       APPENDING CORRESPONDING FIELDS OF  TABLE itab_bseg
    496       FROM bseg
    497       WHERE belnr = itab_bkpf-belnr AND gjahr = b_gjahr
    498       AND bukrs IN t_bukrs .
    499     "修改日元问题  by  hua.su.
    500     IF  itab_bkpf-waers = 'JPY' .
    501       LOOP AT itab_bseg WHERE belnr = itab_bkpf-belnr. 
    502         itab_bseg-wrbtr = itab_bseg-wrbtr * 100.
    503         MODIFY itab_bseg.
    504         CLEAR itab_bseg.
    505       ENDLOOP.
    506     ENDIF.
    507 
    508     SELECT SINGLE butxt INTO itab_bkpf-butxt
    509      FROM t001
    510       WHERE bukrs = itab_bkpf-bukrs.
    511 
    512     SELECT SINGLE ltext
    513     FROM t003t
    514     INTO itab_bkpf-ltext
    515     WHERE blart = itab_bkpf-blart AND t003t~spras = '1'.
    516 
    517     IF itab_bkpf-blart = 'KR' OR itab_bkpf-blart = 'KZ' OR
    518 itab_bkpf-blart = 'DR' OR
    519        itab_bkpf-blart = 'DZ' OR itab_bkpf-blart = 'SA'.
    520 
    521       SELECT SINGLE xblnr INTO itab_bkpf-xblnr   "参考凭证号
    522         FROM bkpf
    523         WHERE belnr = itab_bkpf-belnr.
    524     ENDIF.
    525 
    526     SELECT SINGLE name_last name_first
    527            INTO (itab_bkpf-name_last,itab_bkpf-name_first)
    528       FROM user_addr
    529       WHERE bname = itab_bkpf-usnam.
    530     CONCATENATE itab_bkpf-name_last itab_bkpf-name_first INTO
    531 itab_bkpf-name_last.
    532 
    533     SELECT SINGLE bseg~kunnr
    534            INTO   itab_bkpf-kunnr
    535            FROM bseg
    536            WHERE bseg~belnr = itab_bkpf-belnr AND  kunnr <> ''.
    537 
    538     IF itab_bkpf-blart = 'RV'.
    539       SELECT SINGLE kna1~name1
    540           INTO itab_bkpf-sgtxt
    541           FROM kna1
    542           WHERE kunnr = itab_bkpf-kunnr.
    543       CONCATENATE '销售-' itab_bkpf-sgtxt INTO itab_bkpf-sgtxt.
    544     ENDIF.
    545 
    546     MODIFY itab_bkpf INDEX sy-tabix.
    547   ENDLOOP.
    548 
    549   IF NOT itab_bseg[] IS INITIAL.
    550     DATA temp_sgtxt LIKE bseg-sgtxt.
    551     SORT itab_bseg DESCENDING BY belnr lifnr.
    552     LOOP AT itab_bseg.
    553       SELECT  SINGLE txt50
    554       FROM skat
    555       INTO itab_bseg-txt50
    556       WHERE skat~saknr = itab_bseg-hkont.
    557       SELECT SINGLE cskt~ktext
    558           INTO itab_bseg-ktext
    559           FROM cskt
    560           WHERE cskt~kostl = itab_bseg-kostl AND cskt~spras = '1'.
    561 
    562       IF itab_bseg-lifnr <> ''.
    563         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    564           EXPORTING
    565             input  = itab_bseg-lifnr
    566           IMPORTING
    567             output = itab_bseg-lifnr.
    568         CONCATENATE itab_bseg-txt50 '-' itab_bseg-lifnr  INTO itab_bseg-txt50.
    569       ENDIF.
    570 
    571       IF itab_bseg-kunnr <> ''.
    572         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    573           EXPORTING
    574             input  = itab_bseg-kunnr
    575           IMPORTING
    576             output = itab_bseg-kunnr.
    577         CONCATENATE itab_bseg-txt50 '-' itab_bseg-kunnr  INTO itab_bseg-txt50.
    578       ENDIF.
    579       IF itab_bseg-fkber_long = '1000'.
    580         CONCATENATE    itab_bseg-txt50 '-' itab_bseg-ktext
    581 '-' itab_bseg-kostl '-' '制造费用' INTO itab_bseg-txt50.
    582       ELSEIF itab_bseg-fkber_long = '2000' .
    583         CONCATENATE   itab_bseg-txt50 '-' itab_bseg-ktext
    584 '-' itab_bseg-kostl '-' '管理费用' INTO itab_bseg-txt50.
    585       ELSEIF itab_bseg-fkber_long = '3000'.
    586         CONCATENATE  itab_bseg-txt50 '-' itab_bseg-ktext
    587 '-' itab_bseg-kostl '-' '销售费用' INTO itab_bseg-txt50.
    588       ELSEIF itab_bseg-fkber_long = '4000'.
    589         CONCATENATE  itab_bseg-txt50 '-' itab_bseg-ktext
    590 '-' itab_bseg-kostl '-' '研发费用' INTO itab_bseg-txt50.
    591       ELSEIF itab_bseg-fkber_long = '5000'.
    592         CONCATENATE  itab_bseg-txt50 '-' itab_bseg-ktext
    593 '-' itab_bseg-kostl '-' '材料附加费' INTO itab_bseg-txt50.
    594       ENDIF.
    595 
    596       MODIFY itab_bseg INDEX sy-tabix.
    597     ENDLOOP.
    598   ENDIF.
    599 
    600 *************读取供应商或客户描述*************
    601   IF NOT itab_bseg[] IS INITIAL."确定为已过帐的凭证
    602     SELECT  saknr
    603             txt50
    604       INTO  TABLE itab_skat
    605       FROM skat
    606        FOR ALL ENTRIES IN itab_bseg
    607      WHERE saknr = itab_bseg-hkont
    608        AND spras = sy-langu
    609        AND ktopl = t001-ktopl.
    610 *      READ TABLE ITAB_SKAT.
    611     SELECT  kunnr name1
    612       INTO  TABLE  itab_kna1
    613       FROM kna1
    614        FOR ALL ENTRIES IN itab_bseg
    615      WHERE kunnr = itab_bseg-kunnr.
    616 
    617     SELECT  lifnr name1
    618       INTO  TABLE  itab_lfa1
    619       FROM lfa1
    620        FOR ALL ENTRIES IN itab_bseg
    621      WHERE lifnr = itab_bseg-lifnr.
    622   ENDIF.
    623 
    624   SORT itab_bseg BY shkzg DESCENDING buzei ASCENDING belnr ASCENDING .
    625   LOOP AT itab_bseg.
    626     COLLECT itab_bseg INTO itab.
    627   ENDLOOP.
    628 
    629   SORT itab BY belnr.
    630   LOOP AT itab.                                             "FBY 2015
    631     READ TABLE itab_bkpf WITH KEY belnr = itab-belnr.
    632     IF sy-subrc = 0.
    633       itab1-bukrs = itab_bkpf-bukrs.
    634       itab1-belnr = itab_bkpf-belnr."会计凭证编号
    635       itab1-hkont = itab-hkont.  "科目编码
    636       itab1-shkzg = itab-shkzg.  "借方/贷方标识
    637       itab1-buzei = itab-buzei.
    638       itab1-dmbtr = itab-dmbtr.  "按本位币计的金额
    639       itab1-wrbtr = itab-wrbtr.  "凭证货币金额
    640       itab1-sgtxt = itab-sgtxt. "摘要
    641       itab1-kunnr = itab-kunnr.                             "客户编号1
    642       itab1-lifnr = itab-lifnr. "供应商或债权人的帐号
    643       itab1-txt50 = itab-txt50. "科目名称
    644       itab1-kostl = itab-kostl.  "成本中心
    645       itab1-fkber_long = itab-fkber_long.  "功能范围
    646       itab1-ktext = itab-ktext.  "成本中心描述
    647       itab1-name1 = itab-name1.  "客户名称
    648       itab1-name =  itab-name. "供应商名称
    649       itab1-bldat = itab_bkpf-bldat. "凭证日期      "fby
    650       itab1-budat = itab_bkpf-budat. "过账日期
    651       itab1-blart = itab_bkpf-blart. "类型
    652       itab1-hwaer = itab_bkpf-hwaer. "本币
    653       APPEND itab1.
    654       CLEAR  itab1.
    655     ENDIF.
    656   ENDLOOP.
    657 ENDFORM.                    "FRM_GET_DATA
    658 *&---------------------------------------------------------------------*
    659 *&      Form  frm_authority_check
    660 *&---------------------------------------------------------------------*
    661 *       text
    662 *----------------------------------------------------------------------*
    663 FORM frm_authority_check .
    664   DATA: BEGIN OF lt_werks OCCURS 0 ,
    665             werks LIKE t001w-werks,
    666           END OF  lt_werks .
    667 
    668   SELECT werks
    669     INTO CORRESPONDING FIELDS OF TABLE lt_werks
    670     FROM t001w
    671     WHERE werks IN t_bukrs.
    672 
    673   LOOP AT lt_werks .
    674     AUTHORITY-CHECK OBJECT 'ZWERKS'  ID 'WERKS' FIELD  lt_werks-werks .
    675     IF sy-subrc <> 0.
    676       MESSAGE  e001(00) WITH '你没有 ' lt_werks-werks '公司的操作权限!'.
    677     ENDIF.
    678   ENDLOOP .
    679 ENDFORM.                    "frm_authority_check
    680 
    681 INCLUDE zfi_sp_pbo .
    682 INCLUDE zfi_sp_pai .
    View Code
    ZFI_SP_ALLDATA
    *&---------------------------------------------------------------------*
    *&  包括                ZFI_SP_ALLDATA
    *&---------------------------------------------------------------------*
    *--------------------------------------------------------------------------------------------------------------------------------*
    DATA:comtitle     LIKE t001-butxt.
    TYPES:BEGIN OF ty_itab1,
           bukrs LIKE bkpf-bukrs,
           belnr LIKE bseg-belnr, "会计凭证编号
           hkont LIKE bseg-hkont,  "科目编码
           shkzg LIKE bseg-shkzg,  "借方/贷方标识
           buzei LIKE bseg-buzei,
           dmbtr LIKE bseg-dmbtr,  "按本位币计的金额
           wrbtr LIKE bseg-wrbtr,  "凭证货币金额
           sgtxt LIKE bseg-sgtxt, "摘要
           kunnr LIKE bseg-kunnr,                               "客户编号1
           lifnr LIKE bseg-lifnr, "供应商或债权人的帐号
           txt50 LIKE skat-txt50,  "科目名称
           kostl LIKE bseg-kostl,  "成本中心
           fkber_long LIKE bseg-fkber_long,  "功能范围
           ktext LIKE cskt-ktext,  "成本中心描述
           name1 LIKE kna1-name1,  "客户名称
           name  LIKE lfa1-name1,  "供应商名称
           bldat LIKE bkpf-bldat, "凭证日期      "fby
           budat LIKE bkpf-budat, "过账日期
           blart LIKE bkpf-blart, "类型
           hwaer LIKE bkpf-hwaer, "本币
         END OF ty_itab1.
    DATA:itab1 TYPE TABLE OF ty_itab1 WITH HEADER LINE,
         itab2 TYPE TABLE OF ty_itab1 WITH HEADER LINE.
    
    
    DATA:BEGIN OF itab_bkpf OCCURS 0,
           bukrs LIKE bkpf-bukrs,
           butxt LIKE t001-butxt,
           belnr LIKE bseg-belnr,"会计凭证编号
           blart LIKE bkpf-blart,
           bktxt LIKE bkpf-bktxt,
           usnam LIKE bkpf-usnam,"过帐人
           ppnam LIKE bkpf-ppnam,"预制人
           budat LIKE bkpf-budat,
           bldat LIKE bkpf-bldat,
           xblnr LIKE bkpf-xblnr,"参照
           waers LIKE bkpf-waers,"币别码
           hwaer LIKE bkpf-hwaer,"本位币 by snowchen 10/05/25
           ltext  LIKE t003t-ltext, "凭证类型描述
           name_first  LIKE user_addr-name_first,        "
           name_last   LIKE user_addr-name_last,         "
           sgtxt LIKE bseg-sgtxt, "摘要
           kunnr LIKE bseg-kunnr, "客户代码
           kursf LIKE bkpf-kursf, "汇率
         END OF itab_bkpf.
    DATA:BEGIN OF itab_bseg OCCURS 0,
    
      belnr LIKE bseg-belnr, "会计凭证编号
      hkont LIKE bseg-hkont,  "科目编码
      shkzg LIKE bseg-shkzg,  "借方/贷方标识
      buzei LIKE bseg-buzei,
      dmbtr LIKE bseg-dmbtr,  "按本位币计的金额
      wrbtr LIKE bseg-wrbtr,  "凭证货币金额
      sgtxt LIKE bseg-sgtxt, "摘要
      kunnr LIKE bseg-kunnr,                                    "客户编号1
      lifnr LIKE bseg-lifnr, "供应商或债权人的帐号
      txt50 LIKE skat-txt50,  "科目名称
      kostl LIKE bseg-kostl,  "成本中心
      fkber_long LIKE bseg-fkber_long,  "功能范围
      ktext LIKE cskt-ktext,  "成本中心描述
      name1 LIKE kna1-name1,  "客户名称
      name  LIKE lfa1-name1,  "供应商名称
    END OF itab_bseg.
    DATA: itab LIKE TABLE OF itab_bseg  WITH HEADER LINE.
    
    DATA: BEGIN OF itab_skat OCCURS 10  ,
    saknr LIKE skat-saknr,   "会计科目
    txt50 LIKE skat-txt50,    "科目描述
    END OF itab_skat.
    
    
    DATA: BEGIN OF itab_kna1 OCCURS 0 ,
          kunnr LIKE kna1-kunnr,"客户编码
          name1 LIKE kna1-name1,"客户名称
    END OF itab_kna1.
    
    DATA: BEGIN OF itab_lfa1 OCCURS 0 ,
          lifnr LIKE lfa1-lifnr,"供应商编码
          name1 LIKE lfa1-name1,"供应商名称
    
    END OF itab_lfa1.
    
    DATA: BEGIN OF itab_sgtxt OCCURS 0 ,
          sgtxt LIKE bseg-sgtxt,
      END OF itab_sgtxt.
    *--------------------------------------------------------------------------------------------------、

    PBO

    *&---------------------------------------------------------------------*
    *&  Include           ZFI_SP_PBO
    *&---------------------------------------------------------------------*
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_1001  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE status_1001 OUTPUT.
      SET PF-STATUS 'T001'.
      PERFORM alvshow.   "展示双击选中会计编号的详细会计科目
    *  SET TITLEBAR '凭证科目'.
    ENDMODULE.                 " STATUS_1001  OUTPUT

    PAI

    *&---------------------------------------------------------------------*
    *&  Include           ZFI_SP_PAI
    *&---------------------------------------------------------------------*
    
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_1001  INPUT
    *&---------------------------------------------------------------------*
    *  单个记录已审批的的会计凭证
    *----------------------------------------------------------------------*
    MODULE user_command_1001 INPUT.
      save_ok = ok_code.
      CLEAR ok_code.
      CASE save_ok.
        WHEN 'SP'.
          MOVE-CORRESPONDING gt_itab TO wa_insert.
          wa_insert-zerdt = sy-datum.
          wa_insert-uzeit = sy-uzeit.
          wa_insert-uname = sy-uname.
          wa_insert-sp = 'X'.
          INSERT zfi_sp_table FROM wa_insert.
    
          MOVE-CORRESPONDING gt_itab TO wa_itab.
          DELETE TABLE gt_itab FROM wa_itab.
          CLEAR:wa_itab,gt_itab.
          CLEAR:itab2[],itab2.
          LEAVE TO SCREEN 0.
        WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
          CLEAR:itab2[],itab2,wa_itab,gt_itab.
          LEAVE TO SCREEN 0.
      ENDCASE.
    
    ENDMODULE.                 " USER_COMMAND_1001  INPUT
    abap菜鸟,记录学习笔记。才疏学浅,如有错误,请直接在评论区留言。
  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/freeandeasy/p/13665832.html
Copyright © 2011-2022 走看看