当前位置: 首页 > 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.dtcms.com/a/299435.html

相关文章:

  • FreeRTOS-事件组
  • Cortex-M3内核SysTick定时器介绍
  • `munmap`系统调用及示例
  • 柔性智造:华控智能的垂直整合定制方案
  • 微服务springcloud http客户端feign
  • 伟淼科技李志伟:破解二代接班传承困局,系统性方案破除三代魔咒
  • Redis缓存策略以及bigkey的学习(九)
  • C语言——学习笔记
  • 数据结构(4)单链表算法题(上)
  • Linux DNS 服务器正反向解析
  • 深入分析计算机网络传输层和应用层面试题
  • 从压缩到加水印,如何实现一站式图片处理
  • 编程语言Java——核心技术篇(四)集合类详解
  • 从0开始学linux韦东山教程Linux驱动入门实验班(5)
  • C语言中:形参与实参的那些事
  • 分类预测 | MATLAB实现CPO-SVM冠豪猪算法优化支持向量机分类预测
  • 分类预测 | MATLAB实现DBO-SVM蜣螂算法优化支持向量机分类预测
  • pyskl-Windows系统使用自己的数据集训练(一)
  • 《C++ list 完全指南:从基础到高效使用》
  • 【洛谷】单向链表、队列安排、约瑟夫问题(list相关算法题)
  • 扣子(Coze)宣布开源两大核心项目——Coze Studio(扣子开发平台)和Coze Loop(扣子罗盘),附安装步骤
  • ubuntu下docker安装thingsboard物联网平台详细记录(附每张图)
  • 如何在 Ubuntu 24.04 或 22.04 中创建自定义 Bash 命令
  • 商汤InternLM发布最先进的开源多模态推理模型——Intern-S1
  • 【机器学习深度学习】LLamaFactory微调效果与vllm部署效果不一致如何解决
  • 开源智能体框架(Agent Zero)
  • VLAN的划分(基于华为eNSP)
  • Android 蓝牙学习
  • 使用Netty搭建一个网络聊天室
  • ​P1103 书本整理 - 洛谷​