gpt4 book ai didi

关于将预留单中增强字段带入物料凭证和会计凭证中

转载 作者:我是一只小鸟 更新时间:2023-08-09 14:31:45 33 4
gpt4 key购买 nike

1、业务需求

预留中自定义文本字段“大项修”。根据预留创建物料凭证时,将该字段带入到物料凭证中,类似标准字段“项目文本”。并在物料凭证自动产生会计凭证后,将该字段带入到会计凭证行项目中.

其中需要解决以上三张凭证对该字段的界面显示,以及预留对该字段的 维护。解决接口中用BAPI对创建预留,创建物料凭证的字段维护 。

2、前台界面增强

2.1、预留增强

增强RESB表,添加大项修字段ZSGTXT 。

在屏幕中增加对应字段 。

设置MB21和MB22可编辑,MB23只读 。

代码如下 。

                          
                            "
                          
                          
                            -----------------------------@斌将军-----------------------------
                          
                          
                            MODULE
                          
                           screen_set_edit 
                          
                            OUTPUT
                          
                          
                            .

                          
                          
                            *
                          
                          
                            预留中控制大项修字段是否可编辑
                          
                          
                            IF
                          
                           sy-dynnr = 
                          
                            0510
                          
                          
                            .
    
                          
                          
                            IF
                          
                           sy-tcode = 
                          
                            '
                          
                          
                            MB21
                          
                          
                            '
                          
                          
                            OR
                          
                           sy-tcode = 
                          
                            '
                          
                          
                            MB22
                          
                          
                            '
                          
                          
                            .

    
                          
                          
                            ELSE
                          
                          
                            .
      
                          
                          
                            LOOP
                          
                          
                            AT
                          
                          
                            SCREEN
                          
                          
                            .
        
                          
                          
                            IF
                          
                           screen-name = 
                          
                            '
                          
                          
                            RESB-ZSGTXT
                          
                          
                            '
                          
                          
                            .
          screen
                          
                          -input = 
                          
                            0
                          
                          .
                          
                            "
                          
                          
                            设置为不可编辑
                          
                          
                            ENDIF
                          
                          
                            .
        
                          
                          
                            MODIFY
                          
                          
                            SCREEN
                          
                          
                            .
      
                          
                          
                            ENDLOOP
                          
                          
                            .
    
                          
                          
                            ENDIF
                          
                          
                            .
  
                          
                          
                            ENDIF
                          
                          
                            .

                          
                          
                            ENDMODULE
                          
                          
                            .

                          
                          
                            "
                          
                          
                            -----------------------------@斌将军-----------------------------
                          
                        

其中MB22修改时,字段并不能保存到底表,需要做增强更新 。

2.2、物料凭证增强

标准表增强该字段 。

MSEG 。

 MATDOC 。

创建DDL视图用于扩展NSDM_E_MSEG 。

为了使增强字段更能体现是由预留带入,因此直接将该字段显示到预留页签中。根据前台F1可知,预留界面所在位置,以及界面字段在结构GOITEM中 。

增强GOITEM结构 。

屏幕添加字段,因为只需要显示,所以设置为只输出 。

到此,前台界面执行MIGO根据预留单创建物料凭证,就能直接带出该字段的值。但是过账时发现,该字段的值并没有保存到MSEG表中.

此处推测,应该是前台字段在保存到MSEG表的过程中,某些结构没有该增强字段,导致值传递时丢失。 后经反复测试,大致摸清数据传输的过程 。

最终找到影响的位置,当传输给ls_imseg3时,ls_imseg3中并没有增强该字段,所以传输给ls_imseg时,增强字段的值就丢了 。

ls_imseg3的结构是IMSEG3,ls_imseg的结构是IMSEG.

在给IMSEG3增加ZSGTXT时,发现报错: GOITEM不能定义两个ZSGTXT 。

原来GOITEM和IMSEG中都包含IMSEG3结构,所以删除之前GOITEM的增强字段,直接在IMSEG3中增强该字段,则三个结构中都有了ZSGTXT 。

后经测试,创建物料凭证时,可以直接将预留的该字段值带入到物料凭证中 。

2.3、会计凭证增强

会计凭证是在创建物料凭证时自动产生的,因此DEBUG的方向还是物料凭证创建过程 。

