ZSD018出货明细表

     出货明细表,反正都是差不多的,ALV显示呗。以后一定要记得即时写Blog。还是不多说了,直接上code

*&---------------------------------------------------------------------*
*& Report  ZSD018
*&---------------------------------------------------------------------*
* Author  : Jasson.Lee
* Date    : 2011.12.08
* Purpose :
* Modi Log: 2011.12.08  Jasson.Lee Create
* Modi Log:
* Modi Log:
* Modi Log:
*----------------------------------------------------------------------
REPORT  zsd018.
TABLES: likp,vttp.
TYPE-POOLS: slis.
*--------------------------------
* Selection Screen
*--------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
  s_num FOR likp-vbeln,  "送货单
  s_date FOR likp-bldat.
SELECTION-SCREEN END OF BLOCK b1.

*****************************************************************************
DATA: g_status TYPE slis_formname VALUE 'STANDARD_02'.        "加工具栏

DATA:
      i_fieldcat_alv    TYPE slis_t_fieldcat_alv,
      i_fieldcat        TYPE slis_fieldcat_alv,
      i_layout          TYPE slis_layout_alv,
      i_events          TYPE slis_t_event,
      w_events          LIKE LINE OF i_events,
      i_list_comments   TYPE slis_t_listheader,
      w_list_comments   LIKE LINE OF i_list_comments,
      w_repid           LIKE sy-repid.

DATA:
      w_loop        TYPE sy-tabix.
*      l_prod_num1   type co_psmng,
*      l_prod_num2   type  co_psmng.
DATA: BEGIN OF i_tab1 OCCURS 0,
        vbeln    LIKE likp-vbeln,
        tknum    LIKE vttk-tknum,
        exti1    LIKE vttk-exti1,
        exti2    LIKE vttk-exti2,
       END OF i_tab1.
DATA: BEGIN OF i_tab2 OCCURS 0,
        vbeln    LIKE likp-vbeln, "送货编号
        posnr    LIKE lips-posnr, "行项号
        bldat    LIKE likp-bldat, "凭证日期
        kunnr    LIKE likp-kunnr, "送达方
        wadat    LIKE likp-wadat, "计划货物移动日期
*        wadat_ist    like likp-wadat_ist, "实际货物移动日期
        anzpk    LIKE likp-anzpk, "包数
        lfimg    LIKE lips-lfimg, "交货数量
        matnr    LIKE lips-matnr, "物料号
        tknum    LIKE vttk-tknum, "装运编号
        exti1    LIKE vttk-exti1,                           "外部标识1 运输公司
        exti2    LIKE vttk-exti2, "外部标识2 司机/车牌号
        vgpos    LIKE lips-vgpos, "参考项目的项目号
       END OF i_tab2.
DATA: BEGIN OF i_tab3 OCCURS 0,
        vbeln    LIKE likp-vbeln,
        posnr    LIKE lips-posnr,
        vgpos    LIKE lips-vgpos,
       END OF i_tab3.
*data :p_coco like knb1-bukrs.
*data :w_total(10) type c.
*data :w_loop1 like sy-tabix.
*data :w_loop2 like sy-tabix.
*data :w_loop3 like sy-tabix.
DATA scount(8).
DATA :rcount LIKE sy-tabix.
DATA lstr(20).
DATA lpos(6).
*data lstr1(40).
*data lstr2(40).
*data lstr3(100).
*data lstr4(40).
*data lstr5(40).
*--------------------------------
* Initialization
*--------------------------------
INITIALIZATION.
*--------------------------------
* At Selection Screen PBO
*--------------------------------
AT SELECTION-SCREEN OUTPUT.
*--------------------------------
* Start of Selection
*--------------------------------
START-OF-SELECTION.
  PERFORM get_data.
  PERFORM process_data.
*  perform cal_data.
  PERFORM events_build.
  PERFORM layout_build.
  PERFORM fields_build.
  PERFORM display_data.

