SAP S4 BP增强 BDT方式 添加自定义屏幕 KNA1和KNVV 通用数据视图、销售与分销视图(英文)

本文详细介绍了如何在SAP Business Partner (BP)环境中添加新的屏幕标签,包括创建和定制视图、数据集、字段组、屏幕布局等步骤。通过实际案例,指导读者如何处理常见的错误和问题,如解决KNVV_NEW表错误,以及如何正确地在BP屏幕中显示和更新字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其他参考(中文):https://blog.youkuaiyun.com/guangcong2009/article/details/80569877

网上没找到销售与分销 视图:KNVV的添加方式,发出来分享下。

1、添加销售区域屏幕时, 直接将下步骤KNA1改为 KNVV即可。

2、屏幕->部分 里面改为,否则不会在KNVV的屏幕显示

3、同时添加 通用数据和销售与分销屏幕 一直不成功,最后将KNVV的应用程序和数据集都指向KNA1的就成功了(视图和事件中),原因没时间研究了。

1、经过分析,在视图里面调用KNA1的可以显示,但是调用KNVV应用程序不能显示。应该是应用程序调用问题,但是找了好久没有找到位置

最后发现在 屏幕顺序里面加入 数据集+调用程序 就可以了。

 

BP KNVV销售与分销 增强保存时一直提示 KNVV_NEW 表错误:

1、分析应该是增强KNVV造成,跟踪代码,发现系统会取上次的销售与分销的记录

2、一直在BDT里面找原因,却没有找到控制的地方。

3、找了几个小时后在事件里面的 ISDAT 发现,系统会在这里取缓存数据

4、根据前面的自动生成的代码 发现有对当前销售区域的值判断

CHECK CVI_BDT_ADAPTER=>GET_CURRENT_SALES_AREA( ) IS NOT INITIAL

在所有事件里面  DASVB ISDAT XCHAG 加入此判断后,问题解决。

 

Step by step explanation of how to add a new tab to BP screen.

  • Add new fields to standard structure incl_eew_kna1. incl_eew_kna1 is included in KNA1. Fields will be in KNA1 automatically.

            Click on images to see with original size.

          Click on images to see with original size.

TABLES:
  kna1.

constants:
  table_name_kna1     type fsbp_table_name    value 'KNA1',
  false               type boole-boole        value ' '.

DATA:
  gs_kna1 TYPE kna1.
  1. Create a new screen in function group.
  2. IN PBO of sceen call function ‘BUS_PBO’ and in PAI call BUS_PAI. 
  3. MODULE status_9001 OUTPUT.
      CALL FUNCTION 'BUS_PBO'.
    ENDMODULE.
    
    user_command_9001 INPUT.
      CALL FUNCTION 'BUS_PAI'.
    ENDMODULE.

     

  4. In screen layout press F6.Get KNA1-Z fields to the screen. Activate the screen and function group.

Lets begin to customizing.

  • Go to BUPT t-code. 

           Click on images to see with original size.

  • Create a new application named ‘ZKNA’ with New Entries button. Bussiness Partner->Control->Applications. Define a description and active is selected. 

           Click on images to see with original size.

  • Create a new dataset named ‘ZKNA01’ New Entries button. Bussiness Partner->Control->Data Sets.  Click on images to see with original size.
  • Create a new field group named 601 New Entries button. Bussiness Partner->Control->Screen Layout->Field Groups.  Set a description and save. 

           Click on images to see with original size.

  • Assign fields to fields group. Table and field name should be added on screen that is created in Z function group. Click on images to see with original size.
  • Create a new view named ZKNA01 New Entries button. Bussiness Partner->Control->Screen Layout->Views. Set a description.Set Application we created before, same as Data Set. Set program name and screen number. Save the view. Double click on View -> Field Groups. Set field group number we created. Now we should set fm names for before output and after entry. Click on images to see with original size.Click on images to see with original size.
  • Create a fm for before output named zsd_kna1_pbo. Copy ‘CVIC_BUPA_PBO_CVIC03’. Assign fm to Z function group.
function ZSD_KNA1_PBO.
*"--------------------------------------------------------------------
*"*"Local Interface:
*"--------------------------------------------------------------------
  data:
    lt_kna1   type table of kna1,
    lt_knas   type table of knas.

* step 1: request data from xo for dynpro structure
  cvi_bdt_adapter=>data_pbo(
    exporting
      i_table_name = table_name_kna1
    importing
      e_data_table = lt_kna1[]
  ).
  if lt_kna1[] is initial.
    clear gs_kna1.
  else.
    read table lt_kna1 into gs_kna1 index 1.
  endif.

endfunction.
  • Create a fm for after entry named zsd_kna1_pai. Copy ‘CVIC_BUPA_PAI_CVIC03’. Assign fm to Z function group.change     
