ZVT003出闸纸列印

47 篇文章 0 订阅
恐怕很多了都很陌生吧。啥东西叫做出闸纸咯。咳!其实它为公司指示货柜堆场将吉柜(即空柜)交与本单持有人的书面凭证,重柜与吉柜进出码头均受到海关监控,出CY的柜须有“出闸放行条”(有人称“出闸纸”)。简单点引申为:放行条。大家先看看效果。列印中用到scriptform.有不了解的童鞋可以参考我之前的教程: SAP ScriptForms 教程系列 http://blog.csdn.net/jiali765/article/details/7041900 。最终的效果为:

 

                现在接着来看看代码:

  1. *&---------------------------------------------------------------------*  
  2. *& Report  ZVT003  
  3. *&---------------------------------------------------------------------*  
  4. * Author  : Jasson.Lee  
*&---------------------------------------------------------------------*
*& Report  ZVT003
*&---------------------------------------------------------------------*
* Author  : Jasson.Lee
  1.   Date 2011.07.29  
  2. * Purpose :  
  3. * Modi Log: 2011.07.29  Gavin Create  
  4. * Modi Log: 2011.08.23  Gavin 出货数改为整数  
  5. * Modi Log: 2011.08.24  Gavin 出货数改为字符型,以便于报关修正  
  6. * Modi Log: 2011.08.25  Gavin 增加备注  
  7. * Modi Log: 2012.02.04  Gavin 增加名称栏位宽度  
  8. *----------------------------------------------------------------------  
  9. REPORT  ZVT003.  
  10. TABLES: VTTK,VTTP,VEKP,VEPO.  
  11. TYPE-POOLS: SLIS.  
  12. *--------------------------------  
  13. * Selection Screen  
  14. *--------------------------------  
  15. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.  
  16. PARAMETERS:  
  17.   P_TKNUM LIKE VTTK-TKNUM OBLIGATORY  .  "SHIPMETN NO.  
  18. SELECTION-SCREEN END OF BLOCK B1.  
  19. * For Line Items  
  20. SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.  
  21. PARAMETERS:  
  22.             P_CHK AS CHECKBOX DEFAULT '',  
  23.             P1 TYPE I DEFAULT 0,  
  24.             P2(50) TYPE C.  
  25. SELECTION-SCREEN END OF BLOCK B2.  
  26. *****************************************************************************  
  27. DATA: G_STATUS TYPE SLIS_FORMNAME VALUE 'STANDARD_02'.        "加工具栏  
  28.   
  29. DATA:  
  30.       I_FIELDCAT_ALV    TYPE SLIS_T_FIELDCAT_ALV,  
  31.       I_FIELDCAT        TYPE SLIS_FIELDCAT_ALV,  
  32.       I_LAYOUT          TYPE SLIS_LAYOUT_ALV,  
  33.       I_EVENTS          TYPE SLIS_T_EVENT,  
  34.       W_EVENTS          LIKE LINE OF I_EVENTS,  
  35.       I_LIST_COMMENTS   TYPE SLIS_T_LISTHEADER,  
  36.       W_LIST_COMMENTS   LIKE LINE OF I_LIST_COMMENTS,  
  37.       W_REPID           LIKE SY-REPID.  
  38.   
  39. DATA:  
  40.       W_LOOP        TYPE SY-TABIX,  
  41. L_PROD_NUM1   TYPE CO_PSMNG,  
  42. L_PROD_NUM2   TYPE  CO_PSMNG.  
  43. DATA: BEGIN OF I_TAB0 OCCURS 0,  
  44.         TKNUM    LIKE VTTK-TKNUM,  
  45.         ERDAT    LIKE VTTK-ERDAT,  
  46.         EXTI1    LIKE VTTK-EXTI1,  
  47.         EXTI2    LIKE VTTK-EXTI2,  
  48.       END OF I_TAB0.  
  49.   
  50. DATA: BEGIN OF I_TAB1 OCCURS 0,  
  51.         TKNUM    LIKE VTTP-TKNUM,  
  52.         VBELN    LIKE LIPS-VBELN,  
  53.         MATNR    LIKE LIPS-MATNR,  
  54.         ARKTX    LIKE LIPS-ARKTX,  
  55.         LFIMG    LIKE LIPS-LFIMG,  
  56.         VPOBJKEY LIKE VEKP-VPOBJKEY,  
  57.       END OF I_TAB1.  
  58. DATA: BEGIN OF I_TAB2 OCCURS 0,  
  59.         VENUM    LIKE VEKP-VENUM,  
  60.         VPOBJKEY LIKE VEKP-VPOBJKEY,  
  61.         BRGEW    LIKE VEKP-BRGEW,  
  62.         VBELN    LIKE VEPO-VBELN,  
  63.         POSNR    LIKE VEPO-POSNR,  
  64.         MATNR    LIKE VEPO-MATNR,  
  65.         VEMNG    LIKE VEPO-VEMNG,  
  66.       END OF I_TAB2.  
  67. DATA: BEGIN OF I_TAB3 OCCURS 0,  
  68.         MATNR    LIKE LIPS-MATNR,  
  69.         BRGEW    LIKE VEKP-BRGEW,  
  70.         VEMNG    LIKE VEPO-VEMNG,  
  71.       END OF I_TAB3.  
  72.   
  73. DATA: BEGIN OF I_TAB4 OCCURS 0,  
  74.         TKNUM    LIKE VTTP-TKNUM,  
  75.         MATNR    LIKE LIPS-MATNR,  
  76.         ARKTX    LIKE LIPS-ARKTX,  
  77.         LFIMG    TYPE I,"LIKE LIPS-LFIMG,  
  78.         VEMNG    TYPE I,"LIKE VEPO-VEMNG,  
  79.         BRGEW    TYPE I,"LIKE VEKP-BRGEW,  
  80.         VEMNG1   TYPE I,"LIKE VEPO-VEMNG,  
  81.         BRGEW1   TYPE I,"LIKE VEKP-BRGEW,  
  82.         LFIMG1(10) TYPE C,"LIKE LIPS-LFIMG,  
  83.       END OF I_TAB4.  
  84.   
  85. DATA: BEGIN OF I_TAB5 OCCURS 0,  
  86.         TKNUM    LIKE VTTP-TKNUM,  
  87.         MATNR    LIKE LIPS-MATNR,  
  88.         ARKTX    LIKE LIPS-ARKTX,  
  89.         LFIMG    TYPE I,"LIKE LIPS-LFIMG,  
  90.         VEMNG    TYPE I,"LIKE VEPO-VEMNG,  
  91.         BRGEW    TYPE I,"LIKE VEKP-BRGEW,  
  92.         VEMNG1   TYPE I,"LIKE VEPO-VEMNG,  
  93.         BRGEW1   TYPE I,"LIKE VEKP-BRGEW,  
  94.       END OF I_TAB5.  
  95.   
  96. DATA :P_COCO LIKE KNB1-BUKRS.  
  97. DATA :W_TOTAL(10) TYPE C.  
  98. DATA :W_LOOP1 LIKE SY-TABIX.  
  99. DATA :W_LOOP2 LIKE SY-TABIX.  
  100. DATA :W_LOOP3 LIKE SY-TABIX.  
  101. DATA SCOUNT(8).  
  102. DATA :RCOUNT LIKE SY-TABIX.  
  103. DATA LSTR(20).  
  104. DATA LSTR1(40).  
  105. DATA LSTR2(40).  
  106. DATA LSTR3(100).  
  107. DATA LSTR4(40).  
  108. DATA LSTR5(40).  
  109. *--------------------------------  
  110. * Initialization  
  111. *--------------------------------  
  112. INITIALIZATION.  
  113. *--------------------------------  
  114. * At Selection Screen PBO  
  115. *--------------------------------  
  116. AT SELECTION-SCREEN OUTPUT.  
  117. *--------------------------------  
  118. * Start of Selection  
  119. *--------------------------------  
  120. START-OF-SELECTION.  
  121.   PERFORM GET_DATA.  
  122.   PERFORM PROCESS_DATA.  
  123.   PERFORM CAL_DATA.  
  124.   PERFORM EVENTS_BUILD.  
  125.   PERFORM LAYOUT_BUILD.  
  126.   PERFORM FIELDS_BUILD.  
  127.   PERFORM DISPLAY_DATA.  
  128.   
  129. END-OF-SELECTION.  
  130. *--------------------------------  
  131. * Top of Page  
  132. *--------------------------------  
  133. TOP-OF-PAGE.  
  134. *&---------------------------------------------------------------------*  
  135. *&      Form  get_data  
  136. *&---------------------------------------------------------------------*  
  137. FORM GET_DATA.  
  138. *  主档  
  139.   SELECT K~TKNUM K~ERDAT K~EXTI1 K~EXTI2 INTO TABLE I_TAB0  
  140.      FROM VTTK AS K  
  141.      WHERE K~TKNUM = P_TKNUM.  
  142. *  
  143.   SELECT T~TKNUM P~VBELN P~MATNR P~ARKTX P~LFIMG INTO TABLE I_TAB1  
  144.     FROM VTTP AS T INNER JOIN LIPS AS P ON T~VBELN = P~VBELN  
  145.     WHERE T~TKNUM = P_TKNUM  
  146.     AND   P~LFIMG > 0 AND P~POSNR >= '900001' .  
  147.   
  148.   L_PROD_NUM1 = 0.  
  149.   LOOP AT I_TAB1.  
  150.     W_LOOP = SY-TABIX.  
  151.     L_PROD_NUM1 = L_PROD_NUM1 + I_TAB1-LFIMG.  
  152.     I_TAB1-VPOBJKEY = I_TAB1-VBELN.  
  153.     MODIFY I_TAB1 INDEX W_LOOP.  
  154.     SY-TABIX = W_LOOP + 1.  
  155.   ENDLOOP.  
  156.   
  157. * 取得出包装箱数  
  158.   SELECT K~VENUM K~VPOBJKEY K~BRGEW P~VBELN P~POSNR P~MATNR P~VEMNG  
  159.     INTO TABLE I_TAB2  
  160.     FROM VEKP AS K LEFT JOIN VEPO AS P ON K~VENUM = P~VENUM  
  161.     FOR ALL ENTRIES IN I_TAB1  
  162.     WHERE K~VPOBJKEY = I_TAB1-VPOBJKEY AND K~STATUS = '0020'.  
  163.   
  164.   L_PROD_NUM2 = 0.  
  165.   LOOP AT I_TAB2.  
  166.     L_PROD_NUM2 = L_PROD_NUM2 + I_TAB2-BRGEW.  
  167.   ENDLOOP.  
  168.   
  169. ENDFORM.                    "get_data  
  170. *&---------------------------------------------------------------------*  
  171. *&      Form  process_data  
  172. *&---------------------------------------------------------------------*  
  173. FORM PROCESS_DATA .  
  174.   LOOP AT I_TAB2.  
  175.     W_LOOP = SY-TABIX.  
  176.     I_TAB3-MATNR = I_TAB2-MATNR.  
  177.     I_TAB3-BRGEW = I_TAB2-BRGEW.  
  178.     I_TAB3-VEMNG = I_TAB2-VEMNG.  
  179.     COLLECT I_TAB3.  
  180.     SY-TABIX = W_LOOP + 1.  
  181.   ENDLOOP.  
  182.   
  183.   LOOP AT I_TAB1.  
  184.     W_LOOP = SY-TABIX.  
  185.     I_TAB4-TKNUM = I_TAB1-TKNUM.  
  186.     I_TAB4-MATNR = I_TAB1-MATNR.  
  187.     I_TAB4-ARKTX = I_TAB1-ARKTX.  
  188.     I_TAB4-LFIMG = I_TAB1-LFIMG.  
  189.     COLLECT I_TAB4.  
  190.     SY-TABIX = W_LOOP + 1.  
  191.   ENDLOOP.  
  192.   SORT I_TAB3 BY MATNR.  
  193. *  SORT I_TAB4 BY MATNR.  
  194.   LOOP AT I_TAB4.  
  195.     W_LOOP = SY-TABIX.  
  196.     CLEAR I_TAB3.  
  197.     READ TABLE I_TAB3 WITH KEY MATNR = I_TAB4-MATNR BINARY SEARCH.  
  198.     IF SY-SUBRC = 0.  
  199.       I_TAB4-BRGEW  = I_TAB3-BRGEW.  
  200.       I_TAB4-VEMNG  = I_TAB3-VEMNG.              "输入前值  
  201.       I_TAB4-LFIMG  = I_TAB3-VEMNG.              "  
  202.       I_TAB4-BRGEW1 = L_PROD_NUM2.  
  203.       I_TAB4-VEMNG1 = L_PROD_NUM1.  
  204.     ENDIF.  
  205.     I_TAB4-LFIMG1  = I_TAB4-LFIMG.               "数量转成字符  
  206.     MODIFY I_TAB4 INDEX W_LOOP.  
  207.     SY-TABIX = W_LOOP + 1.  
  208.   ENDLOOP.  
  209.   I_TAB4-TKNUM = ''.  
  210.   I_TAB4-MATNR = ''.  
  211.   I_TAB4-ARKTX = ''.  
  212.   I_TAB4-BRGEW  = 0.  
  213.   I_TAB4-VEMNG  = 0.              "输入前值  
  214.   I_TAB4-LFIMG1 = '0'.              "  
  215.   I_TAB4-LFIMG  = 0.              "  
  216.   I_TAB4-BRGEW1 = 0.  
  217.   I_TAB4-VEMNG1 = 0.  
  218.   IF P_CHK = 'X'.  
  219.     DO P1 TIMES.  
  220.       APPEND I_TAB4.  
  221.     ENDDO.  
  222.   ENDIF.  
  223.   
  224. ENDFORM.                    " process_data  
  225. *&---------------------------------------------------------------------*  
  226. *&      Form  Form_Open  
  227. *&---------------------------------------------------------------------*  
  228. FORM FORM_OPEN .  
  229.   CALL FUNCTION 'OPEN_FORM'  
  230.     EXPORTING  
  231.       FORM     = 'ZSHIPMENT_DOC2'  
  232.       LANGUAGE = SY-LANGU  
  233.       DIALOG   = 'X'  
  234. *      DEVICE   = SCREEN  
  235.     EXCEPTIONS  
  236.       OTHERS   = 1.  
  237.   
  238. ENDFORM.                    " Form_Open  
  239. *&---------------------------------------------------------------------*  
  240. *&      Form  write_form  
  241. *&---------------------------------------------------------------------*  
  242. FORM WRITE_FORM USING    ELEMENT  
  243.                          WINDOW  
  244.                          TYPE.  
  245.   
  246.   CALL FUNCTION 'WRITE_FORM'  
  247.     EXPORTING  
  248.       ELEMENT = ELEMENT  
  249.       WINDOW  = WINDOW  
  250.       TYPE    = TYPE.  
  251.   
  252. ENDFORM.                    " write_form  
  253. *&---------------------------------------------------------------------*  
  254. *&      Form  FORM_CLOSE  
  255. *&---------------------------------------------------------------------*  
  256. FORM FORM_CLOSE.  
  257.   CALL FUNCTION 'CLOSE_FORM'  
  258.     EXCEPTIONS  
  259.       OTHERS = 1.  
  260. ENDFORM.                    " FORM_CLOSE  
  261.   
  262. *&---------------------------------------------------------------------*  
  263. *&      Form  CAL_DATA  
  264. *&---------------------------------------------------------------------*  
  265. FORM CAL_DATA .  
  266.   DESCRIBE TABLE I_TAB4 LINES RCOUNT.  
  267.   SCOUNT = RCOUNT.  
  268.   CONCATENATE '符合条件的记录数:' SCOUNT INTO LSTR.  
  269.   
  270.   IF I_TAB4[] IS INITIAL .  
  271.     MESSAGE I000(ZMSG) WITH '没找到对应的数据,请更改查询条件'.  
  272.     LEAVE LIST-PROCESSING .  
  273.   ENDIF.  
  274. ENDFORM.                    " CAL_DATA  
  275. *&---------------------------------------------------------------------*  
  276. *&      Form  EVENTS_BUILD  
  277. *&---------------------------------------------------------------------*  
  278. FORM EVENTS_BUILD .  
  279.   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'  
  280.     EXPORTING  
  281.       I_LIST_TYPE = 0  
  282.     IMPORTING  
  283.       ET_EVENTS   = I_EVENTS.  
  284. * 页眉  
  285.   READ TABLE I_EVENTS  WITH KEY NAME = 'TOP_OF_PAGE'  INTO W_EVENTS.  
  286.   IF SY-SUBRC = 0.  
  287.     MOVE 'ALV_TOP_OF_PAGE' TO W_EVENTS-FORM.  
  288.     MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.  
  289.   ENDIF.  
  290. * 页尾  
  291.   READ TABLE I_EVENTS  WITH KEY NAME = 'END_OF_LIST'  INTO W_EVENTS.  
  292.   IF SY-SUBRC = 0.  
  293.     MOVE 'ALV_END_OF_LIST' TO W_EVENTS-FORM.  
  294.     MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.  
  295.   ENDIF.  
  296. * 页跳转  
  297.   READ TABLE I_EVENTS WITH KEY NAME = 'USER_COMMAND'   INTO W_EVENTS.  
  298.   IF SY-SUBRC = 0.  
  299.     MOVE 'USER_COMMAND' TO W_EVENTS-FORM.  
  300.     MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.  
  301.   ENDIF.  
  302.   
  303. ENDFORM.                    " EVENTS_BUILD  
  304. *&--------------------------------------------------------------------*  
  305. *&      Form  ALV_END_OF_LIST  
  306. *&--------------------------------------------------------------------*  
  307. FORM ALV_TOP_OF_PAGE.  
  308.   
  309.   CLEAR: I_LIST_COMMENTS.  
  310.   W_LIST_COMMENTS-TYP = 'H'.  
  311.   W_LIST_COMMENTS-KEY = ''.  
  312.   W_LIST_COMMENTS-INFO = '  '.  
  313.   APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.  
  314.   CLEAR W_LIST_COMMENTS.  
  315.   
  316.   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  
  317.     EXPORTING  
  318.       IT_LIST_COMMENTARY = I_LIST_COMMENTS  
  319.       I_END_OF_LIST_GRID = 'X'.  
  320. ENDFORM.                    "ALV_TOP_OF_PAGE  
  321. *&--------------------------------------------------------------------*  
  322. *&      Form  ALV_END_OF_LIST  
  323. *&--------------------------------------------------------------------*  
  324. FORM ALV_END_OF_LIST.  
  325.   CLEAR: I_LIST_COMMENTS.  
  326.   W_LIST_COMMENTS-TYP = 'H'.  
  327.   W_LIST_COMMENTS-KEY = ''.  
  328.   W_LIST_COMMENTS-INFO = LSTR.  
  329.   APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.  
  330.   CLEAR W_LIST_COMMENTS.  
  331.   
  332.   W_LIST_COMMENTS-TYP = 'S'.  
  333.   W_LIST_COMMENTS-KEY = ''.  
  334.   W_LIST_COMMENTS-INFO = '    报表开发者:IT部--Jasson      重新开发日期:2011/07/29'.  
  335.   APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.  
  336.   CLEAR W_LIST_COMMENTS.  
  337.   
  338.   CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  
  339.     EXPORTING  
  340.       IT_LIST_COMMENTARY = I_LIST_COMMENTS  
  341.       I_END_OF_LIST_GRID = 'X'.  
  342. ENDFORM.                    "ALV_END_OF_LIST  
  343. *&---------------------------------------------------------------------*  
  344. *&      Form  LAYOUT_BUILD  
  345. *&---------------------------------------------------------------------*  
  346. FORM LAYOUT_BUILD .  
  347.   I_LAYOUT-ZEBRA                = 'X' .         " 显示界面成色带交替  
  348.   I_LAYOUT-DETAIL_POPUP         = 'X'.          "弹出详细信息窗口  
  349.   I_LAYOUT-INFO_FIELDNAME       = 'COLOR'.      "颜色值  
  350. *  I_LAYOUT-COLWIDTH_OPTIMIZE   = 'X'.          "优化列宽选项  
  351.   I_LAYOUT-DETAIL_INITIAL_LINES = 'X'.  
  352.   I_LAYOUT-DETAIL_TITLEBAR      = '出闸纸打印'.  
  353.   I_LAYOUT-NO_COLHEAD           =' '.  
  354. *  I_LAYOUT-BOX_FIELDNAME       = 'BOX' .       " 指明复选框  
  355.   W_REPID = SY-REPID.  
  356. ENDFORM.                    " LAYOUT_BUILD  
  357. *&---------------------------------------------------------------------*  
  358. *&      Form  DISPLAY_DATA  
  359. *&---------------------------------------------------------------------*  
  360. FORM DISPLAY_DATA .  
  361. *  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'  
  362.   CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'  
  363.     EXPORTING  
  364.       I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'           "用户触发事件  
  365.       I_CALLBACK_PF_STATUS_SET = G_STATUS                          "调用用户事件和按钮事件  
  366.       I_CALLBACK_PROGRAM       = W_REPID                  "当前程序  
  367.       IS_LAYOUT                = I_LAYOUT                 "子函数layout_build填充的格式定义  
  368.       IT_FIELDCAT              = I_FIELDCAT_ALV[]         "子函数fields填充的各列  
  369.       IT_EVENTS                = I_EVENTS[]  
  370.       I_SAVE                   = 'A'                      "保存变式  
  371.     TABLES  
  372.       T_OUTTAB                 = I_TAB4.                  "假设数据都在itab内表中  
  373.   
  374. ENDFORM.                    " DISPLAY_DATA  
  375. *-----------------------------------------------------------------------  
  376. *    FORM PF_STATUS_SET   加工具栏  
  377. *-----------------------------------------------------------------------  
  378. FORM STANDARD_02 USING  EXTAB TYPE SLIS_T_EXTAB.  
  379.   SET PF-STATUS 'STD' EXCLUDING EXTAB.  
  380. ENDFORM.                    "STANDARD_02  
  381. *&---------------------------------------------------------------------*  
  382. *&      Form  USER_COMMAND  
  383. *&---------------------------------------------------------------------*  
  384. FORM USER_COMMAND  USING I_UCOMM LIKE SY-UCOMM  
  385.                          SELFIELD TYPE SLIS_SELFIELD.  
  386.   CLEAR I_TAB5[].  
  387.   IF P_CHK = ''.  
  388.     LOOP AT I_TAB4 .  
  389.       IF I_TAB4-TKNUM <> ''.  
  390.         MOVE-CORRESPONDING I_TAB4 TO I_TAB5.  
  391.         I_TAB5-LFIMG = I_TAB4-LFIMG1.  
  392.         APPEND I_TAB5.  
  393.       ENDIF.  
  394.     ENDLOOP.  
  395. *    I_TAB5[] = I_TAB4[].  
  396.   ELSE.  
  397.     L_PROD_NUM1 = 0.  
  398.     L_PROD_NUM2 = 0.  
  399.     LOOP AT I_TAB4.  
  400.       I_TAB4-LFIMG = I_TAB4-LFIMG1.  
  401.       L_PROD_NUM1 = L_PROD_NUM1 + I_TAB4-LFIMG.  
  402.       L_PROD_NUM2 = L_PROD_NUM2 + I_TAB4-BRGEW.  
  403.     ENDLOOP.  
  404.     LOOP AT I_TAB4 .  
  405.       IF I_TAB4-TKNUM <> ''.  
  406.         I_TAB4-VEMNG = I_TAB4-LFIMG1.  
  407.         I_TAB4-BRGEW1 = L_PROD_NUM2.  
  408.         I_TAB4-VEMNG1 = L_PROD_NUM1.  
  409.         MOVE-CORRESPONDING I_TAB4 TO I_TAB5.  
  410.         I_TAB5-LFIMG = I_TAB4-LFIMG1.  
  411.         APPEND I_TAB5.  
  412.       ENDIF.  
  413.     ENDLOOP.  
  414.   ENDIF.  
  415.   CASE I_UCOMM.  
  416.     WHEN '&PRT'.  
  417.       IF I_TAB5[] IS INITIAL.  
  418.         MESSAGE I000(ZMSG) WITH '没有要打印的物料.'.  
  419.       ELSE.  
  420.         PERFORM FORM_OPEN.  
  421.         IF SY-SUBRC = 0.  
  422.           READ TABLE I_TAB0 INDEX 1.  
  423.           PERFORM WRITE_FORM USING 'TITLE1' 'HEADER' 'BODY '.  
  424.           PERFORM WRITE_FORM USING 'GENERAL_HEADER_DATA_TITLE'  'MAIN' 'BODY '.  
  425. *          SORT I_TAB5 BY MATNR.  
  426.           LOOP AT I_TAB5.  
  427.             W_LOOP1 = SY-TABIX.  
  428.             PERFORM WRITE_FORM USING 'DELIVERY_ITEM'  'MAIN' 'BODY '.  
  429.             SY-TABIX = W_LOOP3.  
  430.           ENDLOOP.  
  431.           PERFORM WRITE_FORM USING 'SEGMENT_OVERVIEW_TITLE '  'MAIN' 'BODY '.  
  432.           PERFORM WRITE_FORM USING 'NEW'  'MAIN' 'BODY '.  
  433.           PERFORM FORM_CLOSE.  
  434.         ELSE.  
  435.           PERFORM FORM_CLOSE.  
  436.         ENDIF.  
  437.       ENDIF.  
  438.     WHEN OTHERS.  
  439.   ENDCASE.  
  440. ENDFORM.                    "callback_ucomm  
  441. *&---------------------------------------------------------------------*  
  442. *&      Form  FIELDS_BUILD  
  443. *&---------------------------------------------------------------------*  
  444. FORM FIELDS_BUILD .  
  445.   
  446.   DATA TMP_POS TYPE I.  
  447.   REFRESH I_FIELDCAT_ALV.  
  448.   CLEAR   I_FIELDCAT.  
  449.   
  450.   TMP_POS = TMP_POS + 1.  
  451.   I_FIELDCAT-COL_POS = TMP_POS.  
  452.   I_FIELDCAT-FIELDNAME = 'TKNUM'.  
  453.   I_FIELDCAT-SELTEXT_L = '装运单号'.  
  454.   I_FIELDCAT-OUTPUTLEN = 10.  
  455.   I_FIELDCAT-NO_ZERO   = 'X'.  
  456.   I_FIELDCAT-KEY       = 'X'.  
  457.   IF P_CHK = 'X'.  
  458.     I_FIELDCAT-INPUT = 'X'.  
  459.   ENDIF.  
  460.   APPEND I_FIELDCAT TO I_FIELDCAT_ALV.  
  461.   CLEAR I_FIELDCAT.  
  462.   
  463.   TMP_POS = TMP_POS + 1.  
  464.   I_FIELDCAT-COL_POS = TMP_POS.  
  465.   I_FIELDCAT-FIELDNAME = 'MATNR'.  
  466.   I_FIELDCAT-SELTEXT_L = '物料编号'.  
  467.   I_FIELDCAT-OUTPUTLEN = 18.  
  468.   I_FIELDCAT-KEY       = 'X'.  
  469.   IF P_CHK = 'X'.  
  470.     I_FIELDCAT-INPUT = 'X'.  
  471.   ENDIF.  
  472.   APPEND I_FIELDCAT TO I_FIELDCAT_ALV.  
  473.   CLEAR I_FIELDCAT.  
  474.   
  475.   TMP_POS = TMP_POS + 1.  
  476.   I_FIELDCAT-COL_POS = TMP_POS.  
  477.   I_FIELDCAT-FIELDNAME = 'ARKTX'.  
  478.   I_FIELDCAT-SELTEXT_L = '物料名称'.  
  479.   I_FIELDCAT-OUTPUTLEN = 60.  
  480.   IF P_CHK = 'X'.  
  481.     I_FIELDCAT-INPUT = 'X'.  
  482.   ENDIF.  
  483.   APPEND I_FIELDCAT TO I_FIELDCAT_ALV.  
  484.   CLEAR I_FIELDCAT.  
  485.   
  486.   TMP_POS = TMP_POS + 1.  
  487.   I_FIELDCAT-COL_POS = TMP_POS.  
  488.   I_FIELDCAT-FIELDNAME = 'LFIMG1'.  
  489.   I_FIELDCAT-SELTEXT_L = '数量'.  
  490.   I_FIELDCAT-OUTPUTLEN = 12.  
  491.   I_FIELDCAT-NO_ZERO   = 'X'.  
  492.   IF P_CHK = 'X'.  
  493.     I_FIELDCAT-INPUT = 'X'.  
  494.   ENDIF.  
  495.   APPEND I_FIELDCAT TO I_FIELDCAT_ALV.  
  496.   CLEAR I_FIELDCAT.  
  497. *  
  498. *  TMP_POS = TMP_POS + 1.  
  499. *  I_FIELDCAT-COL_POS = TMP_POS.  
  500. *  I_FIELDCAT-FIELDNAME = 'VEMNG'.  
  501. *  I_FIELDCAT-SELTEXT_L = '实出数'.  
  502. *  I_FIELDCAT-OUTPUTLEN = 9.  
  503. *  I_FIELDCAT-NO_ZERO   = 'X'.  
  504. *  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.  
  505. *  CLEAR I_FIELDCAT.  
  506.   
  507.   TMP_POS = TMP_POS + 1.  
  508.   I_FIELDCAT-COL_POS = TMP_POS.  
  509.   I_FIELDCAT-FIELDNAME = 'BRGEW'.  
  510.   I_FIELDCAT-SELTEXT_L = '箱数'.  
  511.   I_FIELDCAT-OUTPUTLEN = 9.  
  512.   I_FIELDCAT-NO_ZERO   = 'X'.  
  513.   IF P_CHK = 'X'.  
  514.     I_FIELDCAT-INPUT = 'X'.  
  515.   ENDIF.  
  516.   APPEND I_FIELDCAT TO I_FIELDCAT_ALV.  
  517.   CLEAR I_FIELDCAT.  
  518.   
  519. ENDFORM.                    " FIELDS_BUILD  
  Date 2011.07.29
