SAP固定资产双列标签打印代码

购买的标签是两列,就是一行要打两个标签。

关键思路:打印结构一行里面包含两个列

SAP固定资产双列标签打印代码

 

*&---------------------------------------------------------------------*
*& Report ZFI027
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfi027.


TABLES:anla,csks,anlh,anlz,cskt,but000.

DATA:BEGIN OF gs_anla,
       bukrs  LIKE anla-bukrs"公司代码
       anln1  LIKE anla-anln1"主资产号
       txt50  LIKE anla-txt50"资产品名
       gdlgrp LIKE anla-gdlgrp"评估组 5-购置日期
       aktiv  LIKE anla-aktiv"资产资本化日期
       lifnr  LIKE anla-lifnr"资产提供者名
       txa50  LIKE anla-txa50,
       sernr  LIKE anla-sernr"***
       invnr  LIKE anla-invnr,
     END OF gs_anla.

DATA:BEGIN OF gs_but000,
       partner   LIKE but000-partner,
       name_org1 LIKE but000-name_org1,
     END OF gs_but000.
DATA:gt_but000 LIKE TABLE OF gs_but000.

DATA:BEGIN OF gs_anlz,
       anln1 LIKE anlz-anln1,
       kostl LIKE anlz-kostl"成本中心
       bdatu LIKE anlz-bdatu"结束日
       adatu LIKE anlz-adatu"起始日
     END OF gs_anlz.

DATA:BEGIN OF gs_cskt,
       kostl LIKE cskt-kostl,
       ltext LIKE cskt-ltext,
     END OF gs_cskt.


DATA:BEGIN OF gs_csks,
       kostl LIKE csks-kostl"成本中心
*       name1 LIKE csks-name1, "使用部门
       verak LIKE csks-verak"负责人
*       datbi LIKE csks-datbi,
*       datab LIKE csks-datab,
     END OF gs_csks.


DATA:BEGIN OF gs_anlh,
       anln1   LIKE anlh-anln1,
       anlhtxt LIKE anlh-anlhtxt"资产主号说明-规格型号
     END OF gs_anlh.


DATA:BEGIN OF gs_out,
       mark,
       bukrs     LIKE anla-bukrs,
       anln1     LIKE anla-anln1,
       txt50     LIKE anla-txt50,
       gdlgrp    LIKE anla-gdlgrp,
       aktiv     LIKE anla-aktiv,
       name_org1 LIKE but000-name_org1,
       kostl     LIKE anlz-kostl,
       ltext     LIKE cskt-ltext,
       verak     LIKE csks-verak,
       txa50     LIKE anla-txa50,
       bdatu     LIKE anlz-bdatu"结束日
       adatu     LIKE anlz-adatu"起始日
       sernr     LIKE anla-sernr"***
       invnr     LIKE anla-invnr,
       anlhtxt   LIKE anlh-anlhtxt,
     END OF gs_out.

DATA:gt_anla LIKE TABLE OF gs_anla,
     gt_anlz LIKE TABLE OF gs_anlz,
     gt_csks LIKE TABLE OF gs_csks,
     gt_anlh LIKE TABLE OF gs_anlh,
     gt_cskt LIKE TABLE OF gs_cskt,
     gt_out  LIKE TABLE OF gs_out.



DATAgs_fieldcat TYPE slis_fieldcat_alv,
      gt_fieldcat LIKE TABLE OF gs_fieldcat.

DATAgs_layout TYPE slis_layout_alv.


DATAg_fm_name TYPE rs38l_fnam.
DATAgw_options TYPE ssfcompop,
      gw_control TYPE ssfctrlop.


*ZPPS008S





*&---------------------------------------------------------------------*
*& 包含               ZPPF006_SCR
*&---------------------------------------------------------------------*
SELECT-OPTIONS:s_bukrs FOR anla-bukrs.
SELECT-OPTIONS:s_anln1 FOR anla-anln1.
SELECT-OPTIONS:s_txt50 FOR anla-txt50.
SELECT-OPTIONS:s_gdlgrp FOR anla-gdlgrp.
SELECT-OPTIONS:s_aktiv FOR anla-aktiv.
SELECT-OPTIONS:s_kostl FOR csks-kostl.
SELECT-OPTIONS:s_sernr FOR anla-sernr.


START-OF-SELECTION.
  PERFORM:frm_get_data.
  PERFORM:frm_process_data.
  PERFORM:frm_display_data.


FORM frm_get_data .

  CLEAR:gt_anla.
  DATA:lv_tabix LIKE sy-tabix.

  SELECT bukrs anln1 txt50 gdlgrp aktiv lifnr txa50 sernr invnr
                 
INTO TABLE gt_anla
                 
FROM anla
                 
WHERE bukrs IN s_bukrs
                 
AND anln1 IN s_anln1
                 
AND txt50 IN s_txt50
                 
AND gdlgrp IN s_gdlgrp
                 
