zoukankan      html  css  js  c++  java
  • 动A 动E

    *&---------------------------------------------------------------------*
    *& Report  ZCESHI_26
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    
    REPORT  zceshi_03.
    
    
    TABLES: afpo,aufk,plaf,makt,t001w.
    
    *alv 定义
    TYPE-POOLS: slis.
    DATA: afield TYPE slis_fieldcat_alv,
          fieldcat TYPE slis_t_fieldcat_alv,
          gs_layout TYPE slis_layout_alv,
          g_repid TYPE sy-repid,
          i_layout TYPE slis_layout_alv,
          gridlsl TYPE lvc_s_glay.
    
    *downloadexcel 定义
    
    TYPE-POOLS ole2.
    DATA: v_excel  TYPE ole2_object,
          v_book   TYPE ole2_object,
          v_cell   TYPE ole2_object,
          v_range  TYPE ole2_object,
          v_font   TYPE ole2_object,
          v_color  TYPE ole2_object,
          v_column TYPE ole2_object,
          v_border TYPE ole2_object.
    
    
    DATA:count1 TYPE i VALUE 0.
    DATA:count2 TYPE i VALUE 0.
    DATA:count3 TYPE i VALUE 0.
    DATA:count4 TYPE i VALUE 0.
    DATA:count5 TYPE i VALUE 0.
    DATA:count6 TYPE i VALUE 0.
    DATA:count7 TYPE i VALUE 0.
    DATA:count8 TYPE i VALUE 0.
    DATA:count9 TYPE i VALUE 0.
    DATA:count10 TYPE i VALUE 0.
    DATA:count11 TYPE i VALUE 0.
    DATA:count12 TYPE i VALUE 0.
    
    *内表定义区
    DATA: BEGIN OF itab_d_ty,
      matnr LIKE afpo-matnr,
      maktx LIKE makt-maktx,
      sumnb LIKE afpo-psmng,
      meins LIKE afpo-meins,
      month(6) TYPE c,
      END OF itab_d_ty.
    DATA: BEGIN OF wa_month,
        month(6)  TYPE c,
       END OF wa_month.
    DATA: BEGIN OF itab_alv_ty,
        matnr LIKE afpo-matnr,    "生产订单物料编码
        maktx LIKE makt-maktx,    "生产物料名称
        3     LIKE afpo-psmng,
        4     LIKE afpo-psmng,
        5     LIKE afpo-psmng,
        6     LIKE afpo-psmng,
        7     LIKE afpo-psmng,
        8     LIKE afpo-psmng,
        9     LIKE afpo-psmng,
        10    LIKE afpo-psmng,
        11    LIKE afpo-psmng,
        12    LIKE afpo-psmng,
        13    LIKE afpo-psmng,
        14    LIKE afpo-psmng,
        sumnb LIKE afpo-psmng,
        meins LIKE afpo-meins,
        flag(1),
      END OF itab_alv_ty.
    
    DATA: itab_d  LIKE itab_d_ty  OCCURS 0 WITH HEADER LINE.
    DATA: it_month LIKE wa_month  OCCURS 0 WITH HEADER LINE.
    DATA: itab_alv LIKE itab_alv_ty OCCURS 0 WITH HEADER LINE.
    DATA: str_name2 TYPE string.
    
    
    PARAMETERS: p_pwerk LIKE afpo-pwerk OBLIGATORY,
                p_date LIKE sy-datum OBLIGATORY.
    
    AT SELECTION-SCREEN ON p_pwerk.
      PERFORM: check_pwerk.
    
    
    START-OF-SELECTION.
    
      PERFORM get_data.
      PERFORM creat_allmonth.
      PERFORM alv_display.
    
    
    *&---------------------------------------------------------------------*
    *&      Form  CHECK_PWERK
    *&---------------------------------------------------------------------*
    *       字段检查,检查工厂是否存在
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM check_pwerk .
    
      DATA: mesg_01 TYPE string.
    
      SELECT SINGLE *
        FROM afpo
        WHERE pwerk = p_pwerk.
    
      IF sy-subrc = 4.
        CONCATENATE p_pwerk '工厂不存在!' INTO mesg_01.
        MESSAGE  mesg_01 TYPE 'W'.
        CLEAR sy-subrc.
      ENDIF.
    
    ENDFORM.                    " CHECK_PWERK
    *&---------------------------------------------------------------------*
    *&      Form  GET_DATA
    *&---------------------------------------------------------------------*
    *       主数据取数
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM get_data .
    
      DATA: BEGIN OF itab_01_ty,
        pwerk LIKE afpo-pwerk,    "工厂
        matnr LIKE afpo-matnr,    "生产订单物料编码
        maktx LIKE makt-maktx,    "生产物料名称
        psmng LIKE afpo-psmng,    "生产订单数量
        dgltp LIKE afpo-dgltp,    "生产订单基本结束日期
        meins LIKE afpo-meins,
        month(6) TYPE c,
        END OF itab_01_ty.
      DATA: BEGIN OF itab_02_ty,
        plwrk LIKE plaf-plwrk,
        matnr LIKE plaf-matnr,    "计划订单物料编码
        maktx LIKE makt-maktx,    "计划物料名称
        gsmng LIKE plaf-gsmng,    "计划订单数量
        pedtr LIKE plaf-pedtr,    "计划订单基本结束日期
        meins LIKE plaf-meins,
        month(6) TYPE c,
        END OF itab_02_ty.
      DATA: BEGIN OF itab_tw_ty,
        name2 LIKE t001w-name2,
        END OF itab_tw_ty.
    
      DATA: itab_01 LIKE itab_01_ty OCCURS 0 WITH HEADER LINE.
      DATA: itab_02 LIKE itab_02_ty OCCURS 0 WITH HEADER LINE.
    
      DATA: p_date1 TYPE dats.
      DATA: string_1(6) TYPE c.
      DATA: rows TYPE i.
    
      CLEAR: itab_01[],itab_02[].
    
    *  获取12月之后日期
      PERFORM get_date USING p_date CHANGING p_date1.
      CONCATENATE p_date1(6) '01' INTO p_date1."取一年之后当月的第一天
    * 取生产订单的计划数量和物料号:
      SELECT afpo~pwerk
             afpo~matnr
             makt~maktx
             afpo~psmng
             afpo~dgltp
             afpo~meins
        INTO CORRESPONDING FIELDS OF TABLE itab_01
        FROM afpo
        INNER JOIN aufk ON aufk~aufnr = afpo~aufnr AND aufk~loekz NE 'X'
        INNER JOIN makt ON makt~matnr = afpo~matnr AND makt~spras = 1
        WHERE afpo~pwerk = p_pwerk AND aufk~auart IN ('JJ01', 'JJ05', 'JL01', 'JL05', 'KC01', 'KC05', 'NM01',
        'NM02', 'NM03', 'NX01', 'NX02', 'NX03', 'WY01', 'WY02', 'WE01', 'WE02', 'WS01', 'WS02')
        AND afpo~dgltp >= p_date AND afpo~dgltp < p_date1
        ORDER BY afpo~dgltp.
    
    * 选出符合条件的计划订单
      SELECT plaf~plwrk
             plaf~matnr
             makt~maktx
             plaf~gsmng
             plaf~pedtr
             plaf~meins
        INTO CORRESPONDING FIELDS OF TABLE itab_02
        FROM plaf
        INNER JOIN makt ON makt~matnr = plaf~matnr AND makt~spras = 1
        WHERE plaf~plwrk = p_pwerk AND plaf~pedtr >= p_date AND plaf~pedtr < p_date1
         AND plaf~paart = 'LA' AND plaf~matnr NOT LIKE '000000000080%' .
    
      IF itab_01[] IS INITIAL AND itab_02[] IS INITIAL.
        MESSAGE '未包含任何生产订单和计划单!' TYPE 'I'.
        STOP.
        RETURN.
      ENDIF.
    
    *获取工厂描述
      SELECT name2
        INTO CORRESPONDING FIELDS OF itab_tw_ty
        FROM t001w
        WHERE werks = p_pwerk AND spras = 1.
        str_name2 = itab_tw_ty-name2.
      ENDSELECT.
    
    *提炼itab_01和itab_02的数据
    
      LOOP AT itab_01 INTO itab_01_ty.
    
        MOVE itab_01_ty-matnr TO itab_d_ty-matnr.
        MOVE itab_01_ty-maktx TO itab_d_ty-maktx.
        MOVE itab_01_ty-psmng TO itab_d_ty-sumnb.
        MOVE itab_01_ty-dgltp(6) TO string_1.
        MOVE string_1 TO itab_d_ty-month.
        MOVE itab_01_ty-meins TO itab_d_ty-meins.
        COLLECT itab_d_ty INTO itab_d.
      ENDLOOP.
      CLEAR itab_01[].
    
      LOOP AT itab_02 INTO itab_02_ty.
    
        MOVE itab_02_ty-matnr TO itab_d_ty-matnr.
        MOVE itab_02_ty-maktx TO itab_d_ty-maktx.
        MOVE itab_02_ty-gsmng TO itab_d_ty-sumnb.
        MOVE itab_02_ty-pedtr(6) TO string_1.
        MOVE string_1 TO itab_d_ty-month.
        MOVE itab_02_ty-meins TO itab_d_ty-meins.
        COLLECT itab_d_ty INTO itab_d.
      ENDLOOP.
      CLEAR itab_02[].
    
      SORT itab_d BY month matnr.
    
    ENDFORM.                    " GET_DATA
    *&---------------------------------------------------------------------*
    *&      Form  GET_DATE
    *&---------------------------------------------------------------------*
    *       计算出当前年月之后一年的年月
    *----------------------------------------------------------------------*
    *      -->P_P_DATE  text
    *      <--P_P_DATE1  text
    *----------------------------------------------------------------------*
    FORM get_date  USING    l_date
                   CHANGING l_date1.
    
      CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
        EXPORTING
          date      = l_date
          days      = 0 "天数加N或者减N  不加也不减 写0
          months    = 12  "月份加N或者减N 不加也不减 写0
          signum    = '+' "可以是+或者-
          years     = 0"年份加N或者减N 不加也不减 写0
        IMPORTING
          calc_date = l_date1."得到加减之后的日期
    
    ENDFORM.                    " GET_DATE
    *&---------------------------------------------------------------------*
    *&      Form  CREAT_ALLMONTH
    *&---------------------------------------------------------------------*
    *       获取满足条件的数据的所有不相同的年月份
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM creat_allmonth .
    
      DATA: c1(6) TYPE c,
            y2(4) TYPE c,
            m3(2) TYPE c.
    
      MOVE p_date(6) TO c1.
      MOVE p_date(4) TO y2.
      MOVE p_date+4(2) TO m3.
      APPEND c1 TO it_month.
    
      DO 11 TIMES.
        m3 = m3 + 1.
        IF m3 < 10.
          CONCATENATE y2 '0' m3 INTO c1.
          APPEND c1 TO it_month.
        ELSEIF m3 > 9 AND m3 < 13.
          CONCATENATE y2  m3 INTO c1.
          APPEND c1 TO it_month.
        ELSEIF m3 > 12.
          m3 = 1.
          y2 = y2 + 1.
          CONCATENATE y2 '0' m3 INTO c1.
          APPEND c1 TO it_month.
        ENDIF.
      ENDDO.
    
    ENDFORM.                    " CREAT_ALLMONTH
    *&---------------------------------------------------------------------*
    *&      Form  ALV_DISPLAY
    *&---------------------------------------------------------------------*
    *       调用ALV
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM alv_display .
    
      PERFORM get_alv_data.
      PERFORM layout_build.
      PERFORM fieldcat_init USING fieldcat[].
      PERFORM display_alv.
    
    ENDFORM.                    " ALV_DISPLAY
    *&---------------------------------------------------------------------*
    *&      Form  GET_ALV_DATA
    *&---------------------------------------------------------------------*
    *       为ALV取得数据
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM get_alv_data .
    
      FIELD-SYMBOLS: <dyn_field> TYPE any.
      DATA: col(4) TYPE c.
    
      DEFINE cutmonth.
    
        loop at it_month into wa_month.
          if wa_month-month = &1.
            col = sy-tabix + 2.
            assign component col of structure itab_alv_ty to <dyn_field>.
            <dyn_field> = &2.
            clear col.
          endif.
        endloop.
    
      END-OF-DEFINITION.
    
      LOOP AT itab_d INTO itab_d_ty.
    
        ASSIGN COMPONENT 1 OF STRUCTURE itab_alv_ty TO <dyn_field>.
        PERFORM cut_zero USING itab_d_ty-matnr CHANGING itab_d_ty-matnr.
        <dyn_field> = itab_d_ty-matnr.
        ASSIGN COMPONENT 2 OF STRUCTURE itab_alv_ty TO <dyn_field>.
        <dyn_field> = itab_d_ty-maktx.
    
        cutmonth itab_d_ty-month itab_d_ty-sumnb.
        ASSIGN COMPONENT 16 OF STRUCTURE itab_alv_ty TO <dyn_field>.
        <dyn_field> = itab_d_ty-meins.
        COLLECT itab_alv_ty INTO itab_alv.
        CLEAR itab_alv_ty.
      ENDLOOP.
    
      LOOP AT itab_alv INTO itab_alv_ty.
        itab_alv_ty-sumnb = itab_alv_ty-3 + itab_alv_ty-4 + itab_alv_ty-5 + itab_alv_ty-6 + itab_alv_ty-7 + itab_alv_ty-8
                       + itab_alv_ty-9 + itab_alv_ty-10 + itab_alv_ty-11 + itab_alv_ty-12 + itab_alv_ty-13 + itab_alv_ty-14.
        MODIFY itab_alv FROM itab_alv_ty.
      ENDLOOP.
    
      LOOP AT itab_alv.
        IF itab_alv-3 IS NOT INITIAL.
          count1 = count1 + 1.
        ENDIF.
    
        IF itab_alv-4 IS NOT INITIAL.
          count2 = count2 + 1.
        ENDIF.
    
        IF itab_alv-5 IS NOT INITIAL.
          count3 = count3 + 1.
        ENDIF.
    
        IF itab_alv-6 IS NOT INITIAL.
          count4 = count4 + 1.
        ENDIF.
    
        IF itab_alv-7 IS NOT INITIAL.
          count5 = count5 + 1.
        ENDIF.
    
        IF itab_alv-8 IS NOT INITIAL.
          count6 = count6 + 1.
        ENDIF.
    
        IF itab_alv-9 IS NOT INITIAL.
          count7 = count7 + 1.
        ENDIF.
    
        IF itab_alv-10 IS NOT INITIAL.
          count8 = count8 + 1.
        ENDIF.
    
        IF itab_alv-11 IS NOT INITIAL.
          count9 = count9 + 1.
        ENDIF.
    
        IF itab_alv-12 IS NOT INITIAL.
          count10 = count10 + 1.
        ENDIF.
    
        IF itab_alv-13 IS NOT INITIAL.
          count11 = count11 + 1.
        ENDIF.
    
        IF itab_alv-14 IS NOT INITIAL.
          count12 = count12 + 1.
        ENDIF.
      ENDLOOP.
    ENDFORM.                    " GET_ALV_DATA
    *&---------------------------------------------------------------------*
    *&      Form  LAYOUT_BUILD
    *&---------------------------------------------------------------------*
    *       设置ALV的显示格式
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM layout_build .
    
      i_layout-box_fieldname        = 'FLAG'.
      i_layout-colwidth_optimize    = 'X'. "优化列宽选项是否设置
      i_layout-zebra                = 'X'.
      i_layout-detail_initial_lines = 'X'.
      i_layout-no_vline             = 'X'." layout_build
    
    ENDFORM.                    " LAYOUT_BUILD
    *&---------------------------------------------------------------------*
    *&      Form  FIELDCAT_INIT
    *&---------------------------------------------------------------------*
    *       设置ALV的列项目
    *----------------------------------------------------------------------*
    *      -->P_FIELDCAT[]  text
    *----------------------------------------------------------------------*
    FORM fieldcat_init USING fieldcat TYPE slis_t_fieldcat_alv.
      DATA: string(10) TYPE c.
      DATA: tabix(6) TYPE c.
      DATA: c1(4) TYPE c.
      DATA: c2(2) TYPE c.
      DATA: c3(2) TYPE c.
      DATA: afieldcat TYPE slis_fieldcat_alv,
                  pos TYPE i.
      CLEAR pos.
      DEFINE d_get_field.
        pos = pos + 1.
        clear afieldcat.
        afieldcat-col_pos  = pos.
        afieldcat-fieldname  = &1.
        afieldcat-seltext_l = &2.
        afieldcat-key = &3.
        afieldcat-no_zero = &4.
        afieldcat-decimals_out = '0'.
        append afieldcat to fieldcat.
      END-OF-DEFINITION.
      d_get_field 'MATNR' '物料编号' 'X' ''.
      d_get_field 'MAKTX' '物料描述' 'X' ''.
      LOOP AT it_month INTO wa_month.
        MOVE wa_month-month(4) TO c1.
        MOVE wa_month-month+4(2) TO c2.
        CONCATENATE c1 '' c2 '' INTO string.
        tabix = sy-tabix + 2.
        CONDENSE tabix NO-GAPS.
        CASE tabix.
          WHEN  '3'.
            IF count1 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '4'.
            IF count2 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '5'.
            IF count3 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '6'.
            IF count4 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '7'.
            IF count5 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '8'.
            IF count6 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '9'.
            IF count7 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '10'.
            IF count8 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '11'.
            IF count9 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '12'.
            IF count10 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '13'.
            IF count11 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
    
          WHEN '14'.
            IF count12 NE 0.
              d_get_field  tabix string '' 'X'.
            ENDIF.
          WHEN OTHERS.
        ENDCASE.
    
    *    d_get_field  tabix string '' 'X'.
        CLEAR: c1,c2,tabix,string.
      ENDLOOP.
      d_get_field 'SUMNB' '总计' '' ''.
      d_get_field 'MEINS' '单位' '' ''.
    
    ENDFORM.                    " FIELDCAT_INIT
    *&---------------------------------------------------------------------*
    *&      Form  DISPLAY_ALV
    *&---------------------------------------------------------------------*
    *       显示ALV
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM display_alv .
    
      g_repid = sy-repid.
    
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
    *     i_grid_settings          = gridlsl
    *     i_structure_name         = ''
          i_callback_program       = g_repid
          i_callback_pf_status_set = 'USER_STATUS'
          i_callback_user_command  = 'USER_COMMAND'
          it_fieldcat              = fieldcat
          is_layout                = i_layout
          i_callback_top_of_page   = slis_ev_top_of_page
          i_save                   = 'A'
    *     it_sort                  = it_sort
    *     it_events                = er_events[]
        TABLES
          t_outtab                 = itab_alv.
    
      CLEAR itab_alv[].
    
    ENDFORM.                    " DISPLAY_ALV
    *&---------------------------------------------------------------------*
    *&      Form  user_status
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM user_status USING extab TYPE slis_t_extab.
    
      SET TITLEBAR 'TITLE_ALV'.
      SET PF-STATUS 'STSTUS_ALV'.
    
    ENDFORM.                    "USER_STATUS
    *&---------------------------------------------------------------------*
    *&      Form  user_command
    *&---------------------------------------------------------------------*
    *       抓取ALV的功能码
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM user_command USING r_ucomm LIKE sy-ucomm
                            rs_selfield TYPE slis_selfield.
      rs_selfield-refresh = 'X'.
    
      r_ucomm = sy-ucomm.
      CLEAR sy-ucomm.
    
      CASE r_ucomm.
        WHEN 'DLOD'.
          PERFORM download_excel.
        WHEN OTHERS.
      ENDCASE.
    
    ENDFORM.                    "user_command
    *&---------------------------------------------------------------------*
    *&      Form  top_of_page
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM top_of_page.
    
      DATA: lit_header TYPE slis_t_listheader,
            lhe_header TYPE slis_listheader.
    *        wk_rate TYPE string.
    
      CLEAR lhe_header.
      lhe_header-typ = 'H'.
      lhe_header-info = str_name2.
      APPEND lhe_header TO lit_header.
      CLEAR lhe_header.
    
      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
        EXPORTING
          it_list_commentary = lit_header.
    
    ENDFORM.                    "top_of_page
    *&---------------------------------------------------------------------*
    *&      Form  DOWNLOAD_EXCEL
    *&---------------------------------------------------------------------*
    *       导出到Excel
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM download_excel .
    
      DATA column TYPE i.
      DATA: str_title TYPE string.
      DATA: str_month TYPE string.
    
    *对单元格操作的宏
      DEFINE fill_cell.
        call method of
            v_excel
            'CELLS' = v_cell
          exporting
            #1      = &1
            #2      = &2.
        set property of v_cell 'value'  = &3.
    
        call method of v_cell 'FONT'  = v_font.
        set property of v_font 'Bold' = &4.
        set property of v_font 'size' = &5.
    
      END-OF-DEFINITION.
    
    *为特定区域加边框的宏
      DEFINE addborder.
        call method of
            v_excel
            'Range' = v_range
          exporting
            #1      = &1
            #2      = &2.
    
        get property of v_range 'Borders' = v_border.
        set property of v_border 'LineStyle' = 1.
        set property of v_border 'WEIGHT' = 2.
        free object v_border.
      END-OF-DEFINITION.
    
    *产生对象
      CREATE OBJECT v_excel 'Excel.Application'.
      CALL METHOD OF
          v_excel
          'Workbooks' = v_book.
      CALL METHOD OF
          v_book
          'ADD'.
    *生产大标题,居中,加粗
      CONCATENATE str_name2 '整机投入产品明细表' INTO str_title.
      fill_cell 1 1 str_title 1 18.
      SET PROPERTY OF v_cell 'HorizontalAlignment' = -4108.
    *合并大标题所在单元格
      CALL METHOD OF
          v_excel
          'Range' = v_range
        EXPORTING
          #1      = 'A1'
          #2      = 'P1'.
      CALL METHOD OF
          v_range
          'select'.
      SET PROPERTY OF v_range 'MergeCells' = 1.
    *添加年月份标题
      fill_cell 2 3 '年份月份' 1 10.
      SET PROPERTY OF v_cell 'HorizontalAlignment' = -4108.
    *合并年月份标题单元格,居中
      CALL METHOD OF
          v_excel
          'Range' = v_range
        EXPORTING
          #1      = 'C2'
          #2      = 'P2'.
      CALL METHOD OF
          v_range
          'select'.
      SET PROPERTY OF v_range 'MergeCells' = 1.
    *添加主表表头信息
      fill_cell 2 1 '物料编码' 1 10.
      SET PROPERTY OF v_cell 'HorizontalAlignment' = -4108.
      fill_cell 2 2 '物料描述' 1 10.
      SET PROPERTY OF v_cell 'HorizontalAlignment' = -4108.
    
      CALL METHOD OF
          v_excel
          'Range' = v_range
        EXPORTING
          #1      = 'A2'
          #2      = 'A3'.
      CALL METHOD OF
          v_range
          'select'.
      SET PROPERTY OF v_range 'MergeCells' = 1.
    
      CALL METHOD OF
          v_excel
          'Range' = v_range
        EXPORTING
          #1      = 'B2'
          #2      = 'B3'.
      CALL METHOD OF
          v_range
          'select'.
      SET PROPERTY OF v_range 'MergeCells' = 1.
    
      LOOP AT it_month INTO wa_month.
        column = sy-tabix + 2.
        CONCATENATE wa_month-month(4) '' wa_month-month+4(2) '' INTO str_month.
        fill_cell 3 column str_month 1 10.
      ENDLOOP.
      fill_cell 3 15 '总计' 1 10.
      fill_cell 3 16 '单位' 1 10.
    
    *为数据区赋值
      FIELD-SYMBOLS: <field> TYPE any.
    
      DATA lv_txt(50) TYPE c.
    
      DATA: row_i TYPE i,
            col_i TYPE i.
    
      LOOP AT itab_alv.
    
        row_i = sy-tabix + 3.
    
        DO 16 TIMES.
          col_i = sy-index.
          ASSIGN COMPONENT sy-index OF STRUCTURE itab_alv TO <field>.
          lv_txt = <field>.
          IF col_i > 2 AND col_i < 16 AND lv_txt = 0.
            lv_txt = ''.
          ENDIF.
          fill_cell row_i col_i lv_txt 0 10.
    
    *      IF col_i = 15.
    *        CALL METHOD of v_cell 'INTERIOR' = v_color.
    *        SET PROPERTY OF v_color 'ColorIndex' = 8.
    *      ENDIF.
        ENDDO.
    
      ENDLOOP.
    
    *为除了大标题外的所有加边框
      DATA: intstr TYPE string.
      intstr = row_i.
      CONCATENATE 'P' intstr INTO intstr.
    
      addborder 'A2' 'B3'.
      addborder 'C2' 'P3'.
      addborder 'A4' intstr.
    *设置列的长度为自适应
      CALL METHOD OF
          v_excel
          'Columns' = v_column.
      CALL METHOD OF
          v_column
          'Autofit'.
    *设置Excel可见
      SET PROPERTY OF v_excel 'Visible' = 1.
    
    ENDFORM.                    " DOWNLOAD_EXCEL
    *&---------------------------------------------------------------------*
    *&      Form  CUT_ZERO
    *&---------------------------------------------------------------------*
    *       去掉前导零
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM cut_zero USING  input_data
                   CHANGING output_data.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = input_data
        IMPORTING
          output = output_data.
    
    ENDFORM.                    " CUT_ZERO
  • 相关阅读:
    (9)ASP.NET Core2.2 中的MVC路由二
    (8)ASP.NET Core2.2 中的MVC路由一
    (7)ASP.NET Core2.2 中的错误处理
    (6)ASP.NET Core2.2 中使用IHttpClientFactory发出HTTP请求
    (5)ASP.NET Core2.2 中的静态文件
    (4)ASP.NET Core2.2 中间件
    蒲公英 &#183; JELLY技术周刊 Vol.05: Rust & Electron 的高性能实践 -- Finda
    Taro 2.2 全面插件化,支持拓展和定制个性化功能
    使用 Taro 快速开发京东小程序
    技术周刊 · 0202 年了,你还不学一下 WASM 么?
  • 原文地址:https://www.cnblogs.com/huangjianisgood/p/2756285.html
Copyright © 2011-2022 走看看