* Purpose :
* Modi Log: 2011.07.29  Gavin Create
* Modi Log: 2011.08.23  Gavin 出货数改为整数
* Modi Log: 2011.08.24  Gavin 出货数改为字符型,以便于报关修正
* Modi Log: 2011.08.25  Gavin 增加备注
* Modi Log: 2012.02.04  Gavin 增加名称栏位宽度
*----------------------------------------------------------------------
REPORT  ZVT003.
TABLES: VTTK,VTTP,VEKP,VEPO.
TYPE-POOLS: SLIS.
*--------------------------------
* Selection Screen
*--------------------------------
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:
  P_TKNUM LIKE VTTK-TKNUM OBLIGATORY  .  "SHIPMETN NO.
SELECTION-SCREEN END OF BLOCK B1.
* For Line Items
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
            P_CHK AS CHECKBOX DEFAULT '',
            P1 TYPE I DEFAULT 0,
            P2(50) TYPE C.
SELECTION-SCREEN END OF BLOCK B2.
*****************************************************************************
DATA: G_STATUS TYPE SLIS_FORMNAME VALUE 'STANDARD_02'.        "加工具栏

DATA:
      I_FIELDCAT_ALV    TYPE SLIS_T_FIELDCAT_ALV,
      I_FIELDCAT        TYPE SLIS_FIELDCAT_ALV,
      I_LAYOUT          TYPE SLIS_LAYOUT_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,
      W_REPID           LIKE SY-REPID.