AND aktiv IN s_aktiv
                  
AND sernr IN  s_sernr.

  SORT gt_anla BY anln1.
  DELETE ADJACENT DUPLICATES FROM gt_anla COMPARING anln1.



  IF gt_anlz[] IS NOT INITIAL.
    SELECT kostl  verak  INTO TABLE gt_csks
                             
FROM csks
                             
FOR ALL ENTRIES IN gt_anlz
                             
WHERE kostl gt_anlz-kostl.
*                             AND datbi = '99991231'.
  ENDIF.

  IF gt_anla[] IS NOT INITIAL.
    SELECT anln1 kostl bdatu adatu INTO TABLE  gt_anlz FROM anlz FOR ALL ENTRIES IN gt_anla
                            
WHERE anln1 gt_anla-anln1
                             
AND kostl IN s_kostl
                             
AND bdatu '99991231'.

  ENDIF.

  IF s_kostl[] IS NOT INITIAL.
    LOOP AT gt_anla INTO gs_anla.
      lv_tabix sy-tabix.
      READ TABLE gt_anlz WITH KEY anln1 gs_anla-anln1
                         
TRANSPORTING NO FIELDS.
      IF sy-subrc <> 0.
        DELETE gt_anla INDEX lv_tabix.
        CONTINUE.
        CLEAR:lv_tabix.
      ENDIF.

    ENDLOOP.
  ENDIF.

  IF gt_anla[] IS NOT INITIAL.
    SELECT partner name_org1 INTO TABLE gt_but000 FROM but000
              
FOR ALL ENTRIES IN gt_anla
              
WHERE partner gt_anla-lifnr.


  ENDIF.

  IF  gt_anla[] IS NOT INITIAL.
    SELECT kostl ltext INTO TABLE gt_cskt FROM cskt
                  
FOR ALL ENTRIES IN gt_anlz
                  
WHERE kostl gt_anlz-kostl.
  ENDIF.


  IF gt_anlz[] IS NOT INITIAL.
    SELECT kostl  verak  INTO TABLE gt_csks
                             
FROM csks
                             
FOR ALL ENTRIES IN gt_anlz
                             
WHERE kostl gt_anlz-kostl.
*                             AND datbi = '99991231'.

    IF gt_anla[] IS NOT INITIAL.
      SELECT anln1 anlhtxt INTO TABLE gt_anlh
                            
FROM anlh
                            
FOR ALL ENTRIES IN gt_anla
                            
WHERE anln1 gt_anla-anln1.

    ENDIF.

  ENDIF.


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

  SORT gt_anla BY anln1.
  SORT gt_anlz BY anln1.
  SORT gt_csks BY kostl.
  SORT gt_anlh BY anln1.
  SORT gt_cskt BY kostl.
  SORT gt_but000 BY partner.

  CLEAR:gs_anla,gs_anlzgs_csks,gs_anlh ,gs_cskt.


  CLEAR:gs_but000.
  LOOP AT gt_anla INTO gs_anla.
    gs_out-bukrs gs_anla-bukrs.
    gs_out-anln1 gs_anla-anln1.
    gs_out-txt50 gs_anla-txt50.
    gs_out-gdlgrp gs_anla-gdlgrp.
    gs_out-aktiv gs_anla-aktiv.
    gs_out-txa50 gs_anla-txa50.
    gs_out-sernr gs_anla-sernr.
    gs_out-invnr gs_anla-invnr.
*    gs_out-liefe = gs_anla-liefe.


    CLEAR:gs_but000.
    READ TABLE gt_but000 INTO gs_but000
       
WITH KEY partner gs_anla-lifnr
       
BINARY SEARCH.
    IF sy-subrc EQ .
      gs_out-name_org1 gs_but000-name_org1.

    ENDIF.



    READ TABLE gt_anlz INTO gs_anlz
            
WITH KEY anln1 gs_anla-anln1
             
BINARY SEARCH.
    IF sy-subrc EQ 0.
      gs_out-kostl gs_anlz-kostl.
      gs_out-bdatu gs_anlz-bdatu.
      gs_out-adatu gs_anlz-adatu.

      READ TABLE gt_csks INTO gs_csks
          
WITH KEY kostl gs_anlz-kostl
          
BINARY SEARCH.
      IF sy-subrc EQ 0.
*        gs_out-name1 = gs_csks-name1.
        gs_out-verak gs_csks-verak.
*        gs_out-datbi = gs_csks-datbi.
*        gs_out-datab = gs_csks-datab.

        READ TABLE gt_cskt INTO gs_cskt
           
WITH KEY kostl gs_anlz-kostl
           
BINARY SEARCH.
        IF sy-subrc EQ 0.
          gs_out-ltext gs_cskt-ltext.

        ENDIF.
      ENDIF.
    ENDIF.





    READ TABLE gt_anlh INTO gs_anlh
               
WITH  KEY anln1 gs_anla-anln1
               