function ZSD_KNA1_PAI.
*"--------------------------------------------------------------------
*"*"Local Interface:
*"--------------------------------------------------------------------
  data:
    lt_kna1         type table of kna1.
  field-symbols:
    <kna1>          like line of lt_kna1.

  check cvi_bdt_adapter=>is_direct_input_active( ) = false.
* step 1: update xo memory from dypro structure
  cvi_bdt_adapter=>get_current_bp_data(
    exporting
      i_table_name = table_name_kna1
    importing
      e_data_table = lt_kna1[]
  ).

  if lt_kna1[] is initial.
    if gs_kna1 is not initial.
      gs_kna1-kunnr = cvi_bdt_adapter=>get_current_customer( ).
      append gs_kna1 to lt_kna1.
    endif.
  else.
    read table lt_kna1 assigning <kna1> index 1.
    <kna1>-zz_field1 = gs_kna1-zz_field1.
  endif.

  cvi_bdt_adapter=>data_pai(
    i_table_name = table_name_kna1
    i_data_new   = lt_kna1[]
    i_validate   = false
  ).

endfunction.

Set these fm’s to view by Bussiness Partner->Control->Screen Layout->Views.Click on images to see with original size.  

  • Create a new section named ZKNA1 New Entries button. Bussiness Partner->Control->Screen Layout->Sections. Set a description and title. 

            Click on images to see with original size.

  • Select the section we created and double click on Section -> Views. Set item number and view name we created. Save changes. Click on images to see with original size.
  • Create a new screen named ZKNA1 New Entries button. Bussiness Partner->Control->Screen Layout->Screens. Set a description and screen title. Save changes. Click on images to see with original size.
  • Select the screen we created and double click on Screen -> Sections. Set first item section as BUP009 and second number will be section we created. Save changes. Click on images to see with original size.
  • Create a new screen sequence named ZKNA1 New Entries button. Bussiness Partner->Control->Screen Sequenes. Set a description and save changes. Click on images to see with original size.
  • Select the screen seq. we created and double click on Screen Sequence -> Screens. Set item number as screen name that we created. Save changes. 

            Click on images to see with original size.

Now we can see additional tab in BP under FLCU00. Events must be defined for this app.

  •  Go to Bussiness Partner->Control->Events->Bussiness Data Toolset. To set first data we should use ISDAT event. Select ISDAT and double click on Events -> Function Modules. Here we should create a new function in the same fg.  ZSD_KNA1_EVENT_ISDAT. Set Call as ‘X’. And set app name. Save changes.
FUNCTION zsd_kna_event_isdat.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"----------------------------------------------------------------------

  CALL FUNCTION 'CVIC_BUPA_KNA1_GET'
    IMPORTING
      e_kna1 = gs_kna1.

  kna1-zz_field1 = gs_kna1-zz_field1.

ENDFUNCTION.

 Click on images to see with original size.

  1. Turn back to Events. Now we should check if anything is changed in the screen with XCHNG event. Double click on fms. Here we should create a new function in the same fg.  ZSD_KNA1_EVENT_XCHNG. Set Call as ‘X’. And set app name. Save changes. 
    FUNCTION zsd_kna_event_xchng.
    *"----------------------------------------------------------------------
    *"*"Local Interface:
    *"  EXPORTING
    *"     REFERENCE(E_XCHNG) TYPE  BOOLE_D
    *"----------------------------------------------------------------------
    
      IF gs_kna1-zz_field1 NE kna1-zz_field1.
        e_xchng = 'X'.
      ENDIF.
    
    ENDFUNCTION.
     Click on images to see with original size.
  2. Turn back to Events. Now we should set changed values with DSAVB event. Double click on fms. Here we should create a new function in the same fg.  ZSD_KNA1_EVENT_DSAVB. Z Structure is created with Z fields. Set Call as ‘X’. And set app name. Save changes.
  3. FUNCTION zsd_kna_event_dsavb.
    *"--------------------------------------------------------------------
    *"*"Local Interface:
    *"--------------------------------------------------------------------
    
      DATA : ls_kna1 TYPE kna1.
      ls_kna1 = kna1.
      MOVE-CORRESPONDING gs_kna1 TO kna1.
      kna1-zz_field1 = ls_kna1-zz_field1.
    
    
      CALL FUNCTION 'CVIC_BUPA_KNA1_COLLECT'
        EXPORTING
          i_subname = 'ZSD_KNA1_S001'
          i_kna1    = kna1.
    
    ENDFUNCTION.
     Click on images to see with original size.                                                Click on images to see with original size.

Now everything looks fine. Lets test it.

             Click on images to see with original size.

Now we can get current value and change it. With the same solution we can display/update fields in LFA1, KNB1 etc. We only need to find the right fm's for them.  Hopefully it will be useful for you.

