当前位置: 首页 > news >正文

[SAP ABAP] ALV报表练习4

SO销售订单明细报表

业务目的:根据选择屏幕的筛选条件,使用ALV报表显示销售订单详情(Sales Order、Material、现有Qty、已开立数量以及剩余数量等)信息

效果展示

我们在'销售订单'栏位输入需要查询的SO单号,这里我们以SO单号'0000000221'为例,填写完相关信息以后,点击执行按钮

效果如下所示:

其中对应SO单号的Material剩余数量 = 现有Qty - 已开立数量 

我们使用事务码Tcode:VA03 查看SO单号(0000000221)的信息如下所示

从上面我们可以看出该SO订单对应物料TG11并未开立DN单号

完整代码如下所示

主程序(zrs0507)

*&---------------------------------------------------------------------*
*& Report  ZRS0507                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*REPORT  zrs0507.INCLUDE zrs0507_top. " 數據定義
INCLUDE zrs0507_f01. " 子例程*----------------------------------------------------------------------*
*  DESC: INITIALIZATION 事件
*----------------------------------------------------------------------*
INITIALIZATION.*----------------------------------------------------------------------*
*  DESC: AT SELECTION-SCREEN OUTPUT 事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.*----------------------------------------------------------------------*
*  DESC: AT SELECTION-SCREEN  事件
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.*----------------------------------------------------------------------*
*  DESC: START-OF-SELECTION 事件
*----------------------------------------------------------------------*
START-OF-SELECTION.PERFORM frm_get_data.  " 獲取數據" 檢查數据是否為空IF gt_item IS INITIAL.MESSAGE '不存在滿足條件的數据,請确認選擇條件' TYPE 'I'.ENDIF.*---------------------------------------------------------------------*
* END-OF-SELECTION 事件
*---------------------------------------------------------------------*
END-OF-SELECTION.PERFORM frm_display_data.  " ALV呈現數據

INCLUDE程序(zrs0507_top)  

*&---------------------------------------------------------------------*
*&  Include           ZRS0507_TOP                                      *
*&---------------------------------------------------------------------*TABLES: vbak, vbap, lips.* 定義數據類型
TYPES: BEGIN OF ty_item,sel(1),                      " 選擇標識vbeln    TYPE vbak-vbeln,    " SO單號posnr    TYPE vbap-posnr,    " 行項目matnr    TYPE vbap-matnr,    " 物料編碼kwmeng   TYPE vbap-kwmeng,   " 銷售訂單數量(SO現有數量)charg    TYPE vbap-charg,    " SO等級lfimg    TYPE lips-lfimg,    " SO已開立數量remain   TYPE kwmeng,        " 結餘數量vrkme    TYPE vbap-vrkme,    " 銷售單位END OF ty_item.TYPES: BEGIN OF ty_lips,vbeln    TYPE lips-vbeln,    " 交貨單posnr    TYPE lips-posnr,    " 交貨單行項目vgbel    TYPE lips-vgbel,    " SO單號vgpos    TYPE lips-vgpos,    " SO單號行項目lfimg    TYPE lips-lfimg,    " SO已開立數量meins    TYPE lips-meins,END OF ty_lips.DATA: gt_item TYPE STANDARD TABLE OF ty_item,  " 內表gs_item TYPE ty_item.                    " 結构体變量* ALV參數定義
DATA: gs_layout TYPE  lvc_s_layo,                  " 用于定義ALV表單的相關格式、屬性gs_fcat   TYPE  lvc_s_fcat,                  " 字段目祿工作區gt_fcat   TYPE STANDARD TABLE OF lvc_s_fcat. " 字段目錄內表* 選擇屏幕(屏幕輸入)
SELECT-OPTIONS:s_vbeln FOR vbak-vbeln OBLIGATORY.   " 銷售訂單(必輸)

INCLUDE程序(zrs0507_f01) 

