【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.rhkb.cn/news/489188.html

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

相关文章

人员离岗监测摄像机智能人员睡岗、逃岗监测 Python 语言结合 OpenCV

在安全生产领域,人员的在岗状态直接关系到生产流程的顺利进行和工作环境的安全稳定。人员离岗监测摄像机的出现,为智能人员睡岗、逃岗监测提供了高效精准的解决方案,而其中的核心技术如AI识别睡岗脱岗以及相关的算法盒子和常见的安全生产AI算…

Linux之条件变量,信号量,生产者消费者模型

Linux之条件变量,信号量,生产消费者模型,日志以及线程池 一.条件变量1.1条件变量的概念1.2条件变量的接口 二.信号量2.1信号量的重新认识2.2信号量的接口 三.生产者消费者模型3.1生产者消费者模型的概念3.2基于阻塞队列的生产者消费者模型3.3…

Leecode刷题C语言之K次乘法运算后的最终数组①

执行结果:通过 执行用时和内存消耗如下: 代码如下: int* getFinalState(int* nums, int numsSize, int k, int multiplier, int* returnSize) {int *ret (int *)malloc(sizeof(int) * numsSize);memcpy(ret, nums, sizeof(int) * numsSize);while (k…

配置中心 选型 : Apollo Vs. Nacos Vs. spring cloud config

为什么我们需要一个微服务配置中心? 首先,我们可以想象下,如果没有配置中心,我们的项目可能是这样的:不同环境的配置文件都放在项目里面,部署时可以通过启动参数来指定使用哪个环境的配置。 这种方式有两…

LAVE——基于大语言模型的新型代理辅助视频编辑工具允许用户根据自己的编辑风格进行调整

概述 论文地址:https://arxiv.org/abs/2402.10294 视频是一种非常强大的交流和讲述故事的媒介。随着社交媒体和视频共享平台的出现,视频的受欢迎程度直线上升,许多人都在制作和分享自己的内容。然而,对于初学者来说,视…

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…

题目 1688: 数据结构-字符串插入

第一种方式字符串 #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){string s1,s2;int n;cin>>s1>>s2>>n;s1.insert(n-1,s2);cout<<s1<<endl;return 0; } 第二种方式字符数组 …

【KodExplorer】可道云KodExplorer-个人网盘安装使用

说明&#xff1a;安装kodExplorer &#xff08;不是Kodbox&#xff09;&#xff1b;Kodbox需求服务器至少2核4G内存&#xff0c;要求环境具备php/redis/mysql/。安装kodExplorer 就是比较方便简单部署&#xff0c;个人版免费。 一、安装环境需求 服务器: Windows&#xff0c;…

在服务器(linux系统)安装anaconda

按照官方教程操作即可 1.下载anaconda3&#xff0c;选择对应版本 curl -O https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh2.安装anaconda bash ~/Anaconda3-2024.06-1-Linux-x86_64.sh一直按“enter”键查看协议&#xff0c;然后选择“yes”即可。…

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…

建立基于TCP的客户端和服务端

函数介绍&#xff1a; 1.socket() 作用&#xff1a;创建套接字 domain: AF_INET&#xff1a;IPv4 Internet 协议族。AF_INET6&#xff1a;IPv6 Internet 协议族。AF_UNIX&#xff1a;Unix 域协议族&#xff0c;用于在同一台主机上的进程间通信。 type: SOCK_STREAM&#xff1a…

SQL语句在MySQL中如何执行

MySQL的基础架构 首先就是客户端&#xff0c;其次Server服务层&#xff0c;大多数MySQL的核心服务都在这一层&#xff0c;包括连接、分析、优化、缓存以及所有的内置函数&#xff08;时间、日期、加密函数&#xff09;&#xff0c;所有跨存储引擎功能都在这一层实现&#xff1…

轻量化特征融合 | 一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作

论文题目&#xff1a;A Lightweight Fusion Strategy With Enhanced Interlayer Feature Correlation for Small Object Detection 论文链接&#xff1a;https://ieeexplore.ieee.org/abstract/document/10671587 giuhub&#xff1a;https://github.com/nuliweixiao/EFC 关键词…

vue2+element-ui实现多行行内表格编辑

效果图展示 当在表格中点击编辑按钮时:点击的行变成文本框且数据回显可以点击确定按钮修改数据或者取消修改回退数据: 具体实现步骤 1. 行数据定义编辑标记 行数据定义编辑标记 当在组件中获取到用于表格展示数据的方法中,针对每一行数据添加一个编辑标记 this.list.f…

docker简单私有仓库的创建

1&#xff1a;下载Registry镜像 导入镜像到本地中 [rootlocalhost ~]# docker load -i registry.tag.gz 进行检查 2&#xff1a;开启Registry registry开启的端口号为5000 [rootlocalhost ~]# docker run -d -p 5000:5000 --restartalways registry [rootlocalhost ~]# dock…

使用 GD32F470ZGT6,手写 I2C 的实现

我的代码&#xff1a;https://gitee.com/a1422749310/gd32_-official_-code I2C 具体代码位置&#xff1a;https://gitee.com/a1422749310/gd32_-official_-code/blob/master/Hardware/i2c/i2c.c 黑马 - I2C原理 官方 - IIC 协议介绍 个人学习过程中的理解&#xff0c;有错误&…

VSCode,Anaconda,JupyterNotebook

文章目录 一. 下载VSCode并安装二. 下载Anaconda并安装1. anaconda介绍2. Anaconda的包管理功能3. Anaconda的虚拟环境管理4.Jupyter Notebook5. Jupyter Notebook使用简介6. Jupyter Notebook快捷键7.Jupyter notebook的功能扩展8. Jupyter notebook和Jupyter lab的区别 三. V…

【安全研究】某黑产网站后台滲透与逆向分析

文章目录 x01. 前言x02. 分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与…

力扣 343. 整数拆分 (JAVA 记忆化搜索->动态规划)

给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出: 36 解释: 10 3 …

一次tomcat实战jvm线上问题定位排查和解决

问题分析&#xff1a; 问题来源是客户通过闲鱼找到了我这边进行问题的排查&#xff0c;给我发了一个报错日志&#xff0c;让我帮忙分析。 首先他的项目比较老&#xff0c;很多年以前开发的软件&#xff0c;但是具体做什么业务我不知道。下面来看日志的报错分析。 问题&#…