ABAP VA02和VA03增强,隐藏金额

项目背景:

  有个销售BOM的,需要了解替代料和其它信息,必须PMC的人才知道更改或删除哪些销售订单的组件。但是不能让PMC的人员看到价格。

更改的地方:

1.下图的红色框内

2.抬头和行项目的条件页签

3.行项目的销售页签

 4.VA02还有抬头的付款卡等地方。

实际动手:

  项目比较急,直接做的隐式增强,在进去的时候,给个提示。方便后面的人通过权限对象查找到更改的地方。

 MESSAGE '没有权限查看金额,检查权限对象:ZVA03' TYPE 'S' DISPLAY LIKE 'W'.

1.SU21创建权限对象,权限对象名称为ZVA03,这个不会的,另行百度。

2.条件页签和组件屏幕,通过下面方法查找,其实在找条件页签的增强点的时候,还找到了出口,但是这个需求在出口处设置会有个BUG,懒得想办法了,这里就不提了,还是一样做的隐式增强。

3.条件页签抬头,和销售订单抬头的净价,先按F1找到屏幕字段、屏幕等信息。然后到se51,通过程序名和屏幕编号,查找增强点例如:

 更改点:

下图的红色框框处,就是条件页签的增强出口。查找方法看上面,这里直接写更改点。

1.进入SE38,打开LV69AF01,

*----------------------------------------------------------------------*
***INCLUDE LV69AF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  TCTRL_KONDITIONEN_INIT
*&---------------------------------------------------------------------*
FORM tctrl_konditionen_init.
*{   INSERT         S4DK908533                                        1
  DATA: lv_check_va03 TYPE c.
  AUTHORITY-CHECK OBJECT 'ZVA03'
              ID 'ACTVT' FIELD '03'.
  IF sy-subrc EQ 0.
    lv_check_va03 = 'X'.
  ENDIF.

*
*}   INSERT

  DATA: da_tfill LIKE sy-tabix.

* Refresh table control if screen number has changed
  STATICS: last_dynnr TYPE dynnr.
  IF sy-dynnr NE last_dynnr AND gf_called_by_lord IS INITIAL.
    last_dynnr = sy-dynnr.
    REFRESH CONTROL 'tctrl_konditionen' FROM SCREEN sy-dynnr.
  ENDIF.

  DESCRIBE TABLE xkomv LINES da_tfill.

* if not in display mode, offer blank line at the bottom
  IF trtyp_i NE 'A'.
    da_tfill = da_tfill + 1.
  ENDIF.

  tctrl_konditionen-lines    = da_tfill.
  tctrl_konditionen-top_line = xkomv_tabix_zeile_1.

* set title for table control
  tc_title = TEXT-001.

* Check if CPE is used
  DATA: lv_cpe_is_used  TYPE boolean.

  CALL FUNCTION 'CPE_ERP_CHECK_IF_USED'
    EXPORTING
      iv_application = komk-kappl
      iv_knumv       = komk-knumv
      iv_kposn       = komp-kposn
    IMPORTING
      ev_cpe_is_used = lv_cpe_is_used.

  IF lv_cpe_is_used = ' '.

    READ TABLE xkomv WITH KEY krech = gc_commodity.
    IF sy-subrc NE 0.
      lv_cpe_is_used = '-'.
    ENDIF.

  ENDIF.

* Check if CPF is used
  DATA: lv_cpf_is_used TYPE boolean.
  DATA: lr_prc_switches TYPE REF TO if_prc_switches.
  lr_prc_switches = cl_prc_switch_check=>get_instance( ).
  IF lr_prc_switches->mv_log_prc_sfws_cs_617 EQ abap_true.
    READ TABLE xkomv WITH KEY is_cpf_enabled = 'X'.
    IF sy-subrc IS INITIAL.
      lv_cpf_is_used = abap_true.
    ENDIF.
  ENDIF.

* hide columns at header condition screen
  DATA: acol TYPE cxtab_column.

  LOOP AT tctrl_konditionen-cols INTO acol.

* Commodity pricing related columns
    IF acol-screen-name EQ 'FA_DTL_PB'.

      IF lv_cpe_is_used = '-'.
        acol-invisible = 1.
      ELSE.
        acol-invisible = 0.
      ENDIF.

      IF lr_prc_switches->mv_log_prc_sfws_cs_617 EQ abap_true AND
         lv_cpf_is_used = abap_true.
        acol-invisible = 0.
      ENDIF.

    ENDIF.


    IF acol-screen-name EQ 'CPET_SD_SAPGUI-TRAFFIC_LIGHT'.

      IF lv_cpe_is_used NE 'X' OR komp-kposn IS INITIAL.
        acol-invisible = 1.
      ELSE.
        acol-invisible = 0.
      ENDIF.

    ENDIF.


* base unit of measure or conversion factors
    IF acol-screen-name EQ 'KOMV-KUMZA'  OR
       acol-screen-name EQ 'RV61A-MEINS' OR
       acol-screen-name EQ 'KOMV-KUMNE'  OR
       acol-screen-name EQ 'RV61A-KMEI1'.

      IF komp-kposn IS INITIAL.        " header level
        acol-invisible = 1.            " invisible
      ELSE.                            " item level
        acol-invisible = 0.            " visible
      ENDIF.
    ENDIF.

