ZSD017出货达成率

47 篇文章 0 订阅
 其实早就应该写了,但一直落下来了。现在什么都记不得了,咳。直接上代码吧。
  1. *&---------------------------------------------------------------------*  
  2. *& Report  ZSD017  
  3. *&---------------------------------------------------------------------*  
  4. * Author : Jasson.Lee  
  5. * Date   : 2011/12/28  
  6. * Purpose: 销售订单达成率,注意日期选择不同,数据算法不同  
  7. * Change History :  
  8. *    Date       Author        Descriptions  
  9. * ========== ================ ==========================================  
  10. * 2011/12/28   Jasson.Lee       Create  
  11. *-----------------------------------------------------------------------  
  12. REPORT  zsd017.  
  13.   
  14. *--------------------------------  
  15. * Global Types  
  16. * Essential Declaration for ALV Display  
  17. *--------------------------------  
  18. TYPE-POOLS: slis.  
  19. DATA  :  
  20.   i_fieldcat_alv  TYPE slis_t_fieldcat_alv ,  
  21.   i_fieldcat_alv_t TYPE slis_t_fieldcat_alv,  
  22.   i_fieldcat_alv_p TYPE slis_t_fieldcat_alv,  
  23.   i_layout        TYPE slis_layout_alv,  
  24.   i_fieldcat      TYPE slis_fieldcat_alv,  
  25.   i_events        TYPE slis_t_event,  
  26.   w_events  LIKE LINE OF i_events,  
  27.   i_list_comments TYPE slis_t_listheader,  
  28.   w_list_comments LIKE LINE OF i_list_comments,  
  29.   it_sort TYPE slis_t_sortinfo_alv,  
  30.   w_repid LIKE sy-repid.  
  31.   
  32. TABLES: vbak, vbap, vbkd, vbep, likp, lips, mara.  
  33.   
  34. *销售单信息  
  35. DATA: BEGIN OF t_vbap OCCURS 0,  
  36.           vbeln LIKE vbap-vbeln,      "ORDER NO  
  37.           posnr LIKE vbap-posnr,      "销售项目编号  
  38. END OF t_vbap.  
  39.   
  40. *SD计划行项目信息VBEP  
  41. DATA: BEGIN OF t_orderinfoAll OCCURS 0,  
  42.           vbeln LIKE vbep-vbeln,      "ORDER NO  
  43.           posnr LIKE vbep-posnr,      "销售项目编号  
  44.           etenr LIKE vbep-etenr,      "行计划  
  45.           edatu LIKE vbep-edatu,      "计划交货日期  
  46.           wmeng LIKE vbep-wmeng,      "计划交货数量  
  47.           bmeng LIKE vbep-bmeng,      "确认的数量  
  48. END OF t_orderinfoAll.  
  49.   
  50. DATA: BEGIN OF t_orderinfo OCCURS 0,  
  51.           vbeln LIKE vbak-vbeln,      "ORDER NO  
  52.           kunnr LIKE vbak-kunnr,      "售达方  
  53.           posnr LIKE vbap-posnr,      "销售项目编号  
  54.           matnr LIKE vbap-matnr,      "物料号  
  55.           vdatu LIKE vbak-vdatu,      "请求交货日  
  56.           kwmeng LIKE vbap-kwmeng,    "销售订单数量  
  57.           edatu LIKE vbep-edatu,      "计划交货日期  
  58.           wmeng LIKE vbep-wmeng,      "计划交货数量  
  59.           bmeng LIKE vbep-bmeng,      "确认的数量  
  60.           erdat LIKE lips-erdat,      "实际交货日期  
  61.           kcmeng LIKE lips-kcmeng,    "实际交货数量  
  62.           qty_p LIKE lips-kcmeng,     "计划内交货数量  
  63.           qty_n LIKE lips-kcmeng,     "未完成数量  
  64.           comple(6) TYPE C,    "达成率  
  65. END OF t_orderinfo.  
  66.   
  67.   
  68.   
  69. *交货信息表  
  70. *DATA: BEGIN OF t_lips OCCURS 0,  
  71. *          vbeln      LIKE lips-vbeln,             "交货单号  
  72. *          posnr      LIKE lips-posnr,             "项目  
  73. *          vgbel      LIKE lips-vgbel,             "销售单号  
  74. *          vgpos      LIKE lips-vgpos,             "销售单项目号  
  75. *          matnr      LIKE lips-matnr,             "物料号  
  76. *          wadat_ist  LIKE likp-wadat_ist,         "实际交货日期  
  77. *          kcmeng     LIKE lips-kcmeng,            "合计出货数  
  78. *END OF t_lips.  
  79.   
  80. DATA: str_where TYPE TABLE OF edpline.  
  81. DATA: l_loop TYPE i, l_ordrow TYPE i, l_rowcount TYPE i.  
  82.   
  83. DATA: rcount TYPE i, rowcount TYPE i.  
  84. DATA: scount(8).  
  85. DATA: lstr(20).  
  86. DATA: s_date TYPE d, e_date TYPE d.  
  87. DATA:  
  88.       ss_matnr LIKE vbap-matnr,  
  89.       ss_qty LIKE lips-kcmeng.  
  90. *--------------------------------  
  91. * Selection Screen  
  92. *--------------------------------  
  93. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.  
  94.   
  95. SELECTION-SCREEN BEGIN OF LINE.  
  96. SELECTION-SCREEN POSITION 1.  
  97. PARAMETERS:  
  98.   d1 RADIOBUTTON GROUP d DEFAULT 'X'.    "计划交货日期  
  99. SELECTION-SCREEN COMMENT 6(10) stext01 FOR FIELD d1.  
  100. SELECTION-SCREEN POSITION 18.  
  101. PARAMETERS:  
  102.  d2 RADIOBUTTON GROUP d.                 "实际交货日期  
  103. SELECTION-SCREEN COMMENT 21(10) stext02 FOR FIELD d2.  
  104. SELECTION-SCREEN END OF LINE.  
  105.   
  106. SELECT-OPTIONS:  
  107.    s_dndate FOR vbep-edatu.              "日期选择  
  108.   
  109. SELECTION-SCREEN END OF BLOCK b1.  
  110.   
  111. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.  
  112. SELECT-OPTIONS:  
  113.   s_custom FOR vbak-kunnr LOWER CASE,   "客户  
  114.   s_matnr  FOR vbap-matnr,              "物料 PN  
  115.   s_ordno  FOR vbep-vbeln.              "销售单  
  116. SELECTION-SCREEN END OF BLOCK b2.  
  117.   
  118.   
  119.   
  120. *INCLUDE zcommon.  
  121.   
  122. INITIALIZATION.  
  123.   
  124. AT SELECTION-SCREEN OUTPUT.  
  125.   stext01 = '计划交货日期'.  
  126.   stext02 = '实际交货日期'.  
  127.   
  128. *--------------------------------  
  129. * Start of Selection  
  130. *--------------------------------  
  131. START-OF-SELECTION.  
  132.   PERFORM checkdata.  
  133.   PERFORM getdata.  
  134.   PERFORM events_build.  
  135.   PERFORM layout_build.  
  136.   PERFORM fields_build.  
  137.   PERFORM display_data.  
  138.   
  139. END-OF-SELECTION.  
  140.   
  141. *--------------------------------  
  142. * Top of Page  
  143. *--------------------------------  
  144. TOP-OF-PAGE.  
  145. *--------------------------------  
  146. * At User Command  
  147. *--------------------------------  
  148. AT USER-COMMAND.  
  149. *--------------------------------  
  150. * At Line Selection  
  151. *--------------------------------  
  152. AT LINE-SELECTION.  
  153.   
  154. *&---------------------------------------------------------------------*  
  155. *&      Form  LAYOUT_BUILD  
  156. *&---------------------------------------------------------------------*  
  157. *       text  
  158. *----------------------------------------------------------------------*  
  159. FORM layout_build.  
  160.   w_repid = sy-repid.                       "程序为当前程序  
  161.   i_layout-info_fieldname       = 'COLOR'.  "颜色值  
  162.   i_layout-colwidth_optimize    = 'X'.      "优化列宽选项是否设置  
  163.   i_layout-detail_initial_lines = 'X'.  
  164.   i_layout-detail_titlebar      = ''.       "设置弹出窗口的标题栏  
  165. ENDFORM.                    "layout_build  
  166.   
  167. *--------------------------------  
  168. * Fields_Build  
  169. *--------------------------------  
  170. FORM fields_build.  
  171.   
  172.   DATA: tmp_pos TYPE i.  
  173.   REFRESH i_fieldcat_alv.  
  174.   CLEAR i_fieldcat.  
  175.   
  176. *  定义宏设置FieldCat属性  
  177.   DEFINE fieldcatset.  
  178.     i_fieldcat-col_pos = &1.  
  179.     i_fieldcat-fieldname = &2.  
  180.     i_fieldcat-seltext_l = &3.  
  181.     i_fieldcat-no_out = &4.  
  182.     i_fieldcat-no_zero = &5.  
  183.     append i_fieldcat to i_fieldcat_alv.  
  184.     clear i_fieldcat.  
  185.   END-OF-DEFINITION.  
  186.   
  187.   tmp_pos = tmp_pos + 1.  
  188.   fieldcatset tmp_pos 'VBELN' '订单号' ' ' 'X'.  
  189.   
  190. *  tmp_pos = tmp_pos + 1.  
  191. *  fieldcatset tmp_pos 'KUNNR' '售达方' ' ' ' '.  
  192.   
  193.   tmp_pos = tmp_pos + 1.  
  194.   fieldcatset tmp_pos 'POSNR' '项目' ' ' ' '.  
  195.   
  196.   tmp_pos = tmp_pos + 1.  
  197.   fieldcatset tmp_pos 'VDATU' '请求交货日' ' ' ' '.  
  198.   
  199.   tmp_pos = tmp_pos + 1.  
  200.   fieldcatset tmp_pos 'MATNR' '物料PN' ' ' ' '.  
  201.   
  202.   tmp_pos = tmp_pos + 1.  
  203.   fieldcatset tmp_pos 'KWMENG' '销售订单数量' ' ' ' '.  
  204.   
  205.   tmp_pos = tmp_pos + 1.  
  206.   fieldcatset tmp_pos 'EDATU' '计划交货日期' ' ' ' '.  
  207.   
  208.   tmp_pos = tmp_pos + 1.  
  209.   fieldcatset tmp_pos 'WMENG' '计划交货数量' ' ' ' '.  
  210.   
  211.   tmp_pos = tmp_pos + 1.  
  212.   fieldcatset tmp_pos 'BMENG' 'SAP确认数' ' ' ' '.  
  213.   
  214. *  tmp_pos = tmp_pos + 1.  
  215. *  fieldcatset tmp_pos 'ERDAT' '实际交货日期' ' ' ' '.  
  216.   
  217. *  tmp_pos = tmp_pos + 1.  
  218. *  fieldcatset tmp_pos 'KCMENG' '实际交货数量' ' ' ' '.  
  219.   
  220. *  tmp_pos = tmp_pos + 1.  
  221. *  fieldcatset tmp_pos 'QTY_P' '计划内交货数量' ' ' ' '.  
  222.   
  223.   tmp_pos = tmp_pos + 1.  
  224.   fieldcatset tmp_pos 'QTY_N' '未完成数量' ' ' ' '.  
  225.   
  226.   tmp_pos = tmp_pos + 1.  
  227.   fieldcatset tmp_pos 'COMPLE' '达成率' ' ' ' '.  
  228.   
  229. ENDFORM.                    "Fields_Build  
  230.   
  231. *&---------------------------------------------------------------------*  
  232. *&      Form  layout_sort_build  
  233. *&---------------------------------------------------------------------*  
  234. FORM layout_sort_build CHANGING lt_sort TYPE slis_t_sortinfo_alv.  
  235.   
  236.   DATA ls_sort TYPE slis_sortinfo_alv.  
  237.   CLEAR ls_sort.  
  238.   ls_sort-fieldname = 'VBELN'.  
  239.   ls_sort-spos      = 1.  
  240.   ls_sort-up        = 'X'.  
  241.   ls_sort-subtot    = 'X'.  
  242.   APPEND ls_sort TO lt_sort.  
  243.   
  244. ENDFORM.                    "Layout_sort_build  
  245.   
  246. *--------------------------------  
  247. * DISPLAY_DATA  
  248. *--------------------------------  
  249. FORM display_data.  
  250.   
  251.   DESCRIBE TABLE t_orderinfo LINES rcount.  
  252.   scount = rcount.  
  253.   CONCATENATE '符合条件的记录数:' scount INTO lstr.  
  254.   
  255.   PERFORM layout_sort_build CHANGING it_sort.  
  256.   
  257.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'  
  258.    EXPORTING  
  259.      i_callback_user_command           = 'USER_COMMAND'  
  260. "用户触发事件  
  261.      i_callback_program                = w_repid                  "当前程序  
  262.      is_layout                         = i_layout  
  263. "子函数Layout_build填充的格式定义  
  264.      it_fieldcat                       = i_fieldcat_alv[]  
  265. "子函数Fields填充的各列  
  266.      it_events                         = i_events[]  
  267.      i_save                            = 'A'                      "保存变式  
  268.      it_sort                           = it_sort[]  
  269.     TABLES  
  270.        t_outtab  = t_orderinfo.  
  271.   
  272. ENDFORM.                    "DISPLAY_DATA  
  273. *---------------------------------------------------------------------*  
  274. *       FORM user_command                                             *  
  275. *---------------------------------------------------------------------*  
  276. FORM user_command USING i_ucomm LIKE sy-ucomm  
  277.                            selfield TYPE slis_selfield.  
  278. * CASE I_UCOMM.  
  279. *  WHEN '&IC1'.  
  280. *    READ TABLE T_ORDERINFO INDEX SELFIELD-TABINDEX.  
  281. *    IF Sy-Subrc <> 0.  
  282. *      LEAVE LIST-PROCESSING.  
  283. *    ENDIF.  
  284. *  
  285. *    SET PARAMETER ID 'BES' FIELD T_PONOInvoice-EBELN.  
  286. *    CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.  
  287. *  
  288. * ENDCASE.  
  289.   
  290. ENDFORM.                    "user_command  
  291.   
  292.   
  293. *&---------------------------------------------------------------------*  
  294. *&      Form  EVENTS_BUILD  
  295. *&---------------------------------------------------------------------*  
  296. FORM events_build.  
  297.   
  298.   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'  
  299.     EXPORTING  
  300.       i_list_type = 0  
  301.     IMPORTING  
  302.       et_events   = i_events.  
  303.   
  304. *  READ TABLE I_EVENTS  WITH KEY NAME = 'END_OF_LIST' INTO W_EVENTS.  
  305.   IF sy-subrc = 0.  
  306.     MOVE 'ALV_END_OF_LIST' TO w_events-form.  
  307.     MODIFY i_events FROM w_events INDEX sy-tabix.  
  308.   ENDIF.  
  309.   
  310. *  READ TABLE I_EVENTS WITH KEY NAME = 'USER_COMMAND' INTO W_EVENTS.  
  311. *  IF SY-SUBRC = 0.  
  312. *    MOVE 'USER_COMMAND' TO W_EVENTS-FORM.  
  313. *    MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.  
  314. *  ENDIF.  
  315.   
  316. ENDFORM.                    "events_build  
  317.   
  318. *&--------------------------------------------------------------------*  
  319. *&      Form  ALV_END_OF_LIST  
  320. *&--------------------------------------------------------------------*  
  321. FORM alv_end_of_list.  
  322.   CLEAR: i_list_comments.  
  323.   w_list_comments-typ = 'H'.  
  324.   w_list_comments-key = ''.  
  325.   w_list_comments-info = lstr.  
  326.   APPEND w_list_comments TO i_list_comments.  
  327.   
  328.   CLEAR w_list_comments.  
  329.   w_list_comments-typ = 'S'.  
  330.   w_list_comments-info = '报表开发者:IT部     开发日期:2011/10/26'.  
  331.   APPEND w_list_comments TO i_list_comments.  
  332.   CLEAR w_list_comments.  
  333.   
  334.   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  
  335.     EXPORTING  
  336.       it_list_commentary = i_list_comments  
  337.       i_end_of_list_grid = 'X'.  
  338. ENDFORM.                    "ALV_END_OF_LIST  
  339. *--------------------------------  
  340. * CheckData  
  341. *--------------------------------  
  342. FORM checkdata.  
  343.   IF s_dndate[] IS INITIAL AND s_custom[] IS INITIAL AND s_matnr[] IS  
  344. INITIAL AND s_ordno[] IS INITIAL.  
  345.     MESSAGE i000(zmsg) WITH '数据条件选项至少要输入一项!'.  
  346.     LEAVE LIST-PROCESSING.  
  347.   ENDIF.  
  348. ENDFORM.                    "CheckData  
  349.   
  350. *--------------------------------  
  351. * GetData根据计划交货日期取得资料  
  352. *--------------------------------  
  353. FORM getdata.  
  354.   
  355.   l_loop = 0.  
  356.   s_date = s_dndate-low.  
  357.   e_date = s_dndate-high.  
  358.   
  359. *日期条件  
  360.   IF s_dndate-low IS INITIAL.  
  361.     s_date = '19000101'.  
  362.   ENDIF.  
  363.   
  364.   APPEND ' VP~EDATU >= S_DATE ' TO str_where.  
  365.   
  366.   IF s_dndate-high IS NOT INITIAL.  
  367.     APPEND ' AND VP~EDATU <= E_DATE ' TO str_where.  
  368.   ENDIF.  
  369.   
  370. *客户条件  
  371.   IF s_custom[] IS NOT INITIAL.  
  372.     APPEND ' AND VM~KUNNR IN S_CUSTOM ' TO str_where.  
  373.   ENDIF.  
  374.   
  375. *物料条件  
  376.   IF s_matnr[] IS NOT INITIAL.  
  377.     APPEND ' AND VD~MATNR IN S_MATNR ' TO str_where.  
  378.   ENDIF.  
  379.   
  380. *销售单号  
  381.   IF s_ordno[] IS NOT INITIAL.  
  382.     APPEND ' AND VD~VBELN IN S_ORDNO ' TO str_where.  
  383.   ENDIF.  
  384.   
  385. *-------------------------------  
  386. *销售单数据信息  
  387. *-------------------------------  
  388. *销售单号及项目信息  
  389.   IF d1 = 'X'.  
  390.     SELECT DISTINCT vd~vbeln vd~posnr  
  391.     FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln  
  392.     INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr  
  393.     INTO CORRESPONDING FIELDS OF TABLE t_vbap  
  394.     WHERE (str_where) AND vp~wmeng > 0  ORDER BY vd~vbeln vd~posnr.  
  395.   ELSEIF d2 = 'X'.  
  396.     SELECT DISTINCT vd~vbeln vd~posnr  
  397.     FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln  
  398.     INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr  
  399.     INTO CORRESPONDING FIELDS OF TABLE t_vbap  
  400.     WHERE (str_where) AND vp~BMENG > 0  ORDER BY vd~vbeln vd~posnr.  
  401.   ELSE.  
  402.     MESSAGE i000(zmsg) WITH '请先选择是计划交货还是实际交货!'.  
  403.     LEAVE LIST-PROCESSING.  
  404.   ENDIF.  
  405.   
  406.     IF t_vbap[] IS INITIAL .  
  407.       MESSAGE i000(zmsg) WITH '没找到对应的数据,请更改查询条件'.  
  408.       LEAVE LIST-PROCESSING .  
  409.     ENDIF.  
  410. *从表VBAK(销售单抬头) VBAP(销售单项目数据) VBEP(销售单计划行数据)  
  411. *取出销售单数据:销售单号、售达方、项目、物料编号、订单总数量、  
  412. *计划交货日期、计划交货量、确认的数量  
  413. *  SELECT vm~vbeln vm~kunnr vd~posnr vd~matnr vd~kwmeng  
  414. *  vp~edatu SUM( vp~wmeng ) AS wmeng SUM( vp~bmeng ) AS bmeng  
  415. *  INTO CORRESPONDING FIELDS OF TABLE t_orderinfo  
  416. *  FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln  
  417. *  INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr  
  418. *  WHERE (str_where)  
  419. *  GROUP BY vm~vbeln vm~kunnr vd~posnr vd~matnr vd~kwmeng vp~edatu  
  420. *  ORDER BY vm~kunnr vm~vbeln vd~posnr vd~matnr vp~edatu.  
  421.   
  422. *    提取基本数据  VBAK,VBAP  
  423.     SELECT vm~vbeln vm~kunnr vd~posnr vd~matnr vm~vdatu vd~kwmeng  
  424. vp~edatu vp~wmeng vp~bmeng  
  425.     INTO CORRESPONDING FIELDS OF TABLE t_orderinfo  
  426.     FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln  
  427. INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr  
  428.     FOR ALL ENTRIES IN t_vbap  
  429.     WHERE vd~vbeln = t_vbap-vbeln and vd~posnr = t_vbap-posnr.  
  430. *    提取计划数据  VBEP  
  431.     SELECT v~vbeln v~posnr v~etenr v~edatu v~wmeng v~bmeng  
  432.     INTO CORRESPONDING FIELDS OF TABLE t_orderinfoAll  
  433.     FROM vbep as v  
  434.     FOR ALL ENTRIES IN t_vbap  
  435.     WHERE v~vbeln = t_vbap-vbeln and v~posnr = t_vbap-posnr.  
  436. *-------------------------------  
  437. *销售单交货数据信息  
  438. *-------------------------------  
  439. *取出交货单信息:交货单号、项目、销售单号、销售单项目、物料编号、实际货物移动日期、合计出货数  
  440. *  LOOP AT t_vbap.  
  441. *    SELECT ld~vbeln ld~posnr ld~vgbel ld~vgpos ld~matnr lm~wadat_ist  
  442. *SUM( ld~kcmeng ) AS kcmeng  
  443. *    INTO CORRESPONDING FIELDS OF TABLE t_lips  
  444. *    FROM lips AS ld INNER JOIN likp AS lm ON ld~vbeln = lm~vbeln  
  445. *    WHERE ld~vgbel = t_vbap-vbeln AND ld~vgpos = t_vbap-posnr  
  446. *    AND ld~posnr < '900001' AND ld~kcmeng > 0  
  447. *    GROUP BY ld~vbeln ld~matnr ld~posnr ld~vgbel ld~vgpos lm~wadat_ist  
  448. *    ORDER BY ld~vbeln ld~posnr ld~vgbel ld~vgpos .  
  449. *  ENDLOOP.  
  450.   
  451. *  SORT t_orderinfo BY matnr.  
  452. *  l_loop = 0.  
  453. *  LOOP AT t_orderinfo.  
  454. *    l_loop = sy-tabix.  
  455. *    CLEAR t_lips.  
  456. *    READ TABLE t_lips WITH KEY vgbel = t_orderinfo-vbeln  
  457. *                               vgpos = t_orderinfo-posnr.  
  458. *    IF sy-subrc = 0.  
  459. *      t_orderinfo-kcmeng = t_lips-kcmeng.  
  460. *      t_orderinfo-erdat = t_lips-wadat_ist.  
  461. *      IF ss_matnr <> t_orderinfo-matnr.  
  462. *        ss_qty = 0.  
  463. *        t_orderinfo-qty_p = t_orderinfo-kwmeng.  
  464. *        t_orderinfo-qty_n = t_lips-kcmeng - t_orderinfo-wmeng + ss_qty.  
  465. *        IF t_orderinfo-qty_p = 0.  
  466. *          t_orderinfo-comple = 1.  
  467. *        ELSE.  
  468. *       t_orderinfo-comple = 1 - ( t_orderinfo-qty_n / t_orderinfo-qty_p  
  469. * ).  
  470. *        ENDIF.  
  471. *      ELSE.  
  472. *        t_orderinfo-qty_p = t_orderinfo-kwmeng.  
  473. *        t_orderinfo-qty_n = t_lips-kcmeng - t_orderinfo-wmeng + ss_qty.  
  474. *        ss_qty = t_lips-kcmeng - t_orderinfo-wmeng + ss_qty.  
  475. *        IF t_orderinfo-qty_p = 0.  
  476. *          t_orderinfo-comple = 1 .  
  477. *        ELSE.  
  478. *       t_orderinfo-comple = 1 - ( t_orderinfo-qty_n / t_orderinfo-qty_p  
  479. * ).  
  480. *        ENDIF.  
  481. *      ENDIF.  
  482. *    ELSE.  
  483. *      t_orderinfo-comple = 0.  
  484. *    ENDIF.  
  485. *    ss_matnr = t_orderinfo-matnr.  
  486.   
  487. *    MODIFY t_orderinfo INDEX l_loop.  
  488. *    sy-tabix = l_loop + 1.  
  489. *  ENDLOOP.  
  490.   
  491.   l_loop = 0.  
  492.   ss_matnr = ''.  
  493.   ss_qty = 0.  
  494.   ss_matnr = ''.  
  495.   ss_qty = 0.  
  496.   LOOP AT t_orderinfo.  
  497.     l_loop = sy-tabix.  
  498.   
  499.   if ss_matnr <> t_orderinfo-matnr.  
  500.      ss_qty = 0.  
  501.      t_orderinfo-qty_n = t_orderinfo-bmeng - t_orderinfo-wmeng.  
  502.      ss_qty = t_orderinfo-bmeng - t_orderinfo-wmeng.  
  503.      t_orderinfo-comple = ( t_orderinfo-bmeng / t_orderinfo-kwmeng ) *  
  504. 100 .  
  505.   
  506.   else.  
  507.      t_orderinfo-qty_n = t_orderinfo-bmeng - t_orderinfo-wmeng + ss_qty.  
  508.      ss_qty = t_orderinfo-bmeng - t_orderinfo-wmeng + ss_qty.  
  509.      t_orderinfo-comple = ( 1 - ss_qty / t_orderinfo-kwmeng ) * 100 .  
  510.   endif.  
  511.   
  512.     t_orderinfo-comple = t_orderinfo-comple(5).  
  513.     CONCATENATE  t_orderinfo-comple  '%' INTO t_orderinfo-comple.  
  514.   
  515.     ss_matnr = t_orderinfo-matnr.  
  516.     MODIFY t_orderinfo INDEX l_loop.  
  517.     sy-tabix = l_loop + 1.  
  518.   ENDLOOP.  
  519.   
  520. ENDFORM.                    "getdata  
