ZPO006采购单收货报表

最近来了新的需求就是依据PO日期查询到采购单收货但未开发票的报表,当然这一部分还是运用ALV来实现是比较实在。先来看看界面吧.

执行后的结果是:

代码包括三还包括三部分:INCLUDE ZPO006F00.    "构建ALV

INCLUDE ZPO006F01.    "取得数据

INCLUDE ZCOMMON.       "通用模组 

其中通用模组上次有讲到过,就是一些平常用的比较多的程式集合。有不了解的童鞋可以参考我的另一篇博文:ZCOMMON通用模组http://blog.youkuaiyun.com/jiali765/article/details/7285667

 

现在来上code,先看入口ZPO006

 

  1. *&---------------------------------------------------------------------*  
  2. *& Report  ZPO006  
  3. *&---------------------------------------------------------------------*  
  4. * Author : Jasson.Lee  
  5. * Date   : 2011/10/06  
  6. * Purpose: 采购单收货但未开发票一览表(含根本未收货的采购信息)  
  7. *已开票的数量与采购单中的数量做比较,如果相同则说明已完全开完发票  
  8. * Change History :  
  9. *    Date       Author        Descriptions  
  10. * ========== ================ ==========================================  
  11.   
  12. *-----------------------------------------------------------------------  
  13. REPORT  ZPO006.  
  14.   
  15. TABLES: EKKO, EKPO, EKBE, EKET, T023T.  
  16. *--------------------------------  
  17. * Global Types  
  18. * Essential Declaration for ALV Display  
  19. *--------------------------------  
  20. INCLUDE ZPO006TOP.  
  21.   
  22. *--------------------------------  
  23. * Selection Screen  
  24. *--------------------------------  
  25. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.  
  26.   SELECT-OPTIONS:  
  27.     S_PODATE FOR EKKO-BEDAT.        "PO日期选择  
  28. SELECTION-SCREEN END OF BLOCK B1.  
  29.   
  30. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.  
  31. PARAMETERS:  
  32.     D1 RADIOBUTTON GROUP GRP DEFAULT 'X',    "收完货  
  33.     D2 RADIOBUTTON GROUP GRP,                "收完货未开票  
  34.     D3 RADIOBUTTON GROUP GRP.                "收完货已开票  
  35. SELECTION-SCREEN END OF BLOCK B2.  
  36.   
  37. INCLUDE ZPO006F00.    "构建ALV  
  38. INCLUDE ZPO006F01.    "取得数据  
  39. INCLUDE ZCOMMON.  
  40.   
  41. INITIALIZATION.  
  42.   
  43. AT SELECTION-SCREEN OUTPUT.  
  44.   
  45. *--------------------------------  
  46. * Start of Selection  
  47. *--------------------------------  
  48. START-OF-SELECTION.  
  49. *  PerForm CheckData.  
  50.   PerForm GetData.  
  51.   PERFORM EVENTS_BUILD.  
  52.   PerForm Layout_Build.  
  53.   PerForm Fields_Build.  
  54.   PerForm Display_Data.  
  55. END-OF-SELECTION.  
  56.   
  57. *--------------------------------  
  58. * Top of Page  
  59. *--------------------------------  
  60. TOP-OF-PAGE.  
  61. *--------------------------------  
  62. * At User Command  
  63. *--------------------------------  
  64. AT USER-COMMAND.  
  65. *--------------------------------  
  66. * At Line Selection  
  67. *--------------------------------  
  68. AT LINE-SELECTION.  
*&---------------------------------------------------------------------*
*& Report  ZPO006
*&---------------------------------------------------------------------*
* Author : Jasson.Lee
* Date   : 2011/10/06
* Purpose: 采购单收货但未开发票一览表(含根本未收货的采购信息)
*已开票的数量与采购单中的数量做比较,如果相同则说明已完全开完发票
* Change History :
*    Date       Author        Descriptions
* ========== ================ ==========================================

*-----------------------------------------------------------------------
REPORT  ZPO006.

TABLES: EKKO, EKPO, EKBE, EKET, T023T.
*--------------------------------
* Global Types
* Essential Declaration for ALV Display
*--------------------------------
INCLUDE ZPO006TOP.