* additional condition text
    IF acol-screen-name EQ 'RV61A-KNBTXT'.
      IF komk-kappl = 'M'.
        ASSIGN COMPONENT 'KNBTXT' OF STRUCTURE komv TO <knbtxt>.
        IF sy-subrc = 0.
          ASSIGN COMPONENT 'KNBTXT' OF STRUCTURE *komv TO <knbtxt_old>.
          acol-invisible = 0.
        ELSE.
          acol-invisible = 1.
        ENDIF.
      ELSE.
        acol-invisible = 1.
      ENDIF.
    ENDIF.
*{   INSERT         S4DK908533                                        2
  IF sy-tcode EQ 'VA03' OR sy-tcode EQ 'VA02'.
    IF lv_check_va03 EQ '' AND sy-dynnr EQ '6201'."
*      IF sy-uname EQ 'IT0003'.
        acol-invisible = 1.
*      ENDIF.
    ENDIF.
  ENDIF.
*
*}   INSERT

    MODIFY tctrl_konditionen-cols FROM acol INDEX sy-tabix.

  ENDLOOP.

ENDFORM.                    "tctrl_konditionen_init
View Code

2.LV69AO03

*----------------------------------------------------------------------*
***INCLUDE LV69AO03 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  FELDAUSWAHL  OUTPUT
*&---------------------------------------------------------------------*

MODULE feldauswahl OUTPUT.

  DATA: mpool LIKE sy-repid,
        dyngr LIKE sy-dyngr,
        loop(3) VALUE 'LOO'.

* suppression of certain fields (if desired)
  DATA: mgame_no_display TYPE i,
        netwr_no_display TYPE i,
        mwsbp_no_display TYPE i.

  DATA: lv_acc_on(1) TYPE c.    "accesibility mode

*-> MMBSI P2P
*  DATA: l_ccm_srm_active TYPE xfeld.
*<- MMBSI P2P

* evaluate distinct bits from bit area
  GET BIT 1 OF gv_no_display INTO mgame_no_display.
  GET BIT 2 OF gv_no_display INTO netwr_no_display.
  GET BIT 3 OF gv_no_display INTO mwsbp_no_display.

* translate KBFLAG into KONVFLAG
  IF sy-loopc NE 0 OR sy-dynnr = '0640'.
    CALL FUNCTION 'SD_BITS_TO_WORKAREA'
      EXPORTING
        i_bits     = komv-kbflag
        i_wa_type  = 'KONVFLAG'
      IMPORTING
        e_workarea = konvflag
      EXCEPTIONS
        OTHERS     = 0.
  ENDIF.

* fcode used to turn off field selection (used for test issues, only)
  IF flag-no NE space.
    IF sy-stepl EQ sy-loopc.
      CLEAR flag-no.
    ENDIF.
    EXIT.
  ENDIF.

  mpool = sy-repid.
  dyngr = sy-dyngr.
ENHANCEMENT-POINT FELDAUSWAHL_02 SPOTS ES_SAPLV69A .
*$*$-Start: FELDAUSWAHL_02----------------------------------------------------------------------$*$*
ENHANCEMENT 2  DIMP_GENERAL_SAPLV69A.    "active version
**
*
* " enhance FDE functionality
*    DATA: lv_disp TYPE c VALUE '',
*          lv_trtyp TYPE t180-trtyp.
*      CALL FUNCTION 'MILL_SE_ENHANCE_FDE_CHK_ACTIVE'
*       EXCEPTIONS
*         FDE_ACTIVE       = 1
*         OTHERS           = 2.
*      IF SY-SUBRC = 1.
*        CALL FUNCTION 'MILL_SE_MAINTAIN_ENH_FDE'
*          EXPORTING
*            IF_TASK           = 'R'
*            IF_POSNR          = komp-kposn
**           IS_ENH_VBAP       =
**         TABLES
**           T_ENH_VBAP        =
*         EXCEPTIONS
*           ITEM_EXIST        = 1
*           OTHERS            = 2.
*        IF SY-SUBRC = 1.
*         lv_trtyp = trtyp_i.
*         TRTYP_I = 'A'.  "changing the transaction type for the initial lines
*        ENDIF.
*       ENDIF.
ENDENHANCEMENT.
*$*$-End:   FELDAUSWAHL_02----------------------------------------------------------------------$*$*

 "Get accessability mode
  CALL FUNCTION 'GET_ACCESSIBILITY_MODE'
   IMPORTING
     ACCESSIBILITY           = lv_acc_on
   EXCEPTIONS
     ITS_NOT_AVAILABLE       = 1
     OTHERS                  = 2.

* dynpro modifications according SY-DYNGR
*{   INSERT         S4DK908533                                        1
  DATA: lv_check_va03 TYPE c.
  AUTHORITY-CHECK OBJECT 'ZVA03'
              ID 'ACTVT' FIELD '03'.
  IF sy-subrc EQ 0.
    lv_check_va03 = 'X'.
  ENDIF.
*
*}   INSERT
  LOOP AT SCREEN.
    ENHANCEMENT-POINT FELDAUSWAHL_01 SPOTS ES_SAPLV69A.