*&---------------------------------------------------------------------*
*& Report  ZSD017
*&---------------------------------------------------------------------*
* Author : Jasson.Lee
* Date   : 2011/12/28
* Purpose: 销售订单达成率,注意日期选择不同,数据算法不同
* Change History :
*    Date       Author        Descriptions
* ========== ================ ==========================================
* 2011/12/28   Jasson.Lee       Create
*-----------------------------------------------------------------------
REPORT  zsd017.

*--------------------------------
* Global Types
* Essential Declaration for ALV Display
*--------------------------------
TYPE-POOLS: slis.
DATA  :
  i_fieldcat_alv  TYPE slis_t_fieldcat_alv ,
  i_fieldcat_alv_t TYPE slis_t_fieldcat_alv,
  i_fieldcat_alv_p TYPE slis_t_fieldcat_alv,
  i_layout        TYPE slis_layout_alv,
  i_fieldcat      TYPE slis_fieldcat_alv,
  i_events        TYPE slis_t_event,
  w_events  LIKE LINE OF i_events,
  i_list_comments TYPE slis_t_listheader,
  w_list_comments LIKE LINE OF i_list_comments,
  it_sort TYPE slis_t_sortinfo_alv,
  w_repid LIKE sy-repid.

TABLES: vbak, vbap, vbkd, vbep, likp, lips, mara.