*--------------------------------
* Selection Screen
*--------------------------------
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS:
    S_PODATE FOR EKKO-BEDAT.        "PO日期选择
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
    D1 RADIOBUTTON GROUP GRP DEFAULT 'X',    "收完货
    D2 RADIOBUTTON GROUP GRP,                "收完货未开票
    D3 RADIOBUTTON GROUP GRP.                "收完货已开票
SELECTION-SCREEN END OF BLOCK B2.

INCLUDE ZPO006F00.    "构建ALV
INCLUDE ZPO006F01.    "取得数据
INCLUDE ZCOMMON.

INITIALIZATION.

AT SELECTION-SCREEN OUTPUT.

*--------------------------------
* Start of Selection
*--------------------------------
START-OF-SELECTION.
*  PerForm CheckData.
  PerForm GetData.
  PERFORM EVENTS_BUILD.
  PerForm Layout_Build.
  PerForm Fields_Build.
  PerForm Display_Data.
END-OF-SELECTION.

*--------------------------------
* Top of Page
*--------------------------------
TOP-OF-PAGE.
*--------------------------------
* At User Command
*--------------------------------
AT USER-COMMAND.
*--------------------------------
* At Line Selection
*--------------------------------
AT LINE-SELECTION.


    再来看包含的 INCLUDE ZPO006F00.    "构建ALV

  1. *&---------------------------------------------------------------------*  
  2. *&  Include           ZMM070F00  
  3. *&---------------------------------------------------------------------*  
  4. *--------------------------------  
  5. * Layout_Build  
  6. *--------------------------------  
  7. FORM LAYOUT_BUILD.  
  8.   W_REPID = SY-REPID.          "程序为当前程序  
  9.   I_LAYOUT-INFO_FIELDNAME       = 'COLOR'.  "颜色值  
  10.   I_LAYOUT-COLWIDTH_OPTIMIZE    = 'X'.      "优化列宽选项是否设置  
  11.   I_LAYOUT-DETAIL_INITIAL_LINES = 'X'.  
  12.   I_LAYOUT-DETAIL_TITLEBAR      = ''.  "设置弹出窗口的标题栏  
  13. ENDFORM.                    "layout_build  
  14.   
  15. *--------------------------------  
  16. * Fields_Build  
  17. *--------------------------------  
  18. Form Fields_Build.  
  19.   
  20.   Data: Tmp_pos TYPE I.  
  21.   Refresh I_FIELDCAT_ALV.  
  22.   Clear I_FIELDCAT.  
  23.   
  24. *  定义宏设置FieldCat属性  
  25.   Define FieldCatSet.  
  26.     I_FIELDCAT-COL_POS = &1.  
  27.     I_FIELDCAT-FIELDNAME = &2.  
  28.     I_FIELDCAT-SELTEXT_L = &3.  
  29.     I_FIELDCAT-NO_OUT = &4.  
  30.     APPEND I_FIELDCAT To I_FIELDCAT_ALV.  
  31.     Clear I_FIELDCAT.  
  32.   End-Of-Definition.  
  33.   
  34.   Tmp_pos = Tmp_pos + 1.  
  35.   FieldCatSet Tmp_pos 'EBELN' 'PO' ' '.  
  36.   
  37.   Tmp_pos = Tmp_pos + 1.  
  38.   FieldCatSet Tmp_pos 'EBELP' 'PO_Item' ' '.  
  39.   
  40.   Tmp_pos = Tmp_pos + 1.  
  41.   FieldCatSet Tmp_pos 'MATKL' '物料组' ' '.  
  42.   
  43.   Tmp_pos = Tmp_pos + 1.  
  44.   FieldCatSet Tmp_pos 'WGBEZ' '物料组描述' ' '.  
  45.   
  46.   Tmp_pos = Tmp_pos + 1.  
  47.   FieldCatSet Tmp_pos 'AEDAT' '创建日期' ' '.  
  48.   
  49.   Tmp_pos = Tmp_pos + 1.  
  50.   FieldCatSet Tmp_pos 'EINDT' '计划交货日期' ' '.  
  51.   
  52.   Tmp_pos = Tmp_pos + 1.  
  53.   FieldCatSet Tmp_pos 'PQTY' '采购单数量' ' '.  
  54.   
  55.   Tmp_pos = Tmp_pos + 1.  
  56.   FieldCatSet Tmp_pos 'PNETWR' '订单净值' ' '.  
  57.   
  58.   Tmp_pos = Tmp_pos + 1.  
  59.   FieldCatSet Tmp_pos 'WAERS' '货币码' ' '.  
  60.   
  61.   Tmp_pos = Tmp_pos + 1.  
  62.   FieldCatSet Tmp_pos 'RATE' '汇率' ' '.  
  63.   
  64.   Tmp_pos = Tmp_pos + 1.  
  65.   FieldCatSet Tmp_pos 'MQTY' '收货数量' ' '.  
  66.   
  67.   Tmp_pos = Tmp_pos + 1.  
  68.   FieldCatSet Tmp_pos 'IPOQTY' '发票(订单单位)数量' ' '.  
  69.   
  70.   Tmp_pos = Tmp_pos + 1.  
  71.   FieldCatSet Tmp_pos 'IQTY' '发票(订单价格单位)数量' 'X'.  
  72.   
  73.   Tmp_pos = Tmp_pos + 1.  
  74.   FieldCatSet Tmp_pos 'INETWR' '发票金额' ' '.  
  75.   
  76.   Tmp_pos = Tmp_pos + 1.  
  77.   FieldCatSet Tmp_pos 'ZUOM' '采购单计量单位' ' '.  
  78.   
  79. Endform.                    "Fields_Build  
  80.   
  81. *&---------------------------------------------------------------------*  
  82. *&      Form  layout_sort_build  
  83. *&---------------------------------------------------------------------*  
  84. FORM LAYOUT_SORT_BUILD CHANGING LT_SORT TYPE SLIS_T_SORTINFO_ALV.  
  85.   
  86.   DATA LS_SORT TYPE SLIS_SORTINFO_ALV.  
  87.   CLEAR LS_SORT.  
  88.   LS_SORT-FIELDNAME = 'EBELN'.  
  89.   LS_SORT-SPOS      = 1.  
  90.   LS_SORT-UP        = 'X'.  
  91.   LS_SORT-SUBTOT    = 'X'.  
  92.   APPEND LS_SORT TO LT_SORT.  
  93.   
  94. ENDFORM.                    "Layout_sort_build  
  95.   
  96. *--------------------------------  
  97. * DISPLAY_DATA  
  98. *--------------------------------  
  99. FORM DISPLAY_DATA.  
  100.   
  101.   DESCRIBE TABLE T_PONOInvoice LINES RCOUNT.  
  102.   SCOUNT = RCOUNT.  
  103.   CONCATENATE '符合条件的记录数:' SCOUNT INTO LSTR.  
  104.   
  105.   PERFORM LAYOUT_SORT_BUILD CHANGING IT_SORT.  
  106.   
  107.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'  
  108.    EXPORTING  
  109.      I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'           "用户触发事件  
  110.      I_CALLBACK_PROGRAM                = W_REPID                  "当前程序  
  111.      IS_LAYOUT                         = I_LAYOUT                 "子函数Layout_build填充的格式定义  
  112.      IT_FIELDCAT                       = I_FIELDCAT_ALV[]         "子函数Fields填充的各列  
  113.      IT_EVENTS                         = I_EVENTS[]  
  114.      I_SAVE                            = 'A'                      "保存变式  
  115.      IT_SORT                           = IT_SORT[]  
  116.     TABLES  
  117.        T_OUTTAB  = T_PONOInvoice.  
  118.   
  119. ENDFORM.  
  120. *---------------------------------------------------------------------*  
  121. *       FORM user_command                                             *  
  122. *---------------------------------------------------------------------*  
  123. FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM  
  124.                            SELFIELD TYPE SLIS_SELFIELD.  
  125.  CASE I_UCOMM.  
  126.   WHEN '&IC1'.  
  127.     READ TABLE T_PONOInvoice INDEX SELFIELD-TABINDEX.  
  128.     IF Sy-Subrc <> 0.  
  129.       LEAVE LIST-PROCESSING.  
  130.     ENDIF.  
  131.   
  132.     SET PARAMETER ID 'BES' FIELD T_PONOInvoice-EBELN.  
  133.     CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.  
  134.   
  135.  ENDCASE.  
  136.   
  137. ENDFORM.                    "user_command  
  138.   
  139.   
  140. *&---------------------------------------------------------------------*  
  141. *&      Form  EVENTS_BUILD  
  142. *&---------------------------------------------------------------------*  
  143. FORM EVENTS_BUILD.  
  144.   
  145.   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'  
  146.     EXPORTING  
  147.       I_LIST_TYPE = 0  
  148.     IMPORTING  
  149.       ET_EVENTS   = I_EVENTS.  
  150.   
  151.   READ TABLE I_EVENTS  WITH KEY NAME = 'END_OF_LIST' INTO W_EVENTS.  
  152.   IF SY-SUBRC = 0.  
  153.     MOVE 'ALV_END_OF_LIST' TO W_EVENTS-FORM.  
  154.     MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.  
  155.   ENDIF.  
  156.   
  157. *  READ TABLE I_EVENTS WITH KEY NAME = 'USER_COMMAND' INTO W_EVENTS.  
  158. *  IF SY-SUBRC = 0.  
  159. *    MOVE 'USER_COMMAND' TO W_EVENTS-FORM.  
  160. *    MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.  
  161. *  ENDIF.  
  162.   
  163. ENDFORM.                    "events_build  
  164.   
  165. *&--------------------------------------------------------------------*  
  166. *&      Form  ALV_END_OF_LIST  
  167. *&--------------------------------------------------------------------*  
  168. FORM ALV_END_OF_LIST.  
  169.   CLEAR: I_LIST_COMMENTS.  
  170.   W_LIST_COMMENTS-TYP = 'H'.  
  171.   W_LIST_COMMENTS-KEY = ''.  
  172.   W_LIST_COMMENTS-INFO = LSTR.  
  173.   APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.  
  174.   
  175.   CLEAR W_LIST_COMMENTS.  
  176.   W_LIST_COMMENTS-TYP = 'S'.  
  177.   W_LIST_COMMENTS-INFO = '报表开发者:IT部     开发日期:2011/10/07'.  
  178.   APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.  
  179.   CLEAR W_LIST_COMMENTS.  
  180.   
  181.   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  
  182.     EXPORTING  
  183.       IT_LIST_COMMENTARY = I_LIST_COMMENTS  
  184.       I_END_OF_LIST_GRID = 'X'.  
  185. ENDFORM.                    "ALV_END_OF_LIST  