*$*$-Start: FELDAUSWAHL_01----------------------------------------------------------------------$*$*
ENHANCEMENT 1  FSH_LV69AO03_01.    "active version
    IF screen-name = 'KOMP-KBMENG' AND
       komk-kappl  = 'M'.
      screen-invisible = 1.
      screen-active    = 0.
    ENDIF.
    IF screen-name = 'KOMP-CNFM_QTY' AND
       komk-kappl  = 'V'.
      screen-invisible = 1.
      screen-active    = 0.
    ENDIF.
ENDENHANCEMENT.
ENHANCEMENT 5  OIC_SAPLV69A.    "active version
* Dynamic control of F&A specific elements               "SO5K000609 MMU
  perform oic_feldauswahl_FA.             "SO5K000609 MMU SO6K000225 KW
  PERFORM OIC_FELDAUSWAHL_D640.           "so3k0002651   "SO5K000609 MMU

ENDENHANCEMENT.
*$*$-End:   FELDAUSWAHL_01----------------------------------------------------------------------$*$*
    IF ctrl_grey IS INITIAL.
* modify step loop during processing of loop lines only
      IF screen-group2 EQ loop.
        CHECK sy-stepl NE 0.
* special field selection for blank lines of the loop
        IF rv61a-zeile_leer = 'X'.
          PERFORM feldauswahl_leere_zeilen.
          PERFORM userexit_field_modific_leer.
        ENDIF.
* special field selecition for sub total lines
        IF rv61a-zeile_leer = 'Z'.
          PERFORM feldauswahl_zwischensumme.
          PERFORM authority_check USING co_origin_subtotal.
          PERFORM userexit_field_modific_kzwi.
        ENDIF.
* special field selection for header subtotals
        IF rv61a-zeile_leer = 'Y'.
          PERFORM feldauswahl_kopfsumme.
          PERFORM authority_check USING co_origin_header_sum.
          PERFORM userexit_field_modific_kopf.
        ENDIF.
        PERFORM feldauswahl_sonderregeln.
        CHECK rv61a-zeile_leer EQ space.
      ELSE.
        CHECK sy-stepl EQ 0.
      ENDIF.

* all other cases which don't own a useful business rule
      PERFORM feldauswahl_sonderregeln.
      PERFORM feldauswahl_subscreen.
      PERFORM authority_check USING co_origin_cond.
      PERFORM userexit_field_modification.

* suppress display of quantity fields
      IF NOT mgame_no_display IS INITIAL.
        IF screen-name EQ 'KOMP-MGAME' OR
           screen-name EQ 'KOMP-VRKME'.
          screen-active = 0.
        ENDIF.
      ENDIF.

* suppress display of net value fields
      IF NOT netwr_no_display IS INITIAL.
        IF screen-name EQ 'KOMP-NETWR' OR
           screen-name EQ 'KOMK-WAERK'.
          screen-active = 0.
        ENDIF.
      ENDIF.

* suppress display of tax fields
      IF NOT mwsbp_no_display IS INITIAL.
        IF screen-name EQ 'KOMP-MWSBP'.
          screen-active = 0.
        ENDIF.
      ENDIF.

    ELSE.

* suppress output if no display is desired
      screen-input = 0.

    ENDIF.
*{   INSERT         S4DK908533                                        2
  IF sy-tcode EQ 'VA03' OR sy-tcode EQ 'VA02'.
    IF lv_check_va03 EQ ''."AND sy-dynnr EQ '6201'.
*      IF sy-uname EQ 'IT0003'.
      CASE screen-name.
        WHEN 'KOMP-NETWR' OR 'KOMK-WAERK' OR 'KOMP-MWSBP'.
          screen-active = 0.
        WHEN OTHERS.
      ENDCASE.

*      ENDIF.
    ENDIF.
  ENDIF.
*
*}   INSERT

*-> MMBSI P2P
*-   Enhancements in EHP4 for "Central Contract Management"            *
    IF cl_ops_switch_check=>mm_sfws_ui_p2pse( ) = abap_true.
      PERFORM feldauswahl_ccm.
    ENDIF.

*   Quantity Adjustment related field selection logic
    IF cl_prc_switch_check=>get_instance( )->mv_log_prc_sfws_cs_617_03 = abap_true.
      PERFORM field_selection_qty_adjustment.
    ENDIF.

    MODIFY SCREEN.

  ENDLOOP.
  CLEAR rv61a-zeile_leer.
ENHANCEMENT-POINT FELDAUSWAHL_03 SPOTS ES_SAPLV69A .
*$*$-Start: FELDAUSWAHL_03----------------------------------------------------------------------$*$*
ENHANCEMENT 3  DIMP_GENERAL_SAPLV69A.    "active version
*
*IF lv_trtyp IS NOT INITIAL.
*   trtyp_i = lv_trtyp.
*ENDIF.   "resetting the transcation type

ENDENHANCEMENT.
*$*$-End:   FELDAUSWAHL_03----------------------------------------------------------------------$*$*