DATA:
      W_LOOP        TYPE SY-TABIX,
L_PROD_NUM1   TYPE CO_PSMNG,
L_PROD_NUM2   TYPE  CO_PSMNG.
DATA: BEGIN OF I_TAB0 OCCURS 0,
        TKNUM    LIKE VTTK-TKNUM,
        ERDAT    LIKE VTTK-ERDAT,
        EXTI1    LIKE VTTK-EXTI1,
        EXTI2    LIKE VTTK-EXTI2,
      END OF I_TAB0.

DATA: BEGIN OF I_TAB1 OCCURS 0,
        TKNUM    LIKE VTTP-TKNUM,
        VBELN    LIKE LIPS-VBELN,
        MATNR    LIKE LIPS-MATNR,
        ARKTX    LIKE LIPS-ARKTX,
        LFIMG    LIKE LIPS-LFIMG,
        VPOBJKEY LIKE VEKP-VPOBJKEY,
      END OF I_TAB1.
DATA: BEGIN OF I_TAB2 OCCURS 0,
        VENUM    LIKE VEKP-VENUM,
        VPOBJKEY LIKE VEKP-VPOBJKEY,
        BRGEW    LIKE VEKP-BRGEW,
        VBELN    LIKE VEPO-VBELN,
        POSNR    LIKE VEPO-POSNR,
        MATNR    LIKE VEPO-MATNR,
        VEMNG    LIKE VEPO-VEMNG,
      END OF I_TAB2.