*销售单信息
DATA: BEGIN OF t_vbap OCCURS 0,
          vbeln LIKE vbap-vbeln,      "ORDER NO
          posnr LIKE vbap-posnr,      "销售项目编号
END OF t_vbap.

*SD计划行项目信息VBEP
DATA: BEGIN OF t_orderinfoAll OCCURS 0,
          vbeln LIKE vbep-vbeln,      "ORDER NO
          posnr LIKE vbep-posnr,      "销售项目编号
          etenr LIKE vbep-etenr,      "行计划
          edatu LIKE vbep-edatu,      "计划交货日期
          wmeng LIKE vbep-wmeng,      "计划交货数量
          bmeng LIKE vbep-bmeng,      "确认的数量
END OF t_orderinfoAll.

DATA: BEGIN OF t_orderinfo OCCURS 0,
          vbeln LIKE vbak-vbeln,      "ORDER NO
          kunnr LIKE vbak-kunnr,      "售达方
          posnr LIKE vbap-posnr,      "销售项目编号
          matnr LIKE vbap-matnr,      "物料号
          vdatu LIKE vbak-vdatu,      "请求交货日
          kwmeng LIKE vbap-kwmeng,    "销售订单数量
          edatu LIKE vbep-edatu,      "计划交货日期
          wmeng LIKE vbep-wmeng,      "计划交货数量
          bmeng LIKE vbep-bmeng,      "确认的数量
          erdat LIKE lips-erdat,      "实际交货日期
          kcmeng LIKE lips-kcmeng,    "实际交货数量
          qty_p LIKE lips-kcmeng,     "计划内交货数量
          qty_n LIKE lips-kcmeng,     "未完成数量
          comple(6) TYPE C,    "达成率