*&---------------------------------------------------------------------*
*&  Include           ZRS0507_F01                                      *
*&---------------------------------------------------------------------**&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       獲取數據
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .SELECT DISTINCTvbap~vbeln                               " SO單號vbap~posnr                               " 行項目vbap~matnr                               " 物料編碼vbap~kwmeng                              " 銷售訂單數量(SO現有數量)vbap~charg                               " SO等級vbap~vrkme                               " 銷售單位FROM vbapLEFT JOIN vbepON vbap~vbeln = vbep~vbelnAND vbap~posnr = vbep~posnrINTO CORRESPONDING FIELDS OF TABLE gt_itemWHERE vbap~vbeln IN s_vbeln.IF sy-subrc = 0.PERFORM frm_edit_data.  " 編輯處理內表數據" 對so單號以及行項目進行升序排序SORT gt_item BY vbeln ASCENDING posnr ASCENDING.ENDIF.
ENDFORM.                    " FRM_GET_DATA*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*       ALV數據呈現
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display_data .PERFORM frm_alv_set_fields." 調用函數展示ALV數据CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program = sy-repidit_fieldcat_lvc    = gt_fcat                 " 設置ALV列屬性is_layout_lvc      = gs_layout               " 設置ALV布局TABLESt_outtab           = gt_item                 " 內表數据EXCEPTIONSprogram_error      = 1OTHERS             = 2.ENDFORM.                    " FRM_DISPLAY_DATA*&---------------------------------------------------------------------*
*&      Form  frm_alv_set_fields
*&---------------------------------------------------------------------*
*       ALV設置字段
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_alv_set_fields .DATA: lv_index LIKE sy-index.CLEAR: gs_fcat,gt_fcat,gs_layout.* 設置行的屬性(ALV界面格式)gs_layout-box_fname     = 'SEL'. " 選擇標識gs_layout-zebra         = 'X'.   " 斑馬條紋顯示gs_layout-cwidth_opt    = 'X'.   " 优化列寬設置* ALV字段處理宏DEFINE catalog.lv_index = lv_index + 1.gs_fcat-col_pos       = lv_index.gs_fcat-fieldname     = &1.  " 設置要輸出的表格列的值,在內表中定義的字段名(必須大寫)gs_fcat-fix_column    = &2.  " 固定列gs_fcat-ref_table     = &3.gs_fcat-edit          = &4.gs_fcat-colddictxt    = 'L'.gs_fcat-scrtext_l     = &5.  " 設置要輸出的表格列的列名,即ALV報表顯示的列名gs_fcat-ref_field     = &6.gs_fcat-outputlen     = &7.gs_fcat-emphasize     = &8.  " 列顏色gs_fcat-hotspot       = &9.  " 熱點append gs_fcat to gt_fcat.END-OF-DEFINITION.*     &1        &2        &3     &4          &5           &6      &7      &8       &9catalog:'VBELN'    'X'        ''     ''         'Sales Order' ''      ''      ''       '',    " SO單號'POSNR'    'X'        ''     ''         'Item'        ''      ''      ''       '',    " SO序號'MATNR'    'X'        ''     ''         'Material'    ''      ''      ''       '',    " 物料編碼(SO料號)'KWMENG'   ''         ''     ''         '現有Qty'     ''      ''      ''       '',    " 銷售訂單數量(SO現有數量)'CHARG'    ''         ''     ''         'Batch'       ''      ''      ''       '',    " SO等級'LFIMG'    ''         ''     ''         '已開立數量'  ''      ''      ''       '',    " SO已開立數量'REMAIN'   ''         ''     ''         '剩餘數量'    ''      ''      ''       '',    " 剩餘數量'VRKME'    ''         ''     ''         '單位'        ''      ''      ''       ''.    " 單位ENDFORM.                    " frm_alv_set_fields*&---------------------------------------------------------------------*
*&      Form  frm_edit_data
*&---------------------------------------------------------------------*
*       編輯數據
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_edit_data .DATA: lt_lips TYPE STANDARD TABLE OF ty_lips,ls_lips TYPE ty_lips.IF gt_item IS NOT INITIAL. " 當gt_item內表不為空時,執行以下邏輯處理*   獲取交貨數據SELECT DISTINCTvgbel      " SO單號vgpos      " SO單號行項目vbeln      " 交貨單posnr      " 交貨單行項目lfimg      " 實際交付數量meins      " 單位INTO CORRESPONDING FIELDS OF TABLE lt_lipsFROM lipsFOR ALL ENTRIES IN gt_itemWHERE vgbel = gt_item-vbelnAND vgpos = gt_item-posnr.IF sy-subrc = 0.ENDIF.*   處理數據DATA: lt_temp_item LIKE gt_item.LOOP AT gt_item INTO gs_item.CLEAR: gs_item-lfimg, gs_item-remain." 計算已交貨數量LOOP AT lt_lips INTO ls_lips WHERE vgbel = gs_item-vbelnAND   vgpos = gs_item-posnr.gs_item-lfimg = gs_item-lfimg + ls_lips-lfimg.ENDLOOP." 計算剩餘數量gs_item-remain = gs_item-kwmeng - gs_item-lfimg.APPEND gs_item TO lt_temp_item.ENDLOOP." 替換原表gt_item = lt_temp_item.ENDIF.
ENDFORM.                    " frm_edit_data
http://www.xdnf.cn/news/1195543.html

相关文章:

  • Matlab自学笔记六十五:解方程的数值解法(代码速成)
  • 文件IO——bmp图像处理
  • 磁悬浮轴承转子不平衡质量控制策略设计:原理、分析与智能实现
  • 基于java的在线教育平台管理系统、在线学习系统的设计与实现
  • 零基础学习性能测试第三章:jmeter性能组件应用(事件,并发,定时器)
  • 哈尔滨←→南昌的铁路要道
  • AWD的攻击和防御手段
  • idea中无法删除模块,只能remove?
  • 2025年7月26日训练日志
  • 最优估计准则与方法(4)最小二乘估计(LS)_学习笔记
  • 幸福网咖订座点餐小程序的设计与实现
  • element-plus安装以及使用
  • 《基于雅可比矢量近似的EIT触觉传感灵敏度非均匀校正》论文解读
  • 微分方程入门之入门之入门,纯笔记
  • 实现网页访问/接口调用KernelMemory
  • S7-200 SMART 数字量 I/O 组态指南:从参数设置到实战案例
  • Ubuntu系统 系统盘和数据盘扩容具体操作
  • C++类和对象(三)
  • Coze 与 Dify 深度对比:2025 年 AI 智能体平台选型指南
  • VMware Workstation17下安装Ubuntu20.04
  • JVM-GC 相关知识
  • 利用RAII与析构函数避免C++资源泄漏
  • Linux进程替换
  • Pinia快速入门
  • C++20 协程
  • 联表实现回显功能
  • 【Canvas与旗帜】条纹版大明三辰旗
  • 一文速通《多元函数微分学》
  • 从0到1学Pandas(七):Pandas 在机器学习中的应用
  • ART配对软件使用