转储单(两行变一行)处理

这是一个SAP ABAP程序,用于处理单据(如移动类型351和352)的数据,将多行数据合并成一行显示。程序包括获取数据、处理数据和显示ALV网格的步骤。数据涉及物料凭证、日期、数量、物料描述、仓库代码等关键字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

*&---------------------------------------------------------------------*
*& Report ZMMF002
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmf007a.


INCLUDE ZMMF007A_TOP.

INCLUDE ZMMF007A_SCR.

INCLUDE ZMMF007A_FRM.

*4900001808

START-OF-SELECTION .


  PERFORM  frm_get_data.


  PERFORM  frm_process_data.


  PERFORM  frm_display_alv .

 

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& 包含               ZMMF002_TOP
*&---------------------------------------------------------------------*

TABLES : rkpf ,resb ,mkpf ,mseg .





DATA: BEGIN OF gs_out ,

        bwart    LIKE mseg-bwart , " 移动类型
        mblnr    LIKE mseg-mblnr,
        zeile    LIKE mseg-zeile,
        budat    LIKE mkpf-budat  , "日期
        matnr    LIKE  resb-matnr ,  "物料编码
        maktx    TYPE  makt-maktx  , " 物料描述
        meins    LIKE resb-meins , " 单位
        menge    LIKE mseg-menge ,  "需求数量
        werks    LIKE mseg-werks,
        lgort    LIKE resb-lgort ,  "调出仓库代码
        lgobe    LIKE t001l-lgobe ,  "调出仓库名称
        werks2   LIKE mseg-werks,
        lgort2   LIKE mseg-lgort , "调入仓库代码
        lgobe2   LIKE t001l-lgobe ,  "调入仓库名称
        name1    LIKE t001w-name1,  "调出工厂名称
        name2    LIKE t001w-name1 ,  "调出工厂名称
        mark ,
        remark   TYPE c LENGTH 50,
        ebeln    LIKE mseg-ebeln,
        ebelp    LIKE mseg-ebelp,
        zprt_cnt LIKE  zmmt001q-zprt_cnt , " 打印次数
      END OF gs_out .

DATA: gt_out LIKE TABLE OF gs_out .



DATA: BEGIN OF gs_rkpf ,

        bwart LIKE rkpf-bwart , " 移动类型
        " 移动类型文本
        " 领料部门
        rsnum LIKE rkpf-rsnum , "预留单号
      END OF gs_rkpf .

DATA: gt_rkpf LIKE TABLE OF gs_rkpf .


DATA: BEGIN OF gs_resb ,
        bwart LIKE resb-bwart , "移动类型
        rsnum LIKE resb-rsnum , "预留单号
        rspos LIKE resb-rspos , "项号
        bdter LIKE resb-bdter  , "日期
        matnr LIKE resb-matnr ,  "物料编码
        charg LIKE resb-charg  , "评估类别
        meins LIKE resb-meins , " 单位
        bdmng LIKE resb-bdmng ,  "需求数量
        lgort LIKE resb-lgort ,  "调出仓库代码
        umlgo LIKE resb-umlgo , "调入仓库代码
        sgtxt LIKE resb-sgtxt , "项目文本
      END OF gs_resb .

DATA: gt_resb LIKE TABLE OF gs_resb .

DATA: BEGIN OF gs_makt ,
        matnr LIKE makt-matnr,
        maktx LIKE makt-maktx,
      END OF gs_makt .

DATA: gt_makt LIKE TABLE OF gs_makt .


DATA: BEGIN OF gs_marc ,
        werks LIKE marc-werks,
        matnr LIKE marc-matnr,
        lgpro LIKE marc-lgpro , " 生产仓储地点
        lgfsb LIKE marc-lgfsb , "  采购仓储地点
      END OF gs_marc .

DATA: gt_marc LIKE TABLE OF gs_marc .

DATA: BEGIN OF gs_t001l ,
        werks LIKE t001l-werks,
        lgort LIKE t001l-lgort ,  "仓库代码
        lgobe LIKE t001l-lgobe ,  "仓库名称
      END OF gs_t001l .

DATA: gt_t001l LIKE TABLE OF gs_t001l.

DATA: BEGIN OF gs_t001w,
        werks LIKE t001w-werks,
        name1 LIKE t001w-name1,
      END OF gs_t001w.

DATA: gt_t001w LIKE TABLE OF gs_t001w.