*&---------------------------------------------------------------------*
*&  Include           ZMM070F00
*&---------------------------------------------------------------------*
*--------------------------------
* Layout_Build
*--------------------------------
FORM LAYOUT_BUILD.
  W_REPID = SY-REPID.          "程序为当前程序
  I_LAYOUT-INFO_FIELDNAME       = 'COLOR'.  "颜色值
  I_LAYOUT-COLWIDTH_OPTIMIZE    = 'X'.      "优化列宽选项是否设置
  I_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
  I_LAYOUT-DETAIL_TITLEBAR      = ''.  "设置弹出窗口的标题栏
ENDFORM.                    "layout_build

*--------------------------------
* Fields_Build
*--------------------------------
Form Fields_Build.

  Data: Tmp_pos TYPE I.
  Refresh I_FIELDCAT_ALV.
  Clear I_FIELDCAT.

*  定义宏设置FieldCat属性
  Define FieldCatSet.
    I_FIELDCAT-COL_POS = &1.
    I_FIELDCAT-FIELDNAME = &2.
    I_FIELDCAT-SELTEXT_L = &3.
    I_FIELDCAT-NO_OUT = &4.
    APPEND I_FIELDCAT To I_FIELDCAT_ALV.
    Clear I_FIELDCAT.
  End-Of-Definition.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'EBELN' 'PO' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'EBELP' 'PO_Item' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'MATKL' '物料组' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'WGBEZ' '物料组描述' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'AEDAT' '创建日期' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'EINDT' '计划交货日期' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'PQTY' '采购单数量' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'PNETWR' '订单净值' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'WAERS' '货币码' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'RATE' '汇率' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'MQTY' '收货数量' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'IPOQTY' '发票(订单单位)数量' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'IQTY' '发票(订单价格单位)数量' 'X'.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'INETWR' '发票金额' ' '.

  Tmp_pos = Tmp_pos + 1.
  FieldCatSet Tmp_pos 'ZUOM' '采购单计量单位' ' '.

