首页 > 其他分享 >关于将预留单中增强字段带入物料凭证和会计凭证中

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

时间:2023-08-09 10:36:55浏览次数:34  
标签:物料 凭证 会计凭证 extension 单中 ls 预留

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中。

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

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

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传值增强也已完成

 

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:物料,凭证,会计凭证,extension,单中,ls,预留
From: https://www.cnblogs.com/BinGeneral/p/17615750.html

相关文章

  • 关于存货预留的使用
    应用场景:1.物料启用批次,物料计划属性为LP,而非为当前订单所用,而这时需要使用非当前订单批次物料,这里可挪用物料的一种方式。同样适用物料预留 2.这里则可以使用销售预留释放其他订单存货供当前订单使用 ......
  • antd from 表单中的key 不能绑定input中的字段 Input.js:207 Uncaught (in promise)
    <Formclass="NewVersion"ref="formRef"name="NewVersion":model="formData"><Spacev-for="(newPg,index)informData.version":key="index"style="dis......
  • js如何动态清除form表单中input款下的错误信息
    form表单<formaction=""method="post"novalidateid="myform">{%csrf_token%}{%forforminform_obj%}<divclass="form-group"><labelfor="{{form.i......
  • O2OA(翱途)开发平台如何在流程表单中使用基于Vue的ElementUI组件?
    本文主要介绍如何在O2OA中进行审批流程表单或者工作流表单设计,O2OA主要采用拖拽可视化开发的方式完成流程表单的设计和配置,不需要过多的代码编写,业务人员可以直接进行修改操作。在流程表单设计界面,可以在左边的工具栏找到ElementUI组件。 将对应的组件拖动到表单设计......
  • 微信菜单中的域名转发
    微信菜单中通常会设置一些URL,如果网站出现了域名迁移,菜单的URL也需要改。但微信菜单有个特性:修改菜单内容后,24小时之内才能更新到所有微信客户端。也就是说,24小时候,还是有用户会访问到老的域名。怎么办?在老的网站入口最顶上,加上如下PHP代码即可:$old_url='http://'.$_SERVER['HTTP......
  • Ubuntu开始菜单中的程序图标放置位置
    可能放置在以下两个位置中的一个/usr/share/applications~/.local/share/applications.desktop文件的内容#!/usr/bin/envxdg-open[DesktopEntry]Version=1.0Terminal=falseType=ApplicationName=MicrosoftTeamsExec=/opt/microsoft/msedge/microsoft-edge--profile......
  • 若依框架循环的form表单中配置权限
    页面中循环form表单 菜单中配置权限在字典管理的备注中,写权限 formb表单中,配置权限,直接从备注中获取权限标识 ......
  • 为 TortoiseGit 添加 ssh key---运行 TortoiseGit 开始菜单中的 Pageant 程序将ppk私
    TortoiseGit使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。使用命令 ssh-keygen-C"邮箱地址"-trsa 产生的密钥在TortoiseGit中不能使用。而基于git的开发必须要用到rsa密钥,因此需要用到TortoiseGit的puttykeygenerator工具来生成既适用于git的......
  • F-02会计凭证和冲销
    *&---------------------------------------------------------------------**&ReportZPOST_DOCUMENT*&---------------------------------------------------------------------**&*&-----------------------------------------------------------......
  • form标签multipart/form-data 文件上传表单中 传递参数无法获取的原因!
    JAVA后台获取不到form表单提交值的情况可能的原因:1、提交元素的name与获取的name不符--request.getParameter(name)2、传递的值为空3、form没有嵌套input4、form加了enctype="multipart/form-data"属性其中第4种可能的情况主要是是因为在使用multipart/form-data属性之后请求体发生......