END OF t_orderinfo.



*交货信息表
*DATA: BEGIN OF t_lips OCCURS 0,
*          vbeln      LIKE lips-vbeln,             "交货单号
*          posnr      LIKE lips-posnr,             "项目
*          vgbel      LIKE lips-vgbel,             "销售单号
*          vgpos      LIKE lips-vgpos,             "销售单项目号
*          matnr      LIKE lips-matnr,             "物料号
*          wadat_ist  LIKE likp-wadat_ist,         "实际交货日期
*          kcmeng     LIKE lips-kcmeng,            "合计出货数
*END OF t_lips.

DATA: str_where TYPE TABLE OF edpline.
DATA: l_loop TYPE i, l_ordrow TYPE i, l_rowcount TYPE i.

DATA: rcount TYPE i, rowcount TYPE i.
DATA: scount(8).
DATA: lstr(20).
DATA: s_date TYPE d, e_date TYPE d.
DATA:
      ss_matnr LIKE vbap-matnr,
      ss_qty LIKE lips-kcmeng.
*--------------------------------
* Selection Screen
*--------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS:
  d1 RADIOBUTTON GROUP d DEFAULT 'X'.    "计划交货日期
SELECTION-SCREEN COMMENT 6(10) stext01 FOR FIELD d1.
SELECTION-SCREEN POSITION 18.
PARAMETERS:
 d2 RADIOBUTTON GROUP d.                 "实际交货日期