Endform.                    "Fields_Build

*&---------------------------------------------------------------------*
*&      Form  layout_sort_build
*&---------------------------------------------------------------------*
FORM LAYOUT_SORT_BUILD CHANGING LT_SORT TYPE SLIS_T_SORTINFO_ALV.

  DATA LS_SORT TYPE SLIS_SORTINFO_ALV.
  CLEAR LS_SORT.
  LS_SORT-FIELDNAME = 'EBELN'.
  LS_SORT-SPOS      = 1.
  LS_SORT-UP        = 'X'.
  LS_SORT-SUBTOT    = 'X'.
  APPEND LS_SORT TO LT_SORT.

ENDFORM.                    "Layout_sort_build

*--------------------------------
* DISPLAY_DATA
*--------------------------------
FORM DISPLAY_DATA.

  DESCRIBE TABLE T_PONOInvoice LINES RCOUNT.
  SCOUNT = RCOUNT.
  CONCATENATE '符合条件的记录数:' SCOUNT INTO LSTR.

  PERFORM LAYOUT_SORT_BUILD CHANGING IT_SORT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'           "用户触发事件
     I_CALLBACK_PROGRAM                = W_REPID                  "当前程序
     IS_LAYOUT                         = I_LAYOUT                 "子函数Layout_build填充的格式定义
     IT_FIELDCAT                       = I_FIELDCAT_ALV[]         "子函数Fields填充的各列
     IT_EVENTS                         = I_EVENTS[]
     I_SAVE                            = 'A'                      "保存变式
     IT_SORT                           = IT_SORT[]
    TABLES
       T_OUTTAB  = T_PONOInvoice.

