【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景:

TCODE:自开发程序ZMMF004
采购申请打印
在这里插入图片描述


问题描述

ZMMF004打印的时候,有的采购申请的品名、规格、品牌为空
在这里插入图片描述


原因分析:

1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌
SQL语句如下,只需修改where条件即可测试各条数据
eban底表:采购申请

测试1:采购申请号:2500000122

SELECT ZPM,ZGGXH,ZPP
FROM EBAN
WHERE BANFN = '2500000122';

执行结果:
在这里插入图片描述
可看出该条采购申请是本身就没有品名、规格、品牌的值的

测试2:采购申请号:2500000134

SELECT ZPM,ZGGXH,ZPP
FROM EBAN
WHERE BANFN = '2500000134';

执行结果:
在这里插入图片描述
可看出该条采购申请是本身就有品名的值,但没有规格、品牌的值

测试3:采购申请号:2500000136

SELECT ZPM,ZGGXH,ZPP
FROM EBAN
WHERE BANFN = '2500000136';

执行结果:
在这里插入图片描述
可看出该条采购申请对应两个物料号,其中一个物料有品名值,无规格、品牌的值;另一个物料这三个字段都没有值

从上面的测试结果我可以得出,并不是由于程序取数逻辑错误而导致带不出品名、规格、品牌等字段值,而是因为一些采购申请本身就没有填相应的字段值

2、我的首先的思路是,loop循环ALV最终要显现出来的取到数据的内表,一条一条查哪些采购申请的品名、规格、品牌为空,若为空,则再从物料主数据中取然后放到内表中,但这样loop会非常耗费时间,代码实现也要相对注意,所以这个思路out

3、与其loop已取出来数的内表,不如直接从源头select改变取值方式,直接去物料主数据里取


解决方案:

通过上面的原因分析,可采用如下解决方案:也就是原因分析中的第三条
直接取物料对应的物料主数据上的需要的字段信息,并使其显示出来,若采购申请有这三个字段的值也没关系,从物料主数据中取出来的三字段的值会直接覆盖(因为采购申请中的三字段值和物料主数据中的应该是一致的)
所以解决办法也很简单,直接在原先select语句基础上,连一个表mara物料主数据,让直接从mara表中取品名,规格,品牌(前提是mara表中得有这些字段)

mara表:
在这里插入图片描述

修改的语句如下:

SELECT a~banfn,a~bnfpo,a~badat,a~bsart,a~matkl,a~ernam,a~knttp,a~werks,d~name1,a~ekgrp,b~eknam,a~matnr,a~txz01,i~zpm,i~zggxh,i~zpp,a~menge,a~meins,a~lfdat,a~lgort,c~lgobe,a~afnam,a~zjjcd,a~zjhjh,f~maktx,g~wgbez,h~knttxINTO CORRESPONDING FIELDS OF TABLE @gt_alvFROM eban AS aLEFT  OUTER JOIN t024    AS b ON a~ekgrp = b~ekgrpLEFT  OUTER JOIN t023T   AS g ON a~matkl = g~matklLEFT  OUTER JOIN t001L   AS c ON a~werks = c~werks AND a~lgort = c~lgortLEFT  OUTER JOIN t001w   AS d ON a~werks = d~werksLEFT  OUTER JOIN makt    AS f ON a~matnr = f~matnrLEFT  OUTER JOIN zmmt021 AS e ON a~banfn = e~banfnLEFT  OUTER JOIN t163i   AS h ON a~knttp = h~knttp AND h~spras = @sy-languLEFT  OUTER JOIN MARA    AS i on i~matnr = a~matnrWHERE a~bsart IN @s_bsartAND a~werks IN @s_werksAND a~banfn IN @s_banfnAND a~badat IN @s_badatAND a~ernam IN @s_ernamAND a~loekz NE 'X'AND (lv_str)AND (lv_str2).

红框中为修改并添加的语句
在这里插入图片描述
再执行 ZMMF004,效果如下:
在这里插入图片描述


2024/12/12 13:57
承接上文,需要做个纠正,由于采购申请中的那三个字段的值可能和物料主数据中的不一样,所以其实并不能简单的让直接取物料主数据里的值,而忽略过采购申请,所以,还是需要判断:若采购申请中的三个字段的值不为空,则就取采购申请里的,若采购申请里的为空或为初始值,则取物料主数据里的

代码如下:

  SELECT a~banfn,a~bnfpo,a~badat,a~bsart,a~matkl,a~ernam,a~knttp,a~werks,d~name1,a~ekgrp,b~eknam,a~matnr,a~txz01,