ENDMODULE.                    "feldauswahl OUTPUT

*&---------------------------------------------------------------------*
*&      Module  KOT_FIRST  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE kot_first OUTPUT.
  PERFORM kot_init.
  PERFORM kot_first.
ENDMODULE.                    "kot_first OUTPUT
*&---------------------------------------------------------------------*
*&      Module  FELDAUSWAHL_2  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE feldauswahl_2 OUTPUT.

  PERFORM fieldselection_log.

ENDMODULE.                 " FELDAUSWAHL_2  OUTPUT
View Code

3.MV45AF0V_VBKD_INCO2_HIDE

*&---------------------------------------------------------------------*
*& Include          MV45AF0V_VBKD_INCO2_HIDE
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form VBKD-INCO2_HIDE
*&---------------------------------------------------------------------*
*& In the absence of Incoterm switch, hide INCO2 field
*&---------------------------------------------------------------------*

FORM vbkd-inco2_hide USING c_tctrl TYPE any.

  FIELD-SYMBOLS <fs_columns> TYPE scxtab_column_it.
  ASSIGN COMPONENT 'COLS' OF STRUCTURE c_tctrl TO <fs_columns>.
*{   INSERT         S4DK908533                                        1
* dev3 tyh 2021年6月23日增加
  DATA: LV_CHECK_VA03 TYPE C.
  AUTHORITY-CHECK OBJECT 'ZVA03'
             ID 'ACTVT' FIELD '03'.
  IF SY-SUBRC EQ 0.
    LV_CHECK_VA03 = 'X'.
  ENDIF.
*
*}   INSERT

  IF <fs_columns> IS ASSIGNED.
    LOOP AT <fs_columns> ASSIGNING FIELD-SYMBOL(<fs_column>).
*{   INSERT         S4DK908533                                        2
      IF sy-tcode eq 'VA02' OR SY-TCODE EQ 'VA03'.
        IF LV_CHECK_VA03 EQ ''. "有该权限时,隐藏金额等字段
          CASE <fs_column>-screen-name.
            WHEN 'KOMV-KBETR' OR 'VBAP-NETPR' OR 'VBAP-NETWR'.
              IF <fs_column>-invisible = ''.
                MESSAGE '没有权限查看金额,检查权限对象:ZVA03' TYPE 'S' DISPLAY LIKE 'W'.
              ENDIF.
            <fs_column>-invisible = 'X'.
            WHEN OTHERS.
          ENDCASE.
        ENDIF.
      ENDIF.
*
*}   INSERT
      IF <fs_column>-screen-name EQ 'VBKD-INCO2'.
        <fs_column>-invisible = 'X'.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDFORM.
View Code

4.SD_SEPA_VA_009,这里是在循环里面,省去了变量的定义。

*&---------------------------------------------------------------------*
*&  Include           SD_SEPA_VA_009
*&---------------------------------------------------------------------*
*{   INSERT         S4DK908533                                        1
  IF screen-name = 'VBAK-NETWR' OR screen-name = 'VBAP-NETWR'.
    IF sy-tcode EQ 'VA03' OR sy-tcode EQ 'VA02'.
      AUTHORITY-CHECK OBJECT 'ZVA03'
                  ID 'ACTVT' FIELD '03'.
      IF sy-subrc NE 0.
*       IF sy-uname EQ 'IT0003'.
         screen-active    = 0.
         screen-invisible = 1.
         modify screen.
*       ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.

*
*}   INSERT
  if screen-GROUP1 = 'MDT'.
    if l_sd_sepa_exit IS BOUND.
      CALL BADI L_SD_SEPA_EXIT->SD_SEPA_VA_009
        EXPORTING
          IS_VBAK               = vbak
          IS_VBAP               = vbap
          IT_XVBPA              = xvbpa[]
        IMPORTING
          PV_ICON_STATUS        = icon_status
          PV_SD_SEPA_STATUS_TXT = sd_sepa_status_txt
        CHANGING
          CS_VBKD               = vbkd
          CS_SCREEN             = screen.
    else.
      if screen-GROUP1 = 'MDT'.
        screen-active    = 0.
        screen-invisible = 1.
        modify screen.
      endif.
    endif.
  endif.
View Code

 5.LV60FO10

*---------------------------------------------------------------------*
*       MODULE FELDAUSWAHL OUTPUT                                     *
*---------------------------------------------------------------------*
*       Aufruf der Feldauswahl                                        *
*---------------------------------------------------------------------*
MODULE feldauswahl OUTPUT.
  DATA: mpool LIKE sy-repid,
        dyngr LIKE sy-dyngr,
        loop(3) VALUE 'LOO'.           " MODIF 2 für Step-Loop-Ident.
*{   INSERT         S4DK908533                                        1
  DATA: lv_check_va03 TYPE c.
  AUTHORITY-CHECK OBJECT 'ZVA03'
              ID 'ACTVT' FIELD '03'.
  IF sy-subrc EQ 0.
    lv_check_va03 = 'X'.
  ENDIF.
*
*}   INSERT

  mpool = sy-repid.
  dyngr = sy-dyngr.