ENDFORM.
*---------------------------------------------------------------------*
*       FORM user_command                                             *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                           SELFIELD TYPE SLIS_SELFIELD.
 CASE I_UCOMM.
  WHEN '&IC1'.
    READ TABLE T_PONOInvoice INDEX SELFIELD-TABINDEX.
    IF Sy-Subrc <> 0.
      LEAVE LIST-PROCESSING.
    ENDIF.

    SET PARAMETER ID 'BES' FIELD T_PONOInvoice-EBELN.
    CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.

 ENDCASE.

ENDFORM.                    "user_command


*&---------------------------------------------------------------------*
*&      Form  EVENTS_BUILD
*&---------------------------------------------------------------------*
FORM EVENTS_BUILD.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE = 0
    IMPORTING
      ET_EVENTS   = I_EVENTS.

  READ TABLE I_EVENTS  WITH KEY NAME = 'END_OF_LIST' INTO W_EVENTS.
  IF SY-SUBRC = 0.
    MOVE 'ALV_END_OF_LIST' TO W_EVENTS-FORM.
    MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
  ENDIF.

*  READ TABLE I_EVENTS WITH KEY NAME = 'USER_COMMAND' INTO W_EVENTS.
*  IF SY-SUBRC = 0.
*    MOVE 'USER_COMMAND' TO W_EVENTS-FORM.
*    MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
*  ENDIF.

ENDFORM.                    "events_build

*&--------------------------------------------------------------------*
*&      Form  ALV_END_OF_LIST
*&--------------------------------------------------------------------*
FORM ALV_END_OF_LIST.
  CLEAR: I_LIST_COMMENTS.
  W_LIST_COMMENTS-TYP = 'H'.
  W_LIST_COMMENTS-KEY = ''.
  W_LIST_COMMENTS-INFO = LSTR.
  APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

  CLEAR W_LIST_COMMENTS.
  W_LIST_COMMENTS-TYP = 'S'.
  W_LIST_COMMENTS-INFO = '报表开发者:IT部     开发日期:2011/10/07'.
  APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.
  CLEAR W_LIST_COMMENTS.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = I_LIST_COMMENTS
      I_END_OF_LIST_GRID = 'X'.