DATA: BEGIN OF gs_stxl,
        tdobject LIKE stxl-tdobject , " 文本对象  EKPO
        tdname   LIKE  stxl-tdname, "文本名 编号加5位序号 430000000500010
        tdid     LIKE stxl-tdid,
        clustd   LIKE stxl-clustd , "项目文本数据
      END OF gs_stxl .


DATA: BEGIN OF gs_mseg ,
        bwart     LIKE mseg-bwart,  "移动类型
        mblnr     LIKE mseg-mblnr,  " 凭证号
        budat     LIKE mkpf-budat,   "日期
        ebeln     LIKE mseg-ebeln,  "采购订单号
        ebelp     LIKE mseg-ebelp,  "采购订单行项目
        zeile     LIKE mseg-zeile , "行项目
        werks     LIKE mseg-werks,
        lgort     LIKE mseg-lgort,
        matnr     LIKE mseg-matnr,
        menge     LIKE mseg-menge,
        shkzg     LIKE mseg-shkzg,  "借贷项
        line_id   LIKE mseg-line_id,
        parent_id LIKE mseg-parent_id,

      END OF gs_mseg .
DATA: gt_mseg LIKE TABLE OF gs_mseg .

DATA: BEGIN OF gs_mbmps,
        smbln LIKE m_mbmps-smbln,
        smblp LIKE m_mbmps-smblp,
        mblnr LIKE m_mbmps-mblnr,
        zeile LIKE m_mbmps-zeile,
      END OF gs_mbmps.

DATA : gt_mbmps LIKE TABLE OF gs_mbmps .



" 获取打印次数
DATA: gs_zmmt001q LIKE zmmt001q .
DATA: gt_zmmt001q LIKE TABLE OF gs_zmmt001q .



DATA: gt_fieldcat TYPE TABLE OF  slis_fieldcat_alv.
DATA: gs_fieldcat TYPE slis_fieldcat_alv.
DATA: gs_layout TYPE sli