* Modifikation des Dynpros zu SY-DYNGR
  LOOP AT SCREEN.
* don't show temporary numbers
*{   INSERT         S4DK908533                                        2
  IF sy-tcode EQ 'VA03' OR sy-tcode EQ 'VA02'.
    IF lv_check_va03 EQ '' AND screen-name EQ 'FPLAA-ENDWR'."
*      IF sy-uname EQ 'IT0003'.
      screen-invisible = '1'.
      MODIFY SCREEN.
*      ENDIF.
    ENDIF.
  ENDIF.
*
*}   INSERT
    IF screen-name = 'FPLAA-AUFNR' AND fplaa-aufnr(1) = '%'.
      screen-invisible = '1'.
      MODIFY SCREEN.
    ENDIF.
*   STEP-LOOP wird erst bei Abarbeitung der Loop-Zeilen modifiziert
    IF screen-group2 EQ loop.
      CHECK sy-stepl NE 0.
*     Spezielle Feldauswahl für leere Loop-Zeilen
      IF rv60f-zeile_leer NE space AND
         screen-group3 NE space.
        PERFORM feldauswahl_leere_zeilen.
      ENDIF.
      IF     rv60f-kfplan     EQ con_kfplan_pos_aus_kopf AND
         NOT rv60f-zeile_leer IS INITIAL.
        screen-active = 0.
        MODIFY SCREEN.
      ENDIF.
      CHECK rv60f-zeile_leer IS INITIAL.
    ELSE.
      CHECK sy-stepl EQ 0.
    ENDIF.
    IF screen-group1 NE space.

      CALL FUNCTION 'FIELD_SELECTION_MODIFY_SINGLE'
           EXPORTING
                modulpool    = mpool
                dynprogruppe = dyngr.
    ENDIF.
*   Betriebswirtschaftlich nicht sinnvoll zu modifiziernde Regeln
    IF screen-group3 NE space.
      PERFORM feldauswahl_sonderregeln.
    ENDIF.
*   Kopffakturierungsplan, Schalter nicht anzeigen
    IF rv60f-kfplan EQ con_kfplan_kopf_log.
      CASE screen-name.
        WHEN 'RV60F-KFREL'.
          screen-active = 0.
        WHEN 'FPLA-TNDAT'.
          screen-input = 0.
        WHEN 'FPLA-LODAT'.
          screen-input = 0.
        WHEN 'FPLT-FAKWR'.
          IF fpla-perio IS INITIAL.
*           SCREEN-INPUT = 0.
          ELSE.
            screen-active = 0.
          ENDIF.
        WHEN 'FPLAA-NETWR'.
          IF NOT fpla-perio IS INITIAL.
            screen-active = 0.
          ENDIF.
        WHEN 'FPLAA-WAERK'.
          IF NOT fpla-perio IS INITIAL.
            screen-active = 0.
          ENDIF.
      ENDCASE.
    ENDIF.
*   Positionsfakturierungspläne, die auf den Kopf zeigen
    IF rv60f-kfplan EQ con_kfplan_pos_aus_kopf.
      screen-input = 0.
      CASE screen-name.
        WHEN 'FPLA-RFPLN'.
          screen-active = 0.
        WHEN 'FPLTD-SELKZ'.
          screen-input = 1.
        WHEN 'RV60F-KFREL'.
          screen-input = 1.
        WHEN 'FPLA-TNDAT'.
          screen-input = 1.
        WHEN 'FPLA-LODAT'.
          screen-input = 1.
      ENDCASE.
    ENDIF.
*   Detailbild Dynpro 100
    IF sy-dynnr = 100.
      CASE screen-name.
        WHEN 'RV60F-KFREL'.
          screen-input = 0.
        WHEN 'FPLA-TNDAT'.
          screen-input = 0.
        WHEN 'FPLA-LODAT'.
          screen-input = 0.
        WHEN 'FPLT-KURRF'.
*         Das Kursfeld darf nur bei Teilfakturierung offen sein.
          IF NOT fpla-perio IS INITIAL.
            screen-input = 0.
          ENDIF.
      ENDCASE.
    ENDIF.
    IF screen-name EQ 'RV60F-KFREL'.
      IF kfpla-fplnr IS INITIAL OR
         kfpla-fpart NE fpla-fpart.
*       Der Kopffakturierungsschalter darf nur aktiv sein, wenn es
*       ein Kopffakturierungsplan existiert und wenn die
*       Fakturierungsplanarten des Kopfes gleich der Position ist.
        screen-active = 0.
      ENDIF.
    ENDIF.
    PERFORM feldauswahl_status using sy-stepl.

*   Pflege für Standardfakturierungspläne
    IF NOT sav_standard IS INITIAL.
      CASE screen-name.
        WHEN 'FPLA-BEDAR'.
          screen-active = 0.
        WHEN 'FPLA-LODAR'.
          screen-active = 0.
        WHEN 'FPLA-TNDAR'.
          screen-active = 0.
        WHEN 'FPLA-ENDAT'.
          screen-active = 0.
        WHEN 'FPLA-ENDAR'.
          screen-active = 0.
        WHEN 'FPLA-PERIO'.
          screen-active = 0.
        WHEN 'FPLA-HORIZ'.
          screen-active = 0.
        WHEN 'RV60F-HORIZ'.
          screen-active = 0.
        WHEN 'FPLA-RFPLN'.
          screen-active = 0.
        WHEN 'RV60F-KFREL'.
          screen-active = 0.
      ENDCASE.
    ENDIF.