DATA: BEGIN OF I_TAB3 OCCURS 0,
        MATNR    LIKE LIPS-MATNR,
        BRGEW    LIKE VEKP-BRGEW,
        VEMNG    LIKE VEPO-VEMNG,
      END OF I_TAB3.

DATA: BEGIN OF I_TAB4 OCCURS 0,
        TKNUM    LIKE VTTP-TKNUM,
        MATNR    LIKE LIPS-MATNR,
        ARKTX    LIKE LIPS-ARKTX,
        LFIMG    TYPE I,"LIKE LIPS-LFIMG,
        VEMNG    TYPE I,"LIKE VEPO-VEMNG,
        BRGEW    TYPE I,"LIKE VEKP-BRGEW,
        VEMNG1   TYPE I,"LIKE VEPO-VEMNG,
        BRGEW1   TYPE I,"LIKE VEKP-BRGEW,
        LFIMG1(10) TYPE C,"LIKE LIPS-LFIMG,
      END OF I_TAB4.

DATA: BEGIN OF I_TAB5 OCCURS 0,
        TKNUM    LIKE VTTP-TKNUM,
        MATNR    LIKE LIPS-MATNR,
        ARKTX    LIKE LIPS-ARKTX,
        LFIMG    TYPE I,"LIKE LIPS-LFIMG,
        VEMNG    TYPE I,"LIKE VEPO-VEMNG,
        BRGEW    TYPE I,"LIKE VEKP-BRGEW,
        VEMNG1   TYPE I,"LIKE VEPO-VEMNG,
        BRGEW1   TYPE I,"LIKE VEKP-BRGEW,
      END OF I_TAB5.