SELECTION-SCREEN COMMENT 21(10) stext02 FOR FIELD d2.
SELECTION-SCREEN END OF LINE.

SELECT-OPTIONS:
   s_dndate FOR vbep-edatu.              "日期选择

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS:
  s_custom FOR vbak-kunnr LOWER CASE,   "客户
  s_matnr  FOR vbap-matnr,              "物料 PN
  s_ordno  FOR vbep-vbeln.              "销售单
SELECTION-SCREEN END OF BLOCK b2.



*INCLUDE zcommon.

INITIALIZATION.

AT SELECTION-SCREEN OUTPUT.
  stext01 = '计划交货日期'.
  stext02 = '实际交货日期'.

*--------------------------------
* 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.

*&---------------------------------------------------------------------*
*&      Form  LAYOUT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
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.
    i_fieldcat-no_zero = &5.
    append i_fieldcat to i_fieldcat_alv.
    clear i_fieldcat.
  END-OF-DEFINITION.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'VBELN' '订单号' ' ' 'X'.

*  tmp_pos = tmp_pos + 1.
*  fieldcatset tmp_pos 'KUNNR' '售达方' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'POSNR' '项目' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'VDATU' '请求交货日' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'MATNR' '物料PN' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'KWMENG' '销售订单数量' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'EDATU' '计划交货日期' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'WMENG' '计划交货数量' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'BMENG' 'SAP确认数' ' ' ' '.