*   Userexit
    PERFORM userexit_field_modification.

    MODIFY SCREEN.
  ENDLOOP.
  CLEAR rv60f-zeile_leer.

ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  BUTTON_AUSWAHL  OUTPUT
*&---------------------------------------------------------------------*
*       Auswahl der eingabebereiten Drucktasten auf dem Dynpro anhand
*       der cua_exclude Tabelle. (GROENE)
*----------------------------------------------------------------------*
MODULE button_auswahl OUTPUT.

  PERFORM button_auswahl.

ENDMODULE.                             " BUTTON_AUSWAHL  OUTPUT

*---------------------------------------------------------------------*
*       MODULE FPLTD-TEBEZ_ERMITTELN OUTPUT                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE fpltd-tebez_ermitteln OUTPUT.
* Ermitteln Text für Bezeichnung Termin
  PERFORM fpltd-tebez_ermitteln(saplv60f) USING fplt-tetxt
                                                fplt-mlbez
                                                sy-langu
                                          CHANGING fpltd-tebez.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE HORIZONT_ERMITTELN OUTPUT                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE horizont_ermitteln OUTPUT.
  PERFORM horizont_ermitteln USING    fpla-horiz charx
                             CHANGING rv60f-horiz.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE INITIALISIEREN OUTPUT                                  *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE initialisieren OUTPUT.
  PERFORM cua_setzen.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE PETXT_ERMITTELN OUTPUT                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE petxt_ermitteln OUTPUT.
  PERFORM tvrgt_read USING    sy-langu fpla-perio
                     CHANGING rv60f-petxt.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE BETXT_ERMITTELN OUTPUT                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE betxt_ermitteln OUTPUT.
  PERFORM tvrgt_read USING    sy-langu fpla-bedar
                     CHANGING rv60f-betxt.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE ENTXT_ERMITTELN OUTPUT                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE entxt_ermitteln OUTPUT.
  PERFORM tvrgt_read USING    sy-langu fpla-endar
                     CHANGING rv60f-entxt.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE HOTXT_ERMITTELN OUTPUT                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE hotxt_ermitteln OUTPUT.
  PERFORM tvrgt_read USING    sy-langu fpla-horiz
                     CHANGING rv60f-hotxt.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE PBO_INIT OUTPUT                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE pbo_init OUTPUT.
  CLEAR: flg_input_fakturaperiode,
         flg_input_abw_fakturaperiode,
         flg_input_beginndatum,
         flg_input_endedatum,
         flg_input_horizont,
         flg_input_referenz,
         flg_input_lodat,
         flg_input_tndat,
         flg_input_fkdat,
         flg_input_fakca,
         flg_fakwr_ermitteln,
         flg_termine_erzeugt,
         flg_kopf_kopiert,
         flg_input_korrtermin,
         flg_spezial_terz.
  IF flg_suppress_dialog EQ charx.
    CLEAR flg_suppress_dialog.
    SUPPRESS DIALOG. EXIT.
  ENDIF.
  IF NOT set_cursor_field IS INITIAL.
    SET CURSOR FIELD set_cursor_field.
    IF NOT step_loop_line IS INITIAL.
      SET CURSOR FIELD set_cursor_field LINE step_loop_line.
    ENDIF.
  ENDIF.
  IF rv60f-kfplan EQ con_kfplan_pos_aus_kopf.
    MOVE charx TO rv60f-kfrel.
  ENDIF.
  kurgv-kunnr = fplaa-kunrg.           "ccard
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE TCTRL_XFPLT_INIT OUTPUT                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE tctrl_xfplt_init OUTPUT.
  PERFORM tctrl_xfplt_init.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE XFPLA_AUFSETZEN OUTPUT                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE xfpla_aufsetzen OUTPUT.
  PERFORM xfpla_aufsetzen.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE XFPLT_AUFSETZEN OUTPUT                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE xfplt_aufsetzen OUTPUT.
  PERFORM xfplt_aufsetzen.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE XFPLA_LESEN OUTPUT                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE xfpla_lesen OUTPUT.
  PERFORM xfpla_lesen.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE XFPLT_LESEN OUTPUT                                     *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE xfplt_lesen OUTPUT.
  PERFORM xfplt_lesen.
* Auf dem Screen wird die Abrechnungsperiode in RV60F-Feldern angezeigt
  CHECK NOT fplt-fkdat IS INITIAL OR
        NOT fplt-nfdat IS INITIAL.
  IF fplt-nfdat LT fplt-fkdat.
    MOVE fplt-nfdat TO rv60f-abrbe.
    MOVE fplt-fkdat TO rv60f-abren.
  ELSE.
    MOVE fplt-fkdat TO rv60f-abrbe.
    MOVE fplt-nfdat TO rv60f-abren.
  ENDIF.