ENDFORM.                    "ALV_END_OF_LIST


   最后就是看包含的 INCLUDE ZPO006F01.    "取得数据

  1. *&---------------------------------------------------------------------*  
  2. *&  Include           ZPO006F01  
  3. *&---------------------------------------------------------------------*  
  4. *--------------------------------  
  5. * CheckData  
  6. *--------------------------------  
  7. FORM CheckData.  
  8.   IF S_PODATE[] IS INITIAL.  
  9.     MESSAGE I000(ZMSG) WITH '起止日期至少要输入一项'.  
  10.     LEAVE LIST-PROCESSING.  
  11.   ENDIF.  
  12. ENDFORM.  
  13.   
  14. *--------------------------------  
  15. * GetData  
  16. *--------------------------------  
  17. Form GetData.  
  18.   
  19.   S_DATE = S_PODATE-LOW.  
  20.   E_DATE = S_PODATE-HIGH.  
  21.   
  22.   IF S_PODATE-LOW IS INITIAL.  
  23.     S_DATE = '00000000'.  
  24.   ENDIF.  
  25.   
  26.   IF S_PODATE-HIGH IS INITIAL.  
  27.     E_DATE = '99991231'.  
  28.   ENDIF.  
  29.   
  30.   SELECT * FROM EKPO WHERE LOEKZ = ' ' AND EREKZ = ' ' AND ELIKZ = 'X'  
  31.     AND EBELN IN ( SELECT DISTINCT EBELN FROM EKKO WHERE BEDAT >= S_DATE And BEDAT <= E_DATE ).  
  32.   
  33. *取出已收货数量与项目计划交货日期  
  34.     ZMIGO_QTY = 0.  
  35.     SELECT SUM( WEMNG ) MIN( EINDT ) INTO (ZMIGO_QTY, ZEINDT) FROM EKET  
  36.     WHERE EBELN = EKPO-EBELN AND EBELP = EKPO-EBELP.  
  37.   
  38. *如果没有收货,不处理  
  39.     If ZMIGO_QTY = 0.  
  40.       Continue.  
  41.     EndIf.  
  42.   
  43.     SELECT SINGLE AEDAT WAERS WKURS ZBD1T ZBD2T ZBD3T  
  44.       INTO (ZCDATE,ZCURR,ZPO_RATE,ZPAY_DAY1,ZPAY_DAY2,ZPAY_DAY3)  
  45.       FROM EKKO WHERE EBELN = EKPO-EBELN.  
  46.   
  47.     SELECT SINGLE WGBEZ INTO T_PONOInvoice-WGBEZ FROM T023T     "取出物料组描述  
  48.       WHERE SPRAS = SY-LANGU AND MATKL = EKPO-MATKL.  
  49.   
  50. *从表(采购凭证历史)EKBE中,汇总该采购单价格单位的数量与凭证货币金额  
  51.     ZINVOICED_VALUE = 0.     "发票金额  
  52.     ZINVOICED_QTY = 0.       "采购订单价格单位数量  
  53.     ZINVPO_QTY = 0.          "采购订单单位数量  
  54.     RowCount = 0.            "开票  
  55.     SELECT COUNT( * )  into (RowCount) FROM EKBE  
  56.       WHERE EBELN = EKPO-EBELN AND EBELP = EKPO-EBELP AND VGABE IN ('2', '3').  
  57.   
  58. *收完货未开票情况  
  59.     IF D3 = 'X' AND RowCount = 0.  
  60.       CONTINUE.  
  61.     ENDIF.  
  62.   
  63. *收完货已开票情况  
  64.     IF D2 = 'X' AND RowCount > 0.  
  65.       CONTINUE.  
  66.     ENDIF.  
  67.   
  68.     SELECT * FROM EKBE  
  69.       WHERE EBELN = EKPO-EBELN AND EBELP = EKPO-EBELP AND VGABE IN ('2', '3').  
  70.   
  71. *"SHKZG H贷方 S借方  
  72. *"Order Unit Quantities  
  73.       IF EKBE-SHKZG = 'H'.  
  74.         EKBE-BPMNG = EKBE-BPMNG * -1.  
  75.       ENDIF.  
  76.       ZINVOICED_QTY = ZINVOICED_QTY + EKBE-BPMNG.  
  77.   
  78. *"Order Price Unit Quantities  
  79.       IF EKBE-SHKZG = 'H'.  
  80.         EKBE-MENGE = EKBE-MENGE * -1.  
  81.       ENDIF.  
  82.       ZINVPO_QTY = ZINVPO_QTY + EKBE-MENGE.  
  83.   
  84.       IF EKBE-SHKZG = 'H'.  
  85.         EKBE-WRBTR = EKBE-WRBTR * -1.  
  86.       ENDIF.  
  87.       ZINVOICED_VALUE = ZINVOICED_VALUE + EKBE-WRBTR.  
  88.   
  89.     ENDSELECT.  
  90.   
  91. **如果发票中订单数量和小于采购订单数量,则把记录填充到表INTABH中  
  92. *    IF ZINVPO_QTY < EKPO-MENGE.  
  93.       MOVE EKPO-EBELN TO T_PONOInvoice-EBELN.      "PO  
  94.       MOVE EKPO-EBELP TO T_PONOInvoice-EBELP.      "PO_ITEM  
  95.       MOVE EKPO-MATKL TO T_PONOInvoice-MATKL.      "Material Group  
  96.       MOVE EKPO-NETWR TO T_PONOInvoice-PNETWR.     "采购订单货币的订单净值  
  97.       MOVE EKPO-MENGE TO T_PONOInvoice-PQTY.       "采购订单数量  
  98.       MOVE EKPO-MEINS TO T_PONOInvoice-ZUOM.       "采购订单计量单位  
  99.       T_PONOInvoice-INETWR = ZINVOICED_VALUE.      "凭证货币金额和(发票金额)  
  100.       T_PONOInvoice-IQTY   = ZINVOICED_QTY.        "采购订单 价格单位的数量(发票数量)  
  101.       T_PONOInvoice-IPOQTY = ZINVPO_QTY.           "采购订单位数量(发票数量)  
  102.       T_PONOInvoice-MQTY   = ZMIGO_QTY.            "采购订单收货数量  
  103.       MOVE ZPO_RATE   TO T_PONOInvoice-RATE.       "汇率  
  104.       MOVE ZCURR      TO T_PONOInvoice-WAERS.      "货币码  
  105.       T_PONOInvoice-AEDAT = ZCDATE.                "记录创建日期  
  106.       T_PONOInvoice-EINDT = ZEINDT.                "项目计划交货日期  
  107.       APPEND T_PONOInvoice.  
  108. *    ENDIF.  
  109.   ENDSELECT.  
  110. EndForm.                    "GetData  