在这个过程中有一个增强点MM07MFF9_F_BELEG_ERGAENZEN→CKMV_AC_DOCUMENT_CREATE,可以在生成会计凭证时,修改XACCIT表的数据,就可以改变会计凭证的行项目值,这与问题解决非常贴合.

所以需要在XACCIT中增强字段,并且在最终的会计凭证表BSEG中增强字段.

XACCIT 。

BSEG 。

但是经过测试,数据仍然没有通过物料凭证带入到会计凭证中,推测也是和物料凭证遇到的问题一样,数据传递时,有结构没有增加该字段 。

进入到CKMV_AC_DOCUMENT_CREATE函数中调试后,发现其中一个表p_acc对应的结构中没有该字段 。

对应的结构是通过代码定义的,因此直接在代码中增加了该字段 。

然后ZSGTXT的值就可以存入BSEG中.

之后在前台界面添加该字段用于展示即可 。

增强BSEG_ALV结构,在行项目表中显示 。

更改布局,显示在列表中 。

至此,预留单中的“大项修”字段,就可以传递到物料凭证中,并传递到会计凭证中 。

3、接口代码

3.1、预留

通过BAPI创建预留时,需要将ZSGTXT传递到预留中 。

增强实施 。

 添加代码 。

                          
                            "
                          
                          
                            -----------------------------@斌将军-----------------------------
                          
                          
                            METHOD
                          
                          
                             if_ex_mb_res_bapi_create1~extensionin_to_resb.
    
                          
                          
                            CONSTANTS
                          
                          : lc_vbkok    
                          
                            TYPE
                          
                           char5  VALUE 
                          
                            '
                          
                          
                            VBKOK
                          
                          
                            '
                          
                          ,           
                          
                            "
                          
                          
                            Enhance the structure for more z fields in LIKP
                          
                          
               lc_vbpok    
                          
                            TYPE
                          
                           char5  VALUE 
                          
                            '
                          
                          
                            VBPOK
                          
                          
                            '
                          
                          ,           
                          
                            "
                          
                          
                            Enhance the structure for more z fields in LIPS
                          
                          
               lc_cs_vbkok 
                          
                            TYPE
                          
                           char8  VALUE 
                          
                            '
                          
                          
                            CS_VBKOK
                          
                          
                            '
                          
                          
                            .
    
                          
                          
                            DATA
                          
                          : ls_zresb 
                          
                            TYPE
                          
                          
                             zresb_append,
          lv_rspos 
                          
                          
                            TYPE
                          
                           resb-
                          
                            rspos.

    
                          
                          
                            LOOP
                          
                          
                            AT
                          
                           it_extension_in 
                          
                            INTO
                          
                          
                            DATA
                          
                          
                            (ls_extension).

      
                          
                          
                            IF
                          
                           ls_extension-
                          
                            structure
                          
                           = 
                          
                            '
                          
                          
                            ZRESB_APPEND
                          
                          
                            '
                          
                          
                            .
        lv_rspos 
                          
                          = ls_extension-
                          
                            valuepart1.
        ls_zresb 
                          
                          = ls_extension-
                          
                            valuepart2.
        
                          
                          
                            READ
                          
                          
                            TABLE
                          
                           resb 
                          
                            INTO
                          
                          
                            DATA
                          
                          
                            (ls_resb) INDEX lv_rspos.
        
                          
                          
                            IF
                          
                           sy-subrc = 
                          
                            0
                          
                          
                            .
          ls_resb
                          
                          -zsgtxt = ls_zresb-zsgtxt.
                          
                            "
                          
                          
                            大项修
                          
                          
                            MODIFY
                          
                           resb 
                          
                            FROM
                          
                          
                             ls_resb INDEX lv_rspos TRANSPORTING zsgtxt.
        
                          
                          
                            ENDIF
                          
                          
                            .
      
                          
                          
                            ENDIF
                          
                          
                            .
    
                          
                          
                            ENDLOOP
                          
                          
                            .
  
                          
                          
                            ENDMETHOD
                          
                          
                            .

                          
                          
                            "
                          
                          
                            -----------------------------@斌将军-----------------------------
                          
                        

3.2、物料凭证

BADI:MB_BAPI_GOODSMVT_CREATE 。

调用方法IF_EX_MB_BAPI_GOODSMVT_CREATE~EXTENSIONIN_TO_MATDOC 。