BINARY SEARCH.
    IF sy-subrc EQ 0.
      gs_out-anlhtxt gs_anlh-anlhtxt.

    ENDIF.
    APPEND gs_out TO gt_out.

    CLEAR:gs_out.
  ENDLOOP.

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

  CLEARgt_fieldcat.
  DEFINE append_field.
    gs_fieldcat-fieldname &1.
    gs_fieldcat-seltext_l &2.

    IF &1 EQ 'ANLN1'.
    gs_fieldcat-ref_fieldname &1.
    gs_fieldcat-ref_tabname 'ANLA'.
 ENDIF.


    APPEND gs_fieldcat TO gt_fieldcat.
 CLEARgs_fieldcat.
  END-OF-DEFINITION.

  append_field:'BUKRS' '公司代码'.
  append_field:'ANLN1' '主资产号'.
  append_field:'TXT50' '资产品名'.
  append_field:'SERNR' '***'.
  append_field:'invnr' '存货号'.
  append_field:'ADATU' '起始日期'.
  append_field:'BDATU' '截止日期'.
  append_field:'GDLGRP' '购置日期'.
  append_field:'AKTIV' '资产资本化日期'.
  append_field:'NAME_ORG1' '供应商'.
  append_field:'KOSTL' '成本中心'.
  append_field:'LTEXT' '使用部门'.
  append_field:'VERAK' '负责人'.
  append_field:'TXA50' '规格型号'.

  gs_layout-box_fieldname 'MARK'.
  gs_layout-colwidth_optimize 'X'.
  gs_layout-zebra 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       sy-repid
      is_layout                
gs_layout
      it_fieldcat              
gt_fieldcat
      i_callback_pf_status_set 
'FRM_STATUS_SET'
      i_callback_user_command  'FRM_USER_COMMAND'
    TABLES
      t_outtab                 gt_out
    
EXCEPTIONS
      program_error            1
      OTHERS                   2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.


ENDFORM.


FORM frm_status_set
   
USING ut_extab TYPE slis_t_extab.
  SET PF-STATUS 'PF_001'.
ENDFORM.

FORM frm_user_command USING uv_ucomm TYPE sy-ucomm
                            rs_selfield 
TYPE slis_selfield.

  IF uv_ucomm EQ 'PRINT'.


   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          formname           'ZSFFI005'
        IMPORTING
          fm_name            g_fm_name
        
EXCEPTIONS
          no_form            1
          no_function_module 2
          OTHERS             3.



    gw_options-tdnewid 'X'.    "New Spool
    gw_options-tdimmed 'X'.
    gw_options-tddelete 'X'.    "Delete Spool After Print
    gw_options-tdfinal 'X'.
    gw_options-tdiexit 'X'.    "Exit after printing in print preview
    gw_options-tddest 'LP01'.

*    gw_control-no_dialog = 'X'.
    gw_control-preview   'X'.
    gw_control-no_open   'X'.
    gw_control-no_close  'X'.
    CALL FUNCTION 'SSF_OPEN'    "打开打印窗口
      EXPORTING
        control_parameters gw_control
        output_options     
gw_options
        user_settings      
''
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.

    DATA:ls_out LIKE zsfi005 .
    DATAlt_out LIKE TABLE OF zsfi005 .
    DATAlv_i TYPE i .
    DATAlv_mod TYPE i .
    lv_i .
    LOOP  AT  gt_out  INTO gs_out WHERE mark EQ 'X'  .
      lv_i lv_i + .
      lv_mod lv_i MOD .
      IF lv_mod EQ .
        ls_out-bukrs1 gs_out-bukrs .
        ls_out-anln11 gs_Out-anln1 .
        ls_out-txt501 gs_out-txt50 .
        ls_out-aktiv1 gs_out-aktiv .
      ELSE .
        ls_out-bukrs2 =  gs_out-bukrs .
        ls_out-anln12 gs_Out-anln1 .
        ls_out-txt502 gs_out-txt50 .
        ls_out-aktiv2 gs_out-aktiv .
        APPEND ls_out TO lt_out .
      ENDIF .
    ENDLOOP .


    CALL FUNCTION g_fm_name
      
EXPORTING
        control_parameters gw_control
        output_options     
gw_options
*       is_bkpf            = gs_bkpf
*    IMPORTING
*       job_output_info    = l_end
*       job_output_options = l_start
      TABLES
        it_out             lt_out
*       it_bkpf            = lt_bkpf
      EXCEPTIONS
        formatting_error   1
        internal_error     2
        send_error         3
        user_canceled      4
        OTHERS             5.
    CLEARlt_out[] .



    CALL FUNCTION 'SSF_CLOSE'
      EXCEPTIONS
        formatting_error 1
        internal_error   2
        send_error       3
        OTHERS           4.


  ENDIF .
ENDFORM.




*&---------------------------------------------------------------------*
*& Form FRM_OUT2_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*