*         a~zpm,
*         a~zggxh,
*         a~zpp,CASEWHEN a~zpm is not null and a~zpm is not initial then a~zpmelse i~zpmend as zpm,CASEWHEN a~zggxh is not null and a~zggxh is not initial then a~zggxhelse i~zggxhend as zggxh,CASEWHEN a~zpp is not null and a~zpp is not initial then a~zppelse i~zppend as zpp,a~menge,a~meins,a~lfdat,a~lgort,c~lgobe,a~afnam,a~zjjcd,a~zjhjh,f~maktx,g~wgbez,h~knttxFROM eban AS aLEFT  OUTER JOIN t024    AS b ON a~ekgrp = b~ekgrpLEFT  OUTER JOIN t023T   AS g ON a~matkl = g~matklLEFT  OUTER JOIN t001L   AS c ON a~werks = c~werks AND a~lgort = c~lgortLEFT  OUTER JOIN t001w   AS d ON a~werks = d~werksLEFT  OUTER JOIN makt    AS f ON a~matnr = f~matnrLEFT  OUTER JOIN zmmt021 AS e ON a~banfn = e~banfnLEFT  OUTER JOIN t163i   AS h ON a~knttp = h~knttp AND h~spras = @sy-languLEFT  OUTER JOIN MARA    AS i on i~matnr = a~matnrWHERE a~bsart IN @s_bsartAND a~werks IN @s_werksAND a~banfn IN @s_banfnAND a~badat IN @s_badatAND a~ernam IN @s_ernamAND a~loekz NE 'X'AND (lv_str)AND (lv_str2)INTO CORRESPONDING FIELDS OF TABLE @gt_alv.

另外:对null 和initial做个区分
a~zpm is not null检查字段是否有值;a~zpm is not initial检查字段的值是否不是其“初始”状态;
这里的初始状态应该是说数据库表字段在定义时有无指定默认值,如果数据库表字段在定义时指定了默认值,那么在插入数据时如果没有为该字段赋值,数据库会白动使用指定的默认值;如果数据库表字段没有指定默认值,且在插入数据时没有为其赋值,那么该字段的值将取决于数据库系统的默认行为:字符类型字段会被赋值为空字符(”)
那只有在从采购申请中得来的字段不为空且不是初始值的情况下,就用采购申请里的;若是空或是初始值,就用物料主数据里的
null在数据库中表示一个未知或缺失的值。如果一个字段的值为null,这意味着这个字段没有值,或者说它的值是不确定的。
initial用于表示一个字段或变量的初始状态或默认值

注:
在 ABAP 中,往数据库插入数据时,如果字段未被显式赋值,则插入行为取决于以下几个方面:
1、字段的初始值:
对于 ABAP 内部表或者工作区(Work Area)中的字段,如果未赋值,这些字段会有默认的
初始值,具体如下:
字符型(CHAR, STRING):空字符串 ··
数值型(INT, FLOAT, DEC):e。
日期型(DATE):‘00000000’。
时间型(TIME):‘000000’
布尔型 (X, FLAG):8。
插入数据库时,ABAP 会使用这些默认初始值。
2、数据库字段的默认值
如果数据库表字段在定义时指定了默认值(通过字段的 Defaut 属性设置),即使 ABAP 程序
没有赋值,该默认值也会被插入。
3、数据库字段是否允许空值:
如果字段在数据库中被定义为允许 NULL值,那么 ABAP 中使用 CLEAR 或未赋值的字段可
能会被视为 NULL,具体取决于数据库接口的设置。
如果字段不允许 NULL值,未赋值字段会使用其默认的初始值插入到数据库中,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 20.04 24.04 双网卡 Bond 配置指南

前言:在现代服务器管理中,网络的稳定性和可靠性至关重要。为了提高网络的冗余性和负载能力,我们经常需要配置多个网络接口以实现链路聚合或故障转移。Ubuntu系统自17.10版本起,引入了Netplan作为新的网络配置抽象化工具&#xff0…

OCR实践—PaddleOCR

有个项目需求,对拍摄的问卷图片,进行自动得分统计【得分是在相应的分数下面打对号】,输出到excel文件 原始问卷文件见下图,真实的图片因使用手机拍摄的图片,存在一定的畸变, 技术调研 传统方法 传统方法…

Gitee与idea的项目提交步骤

1. 准备工作 确保你已经安装了Git,并且你的计算机上已经配置了Git。如果你还没有安装Git,可以从Git官网下载并安装。 2. 创建Gitee账户和仓库 访问Gitee官网并注册一个账户(如果你还没有的话)。登录你的Gitee账户。点击右上角的…

三相异步电动机没有气压怎么办?

三相异步电动机作为工业和商业应用中最常见的电动机类型之一,广泛应用于各类机械设备及自动化系统中。其运行依赖于电能的转换,然而在某些情况下,可能会出现电动机驱动设备无法获得气压的情况。 一、三相异步电动机工作原理 三相异步电动机…

ubuntu+ros新手笔记(五):初探anaconda+cuda+pytorch

深度学习三件套:初探anacondacudapytorch 系统ubuntu22.04 ros2 humble 1.初探anaconda 1.1 安装 安装过程参照【详细】Ubuntu 下安装 Anaconda 1.2 创建和删除环境 创建新环境 conda create -n your_env_name pythonx.x比如我创建了一个名为“py312“的环境…

【测试】Pytest

建议关注、收藏! 目录 功能pytest 自动化测试工具。 功能 单元测试:用于验证代码的最小功能单元(如函数、方法)的正确性。 简单的语法:不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试:P…