DATA :P_COCO LIKE KNB1-BUKRS.
DATA :W_TOTAL(10) TYPE C.
DATA :W_LOOP1 LIKE SY-TABIX.
DATA :W_LOOP2 LIKE SY-TABIX.
DATA :W_LOOP3 LIKE SY-TABIX.
DATA SCOUNT(8).
DATA :RCOUNT LIKE SY-TABIX.
DATA LSTR(20).
DATA LSTR1(40).
DATA LSTR2(40).
DATA LSTR3(100).
DATA LSTR4(40).
DATA LSTR5(40).
*--------------------------------
* Initialization
*--------------------------------
INITIALIZATION.
*--------------------------------
* At Selection Screen PBO
*--------------------------------
AT SELECTION-SCREEN OUTPUT.
*--------------------------------
* Start of Selection
*--------------------------------
START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM PROCESS_DATA.
  PERFORM CAL_DATA.
  PERFORM EVENTS_BUILD.
  PERFORM LAYOUT_BUILD.
  PERFORM FIELDS_BUILD.
  PERFORM DISPLAY_DATA.

END-OF-SELECTION.
*--------------------------------
* Top of Page
*--------------------------------
TOP-OF-PAGE.
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
FORM GET_DATA.
*  主档
  SELECT K~TKNUM K~ERDAT K~EXTI1 K~EXTI2 INTO TABLE I_TAB0
     FROM VTTK AS K
     WHERE K~TKNUM = P_TKNUM.