END-OF-SELECTION.
*--------------------------------
* Top of Page
*--------------------------------
TOP-OF-PAGE.
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
FORM get_data.

  SELECT k~vbeln p~posnr k~bldat k~kunnr k~wadat k~anzpk p~lfimg p~matnr p~vgpos
    INTO CORRESPONDING FIELDS OF TABLE i_tab2
    FROM likp AS k INNER JOIN lips AS p ON k~vbeln = p~vbeln
    WHERE k~vbeln IN s_num
    AND   k~bldat IN s_date
    AND   p~lfimg > 0  .

  IF i_tab2[] IS INITIAL .
    MESSAGE i000(zmsg) WITH '没找到对应的数据,请更改查询条件'.
    LEAVE LIST-PROCESSING .
  ELSE.
    SELECT p~vbeln k~tknum k~exti1 k~exti2
       INTO TABLE i_tab1
       FROM vttk AS k INNER JOIN vttp AS p ON k~tknum = p~tknum
       FOR ALL ENTRIES IN i_tab2
       WHERE p~vbeln = i_tab2-vbeln.

    SELECT p~vbeln p~posnr p~vgpos
       INTO TABLE i_tab3
       FROM lips AS p
       FOR ALL ENTRIES IN i_tab2
       WHERE p~vbeln = i_tab2-vbeln AND  p~posnr < '900001'.

  ENDIF.

ENDFORM.                    "get_data
*&---------------------------------------------------------------------*
*&      Form  process_data
*&---------------------------------------------------------------------*
FORM process_data.
  LOOP AT i_tab2.
    w_loop = sy-tabix.
    CLEAR i_tab1.
    READ TABLE i_tab1 WITH KEY vbeln = i_tab2-vbeln BINARY SEARCH.
    IF sy-subrc = 0.
      i_tab2-tknum  = i_tab1-tknum.
      i_tab2-exti1  = i_tab1-exti1.
      i_tab2-exti2  = i_tab1-exti2.
    ENDIF.
    READ TABLE i_tab3 WITH KEY vbeln = i_tab2-vbeln
                               vgpos = i_tab2-vgpos.
    IF sy-subrc = 0.
      i_tab2-posnr = i_tab3-posnr.
    ENDIF.
    MODIFY i_tab2 INDEX w_loop.
    sy-tabix = w_loop + 1.
  ENDLOOP.
ENDFORM.                    "process_data
*&---------------------------------------------------------------------*
*&      Form  CAL_DATA
*&---------------------------------------------------------------------*
FORM cal_data .
  DESCRIBE TABLE i_tab2 LINES rcount.
  scount = rcount.
  CONCATENATE '符合条件的记录数:' scount INTO lstr.

  IF i_tab2[] IS INITIAL .
    MESSAGE i000(zmsg) WITH '没找到对应的数据,请更改查询条件'.
    LEAVE LIST-PROCESSING .
  ENDIF.
ENDFORM.                    " CAL_DATA
*&---------------------------------------------------------------------*
*&      Form  EVENTS_BUILD
*&---------------------------------------------------------------------*
FORM events_build .
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = i_events.

*  read table i_events  with key name = 'END_OF_LIST'  into w_events.
*   if sy-subrc = 0.
*     move 'ALV_END_OF_LIST' to w_events-form.
*     modify i_events from w_events index sy-tabix.
*   endif.

  READ TABLE i_events WITH KEY name = 'USER_COMMAND'   INTO w_events.
  IF sy-subrc = 0.
    MOVE 'USER_COMMAND' TO w_events-form.
    MODIFY i_events FROM w_events INDEX sy-tabix.
  ENDIF.

ENDFORM.                    " EVENTS_BUILD
*&--------------------------------------------------------------------*
*&      Form  ALV_END_OF_LIST
*&--------------------------------------------------------------------*
FORM alv_top_of_page.

  CLEAR: i_list_comments.
  w_list_comments-typ = 'H'.
  w_list_comments-key = ''.
  w_list_comments-info = '  '.
  APPEND w_list_comments TO i_list_comments.
  CLEAR w_list_comments.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = i_list_comments
      i_end_of_list_grid = 'X'.
ENDFORM.                    "ALV_TOP_OF_PAGE
*&--------------------------------------------------------------------*
*&      Form  ALV_END_OF_LIST
*&--------------------------------------------------------------------*
FORM alv_end_of_list.
  CLEAR: i_list_comments.
  w_list_comments-typ = 'H'.
  w_list_comments-key = ''.
  w_list_comments-info = lstr.
  APPEND w_list_comments TO i_list_comments.
  CLEAR w_list_comments.

  w_list_comments-typ = 'S'.
  w_list_comments-key = ''.
  w_list_comments-info = '    报表开发者:IT部              开发日期:2011/12/08'.
  APPEND w_list_comments TO i_list_comments.
  CLEAR w_list_comments.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = i_list_comments
      i_end_of_list_grid = 'X'.
ENDFORM.                    "ALV_END_OF_LIST
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_BUILD
*&---------------------------------------------------------------------*
FORM layout_build .
  i_layout-zebra                = 'X' .         " 显示界面成色带交替
  i_layout-detail_popup         = 'X'.          "弹出详细信息窗口
  i_layout-info_fieldname       = 'COLOR'.      "颜色值
