禁用 VA01 中的列
Disable Column in VA01
我有一个要求,我需要禁用销售订单行项目中的完整列。字段是 VBAP-ARKTX 和 VBAP-KDMAT.
我找到了禁用其中包含数据但不是整个列的列的方法。
我使用 USEREXIT_FIELD_MODIFICATION 使用以下代码实现此目的;
IF sy-TCODE = 'VA02'.
IF screen-name = 'VBAP-KDMAT' .
screen-INPUT = 0.
modify screen.
ENDIF.
ENDIF.
有没有办法禁用整个列?
只有一件事,您可以在 dynpro-designer 中完成。在那里您可以将 sap-standard-dynpro 修改为 dynpro-modification。
然而,这可能会被下一个版本覆盖。这也是您的选择吗?
Adjusting table control 其中包含项目是最简单也是最推荐的方式。它可以为单个用户或一组用户完成。
否则,尝试在 SHD0 中创建一个 screen variant。它允许轻松隐藏任何 table 的任何列和屏幕上的任何字段。
我遇到的具体问题是如何禁用两个字段,但让标准映射数据显示在其中。
为了满足这个要求,我使用了以下内容;
包括:MV45AFZZ
用户出口名称:USEREXIT_FIELD_MODIFICATION
增强名称:-任何你想要的名称-
我创建了一个增强功能并编写了以下代码;
"Specify the condition
IF VBAK-VKORG = '1234' AND ( sy-TCODE = 'VA02' OR sy-TCODE = 'VA01' ) AND ( screen-name = 'VBAP-KDMAT' OR screen-name = 'VBAP-ARKTX' ).
screen-input = 0."disable input
MODIFY SCREEN.
DATA: i_tab_mara TYPE TABLE OF MARA WITH HEADER LINE.
DATA: l_maktx TYPE MAKT-MAKTX.
DATA: WA_MARA LIKE LINE OF i_tab_mara.
DATA: i_tab_vbap TYPE TABLE OF VBAP WITH HEADER LINE.
DATA: wa_vbap LIKE LINE OF i_tab_vbap.
IF sy-TCODE = 'VA01' .
SELECT SINGLE * from MARA INTO WA_MARA WHERE MATNR eq VBAP-MATNR.
SELECT MAKTX FROM MAKT INTO l_maktx WHERE MATNR eq VBAP-MATNR.
ENDSELECT.
VBAP-KDMAT = WA_MARA-KDMAT.
VBAP-ARKTX = l_maktx.
MODIFY SCREEN.
ELSEIF sy-TCODE = 'VA02' .
SELECT SINGLE * FROM VBAP INTO WA_VBAP WHERE VBELN eq VBAK-VBELN AND POSNR eq VBAP-POSNR.
IF WA_VBAP-ARKTX eq ''." Check if the fileds are empty, otherwise old data is overwritten
SELECT MAKTX FROM MAKT INTO l_maktx WHERE MATNR eq VBAP-MATNR.
ENDSELECT.
VBAP-ARKTX = l_maktx.
MODIFY SCREEN.
ENDIF.
IF WA_VBAP-KDMAT eq ''." Check if the fileds are empty, otherwise old data is overwritten
SELECT SINGLE * from MARA INTO WA_MARA WHERE MATNR eq VBAP-MATNR.
VBAP-KDMAT = WA_MARA-KDMAT.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDIF.
我有一个要求,我需要禁用销售订单行项目中的完整列。字段是 VBAP-ARKTX 和 VBAP-KDMAT.
我找到了禁用其中包含数据但不是整个列的列的方法。
我使用 USEREXIT_FIELD_MODIFICATION 使用以下代码实现此目的;
IF sy-TCODE = 'VA02'.
IF screen-name = 'VBAP-KDMAT' .
screen-INPUT = 0.
modify screen.
ENDIF.
ENDIF.
有没有办法禁用整个列?
只有一件事,您可以在 dynpro-designer 中完成。在那里您可以将 sap-standard-dynpro 修改为 dynpro-modification。 然而,这可能会被下一个版本覆盖。这也是您的选择吗?
Adjusting table control 其中包含项目是最简单也是最推荐的方式。它可以为单个用户或一组用户完成。 否则,尝试在 SHD0 中创建一个 screen variant。它允许轻松隐藏任何 table 的任何列和屏幕上的任何字段。
我遇到的具体问题是如何禁用两个字段,但让标准映射数据显示在其中。
为了满足这个要求,我使用了以下内容;
包括:MV45AFZZ
用户出口名称:USEREXIT_FIELD_MODIFICATION
增强名称:-任何你想要的名称-
我创建了一个增强功能并编写了以下代码;
"Specify the condition
IF VBAK-VKORG = '1234' AND ( sy-TCODE = 'VA02' OR sy-TCODE = 'VA01' ) AND ( screen-name = 'VBAP-KDMAT' OR screen-name = 'VBAP-ARKTX' ).
screen-input = 0."disable input
MODIFY SCREEN.
DATA: i_tab_mara TYPE TABLE OF MARA WITH HEADER LINE.
DATA: l_maktx TYPE MAKT-MAKTX.
DATA: WA_MARA LIKE LINE OF i_tab_mara.
DATA: i_tab_vbap TYPE TABLE OF VBAP WITH HEADER LINE.
DATA: wa_vbap LIKE LINE OF i_tab_vbap.
IF sy-TCODE = 'VA01' .
SELECT SINGLE * from MARA INTO WA_MARA WHERE MATNR eq VBAP-MATNR.
SELECT MAKTX FROM MAKT INTO l_maktx WHERE MATNR eq VBAP-MATNR.
ENDSELECT.
VBAP-KDMAT = WA_MARA-KDMAT.
VBAP-ARKTX = l_maktx.
MODIFY SCREEN.
ELSEIF sy-TCODE = 'VA02' .
SELECT SINGLE * FROM VBAP INTO WA_VBAP WHERE VBELN eq VBAK-VBELN AND POSNR eq VBAP-POSNR.
IF WA_VBAP-ARKTX eq ''." Check if the fileds are empty, otherwise old data is overwritten
SELECT MAKTX FROM MAKT INTO l_maktx WHERE MATNR eq VBAP-MATNR.
ENDSELECT.
VBAP-ARKTX = l_maktx.
MODIFY SCREEN.
ENDIF.
IF WA_VBAP-KDMAT eq ''." Check if the fileds are empty, otherwise old data is overwritten
SELECT SINGLE * from MARA INTO WA_MARA WHERE MATNR eq VBAP-MATNR.
VBAP-KDMAT = WA_MARA-KDMAT.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDIF.