转载:Solution:增强-预制发票时输入多个发票号

以下文章来源于ABAPer孙亮   ,作者孙小亮
转载:Solution:增强-预制发票时输入多个发票号

MIR7预制发票时要输入多个发票号,非常多非常多,甚至多达100多个发票代码+发票号码。咋存?


我的第一反应是抓狂的,实现肯定是可以的,但做起来肯定很麻烦,一天肯定搞不定了。但需求已经改变不了了,就做吧。

怎么做呢?下面只讲思路。

代码结构比较复杂,不好粘贴上来。且授人以鱼不如授人以渔。


1:确定需求,用户希望在保存预制发票的时候,将“凭证、年度、发票代码、发票号码”存到一个Z表里。

2:既然需要存Z表,我们一般就要在增强屏幕里,提供数据维护的界面。数据维护的界面应该包括什么功能呢?

2.1:数据读取,从Z表里读取数据

2.2:数据维护,提供TableControl或者ALV维护表格数据

2.3:数据保存,将表格数据保存到Z表中。


对于2.1,存在的问题是,如果我们把它写到增强屏幕(假设为9001)的PBO中,则会每次都从DB中读取数据,这显然是不合适的。

对于2.3,存在的问题是:

1) 如果把它写到9001的PAI中,通过对SY-UCOMM的检查,实现表格数据保存到Z表的逻辑,也是不合适的。因为保存的时候除了手工保存外,还可能包含退出屏幕时“提示是否保存,然后选择是”的保存。

2) 凭证编号还没有生成,想保存到数据库也保存不了。


这时候需要我们提高对屏幕编程的认识。一般对于标准事务代码的增强屏幕,要保持一个原则:即在PBO和PAI里,只对程序内表进行操作,尽量不做数据库交互。


那么2.1的问题如何解决呢?这里提供几个思路:

思路1:看有没有增强点,SMOD的也好,BADI的也好

思路2:通过SAT/SE30执行MIR7,看一下这个过程中用到过的函数名,看有没有适合隐式增强的函数并进行隐式增强,将数据从DB中取出。


2.3的问题如何解决呢?2.3存在两个子问题,一是增强代码的位置,二是凭证编号生成较晚。

对于第一个子问题,还是上面两个思路,即:找增强,找函数

对于第二个子问题,这个需要加深对标准事务保存数据逻辑的理解

1)标准事务保存数据时,一般都是将数据提交到更新进程中,在更新进程中对数据统一进行保存的

2)MEMORY ID是无法将数据从当前进程传递到更新进程的。所以需要其他方式将数据提交到更新进程中

3)SHARED BUFFER是跨会话进程和更新进程的,但是对于同一个事务代码不同的会话进程和更新进程,SHARED BUFFER的ID如何区分和对应呢?这个方案好像也不行

4)CALL FUNCTION 'XX' IN UPDATE TASK是可以将数据提交到更新进程的


结合上面的思路,我整理了一个思维导图。


转载:Solution:增强-预制发票时输入多个发票号

接下来就是设计程序结构了,在此不在赘述了。


整个需求从开始编写到完整实现(包括严谨的自测完成),只用了半天时间,比我预想的快了很多。


 

最后结果如下图:

转载:Solution:增强-预制发票时输入多个发票号

想学吗?快来我们项目上啊。

 

微信:286503700



推荐阅读:

动态批量修改任意表任意字段的值

动态获取查询条件的一个小Demo

使用cl_gui_docking_container 实现多ALV》

VOFM 修改 组单开票时 会计凭拆分规则

DEMO SUBMIT 某程序并获取该程序ALV数据

DEMO:S/4 1809 FAGLL03H 增加字段增强

几个ABAP实用模板,体力活就别一行行敲了,复制粘贴得了

DEMO:BTE增强实现凭证创建检查

SAP Parallel Accounting(平行分类账业务)配置+操作手册+BAPI demo程序

CC02修改确认日期BAPI:Processing of change number  was canceled

我是怎样调试BAPI的,以F-02为例

女儿的部分书单

推荐几本小说吧,反正过年闲着也是闲着,看看呗

我是不是被代码给耽误了……不幸沦为一名程序员……

三亚自由行攻略(自己穷游总结)

苏州游记

杂谈:说走就走的旅行没那么难

溜达:无锡

记码农十周年(20110214--20210214)

不一样的SAP干货铺群:帅哥靓妹、红包、烤羊腿!

十年老码农搬砖习惯和技巧

我这个老码农是怎么debug标准程序的

我是怎样调试BAPI的,以F-02为例

杂谈:几种接口

《干货来袭:2020年公众号内容汇总

Odata 增删改查详例

ODATA CREATE_DEEP_ENTITY 详例

RESTful DEMO 一:SAP 如何提供 RESTful Web 服务

RESTful DEMO 四 :增删改查及调用

DEMO  search help 增强 ( vl03n KO03 等)

录BDC时  弹出的公司代码框问题

动态获取查询条件的一个小Demo

动态批量修改任意表任意字段的值

 

WDA Demo

 

WDA  DEMO 0:开启服务 设置hosts
WDA  DEMO 02: 简单介绍
WDA  DEMO 03: 根据选择条件查询并显示
WDA  DEMO 04: select options 查询并显示
WDA  DEMO 05:两个table联动展示数据
WDA  DEMO 06: 创建事务代码
WDA  DEMO 07 页面跳转及全局变量的使用
WDA  DEMO 08 全局变量方式二
WDA  DEMO 09 ALV 简单展示
WDA  DEMO 1:简单查询并显示结果
WDA  DEMO 10 代码模块化整理
WDA  DEMO 11 根据BAPI/Function创建WDA





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值