IMSEG结构中也要新增增强字段,用于传值,上文已经新增过了 。

增强代码 。

                          
                            "
                          
                          
                            --------------------@斌将军--------------------
                          
                          
                            METHOD
                          
                          
                             IF_EX_MB_BAPI_GOODSMVT_CREATE~EXTENSIONIN_TO_MATDOC.

  
                          
                          
                            DATA
                          
                          
                            :
    c_lenstruc          
                          
                          
                            TYPE
                          
                           i VALUE 
                          
                            30
                          
                          
                            ,
    wa_bapi_mb_header   
                          
                          
                            TYPE
                          
                          
                             bapi_te_xmkpf,
    wa_bapi_mb_item     
                          
                          
                            TYPE
                          
                          
                             bapi_te_xmseg,
    wa_extension_in     
                          
                          
                            TYPE
                          
                          
                             bapiparex.

  
                          
                          
                            FIELD-SYMBOLS
                          
                          
                            :
    
                          
                          <fs_imseg>          
                          
                            TYPE
                          
                          
                             imseg.

  
                          
                          
                            CHECK
                          
                          
                            NOT
                          
                           extension_in[] 
                          
                            IS
                          
                          
                            INITIAL
                          
                          
                            .


                          
                          
                            *
                          
                          
                             Analyze IMSEG for document structure and assign LINE_IDs if necessary
                          
                          
                            CALL
                          
                          
                            METHOD
                          
                           cl_mmim_line_id_manager=>
                          
                            analyze_mb_create
    
                          
                          
                            CHANGING
                          
                          
                            
      ct_imseg          
                          
                          =
                          
                             ct_imseg[]
    
                          
                          
                            EXCEPTIONS
                          
                          
                            
      duplicate_line_id 
                          
                          = 
                          
                            1
                          
                          
                            
      OTHERS            
                          
                          = 
                          
                            2
                          
                          
                            .

  
                          
                          
                            LOOP
                          
                          
                            AT
                          
                           extension_in 
                          
                            INTO
                          
                          
                             wa_extension_in.
    
                          
                          
                            CASE
                          
                           wa_extension_in-
                          
                            structure
                          
                          
                            .

                          
                          
                            *
                          
                          
                             extension of MKPF
                          
                          
      WHEN 
                          
                            '
                          
                          
                            BAPI_TE_XMKPF
                          
                          
                            '
                          
                          
                            .
        
                          
                          
                            MOVE
                          
                           wa_extension_in+c_lenstruc 
                          
                            TO
                          
                          
                             wa_bapi_mb_header.
        
                          
                          
                            MOVE-CORRESPONDING
                          
                           wa_bapi_mb_header 
                          
                            TO
                          
                          
                             cs_imkpf.

                          
                          
                            *
                          
                          
                             extension of MSEG
                          
                          
      WHEN 
                          
                            '
                          
                          
                            BAPI_TE_XMSEG
                          
                          
                            '
                          
                          
                            .
        
                          
                          
                            MOVE
                          
                           wa_extension_in+c_lenstruc 
                          
                            TO
                          
                          
                             wa_bapi_mb_item.
        
                          
                          
                            READ
                          
                          
                            TABLE
                          
                          
                             ct_imseg
          
                          
                          
                            WITH
                          
                           KEY line_id = wa_bapi_mb_item-
                          
                            matdoc_itm
          ASSIGNING 
                          
                          <fs_imseg>
                          
                            .
        
                          
                          
                            IF
                          
                           sy-subrc 
                          
                            EQ
                          
                          
                            0
                          
                          
                            .
          
                          
                          
                            MOVE-CORRESPONDING
                          
                           wa_bapi_mb_item 
                          
                            TO
                          
                           <fs_imseg>
                          
                            .
        
                          
                          
                            ENDIF
                          
                          
                            .
    
                          
                          
                            ENDCASE
                          
                          
                            .
  
                          
                          
                            ENDLOOP
                          
                          
                            .


                          
                          
                            ENDMETHOD
                          
                          
                            .

                          
                          
                            "
                          
                          
                            --------------------@斌将军--------------------
                          
                        

至此,BAPI传值增强也已完成 。

  。

  。

最后此篇关于关于将预留单中增强字段带入物料凭证和会计凭证中的文章就讲到这里了,如果你想了解更多关于关于将预留单中增强字段带入物料凭证和会计凭证中的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com