*
  SELECT T~TKNUM P~VBELN P~MATNR P~ARKTX P~LFIMG INTO TABLE I_TAB1
    FROM VTTP AS T INNER JOIN LIPS AS P ON T~VBELN = P~VBELN
    WHERE T~TKNUM = P_TKNUM
    AND   P~LFIMG > 0 AND P~POSNR >= '900001' .

  L_PROD_NUM1 = 0.
  LOOP AT I_TAB1.
    W_LOOP = SY-TABIX.
    L_PROD_NUM1 = L_PROD_NUM1 + I_TAB1-LFIMG.
    I_TAB1-VPOBJKEY = I_TAB1-VBELN.
    MODIFY I_TAB1 INDEX W_LOOP.
    SY-TABIX = W_LOOP + 1.
  ENDLOOP.

* 取得出包装箱数
  SELECT K~VENUM K~VPOBJKEY K~BRGEW P~VBELN P~POSNR P~MATNR P~VEMNG
    INTO TABLE I_TAB2
    FROM VEKP AS K LEFT JOIN VEPO AS P ON K~VENUM = P~VENUM
    FOR ALL ENTRIES IN I_TAB1
    WHERE K~VPOBJKEY = I_TAB1-VPOBJKEY AND K~STATUS = '0020'.

  L_PROD_NUM2 = 0.
  LOOP AT I_TAB2.
    L_PROD_NUM2 = L_PROD_NUM2 + I_TAB2-BRGEW.
  ENDLOOP.

