zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ContextLoaderListener作用详解
    @Autowired与@Resource的区别
    使用SimpleDateFormat时的日期和时间模式
    git将本地内容传送到远程仓库出现![rejected] master -> master (fetch first)错误
    使用SSH框架遇到的错误总结
    struts2 action中字符串转json对象出错 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
    2017百度web前端实习生在线笔试题
    学习模型-视图-控制器MVC模式
    DOM元素加载之前执行的jQuery代码
    使用$.post和action或servlet交互 URL出现 http://localhost:8080/../[object%20Object] 错误的问题解决
  • 原文地址:https://www.cnblogs.com/chaguoguo/p/14923744.html
Copyright © 2011-2022 走看看