*  tmp_pos = tmp_pos + 1.
*  fieldcatset tmp_pos 'ERDAT' '实际交货日期' ' ' ' '.

*  tmp_pos = tmp_pos + 1.
*  fieldcatset tmp_pos 'KCMENG' '实际交货数量' ' ' ' '.

*  tmp_pos = tmp_pos + 1.
*  fieldcatset tmp_pos 'QTY_P' '计划内交货数量' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'QTY_N' '未完成数量' ' ' ' '.

  tmp_pos = tmp_pos + 1.
  fieldcatset tmp_pos 'COMPLE' '达成率' ' ' ' '.

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 = 'VBELN'.
  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_orderinfo 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_orderinfo.

ENDFORM.                    "DISPLAY_DATA
*---------------------------------------------------------------------*
*       FORM user_command                                             *
*---------------------------------------------------------------------*
FORM user_command USING i_ucomm LIKE sy-ucomm
                           selfield TYPE slis_selfield.
* CASE I_UCOMM.
*  WHEN '&IC1'.
*    READ TABLE T_ORDERINFO 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/26'.
  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
*--------------------------------
* CheckData
*--------------------------------
FORM checkdata.
  IF s_dndate[] IS INITIAL AND s_custom[] IS INITIAL AND s_matnr[] IS