ENDFORM.                    "get_data
*&---------------------------------------------------------------------*
*&      Form  process_data
*&---------------------------------------------------------------------*
FORM PROCESS_DATA .
  LOOP AT I_TAB2.
    W_LOOP = SY-TABIX.
    I_TAB3-MATNR = I_TAB2-MATNR.
    I_TAB3-BRGEW = I_TAB2-BRGEW.
    I_TAB3-VEMNG = I_TAB2-VEMNG.
    COLLECT I_TAB3.
    SY-TABIX = W_LOOP + 1.
  ENDLOOP.

  LOOP AT I_TAB1.
    W_LOOP = SY-TABIX.
    I_TAB4-TKNUM = I_TAB1-TKNUM.
    I_TAB4-MATNR = I_TAB1-MATNR.
    I_TAB4-ARKTX = I_TAB1-ARKTX.
    I_TAB4-LFIMG = I_TAB1-LFIMG.
    COLLECT I_TAB4.
    SY-TABIX = W_LOOP + 1.
  ENDLOOP.
  SORT I_TAB3 BY MATNR.
*  SORT I_TAB4 BY MATNR.
  LOOP AT I_TAB4.
    W_LOOP = SY-TABIX.
    CLEAR I_TAB3.
    READ TABLE I_TAB3 WITH KEY MATNR = I_TAB4-MATNR BINARY SEARCH.
    IF SY-SUBRC = 0.
      I_TAB4-BRGEW  = I_TAB3-BRGEW.
      I_TAB4-VEMNG  = I_TAB3-VEMNG.              "输入前值
      I_TAB4-LFIMG  = I_TAB3-VEMNG.              "
      I_TAB4-BRGEW1 = L_PROD_NUM2.
      I_TAB4-VEMNG1 = L_PROD_NUM1.
    ENDIF.
    I_TAB4-LFIMG1  = I_TAB4-LFIMG.               "数量转成字符
    MODIFY I_TAB4 INDEX W_LOOP.
    SY-TABIX = W_LOOP + 1.
  ENDLOOP.
  I_TAB4-TKNUM = ''.
  I_TAB4-MATNR = ''.
  I_TAB4-ARKTX = ''.
  I_TAB4-BRGEW  = 0.
  I_TAB4-VEMNG  = 0.              "输入前值
  I_TAB4-LFIMG1 = '0'.              "
  I_TAB4-LFIMG  = 0.              "
  I_TAB4-BRGEW1 = 0.
  I_TAB4-VEMNG1 = 0.
  IF P_CHK = 'X'.
    DO P1 TIMES.
      APPEND I_TAB4.
    ENDDO.
  ENDIF.

ENDFORM.                    " process_data
*&---------------------------------------------------------------------*
*&      Form  Form_Open
*&---------------------------------------------------------------------*
FORM FORM_OPEN .
  CALL FUNCTION 'OPEN_FORM'
    EXPORTING
      FORM     = 'ZSHIPMENT_DOC2'
      LANGUAGE = SY-LANGU
      DIALOG   = 'X'
*      DEVICE   = SCREEN
    EXCEPTIONS
      OTHERS   = 1.

ENDFORM.                    " Form_Open
*&---------------------------------------------------------------------*
*&      Form  write_form
*&---------------------------------------------------------------------*
FORM WRITE_FORM USING    ELEMENT
                         WINDOW
                         TYPE.

  CALL FUNCTION 'WRITE_FORM'
    EXPORTING
      ELEMENT = ELEMENT
      WINDOW  = WINDOW
      TYPE    = TYPE.

ENDFORM.                    " write_form
*&---------------------------------------------------------------------*
*&      Form  FORM_CLOSE
*&---------------------------------------------------------------------*
FORM FORM_CLOSE.
  CALL FUNCTION 'CLOSE_FORM'
    EXCEPTIONS
      OTHERS = 1.
ENDFORM.                    " FORM_CLOSE

*&---------------------------------------------------------------------*
*&      Form  CAL_DATA
*&---------------------------------------------------------------------*
FORM CAL_DATA .
  DESCRIBE TABLE I_TAB4 LINES RCOUNT.
  SCOUNT = RCOUNT.
  CONCATENATE '符合条件的记录数:' SCOUNT INTO LSTR.

  IF I_TAB4[] IS INITIAL .
    MESSAGE I000(ZMSG) WITH '没找到对应的数据,请更改查询条件'.
    LEAVE LIST-PROCESSING .
  ENDIF.
ENDFORM.                    " CAL_DATA
*&---------------------------------------------------------------------*
*&      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 = 'TOP_OF_PAGE'  INTO W_EVENTS.
  IF SY-SUBRC = 0.
    MOVE 'ALV_TOP_OF_PAGE' TO W_EVENTS-FORM.
    MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
  ENDIF.
* 页尾
  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_TOP_OF_PAGE.

  CLEAR: I_LIST_COMMENTS.
  W_LIST_COMMENTS-TYP = 'H'.
  W_LIST_COMMENTS-KEY = ''.
  W_LIST_COMMENTS-INFO = '  '.
  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_TOP_OF_PAGE
*&--------------------------------------------------------------------*
*&      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-KEY = ''.
  W_LIST_COMMENTS-INFO = '    报表开发者:IT部--Jasson      重新开发日期:2011/07/29'.
  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
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_BUILD
*&---------------------------------------------------------------------*
FORM LAYOUT_BUILD .
  I_LAYOUT-ZEBRA                = 'X' .         " 显示界面成色带交替
  I_LAYOUT-DETAIL_POPUP         = 'X'.          "弹出详细信息窗口
  I_LAYOUT-INFO_FIELDNAME       = 'COLOR'.      "颜色值
*  I_LAYOUT-COLWIDTH_OPTIMIZE   = 'X'.          "优化列宽选项
  I_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
  I_LAYOUT-DETAIL_TITLEBAR      = '出闸纸打印'.
  I_LAYOUT-NO_COLHEAD           =' '.
*  I_LAYOUT-BOX_FIELDNAME       = 'BOX' .       " 指明复选框
  W_REPID = SY-REPID.