* Auf dem Screen wird das Manuell Kennzeichen in RV60F-Felder angezeigt
* Der Anwender darf nur die Ausprägung für einen 'echten' manuellen
* Termin sehen. Alle anderen Ausprägungen sind rein technisch
  IF fplt-teman EQ charx.
    MOVE fplt-teman TO rv60f-teman.
  ELSE.
    CLEAR rv60f-teman.
  ENDIF.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE XFPLT_SETZEN OUTPUT                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE xfplt_setzen OUTPUT.
  PERFORM xfplt_setzen.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE TFPLA_PERIO_ERMITTELN OUTPUT                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE tfpla_perio_ermitteln OUTPUT.
*  DESCRIBE TABLE XFPLT LINES SY-TABIX.
*  IF SY-TABIX GT 0.
*    READ TABLE XFPLT INDEX SY-TABIX.
*    MOVE XFPLT-PERIO TO FPLA-PERIO.
*  ENDIF.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE FPLTD-KZMEI_ERMITTELN OUTPUT                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE fpltd-kzmei_ermitteln OUTPUT.
  CLEAR fpltd-kzmei.
  IF NOT fplt-mlstn IS INITIAL.
    MOVE charx TO fpltd-kzmei.
  ENDIF.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  DETERMINE_SUBSCREEN  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE determine_subscreen OUTPUT.

  DATA: sub_dynnr LIKE sy-dynnr.

  sub_dynnr = '0512'.     "<--- dummy: if the user enters ps

  CASE fpla-fptyp.
    WHEN 'A'.                          "<- standard invoice plan PS
      IF fplaa-posnr IS INITIAL.
        IF g_cost IS INITIAL.
          sub_dynnr = '0511'.
        ELSE.
          sub_dynnr = '0510'.
        ENDIF.
      ELSE.
        sub_dynnr = '0512'.
      ENDIF.

  ENDCASE.


ENDMODULE.                             " DETERMINE_SUBSCREEN  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  D0040_TRANSLATE_FROM_FAREG  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE d0040_translate_from_fareg OUTPUT.
  CLEAR fareg_anz.
  IF fplt-fareg = '5'.
    fareg_anz = 'X'.
  ENDIF.
ENDMODULE.                 " D0040_TRANSLATE_FROM_FAREG  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  TAXI_INITIALIZE_CARRIERSCREEN  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE taxi_initialize_carrierscreen OUTPUT.
  PERFORM taxi_initialize_carrierscreen.
ENDMODULE.                 " TAXI_INITIALIZE_CARRIERSCREEN  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  WBS_MODIFY_HEADER_FIELDS  OUTPUT
*&---------------------------------------------------------------------*
*       hide currency translation rate if currency of billing
*       schedule is the same as currency of company code of
*       wbs element.
*----------------------------------------------------------------------*
MODULE wbs_modify_header_fields OUTPUT.

  DATA: tcontrol_column TYPE cxtab_column.

* in display mode switch input off for input fields
  IF typ = 'A'.
    LOOP AT SCREEN.
      IF screen-name = 'FPLA-BEDAT' OR
         screen-name = 'FPLA-RFPLN' OR
         screen-name = 'FPLA-SORTL' OR
         screen-name = 'FPLAA-NETWR'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

  LOOP AT SCREEN.
    IF NOT sav_standard IS INITIAL AND screen-name = 'FPLAA-NETWR'.
      screen-input = '0'.
      MODIFY SCREEN.
    ENDIF.
    IF screen-name = 'FPLA-FPLNR' AND
       ( fpla-fplnr(1) = '$' OR fpla-fplnr IS INITIAL ).
      screen-invisible = '1'.
      MODIFY SCREEN.
    ELSEIF screen-name = 'FPLAA-NETWR' AND g_normal = space.
      screen-input = '0'.
      MODIFY SCREEN.
    ELSEIF ( screen-name = 'BPIP_TXT'    OR
             screen-name = 'FPLA-RFPLN'  OR
             screen-name = 'BPIP_DIST' ) AND g_normal = space.
      screen-invisible = '1'.
      MODIFY SCREEN.
*   ELSEIF screen-name = 'FPLA-BEDAT' and fpla-rfpln is initial.
*     screen-input = '0'.
*     MODIFY SCREEN.
    ELSEIF ( screen-name = 'BPIP_DIST'  OR
             screen-name = 'BPIP_TXT' ) AND g_total EQ space.
      screen-invisible = '1'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

* hide date designation
  LOOP AT tctrl_fplan_wbs-cols INTO tcontrol_column
                               WHERE screen-name = 'FPLT-TETXT'  OR
                                     screen-name = 'FPLTD-KZMEI' OR
                                     screen-name = 'FPLT-FPTTP'.
    tcontrol_column-invisible = '1'.
    MODIFY tctrl_fplan_wbs-cols FROM tcontrol_column.
  ENDLOOP.

  IF fplaa-waers = fplaa-hwaer.