*&---------------------------------------------------------------------*
*&  Include           ZPO006F01
*&---------------------------------------------------------------------*
*--------------------------------
* CheckData
*--------------------------------
FORM CheckData.
  IF S_PODATE[] IS INITIAL.
    MESSAGE I000(ZMSG) WITH '起止日期至少要输入一项'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.

*--------------------------------
* GetData
*--------------------------------
Form GetData.

  S_DATE = S_PODATE-LOW.
  E_DATE = S_PODATE-HIGH.

  IF S_PODATE-LOW IS INITIAL.
    S_DATE = '00000000'.
  ENDIF.

  IF S_PODATE-HIGH IS INITIAL.
    E_DATE = '99991231'.
  ENDIF.

  SELECT * FROM EKPO WHERE LOEKZ = ' ' AND EREKZ = ' ' AND ELIKZ = 'X'
    AND EBELN IN ( SELECT DISTINCT EBELN FROM EKKO WHERE BEDAT >= S_DATE And BEDAT <= E_DATE ).

*取出已收货数量与项目计划交货日期
    ZMIGO_QTY = 0.
    SELECT SUM( WEMNG ) MIN( EINDT ) INTO (ZMIGO_QTY, ZEINDT) FROM EKET
    WHERE EBELN = EKPO-EBELN AND EBELP = EKPO-EBELP.

