MM-采购变更单打印(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZMMR125
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-05-27
*& Program Type        :  Report
*& Description         :  采购变更单打印
*&---------------------------------------------------------------------*
REPORT ZMMR125.

*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:EKKO,EKPO,MARC.

TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE LVC_S_LAYO,
      GT_FIELDCAT TYPE LVC_T_FCAT,
      IS_VARIANT  TYPE DISVARIANT.

DATAG_TITLE_0200 TYPE STRING,
      LV_SUM       TYPE STRING,
      G_INDEX      TYPE SY-INDEX.
DATALS_STYLE TYPE LVC_S_STYL,
      LT_STYLE TYPE TABLE OF LVC_S_STYL.

DATAGT_DATA      TYPE TABLE OF ZTS_PODATA_HEAD WITH HEADER LINE.
DATAGT_DATA_A    TYPE TABLE OF ZTS_PODATA_HEAD WITH HEADER LINE.
DATAGT_DATA_IT   TYPE TABLE OF ZTS_PODATA_ITEM WITH HEADER LINE.
DATAGT_DATA_IT_B TYPE TABLE OF ZTS_PODATA_ITEM WITH HEADER LINE.
DATAGT_DATA_IT_Z TYPE TABLE OF ZTS_PODATA_ITEM WITH HEADER LINE.
DATAGV_TOP       TYPE SDYDO_TEXT_ELEMENT.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONSS_EBELN  FOR  EKKO-EBELN  MODIF ID C1,                           "采购凭证编号
                S_BUKRS  FOR  EKKO-BUKRS  MODIF ID C1,                           "公司代码
                S_EKORG  FOR  EKKO-EKORG  MODIF ID C1,                           "采购组织
                S_EKGRP  FOR  EKKO-EKGRP  MODIF ID C1,                           "采购组
                S_BEDAT  FOR  EKKO-BEDAT  MODIF ID C1,                           "凭证日期
                S_WERKS  FOR  EKPO-WERKS  MODIF ID C1,                           "工厂
                S_DISPO  FOR  MARC-DISPO  MODIF ID C1.                           "MRP控制员
SELECTION-SCREEN END OF BLOCK B1.

*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含               ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_OUTPUT .
  LOOP AT SCREEN.
    CASE SCREEN-GROUP1.
      WHEN 'M1'.
        SCREEN-INPUT '0'.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
* AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
*  ID 'WERKS' FIELD P_WERKS.
*  IF SY-SUBRC <> 0.
*    MESSAGE '您没有工厂:'&& P_WERKS && '  的权限!' TYPE 'E' .
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA LV_FRGSX  TYPE CHAR10 .
  DATA LV_GLAG   TYPE C .
  DATA LV_E01    TYPE C .
  DATA LV_ZUSER1 TYPE CHAR10 .
  DATA EREV TYPE EREV .
  CLEAR GT_DATA[] .
  SELECT
    EKKO~EBELN
    EKKO
~BUKRS
    EKKO
~BSART
    EKKO
~LIFNR
    EKKO
~ZTERM
    EKKO
~WAERS
    EKKO
~BEDAT
    EKKO
~VERKF
    EKKO
~INCO1
    EKKO
~INCO2
    EKKO
~FRGKE
    EKKO
~REVNO
    EKKO
~FRGSX
    MARC
~DISPO
    
INTO CORRESPONDING FIELDS OF TABLE GT_DATA
    
FROM EKKO
    INNER 
JOIN EKPO ON EKKO~EBELN EKPO~EBELN
     
LEFT JOIN MARC ON EKPO~MATNR MARC~MATNR AND EKPO~WERKS MARC~WERKS
    
WHERE EKKO~EBELN IN S_EBELN
      
AND EKKO~BUKRS IN S_BUKRS
      
AND EKKO~EKORG IN S_EKORG
      
AND EKKO~EKGRP IN S_EKGRP
      
AND EKKO~BEDAT IN S_BEDAT
*      AND ( EKKO~FRGKE = 'R' OR EKKO~FRGGR = '' )
      AND EKPO~WERKS IN S_WERKS
*      AND MARC~DISPO IN S_DISPO
      .
  DELETE GT_DATA[] WHERE DISPO NOT IN S_DISPO .
  SORT GT_DATA[] BY EBELN .
  DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING EBELN.

  LOOP AT GT_DATA.

    CLEAR EREV .
    SELECT SINGLE REVOK TXZ01 INTO CORRESPONDING FIELDS OF EREV FROM EREV
      
WHERE REVNO GT_DATA-REVNO
      
.
    GT_DATA-TXZ01 EREV-TXZ01 .

    SELECT SINGLE WERKS INTO GT_DATA-WERKS FROM EKPO
      
WHERE EBELN GT_DATA-EBELN
      
.
    SELECT SINGLE ADRNR INTO GT_DATA-ADDRNUMBER FROM T001
      
WHERE BUKRS GT_DATA-BUKRS
      
.
    SELECT SINGLE NAME1 NAME2 NAME3 STREET INTO GT_DATA-AD_NAME1 ,GT_DATA-AD_NAME2 ,GT_DATA-AD_NAME3 ,GT_DATA-STREET FROM ADRC
      
WHERE ADDRNUMBER GT_DATA-ADDRNUMBER
      
.
    SELECT SINGLE NAME1 TELF1 TELFX INTO GT_DATA-NAME1 GT_DATA-TELF1 GT_DATA-TELFX FROM LFA1
      
WHERE LIFNR GT_DATA-LIFNR
      
.
*付款条件描述
    SELECT SINGLE TEXT1 INTO GT_DATA-TEXT1 FROM T052U
      
WHERE ZTERM GT_DATA-ZTERM
*        AND SPRAS = 1
        .
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
      EXPORTING
        INPUT  GT_DATA-LIFNR
      
IMPORTING
        OUTPUT GT_DATA-LIFNR.
*供应商
    CONCATENATE GT_DATA-LIFNR GT_DATA-NAME1 INTO GT_DATA-NAME_L SEPARATED BY ' '.
*公司名称(EN
    CONCATENATE GT_DATA-AD_NAME2 GT_DATA-AD_NAME3 INTO GT_DATA-AD_NAME_C SEPARATED BY ' '.
*国际贸易条款
    CONCATENATE GT_DATA-INCO1 GT_DATA-INCO2 INTO GT_DATA-ZMYTK SEPARATED BY ' '.

    CLEAR GT_DATA_IT[] .
    SELECT EBELN EBELP WERKS MATNR MENGE MEINS NETPR PEINH MWSKZ TXZ01 INTO CORRESPONDING FIELDS OF TABLE GT_DATA_IT[] FROM EKPO
      
WHERE EBELN GT_DATA-EBELN
      
.

*制单员签名:
    CLEAR LV_FRGSX .
    CONCATENATE '%'GT_DATA-FRGSX'%' INTO LV_FRGSX.

    CLEAR LV_E01 .
    CLEAR LV_ZUSER1 .
    LOOP AT GT_DATA_IT.
      CLEAR LV_GLAG .
      AT FIRST .
        LV_GLAG 'X'.
      ENDAT .

      SELECT SINGLE DISPO INTO GT_DATA_IT-DISPO FROM MARC
        
WHERE WERKS GT_DATA_IT-WERKS
          
AND MATNR GT_DATA_IT-MATNR
          
.
      SELECT SINGLE ZUSER INTO GT_DATA_IT-ZUSER FROM ZTPS
        
WHERE BUKRS GT_DATA-BUKRS
          
AND DISPO GT_DATA_IT-DISPO
          
AND ZSPCL LIKE LV_FRGSX
          
AND ZQZLX 'ZD'
          .
      IF LV_GLAG IS NOT INITIAL .
        LV_ZUSER1 GT_DATA_IT-ZUSER .
      ELSE .
        IF LV_ZUSER1 <> GT_DATA_IT-ZUSER.
          LV_E01 'X'.
          EXIT .
        ENDIF.
      ENDIF.

      MODIFY GT_DATA_IT .
      CLEAR GT_DATA_IT .
    ENDLOOP.

    IF LV_E01 IS NOT INITIAL.
      GT_DATA-ZER01 'E' .
      GT_DATA-MESSAGES '采购单有多个制单人;.
    ELSE .
      READ TABLE GT_DATA_IT INDEX .
      GT_DATA-ZUSER1 GT_DATA_IT-ZUSER .
      IF GT_DATA-ZUSER1 IS INITIAL .
        GT_DATA-ZER01 'E' .
        GT_DATA-MESSAGES '没有匹配的制单人;.
      ENDIF.
      CLEAR GT_DATA_IT .
    ENDIF.

*复核员签名:
    SELECT SINGLE ZUSER INTO GT_DATA-ZUSER2 FROM ZTPS
            
WHERE BUKRS GT_DATA-BUKRS
              
AND ZSPCL LIKE LV_FRGSX
              
AND ZQZLX 'FH'
              .
    IF SY-SUBRC <> 0.
      GT_DATA-ZER02 'E' .
      GT_DATA-MESSAGES GT_DATA-MESSAGES && '没有匹配的复核人;.
    ENDIF.

*批准员签名:
    SELECT SINGLE ZUSER INTO GT_DATA-ZUSER3 FROM ZTPS
            
WHERE BUKRS GT_DATA-BUKRS
              
AND ZSPCL LIKE LV_FRGSX
              
AND ZQZLX 'PZ'
              .
    IF SY-SUBRC <> 0.
      GT_DATA-ZER03 'E' .
      GT_DATA-MESSAGES GT_DATA-MESSAGES && '没有匹配的批准人;.
    ENDIF.

    CLEAR LT_STYLE[] .
    IF GT_DATA-FRGKE <> '' AND GT_DATA-FRGKE <>'R'.
      GT_DATA-MESSAGE '用户该采购单未完成审批!'.
      LS_STYLE-FIELDNAME 'STREET'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
      APPEND LS_STYLE TO LT_STYLE.
      LS_STYLE-FIELDNAME 'CKBOX'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
      APPEND LS_STYLE TO LT_STYLE.
      GT_DATA-STYLE LT_STYLE.
      MODIFY GT_DATA .
    ELSEIF GT_DATA-FRGKE 'R' AND EREV-REVOK <> 'X'.
      GT_DATA-MESSAGE '用户该采购单版本未完成!'.
      LS_STYLE-FIELDNAME 'STREET'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
      APPEND LS_STYLE TO LT_STYLE.
      LS_STYLE-FIELDNAME 'CKBOX'.
      LS_STYLE-STYLE CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
      APPEND LS_STYLE TO LT_STYLE.
      GT_DATA-STYLE LT_STYLE.
      MODIFY GT_DATA .
    ELSEIF GT_DATA-FRGKE 'R' AND EREV-REVOK 'X' OR GT_DATA-FRGKE ''.
*      GT_DATA-MESSAGE = '无异常!'.
      MODIFY GT_DATA .
    ELSE .
      DELETE GT_DATA .
    ENDIF.

    CLEAR GT_DATA .
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-CWIDTH_OPT 'X'.
*  S_LAYOUT-CTAB_FNAME = 'CELLCOLOR'. "单元格颜色内表字段
  S_LAYOUT-STYLEFNAME 'STYLE'.     "内部表字段的字段名称
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_SAVE                   'A'
      IS_VARIANT               IS_VARIANT
      IS_LAYOUT_LVC            
S_LAYOUT
      IT_FIELDCAT_LVC          
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
*     IT_EVENTS                = I_EVENTS
      I_CALLBACK_PF_STATUS_SET 'PF_STATUS_SET'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE LINE OF LVC_T_FCAT.
  DEFINE FILL_FIELD.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-COLTEXT &2.
*    IF WA_FIELDCAT-FIELDNAME =  'MSLJH' OR WA_FIELDCAT-FIELDNAME =  'WCBJH'.
*      WA_FIELDCAT-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.
*
    IF WA_FIELDCAT-FIELDNAME =  'CKBOX' .
      WA_FIELDCAT-CHECKBOX 'X'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME =  'STREET' .
      WA_FIELDCAT-REF_TABLE 'ADRC'.
      WA_FIELDCAT-REF_FIELD 'STREET'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME 'PLNBEZ' OR WA_FIELDCAT-FIELDNAME 'MATNR' .
      WA_FIELDCAT-REF_TABLE 'MARA'.
      WA_FIELDCAT-REF_FIELD 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'ARKTX' OR WA_FIELDCAT-FIELDNAME 'WAKTX' .
      WA_FIELDCAT-REF_TABLE 'VBAP'.
      WA_FIELDCAT-REF_FIELD 'ARKTX'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'AUFNR' .
      WA_FIELDCAT-REF_TABLE 'AUFK'.
      WA_FIELDCAT-REF_FIELD 'AUFNR'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.
  FILL_FIELD :
        'CKBOX'    '选择列',
        'REVNO'    '版本号',
        'TXZ01'    '变更原因',
        'EBELN'    '采购凭证编号',
        'BUKRS'    '公司代码',
        'AD_NAME1' '公司名称',
        'LIFNR'    '供应商帐户号',
        'NAME1'    '供应商描述',
        'ZTERM'    '付款条件代码',
        'TEXT1'    '付款条件',
        'WAERS'    '货币码',
        'BEDAT'    '采购凭证日期',
        'VERKF'    '联系人',
        'ZMYTK'    '国际贸易条款',
        'TELF1'    '电话',
        'TELFX'    '传真号',
        'STREET'   '收货地址',
        'MESSAGES' '签字信息',
        'ZUSER1'   '制单人',
        'ZUSER2'   '复核人',
        'ZUSER3'   '批准人',
        'MESSAGE'  '消息'.
ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATA:   REF TYPE REF TO CL_GUI_ALV_GRID.
  DATA :  LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:   L_BUKRS TYPE T001K-BUKRS.
  DATA:   NUM     TYPE I  .
  DATA:   TEMP    TYPE I  .
  DATA:   TEMP_Z  TYPE I  .
  DATA:   ZTAXL   TYPE CHAR6  .
  DATA:   T_FTAXP LIKE FTAXP OCCURS WITH HEADER LINE  .

  DATAI_DOCUMENT_CATEGORY  LIKE EKKO-BSTYP .
  DATAI_DOCUMENT_NUMBER    LIKE EKKO-EBELN .
  DATAI_DOCUMENT_ITEM      LIKE EKPO-EBELP .
  DATAI_REVISIONLIST       TYPE CHAR1 .
  DATAE_LINES              TYPE SY-TFILL .
  DATAE_OUTTAB             TYPE MECDGRID_T WITH HEADER LINE.
  DATACHARA               TYPE CHAR20.
  DATACHARB               TYPE CHAR20.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'PRINT'."点击打印

      DATAFM_NAME TYPE RS38L_FNAM .
      DATAFORMNAME TYPE TDSFNAME .
      DATA:L_CONTROL_PARAMETERS TYPE SSFCTRLOP.
      DATA:L_OUTPUT_OPTIONS TYPE SSFCOMPOP.
      CLEAR FORMNAME .
      FORMNAME 'ZMMSF125A' .

**Set Print paramenters
      L_CONTROL_PARAMETERS-NO_DIALOG ''.
      L_CONTROL_PARAMETERS-PREVIEW   'X'.
      L_CONTROL_PARAMETERS-LANGU     '1'.

      L_OUTPUT_OPTIONS-TDIMMED  'X'.    打印参数,立即打印
      L_OUTPUT_OPTIONS-TDNEWID  ''.     打印参数,新假脱机请求
      L_OUTPUT_OPTIONS-TDDEST   'LP01'假脱机输出设备
      L_OUTPUT_OPTIONS-TDDELETE 'X'.    "打印参数,打印后删除

      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          FORMNAME           FORMNAME "SmartForms程序
        IMPORTING
          FM_NAME            FM_NAME
        
EXCEPTIONS
          NO_FORM            1
          NO_FUNCTION_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.
        EXIT.
      ENDIF.

      CLEAR GT_DATA_A[] .
      GT_DATA_A[] GT_DATA[] .
      DELETE GT_DATA_A[] WHERE CKBOX IS INITIAL .
      IF GT_DATA_A[] IS NOT INITIAL.

        LOOP AT GT_DATA_A WHERE CKBOX IS NOT INITIAL .

          L_CONTROL_PARAMETERS-NO_OPEN 'X'.
          L_CONTROL_PARAMETERS-NO_CLOSE 'X'."
          AT FIRST .
            L_CONTROL_PARAMETERS-NO_OPEN SPACE."首次运行时打开打印对话框
            L_CONTROL_PARAMETERS-NO_CLOSE 'X'."并且不关闭假脱机请求
          ENDAT .

          CLEAR GT_DATA_IT[] .
          SELECT EBELN EBELP WERKS MATNR MENGE MEINS NETPR PEINH MWSKZ TXZ01 INTO CORRESPONDING FIELDS OF TABLE GT_DATA_IT[] FROM EKPO
            
WHERE EBELN GT_DATA_A-EBELN
            
.

*          CLEAR GT_DATA_IT .
*          READ TABLE GT_DATA_IT INDEX 1 .
*          DO 19 TIMES.
*            APPEND GT_DATA_IT .
*          ENDDO.

          CLEAR GT_DATA_A-ZHSZJE .
          CLEAR GT_DATA_IT_B[].
          LOOP AT GT_DATA_IT.

            CLEAR E_LINES.
            CLEAR E_OUTTAB[].
            CALL FUNCTION 'ME_CHANGEDOC_SELECT'
              EXPORTING
                I_DOCUMENT_CATEGORY 'F'
                I_DOCUMENT_NUMBER   GT_DATA_IT-EBELN
                I_DOCUMENT_ITEM     
GT_DATA_IT-EBELP
                I_REVISIONLIST      
'X'
              IMPORTING
                E_LINES             E_LINES
                E_OUTTAB            
E_OUTTAB[].


            DELETE E_OUTTAB[] WHERE REVNO <> GT_DATA_A-REVNO .
            DELETE E_OUTTAB[] WHERE FNAME <> 'EINDT' AND FNAME <> 'MENGE'.

            IF E_OUTTAB[] IS NOT INITIAL.

*--------------------------------------------------------------------------------
              GT_DATA_IT_B GT_DATA_IT .

              READ TABLE E_OUTTAB WITH KEY FNAME 'EINDT'.
              IF SY-SUBRC 0.

                CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
                  EXPORTING
                    DATE_EXTERNAL            E_OUTTAB-F_OLD
                  
IMPORTING
                    DATE_INTERNAL            GT_DATA_IT_B-EINDT
                  
EXCEPTIONS
                    DATE_EXTERNAL_IS_INVALID 1
                    OTHERS                   2.

              ENDIF.

              READ TABLE E_OUTTAB WITH KEY FNAME 'MENGE'.
              IF SY-SUBRC 0.
                SHIFT E_OUTTAB-F_OLD LEFT DELETING LEADING ' '.
                CLEAR CHARA .
                SPLIT E_OUTTAB-F_OLD AT ' ' INTO CHARA CHARB.
                REPLACE '.' WITH '' INTO CHARA.
                REPLACE ',' WITH '.' INTO CHARA.
                CONDENSE CHARA NO-GAPS .
                GT_DATA_IT_B-MENGE CHARA .
              ENDIF.
              APPEND GT_DATA_IT_B .
              CLEAR GT_DATA_IT_B .
*--------------------------------------------------------------------------------

              IF GT_DATA_IT-PEINH IS NOT INITIAL.
                GT_DATA_IT-ZWSDJ GT_DATA_IT-NETPR / GT_DATA_IT-PEINH .
              ENDIF.

              GT_DATA_IT-ZWSJE GT_DATA_IT-ZWSDJ * GT_DATA_IT-MENGE .

              SELECT SINGLE LAND1 INTO GT_DATA_IT-LAND1 FROM T001W
                
WHERE WERKS GT_DATA_IT-WERKS
                
.

              CLEAR T_FTAXP[] .
              CALL FUNCTION 'GET_TAX_PERCENTAGE'
                EXPORTING
                  ALAND   GT_DATA_IT-LAND1
                  DATAB   
SY-DATUM
                  MWSKZ   
GT_DATA_IT-MWSKZ
                  TXJCD   
''
                TABLES
                  T_FTAXP T_FTAXP[].

*            IF SY-SUBRC <> 0.
**   错误处理
*              MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*              EXIT.
*            ENDIF.

              SORT T_FTAXP[] BY KNUMH DESCENDING .
              CLEAR T_FTAXP .
              READ TABLE T_FTAXP INDEX 1.
              CLEAR ZTAXL .
              ZTAXL T_FTAXP-KBETR / 10 .
              GT_DATA_IT-ZTAXL ZTAXL && ' %' .

              GT_DATA_IT-ZTAXJ GT_DATA_IT-ZWSJE * T_FTAXP-KBETR / 1000 .

              GT_DATA_IT-ZHSJE GT_DATA_IT-ZWSJE + GT_DATA_IT-ZTAXJ .

              SELECT SINGLE EINDT INTO GT_DATA_IT-EINDT FROM EKET
                
WHERE EBELN GT_DATA_IT-EBELN
                  
AND EBELP GT_DATA_IT-EBELP
                  
.

              GT_DATA_A-ZHSZJE GT_DATA_A-ZHSZJE + GT_DATA_IT-ZHSJE .

              MODIFY GT_DATA_IT .
            ELSE .
              DELETE GT_DATA_IT .
            ENDIF.

            CLEAR GT_DATA_IT .
          ENDLOOP.
*          IF GT_DATA_IT[] IS INITIAL .
*            EXIT .
*          ENDIF.
*          READ TABLE GT_DATA_IT INDEX 1 .
*          DO 3 TIMES.
*            APPEND GT_DATA_IT .
*          ENDDO.

          CLEAR GT_DATA_A-ZHSZJEQ .
          LOOP AT GT_DATA_IT_B.

            IF GT_DATA_IT_B-PEINH IS NOT INITIAL.
              GT_DATA_IT_B-ZWSDJ GT_DATA_IT_B-NETPR / GT_DATA_IT_B-PEINH .
            ENDIF.

            GT_DATA_IT_B-ZWSJE GT_DATA_IT_B-ZWSDJ * GT_DATA_IT_B-MENGE .

            SELECT SINGLE LAND1 INTO GT_DATA_IT_B-LAND1 FROM T001W
              
WHERE WERKS GT_DATA_IT_B-WERKS
              
.

            CLEAR T_FTAXP[] .
            CALL FUNCTION 'GET_TAX_PERCENTAGE'
              EXPORTING
                ALAND   GT_DATA_IT_B-LAND1
                DATAB   
SY-DATUM
                MWSKZ   
GT_DATA_IT_B-MWSKZ
                TXJCD   
''
              TABLES
                T_FTAXP T_FTAXP[].

*            IF SY-SUBRC <> 0.
**   错误处理
*              MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*              EXIT.
*            ENDIF.

            SORT T_FTAXP[] BY KNUMH DESCENDING .
            CLEAR T_FTAXP .
            READ TABLE T_FTAXP INDEX 1.
            CLEAR ZTAXL .
            ZTAXL T_FTAXP-KBETR / 10 .
            GT_DATA_IT_B-ZTAXL ZTAXL && ' %' .

            GT_DATA_IT_B-ZTAXJ GT_DATA_IT_B-ZWSJE * T_FTAXP-KBETR / 1000 .

            GT_DATA_IT_B-ZHSJE GT_DATA_IT_B-ZWSJE + GT_DATA_IT_B-ZTAXJ .

            GT_DATA_A-ZHSZJEQ GT_DATA_A-ZHSZJEQ + GT_DATA_IT_B-ZHSJE .

            IF GT_DATA_IT_B-EINDT IS INITIAL .
              SELECT SINGLE EINDT INTO GT_DATA_IT_B-EINDT FROM EKET
                
WHERE EBELN GT_DATA_IT_B-EBELN
                  
AND EBELP GT_DATA_IT_B-EBELP
                  
.
            ENDIF.

            MODIFY GT_DATA_IT_B .
            CLEAR GT_DATA_IT_B .
          ENDLOOP.
          READ TABLE GT_DATA_IT_B INDEX .
*          DO 3 TIMES.
*            APPEND GT_DATA_IT_B .
*          ENDDO.
*-----------------------------------------------------------------
          SORT GT_DATA_IT[] BY EBELN EBELP .
          SORT GT_DATA_IT_B[] BY EBELN EBELP .

          CLEAR GT_DATA_IT_Z .
          CLEAR GT_DATA_IT_Z[] .
          GT_DATA_IT_Z-TXZ02 '变更前:'.
          APPEND GT_DATA_IT_Z .

          APPEND  LINES OF GT_DATA_IT_B TO GT_DATA_IT_Z .

          GT_DATA_IT_Z-TXZ02 '变更后:'.
          APPEND GT_DATA_IT_Z .

          APPEND  LINES OF GT_DATA_IT TO GT_DATA_IT_Z .
*-----------------------------------------------------------------

*          SORT GT_DATA_IT_Z[] BY EBELN EBELP .
          CLEAR NUM .
          DESCRIBE TABLE GT_DATA_IT_Z LINES NUM .
          CLEAR TEMP .
          CLEAR TEMP_Z .
          TEMP   NUM MOD 20 .
          IF TEMP > 9.
            TEMP 29 TEMP .
          ELSE .
            TEMP TEMP .
          ENDIF.
          CLEAR GT_DATA_IT_Z .
          DO TEMP  TIMES.
            APPEND GT_DATA_IT_Z .
          ENDDO.

          CALL FUNCTION FM_NAME
            
EXPORTING
              CONTROL_PARAMETERS L_CONTROL_PARAMETERS
              OUTPUT_OPTIONS     
L_OUTPUT_OPTIONS
              USER_SETTINGS      
''
              GT_HEAD            GT_DATA_A
            
TABLES
              GT_ITEM            GT_DATA_IT_Z[]
            
EXCEPTIONS
              FORMATTING_ERROR   1
              INTERNAL_ERROR     2
              SEND_ERROR         3
              USER_CANCELED      4
              OTHERS             5.
          IF SY-SUBRC <> 0.
            MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.

        ENDLOOP.

        DATALS_JOB_OUTPUT_INFO TYPE SSFCRESCL.

        CALL FUNCTION 'SSF_CLOSE'
          IMPORTING
            JOB_OUTPUT_INFO  LS_JOB_OUTPUT_INFO
          
EXCEPTIONS
            FORMATTING_ERROR 1
            INTERNAL_ERROR   2
            SEND_ERROR       3
            OTHERS           4.

        IF SY-SUBRC <> 0.
**  错误处理
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

      ELSE .
        IF SY-SUBRC <> 0.
          MESSAGE '请选择打印条目!TYPE 'S' DISPLAY LIKE 'E' .
        ENDIF.
      ENDIF.

    WHEN 'ALL'.
      LOOP AT GT_DATA.
        GT_DATA-CKBOX 'X' .
        MODIFY GT_DATA .
        CLEAR GT_DATA .
      ENDLOOP.
    WHEN 'SAL'.
      LOOP AT GT_DATA.
        GT_DATA-CKBOX '' .
        MODIFY GT_DATA .
        CLEAR GT_DATA .
      ENDLOOP.
  ENDCASE.
  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.

ENDFORM.

INITIALIZATION .
  PERFORM FRM_EXCLUDE_OPTION.

AT SELECTION-SCREEN OUTPUT.
  PERFORM SCREEN_OUTPUT.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
  PERFORM FOM_GETDATA .
  PERFORM FRM_DISPLAY.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值