*   hide translation rate column in table control
    LOOP AT tctrl_fplan_wbs-cols INTO tcontrol_column
                                 WHERE screen-name = 'FPLT-KURRF'.
      tcontrol_column-invisible = '1'.
      MODIFY tctrl_fplan_wbs-cols FROM tcontrol_column.
    ENDLOOP.
  ELSE.
    LOOP AT tctrl_fplan_wbs-cols INTO tcontrol_column
                                 WHERE screen-name = 'FPLT-KURRF'.
      tcontrol_column-invisible = '0'.
      MODIFY tctrl_fplan_wbs-cols FROM tcontrol_column.
    ENDLOOP.
  ENDIF.

ENDMODULE.                             " WBS_HIDE_HEADER_FIELDS  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  WBS_MODIFY_CONTROL_FIELDS  OUTPUT
*&---------------------------------------------------------------------*
*       set key for schedule line description to 'display only'
*       if schedule line is linked to a milestone as description of
*       milestone is used
*----------------------------------------------------------------------*
MODULE wbs_modify_control_fields OUTPUT.
  LOOP AT SCREEN.
    IF NOT fplt-mlstn IS INITIAL.
      IF screen-name = 'FPLTD-TEBEZ' OR
         screen-name = 'FPLT-AFDAT'.
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
    IF screen-name = 'FPLT-ZTERM'.
      IF fplt-zterm IS INITIAL AND ( fplt-fareg = '4' OR
                                     fplt-fareg = '5' ).
        screen-input = '0'.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDMODULE.                             " WBS_HIDE_CONTROL_FIELDS  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  OPEN_START_DATE  OUTPUT
*&---------------------------------------------------------------------*
*       this module opens the start date in the template
*       for the invoice plan in the customizing
*       this is necessary for the same behaviour if a template
*       comes from an existing invoice plan or from the customizing
*----------------------------------------------------------------------*

MODULE open_start_date OUTPUT.

  CHECK NOT sav_standard IS INITIAL.
  LOOP AT SCREEN.
    CHECK screen-name = 'FPLA-BEDAT'.
    screen-input = 1.
    MODIFY SCREEN.
  ENDLOOP.

ENDMODULE.                             " OPEN_START_DATE  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  TCTRL_INIT_IPLAN_NP  OUTPUT
*&---------------------------------------------------------------------*
*       invoice plan ps
*----------------------------------------------------------------------*
MODULE tctrl_init_iplan_np OUTPUT.
  PERFORM tctrl_init_iplan_np.
ENDMODULE.                             " TCTRL_INIT_IPLAN_NP  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  TCTRL_XFPLT_INIT_BP  OUTPUT
*&---------------------------------------------------------------------*
*       initialization routines of table control for the billing plan
*       in the project system
*----------------------------------------------------------------------*
MODULE tctrl_xfplt_init_bp OUTPUT.

  DATA: da_tfill LIKE sy-tabix.

  DESCRIBE TABLE xfplt LINES da_tfill.
* Falls nicht Anzeige, unten eine freie Eingabezeile bereithalten
  IF typ NE 'A'.
    da_tfill = da_tfill + 1.
  ENDIF.
  IF fpla-perio IS INITIAL.
    tctrl_fplan_wbs-lines      = da_tfill.
    tctrl_fplan_wbs-top_line   = xfplt_tabix_zeile_1.
  ELSE.
    tctrl_fplan_wbs-lines      = da_tfill.
    tctrl_fplan_wbs-top_line   = xfplt_tabix_zeile_1.
  ENDIF.

ENDMODULE.                             " TCTRL_XFPLT_INIT_BP  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  TCTRL_XFPLT_BLAETTERN_BP  INPUT
*&---------------------------------------------------------------------*
*       paging in the table control tctrl_fplan_wbs
*----------------------------------------------------------------------*
MODULE tctrl_xfplt_blaettern_bp INPUT.

  IF fpla-perio IS INITIAL.
    xfplt_tabix_zeile_1 = tctrl_fplan_wbs-top_line.
  ELSE.
    xfplt_tabix_zeile_1 = tctrl_fplan_wbs-top_line.
  ENDIF.

ENDMODULE.                             " TCTRL_XFPLT_BLAETTERN_BP  INPUT
ENHANCEMENT-POINT LV60FO10_01 SPOTS ES_SAPLV60F STATIC.
*$*$-Start: LV60FO10_01-------------------------------------------------------------------------$*$*
ENHANCEMENT 1  DIMP_GENERAL_SAPLV60F.    "active version
*SDIMP IS-HT Deprecation i031838
** Start IS-SW GGSHED23 (Billing Plan Synchronization New Module)
**                                                                     *
**       MODULE KUTXT_ERMITTELN OUTPUT                                 *
**                                                                     *
**  GGSHED23                                                           *
**                                                                     *
*MODULE KUTXT_ERMITTELN OUTPUT.
*  PERFORM TVRGT_READ USING    SY-LANGU FPLA-KUDAR
*                     CHANGING RV60F-KUTXT.
*ENDMODULE.
** End IS-SW GGSHED23 (Billing Plan Synchronization New Module)
ENDENHANCEMENT.
*$*$-End:   LV60FO10_01-------------------------------------------------------------------------$*$*
View Code
原文地址:https://www.cnblogs.com/chaguoguo/p/14923744.html