<think>好的,用户想要在SAP中对KNVV进行屏幕增强,我需要根据已有的引用资料SAP的知识来回答这个问题。首先,我需要回顾一下已有的引用内容,看看有没有相关的实现方法。引用1提到使用BDT方式进行BP屏幕增强,引用23则具体讲了如何通过结构增强函数组来实现。虽然这些是针对BUT000的,但可能类似的步骤可以应用到KNVV上。 首先,SAP中的屏幕增强通常有几种方法,比如BDT(Business Data Toolset)、BADI(Business Add-Ins)、或者使用增强点/退出。用户提到的KNVV是客户主数据销售视图,属于VKAN表结构的一部分,可能需要使用类似BDT的方法。 根据引用1中的BDT方式,可能需要找到KNVV对应的结构,并检查是否有预留的增强结构。例如,BUT000有CI_EEW_BUT000,那么KNVV可能也有类似的CI_EEW_KNVV或者其他名称的结构。用户需要先在数据字典中查看KNVV表是否有预留的增强字段,或者是否有对应的增强结构。 接下来,引用2中提到的创建函数组屏幕增强页签,可能需要为KNVV创建新的屏幕,并通过PBO(Process Before Output)PAI(Process After Input)逻辑来处理数据。类似引用3中的代码示例,可能需要编写函数模块来获取保存数据。 另外,需要注意SAP S/4HANA中可能有一些变化,特别是在使用CVI(Customer Vendor Integration)的情况下,可能需要使用特定的适配器类,如引用3中的cvi_bdt_adapter类的方法来获取数据。 可能还需要通过SE11创建结构增强,SE51创建屏幕,SE80创建函数组,以及使用CMOD或SMOD来实施增强。用户需要确定KNVV对应的屏幕号,可能通过调试或者查阅SAP文档来找到正确的屏幕。 此外,用户可能需要注册增强项目,并确保自定义字段被正确添加屏幕布局中,并进行字段的输入输出控制。测试时要注意权限数据的完整性,确保增强不会影响原有功能。 总结来说,步骤可能包括:检查KNVV是否有预留增强结构,创建自定义字段,使用BDT方式生成增强屏幕,创建函数组处理逻辑,编写PBO/PAI代码,注册增强,配置屏幕元素,最后测试。不过具体步骤可能因SAP版本具体环境而异,用户需要参考相关文档或OSS notes。</think>在SAP系统中对$KNVV$(客户主数据销售视图)进行屏幕增强,可参考以下实现方法,结合SAP BDT(Business Data Toolset)增强框架技术: ### 实现步骤 1. **确定增强点** 首先通过事务码$SE24$检查$KNVV$表是否提供预定义的增强结构,例如类似$CI_EEW_KNVV$的包含结构。若存在,可直接在此结构中添加自定义字段[^2]。 2. **创建屏幕增强** - 使用事务码$SE51$创建新屏幕号为$9001$的对话框程序(例如程序名$ZKNVV_SCREEN$) - 在屏幕布局中添加自定义字段,例如: ```abap SELECTION-SCREEN BEGIN OF SCREEN 9001. SELECTION-SCREEN COMMENT 1(30) TEXT-001. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002. PARAMETERS: p_zfield1 TYPE char30, p_zfield2 TYPE dats. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN END OF SCREEN 9001. ``` 3. **绑定增强逻辑** - 创建函数组$ZKNVV_ENH_FG$,在$PBO$$PAI$模块中实现数据交互: ```abap FUNCTION zknvv_pbo. DATA: lt_knvv TYPE TABLE OF knvv. IF gs_knvv IS INITIAL. CALL METHOD cl_knvv_bdt_adapter=>data_pbo EXPORTING i_table_name = 'KNVV' IMPORTING e_data_table = lt_knvv[]. IF lt_knvv[] IS NOT INITIAL. READ TABLE lt_knvv INTO gs_knvv INDEX 1. ENDIF. ENDIF. ENDFUNCTION. ``` 4. **注册增强** 通过事务码$CMOD$创建增强项目,选择$V45A0001$(销售凭证增强)或对应$KNVV$的增强点,将新屏幕绑定到标准事务代码$VD02$的屏幕流逻辑中[^1]。 ### 关键配置项 $$ \begin{array}{|c|c|} \hline \text{配置项} & \text{说明} \\ \hline \text{增强结构} & CI\_EEW\_KNVV (需验证存在性) \\ \text{屏幕类型} & 子屏幕/Dialog程序 \\ \text{数据传递方式} & 使用CL\_KNVV\_BDT\_ADAPTER类方法 \\ \text{字段存储} & 自定义表ZKNVV\_CUST \\ \hline \end{array} $$ ### 注意事项 1. 在S4/HANA系统中需检查$KNVV$是否已被CVI(Customer-Vendor Integration)整合 2. 自定义字段需通过事务码$SE11$创建数据元素域 3. 增强实施后需使用事务码$STC0$执行测试用例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值