*  I_LAYOUT-COLWIDTH_OPTIMIZE   = 'X'.          "优化列宽选项
  i_layout-detail_initial_lines = 'X'.
  i_layout-detail_titlebar      = 'Delivery Status'.
  i_layout-no_colhead           =' '.
*  I_LAYOUT-BOX_FIELDNAME       = 'BOX' .       " 指明复选框
  w_repid = sy-repid.
ENDFORM.                    " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM display_data .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
*  call function 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      i_callback_user_command  = 'USER_COMMAND'           "用户触发事件
      i_callback_pf_status_set = g_status                 "调用用户事件和按钮事件
      i_callback_program       = w_repid                  "当前程序
      is_layout                = i_layout                 "子函数layout_build填充的格式定义
      it_fieldcat              = i_fieldcat_alv[]         "子函数fields填充的各列
      it_events                = i_events[]
      i_save                   = 'A'                      "保存变式
    TABLES
      t_outtab                 = i_tab2.                  "假设数据都在itab内表中

ENDFORM.                    " DISPLAY_DATA
*-----------------------------------------------------------------------
*    FORM PF_STATUS_SET   加工具栏
*-----------------------------------------------------------------------
FORM standard_02 USING  extab TYPE slis_t_extab.
  SET PF-STATUS 'STD' EXCLUDING extab.
ENDFORM.                    "STANDARD_02
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
FORM user_command  USING i_ucomm LIKE sy-ucomm
                         selfield TYPE slis_selfield.
  CASE i_ucomm.
    WHEN '&IC1'.
      CASE selfield-sel_tab_field.
        WHEN '1-VBELN'.
          SET PARAMETER ID 'VL' FIELD selfield-value.
          CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
        WHEN '1-TKNUM'.
          SET PARAMETER ID 'TNR' FIELD selfield-value.
          CALL TRANSACTION 'VT03N' AND SKIP FIRST SCREEN.
      ENDCASE.
    WHEN OTHERS.
  ENDCASE.

ENDFORM.                    "callback_ucomm
*&---------------------------------------------------------------------*
*&      Form  FIELDS_BUILD
*&---------------------------------------------------------------------*
FORM fields_build .

  DATA tmp_pos TYPE i.
  REFRESH i_fieldcat_alv.
  CLEAR   i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'VBELN'.
  i_fieldcat-seltext_l = '送货单号'.
  i_fieldcat-outputlen = 10.
  i_fieldcat-no_zero   = 'X'.
  i_fieldcat-key       = 'X'.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'POSNR'.
  i_fieldcat-seltext_l = '行项'.
  i_fieldcat-outputlen = 6.
  i_fieldcat-no_zero   = 'X'.
  i_fieldcat-key       = 'X'.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'KUNNR'.
  i_fieldcat-seltext_l = '送达方'.
  i_fieldcat-outputlen = 10.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'BLDAT'.
  i_fieldcat-seltext_l = '凭证日期'.
  i_fieldcat-outputlen = 10.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'WADAT'.
  i_fieldcat-seltext_l = '计划货物移动日期'.
  i_fieldcat-outputlen = 16.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'ANZPK'.
  i_fieldcat-seltext_l = '包数'.
  i_fieldcat-outputlen = 5.
  i_fieldcat-no_zero   = 'X'.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'LFIMG'.
  i_fieldcat-seltext_l = '数量'.
  i_fieldcat-outputlen = 8.
  i_fieldcat-no_zero   = 'X'.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'MATNR'.
  i_fieldcat-seltext_l = '物料号'.
  i_fieldcat-outputlen = 15.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'TKNUM'.
  i_fieldcat-seltext_l = '装运号'.
  i_fieldcat-outputlen = 9.
  i_fieldcat-no_zero   = 'X'.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'EXTI1'.
  i_fieldcat-seltext_l = '商号名称'.
  i_fieldcat-outputlen = 12.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

  tmp_pos = tmp_pos + 1.
  i_fieldcat-col_pos = tmp_pos.
  i_fieldcat-fieldname = 'EXTI2'.
  i_fieldcat-seltext_l = '带货人/车'.
  i_fieldcat-outputlen = 15.
  APPEND i_fieldcat TO i_fieldcat_alv.
  CLEAR i_fieldcat.

ENDFORM.                    " FIELDS_BUILD




猜你喜欢

转载自blog.csdn.net/jiali765/article/details/7268225