INITIAL AND s_ordno[] IS INITIAL.
    MESSAGE i000(zmsg) WITH '数据条件选项至少要输入一项!'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.                    "CheckData

*--------------------------------
* GetData根据计划交货日期取得资料
*--------------------------------
FORM getdata.

  l_loop = 0.
  s_date = s_dndate-low.
  e_date = s_dndate-high.

*日期条件
  IF s_dndate-low IS INITIAL.
    s_date = '19000101'.
  ENDIF.

  APPEND ' VP~EDATU >= S_DATE ' TO str_where.

  IF s_dndate-high IS NOT INITIAL.
    APPEND ' AND VP~EDATU <= E_DATE ' TO str_where.
  ENDIF.

*客户条件
  IF s_custom[] IS NOT INITIAL.
    APPEND ' AND VM~KUNNR IN S_CUSTOM ' TO str_where.
  ENDIF.

*物料条件
  IF s_matnr[] IS NOT INITIAL.
    APPEND ' AND VD~MATNR IN S_MATNR ' TO str_where.
  ENDIF.

*销售单号
  IF s_ordno[] IS NOT INITIAL.
    APPEND ' AND VD~VBELN IN S_ORDNO ' TO str_where.
  ENDIF.

*-------------------------------
*销售单数据信息
*-------------------------------
*销售单号及项目信息
  IF d1 = 'X'.
    SELECT DISTINCT vd~vbeln vd~posnr
    FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln
    INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr
    INTO CORRESPONDING FIELDS OF TABLE t_vbap
    WHERE (str_where) AND vp~wmeng > 0  ORDER BY vd~vbeln vd~posnr.
  ELSEIF d2 = 'X'.
    SELECT DISTINCT vd~vbeln vd~posnr
    FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln
    INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr
    INTO CORRESPONDING FIELDS OF TABLE t_vbap
    WHERE (str_where) AND vp~BMENG > 0  ORDER BY vd~vbeln vd~posnr.
  ELSE.
    MESSAGE i000(zmsg) WITH '请先选择是计划交货还是实际交货!'.
    LEAVE LIST-PROCESSING.
  ENDIF.

    IF t_vbap[] IS INITIAL .
      MESSAGE i000(zmsg) WITH '没找到对应的数据,请更改查询条件'.
      LEAVE LIST-PROCESSING .
    ENDIF.
*从表VBAK(销售单抬头) VBAP(销售单项目数据) VBEP(销售单计划行数据)
*取出销售单数据:销售单号、售达方、项目、物料编号、订单总数量、
*计划交货日期、计划交货量、确认的数量
*  SELECT vm~vbeln vm~kunnr vd~posnr vd~matnr vd~kwmeng
*  vp~edatu SUM( vp~wmeng ) AS wmeng SUM( vp~bmeng ) AS bmeng
*  INTO CORRESPONDING FIELDS OF TABLE t_orderinfo
*  FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln
*  INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr
*  WHERE (str_where)
*  GROUP BY vm~vbeln vm~kunnr vd~posnr vd~matnr vd~kwmeng vp~edatu
*  ORDER BY vm~kunnr vm~vbeln vd~posnr vd~matnr vp~edatu.