*如果没有收货,不处理
    If ZMIGO_QTY = 0.
      Continue.
    EndIf.

    SELECT SINGLE AEDAT WAERS WKURS ZBD1T ZBD2T ZBD3T
      INTO (ZCDATE,ZCURR,ZPO_RATE,ZPAY_DAY1,ZPAY_DAY2,ZPAY_DAY3)
      FROM EKKO WHERE EBELN = EKPO-EBELN.

    SELECT SINGLE WGBEZ INTO T_PONOInvoice-WGBEZ FROM T023T     "取出物料组描述
      WHERE SPRAS = SY-LANGU AND MATKL = EKPO-MATKL.

*从表(采购凭证历史)EKBE中,汇总该采购单价格单位的数量与凭证货币金额
    ZINVOICED_VALUE = 0.     "发票金额
    ZINVOICED_QTY = 0.       "采购订单价格单位数量
    ZINVPO_QTY = 0.          "采购订单单位数量
    RowCount = 0.            "开票
    SELECT COUNT( * )  into (RowCount) FROM EKBE
      WHERE EBELN = EKPO-EBELN AND EBELP = EKPO-EBELP AND VGABE IN ('2', '3').

*收完货未开票情况
    IF D3 = 'X' AND RowCount = 0.
      CONTINUE.
    ENDIF.

*收完货已开票情况
    IF D2 = 'X' AND RowCount > 0.
      CONTINUE.
    ENDIF.

    SELECT * FROM EKBE
      WHERE EBELN = EKPO-EBELN AND EBELP = EKPO-EBELP AND VGABE IN ('2', '3').

*"SHKZG H贷方 S借方
*"Order Unit Quantities
      IF EKBE-SHKZG = 'H'.
        EKBE-BPMNG = EKBE-BPMNG * -1.
      ENDIF.
      ZINVOICED_QTY = ZINVOICED_QTY + EKBE-BPMNG.

*"Order Price Unit Quantities
      IF EKBE-SHKZG = 'H'.
        EKBE-MENGE = EKBE-MENGE * -1.
      ENDIF.
      ZINVPO_QTY = ZINVPO_QTY + EKBE-MENGE.

      IF EKBE-SHKZG = 'H'.
        EKBE-WRBTR = EKBE-WRBTR * -1.
      ENDIF.
      ZINVOICED_VALUE = ZINVOICED_VALUE + EKBE-WRBTR.

    ENDSELECT.

**如果发票中订单数量和小于采购订单数量,则把记录填充到表INTABH中
*    IF ZINVPO_QTY < EKPO-MENGE.
      MOVE EKPO-EBELN TO T_PONOInvoice-EBELN.      "PO
      MOVE EKPO-EBELP TO T_PONOInvoice-EBELP.      "PO_ITEM
      MOVE EKPO-MATKL TO T_PONOInvoice-MATKL.      "Material Group
      MOVE EKPO-NETWR TO T_PONOInvoice-PNETWR.     "采购订单货币的订单净值
      MOVE EKPO-MENGE TO T_PONOInvoice-PQTY.       "采购订单数量
      MOVE EKPO-MEINS TO T_PONOInvoice-ZUOM.       "采购订单计量单位
      T_PONOInvoice-INETWR = ZINVOICED_VALUE.      "凭证货币金额和(发票金额)
      T_PONOInvoice-IQTY   = ZINVOICED_QTY.        "采购订单 价格单位的数量(发票数量)
      T_PONOInvoice-IPOQTY = ZINVPO_QTY.           "采购订单位数量(发票数量)
      T_PONOInvoice-MQTY   = ZMIGO_QTY.            "采购订单收货数量
      MOVE ZPO_RATE   TO T_PONOInvoice-RATE.       "汇率
      MOVE ZCURR      TO T_PONOInvoice-WAERS.      "货币码
      T_PONOInvoice-AEDAT = ZCDATE.                "记录创建日期
      T_PONOInvoice-EINDT = ZEINDT.                "项目计划交货日期
      APPEND T_PONOInvoice.
*    ENDIF.
  ENDSELECT.
EndForm.                    "GetData


完成了,只是做了Mark,以后参考!也给用得到的童鞋个提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值