<think>好的,我现在需要帮助用户解决如何在WinDbg中打开一个2GB的RAW内存转储文件的问题。首先,用户之前已经询问过如何下载安装WinDbg,现在他们进一步想知道如何使用该工具打开特定类型的文件。这说明用户可能正在处理系统崩溃或内存分析的任务,比如分析蓝屏转储文件或者物理内存镜像。 接下来,我需要确认用户提到的“内存转储raw文件”具体指什么。通常,内存转储文件可以是Windows生成的完整内存转储、内核转储或小内存转储,但RAW格式通常指的是未经处理的二进制内存镜像,可能来自虚拟机(如VMware的.vmem)或物理内存获取工具(如DumpIt)。这种情况下,WinDbg需要正确的符架构来解析这些文件。 用户的问题可能涉及到以下步骤:在WinDbg中打开文件,设置符路径,选择合适的处理器架构,以及基本的分析命令。我需要确保步骤清晰,特别是处理大文件时可能遇到的常见问题,比如符加载缓慢或路径设置错误。 首先,我需要确定用户使用的是哪个版本的WinDbg。如果是WinDbg Preview,界面可能更友好,但基本步骤与传统WinDbg相似。不过,用户可能在旧版系统上使用传统版本,需要涵盖两种可能性。 其次,打开RAW文件需要指定正确的文件类型。WinDbg默认可能不会自动识别RAW格式,因此用户可能需要通过命令行参数或启动后的文件打开对话框选择所有文件类型,然后指定正确的起始地址。例如,物理内存转储的起始地址通常是0x00000000,但可能因情况而异,需要用户根据实际情况调整。 另外,符路径的设置至关重要,否则WinDbg无法正确解析系统结构。用户可能需要知道如何设置符服务器以及如何重新加载符。此外,处理器架构(如x64或x86)必须与转储文件匹配,否则调试命令可能无法正确工作。 可能的错误点包括符路径配置错误、架构选择错误、起始地址不正确等。我需要提醒用户注意这些方面,并提供验证步骤,比如使用!analyze -v命令来检查转储文件是否被正确加载。 此外,用户处理的是2GB的大文件,可能需要较长的加载时间足够的内存。需要建议用户确保系统资源充足,并耐心等待加载完成。如果文件路径包含中文或特殊字符,也可能导致问题,所以建议使用简路径。 最后,需要提供一些常用的分析命令,帮助用户开始基础分析,比如查看进程、内存池标签等,这样用户可以在打开文件后立即进行有用的操作,验证是否成功。</think>以下是使用 **WinDbg** 打开 **2GB 的 RAW 内存转储文件**的详细步骤(适用于物理内存分析或内核调试场景): --- ### **1. 准备工作** - **RAW 文件说明**: - RAW 格式是未经封装的二进制内存镜像(例如:从虚拟机导出的 `.vmem` 或物理内存获取工具生成的 `.raw` 文件)。 - 需确认文件来源(如虚拟机快照、物理机内存捕获工具)。 - **WinDbg 版本**: - 推荐使用 **WinDbg Preview**(新版图形界面更友好)或传统 **WinDbg**。 --- ### **2. 打开 RAW 文件的步骤** #### **方法1:通过图形界面打开** 1. **启动 WinDbg**: - 以管理员身份运行 `WinDbg Preview` 或 `WinDbg.exe`。 2. **选择文件类型**: - 点击菜栏 `File > Open Crash Dump`(或直接按 `Ctrl + D`)。 - 在文件对话框中,将文件类型改为 **`All Files (*.*)`**。 - 找到并选中你的 `.raw` 文件(如 `memory.raw`)。 3. **指定内存起始地址**(关键步骤): - WinDbg 会弹出对话框提示 **`Specify Base Address`**。 - 输入物理内存的起始地址(通常为 `0x00000000`),点击 **OK**。 > 注意:如果 RAW 文件仅包含部分内存片段,需根据实际捕获时的基地址填写。 4. **等待加载**: - 对于 2GB 大文件,加载可能需要几分钟(取决于硬盘速度)。 #### **方法2:通过命令行直接打开** 1. 启动命令行(管理员权限)。 2. 输入命令: ```bash windbg.exe -y "符路径" -k phys:start=0x0,File=路径\memory.raw ``` - 示例: ```bash windbg.exe -y "srv*C:\Symbols*https://msdl.microsoft.com/download/symbols" -k phys:File=D:\dumps\memory.raw,start=0x0 ``` - 参数说明: - `-y`:设置符路径(必需,否则无法解析内核结构)。 - `-k phys`:指定物理内存转储模式。 - `start=0x0`:物理内存基地址(默认从 0 开始)。 --- ### **3. 配置调试环境** #### **(1)设置符路径** - **命令方式**: ```bash .sympath srv*https://msdl.microsoft.com/download/symbols # 微软公共符服务器 .sympath+ C:\MySymbols # 添加本地自定义符路径 .reload /f # 强制重新加载符 ``` - **图形界面**: - 菜栏 `File > Symbol File Path` 输入符路径。 #### **(2)验证文件加载** - 输入命令检查内存范围: ```bash !address -summary # 查看内存摘要 !vm # 显示虚拟内存信息(验证是否识别到完整内存) ``` --- ### **4. 常见问题与解决** #### **问题1:WinDbg 无法识别 RAW 文件** - **原因**:文件头缺失或格式不兼容。 - **解决**: - 确保文件未损坏(可通过 `HxD` 等工具检查二进制内容)。 - 尝试使用 `-k phys:File=...,start=...` 命令行参数强制指定。 #### **问题2:符加载失败** - **现象**:命令输出显示 `Unable to load image` 或 `Invalid structure`。 - **解决**: 1. 确认符路径包含微软公共符服务器。 2. 检查 WinDbg 架构是否匹配转储文件(例如:x64 转储需用 x64 WinDbg)。 #### **问题3:分析命令无响应** - **原因**:大文件加载时占用资源过高。 - **解决**: - 关闭其他程序,确保内存充足。 - 使用轻量命令逐步分析(如先运行 `!analyze -v`)。 --- ### **5. 基础分析示例** ```bash !analyze -v # 自动分析转储文件(如果有崩溃上下文) !process 0 0 # 列出所有进程 dt nt!_EPROCESS # 查看进程结构体 !poolused # 统计内存池使用情况(适用于PoolTag分析) ``` --- ### **总结** - RAW 内存转储需明确 **物理基地址**(通常为 `0x0`)。 - **符路径**是解析内核数据的关键,必须正确配置。 - 大文件加载时需耐心等待,避免强制中断。 - 若需深入分析内存内容(如特定进程的物理地址),可结合 `!vtop`(虚拟转物理地址)等命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT养家和SAP养家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值