*    提取基本数据  VBAK,VBAP
    SELECT vm~vbeln vm~kunnr vd~posnr vd~matnr vm~vdatu vd~kwmeng
vp~edatu vp~wmeng vp~bmeng
    INTO CORRESPONDING FIELDS OF TABLE t_orderinfo
    FROM vbak AS vm INNER JOIN vbap AS vd ON vm~vbeln = vd~vbeln
INNER JOIN vbep AS vp ON vd~vbeln = vp~vbeln AND vd~posnr = vp~posnr
    FOR ALL ENTRIES IN t_vbap
    WHERE vd~vbeln = t_vbap-vbeln and vd~posnr = t_vbap-posnr.
*    提取计划数据  VBEP
    SELECT v~vbeln v~posnr v~etenr v~edatu v~wmeng v~bmeng
    INTO CORRESPONDING FIELDS OF TABLE t_orderinfoAll
    FROM vbep as v
    FOR ALL ENTRIES IN t_vbap
    WHERE v~vbeln = t_vbap-vbeln and v~posnr = t_vbap-posnr.
*-------------------------------
*销售单交货数据信息
*-------------------------------
*取出交货单信息:交货单号、项目、销售单号、销售单项目、物料编号、实际货物移动日期、合计出货数
*  LOOP AT t_vbap.
*    SELECT ld~vbeln ld~posnr ld~vgbel ld~vgpos ld~matnr lm~wadat_ist
*SUM( ld~kcmeng ) AS kcmeng
*    INTO CORRESPONDING FIELDS OF TABLE t_lips
*    FROM lips AS ld INNER JOIN likp AS lm ON ld~vbeln = lm~vbeln
*    WHERE ld~vgbel = t_vbap-vbeln AND ld~vgpos = t_vbap-posnr
*    AND ld~posnr < '900001' AND ld~kcmeng > 0
*    GROUP BY ld~vbeln ld~matnr ld~posnr ld~vgbel ld~vgpos lm~wadat_ist
*    ORDER BY ld~vbeln ld~posnr ld~vgbel ld~vgpos .
*  ENDLOOP.

*  SORT t_orderinfo BY matnr.
*  l_loop = 0.
*  LOOP AT t_orderinfo.
*    l_loop = sy-tabix.
*    CLEAR t_lips.
*    READ TABLE t_lips WITH KEY vgbel = t_orderinfo-vbeln
*                               vgpos = t_orderinfo-posnr.
*    IF sy-subrc = 0.
*      t_orderinfo-kcmeng = t_lips-kcmeng.
*      t_orderinfo-erdat = t_lips-wadat_ist.
*      IF ss_matnr <> t_orderinfo-matnr.
*        ss_qty = 0.
*        t_orderinfo-qty_p = t_orderinfo-kwmeng.
*        t_orderinfo-qty_n = t_lips-kcmeng - t_orderinfo-wmeng + ss_qty.
*        IF t_orderinfo-qty_p = 0.
*          t_orderinfo-comple = 1.
*        ELSE.
*       t_orderinfo-comple = 1 - ( t_orderinfo-qty_n / t_orderinfo-qty_p
* ).
*        ENDIF.
*      ELSE.
*        t_orderinfo-qty_p = t_orderinfo-kwmeng.
*        t_orderinfo-qty_n = t_lips-kcmeng - t_orderinfo-wmeng + ss_qty.
*        ss_qty = t_lips-kcmeng - t_orderinfo-wmeng + ss_qty.
*        IF t_orderinfo-qty_p = 0.
*          t_orderinfo-comple = 1 .
*        ELSE.
*       t_orderinfo-comple = 1 - ( t_orderinfo-qty_n / t_orderinfo-qty_p
* ).
*        ENDIF.
*      ENDIF.
*    ELSE.
*      t_orderinfo-comple = 0.
*    ENDIF.
*    ss_matnr = t_orderinfo-matnr.

*    MODIFY t_orderinfo INDEX l_loop.
*    sy-tabix = l_loop + 1.
*  ENDLOOP.

  l_loop = 0.
  ss_matnr = ''.
  ss_qty = 0.
  ss_matnr = ''.
  ss_qty = 0.
  LOOP AT t_orderinfo.
    l_loop = sy-tabix.

  if ss_matnr <> t_orderinfo-matnr.
     ss_qty = 0.
     t_orderinfo-qty_n = t_orderinfo-bmeng - t_orderinfo-wmeng.
     ss_qty = t_orderinfo-bmeng - t_orderinfo-wmeng.
     t_orderinfo-comple = ( t_orderinfo-bmeng / t_orderinfo-kwmeng ) *
100 .

  else.
     t_orderinfo-qty_n = t_orderinfo-bmeng - t_orderinfo-wmeng + ss_qty.
     ss_qty = t_orderinfo-bmeng - t_orderinfo-wmeng + ss_qty.
     t_orderinfo-comple = ( 1 - ss_qty / t_orderinfo-kwmeng ) * 100 .
  endif.

    t_orderinfo-comple = t_orderinfo-comple(5).
    CONCATENATE  t_orderinfo-comple  '%' INTO t_orderinfo-comple.

    ss_matnr = t_orderinfo-matnr.
    MODIFY t_orderinfo INDEX l_loop.
    sy-tabix = l_loop + 1.
  ENDLOOP.

ENDFORM.                    "getdata


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值