ENDFORM.                    " LAYOUT_BUILD
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM DISPLAY_DATA .
*  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'           "用户触发事件
      I_CALLBACK_PF_STATUS_SET = G_STATUS                          "调用用户事件和按钮事件
      I_CALLBACK_PROGRAM       = W_REPID                  "当前程序
      IS_LAYOUT                = I_LAYOUT                 "子函数layout_build填充的格式定义
      IT_FIELDCAT              = I_FIELDCAT_ALV[]         "子函数fields填充的各列
      IT_EVENTS                = I_EVENTS[]
      I_SAVE                   = 'A'                      "保存变式
    TABLES
      T_OUTTAB                 = I_TAB4.                  "假设数据都在itab内表中

ENDFORM.                    " DISPLAY_DATA
*-----------------------------------------------------------------------
*    FORM PF_STATUS_SET   加工具栏
*-----------------------------------------------------------------------
FORM STANDARD_02 USING  EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STD' EXCLUDING EXTAB.
ENDFORM.                    "STANDARD_02
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
FORM USER_COMMAND  USING I_UCOMM LIKE SY-UCOMM
                         SELFIELD TYPE SLIS_SELFIELD.
  CLEAR I_TAB5[].
  IF P_CHK = ''.
    LOOP AT I_TAB4 .
      IF I_TAB4-TKNUM <> ''.
        MOVE-CORRESPONDING I_TAB4 TO I_TAB5.
        I_TAB5-LFIMG = I_TAB4-LFIMG1.
        APPEND I_TAB5.
      ENDIF.
    ENDLOOP.
*    I_TAB5[] = I_TAB4[].
  ELSE.
    L_PROD_NUM1 = 0.
    L_PROD_NUM2 = 0.
    LOOP AT I_TAB4.
      I_TAB4-LFIMG = I_TAB4-LFIMG1.
      L_PROD_NUM1 = L_PROD_NUM1 + I_TAB4-LFIMG.
      L_PROD_NUM2 = L_PROD_NUM2 + I_TAB4-BRGEW.
    ENDLOOP.
    LOOP AT I_TAB4 .
      IF I_TAB4-TKNUM <> ''.
        I_TAB4-VEMNG = I_TAB4-LFIMG1.
        I_TAB4-BRGEW1 = L_PROD_NUM2.
        I_TAB4-VEMNG1 = L_PROD_NUM1.
        MOVE-CORRESPONDING I_TAB4 TO I_TAB5.
        I_TAB5-LFIMG = I_TAB4-LFIMG1.
        APPEND I_TAB5.
      ENDIF.
    ENDLOOP.
  ENDIF.
  CASE I_UCOMM.
    WHEN '&PRT'.
      IF I_TAB5[] IS INITIAL.
        MESSAGE I000(ZMSG) WITH '没有要打印的物料.'.
      ELSE.
        PERFORM FORM_OPEN.
        IF SY-SUBRC = 0.
          READ TABLE I_TAB0 INDEX 1.
          PERFORM WRITE_FORM USING 'TITLE1' 'HEADER' 'BODY '.
          PERFORM WRITE_FORM USING 'GENERAL_HEADER_DATA_TITLE'  'MAIN' 'BODY '.
*          SORT I_TAB5 BY MATNR.
          LOOP AT I_TAB5.
            W_LOOP1 = SY-TABIX.
            PERFORM WRITE_FORM USING 'DELIVERY_ITEM'  'MAIN' 'BODY '.
            SY-TABIX = W_LOOP3.
          ENDLOOP.
          PERFORM WRITE_FORM USING 'SEGMENT_OVERVIEW_TITLE '  'MAIN' 'BODY '.
          PERFORM WRITE_FORM USING 'NEW'  'MAIN' 'BODY '.
          PERFORM FORM_CLOSE.
        ELSE.
          PERFORM FORM_CLOSE.
        ENDIF.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "callback_ucomm
*&---------------------------------------------------------------------*
*&      Form  FIELDS_BUILD
*&---------------------------------------------------------------------*
FORM FIELDS_BUILD .

  DATA TMP_POS TYPE I.
  REFRESH I_FIELDCAT_ALV.
  CLEAR   I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'TKNUM'.
  I_FIELDCAT-SELTEXT_L = '装运单号'.
  I_FIELDCAT-OUTPUTLEN = 10.
  I_FIELDCAT-NO_ZERO   = 'X'.
  I_FIELDCAT-KEY       = 'X'.
  IF P_CHK = 'X'.
    I_FIELDCAT-INPUT = 'X'.
  ENDIF.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'MATNR'.
  I_FIELDCAT-SELTEXT_L = '物料编号'.
  I_FIELDCAT-OUTPUTLEN = 18.
  I_FIELDCAT-KEY       = 'X'.
  IF P_CHK = 'X'.
    I_FIELDCAT-INPUT = 'X'.
  ENDIF.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'ARKTX'.
  I_FIELDCAT-SELTEXT_L = '物料名称'.
  I_FIELDCAT-OUTPUTLEN = 60.
  IF P_CHK = 'X'.
    I_FIELDCAT-INPUT = 'X'.
  ENDIF.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'LFIMG1'.
  I_FIELDCAT-SELTEXT_L = '数量'.
  I_FIELDCAT-OUTPUTLEN = 12.
  I_FIELDCAT-NO_ZERO   = 'X'.
  IF P_CHK = 'X'.
    I_FIELDCAT-INPUT = 'X'.
  ENDIF.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.
*
*  TMP_POS = TMP_POS + 1.
*  I_FIELDCAT-COL_POS = TMP_POS.
*  I_FIELDCAT-FIELDNAME = 'VEMNG'.
*  I_FIELDCAT-SELTEXT_L = '实出数'.
*  I_FIELDCAT-OUTPUTLEN = 9.
*  I_FIELDCAT-NO_ZERO   = 'X'.
*  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
*  CLEAR I_FIELDCAT.

  TMP_POS = TMP_POS + 1.
  I_FIELDCAT-COL_POS = TMP_POS.
  I_FIELDCAT-FIELDNAME = 'BRGEW'.
  I_FIELDCAT-SELTEXT_L = '箱数'.
  I_FIELDCAT-OUTPUTLEN = 9.
  I_FIELDCAT-NO_ZERO   = 'X'.
  IF P_CHK = 'X'.
    I_FIELDCAT-INPUT = 'X'.
  ENDIF.
  APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
  CLEAR I_FIELDCAT.

ENDFORM.                    " FIELDS_BUILD


    接着我们再来回顾一下se41.本程式用到的如下:

     那么se71是否可以再看看它的设置。如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值