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
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
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.
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.
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-------------------------------------------------------------------------$*$*
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」