707. 设计链表 链表的知识复习

707. 设计链表 class MyLinkedList {public:struct LinkedNode {int val;LinkedNode *next;LinkedNode(int val):val(val),next(nullptr){}};MyLinkedList(){dummyhead new LinkedNode(0);size0; }int get(int index) {if(index < 0 || index > size){return -1;}Linke…

【中间件介绍及案例分析】

中间件介绍及案例分析 一、中间件的定义 中间件是一种位于操作系统、网络和数据库之上&#xff0c;应用软件之下的软件。它的主要作用是为处于不同系统中的软件组件提供通用服务&#xff0c;使得这些软件组件能够更好地通信、协同工作&#xff0c;并且帮助开发人员更高效地构…

题解 - 统计成绩

题目描述 每次考试或测试后&#xff0c;老师们都要进行成绩统计。假如某次期末考试有语文、数学、英语三门课&#xff0c;现请你编程输出总成绩最高分以及每门学科的最高分。 输入 输入共n1行。 第1行是一个正整数n&#xff08;1≤n≤100&#xff09;&#xff0c;表示学生人数…

Unity性能优化---使用SpriteAtlas创建图集进行批次优化

在日常游戏开发中&#xff0c;UI是不可缺少的模块&#xff0c;而在UI中又使用着大量的图片&#xff0c;特别是2D游戏还有很多精灵图片存在&#xff0c;如果不加以处理&#xff0c;会导致很高的Batches&#xff0c;影响性能。 比如如下的例子&#xff1a; Batches是9&#xff0…

环境和工程搭建

1.案例介绍 1.1 需求 实现⼀个电商平台 该如何实现呢? 如果把这些功能全部写在⼀个服务⾥, 这个服务将是巨⼤的. 巨多的会员, 巨⼤的流量, 微服务架构是最好的选择. 微服务应⽤开发的第⼀步, 就是服务拆分. 拆分后才能进⾏"各⾃开发" 1.2 服务拆分 拆分原则 …

解决Jmeter HTTP Cookie管理器cookie不生效

解决Jmeter HTTP Cookie管理器cookie不生效问题 解决Jmeter HTTP Cookie管理器cookie不生效问题1、设置Jmeter HTTP Cookie管理器cookie后&#xff0c;发起的请求显示[no cookies]jmeter问题复现&#xff1a;这里同样使用postman进行重试&#xff0c;发现是可以正常获取数据的&…

操作系统课后习题2.2节

操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度&#xff0c;这个是由CPU的设计和它的硬件来决定的&#xff0c;具体的调度算法是不能提高CPU的效率的&#xff1b; 第3题 互斥性&#xff1a; 指的是进程之间的同步互斥关系&#xff0c;进程是一个动态的过程&#…

二叉搜索树 平衡树(c嘎嘎版)

定义: 二叉搜索树是一种二叉树的树形数据结构,其定义如下: 空树是二叉搜索树。 若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。 若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。 二叉搜索树的左右子树均为…

Everything搜索实现

最近编写NTFS文件实时搜索工具, 类似 Everything 这样, 速度快还小巧, 于是花了约3周进行研究, 总结下学习过程中一些经验 实现分3部分完成 一. 解析NTFS 主文件表(MFT) 这一步是获取文件数据的唯一迅速且可靠的来源 NTFS_MFT_Parse.h #pragma once #include "NTFS_Bas…

23.DDD与微服务

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现&#xff0c;也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…

vscode 打开 setting.json

按下Ctrl Shift P&#xff08;Windows/Linux&#xff09;或Cmd Shift P&#xff08;Mac&#xff09;来打开命令面板。输入open settings&#xff0c;然后选择 Open User Settings(JSON)。打开settings.json文件 ------修改设置-----&#xff1a; 1、 html代码的行长度&am…

汽车电子元件的可靠性保障:AEC-Q102认证

AEC-Q102标准的起源与价值 随着汽车电子系统的日益复杂&#xff0c;电子器件必须能够在极端的温度、湿度、振动和电磁干扰等恶劣条件下保持性能。AEC-Q102标准由汽车电子委员会&#xff08;AEC&#xff09;制定&#xff0c;专门针对LED、激光二极管和光电二极管等光电器件&…

基于 Couchbase 的数仓建模方案

以下是一份基于 Couchbase 的数仓建模方案&#xff0c;结合你的业务需求&#xff08;订单、支付、退款业务&#xff09;以及报表需求&#xff08;营收报表、优惠报表、支付方式报表&#xff09;&#xff0c;为 ODS、DWD、DWS、ADS 层提供了存储方式、库名、表名的标准化设计。 …

RK3576 Android14,内存大于4G时UVC应用无法申请内存

最近有个项目需要将Linux虚拟成UVC摄像头&#xff0c;开发过程中遇到一个奇怪的事情&#xff0c;通过V4l2框架接口申请内存时&#xff0c;相同的板子&#xff0c;只是内存一个4G一个8G。4G的内存可以申请成功&#xff0c;8G就不行。提示“内存不足” 内存更大反而内存不足&…